{"_id":"@capotej/pi-mise","_rev":"8-46b883168f87a8ec9732a04dfee8384a","name":"@capotej/pi-mise","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@capotej/pi-mise","version":"1.0.0","keywords":["pi-package","mise"],"author":{"name":"Julio Capote","email":"6135+capotej@users.noreply.github.com"},"license":"MIT","_id":"@capotej/pi-mise@1.0.0","maintainers":[{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/capotej/pi-mise#readme","bugs":{"url":"https://github.com/capotej/pi-mise/issues"},"pi":{"skills":["./skills"],"extensions":["./dist/extensions"]},"dist":{"shasum":"346d2c6cf058f36986604ba899c11af58611419f","tarball":"https://registry.npmjs.org/@capotej/pi-mise/-/pi-mise-1.0.0.tgz","fileCount":6,"integrity":"sha512-rt1gSiznJgy9GFc3BL0IKm0oBo78cGJ42seBOR5B7IMjjYt5mBsEIPZZv7fFrJYcgQXdMclr59wMurDCJ+j4cQ==","signatures":[{"sig":"MEQCIF0DT8bAZF08svS550bYlH+Oat2httjtPh09us22m9qpAiA1Bys26t6J0a3D9ih2OwCpPqkszQg8489BnGA9G9ZsXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10848},"type":"module","gitHead":"6716533f405844740ee82fd619aea5657690ac6a","scripts":{"lint":"biome check .","build":"tsc","format":"biome format --write .","prepare":"tsc","lint:fix":"biome check --write ."},"_npmUser":{"name":"capotej","email":"jcapote@gmail.com"},"repository":{"url":"git+https://github.com/capotej/pi-mise.git","type":"git"},"_npmVersion":"11.12.1","description":"Automatically activates mise when a mise.toml or .mise.toml file is found in the project","directories":{},"_nodeVersion":"26.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"typescript":"^6.0.2","@types/node":"^22.0.0","@biomejs/biome":"1.9.4","@earendil-works/pi-coding-agent":"^0.78.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-mise_1.0.0_1780802688094_0.1328051755540196","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@capotej/pi-mise","version":"1.0.1","keywords":["pi-package","mise"],"author":{"name":"Julio Capote","email":"6135+capotej@users.noreply.github.com"},"license":"MIT","_id":"@capotej/pi-mise@1.0.1","maintainers":[{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/capotej/pi-mise#readme","bugs":{"url":"https://github.com/capotej/pi-mise/issues"},"pi":{"skills":["./skills"],"extensions":["./dist/extensions/mise.js"]},"dist":{"shasum":"8883ac42131f0e95fb55aac5f43ab4ed8fbb1dd2","tarball":"https://registry.npmjs.org/@capotej/pi-mise/-/pi-mise-1.0.1.tgz","fileCount":6,"integrity":"sha512-c/Ashqam8UqCFtG/Ts2bQv1KEuigznn/2Aen/BX+ReWKBUG6GShLIA3fAwLJqgqjZ72s86JOB5sKiIHZHJmFpw==","signatures":[{"sig":"MEUCIQDaTBC+5ZrY1OEiBXJ5fA/xWzFylBb2Hi/wVdrT0uzIUwIgMbdWLitb8c11mlHjLrWzqJcvDcR2EWn0sTbPe6XT7MQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10922},"type":"module","gitHead":"2335dab4a4bf1d02a7cad28862b255eab4990a11","scripts":{"lint":"biome check .","build":"tsc","format":"biome format --write .","prepare":"tsc","lint:fix":"biome check --write ."},"_npmUser":{"name":"capotej","email":"jcapote@gmail.com"},"repository":{"url":"git+https://github.com/capotej/pi-mise.git","type":"git"},"_npmVersion":"11.12.1","description":"Automatically activates mise when a mise.toml or .mise.toml file is found in the project","directories":{},"_nodeVersion":"26.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"typescript":"^6.0.2","@types/node":"^22.0.0","@biomejs/biome":"1.9.4","@mariozechner/pi-coding-agent":"^0.73.1"},"peerDependencies":{"@mariozechner/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-mise_1.0.1_1780803437091_0.10010806212930867","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@capotej/pi-mise","version":"1.0.2","keywords":["pi-package","mise"],"author":{"name":"Julio Capote","email":"6135+capotej@users.noreply.github.com"},"license":"MIT","_id":"@capotej/pi-mise@1.0.2","maintainers":[{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/capotej/pi-mise#readme","bugs":{"url":"https://github.com/capotej/pi-mise/issues"},"pi":{"skills":["./skills"],"extensions":["./dist/index.js"]},"dist":{"shasum":"6e71727198f6f40985a227018ace40f0ce56a7ee","tarball":"https://registry.npmjs.org/@capotej/pi-mise/-/pi-mise-1.0.2.tgz","fileCount":6,"integrity":"sha512-FXWEer8LgKX9H5HV6pjHoOWgGDNRkinBLpA0uRS+uLJvJb8DUp4zv5I7xwhF4lbzOflAHGohvISNj27tvZ7qxw==","signatures":[{"sig":"MEQCIAMna0cjktG05O3HCgZtbgoXx3Tk3gNJo5E51MFO+QcNAiAavnhQjGCZJkq+FDXTdFKgxp3tW/GbEr64zymiz04P/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10906},"type":"module","gitHead":"19ae6f43be3087f5be325f4fbd9d06cee829f6dc","scripts":{"lint":"biome check .","build":"tsc","format":"biome format --write .","prepare":"tsc","lint:fix":"biome check --write ."},"_npmUser":{"name":"capotej","email":"jcapote@gmail.com"},"repository":{"url":"git+https://github.com/capotej/pi-mise.git","type":"git"},"_npmVersion":"11.12.1","description":"Automatically activates mise when a mise.toml or .mise.toml file is found in the project","directories":{},"_nodeVersion":"26.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"typescript":"^6.0.2","@types/node":"^22.0.0","@biomejs/biome":"1.9.4","@mariozechner/pi-coding-agent":"^0.73.1"},"peerDependencies":{"@mariozechner/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-mise_1.0.2_1780804075219_0.019135789276453874","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@capotej/pi-mise","version":"1.0.3","keywords":["pi-package","mise"],"author":{"name":"Julio Capote","email":"6135+capotej@users.noreply.github.com"},"license":"MIT","_id":"@capotej/pi-mise@1.0.3","maintainers":[{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/capotej/pi-mise#readme","bugs":{"url":"https://github.com/capotej/pi-mise/issues"},"pi":{"skills":["./skills"],"extensions":["./index.js"]},"dist":{"shasum":"7d7ec82775fe454d803af0c8334f358afc5bcbd6","tarball":"https://registry.npmjs.org/@capotej/pi-mise/-/pi-mise-1.0.3.tgz","fileCount":6,"integrity":"sha512-BRyH57uJywA1Rg/8C0FO4BJEP8t+pay7O4TgOUJJn0ziPcMxOUn6KhWStRrRLYynyQAthLZBMCxpDoOa7AFhIA==","signatures":[{"sig":"MEYCIQCeMtmC4yr/ccohY5S0wV5SAOwc28Gp7R/8HSFEuU9LhgIhAKRkzxahzAWTXKlHufsNgKvMjf1DE2BkDOrfw8YBYc1K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10919},"type":"module","types":"./index.d.ts","gitHead":"6f52cd81a5559117a47aa33d603ec759d86341cf","scripts":{"lint":"biome check .","build":"tsc","format":"biome format --write .","prepare":"tsc","lint:fix":"biome check --write ."},"_npmUser":{"name":"capotej","email":"jcapote@gmail.com"},"repository":{"url":"git+https://github.com/capotej/pi-mise.git","type":"git"},"_npmVersion":"11.12.1","description":"Automatically activates mise when a mise.toml or .mise.toml file is found in the project","directories":{},"_nodeVersion":"26.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"typescript":"^6.0.2","@types/node":"^22.0.0","@biomejs/biome":"1.9.4","@mariozechner/pi-coding-agent":"^0.73.1"},"peerDependencies":{"@mariozechner/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-mise_1.0.3_1780804398787_0.9775050214248937","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@capotej/pi-mise","version":"1.0.4","keywords":["pi-package","mise"],"author":{"name":"Julio Capote","email":"6135+capotej@users.noreply.github.com"},"license":"MIT","_id":"@capotej/pi-mise@1.0.4","maintainers":[{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/capotej/pi-mise#readme","bugs":{"url":"https://github.com/capotej/pi-mise/issues"},"pi":{"skills":["./skills"],"extensions":["./index.js"]},"dist":{"shasum":"a0cf03850dbbaee5fef4ad9fe60314eccccf3547","tarball":"https://registry.npmjs.org/@capotej/pi-mise/-/pi-mise-1.0.4.tgz","fileCount":6,"integrity":"sha512-BIj82Ckl9bRAAVOXuEzVX6IaWFPb6dbQaXtOUO6lfLYiqF06U+30jsXHj65HgZggM9pyOQI3IXxsvdFqPUX05w==","signatures":[{"sig":"MEQCIGUyIN15iTe/iYHjyTQRVhNOnHORnykfAVCEYuftyXIPAiAFs9CzLp6O73hzlvTp9CobgNDVBzs6mLkR1hmBMbk6qw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10913},"type":"module","types":"./index.d.ts","gitHead":"fba54ef3a1a181ef473c649fcb915df1adfe7b4e","scripts":{"lint":"biome check .","build":"tsc","format":"biome format --write .","prepare":"tsc","lint:fix":"biome check --write ."},"_npmUser":{"name":"capotej","email":"jcapote@gmail.com"},"repository":{"url":"git+https://github.com/capotej/pi-mise.git","type":"git"},"_npmVersion":"11.12.1","description":"Automatically activates mise when a mise.toml or .mise.toml file is found in the project","directories":{},"_nodeVersion":"26.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"typescript":"^6.0.2","@types/node":"^22.0.0","@biomejs/biome":"1.9.4","@mariozechner/pi-coding-agent":"^0.73.1"},"peerDependencies":{"@mariozechner/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-mise_1.0.4_1780828989771_0.9650237529438821","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@capotej/pi-mise","version":"1.0.5","keywords":["pi-package","mise"],"author":{"name":"Julio Capote","email":"6135+capotej@users.noreply.github.com"},"license":"MIT","_id":"@capotej/pi-mise@1.0.5","maintainers":[{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/capotej/pi-mise#readme","bugs":{"url":"https://github.com/capotej/pi-mise/issues"},"pi":{"skills":["./skills"],"extensions":["./index.js"]},"dist":{"shasum":"052171859fb5eb0db7d7d5beedb4143598a54efc","tarball":"https://registry.npmjs.org/@capotej/pi-mise/-/pi-mise-1.0.5.tgz","fileCount":6,"integrity":"sha512-0LGkfk9HMsYDbnGpFsgHwTfBTpAcXxKP6Lik9mwRU1c9iBGR4aBilxFWjat13ernfXgb9ap86ArtWqB8aT/Row==","signatures":[{"sig":"MEYCIQCIYHYcOPdcJFXhIpXxeDNoYuB/EeS+PXiknZe9oXLcWgIhAK+iNT6FuOCmJ3PX+uy8zShxgWx6RxGZQjEOqpCY6sZb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10881},"type":"module","types":"./index.d.ts","gitHead":"40597ae9a929e87fda8be9da99bc474f44476136","scripts":{"lint":"biome check .","build":"tsc","format":"biome format --write .","prepare":"tsc","lint:fix":"biome check --write ."},"_npmUser":{"name":"capotej","email":"jcapote@gmail.com"},"repository":{"url":"git+https://github.com/capotej/pi-mise.git","type":"git"},"_npmVersion":"11.12.1","description":"Automatically activates mise when a mise.toml or .mise.toml file is found in the project","directories":{},"_nodeVersion":"26.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"typescript":"^6.0.2","@types/node":"^22.0.0","@biomejs/biome":"1.9.4","@mariozechner/pi-coding-agent":"^0.73.1"},"peerDependencies":{"@mariozechner/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-mise_1.0.5_1780838225343_0.4980261470907019","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@capotej/pi-mise","version":"1.1.0","keywords":["pi-package","mise"],"author":{"name":"Julio Capote","email":"6135+capotej@users.noreply.github.com"},"license":"MIT","_id":"@capotej/pi-mise@1.1.0","maintainers":[{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/capotej/pi-mise#readme","bugs":{"url":"https://github.com/capotej/pi-mise/issues"},"pi":{"skills":["./skills"],"extensions":["./dist/index.js"]},"dist":{"shasum":"d0f0d3d368d87bcfbfa1c882eddda4bd75f3ddf7","tarball":"https://registry.npmjs.org/@capotej/pi-mise/-/pi-mise-1.1.0.tgz","fileCount":6,"integrity":"sha512-masG3RvGxRxGecMSsBCRh1Ox2tkn12X0X/hwUlRjLyc9uRUflzkbJGA7RWqAGE9bNzL3FjF4J6JH+OidKJ/R/w==","signatures":[{"sig":"MEYCIQC8HRv2VHCgYPsuEZiAkx+Od15DgoOSjMLBBucZxdfWNwIhAO5rhTf3HBy/Mymnn886Lhf4nrFIPEaAueOG3ZO9Oe8f","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23120},"type":"module","gitHead":"c123c60a80a54c1089dea25dc191f3d0da6c5bac","scripts":{"lint":"oxlint .","test":"tsc && node --test","build":"tsc","format":"oxfmt --write .","prepare":"tsc","lint:fix":"oxlint --fix .","format:check":"oxfmt --check ."},"_npmUser":{"name":"capotej","email":"jcapote@gmail.com"},"repository":{"url":"git+https://github.com/capotej/pi-mise.git","type":"git"},"_npmVersion":"11.12.1","description":"Automatically activates mise when a mise.toml, .mise.toml, or .tool-versions file is found in the project","directories":{},"_nodeVersion":"26.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"oxfmt":"0.61.0","oxlint":"1.76.0","typescript":"^7.0.2","@types/node":"^24.0.0","@mariozechner/pi-coding-agent":"^0.73.1"},"peerDependencies":{"@mariozechner/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-mise_1.1.0_1785417032478_0.9649790122963127","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@capotej/pi-mise","version":"1.2.0","type":"module","description":"Automatically activates mise when a mise.toml, .mise.toml, or .tool-versions file is found in the project","keywords":["pi-package","mise"],"license":"MIT","author":{"name":"Julio Capote","email":"6135+capotej@users.noreply.github.com"},"repository":{"type":"git","url":"git+https://github.com/capotej/pi-mise.git"},"pi":{"extensions":["./dist/index.js"],"skills":["./skills"]},"peerDependencies":{"@mariozechner/pi-coding-agent":"*"},"devDependencies":{"@mariozechner/pi-coding-agent":"^0.73.1","@types/node":"^24.0.0","oxfmt":"0.61.0","oxlint":"1.76.0","typescript":"^7.0.2"},"scripts":{"build":"tsc","prepare":"tsc","test":"tsc && node --test","lint":"oxlint .","lint:fix":"oxlint --fix .","format":"oxfmt --write .","format:check":"oxfmt --check ."},"packageManager":"pnpm@10.33.2","publishConfig":{"access":"public"},"gitHead":"c380f8d1869a2cb44210e713d2840e56cca11166","_id":"@capotej/pi-mise@1.2.0","bugs":{"url":"https://github.com/capotej/pi-mise/issues"},"homepage":"https://github.com/capotej/pi-mise#readme","_nodeVersion":"26.0.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-o2krJKaoI4mrnbF6k9i+uverx7w9UVUowoyS57mcrX+HaZdIQGYw9VKrGLt93fQzcJ2wlDUB36+6aPnn3L+r5A==","shasum":"77703a3f2cb6c8a6e8823d8c05dc0d44edca11fa","tarball":"https://registry.npmjs.org/@capotej/pi-mise/-/pi-mise-1.2.0.tgz","fileCount":6,"unpackedSize":24099,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDrWpq/OLWjOi9aci10q/rUsBsKO13PRVQSxA828p/pcQIhAPvcTNlVgs0zQKx95JENaa9r/B3hvVLPwitdS5SmkXNV"}]},"_npmUser":{"name":"capotej","email":"jcapote@gmail.com"},"directories":{},"maintainers":[{"name":"capotej","email":"jcapote@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-mise_1.2.0_1785421995342_0.9597546512165653"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-07T03:24:47.898Z","modified":"2026-07-30T14:33:15.843Z","1.0.0":"2026-06-07T03:24:48.249Z","1.0.1":"2026-06-07T03:37:17.230Z","1.0.2":"2026-06-07T03:47:55.352Z","1.0.3":"2026-06-07T03:53:18.922Z","1.0.4":"2026-06-07T10:43:09.912Z","1.0.5":"2026-06-07T13:17:05.494Z","1.1.0":"2026-07-30T13:10:32.616Z","1.2.0":"2026-07-30T14:33:15.514Z"},"bugs":{"url":"https://github.com/capotej/pi-mise/issues"},"author":{"name":"Julio Capote","email":"6135+capotej@users.noreply.github.com"},"license":"MIT","homepage":"https://github.com/capotej/pi-mise#readme","keywords":["pi-package","mise"],"repository":{"type":"git","url":"git+https://github.com/capotej/pi-mise.git"},"description":"Automatically activates mise when a mise.toml, .mise.toml, or .tool-versions file is found in the project","maintainers":[{"name":"capotej","email":"jcapote@gmail.com"}],"readme":"# @capotej/pi-mise\n\nAuto-activates [mise](https://mise.jdx.dev/) for [pi](https://github.com/mariozechner/pi-coding-agent) coding sessions.\n\nWhen this pi package is installed and a `mise.toml`, `.mise.toml`, or `.tool-versions` file is detected in the project root, it automatically:\n\n- **Trusts** the mise configuration (idempotent, safe)\n- **Follows `cd`** into other repos/subdirs and trusts their configs too, so the activate hook stays quiet on directory changes\n- **Re-trusts after mutation** — when the agent edits a config (`write`/`edit`) or runs `mise use`, trust is re-applied before the next command, because mise revokes trust on change\n- **Prepends** a stderr-tolerant `mise activate` to every `bash` tool call, ensuring commands run with the correct tool versions and that non-fatal mise output never fails the actual command\n- **Contributes** the `mise` skill for edge cases (manual install, trust, tasks)\n\n## Installation\n\n```bash\npi install @capotej/pi-mise\n```\n\n## How It Works\n\n1. On **session start**, the extension checks if `mise` is available in `PATH`\n2. It scans the project root for mise config files (`mise.toml`, `.mise.toml`, `.tool-versions`)\n3. If a config is found, it runs `mise trust` so mise won't prompt for trust, and remembers it\n4. Every subsequent `bash` tool call is prefixed with a stderr-tolerant activation:\n   ```bash\n   eval \"$(mise activate bash 2>/dev/null)\" 2>/dev/null || true && <command>\n   ```\n   so the LLM's commands run with mise-managed tools on `PATH`. If activation hiccups (e.g. an untrusted config somewhere), the failure is swallowed and the real command still runs\n5. Before each `bash` tool call, any `cd <target>` in the command is parsed and those configs are trusted first (cached, so already-trusted dirs aren't re-checked)\n6. After a config is mutated (`write`/`edit` to a config file, or `mise use`/redirection in a command), the trust cache is invalidated so the next command re-trusts\n7. A notification is shown when mise is activated (or if mise is missing)\n\nIf no mise config file is found in the project root, the extension does nothing — zero overhead.\n\n> **Note:** Auto-installing `mise` is intentionally not done — this extension runs only where mise is guaranteed present. A missing binary is reported and activation is skipped.\n\n## Requirements\n\n- `mise` must be installed and available in `PATH`\n- A mise config file (`mise.toml`, `.mise.toml`, or `.tool-versions`) in the project root\n\n## The `mise` Skill\n\nThis package also contributes a `mise` skill that teaches the LLM how to:\n\n- Use `mise exec` for one-off commands\n- Run mise tasks with `mise run`\n- Install tools with `mise install`\n- Handle trust, activation, and common pitfalls\n\n> **Note:** When the pi-mise extension is active, mise activation is already prepended to every bash command. The skill instructs the LLM **not** to manually add `eval \"$(mise activate bash)\"` — it's handled automatically.\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Build (compile src/ -> dist/ with tsc)\npnpm build\n\n# Test (pure parsers via node:test)\npnpm test\n\n# Lint (CI gate)\npnpm lint\n# Auto-fix lint findings\npnpm lint:fix\n\n# Format in place\npnpm format\n# Check formatting only (CI gate)\npnpm format:check\n```\n\nTooling: TypeScript 7 (`tsc`) for compile, **oxfmt** for formatting, **oxlint** for linting. Source lives in `src/` and compiles to `dist/` (gitignored).\n\n## License\n\nMIT © Julio Capote\n","readmeFilename":"README.md"}