{"_id":"@2wchuang/pro-advisor","_rev":"7-5598cd9f51728d78f86b718d27098491","name":"@2wchuang/pro-advisor","dist-tags":{"latest":"0.3.0"},"versions":{"0.2.0":{"name":"@2wchuang/pro-advisor","version":"0.2.0","keywords":["pi-package","pi-extension","advisor"],"author":{"name":"2wchuang"},"license":"MIT","_id":"@2wchuang/pro-advisor@0.2.0","maintainers":[{"name":"2wchuang","email":"dominikkkkk@icloud.com"}],"contributors":[{"url":"original @juicesharp/rpiv-advisor","name":"juicesharp"}],"homepage":"https://github.com/2wchuang/pro-advisor#readme","bugs":{"url":"https://github.com/2wchuang/pro-advisor/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"24ac09276e39f0b3c0d402d7ba6d8110613c6e15","tarball":"https://registry.npmjs.org/@2wchuang/pro-advisor/-/pro-advisor-0.2.0.tgz","fileCount":24,"integrity":"sha512-e5kQpTBEsBgxJYyO8bdg8rLKUYxYjSRStyh/4pmaCoorsx+YYcG+iGAEhTn9/uIsTw8QXgIkieSkXwDjRS+cLQ==","signatures":[{"sig":"MEUCIBz2wPsk0577tvYe7yYyW8xljaTOcwLrvGWx98UlCYPhAiEAgJqpnbD/tAo/hJkkInp4oxgJS6RdjFiZc1bf6NBevR4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113301},"type":"module","gitHead":"21e57bbe60b017890816488c84f0703802c71c69","scripts":{"test":"vitest run","check":"npm run typecheck && npm run test","typecheck":"tsc --noEmit","pack:check":"npm pack --dry-run"},"_npmUser":{"name":"2wchuang","email":"dominikkkkk@icloud.com"},"repository":{"url":"git+https://github.com/2wchuang/pro-advisor.git","type":"git"},"_npmVersion":"11.19.0","description":"Pi extension. A second opinion from a stronger reviewer model, kept in one persistent session per executor session.","directories":{},"_nodeVersion":"24.11.0","dependencies":{"typebox":"^1.1.24","@juicesharp/rpiv-config":"^2.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","typescript":"^5.7.0","@types/node":"^22.10.0","@earendil-works/pi-ai":"^0.85.1","@earendil-works/pi-tui":"^0.85.1","@earendil-works/pi-coding-agent":"^0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pro-advisor_0.2.0_1789028453948_0.662234126669718","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@2wchuang/pro-advisor","version":"0.2.1","keywords":["pi-package","pi-extension","advisor"],"author":{"name":"2wchuang"},"license":"MIT","_id":"@2wchuang/pro-advisor@0.2.1","maintainers":[{"name":"2wchuang","email":"dominikkkkk@icloud.com"}],"contributors":[{"url":"original @juicesharp/rpiv-advisor","name":"juicesharp"}],"homepage":"https://github.com/2wchuang/pro-advisor#readme","bugs":{"url":"https://github.com/2wchuang/pro-advisor/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"5d10cef970c4adfeee67ab2f5dfb05beb410dc6b","tarball":"https://registry.npmjs.org/@2wchuang/pro-advisor/-/pro-advisor-0.2.1.tgz","fileCount":24,"integrity":"sha512-Uv+G4vbQANmwt0+dpEx2GU+lWBLO/TwH8C7xRRC3Z6FqzKlSqghVLFtmedlkmCUdOfL0UP4kuf+R1YufvKdw8Q==","signatures":[{"sig":"MEQCICCqM/LLKmnuEL9cAJEJreIXPmvSfgfntlS/LvFuDdLYAiBW6Qi5YkLyRxJ+xDubEsx5D/owbdUBAqg+dcOxBwmhig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIF9mIw+ZE1qvmq0fkUrCSzCWk1djRUeuPU/liSr89Gl7AiBHu0tU3yoEzn1/i/zYNhD8h3uaWMHSUDd4Wa+uJxr2Uw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@2wchuang%2fpro-advisor@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":114336},"type":"module","gitHead":"4be1513ad810e45b132af71930cf999ba0c4e971","scripts":{"test":"vitest run","check":"npm run typecheck && npm run test","typecheck":"tsc --noEmit","pack:check":"npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2ca3a298-312c-4a1b-b8b0-5123861476d3"}},"repository":{"url":"git+https://github.com/2wchuang/pro-advisor.git","type":"git"},"_npmVersion":"11.19.0","description":"Pi extension. A second opinion from a stronger reviewer model, kept in one persistent session per executor session.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"typebox":"^1.1.24","@juicesharp/rpiv-config":"^2.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","typescript":"^5.7.0","@types/node":"^22.10.0","@earendil-works/pi-ai":"^0.85.1","@earendil-works/pi-tui":"^0.85.1","@earendil-works/pi-coding-agent":"^0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pro-advisor_0.2.1_1789029685625_0.6745514322661124","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@2wchuang/pro-advisor","version":"0.2.2","keywords":["pi-package","pi-extension","advisor"],"author":{"name":"2wchuang"},"license":"MIT","_id":"@2wchuang/pro-advisor@0.2.2","maintainers":[{"name":"2wchuang","email":"dominikkkkk@icloud.com"}],"contributors":[{"url":"original @juicesharp/rpiv-advisor","name":"juicesharp"}],"homepage":"https://github.com/2wchuang/pro-advisor#readme","bugs":{"url":"https://github.com/2wchuang/pro-advisor/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"009d97a60dad529b0af75640625605884eedc152","tarball":"https://registry.npmjs.org/@2wchuang/pro-advisor/-/pro-advisor-0.2.2.tgz","fileCount":24,"integrity":"sha512-gpN2xA/vIx1wzOwF+bSn7htwLB2+SA4+Iu+h5jRs+ooHfU+BANobNxy/cgHXKAkqryC9RpeS/JWKHl2lv/iibg==","signatures":[{"sig":"MEQCIG+PDDs2zm0TWHOsNrT8Pq4p32rc2LjqRDm/qHkQ9dEhAiBJK+Agj1fhq+Vvpivangyp1apIGA1gl4DqpPf/qEQV/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC5k+28VOTZQPMc/oWN994u3l/NJC6cMaW71oEM5vXa/gIhANfnr1spGl3LReNOi37K8zjWICSbO6u17PgySBhVj0iW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@2wchuang%2fpro-advisor@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":116479},"type":"module","gitHead":"5492f3749aa73633afe127c35da83779a74a1568","scripts":{"test":"vitest run","check":"npm run typecheck && npm run test","typecheck":"tsc --noEmit","pack:check":"npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2ca3a298-312c-4a1b-b8b0-5123861476d3"}},"repository":{"url":"git+https://github.com/2wchuang/pro-advisor.git","type":"git"},"_npmVersion":"11.19.0","description":"Pi extension. A second opinion from a stronger reviewer model, kept in one persistent session per executor session.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"typebox":"^1.1.24","@juicesharp/rpiv-config":"^2.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","typescript":"^5.7.0","@types/node":"^22.10.0","@earendil-works/pi-ai":"^0.85.1","@earendil-works/pi-tui":"^0.85.1","@earendil-works/pi-coding-agent":"^0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pro-advisor_0.2.2_1789031199786_0.5871617441945984","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@2wchuang/pro-advisor","version":"0.2.3","keywords":["pi-package","pi-extension","advisor"],"author":{"name":"2wchuang"},"license":"MIT","_id":"@2wchuang/pro-advisor@0.2.3","maintainers":[{"name":"2wchuang","email":"dominikkkkk@icloud.com"}],"contributors":[{"url":"original @juicesharp/rpiv-advisor","name":"juicesharp"}],"homepage":"https://github.com/2wchuang/pro-advisor#readme","bugs":{"url":"https://github.com/2wchuang/pro-advisor/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"b6bdf94ef332df6491c152f7a534f1b949e724f2","tarball":"https://registry.npmjs.org/@2wchuang/pro-advisor/-/pro-advisor-0.2.3.tgz","fileCount":24,"integrity":"sha512-oJU1dPLElwsa8ycYt9WlT0oYHyFo6Nwr9LPI9P+upMpxX6sHxVHTplbYUxqINjtuWqR/fS1Gfu6Fzt+YTS8h6w==","signatures":[{"sig":"MEQCIApteVCRqeTqMKoMbGQgLvliCKP7SKmOTQRynnC1aKzJAiAdh4nIdCwG4fi+22PM9N5ClooWE5AXJ16Mso3+0HLwuA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCfNXQWV7/BWtle4obHaaHK08lAkvn//2V/VYew5uJLBwIhAOEbdRBDqQEa5kP/xMFcH4U294w350TiZYg+iRP28jmT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@2wchuang%2fpro-advisor@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":118879},"type":"module","gitHead":"242caf78158bcd43e01415efdedb8f08f2e75553","scripts":{"test":"vitest run","check":"npm run typecheck && npm run test","typecheck":"tsc --noEmit","pack:check":"npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2ca3a298-312c-4a1b-b8b0-5123861476d3"}},"repository":{"url":"git+https://github.com/2wchuang/pro-advisor.git","type":"git"},"_npmVersion":"11.19.0","description":"Pi extension. A second opinion from a stronger reviewer model, kept in one persistent session per executor session.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"typebox":"^1.1.24","@juicesharp/rpiv-config":"^2.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","typescript":"^5.7.0","@types/node":"^22.10.0","@earendil-works/pi-ai":"^0.85.1","@earendil-works/pi-tui":"^0.85.1","@earendil-works/pi-coding-agent":"^0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pro-advisor_0.2.3_1789032651093_0.31881206768154025","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@2wchuang/pro-advisor","version":"0.2.4","keywords":["pi-package","pi-extension","advisor"],"author":{"name":"2wchuang"},"license":"MIT","_id":"@2wchuang/pro-advisor@0.2.4","maintainers":[{"name":"2wchuang","email":"dominikkkkk@icloud.com"}],"contributors":[{"url":"original @juicesharp/rpiv-advisor","name":"juicesharp"}],"homepage":"https://github.com/2wchuang/pro-advisor#readme","bugs":{"url":"https://github.com/2wchuang/pro-advisor/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"b2fb82a4190ddb003c258bae5cf49438faa48f92","tarball":"https://registry.npmjs.org/@2wchuang/pro-advisor/-/pro-advisor-0.2.4.tgz","fileCount":24,"integrity":"sha512-FDrR3kGAJrFYqRI1OeH3t3kOBRBd1r9V/DSbPApR11nho4UGQDqP1SVcZd5Ki7CZlC+1VPHyq3O343bWgUIgYQ==","signatures":[{"sig":"MEYCIQDJl6Xoykdc6lW+xg6OkA7h/Gi0eGRjUYVBYtunRZdtFQIhAIb+6OoTMTLMAn9qEyfwnnSXArqGsu1sDVKdotNAX9Ee","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDUTrx1v7zYq1Z1eR3UchezQTG54oQN4hSl08Ehz+/ePgIgAzxypbkioP0um+TOdGNknCXbF+cOCPDiwNpXbHY/f3g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@2wchuang%2fpro-advisor@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":123268},"type":"module","gitHead":"ff41d9035c7a553c82719437872bf997121a2604","scripts":{"test":"vitest run","check":"npm run typecheck && npm run test","typecheck":"tsc --noEmit","pack:check":"npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2ca3a298-312c-4a1b-b8b0-5123861476d3"}},"repository":{"url":"git+https://github.com/2wchuang/pro-advisor.git","type":"git"},"_npmVersion":"11.19.0","description":"Pi extension. A second opinion from a stronger reviewer model, kept in one persistent session per executor session.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"typebox":"^1.1.24","@juicesharp/rpiv-config":"^2.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","typescript":"^5.7.0","@types/node":"^22.10.0","@earendil-works/pi-ai":"^0.85.1","@earendil-works/pi-tui":"^0.85.1","@earendil-works/pi-coding-agent":"^0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pro-advisor_0.2.4_1789033580642_0.9038646954977063","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@2wchuang/pro-advisor","version":"0.2.5","keywords":["pi-package","pi-extension","advisor"],"author":{"name":"2wchuang"},"license":"MIT","_id":"@2wchuang/pro-advisor@0.2.5","maintainers":[{"name":"2wchuang","email":"dominikkkkk@icloud.com"}],"contributors":[{"url":"original @juicesharp/rpiv-advisor","name":"juicesharp"}],"homepage":"https://github.com/2wchuang/pro-advisor#readme","bugs":{"url":"https://github.com/2wchuang/pro-advisor/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"c139f857aed7964fea59d000c0fac4add0eb7637","tarball":"https://registry.npmjs.org/@2wchuang/pro-advisor/-/pro-advisor-0.2.5.tgz","fileCount":24,"integrity":"sha512-h4HfMFCN9AWQK2k2E/RTI07gU58vmDD7SOMyxhrbWM7ZCDD4RQbvgnMTlptjyM4nBCDfMo7HGCNdIg0n0mFS1w==","signatures":[{"sig":"MEYCIQDLPJABznxX1/bT1OQIJsadyrysDi1Op6vJRYvO21yz/AIhAJpPnlV4vEuTj7SxAdJzQXERRecFwhWv/MZHGP63dJhZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCZ2NQeqqTMcCzW4YLj6QbkCLTg2fjZDFgLB6jTcHtNhgIgYW2iN4P9ZQfRHMqvK89OYIQTC6A+ev1R+gaeHOlw0yQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@2wchuang%2fpro-advisor@0.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":129486},"type":"module","gitHead":"0e17b588e4a65d356aedcc48f9b99c3f012def8c","scripts":{"test":"vitest run","check":"npm run typecheck && npm run test","typecheck":"tsc --noEmit","pack:check":"npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2ca3a298-312c-4a1b-b8b0-5123861476d3"}},"repository":{"url":"git+https://github.com/2wchuang/pro-advisor.git","type":"git"},"_npmVersion":"11.19.0","description":"Pi extension. A second opinion from a stronger reviewer model, kept in one persistent session per executor session.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"typebox":"^1.1.24","@juicesharp/rpiv-config":"^2.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","typescript":"^5.7.0","@types/node":"^22.10.0","@earendil-works/pi-ai":"^0.85.1","@earendil-works/pi-tui":"^0.85.1","@earendil-works/pi-coding-agent":"^0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pro-advisor_0.2.5_1789035144373_0.5045384579024237","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"pi":{"extensions":["./index.ts"]},"_id":"@2wchuang/pro-advisor@0.3.0","bugs":{"url":"https://github.com/2wchuang/pro-advisor/issues"},"dist":{"shasum":"9d2394db79d3acbec47ee214719bad8fa566f78d","tarball":"https://registry.npmjs.org/@2wchuang/pro-advisor/-/pro-advisor-0.3.0.tgz","fileCount":24,"integrity":"sha512-2GSoZEI1mJBm/aa9m6awlIbQrEm0ezOxfhBBSgYJPkHeWzrithsOJ58o+8PuNncJ4Cgi62D6yj9awtwkjN5mWA==","signatures":[{"sig":"MEQCIBGDHI8DaKU6jzT+Keb2ic3yu6Fk5YJ9FxosMjIdcWidAiBFd16Z1xWWFyQ2ozneP9k6msQqBYlQjO5TP7HMCM/cvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCGW3Z26RexEDUqjqFgPm9Htj/0VPSu5sXTI3KB/XLBkgIhALaxVJC8/b0NfhidXRLVevKACKBTjPZw2h6/KK77Q0Uf"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@2wchuang%2fpro-advisor@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":126560},"name":"@2wchuang/pro-advisor","type":"module","author":{"name":"2wchuang"},"gitHead":"77b5d0e3873e1c2c90bbfacee03d6bd5e5fdedcc","license":"MIT","scripts":{"test":"vitest run","check":"npm run typecheck && npm run test","typecheck":"tsc --noEmit","pack:check":"npm pack --dry-run"},"version":"0.3.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2ca3a298-312c-4a1b-b8b0-5123861476d3"}},"homepage":"https://github.com/2wchuang/pro-advisor#readme","keywords":["pi-package","pi-extension","advisor"],"repository":{"url":"git+https://github.com/2wchuang/pro-advisor.git","type":"git"},"_npmVersion":"11.19.0","description":"Pi extension. A second opinion from a stronger reviewer model, kept in one persistent session per executor session.","directories":{},"maintainers":[{"name":"2wchuang","email":"dominikkkkk@icloud.com"}],"_nodeVersion":"24.20.0","contributors":[{"url":"original @juicesharp/rpiv-advisor","name":"juicesharp"}],"dependencies":{"typebox":"^1.1.24","@juicesharp/rpiv-config":"^2.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","typescript":"^5.7.0","@types/node":"^22.10.0","@earendil-works/pi-ai":"^0.85.1","@earendil-works/pi-tui":"^0.85.1","@earendil-works/pi-coding-agent":"^0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pro-advisor_0.3.0_1789036868438_0.5632778276416475"}}},"time":{"created":"2026-09-10T08:20:53.637Z","modified":"2026-09-10T10:41:09.022Z","0.2.0":"2026-09-10T08:20:54.079Z","0.2.1":"2026-09-10T08:41:25.760Z","0.2.2":"2026-09-10T09:06:39.870Z","0.2.3":"2026-09-10T09:30:51.196Z","0.2.4":"2026-09-10T09:46:20.721Z","0.2.5":"2026-09-10T10:12:24.468Z","0.3.0":"2026-09-10T10:41:08.540Z"},"bugs":{"url":"https://github.com/2wchuang/pro-advisor/issues"},"author":{"name":"2wchuang"},"license":"MIT","homepage":"https://github.com/2wchuang/pro-advisor#readme","keywords":["pi-package","pi-extension","advisor"],"repository":{"url":"git+https://github.com/2wchuang/pro-advisor.git","type":"git"},"description":"Pi extension. A second opinion from a stronger reviewer model, kept in one persistent session per executor session.","contributors":[{"url":"original @juicesharp/rpiv-advisor","name":"juicesharp"}],"maintainers":[{"name":"2wchuang","email":"dominikkkkk@icloud.com"}],"readme":"# @2wchuang/pro-advisor\n\nPi extension. A second opinion from a stronger reviewer model — kept in **one\npersistent session per executor session**.\n\nForked from [`@juicesharp/rpiv-advisor`](https://pi.dev/packages/@juicesharp/rpiv-advisor)\n(MIT). The tool surface, `/advisor` command, config file, and picker are\nunchanged; the advisor session layer is replaced. See\n[What changed from upstream](#what-changed-from-upstream).\n\n## Install\n\nFrom npm:\n\n```bash\npi install npm:@2wchuang/pro-advisor\n```\n\nOr from git — no npm account or registry involved:\n\n```bash\npi install git:github.com/2wchuang/pro-advisor@v0.3.0\n```\n\nRestart your Pi session. Run `/advisor` to pick the reviewer model — nothing\nhappens until you do.\n\n> If you were running upstream `@juicesharp/rpiv-advisor`, **replace** that entry\n> in `~/.pi/agent/settings.json` rather than adding this one: both register a tool\n> named `advisor`, and they share the same config file and session directory.\n> See [docs/RELEASING.md](docs/RELEASING.md) for the publisher-side setup.\n\n## What this does and does not claim\n\nThe upstream advisor is a **stateless side-call**: every `advisor()` call takes no\nparameters, re-serialises the executor's whole conversation branch, and sends it\nas a fresh single request. The reviewer sees continuous context because the\nexecutor's history is replayed each time, but the advisor itself remembers nothing\nbetween calls.\n\nThis fork makes two changes:\n\n1. the advisor is a **real, persistent Pi `AgentSession`**, one per executor\n   session, so a follow-up is a genuine continuation rather than a cold restart;\n2. the advisor receives **a brief the executor writes**, not the conversation.\n\n### Why the brief replaced the transcript\n\nThe first iteration of this fork *did* forward the transcript, incrementally. It\nwas measured, and removed — see [docs/ISSUES.md](docs/ISSUES.md) I-9. A real\n667,925-character delivery broke down as:\n\n| Content | Share |\n| --- | --- |\n| executor thinking | 36.2% |\n| tool inventory (the advisor calls no tools) | 21.5% |\n| raw tool output | 21.1% |\n| tool-call signatures | 17.2% |\n| executor prose | 3.5% |\n| **the user's own words** | **0.5%** |\n\nAnd it produced a fabrication failure: the payload rendered the transcript with\n`[Assistant tool calls]:` / `[Tool result (x)]:` markers and **ended on the\nexecutor's own in-flight `advisor()` call**, so the document's next natural line\nwas a tool result. The advisor continued the document instead of answering it. In\none reply **11,308 of 15,593 characters (72.5%) were invented executor activity** —\nincluding a commit hash that does not exist in the repository. That text re-entered\nthe executor's context looking exactly like the real transcript.\n\n**What is claimed:** session continuity, and that the advisor sees only what the\nexecutor chose to send it.\n\n**What the executor must now do:** author the brief. The advisor has no tools, no\nconversation access, and no ability to inspect anything. It can only judge what it\nis told — so cite primary sources (`file:line`, measured numbers) in `evidence`,\nor the advisor can only take the reasoning on trust.\n\n**What is NOT claimed:**\n\n- **Not a token saving relative to the upstream stateless design.** Continuity is\n  the goal. The advisor also keeps its own history, which is re-sent to its\n  provider each turn like any other chat session — that prefix is the provider's\n  to cache or bill, and this package does not promise either.\n- **Not faster by construction.** Speed is a side effect, not a contract.\n- **No independent verification.** The advisor cannot check a claim you did not\n  state. It challenges your reasoning, not your facts.\n\n## Session identity\n\nThe advisor session is keyed by the executor session id, so:\n\n| Executor action | Advisor behaviour |\n| --- | --- |\n| Repeated `advisor()` calls | same advisor session; each call carries its own brief |\n| `/new` | new advisor session |\n| `/fork` | new advisor session (no cross-branch contamination) |\n| `/resume` | reopens the **same** advisor session — same id, same history |\n| `/advisor` → different model | `setModel()` on the same session; identity survives the switch |\n| `/advisor` → No advisor | sessions disposed; a later re-enable starts fresh |\n\n### Known risk: stale bias in a long-lived advisor session\n\nThe advisor's session accumulates its own prior conclusions. If an early\nconsultation reasoned from a premise that later turned out to be wrong, that\nreasoning stays in its history and can keep colouring later advice. The stateless\nupstream design read the current branch every call and so carried no such residue.\n\nNothing in this package demonstrates that the advisor *withdraws* a stale\nconclusion. Treat stale bias as an **open risk**, and prefer `/new` when a line of\nreasoning has gone definitively wrong. (The pre-I-9 design attempted a \"rebase\"\nthat re-stated the transcript and told the advisor its earlier reading was\nsuperseded; that mechanism is gone with the mirror, so this risk is now\nunmitigated by wording as well.)\n\n### Fixed: compaction inverted the advisor's identity\n\nObserved live, on the first session long enough to cross Pi's auto-compaction\nthreshold (`tokensBefore: 510,091`): the advisor stopped advising and asked the\nexecutor for instructions — *\"I need your guidance on where we stand\"* — then\nlisted the executor's publishing milestones as its own achievements.\n\nCause: an advisor session is a real Pi `AgentSession`, so Pi's auto-compaction\napplied to it too. Its summarizer is written for the **executor** — the template\nasks for `## Goal`, `## Constraints & Preferences`, `## Progress`, `## Next Steps`.\nThe advisor's transcript is a *mirror of the executor's work*, so summarising it\nproduced a document describing the executor's task as the advisor's own, and the\nadvisor adopted that identity.\n\nUpstream could not hit this: a stateless side-call keeps no session, so there was\nnothing to compact. It is a hazard the persistent design introduced.\n\nFixed by disabling auto-compaction on the advisor session\n(`session-pool.ts`) — belt and braces now that the payload is a brief: a summary\nof a brief cannot describe the executor's task as the advisor's own, but the\ninversion is too costly to leave to that argument alone.\n\nSessions are stored under `~/.pi/agent/pro-advisor/`.\n\n## Safety\n\nThe advisor session is constructed with extensions, skills, prompt templates,\nthemes, context files, and **all tools disabled**. It cannot call a tool, cannot\nwrite to your transcript, and cannot recursively load this extension.\n\nFailure handling is conservative: a failed, aborted, or empty consultation never\nclaims success. An empty response is retried **exactly once**, with a short\ncorrective prompt in the same advisor session. Aborted and provider-error replies\nare never retried.\n\nA call with no `question` is refused **before** a session is created or a paid\ncall is made.\n\n## Payload shape is load-bearing\n\nThe consultation payload is built by `advisor/brief.ts` and is deliberately **not**\na continuable transcript. That is a correctness property, not a style preference —\nsee [docs/ISSUES.md](docs/ISSUES.md) I-9. Two rules are enforced by tests:\n\n- the payload never emits `[Assistant]:` / `[Assistant thinking]:` /\n  `[Assistant tool calls]:` / `[Tool result (x)]:` markers;\n- it always **ends on an instruction**, never on a pending action.\n\nFields are capped at 6,000 characters each and truncation is marked inline, so a\nclipped thought is not silently read as complete.\n\n## Configuration\n\nUnchanged from upstream: `~/.config/rpiv-advisor/advisor.json` (shared on\npurpose, so an existing selection carries over).\n\n```json\n{\n  \"modelKey\": \"anthropic/claude-opus-4-5\",\n  \"effort\": \"high\",\n  \"disabledForModels\": [\n    \"anthropic/claude-opus-4-5\",\n    { \"model\": \"openai/gpt-5.2\", \"minEffort\": \"high\" }\n  ]\n}\n```\n\n| Key | What it does | Default |\n| --- | --- | --- |\n| `modelKey` | Reviewer model as `\"provider/modelId\"`. Written by `/advisor`. | absent — advisor off |\n| `effort` | Reviewer reasoning effort. Written by `/advisor`. | absent — model default |\n| `disabledForModels` | Executor models the advisor is stripped for. Plain strings block at any effort; `{ model, minEffort }` blocks at or above that effort. | `[]` |\n| `guidance` | Overrides for the tool's `promptSnippet` / `promptGuidelines`. | built-in |\n\nThe tool is stripped from the active set — so none of its prompt text enters the\nsystem prompt — when no model is selected, the configured model is unavailable,\nor the executor matches `disabledForModels`.\n\n## What changed from upstream\n\nMost files are retained verbatim. The session layer is new:\n\n| File | Status |\n| --- | --- |\n| `advisor/session-pool.ts` | **new** — persistent advisor session + pool |\n| `advisor/brief.ts` | **new** — structured-payload construction (replaced the transcript mirror) |\n| `advisor/status.ts` | **new** — `/advisor-status`: sessions, turns, on-disk history size |\n| `advisor/execute.ts` | **rewritten** — drives the session with a brief instead of a stateless completion |\n| `advisor/register.ts` | **changed** — structured schema; `DEFAULT_PROMPT_GUIDELINES` rewritten; see *Advisor voice* below |\n| `index.ts`, `advisor/handlers.ts`, `advisor/restore.ts`, `advisor/command.ts` | **minimally wired** — pool injection, dispose on session switch/shutdown |\n| `advisor/context.ts`, `advisor/pi-compat.ts` | **removed** — both existed only to shape a per-call payload and resolve a global completion for it |\n| `advisor/mirror.ts` | **removed** — forwarded the executor transcript; measured 99.5% process noise and induced payload fabrication (I-9) |\n| everything else incl. `advisor/config.ts`, `messages.ts`, `policy.ts`, `state.ts`, `inventory.ts`, `advisor-ui.ts`, `fuzzy.ts` | **unchanged** |\n\n### Advisor voice\n\nUpstream's injected guidelines made the advisor a gate every non-trivial task had\nto pass — \"Call `advisor` BEFORE substantive work\", \"at least once before\ncommitting to an approach and once before declaring done\", \"Give the advisor's\nadvice serious weight\", \"put the advisor's key guidance into your next visible\nreply to the user\". Observed consequences: mandatory escalation, the executor\nreporting *to* the advisor rather than to the user, and the advisor's position\nbeing restated as though the user had said it.\n\nThe rewritten defaults invert each of those: the **user** is named the\ndecision-maker (\"if the advisor and the user disagree, the user wins\"), there is\nexplicitly **no minimum number of calls**, and the advisor's views must be\nattributed to the advisor and never to the user. Reporting a consultation is\nlimited to cases where it actually changed the plan, and framed as the executor's\nown decision. The original strings are retained as\n`UPSTREAM_PROMPT_GUIDELINES` for reference and regression-testing.\n\nSee `docs/ISSUES.md` for each finding with its evidence, and `repo-guards.test.ts`\nfor the guards that keep these regressions from returning.\n\n### Test coverage\n\n236 tests. Upstream's are retained where they still describe the code, and\ntransport-specific tests were **replaced** rather than dropped:\n\n- `advisor/pi-compat.test.ts` and `advisor.strip.test.ts` tested the removed\n  completion resolution and tail-massaging; they are replaced by\n  `advisor.brief.test.ts` (payload construction + I-9 shape guards) and\n  `advisor.session-pool.test.ts` (session identity, isolation, resume,\n  concurrency, zero tools).\n- `advisor.mirror.test.ts` covered incremental delivery and rebase planning for\n  the mirror; it was deleted with the mirror. The equivalent concern — what the\n  advisor actually receives — now lives in `advisor.brief.test.ts`.\n- `advisor.execute.test.ts` was rewritten against an injectable\n  `AdvisorSessionDriver` seam. The envelope contract is preserved — success,\n  auth failure, abort, provider error, thrown error, bounded empty-response\n  retry — while the `completeSimple` transport assertions are gone with the\n  transport.\n\n## Commands\n\n| Command | Purpose |\n| --- | --- |\n| `/advisor` | Pick the reviewer model and reasoning effort |\n| `/advisor-status` | Show advisor sessions, accumulated turns, and on-disk history size |\n\n`/advisor-status` exists because a persistent advisor session grows its history on\nevery consultation and nothing previously surfaced how large it had become. It\nreports file bytes as a **proxy for history size — not tokens, not cost**, so the\n\"no guaranteed token saving\" disclaimer above stays checkable rather than a\nmatter of faith.\n\n## Development\n\n```bash\nnpm install\nnpm run check        # typecheck + tests\nnpm run pack:check   # verify the published tarball contains every runtime module\n```\n\n## License\n\nMIT. Derivative of `@juicesharp/rpiv-advisor` (MIT, Copyright (c) 2026\njuicesharp); see [LICENSE](./LICENSE) for the retained original notice.\n","readmeFilename":"README.md"}