{"_id":"@banon-labs/pi-inline-format-extensions","_rev":"6-6c93e40edab11bc8f34ec693cf9afa56","name":"@banon-labs/pi-inline-format-extensions","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@banon-labs/pi-inline-format-extensions","version":"0.1.0","keywords":["pi-package","pi-extension"],"_id":"@banon-labs/pi-inline-format-extensions@0.1.0","maintainers":[{"name":"banon_","email":"banon.no.refunds@gmail.com"}],"homepage":"https://github.com/Banon-Labs/pi-inline-format-extensions#readme","bugs":{"url":"https://github.com/Banon-Labs/pi-inline-format-extensions/issues"},"pi":{"extensions":["./packages/host/extensions/index.ts"]},"dist":{"shasum":"0d1fdf4de89edfc8a3d4f4b61a8486fc494800ee","tarball":"https://registry.npmjs.org/@banon-labs/pi-inline-format-extensions/-/pi-inline-format-extensions-0.1.0.tgz","fileCount":37,"integrity":"sha512-1GZDISCdW4olXFP3A3BsZ7xeDjVydx86C40TkBw7F80dnCpULYWy0NbKHilldSBInQX79aBgBuuPfNpgEXGp/A==","signatures":[{"sig":"MEYCIQDcw+JzzBXpy+1Mydj8pmbG5PncGUtSe9SoiiMB73YygQIhAMFdijR0Ni1A7ucX6IAO2shXNFrIW/xU7gXfPlcw5xcV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":220711},"type":"module","gitHead":"9917784b7cff71352f8e953a2a5ca37d704b132f","private":false,"scripts":{"check":"npm run format && npm run typecheck && npm run check:root-package-install && npm run check:npm-tarball-install","format":"prettier --check .","typecheck":"tsc --noEmit -p tsconfig.json","format:write":"prettier --write .","build:pages-demo":"tsx scripts/build-pages-demo.ts","check:npm-tarball-install":"node ./scripts/check-npm-tarball-install.mjs","check:root-package-install":"node ./scripts/check-root-package-install.mjs"},"_npmUser":{"name":"banon_","email":"banon.no.refunds@gmail.com"},"repository":{"url":"git+https://github.com/Banon-Labs/pi-inline-format-extensions.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.6.2","description":"Host/plugin Pi package for inline heredoc formatting and semantic inspection.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"typescript":"^5.9.3","@pi-inline-format/bash":"file:packages/bash","@pi-inline-format/host":"file:packages/host","@pi-inline-format/intel":"file:packages/intel","@pi-inline-format/python":"file:packages/python","@pi-inline-format/javascript":"file:packages/javascript","@pi-inline-format/typescript":"file:packages/typescript","@pi-inline-format/shared-contract":"file:packages/shared-contract"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.5.0","@mariozechner/pi-coding-agent":"^0.63.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-inline-format-extensions_0.1.0_1775013978993_0.043583307070566235","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@banon-labs/pi-inline-format-extensions","version":"0.1.1","keywords":["pi-package","pi-extension"],"_id":"@banon-labs/pi-inline-format-extensions@0.1.1","maintainers":[{"name":"banon_","email":"banon.no.refunds@gmail.com"}],"homepage":"https://github.com/Banon-Labs/pi-inline-format-extensions#readme","bugs":{"url":"https://github.com/Banon-Labs/pi-inline-format-extensions/issues"},"pi":{"extensions":["./packages/host/extensions/index.ts"]},"dist":{"shasum":"1a23b62a890329b2df01a781f11edce80d5389eb","tarball":"https://registry.npmjs.org/@banon-labs/pi-inline-format-extensions/-/pi-inline-format-extensions-0.1.1.tgz","fileCount":38,"integrity":"sha512-Lniu7weY0O2Wv2jDG4IN7AlmQIgBiWl3ZXInsLav0ffD5Z4dhxedcIMvQVCqPUgGV5FKOp2YpTPv8lWYl3J1oQ==","signatures":[{"sig":"MEYCIQC1uxhaHmIo2qiw+aytOWEI2wE+2kLtm+4RXgiUPe6uTAIhANpILfS9avcwLsNmOrmUZ3crBTmw5NfyHUPXoMdWrU/M","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banon-labs%2fpi-inline-format-extensions@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":240210},"type":"module","gitHead":"2764877e3e4970eefe7e3f6ac7582c0b60d15b5d","private":false,"scripts":{"check":"npm run format && npm run typecheck && npm run check:root-package-install && npm run check:npm-tarball-install","format":"prettier --check .","typecheck":"tsc --noEmit -p tsconfig.json","format:write":"prettier --write .","build:pages-demo":"tsx scripts/build-pages-demo.ts","check:release-readiness":"node ./scripts/check-release-readiness.mjs","check:npm-tarball-install":"node ./scripts/check-npm-tarball-install.mjs","check:root-package-install":"node ./scripts/check-root-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b0af5b12-0e36-4533-a12f-57f6f791f7fc"}},"repository":{"url":"git+https://github.com/Banon-Labs/pi-inline-format-extensions.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.12.1","description":"Host/plugin Pi package for inline heredoc formatting and semantic inspection.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"typescript":"^5.9.3","@pi-inline-format/bash":"file:packages/bash","@pi-inline-format/host":"file:packages/host","@pi-inline-format/intel":"file:packages/intel","@pi-inline-format/python":"file:packages/python","@pi-inline-format/javascript":"file:packages/javascript","@pi-inline-format/typescript":"file:packages/typescript","@pi-inline-format/shared-contract":"file:packages/shared-contract"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.5.0","@mariozechner/pi-coding-agent":"^0.63.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-inline-format-extensions_0.1.1_1775030704851_0.8563124169712304","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@banon-labs/pi-inline-format-extensions","version":"0.1.2","keywords":["pi-package","pi-extension"],"_id":"@banon-labs/pi-inline-format-extensions@0.1.2","maintainers":[{"name":"banon_","email":"banon.no.refunds@gmail.com"}],"homepage":"https://github.com/Banon-Labs/pi-inline-format-extensions#readme","bugs":{"url":"https://github.com/Banon-Labs/pi-inline-format-extensions/issues"},"pi":{"extensions":["./packages/host/extensions/index.ts"]},"dist":{"shasum":"5cf0108d90ea6ffd497fed9ee95abb5d7e4f7c98","tarball":"https://registry.npmjs.org/@banon-labs/pi-inline-format-extensions/-/pi-inline-format-extensions-0.1.2.tgz","fileCount":38,"integrity":"sha512-8J3bY0UFfPVZDij4SYXWo/4ijbLbNYwCtVv9LStuU/sgzsOV+q1CJHqtsMFP1ubPOVNiFvanRBgnBDsaczHjPw==","signatures":[{"sig":"MEYCIQCLDHuhGjuhS4B39yUDv4FEAIXiv6395lAjpomi6pEoVAIhAMU1HCiJooSNh7vlx8rJFwfeVk4C4kTEVU9srP8y0Cc9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banon-labs%2fpi-inline-format-extensions@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":242040},"type":"module","gitHead":"fd38689693d43361885d6e135bbe03de4290d951","private":false,"scripts":{"check":"npm run format && npm run typecheck && npm run check:root-package-install && npm run check:npm-tarball-install","format":"prettier --check .","typecheck":"tsc --noEmit -p tsconfig.json","format:write":"prettier --write .","build:pages-demo":"tsx scripts/build-pages-demo.ts","check:release-readiness":"node ./scripts/check-release-readiness.mjs","check:npm-tarball-install":"node ./scripts/check-npm-tarball-install.mjs","check:root-package-install":"node ./scripts/check-root-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b0af5b12-0e36-4533-a12f-57f6f791f7fc"}},"repository":{"url":"git+https://github.com/Banon-Labs/pi-inline-format-extensions.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.12.1","description":"Host/plugin Pi package for inline heredoc formatting and semantic inspection.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"typescript":"^5.9.3","@pi-inline-format/bash":"file:packages/bash","@pi-inline-format/host":"file:packages/host","@pi-inline-format/intel":"file:packages/intel","@pi-inline-format/python":"file:packages/python","@pi-inline-format/javascript":"file:packages/javascript","@pi-inline-format/typescript":"file:packages/typescript","@pi-inline-format/shared-contract":"file:packages/shared-contract"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.5.0","@mariozechner/pi-coding-agent":"^0.63.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-inline-format-extensions_0.1.2_1775076135200_0.3960419708513414","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@banon-labs/pi-inline-format-extensions","version":"0.1.3","keywords":["pi-package","pi-extension"],"_id":"@banon-labs/pi-inline-format-extensions@0.1.3","maintainers":[{"name":"banon_","email":"banon.no.refunds@gmail.com"}],"homepage":"https://github.com/Banon-Labs/pi-inline-format-extensions#readme","bugs":{"url":"https://github.com/Banon-Labs/pi-inline-format-extensions/issues"},"pi":{"extensions":["./packages/host/extensions/index.ts"]},"dist":{"shasum":"911d68cfc50243df4d260b6946f0a2a97bfd439b","tarball":"https://registry.npmjs.org/@banon-labs/pi-inline-format-extensions/-/pi-inline-format-extensions-0.1.3.tgz","fileCount":38,"integrity":"sha512-akuX95lJs8SziBEFxXcKsSfgHMa4duP7akWsRBZNg/Q1qFKel8RoH4GKXJiocqcw1RXGqwDC3V6m2MkxI5Mqmw==","signatures":[{"sig":"MEQCIEU4rpYnv2cWyZAkKEnTTSaFQdtmPMnLhgYrTI+vKPLwAiBn1akGnGifVruiMBGh9fWfSoDSvBLq5dH+0mkhGiX3cw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banon-labs%2fpi-inline-format-extensions@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":242040},"type":"module","gitHead":"4647023204cf99827da9847cb0426c10f58b0179","private":false,"scripts":{"check":"npm run format && npm run typecheck && npm run check:root-package-install && npm run check:npm-tarball-install","format":"prettier --check .","typecheck":"tsc --noEmit -p tsconfig.json","format:write":"prettier --write .","build:pages-demo":"tsx scripts/build-pages-demo.ts","check:release-readiness":"node ./scripts/check-release-readiness.mjs","check:npm-tarball-install":"node ./scripts/check-npm-tarball-install.mjs","check:root-package-install":"node ./scripts/check-root-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b0af5b12-0e36-4533-a12f-57f6f791f7fc"}},"repository":{"url":"git+https://github.com/Banon-Labs/pi-inline-format-extensions.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.12.1","description":"Host/plugin Pi package for inline heredoc formatting and semantic inspection.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"typescript":"^5.9.3","@pi-inline-format/bash":"file:packages/bash","@pi-inline-format/host":"file:packages/host","@pi-inline-format/intel":"file:packages/intel","@pi-inline-format/python":"file:packages/python","@pi-inline-format/javascript":"file:packages/javascript","@pi-inline-format/typescript":"file:packages/typescript","@pi-inline-format/shared-contract":"file:packages/shared-contract"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.5.0","@mariozechner/pi-coding-agent":"^0.63.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-inline-format-extensions_0.1.3_1775078168598_0.9092781714275118","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@banon-labs/pi-inline-format-extensions","version":"0.1.4","keywords":["pi-package","pi-extension"],"_id":"@banon-labs/pi-inline-format-extensions@0.1.4","maintainers":[{"name":"banon_","email":"banon.no.refunds@gmail.com"}],"homepage":"https://github.com/Banon-Labs/pi-inline-format-extensions#readme","bugs":{"url":"https://github.com/Banon-Labs/pi-inline-format-extensions/issues"},"pi":{"extensions":["./packages/host/extensions/index.ts"]},"dist":{"shasum":"85e50515eff85f7c43054345a65570536b093d71","tarball":"https://registry.npmjs.org/@banon-labs/pi-inline-format-extensions/-/pi-inline-format-extensions-0.1.4.tgz","fileCount":38,"integrity":"sha512-rGqBJCqzPtz9A9vh84uRcko7ojX51scx6d473lNBzU7Iqii6tUsrgzB/KIBzZpQelmICkUKF4CnbA/NR4/9WWQ==","signatures":[{"sig":"MEYCIQCOb90yASrmNsLgG4lCoE+0kDz6tW5+42vJCCV/ybO4lAIhAODFxZRyIQErtv555DByPSYZ6cXeHUtCnqOFqISws5VC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banon-labs%2fpi-inline-format-extensions@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":242161},"type":"module","gitHead":"1be6fb50446424d0cbaead20e30e3082c16ad9e9","private":false,"scripts":{"check":"npm run format && npm run typecheck && npm run check:pages-raw-bash-proof && npm run check:root-package-install && npm run check:npm-tarball-install","format":"prettier --check .","typecheck":"tsc --noEmit -p tsconfig.json","format:write":"prettier --write .","build:pages-demo":"tsx scripts/build-pages-demo.ts","check:release-readiness":"node ./scripts/check-release-readiness.mjs","check:npm-tarball-install":"node ./scripts/check-npm-tarball-install.mjs","check:pages-raw-bash-proof":"node ./scripts/check-pages-raw-bash-proof.mjs","check:root-package-install":"node ./scripts/check-root-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b0af5b12-0e36-4533-a12f-57f6f791f7fc"}},"repository":{"url":"git+https://github.com/Banon-Labs/pi-inline-format-extensions.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.12.1","description":"Host/plugin Pi package for inline heredoc formatting and semantic inspection.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"typescript":"^5.9.3","@pi-inline-format/bash":"file:packages/bash","@pi-inline-format/host":"file:packages/host","@pi-inline-format/intel":"file:packages/intel","@pi-inline-format/python":"file:packages/python","@pi-inline-format/javascript":"file:packages/javascript","@pi-inline-format/typescript":"file:packages/typescript","@pi-inline-format/shared-contract":"file:packages/shared-contract"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.5.0","@mariozechner/pi-coding-agent":"^0.63.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-inline-format-extensions_0.1.4_1775080615351_0.6841164890577638","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@banon-labs/pi-inline-format-extensions","private":false,"version":"0.1.5","type":"module","keywords":["pi-package","pi-extension"],"workspaces":["packages/*"],"pi":{"extensions":["./packages/host/extensions/index.ts"]},"scripts":{"build:pages-demo":"tsx scripts/build-pages-demo.ts","check":"npm run format && npm run typecheck && npm run check:pages-raw-bash-proof && npm run check:multi-inline-heredoc-render && npm run check:root-package-install && npm run check:npm-tarball-install","check:release-readiness":"node ./scripts/check-release-readiness.mjs","check:root-package-install":"node ./scripts/check-root-package-install.mjs","format":"prettier --check .","format:write":"prettier --write .","typecheck":"tsc --noEmit -p tsconfig.json","check:pages-raw-bash-proof":"node ./scripts/check-pages-raw-bash-proof.mjs","check:multi-inline-heredoc-render":"tsx ./scripts/check-multi-inline-heredoc-render.ts","check:npm-tarball-install":"node ./scripts/check-npm-tarball-install.mjs","check:npm-warnings":"node ./scripts/check-npm-tarball-install.mjs"},"devDependencies":{"@mariozechner/pi-coding-agent":"^0.63.1","@types/node":"^25.5.0","prettier":"^3.8.1","tsx":"^4.21.0","typescript":"^5.9.3"},"description":"Host/plugin Pi package for inline heredoc formatting and semantic inspection.","repository":{"type":"git","url":"git+https://github.com/Banon-Labs/pi-inline-format-extensions.git"},"homepage":"https://github.com/Banon-Labs/pi-inline-format-extensions#readme","bugs":{"url":"https://github.com/Banon-Labs/pi-inline-format-extensions/issues"},"publishConfig":{"access":"public","provenance":true},"dependencies":{"@pi-inline-format/bash":"file:packages/bash","@pi-inline-format/host":"file:packages/host","@pi-inline-format/intel":"file:packages/intel","@pi-inline-format/javascript":"file:packages/javascript","@pi-inline-format/python":"file:packages/python","@pi-inline-format/shared-contract":"file:packages/shared-contract","@pi-inline-format/typescript":"file:packages/typescript","typescript":"^5.9.3"},"overrides":{"node-domexception":"file:vendor/node-domexception"},"gitHead":"00a248020d65413bf9753c0fbad12d4dccd36274","_id":"@banon-labs/pi-inline-format-extensions@0.1.5","_nodeVersion":"24.14.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-4xdjplwHkeGN1gdXpsufhQatLz7PQG3uc7FEUFTfS7whto6M7SbNlShOhcZpolqU1jxmvTa1L/WsXfy3I+qHJg==","shasum":"3e32d1330bc884e6370a748b84ecc4b965e04672","tarball":"https://registry.npmjs.org/@banon-labs/pi-inline-format-extensions/-/pi-inline-format-extensions-0.1.5.tgz","fileCount":38,"unpackedSize":243870,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banon-labs%2fpi-inline-format-extensions@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFYUV8CGBZhrjl2lONUGI8vYLcZJHYF856IgyZfHAWvPAiEAm1rMKKogu/psmL9p4e3FHeZE5f9cYNXCvieigFYKH4I="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b0af5b12-0e36-4533-a12f-57f6f791f7fc"}},"directories":{},"maintainers":[{"name":"banon_","email":"banon.no.refunds@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-inline-format-extensions_0.1.5_1775086261661_0.5785622238680215"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-01T03:26:18.811Z","modified":"2026-04-01T23:31:02.177Z","0.1.0":"2026-04-01T03:26:19.185Z","0.1.1":"2026-04-01T08:05:05.013Z","0.1.2":"2026-04-01T20:42:15.355Z","0.1.3":"2026-04-01T21:16:08.783Z","0.1.4":"2026-04-01T21:56:55.508Z","0.1.5":"2026-04-01T23:31:01.813Z"},"bugs":{"url":"https://github.com/Banon-Labs/pi-inline-format-extensions/issues"},"homepage":"https://github.com/Banon-Labs/pi-inline-format-extensions#readme","keywords":["pi-package","pi-extension"],"repository":{"type":"git","url":"git+https://github.com/Banon-Labs/pi-inline-format-extensions.git"},"description":"Host/plugin Pi package for inline heredoc formatting and semantic inspection.","maintainers":[{"name":"banon_","email":"banon.no.refunds@gmail.com"}],"readme":"# pi-inline-format-extensions\n\n[![check](https://github.com/Banon-Labs/pi-inline-format-extensions/actions/workflows/check.yml/badge.svg)](https://github.com/Banon-Labs/pi-inline-format-extensions/actions/workflows/check.yml)\n\n# pi-inline-format-extensions\n\nHost/plugin workspace for a package-backed inline formatting platform.\n\n## Goal\n\nTurn the current Python-specific inline heredoc rendering work into a host/plugin architecture where:\n\n- the **host** package owns Pi runtime seams such as built-in `bash` overrides and compare helpers,\n- language-specific packages contribute **detection and formatting metadata**,\n- future language packs can be added without multiple packages fighting over the same Pi renderer.\n\n## Workspace layout\n\n```text\npi-inline-format-extensions/\n├── packages/\n│   ├── host/             # Pi-facing host/orchestrator package\n│   ├── shared-contract/  # Types and registration contract for plugins\n│   ├── intel/            # Semantic inspection / meaning-aware companion layer\n│   ├── python/           # Python heredoc detector\n│   ├── typescript/       # TypeScript heredoc detector\n│   ├── javascript/       # JavaScript heredoc detector\n│   └── bash/             # Shell/bash heredoc detector\n├── package.json\n└── tsconfig.json\n```\n\n## Highlighting ownership contract\n\nThe workspace intentionally does **not** roll its own syntax highlighter.\n\nOwnership is split this way:\n\n- **plugins** decide whether a bash/heredoc shape matches and report language plus line boundaries,\n- **shared-contract** only exposes the detection contract (`InlineFormatPlugin.detect(...)` → `InlineFormatMatch`),\n- **host** owns the Pi-facing render seam and calls Pi's shipped highlighting path,\n- **Pi** remains the actual source of syntax highlighting/color output.\n\nCurrent evidence in code:\n\n- `packages/host/src/runtime.ts` imports `highlightCode` from `@mariozechner/pi-coding-agent` and uses it via `highlightCodeWithRenderTheme(...)` inside the host-owned bash `renderCall(...)` path.\n- `packages/python/src/index.ts` only finds heredoc ranges, extracts source text, and returns `InlineFormatMatch` metadata.\n- `packages/shared-contract/src/index.ts` only defines `InlineFormatPlugin` and `InlineFormatMatch`; it does not expose any renderer/highlighter API.\n\nThis boundary is intentional and should remain stable:\n\n- no custom tokenization engine,\n- no plugin-owned ANSI coloring,\n- no language-pack-specific renderer that bypasses Pi,\n- no duplicate highlighting stack layered alongside Pi's shipped one.\n\nIf support expands to more languages, add or adjust plugin detection logic and keep highlighting routed through the host/Pi-owned path rather than inventing a language-specific highlighter.\n\n## Semantic/intel ownership contract\n\nThe new semantic/intel layer is **not** a language plugin and **not** a renderer owner.\n\nIts role is to make future meaning-aware inspection possible without breaking the current host/plugin split:\n\n- **intel** owns virtual-document and inspection contracts,\n- **intel** may later orchestrate compiler/LSP backends,\n- **host** may call into intel for inspect/explain workflows,\n- **language plugins** stay focused on heredoc detection and language metadata,\n- **host/Pi** remain responsible for visual rendering and syntax-highlighting output.\n\nThis keeps the architecture additive:\n\n- plugins detect,\n- host renders,\n\n- intel explains meaning.\n\n## Design rule\n\nOnly the **host** should own Pi render/tool override seams.\nLanguage packages should expose reusable plugin objects and detection/render metadata only.\nThe **intel** package should expose meaning-oriented contracts and backend orchestration only.\n\n## Current package status\n\n- `@pi-inline-format/host`\n  - owns the built-in `bash` override,\n  - owns deterministic compare helpers and summary-suppression seams,\n  - loads the default plugin list,\n  - exposes `/inline-format-host-status`, `/inline-format-use-deterministic-model [scenario]`, `/inline-format-run-deterministic-compare [scenario]`, `/inline-format-deterministic-status`, `/inline-format-intel-status`, `/inline-format-inspect-sample <scenario>`, `/inline-format-explain-symbol <scenario> <symbol>`, `/inline-format-find-definition <scenario> <symbol>`, `/inline-format-highlight-symbol <scenario> <symbol>`, `/inline-format-semantic-tokens <scenario>`, and `/inline-format-diagnostics-sample <scenario>`.\n- `@pi-inline-format/shared-contract`\n  - defines the stable detection contract (`InlineFormatPlugin` and `InlineFormatMatch`).\n- `@pi-inline-format/intel`\n  - defines the semantic/inspection contracts,\n  - owns virtual-document and inspection request/result types,\n  - now ships a TypeScript language-service backend for JavaScript/TypeScript hover, explain-symbol, definition, document-highlight, diagnostics, and semantic-token payload flows,\n  - now ships a basedpyright prototype backend for Python diagnostics, hover/explain-symbol, definition, and semantic-token payload flows,\n  - now ships a bash-language-server plus ShellCheck prototype backend for Bash diagnostics, hover-like explain, definition, and document-highlight flows,\n  - still falls back to a scaffold backend for unsupported languages and any inspection kinds not yet implemented by a real backend,\n  - does not own rendering or syntax-highlighting seams.\n- `@pi-inline-format/python`, `@pi-inline-format/javascript`, `@pi-inline-format/typescript`, and `@pi-inline-format/bash`\n  - provide heredoc detection only,\n  - report language plus line boundaries,\n  - do not own any Pi renderer/highlighter seams.\n- The repository root exposes `packages/host/extensions/index.ts` through the root `package.json` `pi.extensions` manifest so both local-path development and pinned git installs can load the same root package surface.\n\n## Shipped today\n\nThis repo is the source of truth for the package-backed capabilities shipped by `Banon-Labs/pi-inline-format-extensions`.\n\n| Language     | Detects this heredoc? | Basic highlighting | Inspection backend                                                             | Smarter highlighting in the normal tool row | Status                                                                                                                |\n| ------------ | --------------------- | ------------------ | ------------------------------------------------------------------------------ | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |\n| Python       | ✅                    | ✅                 | ✅ `basedpyright` prototype + semantic-token payloads                          | ✅                                          | shipped for the proven `/tmp/delete.me.py` sample via a host-owned bounded Python smarter-highlight seam              |\n| JavaScript   | ✅                    | ✅                 | ✅ TypeScript language service                                                 | ✅                                          | shipped                                                                                                               |\n| TypeScript   | ✅                    | ✅                 | ✅ TypeScript language service                                                 | ✅                                          | shipped                                                                                                               |\n| Bash / shell | ✅                    | ✅                 | ⚠️ partial (`bash-language-server` + `shellcheck`; no semantic token provider) | ✅                                          | shipped via a host-owned smarter-highlighting seam; intel/backend semantic-token payloads remain intentionally absent |\n\n- Python now participates in smarter tool-row highlighting for the proven shipped `/tmp/delete.me.py` sample through a host-owned bounded Python token collector in `packages/host`, backed by repo-local regression proof plus parent CLI-app tmux evidence.\n- JavaScript and TypeScript feed semantic tokens into the normal bash tool-row render path.\n- Bash now participates in smarter tool-row highlighting through a host-owned Bash token/span collector in `packages/host`.\n- The Bash inspection backend still does **not** advertise semantic-token payloads, so `/inline-format-semantic-tokens bash` remains intentionally unavailable even though normal tool-row smarter highlighting is now shipped.\n\n## Demo and proof links\n\nFor richer walkthrough material, transcript-style visuals, and the published GitHub Pages presentation, use:\n\n- GitHub Pages demo: https://banon-labs.github.io/pi-inline-format-extensions/\n- Focused shipped-Python regression proof: `packages/host/src/shipped-python-smarter-highlight.test.ts`\n- Inspection-vs-tool-row proof: `packages/host/src/shipped-python-tool-row.test.ts`\n- Truthful shipped-Python baseline data: `packages/host/src/shipped-python-smarter-highlight-baseline.ts`\n- Parent CLI-app tmux smoke evidence: `bd comments pi-inline-format-extensions-d3a.7`\n\nREADME-vs-Pages audit outcome:\n\n- README stays focused on architecture, shipped status, install/release expectations, and researched-next-candidate planning.\n- GitHub Pages now owns the richer visual/demo presentation layer for the restored smarter-highlighting story.\n- Repo-local tests plus tmux evidence remain the proof surface; GitHub Pages is linked as a presentation surface only.\n\n## Researched next candidates\n\nThese are languages we researched as plausible next steps, but they are **not wired into the package yet**.\n\n| Language                      | Built in today? | Likely easy win     | Harder follow-up           | Notes                                                                                         |\n| ----------------------------- | --------------- | ------------------- | -------------------------- | --------------------------------------------------------------------------------------------- |\n| Ruby                          | ❌              | syntax highlighting | smarter highlighting later | Strong candidate. Ruby LSP looks more promising than Solargraph for deeper language features. |\n| PHP                           | ❌              | syntax highlighting | smarter highlighting later | Good candidate. Intelephense makes later deeper support plausible.                            |\n| Lua                           | ❌              | syntax highlighting | smarter highlighting later | Good candidate. LuaLS has real semantic-token work, but we have not wired it here.            |\n| SQL                           | ❌              | syntax highlighting | maybe later                | Straightforward syntax candidate. The deeper language story is less settled.                  |\n| Perl                          | ❌              | syntax highlighting | maybe later                | Plausible syntax candidate. Deeper language support looks weaker than Ruby/PHP/Lua.           |\n| YAML / JSON / TOML / Markdown | ❌              | syntax highlighting | probably not worth it      | Good candidates if we want more file/config formats without deeper symbol-aware work.         |\n\n## README consolidation plan\n\nTo remove duplicated capability tables from `Banon-Labs/pi-inline-format` and keep this repo as the canonical source:\n\n1. Treat this README's `## Shipped today` and `## Researched next candidates` sections as the maintained source of truth.\n2. In `pi-inline-format`, replace the duplicated tables with a short summary plus links back to:\n   - `https://github.com/Banon-Labs/pi-inline-format-extensions#shipped-today`\n   - `https://github.com/Banon-Labs/pi-inline-format-extensions#researched-next-candidates`\n3. If we want true embedding later, do it with a generated sync step that copies these sections during a release/update workflow; GitHub README markdown does not natively support remote includes.\n4. Prefer links over generated duplication unless we decide the extra automation is worth the maintenance cost.\n\n## Install, update, and release expectations\n\n### Preferred package surfaces\n\n- **Stable consumer installs** should use the published npm package at the repository root, for example:\n  - `npm:@banon-labs/pi-inline-format-extensions@0.1.5`\n- **Pinned git refs** remain valid for release-candidate testing or emergency rollback when you need an exact repository commit:\n  - `git:github.com/Banon-Labs/pi-inline-format-extensions@<commit-or-tag>`\n- **Unpublished local development** should use the repository root path, not `packages/host` directly:\n  - `../../pi-inline-format-extensions`\n\nThe root surface is the durable contract. Consumers should not depend on an internal package path when a root-level package source is available.\n\n### Release order\n\n1. Land and validate host/plugin changes in this repo first.\n2. Push the updated commit or publish a stable ref/tag here.\n3. Repin the consumer repo (`pi-inline-format`) to that published git ref.\n4. Rerun consumer validation there (`pi list`, `npm run check`, and any scenario-specific proof flows required by the change).\n\n### Trusted publishing steady state and bootstrap caveat\n\n- The intended long-term npm release path is GitHub Actions trusted publishing through `.github/workflows/publish-npm.yml`.\n- Keep `id-token: write`, modern npm CLI, and provenance-enabled publish settings in place so future releases can use OIDC rather than long-lived tokens.\n- npm currently requires a package to already exist before you can attach a Trusted Publisher on npmjs.com, so the very first publish of a brand-new package still needs a one-time manual publish or a granular token with bypass-2FA enabled.\n- After that bootstrap publish exists on npm, open each package's npm access page, attach the matching GitHub Actions trusted publisher (`Banon-Labs/<repo>`, workflow file `publish-npm.yml`), and use the workflow for subsequent releases.\n\n### Hardened npm release checklist\n\n1. Run `npm run check` in `/home/choza/projects/pi-inline-format-extensions` and `/home/choza/projects/pi-inline-format`.\n2. Run `npm run check:release-readiness` here to confirm both repos still have the expected package metadata, trusted-publish workflow shape, public npm visibility, and registry-resolved versions.\n3. Keep the steady-state publish path on GitHub OIDC/trusted publishing; if a bootstrap bypass-2FA token was used earlier, remove it from `~/.npmrc` and revoke it on npm unless you intentionally want a manual emergency fallback.\n4. Bump the intended release version in both repos together, commit the changes, and create the matching release tag(s). In this workspace, any required `git push` must still be explicitly authorized by the user.\n5. Let the tag-triggered `.github/workflows/publish-npm.yml` workflow publish, or manually dispatch that same workflow when supervised release control is preferable.\n6. After publish, verify `npm view @banon-labs/pi-inline-format-extensions@<version> version` and `npm view @banon-labs/pi-inline-format@<version> version`, then run a temp-project proof with `pi install -l npm:@banon-labs/pi-inline-format@<version>` and `pi install -l npm:@banon-labs/pi-inline-format-extensions@<version>` followed by `pi list`.\n7. If package settings ever need to be recreated, reattach the npm Trusted Publisher on each package access page with `Banon-Labs/<repo>` and workflow filename `publish-npm.yml`.\n\n### Growth rule for new language support\n\nWhen adding support for another heredoc language:\n\n- extend detection in a plugin package,\n- keep the host as the only owner of Pi runtime/render seams,\n- keep syntax highlighting routed through Pi's shipped `highlightCode(...)` path,\n- add deterministic and proof coverage before asking consumers to repin.\n\n### Growth rule for semantic inspection\n\nWhen adding meaning-aware inspection:\n\n- extend `@pi-inline-format/intel` rather than a language plugin,\n- prefer compiler/LSP-backed backends over custom pseudo-analysis,\n- map backend results back into heredoc regions and virtual documents,\n- keep rendering ownership in host/Pi rather than moving it into intel,\n- treat the current TypeScript language-service backend as the baseline pattern for future language-specific semantic backends.\n\n## Commands\n\n```bash\nnpm install\nnpm run typecheck\nnpm run check\n```\n","readmeFilename":"README.md"}