{"_id":"@blackbelt-technology/pi-dashboard-cost-estimator","_rev":"3-f10db4ad5223ff2869a5184c8ceacea5","name":"@blackbelt-technology/pi-dashboard-cost-estimator","dist-tags":{"latest":"0.9.0"},"versions":{"0.7.0":{"name":"@blackbelt-technology/pi-dashboard-cost-estimator","version":"0.7.0","keywords":["pi-package","pi-skill","pi-dashboard","cost-estimation","effort-estimation","use-case-points","cocomo","monte-carlo","business-case","agentic-cost","session-telemetry"],"license":"MIT","_id":"@blackbelt-technology/pi-dashboard-cost-estimator@0.7.0","maintainers":[{"name":"mbotond","email":"botond.molnar@blackbelt.hu"},{"name":"mrbence","email":"dbence10@gmail.com"},{"name":"robertcsakany","email":"robert.csakany@blackbelt.hu"},{"name":"norbert.herczeg","email":"norbert.herczeg@blackbelt.hu"}],"homepage":"https://github.com/BlackBeltTechnology/pi-agent-dashboard#readme","bugs":{"url":"https://github.com/BlackBeltTechnology/pi-agent-dashboard/issues"},"pi":{"skills":[".pi/skills/software-cost-estimator"]},"bin":{"pi-estimate":"bin/estimate.mjs","pi-estimate-calibrate":"bin/calibrate.mjs","pi-estimate-calibrate-sessions":"bin/calibrate-sessions.mjs"},"dist":{"shasum":"13245ace5c4f2d6ac702cb5315ef106f24966645","tarball":"https://registry.npmjs.org/@blackbelt-technology/pi-dashboard-cost-estimator/-/pi-dashboard-cost-estimator-0.7.0.tgz","fileCount":38,"integrity":"sha512-PQAuK9gMtT/GM8gd0JJ1sawj+YFs53R3xUxNztjz2bD9otn1mXWFWdMKSwa8tAsuPeyYsIw1ht5vErI5n3yXHw==","signatures":[{"sig":"MEUCIQDynpCfN1I7J2876hxAyCSFW/9odX5JDcvtLg5RuxAkowIgMP+ZvLYyVoa5MQ5Fnla2nnw9ZMD8QYEDJ06HPuByXxo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":235605},"type":"module","exports":{".":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./client":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./server":{"types":"./src/server/index.ts","default":"./src/server/index.ts"},"./engine/*":"./src/engine/*","./engine/*.js":"./src/engine/*.ts","./telemetry/*":"./src/telemetry/*","./telemetry/*.js":"./src/telemetry/*.ts"},"gitHead":"fa69fa268e165e428fcb53d51f7d8ebff6b1da61","scripts":{"test":"vitest run"},"_npmUser":{"name":"robertcsakany","email":"robert.csakany@blackbelt.hu"},"repository":{"url":"git+https://github.com/BlackBeltTechnology/pi-agent-dashboard.git","type":"git","directory":"packages/cost-estimator"},"_npmVersion":"10.9.3","description":"Software cost & effort estimation from use cases, functional and non-functional requirements and a tech stack. Sizes with Use Case Points + COCOMO II scale, routes NFRs to derived scope or a residual multiplier, distributes effort across 11 roles, compare","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@blackbelt-technology/pi-dashboard-shared":"^0.7.0","@blackbelt-technology/dashboard-plugin-runtime":"^0.7.0","@blackbelt-technology/pi-dashboard-session-distiller":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"pi-dashboard-plugin":{"id":"cost-estimator","claims":[{"slot":"command-route","command":"cost","component":"CostView"},{"slot":"settings-section","config":{"tab":"general"},"component":"CostSettings"}],"client":"./src/client/index.tsx","server":"./src/server/index.ts","priority":100,"displayName":"Cost","requiredApi":"^0.x","configSchema":"./src/configSchema.json"},"_npmOperationalInternal":{"tmp":"tmp/pi-dashboard-cost-estimator_0.7.0_1786997754908_0.7523886370698665","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@blackbelt-technology/pi-dashboard-cost-estimator","version":"0.8.0","keywords":["pi-package","pi-skill","pi-dashboard","cost-estimation","effort-estimation","use-case-points","cocomo","monte-carlo","business-case","agentic-cost","session-telemetry"],"license":"MIT","_id":"@blackbelt-technology/pi-dashboard-cost-estimator@0.8.0","maintainers":[{"name":"mbotond","email":"botond.molnar@blackbelt.hu"},{"name":"mrbence","email":"dbence10@gmail.com"},{"name":"robertcsakany","email":"robert.csakany@blackbelt.hu"},{"name":"norbert.herczeg","email":"norbert.herczeg@blackbelt.hu"}],"homepage":"https://github.com/BlackBeltTechnology/pi-agent-dashboard#readme","bugs":{"url":"https://github.com/BlackBeltTechnology/pi-agent-dashboard/issues"},"pi":{"skills":[".pi/skills/software-cost-estimator"]},"bin":{"pi-estimate":"bin/estimate.mjs","pi-estimate-calibrate":"bin/calibrate.mjs","pi-estimate-calibrate-sessions":"bin/calibrate-sessions.mjs"},"dist":{"shasum":"50f47e97ae472683b2d848f08f3bab9761900433","tarball":"https://registry.npmjs.org/@blackbelt-technology/pi-dashboard-cost-estimator/-/pi-dashboard-cost-estimator-0.8.0.tgz","fileCount":38,"integrity":"sha512-kJFUurgr+q3OM0ST02GCmu7MCIrgzuvdN9300W/3hp+Ey6mzf/2+nzPISjEJRc8eF1Jb1w3o7v02C2y/q3/sJw==","signatures":[{"sig":"MEYCIQDGJEm3Lwlt4BKA4KiyBZyrfPUlYk9mRSSaCS69umylKwIhAPVBPGKYoWREyTq3pvrBVr/JaYu5e8ARIGh0P3sjDl5A","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDF3hbzi2sykU4g+qAn/xtVraFBnkvdOVy7Y5T6xI8txAiEA3QyEcPTapRDP9JJzQ2wq2mF2F8GhPd+yVH8cnumbfzg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blackbelt-technology%2fpi-dashboard-cost-estimator@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":235786},"type":"module","exports":{".":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./client":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./server":{"types":"./src/server/index.ts","default":"./src/server/index.ts"},"./engine/*":"./src/engine/*","./engine/*.js":"./src/engine/*.ts","./telemetry/*":"./src/telemetry/*","./telemetry/*.js":"./src/telemetry/*.ts"},"gitHead":"9373dfa416660a285475febc0383608fe14270b1","scripts":{"test":"vitest run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c7f35e16-4732-4a3c-a05a-2d0e02cfbe1f"}},"repository":{"url":"git+https://github.com/BlackBeltTechnology/pi-agent-dashboard.git","type":"git","directory":"packages/cost-estimator"},"_npmVersion":"12.0.2","description":"Software cost & effort estimation from use cases, functional and non-functional requirements and a tech stack. Sizes with Use Case Points + COCOMO II scale, routes NFRs to derived scope or a residual multiplier, distributes effort across 11 roles, compare","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@blackbelt-technology/pi-dashboard-shared":"^0.8.0","@blackbelt-technology/dashboard-plugin-runtime":"^0.8.0","@blackbelt-technology/pi-dashboard-session-distiller":"^0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":">=18.0.0"},"pi-dashboard-plugin":{"id":"cost-estimator","claims":[{"slot":"command-route","command":"cost","component":"CostView"},{"slot":"settings-section","config":{"tab":"general"},"component":"CostSettings"}],"client":"./src/client/index.tsx","server":"./src/server/index.ts","priority":100,"displayName":"Cost","requiredApi":"^0.x","configSchema":"./src/configSchema.json"},"_npmOperationalInternal":{"tmp":"tmp/pi-dashboard-cost-estimator_0.8.0_1787746270723_0.3946823982566072","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"pi":{"skills":[".pi/skills/software-cost-estimator"]},"_id":"@blackbelt-technology/pi-dashboard-cost-estimator@0.9.0","bin":{"pi-estimate":"bin/estimate.mjs","pi-estimate-calibrate":"bin/calibrate.mjs","pi-estimate-calibrate-sessions":"bin/calibrate-sessions.mjs"},"bugs":{"url":"https://github.com/BlackBeltTechnology/pi-agent-dashboard/issues"},"dist":{"shasum":"3729a226e5370bd4cabdd79581794d1fcfb8234c","tarball":"https://registry.npmjs.org/@blackbelt-technology/pi-dashboard-cost-estimator/-/pi-dashboard-cost-estimator-0.9.0.tgz","fileCount":38,"integrity":"sha512-giPt/NVsBaXaafpen+karBPAWXO9vwcXTk0Lt9pYkD51D9KEqvOYHvpJXB1+VoxdLM7Kqznoqzr6cahW23xpYw==","signatures":[{"sig":"MEQCIDs8gYFE7UzflWfd2qVhlhoMrO1O96xGyxlr/kCcVo+AAiBGuj8+i4lX1fj6Xi8zCTIEB9Kz62tp5MM7V1Vhjg8GSg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDtdh0hW7jvWowl/I+BkSmCFlUQsUVFdO33bupHSibJAAiEAr0ef6LP2E0zP7unUlaGw6itGDmgToaARhZ1N9SxSajU="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blackbelt-technology%2fpi-dashboard-cost-estimator@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":235786},"name":"@blackbelt-technology/pi-dashboard-cost-estimator","type":"module","exports":{".":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./client":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./server":{"types":"./src/server/index.ts","default":"./src/server/index.ts"},"./engine/*":"./src/engine/*","./engine/*.js":"./src/engine/*.ts","./telemetry/*":"./src/telemetry/*","./telemetry/*.js":"./src/telemetry/*.ts"},"gitHead":"60a155465d55e4438e1425c07b0ab5459083a9b5","license":"MIT","scripts":{"test":"vitest run"},"version":"0.9.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"c7f35e16-4732-4a3c-a05a-2d0e02cfbe1f"}},"homepage":"https://github.com/BlackBeltTechnology/pi-agent-dashboard#readme","keywords":["pi-package","pi-skill","pi-dashboard","cost-estimation","effort-estimation","use-case-points","cocomo","monte-carlo","business-case","agentic-cost","session-telemetry"],"repository":{"url":"git+https://github.com/BlackBeltTechnology/pi-agent-dashboard.git","type":"git","directory":"packages/cost-estimator"},"_npmVersion":"12.2.0","description":"Software cost & effort estimation from use cases, functional and non-functional requirements and a tech stack. Sizes with Use Case Points + COCOMO II scale, routes NFRs to derived scope or a residual multiplier, distributes effort across 11 roles, compare","directories":{},"maintainers":[{"name":"mbotond","email":"botond.molnar@blackbelt.hu"},{"name":"mrbence","email":"dbence10@gmail.com"},{"name":"robertcsakany","email":"robert.csakany@blackbelt.hu"},{"name":"norbert.herczeg","email":"norbert.herczeg@blackbelt.hu"}],"_nodeVersion":"24.21.0","dependencies":{"@blackbelt-technology/pi-dashboard-shared":"^0.9.0","@blackbelt-technology/dashboard-plugin-runtime":"^0.9.0","@blackbelt-technology/pi-dashboard-session-distiller":"^0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":">=18.0.0"},"pi-dashboard-plugin":{"id":"cost-estimator","claims":[{"slot":"command-route","command":"cost","component":"CostView"},{"slot":"settings-section","config":{"tab":"general"},"component":"CostSettings"}],"client":"./src/client/index.tsx","server":"./src/server/index.ts","priority":100,"displayName":"Cost","requiredApi":"^0.x","configSchema":"./src/configSchema.json"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-dashboard-cost-estimator_0.9.0_1791297335606_0.9441538875442979"}}},"time":{"created":"2026-08-17T20:15:54.675Z","modified":"2026-10-06T14:35:36.100Z","0.7.0":"2026-08-17T20:15:55.072Z","0.8.0":"2026-08-26T12:11:10.825Z","0.9.0":"2026-10-06T14:35:35.693Z"},"bugs":{"url":"https://github.com/BlackBeltTechnology/pi-agent-dashboard/issues"},"license":"MIT","homepage":"https://github.com/BlackBeltTechnology/pi-agent-dashboard#readme","keywords":["pi-package","pi-skill","pi-dashboard","cost-estimation","effort-estimation","use-case-points","cocomo","monte-carlo","business-case","agentic-cost","session-telemetry"],"repository":{"url":"git+https://github.com/BlackBeltTechnology/pi-agent-dashboard.git","type":"git","directory":"packages/cost-estimator"},"description":"Software cost & effort estimation from use cases, functional and non-functional requirements and a tech stack. Sizes with Use Case Points + COCOMO II scale, routes NFRs to derived scope or a residual multiplier, distributes effort across 11 roles, compare","maintainers":[{"name":"mbotond","email":"botond.molnar@blackbelt.hu"},{"name":"mrbence","email":"dbence10@gmail.com"},{"name":"robertcsakany","email":"robert.csakany@blackbelt.hu"},{"name":"norbert.herczeg","email":"norbert.herczeg@blackbelt.hu"}],"readme":"# @blackbelt-technology/pi-dashboard-cost-estimator\n\nEstimate software cost and effort from use cases, functional and non-functional\nrequirements, and a technology stack — then calibrate the model against what actually\nhappened, using real pi session telemetry.\n\nShips three things:\n\n1. **A skill** (`.pi/skills/software-cost-estimator`) — the workflow, references and rules\n   the agent follows when producing an estimate.\n2. **A zero-dependency engine** (`src/engine/`) — the arithmetic, so the numbers are\n   reproducible and auditable rather than model-generated.\n3. **A dashboard plugin** (`src/client/`, `src/server/`) — measured steering hours, agent\n   cost and subscription leverage per project.\n\n## Why the split matters\n\nThe LLM does **judgment**: decomposing use cases, counting transactions, rating TCF/ECF\nfactors, routing NFRs, classifying which work AI is actually good at.\n\nThe engine does **arithmetic**: UCP → COCOMO II scale → role distribution → four delivery\nmodes → Monte Carlo → NPV.\n\nThat separation is what makes an estimate defensible to a client. Every number has a\nderivation someone can check.\n\n## Quick start\n\n```bash\n# estimate\nnode bin/estimate.mjs input.yaml --out ./out\n\n# calibrate scope productivity from a delivered project\nnode bin/calibrate.mjs input.yaml --actual-days 479 --exclude-contingency\n\n# calibrate agent cost + steering time from real session telemetry\nnode bin/calibrate-sessions.mjs --plans\nnode bin/calibrate-sessions.mjs --plan anthropic-max-20x --seats 2\nnode bin/calibrate-sessions.mjs --project my-repo --actual-days 120\n```\n\nOutputs: `estimate-report.md`, `delivery-mode-comparison.md`, `business-case.md`,\n`estimate.xlsx`.\n\n## The four delivery modes\n\n| Mode | Who writes the code |\n|---|---|\n| `human_only` | People, no assistance |\n| `human_with_ai` | People with inline assistance |\n| `ai_steered_human_supervised` | Agents, steered and reviewed by a person |\n| `agentic_hitl` | Agents, with human-in-the-loop oversight at an intensity level |\n\nAI compresses **build effort only** (~60% of a project). PM, client iteration, compliance,\nmanual QA and security sign-off do not shrink because a model writes the code. That single\nconstraint is why \"AI is 10× faster\" collapses into single-digit project savings.\n\n## Cost basis: subscription vs metered\n\nSession logs record a **metered API-price computation**. Most teams do not pay that — they\nbuy flat seat plans. The two bases have different *shapes*:\n\n| | Metered | Subscription |\n|---|---|---|\n| Cost scales with | work volume | seats × calendar months |\n| Marginal cost of more agent use | linear | zero, until quota |\n| Overrun risk lands on | cost | schedule (throttling) |\n\nSo under a subscription, **schedule is a cost driver** and quota exhaustion is a schedule\nrisk, not a cost overrun. Set `ai.cost_basis: subscription` and list your seat plans.\n\nLeverage (meter-equivalent ÷ seat cost) is reported as *leverage* — never as a saving\npassed to a client. It is on-demand value the flat plan captured, not a discount.\n\n## Dependency split (load-bearing)\n\n| Layer | Dependencies |\n|---|---|\n| `src/engine/` | **none** — hand-rolled YAML parser, Monte Carlo, XLSX writer |\n| `src/telemetry/` | `pi-dashboard-shared`, `pi-dashboard-session-distiller` |\n\nThe engine must run in any project with no dashboard installed. Only the telemetry adapter\ntouches the session store, and it reads through the dashboard's own readers so a\nsession-schema change lands in one place. **If engine code imports from `telemetry/`,\nportability is gone.**\n\n## Dashboard plugin\n\n| Slot | Component | Purpose |\n|---|---|---|\n| `command-route` | `CostView` | `cost` command → steering hours, meter-equivalent, actual subscription cost, leverage, per-project table |\n| `settings-section` | `CostSettings` | Seat plan, seat count, break threshold |\n\nServer route: `GET /api/cost-estimator/telemetry` (read-only, 60s cache).\n\nNo `content-view` claim. `forSession()` keeps every predicate-less claim, so an\nunpredicated `content-view` claim replaces `ChatView` for every session, always,\nwith no chrome to dismiss it. `CostView` is a global report — the `cost`\ncommand-route is its entry point.\n\n## Tests\n\n```bash\nnpx vitest run packages/cost-estimator    # from the monorepo root\n```\n\n43 tests covering the published formulas (Karner's worked example, COCOMO II.2000\nconstants, Beta-PERT), the NFR double-counting guard, the correlated-risk shape, the\nsubscription cost basis, and the gap-capping rule.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}