{"_id":"@99percentpeople/pi-todo","_rev":"16-005b86abdb7d585aee583175ca049b27","name":"@99percentpeople/pi-todo","dist-tags":{"latest":"1.2.8"},"versions":{"1.0.0":{"name":"@99percentpeople/pi-todo","version":"1.0.0","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"author":{"name":"99percentpeople"},"license":"MIT","_id":"@99percentpeople/pi-todo@1.0.0","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"homepage":"https://github.com/99percentpeople/pi-extensions#todo","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"fcdbe1126a948ca675d64da893bac5cc841471eb","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.0.0.tgz","fileCount":5,"integrity":"sha512-B+ZqDWxQxph+e6SwKCKJAoNC+sZk16Z0f+9ErL8YvR8KNeIMPI1Y6+nivQogH2jsAEzJkP6Np0x7mBiN8+z5yg==","signatures":[{"sig":"MEUCIA1qbad91/mOkrkN+v6FdORaxQcu+jTyKKCmoJg7N/L+AiEAuvOSKUpPGDC0V6VDKd0EZnluYiG+ICzczEtwq7UaIHA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29191},"type":"module","gitHead":"e69211d7990c62c5ed789acac98a121ede2b249f","scripts":{"prepublishOnly":"bun run --cwd ../.. check"},"_npmUser":{"name":"99percentpeople","email":"myzzzyearz@outlook.com"},"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.16.0","description":"A minimal atomic todo tool with dependencies, branch-aware persistence, and a read-only above-editor list for Pi","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-todo_1.0.0_1784307371467_0.3481909069033726","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@99percentpeople/pi-todo","version":"1.0.1","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"author":{"name":"99percentpeople"},"license":"MIT","_id":"@99percentpeople/pi-todo@1.0.1","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"homepage":"https://github.com/99percentpeople/pi-extensions#todo","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"f6ea49d5f9190bf1edc131812bde4e9636f9fa5b","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.0.1.tgz","fileCount":5,"integrity":"sha512-LvA4jGCNXBwBiXAQWVEdYoxPfHmBHvzkaaRJ9/vODVQGnGeat6bWKfR4BtjgnUzrMP6WbJa+Y1D7TPCGFNY5Kw==","signatures":[{"sig":"MEQCIAhTkGjP7fG+x5X9kz0kNVN9rV42OtWgVBd4YNGVFeoOAiAM8vrUmJfWNZaVru5LH8v1GhqQ2Lc3b3EdeKNcqdSoLA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@99percentpeople%2fpi-todo@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":32040},"type":"module","gitHead":"9bc14e25b853a2b0b79b93c478533234a44c2ecc","scripts":{"prepublishOnly":"bun run --cwd ../.. check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eb43b8e-12ef-47bf-b8b1-1e2865ed8bea"}},"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.16.0","description":"A minimal atomic todo tool with dependencies, branch-aware persistence, and a read-only above-editor list for Pi","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-todo_1.0.1_1784390177909_0.34690289218495196","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@99percentpeople/pi-todo","version":"1.0.2","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"author":{"name":"99percentpeople"},"license":"MIT","_id":"@99percentpeople/pi-todo@1.0.2","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"homepage":"https://github.com/99percentpeople/pi-extensions#todo","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"d35b6d6844074fde3b06ccebad9905089417ac17","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.0.2.tgz","fileCount":5,"integrity":"sha512-0xMYNpBqjPZvVoviAoyJCp8HnTLgene7tAHtUUWhFVd3KZmIy9XNXaL3rdXwGGNEpHEt5ZMlWNc99nKIwHgQ7Q==","signatures":[{"sig":"MEUCIQDuKukWOaUBKbkFrkj/IoFj7uOAd/VroQJDlC/EFyiwPgIgesdexiGCbXMc8VfA3m4mEQRrDO6I6S8TWR2vKbiFO0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@99percentpeople%2fpi-todo@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":32524},"type":"module","gitHead":"18f6f534c1ddc4bc5ba8f3bafd776038051f2224","scripts":{"prepublishOnly":"bun run --cwd ../.. check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eb43b8e-12ef-47bf-b8b1-1e2865ed8bea"}},"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.16.0","description":"A minimal atomic todo tool with dependencies, branch-aware persistence, and a read-only above-editor list for Pi","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-todo_1.0.2_1784393025050_0.01130933741599116","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@99percentpeople/pi-todo","version":"1.1.0","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"author":{"name":"99percentpeople"},"license":"MIT","_id":"@99percentpeople/pi-todo@1.1.0","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"homepage":"https://github.com/99percentpeople/pi-extensions#todo","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"e55fda840f17b02ef450a26917dac6b867cb5fd5","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.1.0.tgz","fileCount":5,"integrity":"sha512-0LD7kAHHWcdai4ezncJh2ME5o93PHP3JtkDfwXao6H2MYHyN0jWcpuMjv40+TkXeuEz9w3xbcqnw+AFuCBjKGw==","signatures":[{"sig":"MEUCIC+52r5/hSN+4JIxUTfid+yD39Q9U7yN9dKaRLZnDrKiAiEApc70gmJfYnGoBqeF/KmlV0/YbiSBaRHcCAW4r1mXkuY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@99percentpeople%2fpi-todo@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38477},"type":"module","gitHead":"3dfe923361d714486bde6899aa2580507ba5d3c7","scripts":{"prepublishOnly":"bun run --cwd ../.. check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eb43b8e-12ef-47bf-b8b1-1e2865ed8bea"}},"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.16.0","description":"A minimal atomic todo tool with omission-based deletion, compaction-safe state, dependencies, and a read-only Pi widget","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-todo_1.1.0_1784532531901_0.9280890114769145","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@99percentpeople/pi-todo","version":"1.1.1","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"author":{"name":"99percentpeople"},"license":"MIT","_id":"@99percentpeople/pi-todo@1.1.1","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"homepage":"https://github.com/99percentpeople/pi-extensions#todo","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"9ef8c2611159329a4754452a12e447547f16a861","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.1.1.tgz","fileCount":5,"integrity":"sha512-Hr92oi1O2Yy2k4k3KqwOrVwUhfIAebY9bt2BsUqFYW7vqeFk8//7m3nOE1Adx2iv2iplmCsMW3u3Crz2QiviQg==","signatures":[{"sig":"MEUCIQDdWieRBfst1UTFv4uyeeE3mTOGaEgHOYgzkMEeIGQLGAIgbm4QzRqhklSrkbfpJIv8fjnbXBsOF1cfFsZSj3WpkyQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@99percentpeople%2fpi-todo@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":37912},"type":"module","gitHead":"ff58e343ab17f930ec287aaf8cee8a034739bb2e","scripts":{"prepublishOnly":"bun run --cwd ../.. check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eb43b8e-12ef-47bf-b8b1-1e2865ed8bea"}},"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.16.0","description":"A minimal atomic todo tool with omission-based deletion, compaction-safe state, dependencies, and a read-only Pi widget","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-todo_1.1.1_1784686380450_0.2831704624567961","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@99percentpeople/pi-todo","version":"1.1.2","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"author":{"name":"99percentpeople"},"license":"MIT","_id":"@99percentpeople/pi-todo@1.1.2","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"homepage":"https://github.com/99percentpeople/pi-extensions#todo","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"19d2586ffac15469f3a8374911952215859faf50","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.1.2.tgz","fileCount":5,"integrity":"sha512-LUZn2xEEo7vMV/lHAHDpHll6Cxwfoc3ZVKtu3rQ/wGYaSeifTKrSLnTwjE4jHWCLVG0/XnACixo1/omLWATFGQ==","signatures":[{"sig":"MEUCIQDNiurzCFzO7X5aU+4tYr9SI1FZpsM79Bs35VY7si1hdwIgV7oKaglXqOgbzDRJw+Q+7x2/ugd+qx9rza2z4fl24jw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@99percentpeople%2fpi-todo@1.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38020},"type":"module","gitHead":"4cd02441aa7e07087b43e9e24f41b3b5e5201813","scripts":{"prepublishOnly":"bun run --cwd ../.. check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eb43b8e-12ef-47bf-b8b1-1e2865ed8bea"}},"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.16.0","description":"A minimal atomic todo tool with omission-based deletion, compaction-safe state, dependencies, and a read-only Pi widget","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-todo_1.1.2_1784689260635_0.9139122697769471","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@99percentpeople/pi-todo","version":"1.1.3","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"author":{"name":"99percentpeople"},"license":"MIT","_id":"@99percentpeople/pi-todo@1.1.3","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"homepage":"https://github.com/99percentpeople/pi-extensions#todo","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"b1293d638e9611da9295455ebe0f130fed19ba93","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.1.3.tgz","fileCount":5,"integrity":"sha512-y37HUvInGgCMqYlBrrGf+xh+XRLTdLiOHMGUyXvPrkvgv+IRCV5F0mayQUBuNYCL7BJ4LeZdM2UXPR1Apm6pxA==","signatures":[{"sig":"MEYCIQChg0VzosLnSU81u5aiCzWJEhy2amPP6mUXduSYlYTh8QIhAKqPmYnwJmn7In4lZneyGDe3A/oJDW+yvHdyXoXEQpoY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@99percentpeople%2fpi-todo@1.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38470},"type":"module","gitHead":"d4d91dd00e8769a04c525471107ecc3b0893e408","scripts":{"prepublishOnly":"bun run --cwd ../.. check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eb43b8e-12ef-47bf-b8b1-1e2865ed8bea"}},"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.16.0","description":"A minimal atomic todo tool with omission-based deletion, compaction-safe state, dependencies, and a read-only Pi widget","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@99percentpeople/pi-shared-settings":"0.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-todo_1.1.3_1785295013802_0.5879271375171933","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@99percentpeople/pi-todo","version":"1.2.0","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"author":{"name":"99percentpeople"},"license":"MIT","_id":"@99percentpeople/pi-todo@1.2.0","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"homepage":"https://github.com/99percentpeople/pi-extensions#todo","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"95a326364be2e2362a538a25461a63d294080278","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.2.0.tgz","fileCount":5,"integrity":"sha512-F33W/8rP94ROhlsMH9JGtZcHO3wrfcJKYMFrqJukU3uSUtX7Sq8YT9vptsbHC3k8HxplHvwZTHSWRy7jjg2KTQ==","signatures":[{"sig":"MEQCIAfruDr2JrT/3MS8/iPvxyyvKxJtUrmWMGIcHVwiu+nYAiBiifhdO3O5usSy9s00Jyk9a7dgfEf3Xe1BpyO40ejTtA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@99percentpeople%2fpi-todo@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":40837},"type":"module","gitHead":"e2ec41eb7e7d7a312c947380dd354e45b2e6c5fb","scripts":{"prepublishOnly":"bun run --cwd ../.. check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eb43b8e-12ef-47bf-b8b1-1e2865ed8bea"}},"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.16.0","description":"A minimal atomic todo tool with omission-based deletion, compaction-safe state, dependencies, and a read-only Pi widget","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@99percentpeople/pi-shared-settings":"0.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-todo_1.2.0_1785301136476_0.883287663169209","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@99percentpeople/pi-todo","version":"1.2.1","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"author":{"name":"99percentpeople"},"license":"MIT","_id":"@99percentpeople/pi-todo@1.2.1","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"homepage":"https://github.com/99percentpeople/pi-extensions#todo","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"cd10b82cd05a3f5e5b2c83180084fb05a44b2327","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.2.1.tgz","fileCount":5,"integrity":"sha512-foAABhirZ78l2gydS61empfqxFywTG+pdiiRLgON7c0JC+/IuWKkY90vks3h4PeY74MZofU+SVWibSX//HFbmQ==","signatures":[{"sig":"MEUCIAswtjHEX3rWNaVpwbOtPlSFk7qRbcx1AwzvUvwAiJZBAiEA0K6E8qs/U898zKZYmNfnkgksdZb5tAfaBNO6BNIpPPo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@99percentpeople%2fpi-todo@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":41742},"type":"module","gitHead":"09ccb14eb64b8e8053f7361f53005e2c6d79b7f3","scripts":{"prepublishOnly":"bun run --cwd ../.. check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eb43b8e-12ef-47bf-b8b1-1e2865ed8bea"}},"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.16.0","description":"A minimal atomic todo tool with omission-based deletion, compaction-safe state, dependencies, and a read-only Pi widget","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@99percentpeople/pi-shared-settings":"0.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-todo_1.2.1_1785381850820_0.9847923436022632","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@99percentpeople/pi-todo","version":"1.2.2","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"author":{"name":"99percentpeople"},"license":"MIT","_id":"@99percentpeople/pi-todo@1.2.2","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"homepage":"https://github.com/99percentpeople/pi-extensions#todo","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"pi":{"extensions":["./dist/index.js"]},"dist":{"shasum":"f8605e67da89b5aed44ed7b0b04e3ead7f171c9a","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.2.2.tgz","fileCount":5,"integrity":"sha512-DtBoRNqMH2F5MU258RPrnJMFyEfZlKOM1ctJDqT/7EuCnHHcEQ/oKZEedCDpCNtf5WTaUVNLkybqbdvqAJ4l6w==","signatures":[{"sig":"MEQCIH4VYNp2er6Rettf5/klGlBIi5JQbi40hZcrRuHKW+s3AiAoDtVP1JNHuVlCuSE0Xzue9sHj9BYAQoor5IG0ILZHoQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@99percentpeople%2fpi-todo@1.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":89042},"type":"module","gitHead":"b01a46896668a3092656b86841488f17ac886979","scripts":{"build":"bun run ../../scripts/build-package.ts","prepack":"bun run build","prepublishOnly":"bun run --cwd ../.. check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eb43b8e-12ef-47bf-b8b1-1e2865ed8bea"}},"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.16.0","description":"A minimal atomic todo tool with omission-based deletion, compaction-safe state, dependencies, and a read-only Pi widget","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@99percentpeople/pi-shared-settings":"0.1.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-todo_1.2.2_1785395923998_0.963045836731216","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@99percentpeople/pi-todo","version":"1.2.3","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"author":{"name":"99percentpeople"},"license":"MIT","_id":"@99percentpeople/pi-todo@1.2.3","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"homepage":"https://github.com/99percentpeople/pi-extensions#todo","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"pi":{"extensions":["./dist/index.ts"]},"dist":{"shasum":"e2b196f7886a4d3dec6803e2699abeca7722b990","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.2.3.tgz","fileCount":5,"integrity":"sha512-bTSQNUFjrB3ENxe/HsBeLJRQMdONJ6jh6K7telu4v2tQi6zxQ1AYUgtt1dmSq6IuRnMAJ2fbKCUgCGt9hCpBmA==","signatures":[{"sig":"MEUCIQDJOkwtkqXs5Q+B1v3Jt1QsBfYjrT+vb0s+3ce0SHS+EQIgX703zyNcSTEW95HLy7v8YtQT5T3ohElaqQ7STjwjU7s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@99percentpeople%2fpi-todo@1.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":89042},"type":"module","gitHead":"0d85185fc1af2c66df54fcd9347c6e53d10e83f6","scripts":{"build":"bun run ../../scripts/build-package.ts","prepack":"bun run build","prepublishOnly":"bun run --cwd ../.. check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eb43b8e-12ef-47bf-b8b1-1e2865ed8bea"}},"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.16.0","description":"A minimal atomic todo tool with omission-based deletion, compaction-safe state, dependencies, and a read-only Pi widget","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@99percentpeople/pi-shared-settings":"0.1.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-todo_1.2.3_1785411551661_0.38753729788331337","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@99percentpeople/pi-todo","version":"1.2.4","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"author":{"name":"99percentpeople"},"license":"MIT","_id":"@99percentpeople/pi-todo@1.2.4","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"homepage":"https://github.com/99percentpeople/pi-extensions#todo","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"pi":{"extensions":["./dist/index.ts"]},"dist":{"shasum":"f2aab6ab9e9bbaf2c94e7328764b5af03e7049df","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.2.4.tgz","fileCount":5,"integrity":"sha512-XMSq9MsIBXiIPtBlYG69kYDrV9EA/Rol7BwfjWLPiL1AgYCmABgwWHBvxHM3BguVVq6X5lhTqb+TEpbuJChpKA==","signatures":[{"sig":"MEQCICd4tjU/Cqa5fe4ih3mc/zxqyQmqNY+OnSw9MUpC0d5dAiB1d2C5VjEuGrwe2AuN6zDKZOW1UlaYQMe4+T+556iJ/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@99percentpeople%2fpi-todo@1.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":89270},"type":"module","gitHead":"568ca054f98b5bb1e9413cd6ff4eb8a36a063608","scripts":{"build":"bun run ../../scripts/build-package.ts","prepack":"bun run build","prepublishOnly":"bun run --cwd ../.. check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eb43b8e-12ef-47bf-b8b1-1e2865ed8bea"}},"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.16.0","description":"A minimal atomic todo tool with omission-based deletion, compaction-safe state, dependencies, and a read-only Pi widget","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@99percentpeople/pi-shared-settings":"0.1.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-todo_1.2.4_1785500966186_0.3353149951033352","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"@99percentpeople/pi-todo","version":"1.2.5","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"author":{"name":"99percentpeople"},"license":"MIT","_id":"@99percentpeople/pi-todo@1.2.5","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"homepage":"https://github.com/99percentpeople/pi-extensions#todo","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"pi":{"extensions":["./dist/index.ts"]},"dist":{"shasum":"84b0da7a52ed37e525a1eb8c9f553b27101c1c51","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.2.5.tgz","fileCount":5,"integrity":"sha512-b2ijmuwOqArBxcV18o/bIWbYvT5GD+8lCz/5ifVtbKFuZ1112aWCd+IjgvsS4r66eOebQ8dE+7teaf2e8ZAw5Q==","signatures":[{"sig":"MEQCIAwVsnesNx7YA+VZK//vBCwKr4Oghxi5LQR5hj5NTCrTAiAibYmZ+PeN3DgLe87qyp2hpKU4xTi6AXt93SdvPU7C9g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@99percentpeople%2fpi-todo@1.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":101955},"type":"module","gitHead":"b2bbc4fd54063723c4880503166272c0965e7e1f","scripts":{"build":"bun run ../../scripts/build-package.ts","prepack":"bun run build","prepublishOnly":"bun run --cwd ../.. check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eb43b8e-12ef-47bf-b8b1-1e2865ed8bea"}},"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.16.0","description":"A minimal atomic todo tool with omission-based deletion, compaction-safe state, dependencies, and a read-only Pi widget","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@99percentpeople/pi-shared-settings":"0.1.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-todo_1.2.5_1785767149176_0.7568843346608931","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"@99percentpeople/pi-todo","version":"1.2.6","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"author":{"name":"99percentpeople"},"license":"MIT","_id":"@99percentpeople/pi-todo@1.2.6","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"homepage":"https://github.com/99percentpeople/pi-extensions#todo","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"pi":{"extensions":["./index.min.js"]},"dist":{"shasum":"a8ef6655290d4cfa798668ca42ccdc1d271c1bdf","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.2.6.tgz","fileCount":5,"integrity":"sha512-8C//2Mtzxm7Uo4opd21S6oh9fY487GY3EcJ++wy+CxySWT6Sn1GjkxVZcThQoyG1v+8HBlzdW+m/U5t+ndLKTQ==","signatures":[{"sig":"MEYCIQC8+hIki5MKE3DLbY75woUFcDV63KZoRSkrDxMfc2MV0wIhAPjKD+XjxrpzqOOS8CcciOR6+CcKfnQAZ/1jsSWi5dJ/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@99percentpeople%2fpi-todo@1.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":92255},"type":"module","gitHead":"e9fb82fa5b14fd22f55feb487bbb814e1ab45206","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eb43b8e-12ef-47bf-b8b1-1e2865ed8bea"}},"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.16.0","description":"A minimal atomic todo tool with omission-based deletion, compaction-safe state, dependencies, and a read-only Pi widget","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@99percentpeople/pi-shared-settings":"0.1.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-todo_1.2.6_1786199305247_0.774036960587829","host":"s3://npm-registry-packages-npm-production"}},"1.2.7":{"name":"@99percentpeople/pi-todo","version":"1.2.7","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"author":{"name":"99percentpeople"},"license":"MIT","_id":"@99percentpeople/pi-todo@1.2.7","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"homepage":"https://github.com/99percentpeople/pi-extensions#todo","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"pi":{"extensions":["./index.min.js"]},"dist":{"shasum":"a5f3265835431ef78bce0ff17f0363611b608968","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.2.7.tgz","fileCount":5,"integrity":"sha512-vwDWot6aQBe+yLsKQctbRTUoScYY2tULn5CxdfTweX6gEtn6w+8PyTpc5k/itXlRonLK6XPhfQqvkf4MpqRqrQ==","signatures":[{"sig":"MEUCIQCWzk/L8Vixj9HPzwWnsWjPWi7AgIkCBLJCLVLE90c8pAIgZNIKmaw9lyTx2hyrvhk10NAqO/KcBCWF4jG+68V8BlI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@99percentpeople%2fpi-todo@1.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":118518},"type":"module","gitHead":"555160c2730fc23372cd23eaf6f3faaad1d6565f","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eb43b8e-12ef-47bf-b8b1-1e2865ed8bea"}},"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.17.0","description":"A minimal atomic todo tool with omission-based deletion, compaction-safe state, dependencies, and a read-only Pi widget","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-todo_1.2.7_1786728463933_0.5017744191692897","host":"s3://npm-registry-packages-npm-production"}},"1.2.8":{"pi":{"extensions":["./index.min.js"]},"_id":"@99percentpeople/pi-todo@1.2.8","bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"dist":{"shasum":"b50a82fb893004d88b5c718f36abab23dcd9f8f6","tarball":"https://registry.npmjs.org/@99percentpeople/pi-todo/-/pi-todo-1.2.8.tgz","fileCount":5,"integrity":"sha512-at2mI2eX+fmb9dA6dckCZAkgIfTrhiiV78S9VGp9bNICsdC2IS3v58xxwN69tNSJ8IWk2eTjS72PLV/EYGJW+w==","signatures":[{"sig":"MEUCIQC2VoOl8zhzHY6iVHczVeL4kVcAW1neFhuQna3vsZCggQIgUU9MoPurrdg3OYUj+L0xvNaKoNjMf3V/kcLRGelhIwc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDOCQ8boCJOuQh0RBx+h4b7LDz+fHAXQRYNkLnqPxRtRAiATxZF+GX+DsH8n24+B0QnqypROIGfOJ2tFAZ3UJ/9C2g=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@99percentpeople%2fpi-todo@1.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121225},"name":"@99percentpeople/pi-todo","type":"module","author":{"name":"99percentpeople"},"gitHead":"0595505efd4c1c56c1bfde9eb3cf015dfe43bb73","license":"MIT","version":"1.2.8","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5eb43b8e-12ef-47bf-b8b1-1e2865ed8bea"}},"homepage":"https://github.com/99percentpeople/pi-extensions#todo","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"_npmVersion":"11.19.0","description":"A minimal atomic todo tool with omission-based deletion, compaction-safe state, dependencies, and a read-only Pi widget","directories":{},"maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-todo_1.2.8_1789974218266_0.04343198857685859"}}},"time":{"created":"2026-07-17T16:56:11.212Z","modified":"2026-09-21T07:03:38.665Z","1.0.0":"2026-07-17T16:56:11.657Z","1.0.1":"2026-07-18T15:56:18.039Z","1.0.2":"2026-07-18T16:43:45.207Z","1.1.0":"2026-07-20T07:28:52.042Z","1.1.1":"2026-07-22T02:13:00.596Z","1.1.2":"2026-07-22T03:01:00.822Z","1.1.3":"2026-07-29T03:16:53.959Z","1.2.0":"2026-07-29T04:58:56.648Z","1.2.1":"2026-07-30T03:24:10.965Z","1.2.2":"2026-07-30T07:18:44.144Z","1.2.3":"2026-07-30T11:39:11.795Z","1.2.4":"2026-07-31T12:29:26.355Z","1.2.5":"2026-08-03T14:25:49.319Z","1.2.6":"2026-08-08T14:28:25.386Z","1.2.7":"2026-08-14T17:27:44.088Z","1.2.8":"2026-09-21T07:03:38.345Z"},"bugs":{"url":"https://github.com/99percentpeople/pi-extensions/issues"},"author":{"name":"99percentpeople"},"license":"MIT","homepage":"https://github.com/99percentpeople/pi-extensions#todo","keywords":["pi-package","pi","coding-agent","todo","task-planning"],"repository":{"url":"git+https://github.com/99percentpeople/pi-extensions.git","type":"git","directory":"extensions/todo"},"description":"A minimal atomic todo tool with omission-based deletion, compaction-safe state, dependencies, and a read-only Pi widget","maintainers":[{"name":"99percentpeople","email":"myzzzyearz@outlook.com"}],"readme":"# @99percentpeople/pi-todo\n\nA minimal, atomic todo tool for the [Pi coding agent](https://pi.dev/).\nThe model writes the complete task plan in one call instead of issuing one\n`create` call per task.\n\nYou see your plan as a live list above the input box: progress, active task,\nand dependencies update as the model works, and finished tasks roll off\nautomatically. No commands to learn — just let the model maintain the plan.\n\nThe extension intentionally has no todo-specific slash commands, interactive\nmanager, or user-editable todo interface. Todo state belongs to the model. A read-only list\nis rendered above Pi's input box.\n\n## Demo\n\nThe model creates the plan, works through it, and the widget tracks progress\nfrom `0/3` to `3/3 completed`:\n\n![todo demo](https://raw.githubusercontent.com/99percentpeople/pi-extensions/master/promo/demo/todo.gif)\n\n## Features\n\n- One-call creation of a complete plan\n- One-call completion and handoff to the next task\n- Omission-based deletion without retained cancelled or archived tasks\n- Stable task keys and key-based dependencies\n- Atomic validation with optional optimistic revisions\n- Branch- and compaction-aware state that survives `/reload` and `/tree`\n- Configurable compact reminders that keep the plan salient to the model\n- Read-only collapsible list above the input box\n\n## Install\n\nThis extension registers the `todo` tool. Remove another extension that owns the\nsame tool name before installing it:\n\n```bash\npi remove npm:@juicesharp/rpiv-todo\npi install npm:@99percentpeople/pi-todo\n```\n\nDuring local development:\n\n```bash\npi -e ./extensions/todo/index.ts\n```\n\n## Tool schema\n\nThe `todo` tool accepts the complete authoritative list of tasks to retain.\nExisting tasks may omit unchanged fields; a new key requires `subject` and\n`status`. Any current key omitted from `tasks` is permanently deleted:\n\n```ts\ntodo({\n  baseRevision?: number,\n  tasks: Array<{\n    key: string,\n    subject?: string,\n    description?: string,\n    status?: \"pending\" | \"in_progress\" | \"completed\",\n    dependsOn?: string[],\n  }>,\n})\n```\n\nExample:\n\n```json\n{\n  \"baseRevision\": 0,\n  \"tasks\": [\n    {\n      \"key\": \"inspect\",\n      \"subject\": \"Inspect the existing implementation\",\n      \"status\": \"in_progress\"\n    },\n    {\n      \"key\": \"implement\",\n      \"subject\": \"Implement the optimized protocol\",\n      \"status\": \"pending\",\n      \"dependsOn\": [\"inspect\"]\n    },\n    {\n      \"key\": \"verify\",\n      \"subject\": \"Verify the implementation\",\n      \"status\": \"pending\",\n      \"dependsOn\": [\"implement\"]\n    }\n  ]\n}\n```\n\nTo hand work off, include every current key but only send changed fields:\n\n```json\n{\n  \"baseRevision\": 1,\n  \"tasks\": [\n    { \"key\": \"inspect\", \"status\": \"completed\" },\n    { \"key\": \"implement\", \"status\": \"in_progress\" },\n    { \"key\": \"verify\" }\n  ]\n}\n```\n\nSubjects and dependencies are inherited from the previous snapshot. Both status\nchanges commit atomically.\n\nTo cancel or otherwise delete work, omit its key from the next complete plan:\n\n```json\n{\n  \"baseRevision\": 2,\n  \"tasks\": [\n    { \"key\": \"inspect\" },\n    { \"key\": \"implement\" }\n  ]\n}\n```\n\nDeletion is permanent state removal. The extension stores no `cancelled` status\nor archived task record. A completed task may retain a dependency only as\nhistory: when its completed prerequisite is omitted, that soft reference is\nautomatically removed. A pending or in-progress task cannot retain a dependency\non an omitted key.\n\n## Semantics\n\n- `key` is the task identity while that task remains in the plan.\n- Existing keys inherit omitted fields from their previous state.\n- New keys require `subject` and `status`.\n- `description: \"\"` and `dependsOn: []` explicitly clear those fields.\n- Every key present in `tasks` remains in the plan; omitted current keys are\n  permanently deleted.\n- Completed tasks remain visible for the current turn, then are automatically\n  removed on the next turn. Completed tasks that still block pending or\n  in-progress work are preserved.\n- `tasks: []` clears the plan.\n- `baseRevision`, when provided, rejects stale writes.\n- Every dependency must refer to another key in the resulting snapshot, except\n  completed-to-completed references are automatically pruned when the target is\n  deleted.\n- Dependency cycles are rejected.\n- An `in_progress` or `completed` task requires all dependencies to be completed.\n- Validation is all-or-nothing; failed writes do not mutate state.\n- Multiple independent tasks may be `in_progress` concurrently.\n\nEach successful result includes the current revision and complete retained plan.\nWhen next-turn cleanup changes the plan, the extension emits one hidden custom\nmessage containing the new revision and snapshot so the model never works from\nstale tool history.\n\nState schema v2 removes internal numeric IDs, archived records, and the\n`cancelled` status. Valid v1 session state is migrated on replay; archived and\ncancelled legacy tasks are discarded, and one hidden v2 checkpoint updates the\nmodel on the next prompt.\n\n## Model reminders\n\nWhile unfinished work remains, the extension periodically appends a compact,\nhidden reminder immediately before an LLM call. The reminder contains only the\ncurrent revision and complete key/status list—not task subjects, descriptions,\nor dependency payloads—and asks the model to reconcile changed progress before\nits final response. It is context-only and is not written to the session, so\nreminders do not accumulate in conversation history.\n\nThe default interval is every three LLM calls. The counter resets after a\nsuccessful `todo` write, session or branch restoration, an injected exact\ncheckpoint, or a reminder-setting change. No reminder is sent for an empty or\nfully completed plan. Use `/99settings` to select Off, every call, or an interval\nof 2, 3, 5, 8, 10, or 20 calls.\n\n## Rendering\n\nThe task list is rendered in a read-only widget above Pi's input box. In native\nPi TUI mode, it follows Pi's standard tool-output expansion state (`Ctrl+O` by\ndefault):\n\n- collapsed: overall progress and a configurable number of tasks (three by\n  default);\n- expanded: the complete todo list with status glyphs, task names, and resolved\n  prerequisites.\n\nIn RPC mode, the extension sends a plain-text widget compatible with clients\nsuch as FrostPi. It shows the same collapsed task window and reports how many\nadditional tasks are hidden because RPC widgets do not expose Pi's\nexpand/collapse control.\n\nWhile the model is streaming a `todo` call, the tool row updates in place and\nshows each task name and its compact dependency references as they are written\ninstead of only showing a task count.\nSparse updates reuse the current task name and status until their changed fields\narrive. Fields that are not yet known are omitted: a new task appears after its\nsubject is written, and its status glyph appears only after its status is\navailable. This live preview uses the configured collapsed-item limit and shows\nall tasks when expanded. After a successful write, the result renderer stays\nempty because the completed tool call already contains the final list;\nvalidation errors are still displayed below the attempted list.\n\nTasks always keep their plan order. When collapsed, the widget selects a window\naround the first `in_progress` task where possible. If no task is active, it\nshows the first configured number of tasks. Once every task is completed, it\nshows the last configured number instead so the most recently finished work\nremains visible. The expand/collapse hint is shown only when the complete list\nexceeds that limit.\n\n`in_progress` task labels are rendered in bold in both the live tool call and\nwidget. The model-facing result still includes keys, dependencies, and\ndescriptions. In the user-facing display, dependency numbering can be shown or\nhidden. When shown, tasks participating in the dependency graph receive\nplan-order display numbers after their names, such as `○ Inspect #1` and\n`○ Implement #2 ← #1`. Independent tasks stay unnumbered, multiple prerequisites\nuse `← #1, #2`, and stable task keys remain hidden. These numbers are\ndisplay-only and may be reassigned when the plan changes. The shortcut respects\nthe user's `app.tools.expand` keybinding.\n\n## Persistence\n\nNormal writes are stored in tool-result `details`. Automatic next-turn removals\nare stored in hidden custom-message `details`; the same message also tells the\nmodel which snapshot and revision are current. On `session_start`, `/reload`,\nand `/tree` navigation, the extension restores the latest valid state entry from\nthe active branch.\n\nAfter compaction, the extension stores an exact schema-v2 checkpoint outside the\nmodel context. It injects that snapshot as one hidden model-facing message on\nthe next prompt, or immediately as steering context when overflow recovery or an\nalready queued continuation proceeds without a new prompt. This preserves exact\nkeys, dependencies, and revision numbers without triggering an extra model turn.\n\n## Shared settings\n\nUse the shared `/99settings` menu to choose how many Todo items are shown while\nthe widget and streaming tool call are collapsed, whether display-only\ndependency numbers are shown, and how often compact model reminders are\ninjected. Collapsed-item presets are 1, 2, 3, 5, 8, and 10; the default remains\n3. Dependency numbers default to shown. Model reminders default to every three\nLLM calls and can be disabled. Values are stored under the `todo` namespace in\n`~/.pi/agent/99extensions.json`.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}