{"_id":"@odradekk/pi-square","_rev":"32-720a27eba1b67cd2533495dd8588dd22","name":"@odradekk/pi-square","dist-tags":{"bootstrap":"0.0.0-oidc-bootstrap.0","latest":"15.3.2"},"versions":{"0.0.0-oidc-bootstrap.0":{"name":"@odradekk/pi-square","version":"0.0.0-oidc-bootstrap.0","license":"MIT","_id":"@odradekk/pi-square@0.0.0-oidc-bootstrap.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"dist":{"shasum":"487cb3b0ea0062fddb6aa137504f886e907a15fd","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-0.0.0-oidc-bootstrap.0.tgz","fileCount":3,"integrity":"sha512-Hcl6JmdRmA/nUGmxoSUaNPcR/JOWeTwLioty36EiVXSw/FJL3YDwrmxGIteAxoTD2FnFC6RRmWuSSdQabewZhg==","signatures":[{"sig":"MEQCIAVAmpcBpZ3FRcPlk5wJ4wuSSRQYGLabe6KzZ48l5rJwAiB6ZNv28GoHE6f7lcmvsBVKIGeIY1MbJMKgfHHA2sskbA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1607},"_npmUser":{"name":"odradekk","email":"luyang0628@outlook.com"},"deprecated":"OIDC bootstrap placeholder only; install the latest stable release after 1.0.0 is published.","repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.13.0","description":"OIDC bootstrap placeholder for the pi-square release workflow","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-square_0.0.0-oidc-bootstrap.0_1784295428279_0.6295531313502203","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@odradekk/pi-square","version":"1.0.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@1.0.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"skills":["./skills"],"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"f5f90b6122c3f151cbcd00ad3ad6a367e24f66a4","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-1.0.0.tgz","fileCount":175,"integrity":"sha512-w41FTOLxkokaHFXjpfM0lA99Brso/DOS7RmcTNJSUzC73Wx+x48O01C7iv4M/NlY6JUDI3Ahxfq6HJE0m4OO7g==","signatures":[{"sig":"MEUCIQDZCh76kzW2geFAzp9GHOjWaOSwk8n9tFI4z3jMBXZ7GAIgYuDvJtwICAmsEEHcZ20tDGudRxsceC46rdOYXvBb45Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":61856240},"type":"module","engines":{"node":">=24 <25"},"gitHead":"9e239c0070254b41f5bda22034f8242d5ddc7e21","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ssh2":"1.17.0","pdfjs-dist":"6.1.200","@ast-grep/cli":"0.44.1","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","typebox":"1.1.38","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"peerDependencies":{"typebox":"1.1.38","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_1.0.0_1784297291919_0.3581534029245992","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@odradekk/pi-square","version":"1.0.1","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@1.0.1","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"skills":["./skills"],"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"bcaa2453020d37f760afb2654e6832dfac650847","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-1.0.1.tgz","fileCount":175,"integrity":"sha512-V3IdeDQ93zxS9rr8rZ3ch29mAw2C5a1V2N89WafIIlMB+oqC0BdWkeDb0x5nPuVc0N1kVsMvxBtIcGmTmbehDg==","signatures":[{"sig":"MEQCIFIGGL4kbNDkCiYoTmdtuURUo2memfS9bdSs8JELvHCmAiAShdClDFKindS1LurQ6k9HjQg3carvDyOIEhZK2Fcn2w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":61856411},"type":"module","engines":{"node":">=24 <25"},"gitHead":"7fe9a7619cee2239aae06052ffbba767a48fca5e","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ssh2":"1.17.0","pdfjs-dist":"6.1.200","@ast-grep/cli":"0.44.1","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","typebox":"1.1.38","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"peerDependencies":{"typebox":"1.1.38","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_1.0.1_1784300842487_0.724558508796834","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@odradekk/pi-square","version":"1.0.2","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@1.0.2","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"skills":["./skills"],"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"45428e98c6f5140ad97692e0d5cc945dffd7203f","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-1.0.2.tgz","fileCount":175,"integrity":"sha512-o+LrISVJSXHZLtNskP8utH+AvxtyYPrSFbe/w2jVf0vXyRLN2Pn5PqauVxAMPqwTGWXqig6D3p76b3KnA5LuBg==","signatures":[{"sig":"MEYCIQCR0agCJ35SIRl7ZEtivyKNmj00CUJzRJYFWm9wdwNf8QIhAMRl0j0pPYCthzNhdLBVkB4VS7pB8XxX7BdhFTORg+lc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":61856725},"type":"module","engines":{"node":">=24 <25"},"gitHead":"d6b7cb2b3a9e82de4e180259a2883df6fccb1bc0","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ssh2":"1.17.0","pdfjs-dist":"6.1.200","@ast-grep/cli":"0.44.1","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","typebox":"1.1.38","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"peerDependencies":{"typebox":"1.1.38","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_1.0.2_1784354301859_0.8839003851089737","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@odradekk/pi-square","version":"2.0.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@2.0.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"skills":["./skills"],"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"d3ef136150b813d81f3613faa6e2a3fb1cecf7b2","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-2.0.0.tgz","fileCount":176,"integrity":"sha512-exiL2YKhkjP5uxAv2VyvkuimS6qL5Mtz7mMgX44q4oOrrIPyHmU0AkFZHPNXxYtfzHGR9jCe08pByooNihevpg==","signatures":[{"sig":"MEYCIQC5S6w2eslFMoKaT3hKLEUqOTQiDjwN9KqC9DMpaVPGzQIhAJMaRBldOf1vgC0DECtVR8QELrAzFdQrd0BPL8mloxkz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":61862750},"type":"module","engines":{"node":">=24 <25"},"gitHead":"cf8e5256b86b6e4ff66adf80af10896bb6b65b09","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ssh2":"1.17.0","pdfjs-dist":"6.1.200","@ast-grep/cli":"0.44.1","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","typebox":"1.1.38","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"peerDependencies":{"typebox":"1.1.38","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_2.0.0_1784378342683_0.9451195861094341","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@odradekk/pi-square","version":"2.0.1","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@2.0.1","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"skills":["./skills"],"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"183d4f31caac6cdee39e28e0dfdf212c415a06f6","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-2.0.1.tgz","fileCount":177,"integrity":"sha512-ezCf18i0jkHU8a6qv+qrsC1WwFqiLAr4wG/WG4cvuSPVcdqhTHsGByuVCIqXsckjw58oDhtpGqHciu6K1MT6Dg==","signatures":[{"sig":"MEQCIEBp41vAkFLpuQpfnmF8avmJMz+Fh/OkQc/v0OMMA+oFAiA9T+uuDfpFMtcCkB/2bWcrBjl62l8BEC4YkPWT5kDChg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":61869804},"type":"module","engines":{"node":">=24 <25"},"gitHead":"daa0f2c8ef13ee155a9d8771f67e451b6bb7911d","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ssh2":"1.17.0","pdfjs-dist":"6.1.200","@ast-grep/cli":"0.44.1","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","typebox":"1.1.38","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"peerDependencies":{"typebox":"1.1.38","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_2.0.1_1784446906855_0.7433031987659156","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@odradekk/pi-square","version":"3.0.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@3.0.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"skills":["./skills"],"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"e012def40df26e94ab06d46d55018f6ae1450ffd","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-3.0.0.tgz","fileCount":177,"integrity":"sha512-StZn5qQF2RpNhUAab1pSUQcLJdDUHTcjeVpzXcBHHjxJsog7gYBLKFzrNGYUam1hirvrnuM3leLpo01zWZjCtA==","signatures":[{"sig":"MEQCIHW9ezAzc80WP0Hqzr+id3q5nCvL0qfiIgW9mLm/OeIdAiB89jhrOEmC3hLDECaDzlsCb/8y0TANEM/Sj945jnYJsQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":61875416},"type":"module","engines":{"node":">=24 <25"},"gitHead":"d572443f250b41230ea3a4b4d9a12d69e930ba49","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ssh2":"1.17.0","pdfjs-dist":"6.1.200","@ast-grep/cli":"0.44.1","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","typebox":"1.1.38","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"peerDependencies":{"typebox":"1.1.38","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_3.0.0_1785829145407_0.6731276702199205","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@odradekk/pi-square","version":"4.0.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@4.0.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"skills":["./skills"],"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"bc442ef065739c04f52b2054c35cf3ad810f060f","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-4.0.0.tgz","fileCount":194,"integrity":"sha512-2OKQSYYGRfLNvHHcYxQHnEe0NF+n18g/XnfN9agqQTEZtFk1OZqJh4J5vlSjDufQWQBQyEh1oqYpp6JpTUU6lA==","signatures":[{"sig":"MEUCIBb2RaSaDVoDyeaFIeEH0eZ8FdQLKgPYNpjdVztNiJ32AiEA2xmwkIjFe39t1HEzRkf7qza4+KGeJjiX193NIkRz+zY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@4.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":62009454},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"a8f33dd621a3a9d9adb94f540655a0d55cb79a6e","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ssh2":"1.17.0","pdfjs-dist":"6.1.200","@ast-grep/cli":"0.44.1","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","typebox":"1.1.38","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"peerDependencies":{"typebox":"1.1.38","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_4.0.0_1785915830253_0.20568600530316505","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"@odradekk/pi-square","version":"5.0.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@5.0.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"skills":["./skills"],"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"800a00f5f64713350135d339ce35e6c96f90d5a8","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-5.0.0.tgz","fileCount":213,"integrity":"sha512-hOp3Xw7eTODj4k9uWDMRxxP7YNDKuy0AyY0fGGARdScvzKSmvtmKsZcDxhXxksH9UiJePGK6BkgbGg7tLim9eg==","signatures":[{"sig":"MEYCIQDBaNjo0t3mnJeVsMMf/8uSij4ANdgY5ubuX/sxZ0135QIhAIXfxK9BtXmkO7FjXBXqaHly8Y/ZrsRJKKANHvQgvyyc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@5.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":62107971},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"b5060e4f8069b6269dd4e88c7d0e2306be34b15e","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ssh2":"1.17.0","pdfjs-dist":"6.1.200","@ast-grep/cli":"0.44.1","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","typebox":"1.1.38","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"peerDependencies":{"typebox":"1.1.38","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_5.0.0_1785995396554_0.34925747219242576","host":"s3://npm-registry-packages-npm-production"}},"5.1.0":{"name":"@odradekk/pi-square","version":"5.1.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@5.1.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"skills":["./skills"],"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"7925db2c4df4c553c7d074040fe73acd14011bf3","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-5.1.0.tgz","fileCount":213,"integrity":"sha512-jwJY/w3Tn36Rsaoue1NCe/4j+PbZ5vY4ovFp+q943sPfRm5S8oJvJTIU3LNF7i9ye8KmQHeKwCaMfColN5m3VQ==","signatures":[{"sig":"MEUCIQC8U5mlJrQFBRgHMLID8Rcgj7shfOgitO19fOR0rV9beAIgUxhInFbYzJr+C4SchrB1UaQw/kvuzmYuDupQBavQECw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@5.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":62116367},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"4384fd85ec93f39fc37a56c5066c059cd10ea193","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ssh2":"1.17.0","pdfjs-dist":"6.1.200","@ast-grep/cli":"0.44.1","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","typebox":"1.1.38","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"peerDependencies":{"typebox":"1.1.38","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_5.1.0_1786440989731_0.6351264538580779","host":"s3://npm-registry-packages-npm-production"}},"6.0.0":{"name":"@odradekk/pi-square","version":"6.0.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@6.0.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"23e9cae46d1d4f9fa92c3a57b72e90ec998eb84d","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-6.0.0.tgz","fileCount":170,"integrity":"sha512-kjGox+TrajuWP9xKzIPfn4cY9LR3JGVamgW3ic7IjyTdveDt8bQ0LuqdqjJ0eUEi3cw4Zowr/3igTDG0oQ7byw==","signatures":[{"sig":"MEUCIA13ZP7Gti+aUgMu/6Fboa7Ha5bxtng7k0ulm8klsmk8AiEAxFIrPfYg94IH6IT4vrEs7xIZS4GautKZXM50v00SVNo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@6.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":62085079},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"92c3a46ba47749f5500f658c3843ff5cc781b874","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ssh2":"1.17.0","pdfjs-dist":"6.1.200","@ast-grep/cli":"0.44.1","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","typebox":"1.1.38","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"peerDependencies":{"typebox":"1.1.38","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_6.0.0_1786442021080_0.5929233639978635","host":"s3://npm-registry-packages-npm-production"}},"6.0.1":{"name":"@odradekk/pi-square","version":"6.0.1","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@6.0.1","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"87ac88a733069196c258eea014d8218490e4b10b","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-6.0.1.tgz","fileCount":170,"integrity":"sha512-N9TaSkSCHceQMEr4gFOPcaEJda8SZi0FBYqoe1KRBR0jhcO803EayqzMZqWAJ/oQJoDTL/ue2AIPqzSSb7qMxg==","signatures":[{"sig":"MEYCIQCNbcJkH0EDheLfHoXL/c+cTPvSAyQY2pvDwR2IZg+8yAIhAJwMgp3Kd8iaLybVhj5VcUeei0J/+ePWNWdUpd/DysyT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@6.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":62091241},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"ec5310e263d46debfc6fb0eccccddf0e8ef600e2","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ssh2":"1.17.0","pdfjs-dist":"6.1.200","@ast-grep/cli":"0.44.1","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","typebox":"1.1.38","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"peerDependencies":{"typebox":"1.1.38","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_6.0.1_1786462876820_0.0638070794315504","host":"s3://npm-registry-packages-npm-production"}},"7.0.0":{"name":"@odradekk/pi-square","version":"7.0.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@7.0.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"95ebf35508c213d4bb35ab9c2150eb56b6765964","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-7.0.0.tgz","fileCount":156,"integrity":"sha512-tumzxbrBHkYCLw88fWwka2dJr8rcNCWfXpmhOGgRToh+WUawTE6YKGw70TguioI7xuZD97wisagpPRhlpkuU2g==","signatures":[{"sig":"MEQCIC9RncYfNEj/aAb2hKGmMJ3XfUQcOX/d+jOpXhPV1k3RAiA4qE9QBBAgQhHpbPDiXheVmOyhrJeK5LlG5fGQO/xhkg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@7.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49339404},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"50ea42118933afdb69964a93bf2bca744f1d2f39","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ssh2":"1.17.0","pdfjs-dist":"6.1.200","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","typebox":"1.1.38","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"peerDependencies":{"typebox":"1.1.38","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_7.0.0_1786686458001_0.10771962882048025","host":"s3://npm-registry-packages-npm-production"}},"8.0.0":{"name":"@odradekk/pi-square","version":"8.0.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@8.0.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"91c9cf8a7a532030e5258e8e027fd838613f9504","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-8.0.0.tgz","fileCount":156,"integrity":"sha512-6DMDkKndeRtS5u2Z2gh1Nth9NyN5kWGPSGt0U82NwBeR3iu7gFpJThninQWpWRG2qz9dayEXQ5qj581n2dfNIw==","signatures":[{"sig":"MEUCIQCj/W5n2wZxtz+QGQOsHDkdRfN/rY4eCAsZ6h/nncHoAQIgMWd6pv4MJRMgeUmFuG0ifpmJwSsnennEofVEwX8gj/g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@8.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49340215},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"e251dc9e42c78f2d21292cc9ffca0f8782832048","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ssh2":"1.17.0","pdfjs-dist":"6.1.200","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","typebox":"1.1.38","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"peerDependencies":{"typebox":"1.1.38","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_8.0.0_1786701109733_0.076653861501774","host":"s3://npm-registry-packages-npm-production"}},"9.0.0":{"name":"@odradekk/pi-square","version":"9.0.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@9.0.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"e82527b8b2a160ba92cbd9abedb5a3af3c14b9ba","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-9.0.0.tgz","fileCount":198,"integrity":"sha512-PwAIIguXCatbdmn4n7/XpEbalvECFNOawgSAgKeIapueDctFZojQRhMIDB1awxE53kUZ4EcznMB1d342cptlzg==","signatures":[{"sig":"MEYCIQCWmDML99qA958daFdA68x0J2Q8S/qmhqgVFoB7tdxtAQIhAN5KUOItoqJ5QvOZs+Zou53aAy4FleryPdx0Hmvxw5vj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@9.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49523488},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"5d89e2fd6233663f0be89c1c8fd07d612cc7f649","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","pdfjs-dist":"6.1.200","xxhash-wasm":"1.1.0","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.1.38","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"peerDependencies":{"typebox":"1.1.38","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_9.0.0_1787047595797_0.8992615693427433","host":"s3://npm-registry-packages-npm-production"}},"9.1.0":{"name":"@odradekk/pi-square","version":"9.1.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@9.1.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"b87cc5d6b0806a22a1b382b5a1ac45886ad04c24","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-9.1.0.tgz","fileCount":204,"integrity":"sha512-7f17XGDeEtU07HpcCCMtvQw1/BKVNPcnC7IYq+7xjA3Vm+1/L/zKHuY/pNWd0OUWvHiMIKz6/cGC7KdbM2MhfQ==","signatures":[{"sig":"MEUCIAg2DUwwXUqoSjMDfCZSUvhlsHQImIDalJyVrGZAHOwzAiEA2Zrh8gQ5u3bfWCYp2Zx/9RP+Pe2XuUo4k3iTGwCct7w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@9.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49590077},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"38f372a22c00e3827501214dd5c7d8d54052c5d0","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","pdfjs-dist":"6.1.200","xxhash-wasm":"1.1.0","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.1.38","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"peerDependencies":{"typebox":"1.1.38","@earendil-works/pi-ai":"0.80.6","@earendil-works/pi-tui":"0.80.6","@earendil-works/pi-coding-agent":"0.80.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_9.1.0_1787228886150_0.5426885843246136","host":"s3://npm-registry-packages-npm-production"}},"10.1.0":{"name":"@odradekk/pi-square","version":"10.1.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@10.1.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"913af1e656b009f05ad6de75a96b2309ca099d23","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-10.1.0.tgz","fileCount":204,"integrity":"sha512-BzJ07dHJ+/6QYpt1gKwibLPwhiXul5ImtYTHGdh6unpsrM9Dkq0opBYCq7uN5Bxt3gmc3Jnr/BR6+u/c+WpOPQ==","signatures":[{"sig":"MEQCIF6He5OkbcBmKj+H6A3Qb9/xBMoSgx40D/GP1KSDEdRrAiBXGjnanrXk20hyz60ZRimKzNWNLqjrLOrGEt7D1jkINA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@10.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49604495},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"e4cde0be3a695b2e15a22af428b919bea6e1be50","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","pdfjs-dist":"6.2.108","xxhash-wasm":"1.1.0","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.3.7","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"typebox":"1.3.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_10.1.0_1787376077237_0.12781684910952817","host":"s3://npm-registry-packages-npm-production"}},"10.2.0":{"name":"@odradekk/pi-square","version":"10.2.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@10.2.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"d7b3eabc94c46e794b340ce2c0483f4f60699ddc","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-10.2.0.tgz","fileCount":205,"integrity":"sha512-DWP9z3kLMPu2G4QpJDlOrYFcyqulmOZIY4TDy5wlKNBG40suZZMmF8ED2YW1P59XbQo/au5rzqJm4Aziv7XstA==","signatures":[{"sig":"MEUCIGwHSfmDO8MJDU6+SFNhfH2TQaFdlgMDd4VWlt+EfK9xAiEAgh2UTnAM/2OQ5XY0C2cLMOipHVxnggWvnv7AbBA8WgE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@10.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49622305},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"3423e5561ad1d5ce073440c13b5bbdb85abbf3ee","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","pdfjs-dist":"6.2.108","xxhash-wasm":"1.1.0","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.3.7","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"typebox":"1.3.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_10.2.0_1787398835086_0.7768525571953713","host":"s3://npm-registry-packages-npm-production"}},"11.0.0":{"name":"@odradekk/pi-square","version":"11.0.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@11.0.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"fc434d6944f39a78c9d781fc98fbef6a0ee943ee","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-11.0.0.tgz","fileCount":184,"integrity":"sha512-wPfynglrvmnAypuFgjoeGtAtqlBT9M1LGiS+EkMwlqDzqTI7kiiGJujKNafa8e5TyRj3KIcLH/FB6W8jMnLsIA==","signatures":[{"sig":"MEQCIBMXNXFta1jWJXDjNjQavffprWcoO3T8N04qA5blT6m8AiBCpa81bUXhkcHlkm7FbJy17NUuNxfKD/iMkA5lPLbIUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@11.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1565551},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"6cba1f5cfee5d5630405f1ca42d4f3fa13fa2ce3","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","pdfjs-dist":"6.2.108","xxhash-wasm":"1.1.0","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.3.7","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"typebox":"1.3.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_11.0.0_1787410513579_0.07433279917923907","host":"s3://npm-registry-packages-npm-production"}},"12.0.0":{"name":"@odradekk/pi-square","version":"12.0.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@12.0.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"2a45263393a3f2f12adc1e69b89d522c72156c00","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-12.0.0.tgz","fileCount":202,"integrity":"sha512-BROhD2aS++5JwtoxX9lgBoP2m2iCS4sBBQyKj9/zpFtaNRKxEU3M99T0Gm8sITsAM0nTzorHMPCtMq3kPLG/gA==","signatures":[{"sig":"MEQCIFQFZKSf7JiTis4BrIONUdCfzmZpR13rhc9A1hm/U7nWAiAJsIY+75s3wKBKk1EDxzzhJmdkLWPuL9xbnPhY0HpQTw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@12.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2012064},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"3f8e46f1eaeaf67bbbf968598bc1e24f3bd63234","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","pdfjs-dist":"6.2.108","xxhash-wasm":"1.1.0","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.3.7","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"typebox":"1.3.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_12.0.0_1787917325382_0.1047930583688701","host":"s3://npm-registry-packages-npm-production"}},"12.1.0":{"name":"@odradekk/pi-square","version":"12.1.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@12.1.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"5dc5beccc9c2ba5b0840fa0d5af60d5aa21da3e8","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-12.1.0.tgz","fileCount":200,"integrity":"sha512-LHouLs6MydvR6vdkuo9hLSRt3LWq5KQ61x68OK6ajgGqvlZYpevX3Nty4m/mIteHVvaeDNFXgzAs0l3PwoI1XA==","signatures":[{"sig":"MEQCIEOerDB/D3lyugSrPT0a86otg59bBXDsLa12dpbDt2jzAiAYcZ5de4wJl6kufG/5diQp87EiMqIYy9CQmNg/FAy0rw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@12.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1995698},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"3104582b0d4c0f1c35be3e93185f5a0f1155da9e","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","pdfjs-dist":"6.2.108","xxhash-wasm":"1.1.0","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.3.7","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"typebox":"1.3.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_12.1.0_1788092865998_0.5210533457988133","host":"s3://npm-registry-packages-npm-production"}},"13.0.0":{"name":"@odradekk/pi-square","version":"13.0.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@13.0.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"a93ffee6367617e2422408ae5c9f8f38cec78e65","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-13.0.0.tgz","fileCount":200,"integrity":"sha512-FUJHdf1fUJ0fkNfHcm7BdpfmwOsFCzxutLxjS+hS39ykKAcZObSeGvqZVDMAflvW1QxogGEtFJuFWIhIQdC7JQ==","signatures":[{"sig":"MEUCIBghLNjWYMtVMKVKRQNo8CpbDiPjyxDh+XeyGB0ZK0+dAiEA1YxglNH6S0yvyc5sfUxIcwqJ8FPUrFmctlOThNPezAg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGD87NcA75JMGyMiGW29eiJ8qut24xNkGO4da1ECja/2AiAwUJgXs57MaxxSlDlV9AASRvllOnSGgU/Li5O89ix9/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@13.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2076596},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"da34bb19a1d7b432745da2606dff9b4e31b8c446","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","eval:codegraph":"node ./tests/codegraph/eval.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","pdfjs-dist":"6.2.108","xxhash-wasm":"1.1.0","@cantoo/pdf-lib":"2.7.3","@colbymchenry/codegraph":"1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.3.7","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"typebox":"1.3.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_13.0.0_1788499348183_0.9324077662952235","host":"s3://npm-registry-packages-npm-production"}},"14.0.0":{"name":"@odradekk/pi-square","version":"14.0.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@14.0.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"05a08180964ef77b59ffc0dd9b8dcdecf5ea1c10","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-14.0.0.tgz","fileCount":189,"integrity":"sha512-nsplQq+5iXji2ZpcDIFwKg2T1QR0YlOXu8hzRewmf2U54PSc13aa9k7jo86rZdzGdoba830l2MMoemfqt6ruJA==","signatures":[{"sig":"MEUCIQCx78SvGWW///St4xYdMebtz6oWZE1INnp2PhQe/xQ2vAIgaEIzh9z6N44GZlkqi1JVbX3iZAfe1Apwi9VNKFVzFm0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCID9agS58VS6kS+fULImPXlqO0ApxeapJPaD/WPRmkavOAiEAx/iN4FmQKXgGOXXSDI5Mwmzml5JqAcFq7yBe361JcR8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@14.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2027805},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"fc1c09786699ed934cb77b74a9d3a95926309e7d","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","pdfjs-dist":"6.2.108","xxhash-wasm":"1.1.0","@cantoo/pdf-lib":"2.7.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.3.7","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"typebox":"1.3.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_14.0.0_1788595350403_0.2262502833831126","host":"s3://npm-registry-packages-npm-production"}},"14.1.0":{"name":"@odradekk/pi-square","version":"14.1.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@14.1.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"d81bc138407156377ab29562d032782b99483355","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-14.1.0.tgz","fileCount":194,"integrity":"sha512-biaTcbTbFipiBpNV6SFTzfLvPPwlOUeBSmlQ+gbhWeb1YSH3D4XG8gXNKBPYOsq0FuUHzf4fzeC2uTqq+JGiQA==","signatures":[{"sig":"MEYCIQCxJxs+CtiQzdr4IwBW9um2qR2ZDNxgZw6KzHlx/3Kr+AIhAL60Q1YyuO6y6AD/OXlXCI3N98feEItNXxpbPKO7CZjj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEUZb+lc0n7bpQJS7vGwnBFhBxZruDNvtMNeSsk664LEAiBISKOGN57Z4zbeozjq0ExyDA7F+oF60I7gYX7W920Yyw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@14.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2078545},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"725281a5d5d9a0da735cd8a454f3a2c867851308","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","pdfjs-dist":"6.2.108","xxhash-wasm":"1.1.0","@cantoo/pdf-lib":"2.7.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.3.7","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"typebox":"1.3.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_14.1.0_1788677004236_0.5089658641214021","host":"s3://npm-registry-packages-npm-production"}},"15.0.0":{"name":"@odradekk/pi-square","version":"15.0.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@15.0.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"cf5542cc5d1f51b8466221b8cda755dfe240b3db","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-15.0.0.tgz","fileCount":182,"integrity":"sha512-OEYiC2brUowhdujOIQpX0GcZd4uqbN8shjyL9Xy8TxyjvI2+nt99kv3SkzuoLqGDQjj/d7rmvB5FNxrcYWjLDA==","signatures":[{"sig":"MEUCIQDOSjJt2E5ewiB7y2nQEIsoL5qZpzvzK/epZmi/g1KxqAIgU2BK66WQfmhJ/7BCOb4cOos6K9EcH9CN6lSXQT68yWA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGZ2AF4zvzX1FCYIvo9D5A2oHTTlTquzHNhKK3dI8SwPAiEAqPdulfT3DaZwMptmnjDR3mW99aNoWKxujS4CZbkdAzU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@15.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2001922},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"13f7cfe3d48d3abe06e9387fabc22ed6bd1fd721","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","xxhash-wasm":"1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.3.7","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"typebox":"1.3.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_15.0.0_1788695323165_0.5160210125900939","host":"s3://npm-registry-packages-npm-production"}},"15.0.1":{"name":"@odradekk/pi-square","version":"15.0.1","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@15.0.1","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"e9f11573a80d9e10d6519da27e0b42361c92e70f","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-15.0.1.tgz","fileCount":182,"integrity":"sha512-vD9tGaA4Pw0SQI7DBVcpjjr3JDd+7PM/ZgfDxHtaGCs3I/FlN5eQ14CXu3AMCWVwCK4QttoP4QoQduiI7ZXImA==","signatures":[{"sig":"MEUCIQCe8MHE2vXeCcbR4kO9JN+qFOp9lb+NCtWqe5DZA6wtfgIgFFzb5Yl5VfN2jBFxR8TFtHcruAHk5SaaOjUNVucJ8Rc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDYtBsGUQmHzp+IxjoIaXACZViDci8aQp7egBAUzqm3nwIhAKSqNRp6Xu3ChZFEXzd3JvK4oclsMqpY35AcHeb211t8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@15.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2021848},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"dc93aada8752dd2c6d713d0dfd05e07b29d0c717","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","xxhash-wasm":"1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.3.7","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"typebox":"1.3.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_15.0.1_1788793276089_0.559376040467362","host":"s3://npm-registry-packages-npm-production"}},"15.1.0":{"name":"@odradekk/pi-square","version":"15.1.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@15.1.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"19fdcc4315841f6b7644c276e760325748829ce3","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-15.1.0.tgz","fileCount":188,"integrity":"sha512-8djSfDWYGuYN3HVepe0RFBCZR06+gp4I5L+5JDBfLxr+2RXD3LkSBt/bMOr3ISAb9sfIKWZtOXKnC4LwZlmbBg==","signatures":[{"sig":"MEUCIQD5o9eLTg2lKR1cJRq/3VTQqtRuyzZ2FezTte3TMfBGXQIgVYovylpBVkbDgqaDe8dDif2jry2PdSCwYwQLzsY7P0Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHZu9Ogk5MXtmuGbR4tKGV61nxQ52TDaPfRJRPMH4sYaAiEA/QCO30MdfvFPQUmlyd6BbPj6mEZy6SvIsFmAf/tZ5Vs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@15.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2253691},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"f4bb1d8444f6deff736c3e8e81b8b7a30923da59","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","xxhash-wasm":"1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.3.7","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"typebox":"1.3.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_15.1.0_1789109950119_0.5195906443635241","host":"s3://npm-registry-packages-npm-production"}},"15.2.0":{"name":"@odradekk/pi-square","version":"15.2.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@15.2.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"51bdea1f5c3c4eff9ad30a714ce128ef49879abd","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-15.2.0.tgz","fileCount":187,"integrity":"sha512-YcTW8kXuxfMRx+KDj9vhZ0wNTs0PzBC2BQJ4dnYgjmjWkzhKEh+T5aEl25uwOndchWpN2Z6G2pawxa8ekLkzgA==","signatures":[{"sig":"MEQCICVANk5glo6wKDXfqX89Cw/wC/gMX4FxWlrnZCn5YSHiAiAdQTrwqH+v9dv0DX84zoL7JjQMAonbKyh1cqT7wGmcPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHP0E+tF/oYs1fBSfNW9M0r027FU+Ge7ggU1C9a8ILE2AiEA13u4jvAF2dj/y42ejhziL2AtjV7/17EZs1JCljBv6N8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@15.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2288344},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"20cc33f9867d46bb4161b78eac5d5ae144864b74","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","xxhash-wasm":"1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.3.7","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"typebox":"1.3.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_15.2.0_1789316434266_0.7032228710273236","host":"s3://npm-registry-packages-npm-production"}},"15.3.0":{"name":"@odradekk/pi-square","version":"15.3.0","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@15.3.0","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"3a139336b42c753ae6562f5027fedf9b9946b8c9","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-15.3.0.tgz","fileCount":188,"integrity":"sha512-/3YqaqVyU7Nh9RICYxh87ZZHjm26M+ESlQnG815U3OF5VGDa9BnFWSWzXOtpPRuJOQpjbQs362Tw9NiOGjkSVw==","signatures":[{"sig":"MEUCIGImo8RU3sg1z7M0f4dU2lhWNjLV0xosV5ZqgnIdsfKyAiEAmqJh9et6flSbg+1ryJGsz4D8LSwCJdtoezDjGWGUKvc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDS0YHMuvp6GOA8OsKvCaSvw9R9pZauD3xSjy7ptYSLuQIhALXAt/iDy5wR23O2FDFl2nMhQD1w2ooFg2g+dco4xM0v","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@15.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2309627},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"3730da7072e2a1a89f2028c2a49b48b33488d223","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","xxhash-wasm":"1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.3.7","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"typebox":"1.3.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_15.3.0_1789378687720_0.23787512871804117","host":"s3://npm-registry-packages-npm-production"}},"15.3.1":{"name":"@odradekk/pi-square","version":"15.3.1","keywords":["pi-package","pi","coding-agent","extension"],"author":{"name":"s1n"},"license":"MIT","_id":"@odradekk/pi-square@15.3.1","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"homepage":"https://github.com/odradekk/pi-square#readme","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"dist":{"shasum":"c155c79059cb15fd3e12bb4b793703eb258be059","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-15.3.1.tgz","fileCount":199,"integrity":"sha512-MIgVZgsrhJ7lED1VieukdV4hHkd8cjFTOiMj/60lBYodXTz7hZnHIbPvazbcYeNqR5pPB0Cbuj0P7MXae1mHjA==","signatures":[{"sig":"MEUCIBRXc41kQ88/Oeg3LyTOSd6yOCWA9mou0HIgAfC7S9DhAiEAh8LpiuOuRj0yY9dn+YnsDaZZMSlT1Zs8SgvAnULUORI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGFw4lMGm60sAHqaOivLl+fAjuUpFHJaePfTCrJpJmj9AiBQKXfNRj3MpZTFeI8b3mOjO3ZsafdsEcR6G6of0Ta2Ng==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@15.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2399547},"type":"module","engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"ecac3bab00dbdc2943b707db3afc6cd4b43a5b52","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","xxhash-wasm":"1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.3.7","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"typebox":"1.3.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"_npmOperationalInternal":{"tmp":"tmp/pi-square_15.3.1_1789622052944_0.1927973590077674","host":"s3://npm-registry-packages-npm-production"}},"15.3.2":{"pi":{"themes":["./themes"],"extensions":["./src/index.ts"]},"_id":"@odradekk/pi-square@15.3.2","bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"dist":{"shasum":"8e366b36e4f9dd2a6e7c22e1b2920a764242ce39","tarball":"https://registry.npmjs.org/@odradekk/pi-square/-/pi-square-15.3.2.tgz","fileCount":201,"integrity":"sha512-5/iBU1xQ0vlLEJUs9Q9jowgq8XzQ0yrGNzCwgqRn5jYWq0n+SZUrON98StviSQ43lAju73qH3Tl8qQHLgNB5rA==","signatures":[{"sig":"MEUCIB3FcFLOr1mfNeMjtXwISIA8apHFd4NFsKot48cfTurOAiEA0xuYq2IaVt6MEGIui4AHxr6M397frgT1tfVaAdIVp3Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEgNQGB1ZLs0LF4oQksvRnCeUf2docPr37MUMVM7/bkzAiAS7UnU+ZeXo38HbbftKomGM6YAOEjStvU4iqtq8bB1kw=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@odradekk%2fpi-square@15.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2410243},"name":"@odradekk/pi-square","type":"module","author":{"name":"s1n"},"engines":{"node":">=24 <25"},"exports":{".":"./src/index.ts","./display":"./src/display-api.ts","./package.json":"./package.json"},"gitHead":"f9454e73c9a9219fc01d87e7a6aa8c3341d3be06","license":"MIT","scripts":{"test":"node ./tests/run.mjs","smoke":"node ./tests/smoke.mjs","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","bench:frames":"node ./tests/display/frame-cost.mjs","package:check":"npm pack --dry-run --json | node ./scripts/verify-pack.mjs","changeset:status":"changeset status","version-packages":"changeset version && npm install --package-lock-only --ignore-scripts","changeset:version":"changeset version"},"version":"15.3.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6a3e17f-5c8d-4a44-a82a-8f4cc8047ed4"}},"homepage":"https://github.com/odradekk/pi-square#readme","keywords":["pi-package","pi","coding-agent","extension"],"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"_npmVersion":"11.18.0","description":"Unified local extension package for Pi","directories":{},"maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"_nodeVersion":"24.14.0","dependencies":{"diff":"8.0.4","ssh2":"1.17.0","file-type":"21.3.4","xxhash-wasm":"1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","vitest":"4.1.8","typebox":"1.3.7","typescript":"^7.0.2","@types/node":"^24.0.0","@types/ssh2":"1.15.5","@changesets/cli":"^2.31.0","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"typebox":"1.3.7","@earendil-works/pi-ai":"0.84.2","@earendil-works/pi-tui":"0.84.2","@earendil-works/pi-coding-agent":"0.84.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-square_15.3.2_1789740752888_0.7673618099135731"}}},"time":{"created":"2026-07-17T13:37:08.129Z","modified":"2026-09-18T14:12:33.368Z","0.0.0-oidc-bootstrap.0":"2026-07-17T13:37:08.469Z","1.0.0":"2026-07-17T14:08:12.435Z","1.0.1":"2026-07-17T15:07:22.912Z","1.0.2":"2026-07-18T05:58:22.406Z","2.0.0":"2026-07-18T12:39:03.133Z","2.0.1":"2026-07-19T07:41:47.278Z","3.0.0":"2026-08-04T07:39:05.861Z","4.0.0":"2026-08-05T07:43:50.695Z","5.0.0":"2026-08-06T05:49:57.024Z","5.1.0":"2026-08-11T09:36:30.207Z","6.0.0":"2026-08-11T09:53:41.529Z","6.0.1":"2026-08-11T15:41:17.247Z","7.0.0":"2026-08-14T05:47:38.392Z","8.0.0":"2026-08-14T09:51:50.282Z","9.0.0":"2026-08-18T10:06:36.246Z","9.1.0":"2026-08-20T12:28:06.721Z","10.1.0":"2026-08-22T05:21:17.677Z","10.2.0":"2026-08-22T11:40:35.524Z","11.0.0":"2026-08-22T14:55:13.839Z","12.0.0":"2026-08-28T11:42:05.551Z","12.1.0":"2026-08-30T12:27:46.180Z","13.0.0":"2026-09-04T05:22:28.341Z","14.0.0":"2026-09-05T08:02:30.520Z","14.1.0":"2026-09-06T06:43:24.406Z","15.0.0":"2026-09-06T11:48:43.264Z","15.0.1":"2026-09-07T15:01:16.260Z","15.1.0":"2026-09-11T06:59:10.286Z","15.2.0":"2026-09-13T16:20:34.359Z","15.3.0":"2026-09-14T09:38:07.827Z","15.3.1":"2026-09-17T05:14:13.047Z","15.3.2":"2026-09-18T14:12:32.995Z"},"bugs":{"url":"https://github.com/odradekk/pi-square/issues"},"author":{"name":"s1n"},"license":"MIT","homepage":"https://github.com/odradekk/pi-square#readme","keywords":["pi-package","pi","coding-agent","extension"],"repository":{"url":"git+https://github.com/odradekk/pi-square.git","type":"git"},"description":"Unified local extension package for Pi","maintainers":[{"name":"odradekk","email":"luyang0628@outlook.com"}],"readme":"```\n   ┌──────────────┐\n   │  │        │  │    π²\n   │  │        │  │    pi-square\n   └──┘        └──┘    ──────────────────────────────────\n                        unified local extension package for Pi\n```\n\n# pi-square\n\n`pi-square` is a unified extension package for Pi. It provides Prompt Manager, session tools, local text and file search, persistent SSH shells, web search and fetch, library documentation tools, subagents, a unified operational interface TUI, and PowerShell execution.\n\n## Installation\n\nInstall the public npm package for the current user:\n\n```bash\npi install npm:@odradekk/pi-square\n```\n\nUse `-l` to install it for only the current project. The package requires Pi 0.84.2 and Node.js 24.\n\n## Runtime contract\n\n- Pi 0.84.2\n- Node.js 24\n- One extension entry point: `src/index.ts`\n- Package-provided themes\n- Pi-native `SYSTEM.md`, `APPEND_SYSTEM.md`, and `AGENTS.md` discovery\n- A stable native prompt prefix with a dynamic subagent-catalog suffix\n\n## Themes\n\nThe package provides the matched `pi-square-theme-dark` and `pi-square-theme-light` variants. A warm neutral ladder carries the reading surface, a low-chroma indigo accent carries identity, and the semantic status colors stay low in chroma (green success, red failure, amber warning). Both variants include explicit HTML export colors and the complete Pi 0.84.2 theme token set. The two variants share a hue skeleton but are calibrated independently against their own backgrounds rather than mirrored. Every token clears the palette gates in [ADR 0012](docs/adr/0012-self-defined-calm-palette.md): body text at 12:1 or better, supporting tones down to 3.5:1, `accentStrong` always outranking `accent`, success and error separated by at least 1.3:1 in luminance so red/green color vision deficiency keeps a second channel, and no two tokens that must be told apart collapsing onto one xterm-256 index. The display runtime itself uses only Pi's standard semantic tokens, so any valid third-party Pi theme remains supported.\n\n## Operational display\n\nEvery parent-session tool, including Pi's `read`, `grep`, `find`, `ls`, and `write`; the default anchored `replace` and `insert` tools; Pi `edit` only when anchored editing is disabled; and platform shell, uses one calm, evidence-first operational grammar. The canonical state model is lifecycle-plus-qualifier: six lifecycles (`queued`, `pending`, `running`, `completed`, `failed`, `aborted`) determine the marker, and seven orthogonal qualifiers (`warning`, `partial`, `retrying`, `cancelling`, `truncated`, `projected`, `needs-input`) coexist without flattening into free text. One static `●` marks every tool entry in every state; color carries the state through existing semantic tokens (queued/pending/aborted muted, running accent, completed success, warning warning, failed error). When the terminal reports no color, the renderer falls back to a distinguishable one-cell glyph set (`–` queued, `○` pending, `●` running, `✓` completed, `!` warning, `×` failed, `·` aborted). The title carries the tool identity in sentence case, and no two tools of one family share a title (`Grep` versus `Text search`); no family icon is rendered. The header is always exactly one row: a long target is truncated with `…` and the duration stays on the header row. Path targets are workspace-relative, use `~` under the home directory, and elide in the middle when too long without ever losing the file name. Qualifiers such as `truncated`, `partial`, or `needs-input` never render header badges; the marker color and the inline outcome sentence carry the signal. Duration is the first item dropped when the terminal is narrow, then the inline summary elides before dropping, then the target truncates. A collapsed entry is exactly one row carrying the state marker, title, target, an inline muted outcome summary in counts and sizes (`60 lines · 2.1 KB`, `12 of 60 matches · continue at offset 12`), and elapsed duration; a failure states one human sentence inline. Running and queued entries are also one row and never stream a live tail into the collapsed view. Only the mutation family (`edit`, `insert`, `replace`, `write`) keeps a bounded diff/preview body below the collapsed row so file mutations stay reviewable without expanding; payloads of every other tool are visible only when expanded. On terminals of 100 columns or more, entries render in a 60 percent content column (at least 60 cells, left-aligned), and expanded entries keep the same column so expansion never causes horizontal jumps; below the wide tier entries keep full width. Hue carries two levels: the state marker and diff added/removed lines take semantic state tokens, and tool titles take the identity token, while targets, inline summaries, and body text stay neutral. Nothing is colored for decoration, and success or failure never tints a row background. The raw platform text of a failure appears exactly once, in an expanded `ERROR` section. The expanded body adds information instead of restating the header: sections that only repeat the identity, target, or status (`FILE`, `TARGET`, `DIRECTORY`, `QUERY`, `REQUEST`, `SUMMARY`, `ACTION`, `PERSISTENCE`, `STATUS`) are not rendered, and a label-led section rule is drawn only between two or more sections. A body never ends with an empty row. The pending call transitions into its partial or final presentation in one visual slot instead of leaving a duplicate call entry behind. Expanded results use a closed internal section model: path and match records, code and Markdown blocks, diffs, activity ledgers, issues, and diagnostics are grouped by tool semantics instead of rendering one undifferentiated text blob. Strong framing is reserved for diffs, confirmations, and managers. Terminal controls, source-authored Markdown links, malformed URLs, and common credential forms are neutralized before display without changing model-facing arguments or results.\n\nUnified diffs use right-aligned dim line numbers, red and green change markers, three context lines, a `(+N, -M)` header, and word-level emphasis on the changed segment of a replaced line; they use semantic theme colors rather than syntax highlighting. The same shared layout, sanitization, theme, diff, and motion layers serve pi-square's footer, banner, Prompt Manager, ask wizard, todo widget, subagent manager/roster/notifications, and Config Guide. Ordinary Pi user and assistant messages remain native and are not patched. Collapsed output follows each tool's effective `resultMode`; expanded output reveals bounded internal sections under `expandedMaxLines`; errors remain visible even when normal results are hidden. The per-tool expanded contracts are documented under `docs/design/`.\n\nMotion is session-owned and uses one scheduler for all pending surfaces. The marker never animates; the scheduler drives only the elapsed duration. `full` uses a 120 ms interval (approximately 8.3 FPS), `reduced` uses a 1 s interval, and `off` is static. Non-TTY, test, CI, and incapable terminal environments downgrade deterministically. Child sessions construct their own tool definitions without a display runtime; only parent-visible child activity summaries use the shared declarative formatter.\n\nRun `/display` to open the non-overlay manager. It provides searchable global, family, and tool nodes; effective value and source labels; current/dark/light previews at 40, 80, and 120 columns; agent/project scope selection; per-node reset; and a CURRENT/STAGED review before save. Saves use a workspace-bounded lock, full-file compare-and-swap fingerprint, symlink and identity checks, mode preservation, complete candidate validation, and atomic rename. A stale external write returns to review instead of overwriting it. Successful policy and motion saves apply immediately; resolving a renderer ownership conflict still requires `/reload`.\n\nWhen a legacy display configuration is detected (deprecated `diffIndicators` field, `footer.mode`, or `motion: \"reduced\"` meaning change), the manager auto-opens a migration review showing scope, provenance, every detected change, canonical defaults, and the complete staged canonical display. Approval writes one atomic canonical candidate through the existing safe writer; decline performs no write and returns to browse. The `m` key re-opens the migration review from browse.\n\n## Operational footer\n\nThe TUI uses a two-row operational footer (plus an optional third overflow row) that preserves Pi's native data semantics in a compact two-row layout. The first row aligns model, provider, and thinking level against cumulative usage (input ↑, output ↓), cache read/write with latest hit rate, and subscription-aware cost. The second row starts with `Loc:` followed by project path, git branch, and session name, aligned against a thin context bar with native 70% warning and 90% error thresholds. Data is read directly from Pi's read-only session manager, model registry, context API, and footer data provider on every render; the extension does not poll git, persist duplicate usage state, or copy internal session data.\n\nAt 120 columns the footer shows all available fields. At 80 columns it keeps core usage and context while dropping provider and session detail. At 40 columns it prioritizes context risk, model, and thinking level. The matched dark and light themes use one restrained accent, dim/muted supporting text, and semantic color only for risk or cancellation; the footer has no background cards, emoji, or decorative animation.\n\nDisplay diagnostics publish through Pi's official `ctx.ui.setStatus()` API, and a conditional third footer row displays them with their own state markers (! for diagnostics, · for other extension statuses) rather than a blanket warning marker. Background subagents no longer publish a footer status: while the current parent session has children visible in the current main task — active children plus those that terminalized inside it — a session-scoped vertical roster appears below the status area and above the editor. The roster lists children only: the main session is never a roster row and stays in Pi's native transcript, and the whole surface — roster, keyboard entry, and overlay — is built on Pi 0.84.2 public extension APIs alone, with no private Pi API and no upstream fork. The roster keeps one row per such child in roster-creation order (full public ID as the deterministic tie-breaker); a resumed public ID keeps its single row and slot, and lifecycle or activity changes never reorder rows. Each row is one physical line showing a hollow selection marker, the role, a collision-safe public-ID prefix (eight characters, extended only while ambiguous within the roster), the lifecycle (`– queued`, `● running`, `× cancelling`, `✓ completed`, `✗ failed`, `× aborted`), the elapsed duration, and a latest-activity summary that carries only tool identity and structurally safe metadata such as counts and line ranges — free-form argument values (paths, patterns, queries, commands, identifiers) never render, and neither do tool-result payloads. Under width pressure a row drops latest activity first, then the duration, then truncates the role while keeping marker, unique ID, and lifecycle. At most ten child rows show at normal terminal heights, the budget shrinks on short terminals, and rows beyond the initial viewport are accounted for with a `… +N more` line. The roster is absent when no child is visible in the current main task and is never created outside interactive sessions; it adds no state or retention beyond the existing background store. Roster visibility follows the current main task: completed, failed, and aborted rows stay inspectable until main accepts the next real prompt, which expires the preceding task's ordinary terminal rows, while queued, running, and cancelling children survive the prompt and stay visible when they later terminalize. The boundary is where main provably accepted the prompt — the agent-run start for an idle prompt, the injected user message for a steer or follow-up queued during a running turn — so a prompt another extension consumes from the input chain, one that fails before the run starts, slash commands, local `!` shell commands, editor drafts, roster navigation, overlay changes, transcript scrolling, and extension follow-ups such as the `/subagent` Config Guide never expire anything. The store's finished-job bound and pending/claimed delivery exemptions stay the single retention authority; the manager still owns historical inspection, and parent replacement, reload, fork, resume, and shutdown close the overlay, clear the roster, and leave aborting children and resetting delivery to the established shutdown path.\n\nWhile the native editor holds exactly zero content, the roster is keyboard-selectable: the first Down press selects the first child and the first Up press selects the last, movement clamps at both ends and never wraps, and the current candidate carries a solid selection marker while every other row stays hollow. The viewport follows the candidate so children beyond the first ten rows stay reachable, and a scrolled window states its hidden rows with a leading `… +N earlier` line. Enter opens the selected child in one centered, capturing, read-only transcript overlay while the main session keeps running behind it; Enter without a candidate keeps Pi's behavior. Opening a child is never a session switch: the parent stays Pi's one active writable session, a child is not a writable session from the viewer, and no input is ever sent to the child — typing and pasting always target the main editor. Navigation never activates while the editor holds even one character of draft, whitespace, or pasted content, beginning to edit clears an unopened candidate, and while any pi-square-owned modal (the `/subagent`, `/display`, or `/shadow` manager, the ask wizard, or an SSH confirmation) has focus the keys stay with that modal.\n\nThe overlay shows the child's role, collision-safe public-ID prefix, lifecycle, duration, and a bounded, incrementally loaded view of the child's complete persisted history of ordered user, assistant, thinking, tool-call, and tool-result entries. History loads on demand from the child's validated native session file: opening reads one bounded tail page, PageUp at the loaded top requests the next bounded older page until the earliest entry of the original delegation and every same-ID resume is reachable, PageDown reloads newer pages evicted from the bounded in-memory window — stitching forward across a record larger than one page just as the older direction does — and Home/End walk toward the file edges in bounded steps. Page boundaries stitch newline-terminated records at the byte level in both directions, so multibyte text is never split or duplicated; every record must carry the minimal native envelope (a non-empty `type` and `id`, unique within the loaded window), and a malformed, invalid, duplicated, oversized, or replaced record fails that one page in its own direction with a bounded retryable error on the edge it belongs to (the older edge suggests PageUp, the newer edge PageDown) while every already validated page stays visible. Each read opens the file once, verifies that the path still names the same regular-file descriptor, and rejects symlinks — even ones pointing inside the artifacts directory — plus every other non-regular file type. The in-memory window never exposes more than 480 projected items or retains more than 64 parsed pages, so metadata-only history is bounded and metadata-only pages compact without displacing the current visible anchor; pages over the bound keep a window into their own parse, and trimming always drops from the end opposite the paging direction so trimmed history stays reachable both ways. The overlay keeps no cache, index, or sidecar beside the native session file and is pi-square's own projection of it — not Pi's private native transcript pipeline. Every text is a display-safe projection before it renders: user and assistant text and thinking pass the shared credential sanitizer and an explicit length budget, while arbitrary provider error diagnostics never cross into the overlay; Pi's public message components see only those bounded copies and fixed failure states. Tool calls use the same roster-grade allowlisted projection as roster rows — cataloged tool identity plus structural counts and line ranges, with free-form paths, patterns, queries, and commands omitted, and raw arguments never rendering. Pi's native assistant grouping stays intact before its tool rows, and a tool result updates the pending call in place, including after either adjacent page is reloaded. The collapsed tool row never shows result evidence; the expand-tools shortcut (below) expands the row to one bounded, credential-sanitized result projection — never a raw or unbounded payload. The shared operational display owns the tool row's canonical title, lifecycle marker and motion (including no-color fallbacks), color, elapsed duration measured from the enclosing session entries, width behavior, muted safe target, and fixed terminal outcome. Unsupported assistant parts remain visible afterward as sanitized generic lines; system prompts, prompt snapshots, session paths, raw JSON envelopes, internal IDs, call IDs, credentials, and unbounded payloads never render. Queued (`Waiting to start`), starting (`Starting…`), empty failed and aborted (with a fixed reason derived only from lifecycle and the closed error-code vocabulary), completed-empty, and read-error states are explicit; a retryable edge error remains visible even when the loaded page projects no transcript rows. Normal terminals size the overlay near 80% width and 75% height centered; small terminals use a near-fullscreen panel with a one-cell margin, and the layout follows terminal resizes while the overlay stays open. Escape first cancels a changed roster candidate (restoring the open child) and only a second Escape closes the overlay, clears the candidate, and returns focus to the main editor; ordinary typed text, completed IME input, or a paste closes the overlay and replays the complete content into the empty editor without submitting it, while Backspace and Delete leave it open. The expand-tools shortcut is consumed by the overlay and toggles only its own tool rows; every other Pi shortcut stays suppressed while the overlay owns input. The roster itself carries no help row — only child rows and their window accounting; the overlay's single status row (below the body) is the one help surface. Viewing is strictly observational: it never pauses, aborts, resumes, claims, consumes, or delivers a child result and never changes the main transcript. While the child runs, the overlay is live: ephemeral view events derived at the child execution boundary stream the in-flight assistant message as an ordered bounded tail below the persisted window (text and thinking parts keep their native interleaving through the same shared projection the persisted view uses), and tool calls render as live operational rows whose terminal state shows immediately on the end event, before the persisted result lands. Delivery is decoupled from the child: an unobserved child retains no view events, publication only enqueues for an open observer, and the default two-stage scheduler gives the child a continuation turn before viewer work. Ordinary updates drain one per tick. Before a queued structural boundary, superseded no-op tool updates are discarded and cumulative assistant deltas reduce to the newest state; the remaining ordered prefix drains through the newest boundary while a 25 ms total flush budget remains, and a slow observer yields the remainder to another tick. Subscriber callbacks run under a real 25 ms JavaScript watchdog that interrupts and evicts a blocked listener; viewer work never runs in the child's event-dispatch stack, and a viewer defect cannot escape into its run record, artifacts, abort signal, or result delivery. The global feed and subscriber counts are hard-bounded, including omission markers, and parent-session replacement installs a new feed generation so late events from an older child cannot enter the new session. A contained viewer failure renders one bounded diagnostic row. Ordinary streaming repaints coalesce to at most one repaint per ~110 ms through the one session-owned repaint timer; message completion, tool start/end, and lifecycle transitions are delivered and repainted at the first structural flush rather than waiting for that window. Completed messages reconcile against the native session file as Pi appends them: immediately before Pi 0.84.2 persists a completed message, its live event captures the current JSONL size, and persisted projections retain their exact line-start byte offsets. A live entry is confirmed only by the persisted occurrence carrying the same bounded content and native timestamp whose line begins exactly at that pre-append floor. Pi persists each message-end before emitting the next, so delayed delivery, a terminal reconcile that loaded the final entry first, a pre-existing identical message, a repeated identical completion, or demand paging can neither duplicate content nor strand it without a lifetime occurrence ledger; missing position evidence fails closed; a message whose persistence never lands keeps its final text visible, and live tool rows shed only when their own persisted call and result rows appear. The live tail is bounded: overflow sheds the oldest entries with one explicit omission state, uses bounded hashed content/call identities to recover dropped message occurrences one-for-one and terminal tool events only after their result appears, and keeps unknown drops visible; it never sheds the newest entry or drops silently. A child that terminalizes while open stays open and shows its final lifecycle and content, and a queued child shows `Waiting to start` even before its session file exists. Live events stay session-scoped: parent session replacement and shutdown clear the feed together with the overlay. The overlay is pi-square's own bounded projection of the child session, rendered through Pi's public message components and pi-square's display adapters rather than Pi's private native transcript pipeline, so exact parity with Pi's private transcript features is not promised: the native main transcript keeps its own search, prompt jump, and image handling, and the overlay provides no transcript search, no prompt jump, no click selection, no arbitrary third-party renderer registration, and no native image parity — unsupported content renders as sanitized bounded fallbacks. Pi 0.84.2 exposes no public focus query, so a third-party capturing overlay opened on top of the editor can still conflict with the roster's Up/Down — a documented limitation of the global input listener; use the `/subagent` manager to resume or cancel children.\n\nWhile the overlay is open it also carries the cross-child reading experience. Up and Down move a roster candidate anchored on the open child — clamped at both ends, never wrapping — and the solid roster marker follows the tentative candidate while one exists and returns to the open child when it is cancelled; the roster window keeps that focus row visible under its current row budget, including after a height-only resize. The overlay footer names an off-screen candidate's role and unique short ID so selection is never blind while the overlay covers the roster; under width pressure the hints drop first and the role truncates, so the unique ID is the last thing to shrink. Enter re-points the same overlay at the candidate in place, with no stacked overlays and no pass through the main view; Escape first cancels a changed candidate and restores the open child, and only a second Escape closes the overlay and returns to the main editor. Each child independently preserves its loaded history window, scroll position, follow state, new-output notice, and tool-expansion state across direct switches, so comparing parallel children never restarts at the bottom. The first open follows the transcript tail and keeps following sustained live and persisted growth; scrolling upward suspends following (the position is anchored on its transcript entry, so width changes and narrow/wide round trips re-wrap without jumping to another entry), and new live or persisted output below a suspended view sets a visible `new output below` footer state that End clears while resuming follow — End is the resume key, while the mouse wheel and in-window paging never silently re-enable it. The expand-tools shortcut (ctrl+o by default, honored through Pi's effective keybindings) toggles only the open child's tool rows and never the background main transcript; an expanded row reveals its bounded sanitized result projection while the collapsed row stays exactly one line. The full key map: Escape closes (after cancelling a changed candidate), Up/Down move the roster candidate, Enter opens the candidate, PageUp/PageDown/Home/End and the mouse wheel (fullscreen TUI mode, where the terminal defers wheel events to the overlay; inline regular mode keeps the native scrollback — Pi 0.84.2 exposes no public API for extension-visible wheel events there) scroll the transcript, ctrl+o or the remapped expand-tools binding toggles tool-row expansion, and ordinary typed, composed-IME, or pasted text closes the overlay and replays into the main editor without submitting. View-state transitions stay strictly observational — switching, scrolling, expanding, and cancelling never touch a child's lifecycle, result ownership, delivery, waits, aborts, or resume eligibility.\n\nThe redesigned footer is always installed in TUI mode. The former `footer.mode` field is accepted only as a deprecated V2 migration input, has no runtime effect, and can be explicitly removed from `/display` review. The former `/statusline` command, `alt+s` shortcut, and `statusline.enabled`/`statusline.shortcut` settings are not registered.\n\n## Banner\n\nIn the TUI, `session_start` installs a compact operational π² header through `ctx.ui.setHeader()`, colored only from standard semantic theme tokens. Display ownership and settings diagnostics appear as a bounded warning row. Set `\"banner\": { \"enabled\": false }` in `config/pi-square.json` to restore Pi's built-in header instead.\n\n## Interactive questions\n\nThe `ask` tool presents one to ten single-select or multi-select questions in a focused Pi-native wizard. Its theme-driven form uses a compact step rail, distinct focus and selection states, responsive option summaries, a stable paged details area, and a command bar that reflows vertically in narrow terminals. The form remains left-aligned and contracts to half the terminal width on wide screens while preserving a 60-column readable minimum. Choices remain editable while moving between questions, optional comments use Pi's multiline editor, and multi-question calls end on a compact review checklist before submission. Required questions must contain a selection or comment; optional questions expose an explicit Skip action. Escape cancels the whole call, with confirmation when unsubmitted selections or comments would be discarded. The tool call uses the shared operational interface renderer and exposes only a question count, never question or option text. Partial updates show bounded progress metadata, and expanded successful results reveal the sanitized JSON v1 answer payload within the configured display budget.\n\n`allowComment` now defaults to `false` and `required` defaults to `true`, matching the public schema. Option descriptions are supported, comments are limited to 4,000 characters, and duplicate question IDs or option values are rejected before the TUI opens. Successful, cancelled, and failed calls return a self-contained JSON v1 model payload instead of the previous Markdown answer text. Consumers that parse `ask` output must migrate to the `version`, `status`, and structured `answers` fields. Cancellation discards all unsubmitted answer drafts, and `ask` remains unavailable outside an interactive terminal.\n\n## Session todo\n\nThe `todo` tool maintains a bounded, branch-aware task list for the current Pi session. Tasks use `pending`, `in_progress`, and `completed` states, with at most one current task. `set` starts the first pending item, completing the current item advances to the next pending item by default, and `pause` explicitly leaves unfinished work without a current item. The Agent owns all writes; the persistent above-editor widget is intentionally read-only.\n\nThe widget uses a quiet left-aligned content column: narrow terminals use the available width, while wide terminals contract to approximately half width with a 60-column readable minimum. Its height is limited to roughly 30% of the terminal, between 5 and 12 rows. Short lists remain complete; longer lists show a viewport around the current task with explicit hidden-item counts. Internal IDs stay out of the widget, completed/current/pending states use semantic theme colors, and the widget closes when every task is complete or the list is cleared.\n\nCalls and results use the shared operational interface renderer. Calls expose the action and safe control metadata without task text; collapsed results state the task counts inline in the one-row entry, and expanded results reveal the task records and the sanitized JSON v1 snapshot within the configured display budget. Model-facing results are self-contained JSON v1 snapshots. The input contract accepts `set`, `add`, `update`, `start`, `pause`, `check`, `uncheck`, `clear`, and `list`; the old `create`, `replace`, and `status` aliases are no longer registered. Lists are limited to 20 items, explicit IDs must be unique stable ASCII identifiers, and failed or idempotent operations do not append persistence snapshots. Existing `pi-square.todo.v1` session entries are migrated when restored; new mutations write `pi-square.todo.v2` state.\n\n## Local search tools\n\npi-square no longer ships text-search or file-discovery tools. Local search is the responsibility of Pi's own built-in `grep` and `find` tools, which pi-square only re-registers to apply the shared operational display. The bundled `rg` and `fd` binaries and their wrapper tools were retired in 11.0.\n\nPi resolves the `rg` and `fd` executables itself: it uses its own tools directory, then `PATH`, and otherwise downloads the current release from GitHub on first use. Search is therefore unavailable in an environment that has neither executable and no network access to GitHub, including a session started with `PI_OFFLINE=1`, a restricted corporate proxy, and Android/Termux, where Pi never downloads. Install ripgrep and fd through the platform package manager in such an environment.\n\n## Subagent tools\n\nDelegation uses four model-callable tools. `delegate_subagent` and `resume_subagent` are background-only queueing tools: `delegate_subagent` queues a fresh child with a required `task` plus optional `agent`, `context`, `cwd`, `model`, and `thinkingLevel` overrides, and immediately returns the child's new public ID and queued state; blank optional strings are treated as unset so they never override YAML definition or parent-session values. `resume_subagent` queues a continuation for an inactive persisted child with `id`, `task`, and optional `context`, and immediately returns the same public ID and queued state. A resume reuses the frozen child history, prompt, model, effort, tools, skills, and working directory of the original run, and a child with an effective activity lease is rejected immediately with a specific `SUBAGENT_ACTIVE` error before anything is queued. Finished results arrive through the background completion delivery described below. `wait_subagent` joins one to six current-session background runs explicitly: it accepts a strict `ids` array, deduplicates repeated IDs while preserving first-occurrence order, validates the complete request before any state change, and rejects an unknown, foreign, ineligible, already-claimed, or already-sent ID together with the whole call. `abort_subagent` stops one to six current-session background runs explicitly: it applies the same strict `ids` validation, then applies the cancellation seam to every active target and returns only after each has actually stopped.\n\nThe two names replace the former `delegate` and `resume` tools with no aliases or compatibility wrappers. They remain separate tools because models served through the OpenAI Responses API populate every declared schema property, so the resume-only `id` must stay out of the delegation schema entirely. Foreground delegation and the call-specific `systemPrompt` parameter are retired: delegation has one execution model, and the child SYSTEM comes from the definition, the inherited parent core, and the definition policy only.\n\nThe subagent domain speaks one lifecycle: active background runs are `queued`, `running`, and `cancelling`, and terminal runs are `completed`, `failed`, and `aborted`. Run artifacts are persisted as V4 records that name the `operation` (`delegate` or `resume`) instead of a selectable execution mode, and only V4 records are current — listed by the manager, inspectable, rendered, retained, and resumable. Artifact directories written by earlier versions stay on disk untouched but are not read, migrated, or resumed. The frozen prompt snapshot is persisted as V3 with its V3 manifest, without any call-specific policy provenance. Resume eligibility follows the effective activity lease rather than the persisted phase: an inactive `completed`, `failed`, `aborted`, or stale record with no live lease remains resumable with its frozen prompt, model, effort, tools, skills, and working directory.\n\n### Explicit result ownership and waiting\n\nThe confirmed-delivery pending set carries atomic claim, take, and release operations. A `wait_subagent` call claims its complete selection before waiting: queued, running, and cancelling runs can be claimed before they finish, and an unsent completed or failed result is claimed and returned immediately. Claimed results are excluded from automatic delivery, one ID can be claimed by at most one waiter, a result that was already sent for delivery cannot be withdrawn into a wait, and at most 50 reservations are held at once — a claim past the bound or over an already-claimed ID fails atomically. The pending set's 50-result bound stays total: claimed entries count toward it but are never evicted, so when the bound is full of claimed entries an incoming unclaimed result is the one dropped, exactly like the oldest result beyond the bound before. Deleting a run's history ends its reservation as well; the previous holder wakes and ends its wait deterministically, and a later waiter that re-claims the identity is never touched by the stale handle. Only runs of the current parent session are waitable — background jobs that an earlier parent session left in the process are as foreign as persisted records on disk.\n\nThe waiter returns only after every claimed run reaches `completed`, `failed`, or `aborted`, takes the complete claimed set in one atomic step, and returns every entry in requested-ID order with the established result budgets and no `(resent)` marker. A failed or aborted entry marks the whole tool result as an error while completed siblings stay visible. Interrupting `wait_subagent` releases its claims without stopping the children: released completed and failed results rejoin the automatic delivery schedule, and released aborted results leave delivery storage entirely, because an aborted run that no waiter owns never notifies the parent. An aborted outcome reaches a waiter only when the ID was claimed before the abort. A session replacement, reload, or shutdown terminates every outstanding wait and clears its memory-only claims.\n\nWhile a result is pending or claimed, `resume_subagent` and the `/subagent` manager both reject a resume with distinct recovery-oriented errors (`RESULT_PENDING`, `RESULT_CLAIMED`): a new run under the same public ID would overwrite output the parent has not received. Wait results carry a versioned `wait_subagent` details payload with the ordered IDs, each terminal state, and the explicit statement that the results were consumed from the pending store. The per-run details are an explicit bounded projection — identity, terminal outcome, a 300-character task line, and 4,000-character head/tail-clipped result or error evidence — so the full run record with its prompt snapshot, session paths, and unbounded texts never enters.\n\n### Explicit abort\n\n`abort_subagent` validates the complete selection before any abort signal is sent: one malformed, unknown, or foreign ID rejects the whole call, and repeated IDs deduplicate in first-occurrence order. Queued and running targets receive this request's abort signal through the same cancellation seam the `/subagent` manager's Cancel action uses, and the tool waits until each active target reaches the `aborted` terminal state; a target that was already cancelling keeps the signal of its earlier cancellation, so the request sends no duplicate signal and only waits for that stop to complete. Once a signal has linearized against an active target, abort wins a simultaneous natural-completion race and the run finishes `aborted`; a target that was already terminal before the request keeps its real state and is only reported — completed without repeating its successful result, failed with its complete established bounded error, and aborted with its abort reason.\n\nA successful abort request is a successful tool call even though its active targets end `aborted`. Tool-level error marks a request that was rejected — validation, ownership, or infrastructure failure — or one whose terminal-state observation could not complete: when the tool's own wait is interrupted or ended by a session replacement or shutdown, the final states of the selected active targets were not observed and the result says so truthfully, while the abort signals already sent are never retracted and the targets keep stopping on their own. Aborting never claims or consumes a result: a run claimed by `wait_subagent` stays owned by that waiter, which receives the aborted terminal outcome, and an ordinary aborted run never enters the automatic completion delivery. The versioned abort details preserve request order and record each target's state before the request, its terminal state, whether an abort signal was applied, and its bounded failure or abort reason, using the same bounded projection discipline as wait details.\n\n### Background result delivery\n\nA finished background run enters a session-owned pending set instead of being sent once and forgotten. Up to six results are delivered together in one message, so a burst of completions costs one parent turn rather than one turn for each result. A running parent receives them at its next turn boundary, a parent that finished its turn normally receives them at once, and a parent whose turn the user interrupted receives them when it starts the next turn. A result counts as delivered only when Pi injects the message into the transcript; a result that is still unconfirmed when the parent goes idle is delivered again and marked `(resent)`, which is what a discarded message queue requires.\n\nCompletion notifications use the V5 payload with the current terminal vocabulary; only V5 notifications are generated, confirmed, and rendered. Each result text is bounded at 24,000 characters, and a failure text uses the same bound. An oversized text keeps its head and its tail with a visible `[omitted N characters]` marker, because a subagent report states its conclusion at the end. The pending set holds at most 50 results, results that are still undelivered are never dropped by job compaction, and the `/subagent` manager marks the individual undelivered runs. The pending set lives in the current parent session only: deleting a run's history drops its result, and a result that is still pending when the session ends is not delivered to the next session.\n\n## Subagent presentation\n\nThe `delegate_subagent`, `resume_subagent`, `wait_subagent`, and `abort_subagent` tools use the shared collapsible operational interface layout. The primary tool presentation is unframed and uses the same one-cell status rail, bounded metadata, preview, and responsive rows as the other pi-square tools. Calls identify the agent or short run ID, show a bounded task preview, and report safe model, effort, and context metadata. Both queueing tool results render the queued state with the run ID, matching the calm operational grammar for every other tool. `wait_subagent` shows the selected count while running — the short ID for a single run — and the ordered terminal evidence at completion: one inline summary with the outcome counts, an error sentence naming how many selected runs failed or aborted, and one bounded expanded row per run in requested order. `abort_subagent` shows the same selected-count target while stopping and renders a successful request as a completed call whose inline summary states the truthful outcome counts; the expanded body carries one ordered target row per run — the terminal outcome, the pre-request state, and the bounded task line — plus one quiet evidence section for each failed or aborted target, while a completed target contributes its outcome only. Background completion messages remain the deliberate exception: they steer an active parent run at its next model boundary or trigger a new turn when the parent is idle, then render the bounded result inside Pi's native success/error tool shell. One message may carry several finished runs; each run keeps its own canonical description, and the shell reports a failure when any run in the message failed.\n\nThe subagent roster and the `/subagent` manager summarize a background child through the latest allowlisted tool-call summary, and completion messages show a bounded conclusion and usage metadata. Expanded completion results show the bounded full result, up to eight recent allowlisted activity rows, and up to four tool issues. Status uses monochrome text glyphs such as `✓`, `!`, `×`, and `–`, never emoji presentation characters.\n\nThe shared allowlisted activity formatter keeps the existing bounded target and argument summaries for the manager and expanded activity views; unknown tools expose only `called`, and those surfaces never render tool-result payloads. The child transcript viewer is the bounded exception described above: only its expanded tool row may show one credential-sanitized, length-limited result projection. The roster applies a stricter projection of the shared timeline: it renders only cataloged tool identity plus URL/query counts or numeric line ranges, and omits every free-form path, pattern, query, command, or identifier. Credential-form redaction remains defense in depth. Every surface labels runs by shortened IDs: the roster's collision-safe prefixes start at eight characters, extend only while two retained children would collide, and elide under narrow width instead of dropping the lifecycle. Normal results omit system prompts, raw session JSON, and artifact paths. Rendering removes terminal controls and redacts common credential forms without changing model-facing content or background delivery.\n\n## Subagent V2 prompts and manager\n\nSubagent definitions now require `promptVersion: 2`. Discovery composes package, user, and project definitions in that order, so the nearest project `.pi/subagents/*.yaml` has the highest precedence, followed by `~/.pi/agent/subagents/*.yaml`, then package definitions. Same-name files are field overlays rather than whole-definition replacements: omitted fields inherit, `null` clears a scalar override, and an empty array clears an inherited list. Every effective field retains its source scope, path, and SHA-256 for manager display and prompt drift checks. `visible: false` removes an effective definition from the parent catalog and tool lookup without modifying the read-only package file.\n\nV2 separates prompt authority explicitly: `policy` is an optional SYSTEM-layer constraint, `instructions` replay before every fresh or resumed task, and `output` replays after every task as the delivery contract; `inheritParentSystem` (default `true`) controls whether the parent system core joins the child SYSTEM beside the immutable subagent governance. The packaged `example_profile` definition and the normative `subagents/schema-reference.md` (overlay semantics, validation stages, and executable examples) ship as the authoring reference.\n\nDefinitions are written in a small YAML subset, not full YAML: what the subset does not support is rejected with a named error instead of silently storing a wrong value. Four forms fail outright — block scalar chomping or indentation indicators (`|-`, `>+`, `|2`), inline comments (quote the value to keep a literal `#` such as an issue number, or move the comment to its own line), non-lowercase `null` spellings and tilde lookalikes, and blank lines inside a block list. List items must be indented under their field, and one field error excludes the whole file: there is no warning level, value fallback, or partial effect.\n\nDefinitions may omit `model` and `effort`. A fresh run inherits the parent session's current values and freezes the resolved values for deterministic same-ID resume; an explicit call override still takes precedence, and following a newly selected parent model requires a fresh ID. Omitted or empty `tools` selects the runtime built-in defaults, while the exclusive `tools: [none]` sentinel disables every built-in tool. Extension tools remain explicit opt-ins. Omitted or empty `skills` loads all discovered skills; `skills: [none]` disables them.\n\nThe package layer ships no roles: role division varies by project and workflow, and every delegatable definition lives in the agent or project layer (see [ADR 0017](docs/adr/0017-clear-subagent-package-layer-and-layer-config-guide.md)). Agent and project overlays may define roles with any name, including the retired `oracle` and `librarian` names and the former package roles `explorer`, `crawler`, and `generalist` — a removed bundled name is neither reserved nor occupied. Anchored editing follows the capability boundary, not role names: a definition that declares `read`, `write`, and `edit` receives the anchored read, replace, insert, and write tools while anchored editing is on (see [Hash-anchored editing](#hash-anchored-editing)).\n\nThe child SYSTEM is assembled as immutable subagent governance, optional parent system core, and YAML `policy`; Pi then adds child-cwd project context, selected skills, and a volatile working-directory suffix. That suffix is frozen out of the persisted snapshot (together with the former date-plus-working-directory form written by earlier Pi versions), so an unchanged policy resumes to byte-identical effective SYSTEM prompts instead of appending another suffix per resume. The delegated user message is assembled as replayed `instructions`, reference-only parent history, the current task, and replayed `output`. Parent history may provide facts and confirmed decisions but is not task authorization. Fresh runs persist a frozen effective SYSTEM plus instructions/output and a hash/provenance manifest. Resume replays those snapshots under the same ID; applying a changed definition starts a fresh ID instead.\n\nRun details use persistence version 4 — with `operation` instead of an execution mode — and are indexed by the parent Pi session. Artifact directories written by earlier versions are ignored by the manager and cannot resume, but are not automatically deleted. Normal rendering never exposes prompt snapshots, source manifests, raw session files, or artifact paths. Child anchor-store partitions follow these artifacts: a child's served records are retained exactly while its history is retained and are dropped with it, with a documented bound and eviction order (see [Hash-anchored editing](#hash-anchored-editing)).\n\nThe activity view and manager summarize a child's `read`, `replace`, `insert`, and other calls through the existing shared allowlisted formatter, including bounded target-file summaries; the roster derives its stricter identity/count/range-only summary from the same timeline. None of these surfaces render tool-result payloads or arbitrary argument objects. An anchored refusal in a child (a stale range or a concurrent editor) is the safety mechanism doing its job: it renders as a warning qualifier with a distinct activity marker rather than a failed child, so the failure rate a supervisor sees is not distorted by the mechanism. A genuine environment error in a child still renders as a failure.\n\n`/subagent` with no arguments temporarily replaces the editor with a non-overlay Pi-native three-tab manager and restores the original editor text when closed. Its adaptive 72–104-column workbench is single-column on narrow terminals and splits into list/detail columns when space permits. `RUNNING` shows current-session queued/background work and can cancel it through a real `cancelling` transition while retaining resumable artifacts. `SESSION` shows V4 children created or resumed by the current parent session and supports `Resume original`, `Start fresh with current definition`, and confirmed history deletion. Resume availability follows the activity lease rather than the persisted phase: an inactive `completed`, `failed`, `aborted`, or stale record remains recoverable, while a live lease disables the Manager action and direct resume returns an `isError: true` `SUBAGENT_ACTIVE` result without modifying session history. `DEFINITIONS` shows effective values and field sources, with project-default or explicitly agent-scoped create/edit/hide/delete actions. Rejected definition files stay listed as selectable entries beside valid ones — an error-colored `!` marks an invalid definition, while the neutral dim `◦` marks a hidden definition that overlays can reveal — and selecting an invalid entry shows its source file, every error, and a repair hint; Enter on one explains that it is invalid instead of opening the overlay editor. Task editors, scope/field choices, `inherit`/`set`/`clear` controls, YAML/effective-diff review, and destructive confirmations remain inside one focus-preserving manager workflow. Manager-started resume/fresh actions enter the session-owned background lifecycle, remain visible and cancellable, and return completion notifications. Package definitions are never edited in place.\n\n`/subagent <request>` first appends a bounded, collapsible `Subagent Config Guide` custom message containing the layered V2 contract and effective-definition metadata, then sends the unchanged request in a separate native user message. The guide's field table, built-in tool names, and effort values are generated from the parser's and resolver's code constants, it states that `extensionTools` and skills have no static list and are discovered at runtime, it carries the YAML-subset constraints and the three validation stages (a saved file is not yet a working configuration), and it names the packaged `subagents/schema-reference.md` path. Both use follow-up delivery, preserve guide-before-request ordering during streaming, and trigger only the user turn. The guide uses the same unframed operational status rail and label-led rule as other pi-square surfaces; its collapsed summary shows definition count and effective scopes, while prompt bodies remain excluded. The command does not directly parse mutation subcommands.\n\n## Shadow Minds (experimental, disabled by default)\n\nShadow Minds are persistent, read-only cognitive roles that observe a session at\ndeterministic boundaries. The feature is experimental (odradekk/pi-square#149)\nand ships disabled by default: installing or upgrading pi-square never creates\nShadow model calls. The complete guide — configuration, definition and schema\nformat, triggers, tool and model boundaries, `/shadow` and the Config Guide,\ninbox delivery, cross-task semantics, debug data, and cache metrics — is\n[`docs/shadow-minds.md`](docs/shadow-minds.md); the architecture decisions are\nrecorded in ADR-0011. No success-rate, correctness, or cost-efficiency\nimprovement is claimed: the feature has not been evaluated with real-model A/B\ntesting.\n\nWhat ships today:\n\n- User-owned definitions in exactly two scopes (#188): agent-base files\n  under `~/.pi/agent/shadow-minds` and the nearest project overlay under\n  `.pi/shadow-minds` merge by stable ID, with per-field provenance,\n  trigger-instruction key merge, atomic output-schema replacement, and Markdown\n  body replacement versus inheritance. Project participation never depends on\n  project approval. Two packaged reference assets — the annotated\n  `shadow-minds/example.md` and the normative `shadow-minds/schema-reference.md`\n  — are documentation only and never enter discovery; package upgrades cannot\n  add effective definitions.\n- A read-only `/shadow` manager (#190): every effective definition with its\n  merged fields, per-field provenance, layer sources (scope, full file path,\n  content hash), hidden and invalid state, diagnostics, the responsibility\n  body, and a copyable edit path with the `/shadow <request>` hint. Manual\n  trials, runs and scheduling, the result inbox, pause/resume, and usage and\n  cache diagnostics stay; definition create/edit/delete affordances, scope\n  editors, candidate reviews, confirmations, and the dedicated overlay\n  writer stack are gone. Each no-argument invocation rediscovers files before\n  opening, and an open manager holds a stable snapshot with no watcher. The\n  reopen revalidates pending automatic work against the refreshed registry and\n  agent master switch — deleted, disabled, hidden, invalid, or unsubscribed\n  activations, and all queued work while the master switch is off, drop with\n  visible scheduling evidence — while running runs keep their frozen\n  definition, model, tools, authority, and cwd, and completed inbox results\n  are never mutated by a refresh (#191).\n- `/shadow <request>` is the natural-language configuration and consultation\n  path: a bounded Shadow Config Guide is delivered before the unchanged\n  request, and only the user request triggers a turn. Questions are answered\n  without file changes; clear create, modify, enable, disable, and delete\n  requests run through the ordinary `read`, `write`, and `replace` tools with\n  the platform shell for deletion — drafts never enable the agent-only master\n  switch, agent config edits preserve unrelated settings, and every mutation\n  ends with a re-read, an expected-effective-behavior and cost report, and a\n  prompt to reopen `/shadow` for production diagnostics (#189).\n- Manual trials: every definition offers **Run manually** in the `/shadow`\n  manager, evidence-grounded definitions included. An optional bounded\n  one-time note applies to that run only. The trial executes as a fresh,\n  non-resumable child session whose SYSTEM is the versioned Shadow governance\n  plus a parent-task snapshot — the custom system core, project\n  rules, and canonical working directory, frozen from the parent's prompt\n  options at run start — and whose USER message is the reference-only parent\n  trajectory, the Shadow responsibility, the canonical output schema, and\n  the note. The child's evidence tools come from the approved strictly\n  read-only Shadow-safe catalog — local `read`, `grep`, `find`, `ls`,\n  plus the public `web_search`, `web_fetch`, `library_search`,\n  `library_docs` remote tools when a definition lists them — built\n  from Pi public factories and child-safe pi-square factories, never from\n  parent registry overrides; omitted `tools` select the default local\n  evidence set, `tools: []` keeps the no-tool trial, and required tools must\n  be a subset of the requested set (a missing optional tool drops with a\n  warning, a missing required tool fails before the run prompts). Final\n  tools use canonical ordering plus a stable full-schema hash, and\n  `submit_shadow_result` is always appended last; its payload is validated\n  against the effective schema with field-level retry errors, a valid\n  submission terminates the run, and the validated result lands in the\n  session inbox. Exact `provider/model-id` (or `*`) parent-model filters,\n  explicit missing or unauthenticated model failures, and cross-provider\n  visibility apply to every run. Thinking selection uses the first exact level\n  supported by the chosen model in definition → effective configuration default\n  → activating parent order, and fails rather than silently clamping when none\n  is supported. Each run records prompt/tool/trajectory cache-cohort hashes plus\n  per-request usage and time-to-first-token.\n  The manager shows running state, supports cancellation, and lets you\n  inspect, mark read, dismiss, or delete results.\n\n- Bounded recoverable result inbox: when the parent session persists, results\n  live in a dedicated hidden Shadow partition under the session directory,\n  keyed by the stable parent session ID — one versioned atomic JSON file per\n  result plus a bounded index of ordering and summary metadata, so reopening\n  the session restores its results and each result also leaves one bounded\n  reference entry (never the payload) in the parent transcript. Result\n  entities record the Shadow identity and definition-source hash, trigger,\n  configured delivery, hash-bound validation schema and payload, aggregate and\n  per-request cache/usage/TTFT data, tool-call count, lifecycle/truncation\n  qualifiers, and independent delivery (`notified | pending | delivered`) and attention\n  (`unread | read | dismissed`) states; Send to agent, read, dismiss, and\n  delete are distinct atomic transitions. Retention keeps at most 100\n  results and 16 MiB, evicting the oldest resolved entries before unread\n  notified ones and recording eviction events in the manager. Corrupt result\n  files are quarantined; every disk load checks bounded regular files, the\n  hash-bound effective schema, payload, and deterministic summary; a corrupt or\n  stale index rebuilds from a bounded validated scan, and no disk content is\n  surfaced without validation. Non-persisted\n  sessions fall back to a visible in-memory inbox, and a partition whose\n  session file was deleted (Pi stores sessions as flat files in the shared\n  per-project sessions directory) is removed by the session-start\n  reconciliation. Debug-enabled\n  definitions additionally store one native child-session JSONL per run in the\n  partition only after every string key/value has passed credential cleaning and\n  the sanitized log has been atomically replaced. Startup removes unindexed\n  crash residue; retention is capped at 20 logs per Shadow and 128 MiB total, and\n  a log too large or unsafe to sanitize is dropped. Debug stays off by default.\n\n  The runtime freezes its\n  configuration and definition at start; timeout is enforced by a fixed\n  deadline and the child executor, model turns at the pre-model `turn_start` boundary,\n  and tool calls at Pi’s pre-validation `tool_execution_start` boundary, with a second check before payload acceptance. Session\n  replacement clears the in-memory inbox and rejects late submissions from the\n  old child. The trajectory follows the parent's currently visible branch:\n  reasoning is removed, compaction and branch summaries are retained,\n  compaction-replaced history never re-enters, known tools reduce\n  to bounded allowed-field summaries with mandatory credential cleaning\n  (unknown tools expose only name, outcome, and scale — never raw arguments\n  or bodies), only delivered Shadow evidence is included, and oversized\n  trajectories truncate deterministically with a visible mode while retaining\n  the current task, summaries, and recent history. Prompt authority, notes,\n  errors, and summaries remove terminal controls and redact common credential\n  forms. Timeouts, cancellations,\n  bounded outcomes, and model or auth failures are observable lifecycle data and\n  never become results. Manual trials require the\n  `shadowMinds.enabled` master switch and share its concurrency budget.\n\n- Deterministic automatic scheduling: only real-user parent runs (interactive\n  or rpc input) create trigger opportunities — extension continuations never\n  trigger Shadows recursively. A `tool_turn` subscription runs at most once\n  per reviewed activity generation, `mutation` recognizes only the successful\n  Pi and pi-square declarative mutation tools (`edit`, `write`, `replace`,\n  `insert`) — an anchored `replace` or `insert` counts only when its\n  structured outcome proves the edit was applied, so refusals, lock\n  failures, and pre-commit cancellations never fire it —\n  and `failure` fires only for a declaratively classified quality\n  command (test, build, typecheck, smoke, package-check) that ended non-zero.\n  Mutation, failure, and tool-turn reasons from one parent turn coalesce into\n  one pending activation per Shadow that keeps the latest trajectory\n  checkpoint and every merged reason with first/last observation times;\n  `completion` fires at agent end. Dispatch arbitrates deterministically by\n  task generation, trigger priority (completion, failure, mutation, tool\n  turn), Shadow priority, then ID, under the configured concurrency,\n  per-task automatic-start, and queued-ID bounds — clipped IDs, budget\n  drops, and interruption notes are visible in the `/shadow` runs list. A new task can preempt the oldest\n  previous-task automatic run (a distinct `superseded` outcome) but never a\n  manual run; a manual start may in turn supersede an automatic run for a\n  busy slot. Old-task undelivered results are forced to `notify` delivery, a\n  user interruption cancels every current-task run and pending activation,\n  and session pause (from the `/shadow` runs list) cancels automatic runs,\n  blocks new automatic work, permits manual trials, and never replays paused\n  events on resume. A bounded conditional footer status shows running,\n  queued, and unread counts plus a paused marker (visible even while\n  otherwise idle). Automatic runs share the manual guards\n  (parent-model filter, read-only envelope, model and thinking resolution)\n  and freeze the parent core, project rules, and working directory\n  once per real user task from that run's prompt options.\n- A definition subscribed to `completion` may declare `completionGate: true`\n  (valid only with that trigger): when its run ends, Shadow Minds holds only\n  its own settled handling for the configured `completionGateWindowSeconds`\n  (capped) after the answer has already rendered — the assistant message is\n  never delayed or altered. Valid gate results queue at the gate close, the\n  earliest safe continuation boundary, under their normal delivery policy\n  while other gate runs continue independently. At the deadline started runs\n  continue and unstarted completion items cancel visibly; late or stale\n  results use the normal notify downgrade. A new user task, pause, abort,\n  session switch, or shutdown cancels the applicable work with no\n  cross-session delivery, and a print/JSON quit (never a session switch, fork, new session, or\n  resume) drains started runs for the bounded `headlessDrainSeconds`,\n  persists, and delivers quietly without starting a turn. Quiet delivery is\n  confirmed only from the matching custom-message entry actually present in\n  the persisted session branch; an unobserved append remains pending for\n  recovery instead of being declared delivered. The drain then cancels at the\n  deadline.\n- Valid results deliver to the parent model only through the definition's\n  fixed policy, always as source-attributed advisory evidence that\n  supplements — never replaces — the system prompt, tools, and user\n  instructions. `steer` enters the model only while the run that produced\n  the result is still the active parent run (a turn boundary steers it\n  into that run); `wake` enters the active run or, while the source task is\n  still current and the parent settled naturally, starts one follow-up\n  turn; `notify` never enters the model automatically and waits in the\n  inbox for an explicit **Send to agent**. Late or stale deliveries degrade\n  to notify visibly. Delivery is confirmed only through transcript\n  observation, batches up to six results without model summarization,\n  retains on send failure, resends after a natural settle, and stays\n  suppressed after an interruption; undelivered results from a lost session\n  recover inbox-only with notify policy at reopen. A failed run's\n  infrastructure diagnostics stay in `/shadow` and reach the model only as\n  a bounded failure summary through an explicit send.\n- `/shadow` Run entries expose a bounded **Diagnostics** view with per-request\n  usage and prompt-cache observations: input/output tokens, cost, per-request\n  turns, tool calls, and TTFT, plus cache coverage where a provider-reported\n  zero stays distinguishable from an adapter that does not report cache\n  values at all. Every run records cache-cohort hashes — model, thinking,\n  tool schema, SYSTEM, working directory, trajectory, checkpoint, and\n  truncation mode, plus the frozen parent core and project rules hashed\n  where the raw text is visible and recorded when present — never prompt\n  text or credentials. Cohort\n  groups show how ","readmeFilename":"README.md"}