{"_id":"@banon-labs/pi-inline-format","_rev":"6-697f138b23467afe93a8ff338fe08c4e","name":"@banon-labs/pi-inline-format","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@banon-labs/pi-inline-format","version":"0.1.0","keywords":["pi-package","pi-extension","rust","typescript"],"_id":"@banon-labs/pi-inline-format@0.1.0","maintainers":[{"name":"banon_","email":"banon.no.refunds@gmail.com"}],"homepage":"https://github.com/Banon-Labs/pi-inline-format#readme","bugs":{"url":"https://github.com/Banon-Labs/pi-inline-format/issues"},"pi":{"extensions":["./extensions/index.ts"]},"dist":{"shasum":"65faa3f20e51e79eb8dd685c58083fcd44fb485d","tarball":"https://registry.npmjs.org/@banon-labs/pi-inline-format/-/pi-inline-format-0.1.0.tgz","fileCount":7,"integrity":"sha512-tEw1CyCDD+v+j8kc22gUlymnAMJfoofo1tdg226lOSn+Jj22h3AFuFzLek0VNFEW1fiJayfWWxybqYeseehGtg==","signatures":[{"sig":"MEUCIQD1OczLu7AcFxOvgcg2IYM8MVkcEJMoM2lfRgHcUsTvzQIgMPsHrC3u9SMw8XBHAwtcTM29VHxbEZqKCGuUcWnKQRQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49133},"type":"module","engines":{"node":">=22"},"gitHead":"5e1dae46b6f9ba7dbd0e0e8c44bb89c09f4000c9","private":false,"scripts":{"lint":"eslint . --max-warnings=0","check":"npm run check:core && npm run check:pinned-host-runtime && npm run check:ansi-capture-proof && npm run check:npm-tarball-install","format":"prettier --check .","lint:fix":"eslint . --fix --max-warnings=0","rust:fmt":"cargo fmt --manifest-path rust/Cargo.toml --all --check","rust:lint":"cargo clippy --manifest-path rust/Cargo.toml --all-targets --all-features -- -D warnings","rust:test":"cargo test --manifest-path rust/Cargo.toml --all-targets --all-features","typecheck":"tsc --noEmit","check:core":"npm run lint && npm run format && npm run typecheck && npm run rust:fmt && npm run rust:check && npm run rust:lint && npm run rust:test","rust:check":"cargo check --manifest-path rust/Cargo.toml --all-targets --all-features","format:write":"prettier --write .","rust:fmt:write":"cargo fmt --manifest-path rust/Cargo.toml --all","check:ansi-capture-proof":"node ./scripts/check-ansi-capture-proof.mjs","smoke:ansi-capture-proof":"./scripts/run-ansi-capture-proof-smoke.sh","check:npm-tarball-install":"node ./scripts/check-npm-tarball-install.mjs","check:pinned-host-runtime":"node ./scripts/check-pinned-host-runtime.mjs","verify:host-source-upgrade-path":"node ./scripts/verify-host-source-upgrade-path.mjs","smoke:deterministic-heredoc-grid":"./scripts/run-deterministic-heredoc-grid-smoke.sh","smoke:javascript-highlight-compare":"./scripts/run-semantic-highlight-compare-smoke.sh --scenario javascript","smoke:typescript-highlight-compare":"./scripts/run-semantic-highlight-compare-smoke.sh --scenario typescript","verify:multilanguage-local-package-proof":"node ./scripts/verify-multilanguage-local-package-proof.mjs"},"_npmUser":{"name":"banon_","email":"banon.no.refunds@gmail.com"},"repository":{"url":"git+https://github.com/Banon-Labs/pi-inline-format.git","type":"git"},"_npmVersion":"11.6.2","description":"Strict Pi extension project with a Rust core subproject and a TypeScript extension wrapper.","directories":{},"_nodeVersion":"24.12.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.1.0","globals":"^17.4.0","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.5.0","@sinclair/typebox":"^0.34.49","typescript-eslint":"^8.57.2","@modelcontextprotocol/sdk":"^1.28.0","@mariozechner/pi-coding-agent":"^0.63.1"},"peerDependencies":{"@sinclair/typebox":"*","@mariozechner/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-inline-format_0.1.0_1775013979216_0.005175134284934213","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@banon-labs/pi-inline-format","version":"0.1.1","keywords":["pi-package","pi-extension","rust","typescript"],"_id":"@banon-labs/pi-inline-format@0.1.1","maintainers":[{"name":"banon_","email":"banon.no.refunds@gmail.com"}],"homepage":"https://github.com/Banon-Labs/pi-inline-format#readme","bugs":{"url":"https://github.com/Banon-Labs/pi-inline-format/issues"},"pi":{"extensions":["./extensions/index.ts"]},"dist":{"shasum":"2d877cbf3d1bb9daa3b31382aa753e78186e2869","tarball":"https://registry.npmjs.org/@banon-labs/pi-inline-format/-/pi-inline-format-0.1.1.tgz","fileCount":7,"integrity":"sha512-idF1SilyBlLrv9OzV1Yp1gR8m8M5Y2tVblfrD4PJWQ3c03O+ABchv4h9eNl1MgajxL8HKWXbez4R75TJSdjFEg==","signatures":[{"sig":"MEUCIQDmuo50l2zOq10NiMHRN1wDIQSinUaJHqV+oOQlXU/mQwIgID3u0Y61Xb+vY57Ve2Cw5qlNt06H2BjbcRujruFH/oQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banon-labs%2fpi-inline-format@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49144},"type":"module","engines":{"node":">=22"},"gitHead":"733b52b4b58dde97bac16a5c9ae8fc4c80c85168","private":false,"scripts":{"lint":"eslint . --max-warnings=0","check":"npm run check:core && npm run check:pinned-host-runtime && npm run check:ansi-capture-proof && npm run check:npm-tarball-install","format":"prettier --check .","lint:fix":"eslint . --fix --max-warnings=0","rust:fmt":"cargo fmt --manifest-path rust/Cargo.toml --all --check","rust:lint":"cargo clippy --manifest-path rust/Cargo.toml --all-targets --all-features -- -D warnings","rust:test":"cargo test --manifest-path rust/Cargo.toml --all-targets --all-features","typecheck":"tsc --noEmit","check:core":"npm run lint && npm run format && npm run typecheck && npm run rust:fmt && npm run rust:check && npm run rust:lint && npm run rust:test","rust:check":"cargo check --manifest-path rust/Cargo.toml --all-targets --all-features","format:write":"prettier --write .","rust:fmt:write":"cargo fmt --manifest-path rust/Cargo.toml --all","check:ansi-capture-proof":"node ./scripts/check-ansi-capture-proof.mjs","smoke:ansi-capture-proof":"./scripts/run-ansi-capture-proof-smoke.sh","check:npm-tarball-install":"node ./scripts/check-npm-tarball-install.mjs","check:pinned-host-runtime":"node ./scripts/check-pinned-host-runtime.mjs","verify:host-source-upgrade-path":"node ./scripts/verify-host-source-upgrade-path.mjs","smoke:deterministic-heredoc-grid":"./scripts/run-deterministic-heredoc-grid-smoke.sh","smoke:javascript-highlight-compare":"./scripts/run-semantic-highlight-compare-smoke.sh --scenario javascript","smoke:typescript-highlight-compare":"./scripts/run-semantic-highlight-compare-smoke.sh --scenario typescript","verify:multilanguage-local-package-proof":"node ./scripts/verify-multilanguage-local-package-proof.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e66eb77a-19e1-457e-a5e3-579ffe42eca2"}},"repository":{"url":"git+https://github.com/Banon-Labs/pi-inline-format.git","type":"git"},"_npmVersion":"11.12.1","description":"Strict Pi extension project with a Rust core subproject and a TypeScript extension wrapper.","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.1.0","globals":"^17.4.0","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.5.0","@sinclair/typebox":"^0.34.49","typescript-eslint":"^8.57.2","@modelcontextprotocol/sdk":"^1.28.0","@mariozechner/pi-coding-agent":"^0.63.1"},"peerDependencies":{"@sinclair/typebox":"*","@mariozechner/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-inline-format_0.1.1_1775031296737_0.22142013523773607","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@banon-labs/pi-inline-format","version":"0.1.2","keywords":["pi-package","pi-extension","rust","typescript"],"_id":"@banon-labs/pi-inline-format@0.1.2","maintainers":[{"name":"banon_","email":"banon.no.refunds@gmail.com"}],"homepage":"https://github.com/Banon-Labs/pi-inline-format#readme","bugs":{"url":"https://github.com/Banon-Labs/pi-inline-format/issues"},"pi":{"extensions":["./extensions/index.ts"]},"dist":{"shasum":"7d60debd86f7e41c6c258f84d7950e18e842a7d1","tarball":"https://registry.npmjs.org/@banon-labs/pi-inline-format/-/pi-inline-format-0.1.2.tgz","fileCount":7,"integrity":"sha512-0hvCasYd458i89S5UYZpXtoGr619gjBENlFPuekRJRQFuxnpmzMKlfeSvoiYK1sQDoorjx2YsELFypzEF/nPrg==","signatures":[{"sig":"MEUCIHK1QcvCRW+XFaRGb3O2ZrHNm6WzX2b01UKtIFOxIsoJAiEAwn9x5PS3kTZujqFMBL/MIUOSbHGjv6+xCabUvXEAKn0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banon-labs%2fpi-inline-format@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49076},"type":"module","engines":{"node":">=22"},"gitHead":"4a515b8806d68444445131d99751cfb285194d66","private":false,"scripts":{"lint":"eslint . --max-warnings=0","check":"npm run check:core && npm run check:pinned-host-runtime && npm run check:ansi-capture-proof && npm run check:npm-tarball-install","format":"prettier --check .","lint:fix":"eslint . --fix --max-warnings=0","rust:fmt":"cargo fmt --manifest-path rust/Cargo.toml --all --check","rust:lint":"cargo clippy --manifest-path rust/Cargo.toml --all-targets --all-features -- -D warnings","rust:test":"cargo test --manifest-path rust/Cargo.toml --all-targets --all-features","typecheck":"tsc --noEmit","check:core":"npm run lint && npm run format && npm run typecheck && npm run rust:fmt && npm run rust:check && npm run rust:lint && npm run rust:test","rust:check":"cargo check --manifest-path rust/Cargo.toml --all-targets --all-features","format:write":"prettier --write .","rust:fmt:write":"cargo fmt --manifest-path rust/Cargo.toml --all","check:ansi-capture-proof":"node ./scripts/check-ansi-capture-proof.mjs","smoke:ansi-capture-proof":"./scripts/run-ansi-capture-proof-smoke.sh","check:npm-tarball-install":"node ./scripts/check-npm-tarball-install.mjs","check:pinned-host-runtime":"node ./scripts/check-pinned-host-runtime.mjs","verify:host-source-upgrade-path":"node ./scripts/verify-host-source-upgrade-path.mjs","smoke:deterministic-heredoc-grid":"./scripts/run-deterministic-heredoc-grid-smoke.sh","smoke:javascript-highlight-compare":"./scripts/run-semantic-highlight-compare-smoke.sh --scenario javascript","smoke:typescript-highlight-compare":"./scripts/run-semantic-highlight-compare-smoke.sh --scenario typescript","verify:multilanguage-local-package-proof":"node ./scripts/verify-multilanguage-local-package-proof.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e66eb77a-19e1-457e-a5e3-579ffe42eca2"}},"repository":{"url":"git+https://github.com/Banon-Labs/pi-inline-format.git","type":"git"},"_npmVersion":"11.12.1","description":"Strict Pi extension project with a Rust core subproject and a TypeScript extension wrapper.","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.1.0","globals":"^17.4.0","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.5.0","@sinclair/typebox":"^0.34.49","typescript-eslint":"^8.57.2","@modelcontextprotocol/sdk":"^1.28.0","@mariozechner/pi-coding-agent":"^0.63.1"},"peerDependencies":{"@sinclair/typebox":"*","@mariozechner/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-inline-format_0.1.2_1775076420946_0.7070925209910641","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@banon-labs/pi-inline-format","version":"0.1.3","keywords":["pi-package","pi-extension","rust","typescript"],"_id":"@banon-labs/pi-inline-format@0.1.3","maintainers":[{"name":"banon_","email":"banon.no.refunds@gmail.com"}],"homepage":"https://github.com/Banon-Labs/pi-inline-format#readme","bugs":{"url":"https://github.com/Banon-Labs/pi-inline-format/issues"},"pi":{"extensions":["./extensions/index.ts"]},"dist":{"shasum":"0c3b258978d681db43faec7ceecc5ee6cd188e17","tarball":"https://registry.npmjs.org/@banon-labs/pi-inline-format/-/pi-inline-format-0.1.3.tgz","fileCount":7,"integrity":"sha512-wSudjAXM7YEwXBDz8MoWqXzsO4UHMI8Ezv/dtkjxHslHGqzssE/134BtcBJkBrthMQtlprT3O6EsgWXEYrVesQ==","signatures":[{"sig":"MEQCIAloePg2K+Apd476Tf06YfMdLXXKNlUXpQe5u0+DsTDlAiBkEDY2t7WPBBfTMkl3Sr0ba7xzb5O7k5yjvUEs7JYM6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banon-labs%2fpi-inline-format@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49117},"type":"module","engines":{"node":">=22"},"gitHead":"984b424ee0cfe710b69e21a5a7e054f64c0bee12","private":false,"scripts":{"lint":"eslint . --max-warnings=0","check":"npm run check:core && npm run check:pinned-host-runtime && npm run check:ansi-capture-proof && npm run check:npm-tarball-install","format":"prettier --check .","lint:fix":"eslint . --fix --max-warnings=0","rust:fmt":"cargo fmt --manifest-path rust/Cargo.toml --all --check","rust:lint":"cargo clippy --manifest-path rust/Cargo.toml --all-targets --all-features -- -D warnings","rust:test":"cargo test --manifest-path rust/Cargo.toml --all-targets --all-features","typecheck":"tsc --noEmit","check:core":"npm run lint && npm run format && npm run typecheck && npm run rust:fmt && npm run rust:check && npm run rust:lint && npm run rust:test","rust:check":"cargo check --manifest-path rust/Cargo.toml --all-targets --all-features","format:write":"prettier --write .","rust:fmt:write":"cargo fmt --manifest-path rust/Cargo.toml --all","check:ansi-capture-proof":"node ./scripts/check-ansi-capture-proof.mjs","smoke:ansi-capture-proof":"./scripts/run-ansi-capture-proof-smoke.sh","check:npm-tarball-install":"node ./scripts/check-npm-tarball-install.mjs","check:pinned-host-runtime":"node ./scripts/check-pinned-host-runtime.mjs","verify:host-source-upgrade-path":"node ./scripts/verify-host-source-upgrade-path.mjs","smoke:deterministic-heredoc-grid":"./scripts/run-deterministic-heredoc-grid-smoke.sh","smoke:javascript-highlight-compare":"./scripts/run-semantic-highlight-compare-smoke.sh --scenario javascript","smoke:typescript-highlight-compare":"./scripts/run-semantic-highlight-compare-smoke.sh --scenario typescript","verify:multilanguage-local-package-proof":"node ./scripts/verify-multilanguage-local-package-proof.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e66eb77a-19e1-457e-a5e3-579ffe42eca2"}},"repository":{"url":"git+https://github.com/Banon-Labs/pi-inline-format.git","type":"git"},"_npmVersion":"11.12.1","description":"Strict Pi extension project with a Rust core subproject and a TypeScript extension wrapper.","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.1.0","globals":"^17.4.0","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.5.0","@sinclair/typebox":"^0.34.49","typescript-eslint":"^8.57.2","@modelcontextprotocol/sdk":"^1.28.0","@mariozechner/pi-coding-agent":"^0.63.1"},"peerDependencies":{"@sinclair/typebox":"*","@mariozechner/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-inline-format_0.1.3_1775078453216_0.8317493869439447","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@banon-labs/pi-inline-format","version":"0.1.4","keywords":["pi-package","pi-extension","rust","typescript"],"_id":"@banon-labs/pi-inline-format@0.1.4","maintainers":[{"name":"banon_","email":"banon.no.refunds@gmail.com"}],"homepage":"https://github.com/Banon-Labs/pi-inline-format#readme","bugs":{"url":"https://github.com/Banon-Labs/pi-inline-format/issues"},"pi":{"extensions":["./extensions/index.ts"]},"dist":{"shasum":"c8f3544a028d5a4e8cebae8caf8f6f32b3614a5a","tarball":"https://registry.npmjs.org/@banon-labs/pi-inline-format/-/pi-inline-format-0.1.4.tgz","fileCount":7,"integrity":"sha512-5G1YHcYZHIHloxX8zqgtkiQI2K3D8Y8su55AOMY/OcUDg4rpNGowNU9Mh+cKQ5b+Br1ddYb97Eoef4Zk8pB2Mw==","signatures":[{"sig":"MEYCIQDHJ81mcIy0M+CNzpT8QZldK4WCepGaHojLjDF58g+NdQIhAMgeyWF8712izqHPBFRApGTFIuQ7KiTJCmTWiiszvOvL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banon-labs%2fpi-inline-format@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49117},"type":"module","engines":{"node":">=22"},"gitHead":"c976057e33f199414096affb3240b42ddbe67806","private":false,"scripts":{"lint":"eslint . --max-warnings=0","check":"npm run check:core && npm run check:pinned-host-runtime && npm run check:ansi-capture-proof && npm run check:npm-tarball-install","format":"prettier --check .","lint:fix":"eslint . --fix --max-warnings=0","rust:fmt":"cargo fmt --manifest-path rust/Cargo.toml --all --check","rust:lint":"cargo clippy --manifest-path rust/Cargo.toml --all-targets --all-features -- -D warnings","rust:test":"cargo test --manifest-path rust/Cargo.toml --all-targets --all-features","typecheck":"tsc --noEmit","check:core":"npm run lint && npm run format && npm run typecheck && npm run rust:fmt && npm run rust:check && npm run rust:lint && npm run rust:test","rust:check":"cargo check --manifest-path rust/Cargo.toml --all-targets --all-features","format:write":"prettier --write .","rust:fmt:write":"cargo fmt --manifest-path rust/Cargo.toml --all","check:ansi-capture-proof":"node ./scripts/check-ansi-capture-proof.mjs","smoke:ansi-capture-proof":"./scripts/run-ansi-capture-proof-smoke.sh","check:npm-tarball-install":"node ./scripts/check-npm-tarball-install.mjs","check:pinned-host-runtime":"node ./scripts/check-pinned-host-runtime.mjs","verify:host-source-upgrade-path":"node ./scripts/verify-host-source-upgrade-path.mjs","smoke:deterministic-heredoc-grid":"./scripts/run-deterministic-heredoc-grid-smoke.sh","smoke:javascript-highlight-compare":"./scripts/run-semantic-highlight-compare-smoke.sh --scenario javascript","smoke:typescript-highlight-compare":"./scripts/run-semantic-highlight-compare-smoke.sh --scenario typescript","verify:multilanguage-local-package-proof":"node ./scripts/verify-multilanguage-local-package-proof.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e66eb77a-19e1-457e-a5e3-579ffe42eca2"}},"repository":{"url":"git+https://github.com/Banon-Labs/pi-inline-format.git","type":"git"},"_npmVersion":"11.12.1","description":"Strict Pi extension project with a Rust core subproject and a TypeScript extension wrapper.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.1.0","globals":"^17.4.0","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.5.0","@sinclair/typebox":"^0.34.49","typescript-eslint":"^8.57.2","@modelcontextprotocol/sdk":"^1.28.0","@mariozechner/pi-coding-agent":"^0.63.1"},"peerDependencies":{"@sinclair/typebox":"*","@mariozechner/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-inline-format_0.1.4_1775080865607_0.8589817138941913","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@banon-labs/pi-inline-format","private":false,"version":"0.1.5","description":"Strict Pi extension project with a Rust core subproject and a TypeScript extension wrapper.","type":"module","keywords":["pi-package","pi-extension","rust","typescript"],"pi":{"extensions":["./extensions/index.ts"]},"scripts":{"check":"npm run check:core && npm run check:pinned-host-runtime && npm run check:ansi-capture-proof && npm run check:npm-tarball-install","check:pinned-host-runtime":"node ./scripts/check-pinned-host-runtime.mjs","format":"prettier --check .","format:write":"prettier --write .","lint":"eslint . --max-warnings=0","lint:fix":"eslint . --fix --max-warnings=0","typecheck":"tsc --noEmit","rust:fmt":"cargo fmt --manifest-path rust/Cargo.toml --all --check","rust:fmt:write":"cargo fmt --manifest-path rust/Cargo.toml --all","rust:check":"cargo check --manifest-path rust/Cargo.toml --all-targets --all-features","rust:lint":"cargo clippy --manifest-path rust/Cargo.toml --all-targets --all-features -- -D warnings","rust:test":"cargo test --manifest-path rust/Cargo.toml --all-targets --all-features","verify:multilanguage-local-package-proof":"node ./scripts/verify-multilanguage-local-package-proof.mjs","smoke:deterministic-heredoc-grid":"./scripts/run-deterministic-heredoc-grid-smoke.sh","verify:host-source-upgrade-path":"node ./scripts/verify-host-source-upgrade-path.mjs","smoke:ansi-capture-proof":"./scripts/run-ansi-capture-proof-smoke.sh","check:core":"npm run lint && npm run format && npm run typecheck && npm run rust:fmt && npm run rust:check && npm run rust:lint && npm run rust:test","check:ansi-capture-proof":"node ./scripts/check-ansi-capture-proof.mjs","smoke:javascript-highlight-compare":"./scripts/run-semantic-highlight-compare-smoke.sh --scenario javascript","smoke:typescript-highlight-compare":"./scripts/run-semantic-highlight-compare-smoke.sh --scenario typescript","check:npm-tarball-install":"node ./scripts/check-npm-tarball-install.mjs","check:npm-warnings":"node ./scripts/check-npm-tarball-install.mjs"},"peerDependencies":{"@mariozechner/pi-coding-agent":"*","@sinclair/typebox":"*"},"devDependencies":{"@eslint/js":"^10.0.1","@mariozechner/pi-coding-agent":"^0.63.1","@modelcontextprotocol/sdk":"^1.28.0","@sinclair/typebox":"^0.34.49","@types/node":"^25.5.0","eslint":"^10.1.0","globals":"^17.4.0","prettier":"^3.8.1","typescript":"^5.9.3","typescript-eslint":"^8.57.2"},"engines":{"node":">=22"},"repository":{"type":"git","url":"git+https://github.com/Banon-Labs/pi-inline-format.git"},"homepage":"https://github.com/Banon-Labs/pi-inline-format#readme","bugs":{"url":"https://github.com/Banon-Labs/pi-inline-format/issues"},"publishConfig":{"access":"public","provenance":true},"overrides":{"node-domexception":"file:vendor/node-domexception"},"peerDependenciesMeta":{"@mariozechner/pi-coding-agent":{"optional":true},"@sinclair/typebox":{"optional":true}},"gitHead":"a62efd6d2ff7bd948acbf162765f9db8c940fdc4","_id":"@banon-labs/pi-inline-format@0.1.5","_nodeVersion":"24.14.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-nJnSV2N6LrQ8VQG8qqswzjo7iTJR4xOWRsUzE7rvcFm0QXw0f75HXxHChrKzgbn9RPlt1zDg8bUAaW2Z51bXTA==","shasum":"b553e1d16581072692f13cf5765b61314bbb2205","tarball":"https://registry.npmjs.org/@banon-labs/pi-inline-format/-/pi-inline-format-0.1.5.tgz","fileCount":7,"unpackedSize":49428,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@banon-labs%2fpi-inline-format@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIED34E1Lqy3p+cdM1KgwHq5klMWMUnHf16xV1/AVM3+NAiA5k7+gmXgujUPkcsCWaFbuCxGj4wFaGyxSFHodAKDFCw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e66eb77a-19e1-457e-a5e3-579ffe42eca2"}},"directories":{},"maintainers":[{"name":"banon_","email":"banon.no.refunds@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-inline-format_0.1.5_1775086570234_0.16910130545411262"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-01T03:26:19.065Z","modified":"2026-04-01T23:36:10.834Z","0.1.0":"2026-04-01T03:26:19.332Z","0.1.1":"2026-04-01T08:14:56.880Z","0.1.2":"2026-04-01T20:47:01.099Z","0.1.3":"2026-04-01T21:20:53.358Z","0.1.4":"2026-04-01T22:01:05.753Z","0.1.5":"2026-04-01T23:36:10.405Z"},"bugs":{"url":"https://github.com/Banon-Labs/pi-inline-format/issues"},"homepage":"https://github.com/Banon-Labs/pi-inline-format#readme","keywords":["pi-package","pi-extension","rust","typescript"],"repository":{"type":"git","url":"git+https://github.com/Banon-Labs/pi-inline-format.git"},"description":"Strict Pi extension project with a Rust core subproject and a TypeScript extension wrapper.","maintainers":[{"name":"banon_","email":"banon.no.refunds@gmail.com"}],"readme":"# pi-inline-format\n\n[![check](https://github.com/Banon-Labs/pi-inline-format/actions/workflows/check.yml/badge.svg)](https://github.com/Banon-Labs/pi-inline-format/actions/workflows/check.yml)\n\nStrict Pi extension project scaffold with:\n\n- a TypeScript Pi extension entrypoint in `extensions/`\n- a Rust core subproject in `rust/`\n\n## Goals\n\n- Follow Pi package and extension conventions\n- Keep the Pi-facing wrapper small and type-safe\n- Keep parsing/rendering logic in a stricter Rust core\n- Enforce strict checks separately for TypeScript and Rust\n\n## Layout\n\n```text\npi-inline-format/\n├── extensions/        # Pi extension entrypoint(s)\n├── rust/              # Rust core subproject\n├── .ralphi/           # Ralph loop config/runtime files\n├── eslint.config.mjs\n├── package.json\n└── tsconfig.json\n```\n\n## TypeScript commands\n\n```bash\nnpm run typecheck\nnpm run lint\nnpm run format\n```\n\n## Rust commands\n\n```bash\nnpm run rust:fmt\nnpm run rust:check\nnpm run rust:lint\nnpm run rust:test\n```\n\n## Combined check\n\n```bash\nnpm run check\n```\n\n## CI contract\n\nThe GitHub Actions `check` workflow is the repository-level guardrail for the package-backed setup.\n\nIt currently runs four layers:\n\n1. `npm run verify:host-source-upgrade-path`\n   - explicitly rehearses the reversible local-path to pinned-git migration flow,\n   - proves the pinned host source still loads,\n   - proves deterministic compare still works after the source switch,\n   - restores `.pi/settings.json` automatically,\n   - in CI, runs after the workflow materializes the legacy `../pi-inline-format-extensions` sibling checkout expected by the rehearsal.\n2. `npm run check:pinned-host-runtime`\n   - covers the headless deterministic regression path for the pinned host source.\n3. `npm run check:ansi-capture-proof`\n   - runs the tmux-based ANSI capture proof harness,\n   - consumes the new `replay.ansi` and `observer.capture` artifacts,\n   - verifies that color-sensitive proof survives the ANSI-preserving `tmux capture-pane -e` bridge for python, javascript, typescript, and bash.\n4. `npm run check:core`\n   - covers linting, formatting, TypeScript checks, and all Rust checks/tests.\n\nUse this split to interpret failures:\n\n- upgrade-path rehearsal failures usually indicate package-source or migration regressions,\n- `check:pinned-host-runtime` failures usually indicate package-backed host/runtime regressions before TUI/tmux proof is involved,\n- `check:ansi-capture-proof` failures usually indicate the ANSI-preserving proof bridge or color-sensitive transcript evidence regressed,\n- `check:core` failures usually indicate repo-local diagnostics or Rust/tooling issues rather than package-source wiring.\n\n## Rust transcript analysis contract\n\nThe Rust CLI reads raw transcript text from stdin and prints JSON shaped like:\n\n```json\n{\n  \"regions\": [\n    {\n      \"id\": \"outer-0\",\n      \"role\": \"outer\",\n      \"language\": \"bash\",\n      \"start_byte\": 0,\n      \"end_byte\": 18\n    },\n    {\n      \"id\": \"embedded-0\",\n      \"role\": \"embedded\",\n      \"language\": \"python\",\n      \"start_byte\": 18,\n      \"end_byte\": 30\n    },\n    {\n      \"id\": \"outer-1\",\n      \"role\": \"outer\",\n      \"language\": \"bash\",\n      \"start_byte\": 30,\n      \"end_byte\": 44\n    }\n  ],\n  \"render_blocks\": [\n    {\n      \"id\": \"outer-0\",\n      \"role\": \"outer\",\n      \"language\": \"bash\",\n      \"content\": \"$ python - <<'PY'\\n\"\n    },\n    {\n      \"id\": \"embedded-0\",\n      \"role\": \"embedded\",\n      \"language\": \"python\",\n      \"content\": \"print('hi')\\n\"\n    },\n    {\n      \"id\": \"outer-1\",\n      \"role\": \"outer\",\n      \"language\": \"bash\",\n      \"content\": \"PY\\n$ echo done\\n\"\n    }\n  ]\n}\n```\n\nContract notes:\n\n- `regions` is ordered and generic so later iterations can add more nested-language patterns.\n- `render_blocks` is the render-ready companion to `regions`; each block keeps a renderer's language choice separate from the original byte offsets.\n- `role` distinguishes outer transcript content from embedded code content.\n- `language` identifies the rendering language for each region or block.\n- `start_byte` and `end_byte` preserve original transcript boundaries for later extraction/rendering work.\n- The Rust core now drives detection through a generic `NESTED_REGION_PATTERNS` table, so future nested-language additions can plug in new pattern descriptors without changing the JSON contract shape.\n- For `python - <<'PY' ... PY`, the embedded Python region excludes the heredoc opener and terminator so wrapper content stays in outer bash regions while `render_blocks` expose a distinct Python block for display.\n- The first embedded-language detection case is `python - <<'PY' ... PY` inside a bash transcript.\n- The same `PY` heredoc split also supports plain bash file-writing flows such as `cat > /tmp/delete.me.py <<'PY' ... PY`, which is the canonical normal-flow validation prompt for this repo.\n\n## TypeScript wrapper integration\n\nThe Pi extension keeps TypeScript Pi-facing and delegates transcript analysis to `extensions/rust-cli.ts`.\nThat helper:\n\n- prefers a fresh Rust CLI binary from `rust/target/...` when one is newer than the Rust sources,\n- falls back to `cargo run --manifest-path rust/Cargo.toml --quiet --bin pi-inline-format-core` when no fresh binary is available,\n- sends the raw transcript to stdin,\n- validates the JSON response shape before returning it to the Pi-facing layer,\n- includes the invoked command in thrown errors so integration failures are easier to debug.\n\n## Deterministic compare helpers\n\nDeterministic compare for live tmux A/B checks is owned by the package-backed host runtime loaded from `.pi/settings.json`, not by repo-local provider files.\n\nCurrent deterministic provider surface:\n\n- Provider: `inline-deterministic`\n- Scenario models:\n  - `canonical-heredoc-compare` — Python\n  - `javascript-heredoc-compare` — JavaScript\n  - `typescript-heredoc-compare` — TypeScript\n  - `bash-heredoc-compare` — shell/bash\n- Default prompt/model pair:\n  - prompt: `Use bash to run python from a heredoc with python3. Use PY as the heredoc delimiter exactly. Keep the transcript inline and normal.`\n  - model: `inline-deterministic/canonical-heredoc-compare`\n- Commands:\n  - `/inline-format-use-deterministic-model [scenario]` — switches the current session to the package-backed deterministic compare model for `python`, `javascript`, `typescript`, or `bash`.\n  - `/inline-format-run-deterministic-compare [scenario]` — switches to the requested deterministic scenario and submits its matching prompt with no real LLM call.\n  - `/inline-format-deterministic-status` — shows the provider, available scenarios/models, default prompt, and helper commands.\n\nVerification in this repo:\n\n- `npm run check:pinned-host-runtime`\n  - makes sure the pinned public package still serves the shipped Python, JavaScript, TypeScript, and bash proof paths.\n- `npm run verify:multilanguage-local-package-proof`\n  - temporarily switches `.pi/settings.json` to the local root package source `../../pi-inline-format-extensions`,\n  - checks the Python/JavaScript/TypeScript/bash scenarios,\n  - and switches back to the pinned git source automatically.\n- `npm run smoke:javascript-highlight-compare`\n  - opens a tmux session with the same JavaScript heredoc on both sides,\n  - left pane = the current pinned package,\n  - right pane = your local checkout,\n  - keeps the normal bash tool row,\n  - keeps the same source text,\n  - and shows whether the local version changes highlighting only.\n- `npm run smoke:typescript-highlight-compare`\n  - does the same side-by-side check for the TypeScript heredoc scenario.\n\nExtra inspection commands exposed by the pinned host package:\n\n- `/inline-format-intel-status` — shows which language backends are available.\n- `/inline-format-inspect-sample <scenario>` — inspects a built-in sample heredoc.\n- `/inline-format-explain-symbol <scenario> <symbol>` — explains a symbol in a sample heredoc.\n- `/inline-format-find-definition <scenario> <symbol>` — finds where a symbol comes from in a sample heredoc.\n- `/inline-format-highlight-symbol <scenario> <symbol>` — shows matching symbol ranges in a sample heredoc.\n- `/inline-format-semantic-tokens <scenario>` — shows the raw token data for JS/TS.\n- `/inline-format-diagnostics-sample <scenario>` — shows diagnostics for a sample heredoc.\n\nPi-facing entrypoints exposed from `extensions/index.ts`:\n\n- `/inline-format-status` — reports that the project-local diagnostics wrapper is wired to the Rust CLI.\n- `/inline-format-analyze` — analyzes either the provided transcript argument or a built-in heredoc sample.\n- `/inline-format-render` — renders the transcript as distinct language-aware markdown code fences derived from Rust `render_blocks`.\n- `analyze_inline_transcript` — Pi tool that returns the full Rust JSON contract for a raw transcript.\n- `render_inline_transcript` — Pi tool that returns markdown-ready output plus structured `render_blocks` for downstream rendering.\n- package-backed host runtime seams — loaded from `.pi/settings.json`, currently owning the built-in `bash` override, deterministic compare helpers, and summary suppression behavior for the normal Pi user flow.\n\n## Heredoc language support\n\nBash heredocs can hold almost any text. This table is about what **this package** knows how to recognize and highlight today.\n\n### What kind of highlighting do you get?\n\n- **Basic highlighting** = the package detects the heredoc and Pi colors it like normal code.\n- **Smarter highlighting** = the package keeps the same source text and layout, but adds stronger emphasis to important symbols in the normal bash tool row.\n- **Inspection backend** = the package has a language-aware backend that can inspect the extracted snippet, even if the final tool row still uses basic highlighting.\n\n### Canonical package-backed capability tables\n\nThe package-backed capability tables now live in the host/package repo:\n\n- [Shipped today](https://github.com/Banon-Labs/pi-inline-format-extensions#shipped-today)\n- [Researched next candidates](https://github.com/Banon-Labs/pi-inline-format-extensions#researched-next-candidates)\n\nUse `pi-inline-format-extensions` as the source of truth for:\n\n- which heredoc languages are currently shipped,\n- which languages have real or partial inspection backends,\n- and which next-language candidates were researched but are not wired yet.\n\nThis repo keeps the Rust-core and repo-local diagnostics documentation, while the package-backed capability matrix is maintained in `Banon-Labs/pi-inline-format-extensions`.\n\nThis repo still exposes `extensions/index.ts` through `package.json` because the repo-local Rust diagnostics remain a valid direct local entrypoint.\n\nFor normal package-backed development, project-scoped `.pi/settings.json` now loads both:\n\n- host package source: `git:github.com/Banon-Labs/pi-inline-format-extensions@v0.1.5`\n- local diagnostics extension: `../extensions/index.ts`\n\nThis split keeps reusable runtime behavior in the pinned git-backed host package while preserving repo-local Rust CLI diagnostics inside `pi-inline-format`.\n\nThe intended stable release-time source is the pinned git ref above, resolved through the root-level Pi package surface in `Banon-Labs/pi-inline-format-extensions`.\n\nFor unpublished host changes under active development, the preferred local package source is now the repo root:\n\n- `../../pi-inline-format-extensions`\n\nThat root-level local path matches the same package surface used by future pinned git installs. The older `../../pi-inline-format-extensions/packages/host` path remains relevant only as a historical migration source validated by `npm run verify:host-source-upgrade-path`.\n\n## Quick install in another project\n\nIf you are a normal user and just want the feature, install **only the published npm package**:\n\n- [`npm:@banon-labs/pi-inline-format-extensions@0.1.5`](https://www.npmjs.com/package/@banon-labs/pi-inline-format-extensions)\n\nIf you need an exact repository build instead of the published package, the pinned git source remains available as an advanced fallback.\n\nIf that package is **not** in `.pi/settings.json`, this feature will not load.\n\nYou do **not** need:\n\n- `../extensions/index.ts`\n- `pi-tmux`\n- `pi-semaphore`\n- any other local Pi package from this workspace\n\nCreate `.pi/settings.json` with just the published npm package source:\n\n```json\n{\n  \"packages\": [\n    {\n      \"source\": \"npm:@banon-labs/pi-inline-format-extensions@0.1.5\",\n      \"skills\": [],\n      \"prompts\": [],\n      \"themes\": []\n    }\n  ]\n}\n```\n\nThen, in that project:\n\n```bash\npi list\npi\n```\n\nInside Pi, these are good quick checks:\n\n- `/inline-format-host-status`\n- `/inline-format-run-deterministic-compare javascript`\n\nThat should show:\n\n- the package under `Project packages` in `pi list`,\n- host status text from the installed package,\n- and the normal inline JavaScript heredoc row with `hello from js 42`.\n\n> This install path was validated in a clean temp project with no repo-local diagnostics extension loaded. The repo-local development flow below still uses a pinned git ref because current consumer-regression scripts are anchored to an exact host commit.\n\n## ANSI example: Python before and after install\n\nThis is the same Python heredoc prompt in two states:\n\n- **Before**: deterministic provider only, no package-installed bash override.\n- **After**: pinned package installed in `.pi/settings.json`.\n\nThe source text stays the same. The difference is that the installed package gives the Python body real syntax colors instead of one plain tool-colored block.\n\n**Before**\n\n```text\n\\x1b[1m\\x1b[38;2;208;144;96mdef main() -> None:\\x1b[0m\n\\x1b[1m\\x1b[38;2;208;144;96m    print(\"hello from /tmp/delete.me.py\")\\x1b[0m\n```\n\n**After**\n\n```text\n\\x1b[38;2;86;156;214mdef\\x1b[39m \\x1b[38;2;220;220;170mmain\\x1b[39m() -> \\x1b[38;2;181;206;168mNone\\x1b[39m:\n\\x1b[38;2;78;201;176mprint\\x1b[39m(\\x1b[38;2;206;145;120m\"hello from /tmp/delete.me.py\"\\x1b[39m)\n```\n\nThese examples came from a clean install proof run captured in tmux.\n\n## Consumer install/update/migration flow\n\nFor normal users, prefer the npm package source above. The remaining pinned-git instructions in this repo are for repo-local development, release rehearsal, and exact-commit rollback.\n\n## Repo-local development flow\n\nThe section below is **for this repo only**.\n\nIf you are developing inside `pi-inline-format`, keep the pinned package **and** the local diagnostics extension:\n\n```json\n{\n  \"packages\": [\n    {\n      \"source\": \"git:github.com/Banon-Labs/pi-inline-format-extensions@v0.1.5\",\n      \"skills\": [],\n      \"prompts\": [],\n      \"themes\": []\n    }\n  ],\n  \"extensions\": [\"../extensions/index.ts\"]\n}\n```\n\n### What stays local vs package-backed\n\n- Keep the host/runtime package source pinned in `.pi/settings.json`.\n- Keep `../extensions/index.ts` loaded locally for repo-local Rust CLI diagnostics.\n- Do **not** move the local diagnostics commands into the package source; the package owns runtime seams, while this repo keeps diagnostics.\n\n1. Land and publish the host-side changes in `pi-inline-format-extensions` first.\n2. Replace the `packages[0].source` value in `.pi/settings.json` with the new pinned git ref.\n3. Keep `extensions[0]` set to `../extensions/index.ts`.\n4. Run `pi list` and confirm the new pinned source appears under `Project packages`.\n5. Run `npm run check`.\n6. If the host change expanded language support or deterministic proof behavior, rerun the relevant proof flow before calling the repin complete.\n\n## ANSI-preserving tmux proof helper\n\nFor color-sensitive proof that should survive beyond a live pane, use:\n\n```bash\nnpm run smoke:ansi-capture-proof\n```\n\nDefault behavior:\n\n- launches a deterministic target Pi pane in this repo,\n- runs `/inline-format-run-deterministic-compare typescript`,\n- launches an observer Pi pane,\n- extracts ANSI-rich proof lines into a replay pane, then captures that replay pane with ANSI-preserving `tmux capture-pane -e`,\n- validates that the observer capture artifact still contains ANSI-highlighted TypeScript output,\n- writes artifacts under `/tmp/pi-inline-smoke-ansi-capture-*/`.\n\nUseful flags:\n\n- `--scenario python|javascript|typescript|bash`\n- `--keep-open` to leave the dedicated smoke session running for inspection\n\nThis helper is for proofing the capture bridge itself. It complements, rather than replaces, the existing deterministic grid smoke and raw `PI_TUI_WRITE_LOG` artifacts. The automated harness entrypoint is `npm run check:ansi-capture-proof`.\n\n### Pre-release local-root validation flow\n\nBefore publishing a new host ref, validate against the local root package surface:\n\n1. point `packages[0].source` at `../../pi-inline-format-extensions`,\n2. keep `../extensions/index.ts` unchanged,\n3. run `npm run verify:multilanguage-local-package-proof`,\n4. restore the pinned git source after validation.\n\nThis flow is specifically for unpublished host work. Stable consumer installs should continue to use pinned git refs, not an unpinned sibling checkout.\n\n### Migrating from the old local sibling path\n\nOlder local development used:\n\n- `../../pi-inline-format-extensions/packages/host`\n\nThe verified migration path is:\n\n1. start from the old local-path package source above,\n2. switch `packages[0].source` to the pinned git source,\n3. keep `../extensions/index.ts` unchanged,\n4. verify with `npm run verify:host-source-upgrade-path`,\n5. finish with `npm run check`.\n\n`npm run verify:host-source-upgrade-path` rehearses the exact transition locally by temporarily switching `.pi/settings.json` from the old local-path source to the pinned git source, running `pi list` plus headless deterministic compare verification at each step, and restoring the original settings file automatically even on failure.\n\n### Rollback note\n\nIf a future update fails, restore `.pi/settings.json` to the last known-good package source and rerun:\n\n- `pi list`\n- `npm run check`\n","readmeFilename":"README.md"}