{"_id":"@arvoretech/pi-slack-bridge","_rev":"8-838242578f38fe180d53e913ae71788b","name":"@arvoretech/pi-slack-bridge","dist-tags":{"latest":"1.5.2"},"versions":{"1.0.0":{"name":"@arvoretech/pi-slack-bridge","version":"1.0.0","keywords":["pi-package","pi","extension","slack","bridge","session"],"author":{"name":"Arvore"},"license":"MIT","_id":"@arvoretech/pi-slack-bridge@1.0.0","maintainers":[{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},{"name":"rafsouza","email":"rafasouza@protonmail.com"},{"name":"pedro.adas","email":"pedro.adas@gmail.com"},{"name":"guilhermebs","email":"guilhermebscontact@gmail.com"},{"name":"ricardoraposorfox","email":"ricardorbxx1@gmail.com"},{"name":"jott4","email":"jvgcunha2002@gmail.com"},{"name":"vitor.piovezan","email":"vitor.piovezan@arvore.com.br"}],"homepage":"https://github.com/arvoreeducacao/arvore-pi-extensions#readme","bugs":{"url":"https://github.com/arvoreeducacao/arvore-pi-extensions/issues"},"pi":{"extensions":["./dist/index.js"]},"dist":{"shasum":"d47f5df29cae83a90ce4b7abc7e0a3de397fdc3e","tarball":"https://registry.npmjs.org/@arvoretech/pi-slack-bridge/-/pi-slack-bridge-1.0.0.tgz","fileCount":18,"integrity":"sha512-6j6FXLmzdhh40rnJlRdBnIym14xeOVz1/J1hKGcjLOt6dvN3vNkY586N9zUfZF4KUgOppCy3h6CTeC6uwCa07g==","signatures":[{"sig":"MEYCIQC06tG2+bVqCnvPEHjlVpOsI272IygxLzueWrxa7gSkGwIhANq/pGvcwPD7JDwhWYe5SIK6gkZHEqPQa64x+vzTrrBq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38266},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"tsc --noEmit","build":"tsc"},"_npmUser":{"name":"jott4","email":"jvgcunha2002@gmail.com"},"repository":{"url":"git+https://github.com/arvoreeducacao/arvore-pi-extensions.git","type":"git","directory":"packages/slack-bridge"},"_npmVersion":"11.13.0","description":"PI extension that bridges the active Pi session to a Slack thread: mirrors messages both ways, one Slack thread per Pi session","directories":{},"_nodeVersion":"24.17.0","dependencies":{"@slack/web-api":"7.17.0","@slack/socket-mode":"2.0.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.10.0","@earendil-works/pi-ai":"latest","@earendil-works/pi-coding-agent":"latest"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-slack-bridge_1.0.0_1782422742043_0.03840836020725269","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@arvoretech/pi-slack-bridge","version":"1.1.0","keywords":["pi-package","pi","extension","slack","bridge","session"],"author":{"name":"Arvore"},"license":"MIT","_id":"@arvoretech/pi-slack-bridge@1.1.0","maintainers":[{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},{"name":"rafsouza","email":"rafasouza@protonmail.com"},{"name":"pedro.adas","email":"pedro.adas@gmail.com"},{"name":"guilhermebs","email":"guilhermebscontact@gmail.com"},{"name":"ricardoraposorfox","email":"ricardorbxx1@gmail.com"},{"name":"jott4","email":"jvgcunha2002@gmail.com"},{"name":"vitor.piovezan","email":"vitor.piovezan@arvore.com.br"}],"homepage":"https://github.com/arvoreeducacao/arvore-pi-extensions#readme","bugs":{"url":"https://github.com/arvoreeducacao/arvore-pi-extensions/issues"},"pi":{"extensions":["./dist/index.js"]},"dist":{"shasum":"30240c8d28d65eae70798b53bbb3f3235f1ec54d","tarball":"https://registry.npmjs.org/@arvoretech/pi-slack-bridge/-/pi-slack-bridge-1.1.0.tgz","fileCount":22,"integrity":"sha512-XGQWAPAWgjUeHlbZZo8vNX0yCSLWdRvmcpdJQcxTenkCwXodt/bConW8r/ItVU2q1aE96YCwzCZVjmeID14XNQ==","signatures":[{"sig":"MEUCIQCN/w7Aqhimar6cl5RKFOylOJEAP5HVUBBh+lTCvMVykgIgKYqNEnMCXAHeXx7TZEq3rvb1HbGz2VMlXqodEFbbwFU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51743},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"d20bf97da0ba1942dd62707a4779448393482779","scripts":{"dev":"tsc --watch","lint":"tsc --noEmit","build":"tsc"},"_npmUser":{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},"repository":{"url":"git+https://github.com/arvoreeducacao/arvore-pi-extensions.git","type":"git","directory":"packages/slack-bridge"},"_npmVersion":"10.9.4","description":"PI extension that bridges the active Pi session to a Slack thread: mirrors messages both ways, one Slack thread per Pi session","directories":{},"_nodeVersion":"22.21.1","dependencies":{"@slack/web-api":"7.17.0","slackify-markdown":"5.0.0","@slack/socket-mode":"2.0.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.10.0","@earendil-works/pi-ai":"latest","@earendil-works/pi-coding-agent":"latest"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-slack-bridge_1.1.0_1783437996335_0.417072799283704","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@arvoretech/pi-slack-bridge","version":"1.2.0","keywords":["pi-package","pi","extension","slack","bridge","session"],"author":{"name":"Arvore"},"license":"MIT","_id":"@arvoretech/pi-slack-bridge@1.2.0","maintainers":[{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},{"name":"rafsouza","email":"rafasouza@protonmail.com"},{"name":"pedro.adas","email":"pedro.adas@gmail.com"},{"name":"guilhermebs","email":"guilhermebscontact@gmail.com"},{"name":"ricardoraposorfox","email":"ricardorbxx1@gmail.com"},{"name":"jott4","email":"jvgcunha2002@gmail.com"},{"name":"vitor.piovezan","email":"vitor.piovezan@arvore.com.br"}],"homepage":"https://github.com/arvoreeducacao/arvore-pi-extensions#readme","bugs":{"url":"https://github.com/arvoreeducacao/arvore-pi-extensions/issues"},"pi":{"extensions":["./dist/index.js"]},"dist":{"shasum":"8049e3c98ba3a61875f27132f63f433166594f10","tarball":"https://registry.npmjs.org/@arvoretech/pi-slack-bridge/-/pi-slack-bridge-1.2.0.tgz","fileCount":22,"integrity":"sha512-Pj0ySyG/MAHzg7uA1QRA2obKLp5UPPXo3xVcnuRHL49FV/2WH+dHi08okRafVtg5Tz03q6bIKWkDVaisAMuOkA==","signatures":[{"sig":"MEUCICvZwtYOXnta0CRuIEa3Nrx6brxr4fZB2NUJlPJoxWzRAiEA7uoPZ9XUYYSkItMoS5UmbRF4z5D7QUmlwziIXpKoUVY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52035},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"2ea9cde116d68d409e62e403232fdc65daa7efaa","scripts":{"dev":"tsc --watch","lint":"tsc --noEmit","build":"tsc"},"_npmUser":{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},"repository":{"url":"git+https://github.com/arvoreeducacao/arvore-pi-extensions.git","type":"git","directory":"packages/slack-bridge"},"_npmVersion":"10.9.4","description":"PI extension that bridges the active Pi session to a Slack thread: mirrors messages both ways, one Slack thread per Pi session","directories":{},"_nodeVersion":"22.21.1","dependencies":{"@slack/web-api":"7.17.0","slackify-markdown":"5.0.0","@slack/socket-mode":"2.0.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.10.0","@earendil-works/pi-ai":"latest","@earendil-works/pi-coding-agent":"latest"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-slack-bridge_1.2.0_1783439662872_0.6884505070870477","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@arvoretech/pi-slack-bridge","version":"1.3.0","keywords":["pi-package","pi","extension","slack","bridge","session"],"author":{"name":"Arvore"},"license":"MIT","_id":"@arvoretech/pi-slack-bridge@1.3.0","maintainers":[{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},{"name":"rafsouza","email":"rafasouza@protonmail.com"},{"name":"pedro.adas","email":"pedro.adas@gmail.com"},{"name":"guilhermebs","email":"guilhermebscontact@gmail.com"},{"name":"ricardoraposorfox","email":"ricardorbxx1@gmail.com"},{"name":"jott4","email":"jvgcunha2002@gmail.com"},{"name":"vitor.piovezan","email":"vitor.piovezan@arvore.com.br"}],"homepage":"https://github.com/arvoreeducacao/arvore-pi-extensions#readme","bugs":{"url":"https://github.com/arvoreeducacao/arvore-pi-extensions/issues"},"pi":{"extensions":["./dist/index.js"]},"dist":{"shasum":"d49f16c9fc97eca52289dfe07faa49e45fbf8e4f","tarball":"https://registry.npmjs.org/@arvoretech/pi-slack-bridge/-/pi-slack-bridge-1.3.0.tgz","fileCount":22,"integrity":"sha512-zCd3YROMr/pUGBl89RKJJLGf213yxZR3XZ4FDjSiYRARMHBVNVvSkR1DIKgoIwni0V41iRi2BsBmgZzM78jncg==","signatures":[{"sig":"MEYCIQDefC56V2D7Ao375nhyPP4tTqit2tjCS5cWFgJsR6nUwAIhAPKadymEShCBwf9Hz0QjZ5Zmp3KjtfGuv6VOxGHgOgFg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68055},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"2ea9cde116d68d409e62e403232fdc65daa7efaa","scripts":{"dev":"tsc --watch","lint":"tsc --noEmit","build":"tsc"},"_npmUser":{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},"repository":{"url":"git+https://github.com/arvoreeducacao/arvore-pi-extensions.git","type":"git","directory":"packages/slack-bridge"},"_npmVersion":"10.9.4","description":"PI extension that bridges the active Pi session to a Slack thread: mirrors messages both ways, one Slack thread per Pi session","directories":{},"_nodeVersion":"22.21.1","dependencies":{"@slack/web-api":"7.17.0","slackify-markdown":"5.0.0","@slack/socket-mode":"2.0.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.10.0","@earendil-works/pi-ai":"latest","@earendil-works/pi-coding-agent":"latest"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-slack-bridge_1.3.0_1783439728429_0.8177103724848556","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@arvoretech/pi-slack-bridge","version":"1.4.0","keywords":["pi-package","pi","extension","slack","bridge","session"],"author":{"name":"Arvore"},"license":"MIT","_id":"@arvoretech/pi-slack-bridge@1.4.0","maintainers":[{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},{"name":"rafsouza","email":"rafasouza@protonmail.com"},{"name":"pedro.adas","email":"pedro.adas@gmail.com"},{"name":"guilhermebs","email":"guilhermebscontact@gmail.com"},{"name":"ricardoraposorfox","email":"ricardorbxx1@gmail.com"},{"name":"jott4","email":"jvgcunha2002@gmail.com"},{"name":"vitor.piovezan","email":"vitor.piovezan@arvore.com.br"}],"homepage":"https://github.com/arvoreeducacao/arvore-pi-extensions#readme","bugs":{"url":"https://github.com/arvoreeducacao/arvore-pi-extensions/issues"},"pi":{"extensions":["./dist/index.js"]},"dist":{"shasum":"ba018cbb5b6d1ee8d198cd3d369953ff103c1d4a","tarball":"https://registry.npmjs.org/@arvoretech/pi-slack-bridge/-/pi-slack-bridge-1.4.0.tgz","fileCount":22,"integrity":"sha512-iSbpnbEkf2dkLsCQBp+v54nVW/AWIyRjBaryJMl2BLUyCjl4xNsIaHkcvryp7jqCn3YMEOMIuoUVXyC1KeiNlA==","signatures":[{"sig":"MEUCIQDcpSVhhkBTucKVJusiRhaOVDcNY4lB/5/XvhEpZjUxFgIgDq10ggE9OFI4vEUsSzy8/31lz8rxVlS02g4xfBg32ck=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68828},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"b4e9b6f277d0fdaccf1c34a047d89afc8c32e93c","scripts":{"dev":"tsc --watch","lint":"tsc --noEmit","build":"tsc"},"_npmUser":{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},"repository":{"url":"git+https://github.com/arvoreeducacao/arvore-pi-extensions.git","type":"git","directory":"packages/slack-bridge"},"_npmVersion":"10.9.4","description":"PI extension that bridges the active Pi session to a Slack thread: mirrors messages both ways, one Slack thread per Pi session","directories":{},"_nodeVersion":"22.21.1","dependencies":{"@slack/web-api":"7.17.0","slackify-markdown":"5.0.0","@slack/socket-mode":"2.0.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.10.0","@earendil-works/pi-ai":"latest","@earendil-works/pi-coding-agent":"latest"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-slack-bridge_1.4.0_1783442214209_0.927886525573441","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@arvoretech/pi-slack-bridge","version":"1.5.0","keywords":["pi-package","pi","extension","slack","bridge","session"],"author":{"name":"Arvore"},"license":"MIT","_id":"@arvoretech/pi-slack-bridge@1.5.0","maintainers":[{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},{"name":"rafsouza","email":"rafasouza@protonmail.com"},{"name":"pedro.adas","email":"pedro.adas@gmail.com"},{"name":"guilhermebs","email":"guilhermebscontact@gmail.com"},{"name":"ricardoraposorfox","email":"ricardorbxx1@gmail.com"},{"name":"jott4","email":"jvgcunha2002@gmail.com"},{"name":"vitor.piovezan","email":"vitor.piovezan@arvore.com.br"}],"homepage":"https://github.com/arvoreeducacao/arvore-pi-extensions#readme","bugs":{"url":"https://github.com/arvoreeducacao/arvore-pi-extensions/issues"},"pi":{"extensions":["./dist/index.js"]},"dist":{"shasum":"668b31a6eb4e8c0302df9261e12c91dc66506580","tarball":"https://registry.npmjs.org/@arvoretech/pi-slack-bridge/-/pi-slack-bridge-1.5.0.tgz","fileCount":26,"integrity":"sha512-ffqLjsX0hT8NvXHkhC0K7LDGsHC0XQo/ctYKwIvA00RX0t+/brTxQ3LEsFZQ2z4wSaJ6I/Vop7sQpbgWJ6rClA==","signatures":[{"sig":"MEQCIH6u3LvXeedL9YjxR0ArIk23LNC5B0mwWirp/ZeFaI0vAiBnM0YEO6Qxf2uNz+JU1nakgPD/VQTYeBsYjPewbmdT0Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93366},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"c59b55b8eb6a723fbea314a31489c1b3a7051b64","scripts":{"dev":"tsc --watch","lint":"tsc --noEmit","build":"tsc"},"_npmUser":{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},"repository":{"url":"git+https://github.com/arvoreeducacao/arvore-pi-extensions.git","type":"git","directory":"packages/slack-bridge"},"_npmVersion":"10.9.4","description":"PI extension that bridges the active Pi session to a Slack thread: mirrors messages both ways, one Slack thread per Pi session","directories":{},"_nodeVersion":"22.21.1","dependencies":{"@slack/web-api":"7.17.0","slackify-markdown":"5.0.0","@slack/socket-mode":"2.0.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.10.0","@earendil-works/pi-ai":"latest","@earendil-works/pi-coding-agent":"latest"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-slack-bridge_1.5.0_1783456447006_0.15799942457713612","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@arvoretech/pi-slack-bridge","version":"1.5.1","keywords":["pi-package","pi","extension","slack","bridge","session"],"author":{"name":"Arvore"},"license":"MIT","_id":"@arvoretech/pi-slack-bridge@1.5.1","maintainers":[{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},{"name":"rafsouza","email":"rafasouza@protonmail.com"},{"name":"pedro.adas","email":"pedro.adas@gmail.com"},{"name":"guilhermebs","email":"guilhermebscontact@gmail.com"},{"name":"ricardoraposorfox","email":"ricardorbxx1@gmail.com"},{"name":"jott4","email":"jvgcunha2002@gmail.com"},{"name":"vitor.piovezan","email":"vitor.piovezan@arvore.com.br"}],"homepage":"https://github.com/arvoreeducacao/arvore-pi-extensions#readme","bugs":{"url":"https://github.com/arvoreeducacao/arvore-pi-extensions/issues"},"pi":{"extensions":["./dist/index.js"]},"dist":{"shasum":"17736df98010bd538fa7606c5acf7eb2515f2cec","tarball":"https://registry.npmjs.org/@arvoretech/pi-slack-bridge/-/pi-slack-bridge-1.5.1.tgz","fileCount":26,"integrity":"sha512-wH5gQmxwbbDqpETsnUY64c8vhvGdMgbJsb8HnNkoVc/FrzqtEGf3+56kHYbmxDj/Qkk0HsPePTTp8WiF2PZUBg==","signatures":[{"sig":"MEUCIQCGdLGqF69Bscy6UIi7u5UNTcDdrC/k7BlXdLg9zUrq+wIgdAXJwqLTetBdfIIM5bE8qKnjacG5SYpQI7JcN98fYFg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93389},"main":"dist/index.js","type":"module","_from":"file:arvoretech-pi-slack-bridge-1.5.1.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"tsc --noEmit","build":"tsc"},"_npmUser":{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},"_resolved":"/private/var/folders/4c/6zh0tf292w134k7bn_7vsd4w0000gn/T/00f267d5347ecc9b329b47e876fcd689/arvoretech-pi-slack-bridge-1.5.1.tgz","_integrity":"sha512-wH5gQmxwbbDqpETsnUY64c8vhvGdMgbJsb8HnNkoVc/FrzqtEGf3+56kHYbmxDj/Qkk0HsPePTTp8WiF2PZUBg==","repository":{"url":"git+https://github.com/arvoreeducacao/arvore-pi-extensions.git","type":"git","directory":"packages/slack-bridge"},"_npmVersion":"10.9.4","description":"PI extension that bridges the active Pi session to a Slack thread: mirrors messages both ways, one Slack thread per Pi session","directories":{},"_nodeVersion":"22.21.1","dependencies":{"sharp":"^0.34.5","@slack/web-api":"7.17.0","slackify-markdown":"5.0.0","@slack/socket-mode":"2.0.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.10.0","@earendil-works/pi-ai":"latest","@earendil-works/pi-coding-agent":"latest"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-slack-bridge_1.5.1_1783458879342_0.03919036415953525","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"@arvoretech/pi-slack-bridge","version":"1.5.2","description":"PI extension that bridges the active Pi session to a Slack thread: mirrors messages both ways, one Slack thread per Pi session","main":"dist/index.js","types":"dist/index.d.ts","type":"module","peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"dependencies":{"@slack/socket-mode":"2.0.7","@slack/web-api":"7.17.0","sharp":"^0.34.5","slackify-markdown":"5.0.0"},"devDependencies":{"@earendil-works/pi-coding-agent":"latest","@earendil-works/pi-ai":"latest","@types/node":"^20.10.0","typescript":"^5.3.0","vitest":"^3.2.6"},"pi":{"extensions":["./dist/index.js"]},"keywords":["pi-package","pi","extension","slack","bridge","session"],"repository":{"type":"git","url":"git+https://github.com/arvoreeducacao/arvore-pi-extensions.git","directory":"packages/slack-bridge"},"author":{"name":"Arvore"},"license":"MIT","scripts":{"build":"tsc","dev":"tsc --watch","lint":"tsc --noEmit","test":"vitest run"},"_id":"@arvoretech/pi-slack-bridge@1.5.2","bugs":{"url":"https://github.com/arvoreeducacao/arvore-pi-extensions/issues"},"homepage":"https://github.com/arvoreeducacao/arvore-pi-extensions#readme","_integrity":"sha512-Ipkj6asO6CnUru5Na28hzzJjXMPkiXS2AqN+hEBdIQamD47KeGq//P30prbsyqaSHkxFvCtluWxExDE2YEFo3w==","_resolved":"/tmp/arvoretech-pi-slack-bridge-1.5.2.tgz","_from":"file:/tmp/arvoretech-pi-slack-bridge-1.5.2.tgz","_nodeVersion":"22.23.1","_npmVersion":"11.18.0","dist":{"integrity":"sha512-Ipkj6asO6CnUru5Na28hzzJjXMPkiXS2AqN+hEBdIQamD47KeGq//P30prbsyqaSHkxFvCtluWxExDE2YEFo3w==","shasum":"cac45f4b11b894d7642f4295ca626f4761adb322","tarball":"https://registry.npmjs.org/@arvoretech/pi-slack-bridge/-/pi-slack-bridge-1.5.2.tgz","fileCount":26,"unpackedSize":95546,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arvoretech%2fpi-slack-bridge@1.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGqyj7nu3Koy9gJiDSgtGhASA4BALGbH1JF8jdD56muLAiBQlF314NT1BvmNEwCHBDcImhTe4SNiXqkPAvCR8LYPTQ=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5067eda8-15cc-43c8-ac21-200e39002808"}},"directories":{},"maintainers":[{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},{"name":"rafsouza","email":"rafasouza@protonmail.com"},{"name":"pedro.adas","email":"pedro.adas@gmail.com"},{"name":"guilhermebs","email":"guilhermebscontact@gmail.com"},{"name":"ricardoraposorfox","email":"ricardorbxx1@gmail.com"},{"name":"jott4","email":"jvgcunha2002@gmail.com"},{"name":"vitor.piovezan","email":"vitor.piovezan@arvore.com.br"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-slack-bridge_1.5.2_1784551313954_0.008637019797558931"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-25T21:25:41.935Z","modified":"2026-07-20T12:41:54.452Z","1.0.0":"2026-06-25T21:25:42.177Z","1.1.0":"2026-07-07T15:26:36.490Z","1.2.0":"2026-07-07T15:54:23.007Z","1.3.0":"2026-07-07T15:55:28.544Z","1.4.0":"2026-07-07T16:36:54.353Z","1.5.0":"2026-07-07T20:34:07.159Z","1.5.1":"2026-07-07T21:14:39.485Z","1.5.2":"2026-07-20T12:41:54.093Z"},"bugs":{"url":"https://github.com/arvoreeducacao/arvore-pi-extensions/issues"},"author":{"name":"Arvore"},"license":"MIT","homepage":"https://github.com/arvoreeducacao/arvore-pi-extensions#readme","keywords":["pi-package","pi","extension","slack","bridge","session"],"repository":{"type":"git","url":"git+https://github.com/arvoreeducacao/arvore-pi-extensions.git","directory":"packages/slack-bridge"},"description":"PI extension that bridges the active Pi session to a Slack thread: mirrors messages both ways, one Slack thread per Pi session","maintainers":[{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},{"name":"rafsouza","email":"rafasouza@protonmail.com"},{"name":"pedro.adas","email":"pedro.adas@gmail.com"},{"name":"guilhermebs","email":"guilhermebscontact@gmail.com"},{"name":"ricardoraposorfox","email":"ricardorbxx1@gmail.com"},{"name":"jott4","email":"jvgcunha2002@gmail.com"},{"name":"vitor.piovezan","email":"vitor.piovezan@arvore.com.br"}],"readme":"# Slack Bridge\n\nExtensão do Pi que conecta a sua sessão Pi do terminal a uma thread no Slack, espelhando mensagens nos dois sentidos. **Cada sessão Pi vira uma thread no Slack.**\n\n- O que você digita no terminal aparece na thread.\n- A resposta do agente aparece na thread.\n- O que você responder na thread é injetado de volta na sessão Pi (via `sendUserMessage`).\n\nA extensão roda **dentro** da sua sessão Pi (o terminal é o host). Não é um bot standalone.\n\n## Como funciona\n\n| Sentido | Gatilho | Ação |\n|---|---|---|\n| Pi → Slack | `input` (terminal) | posta a mensagem do usuário na thread (convertida para mrkdwn do Slack) |\n| Pi → Slack | `turn_start` | atualiza o status nativo da thread (`assistant.threads.setStatus`) |\n| Pi → Slack | `tool_execution_start` | posta cada chamada de tool como uma linha na thread (ex: `:computer: \\`bash\\` pnpm test`) e atualiza o status |\n| Pi → Slack | `tool_execution_start` (tool de pergunta) | detecta `ask_user_question`/`questionnaire` e posta o enunciado com as opções numeradas na thread |\n| Pi → Slack | `turn_end` | posta a resposta final na thread (convertida para mrkdwn) e limpa o status |\n| Slack → Pi | mensagem na thread vinculada | `pi.sendUserMessage()` (steer se ocupado, normal se ocioso). Se havia pergunta pendente, o número escolhido é resolvido para o rótulo da opção |\n\n### Quem inicia a thread\n\nA vinculação sessão ↔ thread funciona nos dois sentidos:\n\n- **Sessão inicia:** você digita no terminal → a extensão cria a thread no Slack (mensagem raiz no canal) e passa a espelhar nela.\n- **Slack inicia:** você abre uma conversa nova com o app no Slack e manda uma mensagem → a sessão Pi aberta (que ainda não tem thread vinculada) **adota** essa thread e injeta a mensagem.\n\nO que vier primeiro define a thread. A partir daí o vínculo é fixo: só mensagens daquela thread chegam na sessão, e as respostas vão só para ela. O `thread_ts` é persistido via `appendEntry`, então sobrevive a `/reload`.\n\n### Status nativo (animação)\n\nDurante um turno a extensão usa o status nativo de Assistant do Slack (`assistant.threads.setStatus`) — a animação \"is typing…\" com o passo atual (ex: `bash: pnpm test`). Ao postar a resposta final, o status é limpo. Requer um app com scope `assistant:write`.\n\n### Markdown\n\nToda mensagem do agente e do terminal passa por [`slackify-markdown`](https://www.npmjs.com/package/slackify-markdown) antes de ser postada, convertendo Markdown/GFM (headings, `**negrito**`, listas, links `[texto](url)`, blocos de código) para o mrkdwn do Slack (`*negrito*`, `<url|texto>`, `•`). As mensagens não usam emoji decorativo.\n\n### Tool calls e perguntas\n\n- Cada chamada de tool vira uma linha na thread com o nome da tool e um resumo do argumento principal (ex: `` `bash` pnpm test ``). Quando a tool termina, essa mesma mensagem é editada com o resultado (`> ok: …` ou `> erro: …`), então você acompanha início e fim de cada passo sem poluir a thread.\n- Quando o agente chama uma tool de pergunta (`ask_user_question` ou `questionnaire`), a bridge posta o enunciado com as opções como **botões** (Block Kit). Ao clicar, a mensagem é atualizada mostrando `Respondido: *opção*` e a escolha volta pro agente automaticamente. Também é possível responder por texto na thread (útil para múltipla escolha ou resposta livre). Perguntas com vários itens só voltam pro agente quando todas forem respondidas.\n- Os botões exigem **Interactivity** habilitado no app do Slack (o manifest já inclui). Como a bridge roda em Socket Mode, não é preciso configurar Request URL.\n\n## Setup\n\n### 1. Slack App (Socket Mode + Assistant)\n\nA forma mais rápida é usar o manifest pronto: [`slack-app-manifest.yaml`](./slack-app-manifest.yaml).\n\n1. https://api.slack.com/apps → **Create New App** → **From an app manifest**\n2. Escolha o workspace → cole o conteúdo de `slack-app-manifest.yaml` (aba YAML) → **Create**\n3. **Basic Information** → **App-Level Tokens** → **Generate Token and Scopes** → scope `connections:write` → copie o `xapp-...` (este é o `SLACK_BRIDGE_APP_TOKEN`)\n4. **Install App** → instale no workspace → em **OAuth & Permissions** copie o **Bot User OAuth Token** `xoxb-...` (este é o `SLACK_BRIDGE_BOT_TOKEN`)\n5. Abra uma conversa (DM) com o app no Slack. Pegue o ID do canal (`D...`) — abra a DM, clique no nome do app no topo → o ID aparece no rodapé do painel de detalhes. Esse é o `SLACK_BRIDGE_CHANNEL`. Para usar um canal em vez de DM, convide o bot (`/invite @Pi Bridge`) e use o ID do canal (`C...`).\n\nO manifest já habilita: Socket Mode, o modo Assistant (necessário para receber mensagens da DM via `message.im` + `assistant_thread_started`) e os scopes `chat:write`, `assistant:write`, `im:*`, `channels:history`, `groups:history`.\n\n> Nota: num app Assistant, toda mensagem do usuário na DM chega já com `thread_ts` (a thread do assistant). Não há \"mensagem de topo\" sem thread — a extensão adota a thread pelo `thread_ts` da primeira mensagem.\n\n### 2. Variáveis de ambiente\n\n```env\nSLACK_BRIDGE_BOT_TOKEN=xoxb-...\nSLACK_BRIDGE_APP_TOKEN=xapp-...\nSLACK_BRIDGE_CHANNEL=C0123456789\nSLACK_BRIDGE_USER_IDS=U0123456789\n```\n\n| Variável | Obrigatória | Descrição |\n|---|---|---|\n| `SLACK_BRIDGE_BOT_TOKEN` | sim | Bot token `xoxb-...` (aceita `SLACK_BOT_TOKEN` como fallback) |\n| `SLACK_BRIDGE_APP_TOKEN` | sim | App-level token `xapp-...` (aceita `SLACK_APP_TOKEN` como fallback) |\n| `SLACK_BRIDGE_CHANNEL` | sim | ID do canal/DM onde as threads serão criadas (DM começa com `D`) |\n| `SLACK_BRIDGE_USER_IDS` | não | Allowlist de user IDs que podem mandar do Slack (vazio = qualquer um). Ignorada em DMs. |\n\nSem as 3 obrigatórias a extensão fica inativa silenciosamente.\n\n## Uso\n\nAbra uma sessão Pi normalmente. A bridge conecta no `session_start`. A thread é criada quando a sessão fala primeiro (você digita no terminal) **ou** quando você inicia a conversa pelo Slack — o que vier primeiro. Rode `/slack-bridge` para ver o status.\n\n## Comandos\n\n| Comando | Descrição |\n|---|---|\n| `/slack-bridge` | Mostra o status da ponte (ativa / inativa / variáveis faltando) |\n","readmeFilename":"README.md"}