{"_id":"@claaslange/pi-progress-bar","_rev":"5-582e5181e517677da40b87f21bdd28db","name":"@claaslange/pi-progress-bar","dist-tags":{"latest":"1.0.0"},"versions":{"0.1.0":{"name":"@claaslange/pi-progress-bar","version":"0.1.0","keywords":["pi-package","terminal","progress","osc-9-4","pi-extension"],"author":{"name":"Claas Lange"},"license":"MIT","_id":"@claaslange/pi-progress-bar@0.1.0","maintainers":[{"name":"claas_lange","email":"claas@claaslange.de"}],"homepage":"https://github.com/claaslange/pi-progress-bar#readme","bugs":{"url":"https://github.com/claaslange/pi-progress-bar/issues"},"pi":{"extensions":["./extensions/osc-9-4-progress.ts"]},"dist":{"shasum":"ac48ed73a62c11258ce3f35937970ed401e5a135","tarball":"https://registry.npmjs.org/@claaslange/pi-progress-bar/-/pi-progress-bar-0.1.0.tgz","fileCount":4,"integrity":"sha512-JfrsXmreQuneYXMB6S2u/35p6ZSIXjQhcmeFG0ozB+LwC9MFA4XDrGnTaVjsksddK+og3OZjpfAPTZp/9jRmbw==","signatures":[{"sig":"MEYCIQDris8VygDyGYGvwQ6rQK0bLGr6vusSYGdIE7jZa1nfQAIhAJXZ8suPCxEDXy7umuU7j/68MO1e1cDJS6p+pU/9HW0W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6765},"_npmUser":{"name":"claas_lange","email":"claas@claaslange.de"},"repository":{"url":"git+https://github.com/claaslange/pi-progress-bar.git","type":"git"},"_npmVersion":"11.12.0","description":"Native terminal progress indicator support for pi via OSC 9;4","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@mariozechner/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-progress-bar_0.1.0_1775054938120_0.8163447168202844","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@claaslange/pi-progress-bar","version":"0.1.1","keywords":["pi-package","terminal","progress","osc-9-4","pi-extension","ghostty","wezterm","iterm2"],"author":{"name":"Claas Lange"},"license":"MIT","_id":"@claaslange/pi-progress-bar@0.1.1","maintainers":[{"name":"claas_lange","email":"claas@claaslange.de"}],"homepage":"https://github.com/claaslange/pi-progress-bar#readme","bugs":{"url":"https://github.com/claaslange/pi-progress-bar/issues"},"pi":{"extensions":["./extensions/index.ts"]},"dist":{"shasum":"fbf3c81cba2caab7a7045e0d9de5c34889fa5eeb","tarball":"https://registry.npmjs.org/@claaslange/pi-progress-bar/-/pi-progress-bar-0.1.1.tgz","fileCount":4,"integrity":"sha512-zq3kgdw4DRAk8pw6DGa1yQwtxFSiEMR8H2N2DAFYUR56Yh0GX7UGTW5NAuYCXJhfnrLQ/L+7nQLKTqDvbX7s/g==","signatures":[{"sig":"MEQCIHRWJq41XEnvhphswVYwkXvX31h2HOoA8VXMMr+qxME1AiAk+BMmICozuBiesK5Es1zq98QnAclJnVMuq6sL67VQsg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@claaslange%2fpi-progress-bar@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7286},"type":"module","gitHead":"d0073a9594f3af6e47436f425f5006a929a1658a","scripts":{"check":"tsc --noEmit --target ES2022 --module nodenext --moduleResolution nodenext --skipLibCheck ./extensions/index.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c5cb530c-5861-4a07-89b8-83d51c11f857"}},"repository":{"url":"git+https://github.com/claaslange/pi-progress-bar.git","type":"git"},"_npmVersion":"11.9.0","description":"Native terminal progress indicator support for pi via OSC 9;4","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~6.0.2","@types/node":"~25.5.0","@mariozechner/pi-coding-agent":"~0.64.0"},"peerDependencies":{"@mariozechner/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-progress-bar_0.1.1_1775055235543_0.5300543635885542","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@claaslange/pi-progress-bar","version":"0.1.2","keywords":["pi-package","terminal","progress","osc-9-4","pi-extension","ghostty","wezterm","iterm2"],"author":{"name":"Claas Lange"},"license":"MIT","_id":"@claaslange/pi-progress-bar@0.1.2","maintainers":[{"name":"claas_lange","email":"claas@claaslange.de"}],"homepage":"https://github.com/claaslange/pi-progress-bar#readme","bugs":{"url":"https://github.com/claaslange/pi-progress-bar/issues"},"pi":{"extensions":["./extensions/index.ts"]},"dist":{"shasum":"230fac43af3e5536fadf9ddc3f22ead174bf318e","tarball":"https://registry.npmjs.org/@claaslange/pi-progress-bar/-/pi-progress-bar-0.1.2.tgz","fileCount":4,"integrity":"sha512-HsyyEl5zbV9i4yy+5uMq7OXqaJUhXDIV97V6ob/lorqaL+42sz02k1EQiDQl6XPhiBPwXCqrmZ8Z2vLTRS8LNw==","signatures":[{"sig":"MEUCIQDzaSXUPZ3lowIh4acHaUD6iNDdiboN7dIkTfQKatYcFwIgZruR+i6f8mcLmGgw2tEu6bYlqx25BDAIZLHUCqdh75U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@claaslange%2fpi-progress-bar@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7216},"type":"module","gitHead":"a94809bbf5c612a9d17712895ed66e049c5a4523","scripts":{"check":"tsc --noEmit --target ES2022 --module nodenext --moduleResolution nodenext --skipLibCheck ./extensions/index.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c5cb530c-5861-4a07-89b8-83d51c11f857"}},"repository":{"url":"git+https://github.com/claaslange/pi-progress-bar.git","type":"git"},"_npmVersion":"11.11.0","description":"Native terminal progress indicator support for pi via OSC 9;4","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~6.0.2","@types/node":"~25.5.0","@mariozechner/pi-coding-agent":"~0.64.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-progress-bar_0.1.2_1775070500584_0.1291456765480845","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@claaslange/pi-progress-bar","version":"0.1.3","keywords":["pi-package","terminal","progress","osc-9-4","pi-extension","ghostty","wezterm","iterm2"],"author":{"name":"Claas Lange"},"license":"MIT","_id":"@claaslange/pi-progress-bar@0.1.3","maintainers":[{"name":"claas_lange","email":"claas@claaslange.de"}],"homepage":"https://github.com/claaslange/pi-progress-bar#readme","bugs":{"url":"https://github.com/claaslange/pi-progress-bar/issues"},"pi":{"extensions":["./extensions/index.ts"]},"dist":{"shasum":"2a750e75495154f9d693ea184575ceba7984583f","tarball":"https://registry.npmjs.org/@claaslange/pi-progress-bar/-/pi-progress-bar-0.1.3.tgz","fileCount":4,"integrity":"sha512-GJbMShCMMSlX+w20crDDBeWU10AkxOucp1XWnXBFhmexrQRMw2cGp9Q818sOF1JBmqyxxSaXAC+C5WV1zHZ3Dw==","signatures":[{"sig":"MEUCIQDiJdzlvxtN/0j0i2qdwOY+VUwDHDKzqsFYdO4VRUTnUAIgVnisDBQIvV3HgTlrV4BHoPUaULQWl8Pum67bRShygIY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@claaslange%2fpi-progress-bar@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9368},"type":"module","gitHead":"50501c48ae72e479e58822c5ced8210a6944fe4c","scripts":{"check":"tsc --noEmit --target ES2022 --module nodenext --moduleResolution nodenext --skipLibCheck ./extensions/index.ts","test:manual":"script -q /tmp/pi-progress-bar-manual.log bash -lc 'PI_PROGRESS_BAR_FORCE=1 pi --no-extensions --no-session --print --extension ./extensions/index.ts \"Use the bash tool exactly twice. First run: command_that_does_not_exist_12345. Second run: pwd. After the second tool call, reply with exactly DONE.\"' >/dev/null 2>&1 && perl -ne 'print if /\\e\\]9;4;/' /tmp/pi-progress-bar-manual.log"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c5cb530c-5861-4a07-89b8-83d51c11f857"}},"repository":{"url":"git+https://github.com/claaslange/pi-progress-bar.git","type":"git"},"_npmVersion":"11.11.0","description":"Native terminal progress indicator support for pi via OSC 9;4","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~6.0.2","@types/node":"~25.5.0","@mariozechner/pi-coding-agent":"~0.64.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-progress-bar_0.1.3_1775643012799_0.4290581983142756","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@claaslange/pi-progress-bar","version":"1.0.0","description":"Native terminal progress indicator support for pi via OSC 9;4","keywords":["pi-package","terminal","progress","osc-9-4","pi-extension","ghostty","wezterm","iterm2"],"license":"MIT","author":{"name":"Claas Lange"},"type":"module","repository":{"type":"git","url":"git+https://github.com/claaslange/pi-progress-bar.git"},"homepage":"https://github.com/claaslange/pi-progress-bar#readme","bugs":{"url":"https://github.com/claaslange/pi-progress-bar/issues"},"publishConfig":{"access":"public"},"scripts":{"check":"tsc --noEmit --target ES2022 --module nodenext --moduleResolution nodenext --skipLibCheck ./extensions/index.ts","test:manual":"script -q /tmp/pi-progress-bar-manual.log bash -lc 'PI_PROGRESS_BAR_FORCE=1 pi --no-extensions --no-session --print --extension ./extensions/index.ts \"Use the bash tool exactly twice. First run: command_that_does_not_exist_12345. Second run: pwd. After the second tool call, reply with exactly DONE.\"' >/dev/null 2>&1 && perl -ne 'print if /\\e\\]9;4;/' /tmp/pi-progress-bar-manual.log"},"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"devDependencies":{"@earendil-works/pi-coding-agent":"~0.78.1","@types/node":"~25.5.0","typescript":"~6.0.2"},"pi":{"extensions":["./extensions/index.ts"]},"gitHead":"19d3eaea629ba26c65f2531f61e8ac529213834b","_id":"@claaslange/pi-progress-bar@1.0.0","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-kvX2UykK0CEkvV2yA6rBAj3M+gVQC8MWpKqlDJzEqdMgazpwYDxJ4LtDxvql2ZXNwvRw9rry8A9X6O3kWhh9Hw==","shasum":"1dd69c65fcf7a6358e779aea03b7e48a0d42b405","tarball":"https://registry.npmjs.org/@claaslange/pi-progress-bar/-/pi-progress-bar-1.0.0.tgz","fileCount":4,"unpackedSize":9428,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@claaslange%2fpi-progress-bar@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFWXgC/inl9WBVxWjzUm+g5RlTXvYD45TZOeR4BSOTmcAiBBrP3hSCbAUOrRq6WmzbrHvFcwAHL443BhhDyHR4h5Jg=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c5cb530c-5861-4a07-89b8-83d51c11f857"}},"directories":{},"maintainers":[{"name":"claas_lange","email":"claas@claaslange.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-progress-bar_1.0.0_1780912943799_0.029647900744058875"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-01T14:48:58.029Z","modified":"2026-06-08T10:02:24.213Z","0.1.0":"2026-04-01T14:48:58.272Z","0.1.1":"2026-04-01T14:53:55.687Z","0.1.2":"2026-04-01T19:08:20.731Z","0.1.3":"2026-04-08T10:10:12.950Z","1.0.0":"2026-06-08T10:02:23.938Z"},"bugs":{"url":"https://github.com/claaslange/pi-progress-bar/issues"},"author":{"name":"Claas Lange"},"license":"MIT","homepage":"https://github.com/claaslange/pi-progress-bar#readme","keywords":["pi-package","terminal","progress","osc-9-4","pi-extension","ghostty","wezterm","iterm2"],"repository":{"type":"git","url":"git+https://github.com/claaslange/pi-progress-bar.git"},"description":"Native terminal progress indicator support for pi via OSC 9;4","maintainers":[{"name":"claas_lange","email":"claas@claaslange.de"}],"readme":"# @claaslange/pi-progress-bar\n\nA small [pi](https://pi.dev) package that emits terminal progress updates via `OSC 9;4`.\n\n## Why this package exists\n\nThis package was inspired by [HazAT/pi-ghostty](https://github.com/HazAT/pi-ghostty).\n\nThat extension combines terminal titles and progress indicators in one package. For this package, we wanted to split those concerns on purpose:\n\n- progress updates should be usable on their own\n- terminal title behavior should stay configurable elsewhere\n- users should be able to combine this with their own title workflow or another title-focused extension\n\nSo `@claaslange/pi-progress-bar` only handles `OSC 9;4` progress signaling and intentionally leaves terminal titles untouched.\n\n## Behavior\n\n- 🔵 Indeterminate pulse while the agent is thinking or running tools\n- 🔴 Red error state when a tool finishes with an error\n- 🔵 Error state resets back to indeterminate progress after the next non-error tool completion\n- 🟢 Green 100% completion flash when the agent finishes cleanly\n- Clears the progress indicator on shutdown\n- Does **not** modify the terminal title\n\n## Install\n\nFrom npm:\n\n```bash\npi install npm:@claaslange/pi-progress-bar\n```\n\nFrom GitHub:\n\n```bash\npi install git:github.com/claaslange/pi-progress-bar\n```\n\nFrom a local checkout:\n\n```bash\npi install /absolute/path/to/pi-progress-bar\n```\n\nOr run it directly without installing:\n\n```bash\npi -e /absolute/path/to/pi-progress-bar\n```\n\n## Compatibility and detection\n\nThis extension uses an optimistic runtime check before writing `OSC 9;4` sequences.\n\nFor local testing, you can force it on with:\n\n```bash\nPI_PROGRESS_BAR_FORCE=1 pi -e /absolute/path/to/pi-progress-bar\n```\n\nIf you want to disable it even in a supported terminal, use:\n\n```bash\nPI_PROGRESS_BAR_DISABLE=1 pi -e /absolute/path/to/pi-progress-bar\n```\n\nAt the moment that includes common terminal markers for Ghostty, WezTerm, iTerm, Windows Terminal, ConEmu, and tmux passthrough.\n\nA good reference for terminal compatibility and detection is the tracking work in [jdx/mise#7485](https://github.com/jdx/mise/pull/7485).\n\n## How it works\n\nThe extension listens to pi lifecycle events and writes `OSC 9;4` sequences directly to `/dev/tty`:\n\n| Pi event | Action |\n| --- | --- |\n| `agent_start` | start indeterminate progress |\n| `tool_execution_end` / `tool_result` with `isError: true` | show red error state |\n| `tool_execution_end` / `tool_result` with `isError: false` after an error | switch back to indeterminate progress |\n| `agent_end` | flash green 100% completion, then clear if no error is active; otherwise clear |\n| `session_shutdown` | clear progress |\n\nBecause it writes directly to the terminal, it stays out of pi's normal TUI rendering.\n\n## Development\n\nRun a local manual check that exercises busy → error → reset → success:\n\n```bash\nnpm run check\nnpm run test:manual\n```\n\n## Package contents\n\nThis package exposes a single extension entrypoint at `./extensions/index.ts` through the `pi` manifest in `package.json`.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}