{"_id":"@senomas/pi-git-hat","_rev":"31-0ed33bc5f2156a6849128d270c44f48a","name":"@senomas/pi-git-hat","dist-tags":{"latest":"1.0.0"},"versions":{"0.1.0":{"name":"@senomas/pi-git-hat","version":"0.1.0","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.1.0","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"1ee627c38f49475d11b3bbe073b69b1b4de4b2b1","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.1.0.tgz","fileCount":11,"integrity":"sha512-FyHW3Ia1M7eoGNNvdx1NzD/QoktIlWuQ2z8MRdK9URRBrCZXGBsbfSLyxwz6O26GVuMKSIrKWv/Zu5PQAPG/hA==","signatures":[{"sig":"MEUCIFhAMm7I+qAVy+kh80SG4+eq7zC/+12X8Tk9I17FhZ12AiEA7I/Mo7m4MtaqRsoR060/gFrZdqrezAF+NVge/t042sg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63612},"type":"module","gitHead":"990c7d7e0952f576bc2a22fb2ddb6e7b3f77c02d","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.1.0_1780900438123_0.8683110203901261","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@senomas/pi-git-hat","version":"0.2.0","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.2.0","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"c9469e5cf763beb690fbdc38cb6526e3c38314d4","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.2.0.tgz","fileCount":11,"integrity":"sha512-DUG9EFYBy0H9Ms1BystiHKw5m3QmnF3byE8n/aD/j/KU/T6n8Rua+xcoJgnsjg+GL8oR17ufb7bsa6kdKEQcHQ==","signatures":[{"sig":"MEQCIHnpHGDq1kkw0FmSTgHS5bOdsAiogSmBzGXEbTZ+eVsIAiAn1Kt+13tjehJGivk9COaQnaRFHwmgY3CNRRqav0ilAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63526},"type":"module","gitHead":"7f852fb37f4a2b513d1bb86434fc70bd5b942d73","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.2.0_1780907258169_0.5475496509409925","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@senomas/pi-git-hat","version":"0.2.1","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.2.1","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"7d2b33aafb250bbb5cee79705e6bfffdf0c646e9","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.2.1.tgz","fileCount":11,"integrity":"sha512-C0qhw0M3nrbqyAkDfPbLavipy2XuoFAMfXVp/hm9cR5fZYiSWJSSlzwf0yE8j4cO0YHdKvfkd86ep1Q5+RFsIw==","signatures":[{"sig":"MEQCIDIBAl8MeNiEqT1TX2OHOhDtD4vean9sfV2/h8Kg3PUtAiACbxdaTVLyY6iBsy8y5ke4Y1IAvkukeQVrC7aFtJrSbw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63823},"type":"module","gitHead":"c31b014f26aa04d0b242c9c9be412ca43550b225","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.2.1_1780931041382_0.7298343763040092","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@senomas/pi-git-hat","version":"0.2.2","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.2.2","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"4ede861a7346a6651cdc6b1058255a10c99f5f41","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.2.2.tgz","fileCount":12,"integrity":"sha512-VZI5ZOryEKc3QBDDqAAxZSKwx3MJ9FSAXMlgLLg07JX9MSachJyUvU3Yadk0zAqAF1jcGlYo4yuuq5MQRSoDfA==","signatures":[{"sig":"MEQCICpSpZl3vjJwaloWCJ1TZo0ALn7s/LbpdmjoYujhhYKMAiB0ke8dzpqVMUwgLmcAvGqLk3kgxo5x96ujWe4UmlfxJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64916},"type":"module","gitHead":"19b3fc2890eb7565b415b0a65bea7db1d80c24a2","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.2.2_1780933528918_0.3027855779852051","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@senomas/pi-git-hat","version":"0.2.3","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.2.3","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"92db0f0a137b6d8fd15df6d19161c9bae638c1c5","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.2.3.tgz","fileCount":12,"integrity":"sha512-PMZWcwFO1reJeggqwMhYJWwTQUKPOQEpKVSuGyPSvpBmBCnr5dgbxK4BhEKZKbVBx6CzjWRl8MxURDaB6qwKdw==","signatures":[{"sig":"MEYCIQCE6hmUii2dGOY2vZo1Opa17tKrAD+0P5Pfz3usZCK6agIhALzNwRzwfwZGtA0d4KMGOhYqYWhizTmI15XhkA9wviuE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68470},"type":"module","gitHead":"8c27bc404a5143dd89acaf1225e81435d999a1f0","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.2.3_1780935154742_0.5362433763309207","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@senomas/pi-git-hat","version":"0.2.5","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.2.5","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"07bcbefb226c3b95fdcf4841455abcb1b62ac2f0","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.2.5.tgz","fileCount":13,"integrity":"sha512-3cs7qHAH1LFmmOI2ega4pO7rSnyVgyDzvOAxW7IQb+Y2RA8IzR0K9SirgfPQM7VEPud2Je8plSd6clq4c9wPDQ==","signatures":[{"sig":"MEYCIQCCMyZE/Xpr32qOLRdEXWGpP9IVMKpVdqpTva3QnRIltAIhAK2wn7LzvL83Qr3VMqe0CuunBnkWIRn/4WV5yczY9Z1l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88261},"type":"module","gitHead":"1a53fc2c367bf7902609f3e0321c7621e3ecd124","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.2.5_1780958903581_0.522965382793996","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@senomas/pi-git-hat","version":"0.2.6","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.2.6","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"928f3bb749d2b36a4179c3f1c95d3d63c9ffe05a","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.2.6.tgz","fileCount":21,"integrity":"sha512-9MDcohZELzs25aX5So/oiSdMiGtioMzMNnsB01hnzE1dBOvZuaYjeHxcyDaNWe42SAcJeEh5jPWm+2QWhKwMHw==","signatures":[{"sig":"MEUCIFeXrDdfUyhvfY1T5ti0dwrVnOZnOtS2EUEv6WgHld7uAiEAuUGGekTfIM/ufhrKU/7mmNzq9gooXd5nsEmPERLyj6Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97744},"type":"module","gitHead":"9bc8654dd5456779064078fb85f461f49f399f34","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.2.6_1780970012264_0.7311591043789423","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@senomas/pi-git-hat","version":"0.2.7","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.2.7","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"28300b95fa89b3b0b0da5c0d682d20357ea2149a","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.2.7.tgz","fileCount":21,"integrity":"sha512-+3y0lMDypj1f6lLLZBFrztvt5BWX0TWkVU8omAqFwPgjnkKLnXlIFtGC4r8Xm3mFH0NsFknNVT4Yrd1y32oz3Q==","signatures":[{"sig":"MEUCIQDUNuUJ3AEut01WwekZmOQOTLEsz5rdDfISVL7OUZOcvwIgabcLv1FfifznhCR+ert5Sq4joz6qFZXdzb196zBjwr0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97759},"type":"module","gitHead":"25d733b2af4e567a6b33a534882440ad92f08870","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.2.7_1780970688265_0.13279623724576672","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@senomas/pi-git-hat","version":"0.2.9","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.2.9","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"1da7ef5698d311bd512b5f50ec1907c558027a65","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.2.9.tgz","fileCount":21,"integrity":"sha512-hXh9+F9pob811jQp8YBnszxAN9lbPZChCTXSTl+TFyqJNvdGhgJ0vP6mfqcK7paN6fZ3AaPKluNQf+/+Za/Ssw==","signatures":[{"sig":"MEQCIC5rWiV+ECboisw/g71TbxgzCqmkygK4XDzyAxy1pe7lAiAxoiHzWNtVs2Zcru7zU0rGTrBASdGycTk64aZjr1sGqw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99774},"type":"module","gitHead":"53216ef573e7f1c2b91599b0e7565907f15b8414","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.2.9_1781437779811_0.9437518431660776","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@senomas/pi-git-hat","version":"0.3.0","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.0","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"98937555aceb05d242ebbb053a3d67770cc641fc","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.0.tgz","fileCount":21,"integrity":"sha512-n/bFsFk7jMJxtLO6IIiG/Gzm5/l2FNSfWFztt4sqEetSKKAT6b2lA/FR364of0qEejsDGUhb8XqCE6lDpD0wSg==","signatures":[{"sig":"MEQCIDzSgokmOFwmpzLlSjPk7MXyztVgPQTV79sS+BH8VZasAiBaWyECokJTi3okJnyM2m2jgPOiftCm471O+kfZ8xcRWA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100194},"type":"module","gitHead":"6000421a2de240082b341d64ee4f3f56a407284a","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.0_1781608805281_0.34819439044238987","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@senomas/pi-git-hat","version":"0.3.1","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.1","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"1480336d0869d5d8738032ee59339eaf45c4a20a","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.1.tgz","fileCount":21,"integrity":"sha512-wv8zJLah1O3SHaToe5D/yMP132i27cWacYJzKcNHw7l0WOZtvRk6cSTct8x6rHEgaCIIzPwWiA0wen2i7gseZg==","signatures":[{"sig":"MEQCIAfkIzJh1RRVvmQgBuAPkAQ80dIdGOGhBoYBM8g3eyosAiBoTv0gocTf6LB82v/hQ8g0CdZui0qPFBIw4xpMTHd9fg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103731},"type":"module","gitHead":"a3c1d4c22a42d926bda055c60e7a3df7710bd21f","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.1_1781668956730_0.9925438504842841","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@senomas/pi-git-hat","version":"0.3.3","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.3","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"c5d3314fea0dffd10ac098d6f30e835c8a8f930d","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.3.tgz","fileCount":21,"integrity":"sha512-QWg/o7d6knUcmbGBqdqJgnXQGRKefpzoWrEwFAb+arugSOEgyy5q9jP9nXkKONwVvCceuPFSwTwqvwHQEfr30Q==","signatures":[{"sig":"MEUCIC/jcNm5bSxpQIVFHudLlNMMCbtxQUGzEgJ4VachkfIHAiEAvKZd/fpFrTATYcxKQ5GgcXDMwNUETrWYGAvLK/Rmm3I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105433},"type":"module","gitHead":"c12f14bc65e2ba7c6747e9ce55fe77de0ddf0a50","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.3_1781743693075_0.9602581058305084","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@senomas/pi-git-hat","version":"0.3.4","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.4","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"12310fd55257da84e497c905357dcfddaee0a3cf","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.4.tgz","fileCount":21,"integrity":"sha512-xld+o+TbtRFsnW6gZfSH/pDFUSKXTneVzGjDLqeukX89LIQ1XonLlQ3K603z5/E/lOCpe2+KRcFqP+W648AWgw==","signatures":[{"sig":"MEYCIQCJgku0t1KkTEfLQX5pEjLbnKk6qKetwwF3bZi1DW+1ggIhAPipBi+fXVNBmiS3q5mOAAI1SHIsrJY43gig5YvZhY67","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106697},"type":"module","gitHead":"15d5dff6f690449607c6dcfcf311e2461c5b8b0c","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.4_1781745712902_0.08835780265011439","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@senomas/pi-git-hat","version":"0.3.5","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.5","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"118a2b2a307d39690c515d1ccaf7da2242955c88","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.5.tgz","fileCount":21,"integrity":"sha512-Xo1223kdFadI2RqFJW3T3JfSKnP8RpozLM9+ZtqR5AOApBJbZeN4JGnAz0NXrZjkgNZf/saH0YarRWBcSQJoNQ==","signatures":[{"sig":"MEYCIQDoz3/fNO77k6bQhxCWHDrmDAKI6tFwTTN51mwB9A7FfAIhANeAhvpUDF2h2wNCVnzYosH/YKL+9L/GbTDMHRL0YtGJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104714},"type":"module","gitHead":"85816a19ce0f7bb2bf692fa101444f6ad5096ec7","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.5_1781836196752_0.038467718220017266","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@senomas/pi-git-hat","version":"0.3.6","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.6","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"f46c121396858e7a6a0732b717055b35f4ed4bb9","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.6.tgz","fileCount":21,"integrity":"sha512-ByoyAWY/+RQq6WH63WbkHcpapJiLeX4Gwx1z4jK5rJN68cp4VHA250nxZ5CD4QEGykNXaPUOoTE5O4yVcqfHmg==","signatures":[{"sig":"MEQCIHYp6YqlV+UKCsTi7jMXMzjPfVkabMqAt+cvhpKC1bkPAiBNc+t+bjnsrn0+Q8EQU06jKrqM3IWXrjfVQLQYMkt5Nw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105927},"type":"module","gitHead":"9d848889e6d9784f19c8cf1769be3517cd49172d","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.6_1781850728845_0.35734210442735304","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@senomas/pi-git-hat","version":"0.3.7","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.7","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"85e4f45fd28561d07750209a14f57ef8fdb02c96","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.7.tgz","fileCount":21,"integrity":"sha512-+379bhDYsBUHyzGaMedz+YJh/ud6fbkiMHA8ei4lUaWK0deAKAYVxZrtpvzrSAlaYltZt/M2mFlm7ePT5Lpk8g==","signatures":[{"sig":"MEUCIQDcptL8M7DmOi3RjFw0KW/nt75ul17+Iozqz7RpHX8NCgIgboFSI3K/duVyGV4T/irfn4HJ0oPbZFkyXtu8jTWDLUA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106178},"type":"module","gitHead":"3e9b6becd3772c704a2102b3c991259b892a360a","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.7_1781855452695_0.7640650057931371","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"@senomas/pi-git-hat","version":"0.3.8","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.8","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"bca01862d9a9f0898a7d2cac2caef45b44709d71","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.8.tgz","fileCount":21,"integrity":"sha512-b1mtVzuk4XZxEgF97/nnIOu4xKeGoDlKz1BBG4Yp8eRpiWBNPpnLwmxsDz1m9yR+IxQIkv1C53gIUtzpCtXlKw==","signatures":[{"sig":"MEYCIQCIy+ixO2+HZLVuaWLGMzKydN1DhPDrmaTh/08zbhUamQIhALWdURLL+0r74w+Z34CtXvxKTSi3XkqJb2MvgnoN4UrI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114883},"type":"module","gitHead":"8ed758af6ff07ef923e83e87aa4c7ebd8605611a","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.8_1782029976038_0.3535926963672962","host":"s3://npm-registry-packages-npm-production"}},"0.3.9":{"name":"@senomas/pi-git-hat","version":"0.3.9","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.9","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"86a391550f27b8fdc7b85a545cadaeaa53e5f6b7","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.9.tgz","fileCount":21,"integrity":"sha512-GlvwuvfjunrCtLprWTsEyzYePYHB8T0uiS79SV+cN8+i2UKIU56nnqzRHei7hx89WK+vtk3Jhr/wBPTVGrz2xg==","signatures":[{"sig":"MEUCIDOYbrMwqVqS3xkiEHPghBD6pp9tKpoYuBDup/Pp8LZDAiEArK5S8+VjOrK5CC8r3M8PuhVu/UqpQmFC9ODNNMRcdJ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123375},"type":"module","gitHead":"e30e0ede0e51a93198b20eaa42e1e72b6e72ec8d","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.9_1782107855308_0.5492603065791619","host":"s3://npm-registry-packages-npm-production"}},"0.3.10":{"name":"@senomas/pi-git-hat","version":"0.3.10","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.10","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"6a09d59db898582ca6ed52a2bf99df9a794270a6","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.10.tgz","fileCount":21,"integrity":"sha512-h7ZU6MrsKYDNupezS5QoIVZ/acrGzNRCPBjLDo0MvTqAhETinemmKRjrQBDbacxLis9c8bGKcofmdP919q7GpQ==","signatures":[{"sig":"MEQCIGWzzpB8yiJKJdO/rPQDBwpH78AolBCMxolqTVI9BrCJAiB3MVOTl+rs3FQmqk/S4ne9dekDFz/SXowBRF9znXZiwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123691},"type":"module","gitHead":"9caf6271b90860ff07c62ee651f55b6c8384a936","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.10_1782219729070_0.010235973467290327","host":"s3://npm-registry-packages-npm-production"}},"0.3.11":{"name":"@senomas/pi-git-hat","version":"0.3.11","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.11","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"9a760da36d8a6b7f9902372f3bcf47e70cdfb983","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.11.tgz","fileCount":21,"integrity":"sha512-DyVtCE8sCfgxzCIlasv9s1Yn/0Wrrl6p5g39QwFxfyqhfglUsLQNsT4NI54prflCOizTmHFNUbD7a4i1xSdm/w==","signatures":[{"sig":"MEUCIQCRsuOvpjedQ2rStNSDX9WpjKR5dbXFwHwCBj0Y9w1paQIgDxUtOb/A4R5dq5gWZeRVlbNapmkV9cebBB70G1/j8JU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123989},"type":"module","gitHead":"d887c030ecd0dcc270227119cdd313ee26d397ce","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.11_1782538602169_0.9055068908982724","host":"s3://npm-registry-packages-npm-production"}},"0.3.12":{"name":"@senomas/pi-git-hat","version":"0.3.12","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.12","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"4d2c7950235e24b957f3819acf8d3ee873a1f05e","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.12.tgz","fileCount":43,"integrity":"sha512-sIqmhMT8xRpkMEVdkDYGFd3Wae4XT+E27kh+YFX6t5gQHK2TF1om9cNU4QWOqyNEkX9BK5SfrWEavZt8zOtHwg==","signatures":[{"sig":"MEQCIBjvhb682VjFQiyRJexBs5woP0yL6dpzaWZeGdpMPIVyAiB2uUkEk2Op9+5+ZLiWTozXv3q1eNGW2dZd8t8x8y7KFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":329682},"type":"module","gitHead":"36e879c9cab34bf9db2c310c68401446d7c0b744","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.12_1782594937080_0.1680890013589278","host":"s3://npm-registry-packages-npm-production"}},"0.3.13":{"name":"@senomas/pi-git-hat","version":"0.3.13","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.13","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"2015be75e26fbafa4fc13ab0631c73aabe6353a6","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.13.tgz","fileCount":43,"integrity":"sha512-2kgeXNhJGVgXKDELq590bzgBieC199hSAYHhqEVnFFR8jqmXVtmh819AEIDqGixefKcUZI1qkpPJfTHQZE4u2g==","signatures":[{"sig":"MEUCIQClG6GO9cbET/SQM1Xq3bCy+QWifg0OSyZTIf7QtRYMgQIgWMtO4El8TgtuB0RBHbTfmlC2CtKciExVzgXud4Ucq/c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":323775},"type":"module","gitHead":"2f513bd1f5e717bcad32587e99798a23a08782d8","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.13_1782619647313_0.41103159006517975","host":"s3://npm-registry-packages-npm-production"}},"0.3.14":{"name":"@senomas/pi-git-hat","version":"0.3.14","keywords":["pi-package","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.14","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts"]},"dist":{"shasum":"923ccf86b2b8ad77ad9adccf9a64b8be8175d70b","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.14.tgz","fileCount":76,"integrity":"sha512-AQQIpwovKVbfJ2vXAUGYXXcZL18WvddPgHuiN/GPgctVwcdfCafDraQeQ2aVwOR1+oUZl/Kb7yVC7MJERYEodg==","signatures":[{"sig":"MEUCIQCi1D1FOmYsJbIhn7DCeLivWBisAnpsXqsrkGuaSJ1SQAIgHw9i8rg3DCj7bs/Ir1Av0gfKCdZ/jt0YNqxZ+GS04kM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":586274},"type":"module","gitHead":"f586574afab5b3fe21adc886ee14e2832e464c34","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{"marked":"^18.0.5"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.9"},"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.14_1782696928551_0.3027866750731989","host":"s3://npm-registry-packages-npm-production"}},"0.3.15":{"name":"@senomas/pi-git-hat","version":"0.3.15","keywords":["pi-package","pi-extension","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.15","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts","./extensions/hat-host-tools/index.ts"]},"dist":{"shasum":"0b02e7ab78761fd4bf2bb9364904fd952055dac1","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.15.tgz","fileCount":97,"integrity":"sha512-oRYB+1mJC0+/Yhu+OiQ5oGk6PUfsoLwOgyfjaycfzcTAFbYtQvXn+iTnpXBqeQ228ji9pvRWLqrh2gVQzZir9Q==","signatures":[{"sig":"MEYCIQDB26HXyjpKQzrxgP4cu2VjDNjh/a1dxkLSCwp7p0IumgIhAKg3AgKp83mO06ToWZsP5HcTIotzFYr5Fb18pZk06JyB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":829652},"type":"module","gitHead":"3df01ed117c4cfeb1f56452f7e42b66810d7ae2c","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{"marked":"^18.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","vitest":"^4.1.9","typescript":"^6.0.3"},"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.15_1782872613738_0.04944668419923537","host":"s3://npm-registry-packages-npm-production"}},"0.3.16":{"name":"@senomas/pi-git-hat","version":"0.3.16","keywords":["pi-package","pi-extension","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.16","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts","./extensions/hat-host-tools/index.ts"]},"dist":{"shasum":"a8355d681ce96f16328f823530d38b3c062383ea","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.16.tgz","fileCount":97,"integrity":"sha512-v6iu1o4Q+8yiTmb3U5QXvYrT7P1E9SWpcaCfFloYrGkeVc5mU/v1pqjcoPpSCjnfsdgXqgyFklqWyyRgsalm2g==","signatures":[{"sig":"MEUCIQC5Ucdqrb32543kzEJVx/bTYXoHOv0rA8mTPxI3fRu6JwIgL6vdPmCAZ13JkDNMRPaLwSp76J0mkZHIn8590CYUwZw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":830288},"type":"module","gitHead":"36224cfaf0cf9fc9949e7e478adcd7dea44e0437","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"repository":{"url":"git+https://codeberg.org/senomas/git-hat.git","type":"git"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{"marked":"^18.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","vitest":"^4.1.9","typescript":"^6.0.3"},"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.16_1782947915400_0.8373295629970954","host":"s3://npm-registry-packages-npm-production"}},"0.3.17":{"name":"@senomas/pi-git-hat","version":"0.3.17","keywords":["pi-package","pi-extension","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.17","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts","./extensions/hat-host-tools/index.ts"]},"dist":{"shasum":"57684f04eeefae06b5d47aa8108aa2e83416a023","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.17.tgz","fileCount":97,"integrity":"sha512-8hoSDwj7nRTT7P0zcQ8xIVPU5tU/ReZTqAQ0jOUV8Gjg8yH5SsmflhM7tueYgRloQMEuc+14jFsbY7vliE5U+A==","signatures":[{"sig":"MEUCIHQ06EGcrpb6vJC7DIvAGTzCi8TYyKqhUVcxPIj6q0KYAiEAo77A+t8ullAHQL6wqt47KeNv0+MFCv3x0zsUdhPCRdw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":858194},"type":"module","gitHead":"03be893a9b587b552ef071ece197334e9cb25dff","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"repository":{"url":"git+https://codeberg.org/senomas/git-hat.git","type":"git"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{"marked":"^18.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","vitest":"^4.1.9","typescript":"^6.0.3"},"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.17_1783040377802_0.30104555592746984","host":"s3://npm-registry-packages-npm-production"}},"0.3.18":{"name":"@senomas/pi-git-hat","version":"0.3.18","keywords":["pi-package","pi-extension","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.18","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts","./extensions/hat-host-tools/index.ts"]},"dist":{"shasum":"3272eedc9349b4b8d07a10497813d44c4a3cb391","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.18.tgz","fileCount":99,"integrity":"sha512-/pxs434z0YNPCZsAWAC58KlUlqIEl+gu4rTwPyaFxzBmIfYJ58v/2pxq8JMyTvmXWVM6NfC7VEC5hF/umclErQ==","signatures":[{"sig":"MEYCIQDOdYMdSXLFUdK1P3ZYDEVTQbLlcfa1h4Hf9FDTn3DH6AIhAO27UhJ0xQ1CqDGLcR3jN6YK3po3rGQ7sxo6Okx6Blgf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":885452},"type":"module","gitHead":"c4ca4a3fb3803cca555849124e46ce87ee3e8989","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"repository":{"url":"git+https://codeberg.org/senomas/git-hat.git","type":"git"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{"marked":"^18.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","vitest":"^4.1.9","typescript":"^6.0.3"},"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.18_1783309893962_0.15055749541859087","host":"s3://npm-registry-packages-npm-production"}},"0.3.19":{"name":"@senomas/pi-git-hat","version":"0.3.19","keywords":["pi-package","pi-extension","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.19","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts","./extensions/hat-host-tools/index.ts"]},"dist":{"shasum":"bf439f3bd906b8a04e69981378c08c41664b3017","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.19.tgz","fileCount":102,"integrity":"sha512-OEm4jXMx5Az1y4dwP7Jm8qYNrvh72w9tSYwdBhmrAtNE6vftacDunrkoBmm7EyYIU3GsqHXhP02l5b4HP00hTQ==","signatures":[{"sig":"MEUCIFQrLl58wgbuIiKo5poFpZ+OL+KTcsVCELOCikBqCcZ8AiEA2KllMaISDp5Ern/bXposSxZxQicOBkQVP+skgjkKsEw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":915727},"type":"module","gitHead":"7bd948f25ba1f13f96fb29014756af8ef3a3506b","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"repository":{"url":"git+https://codeberg.org/senomas/git-hat.git","type":"git"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{"marked":"^18.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.1.0"},"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.19_1783357387565_0.5447654050028905","host":"s3://npm-registry-packages-npm-production"}},"0.3.20":{"name":"@senomas/pi-git-hat","version":"0.3.20","keywords":["pi-package","pi-extension","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.20","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts","./extensions/hat-host-tools/index.ts"]},"dist":{"shasum":"db9b935cf1ffd70287c8fc1c7306e48638392f21","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.20.tgz","fileCount":106,"integrity":"sha512-5GeYTBc+Vw+3NviL8eIEYzdHIBI1Rw6QNakOY+Zzc6c1TNHn5/Hn7MwNso3qbNZlwRiqbAJCJuNEwIh++5Q4sg==","signatures":[{"sig":"MEUCIF/tXKmGqNgMM989Em6aozXksxjjqHQm6c5Pne9BZNP+AiEAuh9VvphLrQWDbVJU3gP+Um036DRI2ykfnOtaCexRnxs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":980595},"type":"module","gitHead":"d494fc7e116c987b38658fc3ba7efc65a9758a2a","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"repository":{"url":"git+https://codeberg.org/senomas/git-hat.git","type":"git"},"_npmVersion":"11.13.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"24.16.0","dependencies":{"marked":"^18.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.1.0"},"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.20_1783398635467_0.7050320811585955","host":"s3://npm-registry-packages-npm-production"}},"0.3.21":{"name":"@senomas/pi-git-hat","version":"0.3.21","keywords":["pi-package","pi-extension","git","workflow","branching","roles"],"license":"MIT","_id":"@senomas/pi-git-hat@0.3.21","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"pi":{"extensions":["./git-hat.ts","./extensions/hat-host-tools/index.ts"]},"dist":{"shasum":"61adc781d0c4b2ce6c700e6f3a4239ca123bd7a0","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-0.3.21.tgz","fileCount":106,"integrity":"sha512-G3me9GoLusoLxTXcShbTuddw+BIHgvYDQgXN2zROHWShNd5U0UjsQGRysv2+kvtJGoE+WcDCSePZsceNy6eZWA==","signatures":[{"sig":"MEYCIQCPa+KcuUiaFmEYiAuxs4Vi3m+XvLKf2Asfa1CD1UhZ1AIhAI92FgDAww+heSmYY/tMeVdsqgxE0thIaiJT8WrK97tC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":981782},"type":"module","gitHead":"df1c7bca12975345710720d6379f74948717130e","_npmUser":{"name":"senomas","email":"agus@senomas.com"},"repository":{"url":"git+https://codeberg.org/senomas/git-hat.git","type":"git"},"_npmVersion":"10.9.8","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","directories":{},"_nodeVersion":"22.23.1","dependencies":{"marked":"^18.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.1.0"},"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-git-hat_0.3.21_1783425562130_0.3318694746871389","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@senomas/pi-git-hat","version":"1.0.0","description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","type":"module","keywords":["pi-package","pi-extension","git","workflow","branching","roles"],"license":"MIT","repository":{"type":"git","url":"git+https://codeberg.org/senomas/git-hat.git"},"pi":{"extensions":["./git-hat.ts","./extensions/hat-host-tools/index.ts"]},"peerDependencies":{"@earendil-works/pi-coding-agent":"*","@earendil-works/pi-tui":"*"},"devDependencies":{"@types/node":"^26.1.0","tsx":"^4.22.4","typescript":"^6.0.3","vitest":"^4.1.9"},"dependencies":{"marked":"^18.0.5"},"gitHead":"924013db3c37f4afb7a28be12ebf78ea2b7f2006","_id":"@senomas/pi-git-hat@1.0.0","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-03CXA/1TuhjM3pzyIuXr6XT3hpgO49ngulTZn2QOGVRieBz2TSRY9gDZKOEnfn01UVAeEPDu12pp5xSg9JG/lA==","shasum":"dfa86ff8e50950254f1ed4f369658f920c0e7951","tarball":"https://registry.npmjs.org/@senomas/pi-git-hat/-/pi-git-hat-1.0.0.tgz","fileCount":133,"unpackedSize":1191922,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCJKyIoiMLCEdTroDUFmHtCeb88ToQPS2sFOy3no5e9kAIgbmhEFMZbtYtzGHvh5Wfx34PuCUZeMwNgjZoCLk+4r5s="}]},"_npmUser":{"name":"senomas","email":"agus@senomas.com"},"directories":{},"maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-git-hat_1.0.0_1783941582886_0.3998900788899149"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-08T06:33:57.938Z","modified":"2026-07-13T11:19:43.269Z","0.1.0":"2026-06-08T06:33:58.280Z","0.2.0":"2026-06-08T08:27:38.316Z","0.2.1":"2026-06-08T15:04:01.527Z","0.2.2":"2026-06-08T15:45:29.072Z","0.2.3":"2026-06-08T16:12:34.902Z","0.2.5":"2026-06-08T22:48:23.709Z","0.2.6":"2026-06-09T01:53:32.427Z","0.2.7":"2026-06-09T02:04:48.420Z","0.2.9":"2026-06-14T11:49:40.021Z","0.3.0":"2026-06-16T11:20:05.414Z","0.3.1":"2026-06-17T04:02:36.872Z","0.3.3":"2026-06-18T00:48:13.233Z","0.3.4":"2026-06-18T01:21:53.047Z","0.3.5":"2026-06-19T02:29:56.914Z","0.3.6":"2026-06-19T06:32:08.981Z","0.3.7":"2026-06-19T07:50:52.833Z","0.3.8":"2026-06-21T08:19:36.170Z","0.3.9":"2026-06-22T05:57:35.449Z","0.3.10":"2026-06-23T13:02:09.205Z","0.3.11":"2026-06-27T05:36:42.303Z","0.3.12":"2026-06-27T21:15:37.226Z","0.3.13":"2026-06-28T04:07:27.467Z","0.3.14":"2026-06-29T01:35:28.701Z","0.3.15":"2026-07-01T02:23:33.947Z","0.3.16":"2026-07-01T23:18:35.603Z","0.3.17":"2026-07-03T00:59:37.997Z","0.3.18":"2026-07-06T03:51:34.152Z","0.3.19":"2026-07-06T17:03:07.742Z","0.3.20":"2026-07-07T04:30:35.673Z","0.3.21":"2026-07-07T11:59:22.289Z","1.0.0":"2026-07-13T11:19:43.122Z"},"license":"MIT","keywords":["pi-package","pi-extension","git","workflow","branching","roles"],"repository":{"type":"git","url":"git+https://codeberg.org/senomas/git-hat.git"},"description":"Pi extension for role-based Git branch workflows — wear different hats by switching branches","maintainers":[{"name":"senomas","email":"agus@senomas.com"}],"readme":"# git-hat 🧢\n\n**Wear different hats by switching git branches.**\n\nA [pi](https://github.com/earendil-works/pi) extension that maps git branches to roles (researcher, planner, implementor, reviewer, admin) and enforces role-based permissions.\n\n## Install\n\n```bash\npi install npm:@senomas/pi-git-hat\n```\n\nNo other dependencies needed. Role prompts and `roles.json` are loaded from a three-tier priority chain (see [Role Configuration](#role-configuration)).\n\n## Workflow\n\nThe typical workflow moves through five roles in a cycle. Use `/hat` to switch roles at each stage.\n\n### 0. 🔬 Research — _researcher_ branch\n\nBefore planning, use a `research/*` branch to explore ideas, brainstorm approaches, or gather context. This is where you remove ambiguity *before* writing tasks.\n\nInteract with the AI across multiple turns: propose an approach, let the AI challenge it, refine, repeat. The output is a design doc in `docs/` that captures decisions, tradeoffs, and rationale. Only once the design feels solid do you move on.\n\n```\n> /hat               # Switch to a research branch\n```\n\n### 1. 🎨 Plan — _planner_ branch\n\nWrite a design doc in `docs/` first. Discuss it with the AI across multiple turns — expose edge cases, surface risks, clarify scope — until there's no ambiguity left.\n\nThen ask the AI to create a todo. The AI will use the built-in tools to produce a `todo/NN-name.json` with properly scoped tasks.\n\n```\n> /hat               # Switch to planner branch\n> /hatt              # See all pending tasks across todo files\n```\n\n### 2. ⚙️ Implement — _implementor_ branch\n\nSwitch to an implementor branch. Run `/hatt` — it picks up the next task that needs work and starts implementation. The AI works through tasks, recording progress as it goes.\n\n```\n> /hat               # Switch to implementor branch\n> /hatt              # Start implementing — picks next task automatically\n```\n\n`/hatt` on the implementor role shows tasks that need attention: fresh tasks, partially implemented ones, or tasks flagged with a review gap (⚠️).\n\n### 3. 🔍 Review — _reviewer_ branch\n\nSwitch to a reviewer branch. Run `/hatt` — it shows the review queue of fully implemented tasks waiting for sign-off. The AI reviews each task, flags gaps, and marks them done.\n\n```\n> /hat               # Switch to reviewer branch\n> /hatt              # Start reviewing — shows tasks waiting for sign-off\n```\n\n### 4. 🔄 Stay in sync — _/hatr_ anywhere\n\nKeep your branch chain clean. `/hatr` auto-detects your current role and rebases onto the correct upstream branches.\n\n```\n> /hatr              # Auto-rebase through the role chain\n```\n\n| Your role | Rebase targets (in order) |\n|-----------|--------------------------|\n| implementor | reviewer → planner |\n| reviewer | implementor |\n| planner | admin (main/master) → reviewer |\n| admin | reviewer |\n\nNo confirmation prompts — invoking `/hatr` is itself consent. Shows the commit graph after each successful rebase.\n\n## Commands\n\n| Command | Description |\n|---------|-------------|\n| `/hat` | TUI branch selector — switch roles by switching branches |\n| `/hat info` | Show current role, branch, and config info |\n| `/hatt` | **Role-aware task launcher** — shows implementor or review queue |\n| `/hatt f` | TUI filter interface — toggle filters (not started, unreviewed, blocked, signoff, done) for role-agnostic task browsing |\n| `/hatt fn` | Next page of `/hatt f` results (pagination) |\n| `/hatt impl` | Force show implementation queue (any role) |\n| `/hatt all` | Show all tasks including done ones |\n| `/hatt list` | Force text-only display (no TUI picker) |\n| `/hatt summary` | Compact status bar |\n| `/hatt regen_md` | Regenerate `.md` from `.json` for role-relevant files |\n| `/hatt backfill` | Generate .json from orphan .md files |\n| `/hatt migrate` | Migrate todo files to latest format (ID backfill + regen) |\n| `/hatr` | Auto-rebase through the role chain based on current role |\n| `/hatl [N]` | Colored git log (default 10 lines) |\n| `/hatp` | Push current branch (+ tags) to all remotes |\n| `/hatpo` | Push all role-matching local branches to origin |\n| `/hatd` | Generate `docs/index.md` from all docs — `/hatd dry-run` for preview |\n| `/hat kill` | Force-remove all podman containers for the current project |\n| `/hat prep` | Rebuild container image from `Containerfile` + recreate containers |\n| `/hatn` | Toggle network on/off for the current podman container |\n| `/hatweb` | Toggle the webview companion UI server (dashboard + markdown rendering) — `/hatweb off` to stop |\n\n### `/hat` — Branch & Role Switching\n\nOpens a searchable TUI listing all local branches grouped by their role. Shows \"← current\" and \"← last used\" indicators. After switching, shows a colored git log automatically.\n\n**Subcommands:**\n\n| Subcommand | Description |\n|------------|-------------|\n| `/hat info` | Show current role, branch, and config info |\n| `/hat prep` | Rebuild container image from `Containerfile` + recreate containers |\n| `/hat kill` | Force-remove all podman containers for the current project |\n\n### WebUI — Companion Dashboard & Markdown Server\n\nThe `/hatweb` command starts a browser-based companion UI on localhost:\n\n```\n> /hatweb           # Start server (random port >10000)\n> /hatweb off       # Stop server\n> /hatweb open      # Start + open in default browser\n```\n\n#### Dashboard\n\nA real-time view of your pi session: prompt history, turn status (thinking/running/done), expandable message detail, message input, and an abort button. Updated live via Server-Sent Events. Designed as a **companion**, not a replacement — all input also goes through the terminal.\n\n#### Markdown Viewer\n\nBrowse and view any `.md` file in your project rendered as styled HTML with **Catppuccin** theming and **Mermaid** diagram support. Available at `/md/*` routes on the same port.\n\n#### Auto-Start\n\nAdd a `webui` section to `.pi-project.json` and the server starts automatically on every session:\n\n```json\n{\n  \"webui\": {\n    \"host\": \"127.0.0.1\",\n    \"port\": 9876\n  }\n}\n```\n\nSee [`docs/webview-tui-design.md`](docs/webview-tui-design.md) for full design.\n\n### `/hatt` — Role-Aware Task Launcher\n\nThe central command for the implement ↔ review loop:\n\n| Role | Shows | Action |\n|------|-------|--------|\n| **implementor** | Tasks needing work: fresh, partial, or gap-fix | TUI picker → auto-starts task, creates phased sub-tasks for complex items |\n| **reviewer** | Tasks fully implemented, waiting for sign-off | Flat list → review queue |\n| **other** | All undone tasks with state | General status overview |\n\nOn the implementor role, `/hatt` also runs an **ancestry check** to verify the current branch is based on the correct ancestor branches. If not, it blocks with a warning until you rebase.\n\n### `/hatt f` — TUI Filter Interface\n\n`/hatt f` opens a role-agnostic task browser with toggleable filter checkboxes, decoupled from the role-aware `/hatt` queue. It replaces the need to switch roles just to see what's happening in the project.\n\n**Five filters** (OR logic — a task matches if it satisfies any active filter):\n\n| Filter | Matches tasks that… |\n|--------|---------------------|\n| **not started** | Have no implementation or all impl blocks are incomplete |\n| **unreviewed** | Have implemented work that hasn't been reviewed yet |\n| **blocked** | Have an unresolved review gap (⚠️) |\n| **signoff** | Are fully reviewed without gaps but not yet marked done |\n| **done** | Are marked `done: true` |\n\n**Role presets** — when opened without flags, the TUI pre-toggles filters matching your role (planner → not started; implementor → unreviewed + blocked; reviewer → unreviewed + signoff). Toggling any filter manually overrides the preset.\n\n**Keyboard shortcuts** within the TUI:\n\n| Key | Action |\n|-----|--------|\n| `↑` `↓` / `j` `k` | Navigate |\n| `Space` | Toggle selected filter checkbox |\n| `Tab` | Switch between filter panel and task list |\n| `1`–`5` | Toggle filter by number |\n| `t` | Toggle \"show done tasks\" |\n| `Enter` | Apply filters and display results |\n| `Esc` / `q` | Cancel |\n\n**Pagination** — results are limited to 10 tasks per page. Use `/hatt fn` to load the next page.\n\n```\n> /hatt f           # Open TUI with role-preset filters\n> /hatt f --done    # Pre-select done filter\n> /hatt fn          # Next page of results\n```\n\nSee [`docs/hatt-f-tui.md`](docs/hatt-f-tui.md) for the full design.\n\n## Todo File Format\n\n**JSON is the source of truth.** Each `todo/NN-name.json` is automatically rendered to a human-friendly `todo/NN-name.md`.\n\n```json\n{\n  \"meta\": {\n    \"nn\": 42,\n    \"name\": \"my-feature\",\n    \"goal\": \"Implement my feature\"\n  },\n  \"tasks\": [\n    {\n      \"title\": \"Build the widget\",\n      \"done\": false,\n      \"detail\": \"Create the main widget component with these sub-steps:\\n- Design the API\\n- Implement the logic\\n- Write tests\",\n      \"impl\": [\n        {\n          \"checked\": true,\n          \"note\": \"Implemented widget API in src/widget.ts\",\n          \"reviews\": []\n        }\n      ]\n    }\n  ]\n}\n```\n\nThe `.md` file is auto-generated and should never be edited manually.\n\n## Role-Branch Mapping\n\nBranch names determine the active role. The mapping is defined in `roles/roles.json` via an ordered `patternRouting` array — **first match wins**:\n\n| Branch pattern | Role |\n|---------------|------|\n| `.*\\.plan$` | planner (override: any `*.plan` suffix) |\n| `.*\\.review$` | reviewer (override: any `*.review` suffix) |\n| `plan/*`, `plan-*`, `plan` | planner |\n| `feat/*`, `feat-*`, `feat` | implementor |\n| `feature/*`, `feature-*` | implementor |\n| `impl/*`, `impl-*`, `impl` | implementor |\n| `work/*`, `work-*` | implementor |\n| `implementor` | implementor (exact match only) |\n| `review/*`, `review-*`, `review` | reviewer |\n| `main`, `master` | admin |\n| `research/*`, `research-*`, `research` | researcher |\n\nThe first two entries (`.*\\.plan$`, `.*\\.review$`) are **override patterns** — they let any branch take on the planner or reviewer role by suffix, regardless of prefix. For example, `feat/my-feature.plan` is detected as **planner**, not implementor.\n\nThe mapping is fully configurable — add, reorder, or replace entries in `patternRouting`. See [`docs/role-branch-mapping.md`](docs/role-branch-mapping.md) for the full design.\n\n## Role Configuration\n\nRoles are defined in `roles/roles.json` with optional descriptions, path permissions, and the `patternRouting` array:\n\n```json\n{\n  \"roles\": {\n    \"planner\":      { \"description\": \"Plan work by creating todo files\" },\n    \"implementor\":  { \"description\": \"Implement features from todo files\" },\n    \"reviewer\":     { \"description\": \"Review implementations\" },\n    \"admin\":        { \"description\": \"Configuration and docs\" },\n    \"researcher\":   { \"description\": \"Research topics and document findings\" }\n  },\n  \"patternRouting\": [\n    { \"pattern\": \".*\\\\.plan$\", \"role\": \"planner\" },\n    { \"pattern\": \"^plan(-|/|$)\", \"role\": \"planner\" },\n    { \"pattern\": \"^feat(-|/|$)\", \"role\": \"implementor\" },\n    { \"pattern\": \"^review(-|/|$)\", \"role\": \"reviewer\" },\n    { \"pattern\": \"^(main|master)$\", \"role\": \"admin\" }\n  ]\n}\n```\n\nLoaded from a three-tier priority chain:\n1. **`.pi/roles.json`** (project-local, highest priority)\n2. **`roles/roles.json`** (project-level)\n3. **Extension-bundled** (fallback)\n\nRole-specific system prompts follow the same chain: `.pi/{role}.md` > `roles/{role}.md` > extension-bundled > built-in fallback.\n\n## Per-Project Environment Config (`.pi/config`)\n\n`.pi/config` is a simple key=value file for per-project environment overrides.\nIt's read by `podman-bash.ts` (when running inside Podman containers),\n`lib/config.ts` (for hat tools), and can be consumed by Makefiles and shell scripts.\n\n### Format\n\n```\n# Comments start with #\n# Blank lines are ignored\n\n# Tool-specific key: <tool>.<setting>=<value>\ngo.gomodcache=./.go/pkg/mod\n\n# Direct env var: env.<VARNAME>=<value>\nenv.GOMODCACHE=./.go/pkg/mod\n```\n\nPath resolution: `./` → relative to project root, `/` → absolute, other → literal.\n\n### Tool Key → Env Var Mapping\n\nTool keys auto-derive env vars. Explicit `env.*` entries take precedence.\n\n| Tool key | Derived env var | Purpose |\n|---|---|---|\n| `go.gomodcache` | `GOMODCACHE` | Go module cache dir |\n| `go.gopath` | `GOPATH` | Go workspace path |\n| `rust.target-dir` | `CARGO_TARGET_DIR` | Cargo build artifacts |\n| `rust.cargo-home` | `CARGO_HOME` | Cargo home cache |\n| `node.registry` | `npm_config_registry` | npm registry URL |\n| `node.cache` | `npm_config_cache` | npm cache dir |\n| `python.venv` | `VIRTUAL_ENV` | Python virtual env path |\n| `python.cache-dir` | `PIP_CACHE_DIR` | pip cache dir |\n\nSee [`docs/pi-config-format.md`](docs/pi-config-format.md) and\n[`docs/usage-in-other-projects.md`](docs/usage-in-other-projects.md) for full details.\n\n## Permission Enforcement\n\nEach role has write boundaries enforced via tool call interception:\n\n| Role | Can Write To | Blocked From |\n|------|-------------|--------------|\n| **Planner** | `todo/`, `plan/`, `docs/*.md` | Everything else |\n| **Implementor** | Source files | `todo/`, `plan/`, `.pi/` |\n| **Reviewer** | `todo/` (review notes, mark done) | Everything else |\n| **Admin** | `.pi/`, root `*.md` | Everything else |\n| **No match** | Nothing (strict read-only) | Writes + destructive bash |\n\n## Security\n\n- **Podman sandbox** — Bash commands execute inside a Podman container, not on the host. Role-based volume mounts (`rw`/`ro`) are enforced at the kernel level.\n- **Role-based write permissions** — Each role's write boundaries are enforced via tool call interception (see [Permission Enforcement](#permission-enforcement) above).\n- **Network off by default** — Containers start with `--network=none`. Network access requires explicit user consent via the `hat_enable_network` tool or `/hatn` command.\n- **Host tools with user consent** — `hat_make`, `hat_python`, and `hat_podman` run on the host, guarded by a trust registry and user confirmation dialogs.\n- **Full security architecture** — See [`docs/developer.md`](docs/developer.md#6-security-architecture) for the complete security design, including sandbox internals, escape hatches, OCI hooks, and the network firewall model.\n\n## For Contributors\n\ngit-hat is **self-hosted** — it is developed using itself. The four role branches (planner → implementor → reviewer → admin) form the development pipeline, driven by AI through the git-hat toolchain.\n\nFor architecture, project structure, build instructions, and contributing workflow, see **[docs/developer.md](docs/developer.md)**.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}