{"_id":"@awtotty/pi-missions","_rev":"3-c71ae74597183d4ff28dc89098f12942","name":"@awtotty/pi-missions","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@awtotty/pi-missions","version":"0.1.0","keywords":["pi-package","pi","missions","orchestration"],"license":"MIT","_id":"@awtotty/pi-missions@0.1.0","maintainers":[{"name":"awtotty","email":"awtotty@gmail.com"}],"pi":{"skills":["./skills"],"extensions":["./dist/missions/index.js"]},"dist":{"shasum":"72ca132600e70fa082dff37c7df5c826fbeb5a05","tarball":"https://registry.npmjs.org/@awtotty/pi-missions/-/pi-missions-0.1.0.tgz","fileCount":62,"integrity":"sha512-ZwXMIhZZ8oR1SDRaG1hJ4PDZawywdG/PPMyBYbftpdEaxgmM/HA1oI5sPqIrD3D/DNvNU0LrtLS3ro5DIU+xKQ==","signatures":[{"sig":"MEYCIQD91x27AlUimBrWOe7DmXns1NEq1M+kN+CMkOm5iy+B7QIhAP3aUa+xsbvi1iIqmMI8G4F5ZQbGS6WB38BL/IZaf88Q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":396137},"type":"module","gitHead":"b87f10e6f010e95be18c8c9356eacc0c486eb65a","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","check":"npm run typecheck && npm test && npm run validate && npm run build","prepack":"npm run build","validate":"npm run validate:f1 && npm run validate:f3 && npm run validate:f3-nav && npm run validate:f4 && npm run validate:f4-ux && npm run validate:mission-control-readonly && npm run validate:f5 && npm run validate:f5-ux && npm run validate:f7 && npm run validate:f8 && npm run validate:f9 && npm run validate:runtime-recovery-loop && npm run validate:f10 && npm run validate:readme-commands","typecheck":"tsc --noEmit","validate:f1":"node ./scripts/validate-f1-mission-control-pane-model.mjs","validate:f3":"node ./scripts/validate-f3-runner-command-routing.mjs","validate:f4":"node ./scripts/validate-f4-mission-flow-coverage.mjs","validate:f5":"node ./scripts/validate-f5-official-orchestrator-session.mjs","validate:f7":"node ./scripts/validate-f7-mission-control-runner-wiring.mjs","validate:f8":"node ./scripts/validate-f8-feature-execution-vs-milestones.mjs","validate:f9":"node ./scripts/validate-f9-recovery-protocol.mjs","validate:f10":"node ./scripts/validate-f10-simulation-harness.mjs","validate:f4-ux":"node ./scripts/validate-f4-mission-control-activity-output.mjs","validate:f5-ux":"node ./scripts/validate-f5-mission-control-ux-regression.mjs","validate:f3-nav":"node ./scripts/validate-f3-mission-control-navigation.mjs","validate:readme-commands":"node ./scripts/validate-readme-commands.mjs","validate:runtime-recovery-loop":"node ./scripts/validate-runtime-orchestrator-recovery-loop.mjs","validate:mission-control-readonly":"node ./scripts/validate-f4-mission-control-readonly-regression.mjs"},"_npmUser":{"name":"awtotty","email":"awtotty@gmail.com"},"_npmVersion":"11.6.2","description":"Pi extension for long-running, milestone-based coding missions.","directories":{},"_nodeVersion":"25.0.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.9","typebox":"*","typescript":"^5.9.0","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"peerDependencies":{"typebox":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-missions_0.1.0_1778877766304_0.3441724059479514","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@awtotty/pi-missions","version":"0.1.1","keywords":["pi-package","pi","missions","orchestration"],"license":"MIT","_id":"@awtotty/pi-missions@0.1.1","maintainers":[{"name":"awtotty","email":"awtotty@gmail.com"}],"pi":{"skills":["./skills"],"extensions":["./dist/missions/index.js"]},"dist":{"shasum":"56a7d87c0b84cebed18b0fd38d36ab8a763f691f","tarball":"https://registry.npmjs.org/@awtotty/pi-missions/-/pi-missions-0.1.1.tgz","fileCount":62,"integrity":"sha512-EfsOjXHpEsM0P1WJa4L/oCOEbNZE3HpdPr8CLRoZXpjL4OComu9iDTvBijYeDLnpSRMBYbx0NBIwjqnP1cRa6w==","signatures":[{"sig":"MEQCIE/foM4HFM6nZafP9OnWsmt07KB60DZ0rFr3kite145rAiAg+yqAZiktcvDYCaBD15dtWwIQJrQmOkm6jCYPBb89Sw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":397097},"type":"module","gitHead":"03dbfc461c6064d1f9d6ffaefbde6efc1862fa5d","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","check":"npm run typecheck && npm test && npm run validate && npm run build","prepack":"npm run build","validate":"npm run validate:f1 && npm run validate:f3 && npm run validate:f3-nav && npm run validate:f4 && npm run validate:f4-ux && npm run validate:mission-control-readonly && npm run validate:f5 && npm run validate:f5-ux && npm run validate:f7 && npm run validate:f8 && npm run validate:f9 && npm run validate:runtime-recovery-loop && npm run validate:f10 && npm run validate:readme-commands","typecheck":"tsc --noEmit","validate:f1":"node ./scripts/validate-f1-mission-control-pane-model.mjs","validate:f3":"node ./scripts/validate-f3-runner-command-routing.mjs","validate:f4":"node ./scripts/validate-f4-mission-flow-coverage.mjs","validate:f5":"node ./scripts/validate-f5-official-orchestrator-session.mjs","validate:f7":"node ./scripts/validate-f7-mission-control-runner-wiring.mjs","validate:f8":"node ./scripts/validate-f8-feature-execution-vs-milestones.mjs","validate:f9":"node ./scripts/validate-f9-recovery-protocol.mjs","validate:f10":"node ./scripts/validate-f10-simulation-harness.mjs","validate:f4-ux":"node ./scripts/validate-f4-mission-control-activity-output.mjs","validate:f5-ux":"node ./scripts/validate-f5-mission-control-ux-regression.mjs","validate:f3-nav":"node ./scripts/validate-f3-mission-control-navigation.mjs","validate:readme-commands":"node ./scripts/validate-readme-commands.mjs","validate:runtime-recovery-loop":"node ./scripts/validate-runtime-orchestrator-recovery-loop.mjs","validate:mission-control-readonly":"node ./scripts/validate-f4-mission-control-readonly-regression.mjs"},"_npmUser":{"name":"awtotty","email":"awtotty@gmail.com"},"_npmVersion":"11.6.2","description":"Pi extension for long-running, milestone-based coding missions.","directories":{},"_nodeVersion":"25.0.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.9","typebox":"*","typescript":"^5.9.0","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"peerDependencies":{"typebox":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-missions_0.1.1_1779131425317_0.992839702216916","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@awtotty/pi-missions","version":"0.1.2","description":"Pi extension for long-running, milestone-based coding missions.","type":"module","keywords":["pi-package","pi","missions","orchestration"],"license":"MIT","peerDependencies":{"@earendil-works/pi-coding-agent":"*","@earendil-works/pi-tui":"*","typebox":"*"},"devDependencies":{"@earendil-works/pi-coding-agent":"*","@earendil-works/pi-tui":"*","typebox":"*","typescript":"^5.9.0","vitest":"^2.1.9"},"pi":{"extensions":["./dist/missions/index.js"],"skills":["./skills"]},"scripts":{"typecheck":"tsc --noEmit","build":"tsc -p tsconfig.build.json","test":"vitest run","validate":"npm run validate:f1 && npm run validate:f3 && npm run validate:f3-nav && npm run validate:f4 && npm run validate:f4-ux && npm run validate:mission-control-readonly && npm run validate:f5 && npm run validate:f5-ux && npm run validate:f7 && npm run validate:f8 && npm run validate:f9 && npm run validate:runtime-recovery-loop && npm run validate:f10 && npm run validate:readme-commands","check":"npm run typecheck && npm test && npm run validate && npm run build","prepack":"npm run build","validate:f1":"node ./scripts/validate-f1-mission-control-pane-model.mjs","validate:f3":"node ./scripts/validate-f3-runner-command-routing.mjs","validate:f3-nav":"node ./scripts/validate-f3-mission-control-navigation.mjs","validate:f4":"node ./scripts/validate-f4-mission-flow-coverage.mjs","validate:f4-ux":"node ./scripts/validate-f4-mission-control-activity-output.mjs","validate:mission-control-readonly":"node ./scripts/validate-f4-mission-control-readonly-regression.mjs","validate:f5":"node ./scripts/validate-f5-official-orchestrator-session.mjs","validate:f5-ux":"node ./scripts/validate-f5-mission-control-ux-regression.mjs","validate:f7":"node ./scripts/validate-f7-mission-control-runner-wiring.mjs","validate:f8":"node ./scripts/validate-f8-feature-execution-vs-milestones.mjs","validate:f9":"node ./scripts/validate-f9-recovery-protocol.mjs","validate:runtime-recovery-loop":"node ./scripts/validate-runtime-orchestrator-recovery-loop.mjs","validate:f10":"node ./scripts/validate-f10-simulation-harness.mjs","validate:readme-commands":"node ./scripts/validate-readme-commands.mjs"},"gitHead":"3db4ff2cbb402813cb71714369efed848442db9c","_id":"@awtotty/pi-missions@0.1.2","_nodeVersion":"25.0.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-AvsPHzdhtcHrEVwOn543dt7ObtBpLO+jXLlInwIpOvHP0D3Fr+HDqzOGeS1nhkvAVd8q/5AoYJ4Q2W35aY+/Fw==","shasum":"8d7f2619f12a8a937cc8f3a3789b8464b82e866f","tarball":"https://registry.npmjs.org/@awtotty/pi-missions/-/pi-missions-0.1.2.tgz","fileCount":62,"unpackedSize":397075,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCEQpeoRmhyOUKh0dHcJER3aC/ysm5Q/+tRDKAcPTDJIwIgRJfYKMFN2Z+fmwjzoJUNmN/Upf7xZM/tpPodxitEa94="}]},"_npmUser":{"name":"awtotty","email":"awtotty@gmail.com"},"directories":{},"maintainers":[{"name":"awtotty","email":"awtotty@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-missions_0.1.2_1779131642945_0.8710413599879498"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-15T20:42:46.234Z","modified":"2026-05-18T19:14:03.208Z","0.1.0":"2026-05-15T20:42:46.570Z","0.1.1":"2026-05-18T19:10:25.489Z","0.1.2":"2026-05-18T19:14:03.090Z"},"license":"MIT","keywords":["pi-package","pi","missions","orchestration"],"description":"Pi extension for long-running, milestone-based coding missions.","maintainers":[{"name":"awtotty","email":"awtotty@gmail.com"}],"readme":"# pi-missions\n\n**pi-missions** is a [pi](https://pi.dev) extension for long-running, milestone-based coding missions.\n\nIt is inspired by [Factory Missions for Droid](https://factory.ai/news/missions): plan carefully in chat, approve execution, let scoped workers make progress through git-backed handoffs, validate at milestone boundaries, and monitor status in Mission Control.\n\n> **Independence note:** pi-missions is not affiliated with Factory and is not a copy or port of Factory Missions. It was built independently, without access to Factory Missions source code, and uses only public product concepts as inspiration.\n>\n> **Stability note:** this project is active development software. Commands, APIs, artifact schemas, and behavior may change before a stable release.\n\n## What it does\n\n- Plans missions in chat with the `mission-plan` skill.\n- Saves milestone-canonical mission artifacts under `~/.pi/missions/<mission-id>/`.\n- Runs one worker feature at a time in fresh child contexts.\n- Requires worker handoffs and git commits.\n- Validates at milestone boundaries with scrutiny and optional user-testing validators.\n- Routes recoverable blocks to a dedicated runtime `mission-orchestrator` session.\n- Shows read-only mission status in `/mission-control` and the compact footer.\n\npi-missions intentionally favors sequential writes, inspectable artifacts, and recoverability over parallel implementation speed.\n\n## Install\n\nFrom npm, once published:\n\n```bash\npi install npm:@awtotty/pi-missions\n```\n\n## Quick start\n\nStart a mission planning conversation:\n\n```text\n/missions\n```\n\nThen chat normally in the current/main chat session:\n\n```text\nI want to add a settings UI for project X.\nSplit it into safe milestones.\nMake validation strict around persistence and keyboard navigation.\nSave the plan.\nStart it.\n```\n\nExecution starts only after explicit confirmation. During execution, keep using main chat as the human command, question, and override channel:\n\n```text\nStatus update.\nPause after current.\nWhy is it blocked?\nTurn that validator finding into repair work.\nResume when safe.\n```\n\nMission Control is optional read-only monitoring:\n\n```text\n/mission-control\n```\n\n## Commands\n\n```text\n/missions [goal]             Start chat-first mission planning\n/missions new [goal]         Alias for /missions [goal]\n/missions run [id]           Start or resume a persisted mission\n/missions resume [id]        Resume a paused mission\n/missions status [id]        Show mission status\n/missions list               List missions\n/missions clear              Hide completed missions from default visibility\n/missions models             Inspect role model defaults\n/missions models <role> <model>\n                             Set a role model default\n/mission-control [id]        Open read-only Mission Control\n/mission ...                 Alias for /missions\n```\n\n## Execution model\n\nThe deterministic runner has three roles:\n\n- **planner** (`mission-plan` skill): collaborates with the user before execution starts;\n- **worker**: implements one feature, commits changes, and writes a handoff;\n- **validator**: runs milestone-boundary scrutiny or user-testing validation.\n\nThe runtime `mission-orchestrator` is event-driven. It runs in the dedicated runtime orchestrator session after recoverable blocks such as validation failure, worker block, no-runnable-work, retry-limit exceeded, or ambiguous/stale state, and runs only for that event. It may repair mission metadata/control state through mission tools/APIs, resume, ask the user, rerun validation when safe, or leave the mission blocked. It must not edit repository implementation code by default.\n\nMission Control is read-only observability. Start, pause, resume, cancel, recovery, and plan changes stay in chat/tools/runtime orchestration. Main chat remains the human command/override channel.\n\n## Mission Control\n\nOpen Mission Control with:\n\n```text\n/mission-control [mission-id]\n```\n\nWithout an id, it shows a multi-mission overview grouped by **Blocked / Failed**, **Running**, **Paused**, **Planned**, and **Completed**. With an id, it opens that mission's detail view.\n\nUseful keys:\n\n```text\nq / esc             Close from overview; execution continues\n↑ / ↓ or j / k      Move selection or scroll detail output\nenter               Open selected mission detail\nb / esc             Return from detail to overview\nr                   Refresh\n?                   Toggle help\ng / G               Jump to top / bottom\n```\n\nFull guide: [`docs/mission-control.md`](docs/mission-control.md).\n\n## Artifact layout\n\nMission data is global so repositories do not need `.gitignore` changes and Mission Control can monitor work across repos. Set `PI_MISSIONS_HOME` to override the storage root.\n\n```text\n~/.pi/missions/<mission-id>/\n  mission.json              # runtime state; features live under milestones[].features\n  event-log.jsonl\n  plan/\n    objective.md\n    features.json           # derived review artifact, not runtime state\n    validation-contract.json\n    validation-contract.md\n  skills/\n    worker/SKILL.md\n    validator-scrutiny/SKILL.md\n    validator-user-testing/SKILL.md\n  recovery-packets/\n    <timestamp>-<run-id>.json / .md\n  runs/<run-id>/\n    transcript.jsonl\n    stderr.txt\n    handoff.json / handoff.md\n    validation-report.json / validation-report.md\n    user-testing-report.json / user-testing-report.md\n```\n\nRecovery packet details: [`docs/runtime-orchestrator-recovery-artifacts.md`](docs/runtime-orchestrator-recovery-artifacts.md).\n\n## Roadmap snapshot\n\nRecently completed:\n\n- milestone-canonical mission schema\n- milestone-level deterministic run loop\n- read-only multi-mission Mission Control\n- event-driven runtime orchestrator recovery\n- split `mission-plan` from runtime `mission-orchestrator`\n- release-critical runtime modularization\n\nNext:\n\n- planning readiness checklist and run estimates\n- user config overrides\n- token/cost tracking and budgets\n- durable mission resume\n- headless/remote execution\n\nFull roadmap: [`docs/roadmap.md`](docs/roadmap.md).\n\n## Development\n\n```bash\nnpm run typecheck       # TypeScript checks\nnpm test                # Vitest tests\nnpm run validate        # Mission regression harnesses\nnpm run build           # Compile publishable JS to dist/\nnpm run check           # Full local gate\nnpm pack --dry-run      # Package contents smoke check\n```\n\nRelease notes and manual validation: [`docs/release-validation.md`](docs/release-validation.md).\n\nThe package manifest loads the built extension entrypoint (`dist/missions/index.js`). Preserve public commands, tools, artifact paths, and the read-only Mission Control model when changing runtime code.\n\n## License and attribution\n\nMIT. pi-missions is an independent pi extension inspired by the public [Factory Missions for Droid](https://factory.ai/news/missions) announcement. It is not affiliated with Factory.\n","readmeFilename":"README.md"}