{"_id":"@danielsuhett/pi-openspec-tracker","_rev":"2-86cb9cdb00e8a5edabbbed8dbd8ecab9","name":"@danielsuhett/pi-openspec-tracker","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@danielsuhett/pi-openspec-tracker","version":"0.1.0","keywords":["pi-package","openspec","pi-extension"],"license":"MIT","_id":"@danielsuhett/pi-openspec-tracker@0.1.0","maintainers":[{"name":"danielsuhett","email":"danielsuhett99@gmail.com"}],"homepage":"https://github.com/DanielSuhett/pi-openspec-tracker#readme","bugs":{"url":"https://github.com/DanielSuhett/pi-openspec-tracker/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"6c4f6ffa956010a54379b39ed2d6989e9cf8c564","tarball":"https://registry.npmjs.org/@danielsuhett/pi-openspec-tracker/-/pi-openspec-tracker-0.1.0.tgz","fileCount":5,"integrity":"sha512-eQa/aAAORQYO++KU1lh1hTZzLbAsiVLg+aB3VongrRvGJMMQ+0BH2F3WwPE9a+o9V4Bie1OEMaUdR+8uKJofTA==","signatures":[{"sig":"MEUCIBdIyV9YfzYZZc9mwgo5/FTiLCBJVisyvG79ZOsQhg9QAiEAjwL6lP3YRSrOrbZ7WCBEHPsfazALFgv5vfSdvuM08cE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27698},"type":"module","engines":{"node":">=22.6.0"},"gitHead":"5c7692b35f53c6b51733dfe319b2bb09cfc7ee6a","scripts":{"test":"node --experimental-strip-types --test test/*.test.ts","verify":"npm test && npm run typecheck && npm run pack:check","typecheck":"tsc --noEmit","pack:check":"npm pack --dry-run --access public"},"_npmUser":{"name":"danielsuhett","email":"danielsuhett99@gmail.com"},"repository":{"url":"git+https://github.com/DanielSuhett/pi-openspec-tracker.git","type":"git"},"_npmVersion":"10.9.8","description":"Read-only OpenSpec task tracker extension for Pi","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.2.0","@earendil-works/pi-coding-agent":"0.84.2"},"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-openspec-tracker_0.1.0_1787101661135_0.10493302950951588","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@danielsuhett/pi-openspec-tracker","version":"0.2.0","description":"Read-only OpenSpec task tracker extension for Pi","type":"module","keywords":["pi-package","openspec","pi-extension"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DanielSuhett/pi-openspec-tracker.git"},"bugs":{"url":"https://github.com/DanielSuhett/pi-openspec-tracker/issues"},"homepage":"https://github.com/DanielSuhett/pi-openspec-tracker#readme","engines":{"node":">=22.6.0"},"scripts":{"test":"node --experimental-strip-types --test test/*.test.ts","typecheck":"tsc --noEmit","pack:check":"npm pack --dry-run --access public","verify":"npm test && npm run typecheck && npm run pack:check"},"peerDependencies":{"@earendil-works/pi-coding-agent":"*","@earendil-works/pi-tui":"*"},"devDependencies":{"@earendil-works/pi-coding-agent":"0.84.2","@types/node":"^26.2.0","typescript":"^7.0.2"},"pi":{"extensions":["./extensions"]},"publishConfig":{"access":"public"},"_id":"@danielsuhett/pi-openspec-tracker@0.2.0","gitHead":"e0eccffbd7e9f5a570e99711d8b0399d9a772328","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-qwjk+A0zOAlCOGPktGYZGb2mM3i08pbjUGAs6FlcHGyz+M9m3mA70lPosuDXkbPw+bV2ENSq3+uVZuBlQ5oBzA==","shasum":"832699e2821aeb381f608d734cfb7ffa2f5b99f5","tarball":"https://registry.npmjs.org/@danielsuhett/pi-openspec-tracker/-/pi-openspec-tracker-0.2.0.tgz","fileCount":5,"unpackedSize":27739,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD4cSn33i8Inz4boP3v9OrE6t4Ve6vtptAiqy4P6RmDKAIhAJUypM9aKYTjFIpuzqdJNC890eFBWRPx6SzKdAGfbMxg"}]},"_npmUser":{"name":"danielsuhett","email":"danielsuhett99@gmail.com"},"directories":{},"maintainers":[{"name":"danielsuhett","email":"danielsuhett99@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-openspec-tracker_0.2.0_1787104353586_0.21826096178080623"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-19T01:07:41.017Z","modified":"2026-08-19T01:52:33.890Z","0.1.0":"2026-08-19T01:07:41.340Z","0.2.0":"2026-08-19T01:52:33.751Z"},"bugs":{"url":"https://github.com/DanielSuhett/pi-openspec-tracker/issues"},"license":"MIT","homepage":"https://github.com/DanielSuhett/pi-openspec-tracker#readme","keywords":["pi-package","openspec","pi-extension"],"repository":{"type":"git","url":"git+https://github.com/DanielSuhett/pi-openspec-tracker.git"},"description":"Read-only OpenSpec task tracker extension for Pi","maintainers":[{"name":"danielsuhett","email":"danielsuhett99@gmail.com"}],"readme":"# OpenSpec Tracker\n\n> A small footer that keeps your next OpenSpec task visible in [Pi](https://pi.dev).\n\n[![CI](https://github.com/DanielSuhett/pi-openspec-tracker/actions/workflows/ci.yml/badge.svg)](https://github.com/DanielSuhett/pi-openspec-tracker/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\n**OpenSpec Tracker** is a read-only Pi extension. It reads\n`openspec/changes/*/tasks.md`, identifies the most relevant change, and shows\nits progress and next open task in the footer — without editing the\nspecification or creating another task system.\n\n## Why use it?\n\n- **Immediate context:** see task progress and the active task title in Pi's footer.\n- **Smart selection:** uses the current branch, the last successful `openspec apply`, or the most recently modified `tasks.md`.\n- **Automatic updates:** changes to task files appear while Pi is idle.\n- **Persistent state:** the selected change and task survive session reloads.\n- **Safe by design:** the extension only reads tasks and watches files; it never modifies OpenSpec.\n\n## Installation\n\nAfter the package is published to npm:\n\n```bash\npi install npm:@danielsuhett/pi-openspec-tracker\n```\n\nOr install it directly from this public repository:\n\n```bash\npi install git:github.com/DanielSuhett/pi-openspec-tracker\n```\n\nTo test a local checkout during development:\n\n```bash\npi -e ./extensions/openspec-tracker.ts\n```\n\nRestart Pi or run `/reload` after installation.\n\n## Usage\n\nIn a project containing `openspec/changes`:\n\n```text\n/openspec-track\n```\n\nThe command opens a selector to enable or disable the tracker. It also accepts:\n\n```text\n/openspec-track on\n/openspec-track off\n/openspec-track another-change#1.1\n/openspec-track clear\n```\n\nThe expected change layout is:\n\n```text\nopenspec/\n└── changes/\n    └── my-change/\n        └── tasks.md\n```\n\nTasks must use the standard OpenSpec format:\n\n```markdown\n- [ ] 1.1 Implement the change\n- [x] 1.2 Validate the result\n```\n\nChanges in `openspec/changes/archive` and `openspec/changes/specs` are ignored.\n\n## How is the change selected?\n\nThe extension resolves the scope in this order:\n\n1. Manually selected or session-persisted change;\n2. Current branch (`my-change` or `spec/my-change`);\n3. Change from the last successful `openspec apply`;\n4. Most recently modified `tasks.md`.\n\nManual selection always takes priority and can switch the current change\nwithout modifying any project files.\n\n## Development\n\nRequirements: Node.js `>=22.6.0`, npm, and a compatible Pi version.\n\n```bash\nnpm ci\nnpm run verify\n```\n\nIndividual checks:\n\n```bash\nnpm test\nnpm run typecheck\nnpm run pack:check\n```\n\nThe extension does not need to be compiled: Pi loads TypeScript directly, and\nthe package manifest in [`package.json`](package.json) registers `extensions/`\nas a Pi resource.\n\n## Project structure\n\n```text\nextensions/openspec-tracker.ts  Pi lifecycle and UI integration\nsrc/core.ts                      task parser, selection, and progress summary\ntest/                            unit tests and extension smoke tests\n.github/workflows/ci.yml         tests, typecheck, packaging, and installation\n```\n\n## Contributing\n\nIssues and pull requests are welcome. Please read\n[`CONTRIBUTING.md`](CONTRIBUTING.md) and [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)\nbefore contributing.\n\n## License\n\n[MIT](LICENSE) © 2026 Suhett.\n","readmeFilename":"README.md"}