@planu/cli 4.14.1 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/LICENSE +55 -12
  3. package/README.md +10 -2
  4. package/dist/cli/commands/install.d.ts +1 -12
  5. package/dist/cli/commands/install.js +9 -65
  6. package/dist/cli/commands/job.js +4 -3
  7. package/dist/cli/commands/spec.js +2 -2
  8. package/dist/cli/commands/validate.js +2 -2
  9. package/dist/cli/router.js +1 -3
  10. package/dist/config/environment-schema.json +1 -3
  11. package/dist/config/official-sdd-tools.d.ts +4 -0
  12. package/dist/config/official-sdd-tools.js +35 -0
  13. package/dist/config/product-public.d.ts +139 -3
  14. package/dist/config/product-public.js +8 -1
  15. package/dist/config/product-public.json +7 -36
  16. package/dist/config/registries/hosts/codex.json +20 -363
  17. package/dist/config/release-policy.json +84 -2
  18. package/dist/config/runtime-policy.json +12 -1
  19. package/dist/config/skill-templates/planu-resume-work.md +2 -2
  20. package/dist/core/index.d.ts +1 -1
  21. package/dist/core/spec-validator.d.ts +4 -4
  22. package/dist/core/spec-validator.js +1 -1
  23. package/dist/engine/abortable-process-runner.d.ts +20 -2
  24. package/dist/engine/abortable-process-runner.js +243 -74
  25. package/dist/engine/ambiguity-scorer.js +4 -26
  26. package/dist/engine/auth/scope-mapper.js +1 -7
  27. package/dist/engine/autopilot/state-updater.js +4 -4
  28. package/dist/engine/cascade-hooks/hooks/review-enricher.hook.js +9 -6
  29. package/dist/engine/cascade-hooks/state-drift-detector.d.ts +3 -3
  30. package/dist/engine/cascade-hooks/state-drift-detector.js +1 -1
  31. package/dist/engine/ci-generator/planu-config.js +1 -7
  32. package/dist/engine/clarification-gate/gate.d.ts +3 -3
  33. package/dist/engine/code-scanner/layer-scanner.js +6 -22
  34. package/dist/engine/core-bridge.d.ts +3 -3
  35. package/dist/engine/cost-guardrails.d.ts +1 -1
  36. package/dist/engine/cost-guardrails.js +1 -1
  37. package/dist/engine/criterion-identity.d.ts +1 -0
  38. package/dist/engine/criterion-identity.js +7 -0
  39. package/dist/engine/dashboard/data-loader.js +2 -7
  40. package/dist/engine/dashboard/templates-layout.js +0 -3
  41. package/dist/engine/dashboard/templates-project.js +1 -13
  42. package/dist/engine/docs-site-generator/data-collector.d.ts +1 -1
  43. package/dist/engine/docs-site-generator/data-collector.js +7 -28
  44. package/dist/engine/docs-site-generator/tools-renderer.js +3 -10
  45. package/dist/engine/evidence-gates/artifact-reader.d.ts +10 -1
  46. package/dist/engine/evidence-gates/artifact-reader.js +115 -2
  47. package/dist/engine/evidence-gates/lifecycle-gate.js +4 -3
  48. package/dist/engine/evidence-gates/reconciliation-freshness.d.ts +11 -0
  49. package/dist/engine/evidence-gates/reconciliation-freshness.js +72 -0
  50. package/dist/engine/evidence-index/done-drift.d.ts +1 -1
  51. package/dist/engine/evidence-index/done-drift.js +40 -18
  52. package/dist/engine/execution/context.js +3 -0
  53. package/dist/engine/execution/durable-job-heartbeat-runtime.d.ts +4 -0
  54. package/dist/engine/execution/durable-job-heartbeat-runtime.js +400 -0
  55. package/dist/engine/execution/job-runtime.d.ts +30 -0
  56. package/dist/engine/execution/job-runtime.js +114 -6
  57. package/dist/engine/execution/public-job-sanitizer.d.ts +4 -0
  58. package/dist/engine/execution/public-job-sanitizer.js +31 -0
  59. package/dist/engine/execution/validate-job-executor.d.ts +12 -1
  60. package/dist/engine/execution/validate-job-executor.js +549 -86
  61. package/dist/engine/execution/validate-job-payload.js +107 -50
  62. package/dist/engine/execution/validate-job-recovery.js +1 -1
  63. package/dist/engine/execution/validate-worker-runtime.d.ts +5 -0
  64. package/dist/engine/execution/validate-worker-runtime.js +90 -2
  65. package/dist/engine/execution/validate-worker-thread.js +17 -24
  66. package/dist/engine/handoff-artifacts/schemas.d.ts +2 -1
  67. package/dist/engine/handoff-artifacts/schemas.js +33 -0
  68. package/dist/engine/handoff-packager.d.ts +19 -0
  69. package/dist/engine/handoff-packager.js +415 -13
  70. package/dist/engine/hooks/effort-configurator.js +1 -1
  71. package/dist/engine/impact-detector/test-break-predictor.js +3 -3
  72. package/dist/engine/impact-detector/tool-registration.js +1 -1
  73. package/dist/engine/implementation-contract/renderer.js +23 -8
  74. package/dist/engine/lifecycle-reconciliation-io.d.ts +11 -0
  75. package/dist/engine/lifecycle-reconciliation-io.js +180 -0
  76. package/dist/engine/lifecycle-reconciliation.d.ts +16 -0
  77. package/dist/engine/lifecycle-reconciliation.js +406 -0
  78. package/dist/engine/local-first/tool-classification.js +2 -0
  79. package/dist/engine/macos-keychain-native-port.d.ts +5 -0
  80. package/dist/engine/macos-keychain-native-port.js +19 -7
  81. package/dist/engine/migrations/remove-commercial-state.d.ts +3 -0
  82. package/dist/engine/migrations/remove-commercial-state.js +343 -0
  83. package/dist/engine/network-policy.js +1 -0
  84. package/dist/engine/planu-core.darwin-arm64.node.manifest.json +7 -7
  85. package/dist/engine/planu-core.darwin-arm64.node.sbom.json +10 -10
  86. package/dist/engine/planu-core.darwin-x64.node.manifest.json +7 -7
  87. package/dist/engine/planu-core.darwin-x64.node.sbom.json +10 -10
  88. package/dist/engine/planu-core.linux-arm64-gnu.node.manifest.json +7 -7
  89. package/dist/engine/planu-core.linux-arm64-gnu.node.sbom.json +10 -10
  90. package/dist/engine/planu-core.linux-arm64-musl.node.manifest.json +7 -7
  91. package/dist/engine/planu-core.linux-arm64-musl.node.sbom.json +10 -10
  92. package/dist/engine/planu-core.linux-x64-gnu.node.manifest.json +7 -7
  93. package/dist/engine/planu-core.linux-x64-gnu.node.sbom.json +10 -10
  94. package/dist/engine/planu-core.linux-x64-musl.node.manifest.json +7 -7
  95. package/dist/engine/planu-core.linux-x64-musl.node.sbom.json +10 -10
  96. package/dist/engine/planu-core.win32-arm64-msvc.node.manifest.json +7 -7
  97. package/dist/engine/planu-core.win32-arm64-msvc.node.sbom.json +10 -10
  98. package/dist/engine/planu-core.win32-x64-msvc.node.manifest.json +7 -7
  99. package/dist/engine/planu-core.win32-x64-msvc.node.sbom.json +10 -10
  100. package/dist/engine/readiness-checker.d.ts +1 -16
  101. package/dist/engine/readiness-checker.js +27 -88
  102. package/dist/engine/runtime-policy.d.ts +2 -0
  103. package/dist/engine/runtime-policy.js +42 -5
  104. package/dist/engine/runtime-security/rate-limiter.js +0 -1
  105. package/dist/engine/safety/contained-project-file.d.ts +3 -0
  106. package/dist/engine/safety/contained-project-file.js +23 -0
  107. package/dist/engine/scope-boundaries/contradiction-checker.js +63 -1
  108. package/dist/engine/scope-boundaries/scope-validator.js +45 -7
  109. package/dist/engine/session/checkpoint-writer.js +0 -9
  110. package/dist/engine/spec-format/acceptance-criteria.d.ts +6 -2
  111. package/dist/engine/spec-format/acceptance-criteria.js +77 -18
  112. package/dist/engine/spec-format/markdown-sections.d.ts +14 -0
  113. package/dist/engine/spec-format/markdown-sections.js +105 -0
  114. package/dist/engine/spec-format/read-technical-section.js +33 -5
  115. package/dist/engine/spec-format/technical-md-populator.js +3 -2
  116. package/dist/engine/spec-format/unified-spec-builder.d.ts +7 -0
  117. package/dist/engine/spec-format/unified-spec-builder.js +202 -0
  118. package/dist/engine/spec-migrator/canonical-deduplicator.d.ts +18 -0
  119. package/dist/engine/spec-migrator/canonical-deduplicator.js +479 -0
  120. package/dist/engine/spec-migrator/filesystem-import.d.ts +4 -8
  121. package/dist/engine/spec-migrator/filesystem-import.js +121 -14
  122. package/dist/engine/spec-migrator/frontmatter-parser.js +32 -15
  123. package/dist/engine/spec-migrator/index.d.ts +1 -0
  124. package/dist/engine/spec-migrator/index.js +1 -0
  125. package/dist/engine/spec-state-machine/transition-spec.d.ts +6 -1
  126. package/dist/engine/spec-state-machine/transition-spec.js +10 -1
  127. package/dist/engine/technical-enricher/index.js +16 -8
  128. package/dist/engine/technical-enricher/render-enriched.d.ts +1 -0
  129. package/dist/engine/technical-enricher/render-enriched.js +42 -14
  130. package/dist/engine/telemetry/health-checker.js +53 -17
  131. package/dist/engine/telemetry/telemetry-client.js +26 -8
  132. package/dist/engine/text-signal-boundaries.d.ts +2 -0
  133. package/dist/engine/text-signal-boundaries.js +25 -2
  134. package/dist/engine/time/relative-date.d.ts +3 -0
  135. package/dist/engine/time/relative-date.js +16 -0
  136. package/dist/engine/timing/budget.d.ts +11 -0
  137. package/dist/engine/timing/budget.js +27 -9
  138. package/dist/engine/token-optimizer/analytics.d.ts +1 -1
  139. package/dist/engine/token-optimizer/analytics.js +5 -6
  140. package/dist/engine/usage-tracker/core.d.ts +2 -2
  141. package/dist/engine/usage-tracker/core.js +1 -2
  142. package/dist/engine/usage-tracker/index.d.ts +0 -3
  143. package/dist/engine/usage-tracker/index.js +0 -3
  144. package/dist/engine/usage-tracker/stats.d.ts +2 -2
  145. package/dist/engine/usage-tracker/stats.js +1 -28
  146. package/dist/engine/validation/durable-validation.d.ts +1 -1
  147. package/dist/engine/validation/durable-validation.js +3 -82
  148. package/dist/engine/validation/validation-freshness.d.ts +11 -1
  149. package/dist/engine/validation/validation-freshness.js +231 -91
  150. package/dist/engine/validation/validation-receipt.d.ts +9 -6
  151. package/dist/engine/validation/validation-receipt.js +84 -24
  152. package/dist/engine/validation/validation-source-digest.d.ts +2 -0
  153. package/dist/engine/validation/validation-source-digest.js +86 -0
  154. package/dist/engine/validation/validation-submission.d.ts +5 -4
  155. package/dist/engine/validation/validation-submission.js +25 -11
  156. package/dist/engine/validation/validation-worktree.d.ts +21 -0
  157. package/dist/engine/validation/validation-worktree.js +260 -0
  158. package/dist/engine/validation-impact-planner.d.ts +14 -2
  159. package/dist/engine/validation-impact-planner.js +0 -3
  160. package/dist/engine/validator/dor-dod.d.ts +1 -0
  161. package/dist/engine/validator/dor-dod.js +5 -3
  162. package/dist/engine/validator/extractors.d.ts +1 -5
  163. package/dist/engine/validator/extractors.js +24 -69
  164. package/dist/engine/validator/spec-compliance-runner.d.ts +12 -24
  165. package/dist/engine/validator/spec-compliance-runner.js +429 -211
  166. package/dist/engine/validator.js +35 -22
  167. package/dist/index.js +4 -16
  168. package/dist/resources/usage-stats-resource.js +2 -18
  169. package/dist/security/adapters/linux-secret-service.js +7 -3
  170. package/dist/security/adapters/windows-credential-manager.js +6 -4
  171. package/dist/server/routes/specs.js +10 -0
  172. package/dist/storage/base-store.d.ts +1 -1
  173. package/dist/storage/base-store.js +1 -1
  174. package/dist/storage/feedback-remote.d.ts +2 -3
  175. package/dist/storage/feedback-remote.js +45 -31
  176. package/dist/storage/global-store.d.ts +1 -17
  177. package/dist/storage/global-store.js +1 -42
  178. package/dist/storage/index.d.ts +0 -2
  179. package/dist/storage/index.js +0 -2
  180. package/dist/storage/migrations/canonical-storage.js +124 -11
  181. package/dist/storage/runtime-db.d.ts +9 -0
  182. package/dist/storage/runtime-db.js +64 -8
  183. package/dist/storage/spec-store.d.ts +14 -2
  184. package/dist/storage/spec-store.js +104 -14
  185. package/dist/storage/status-store/atomic-status-write.d.ts +5 -0
  186. package/dist/storage/status-store/atomic-status-write.js +57 -0
  187. package/dist/storage/status-store/file-lock.js +30 -11
  188. package/dist/storage/status-store/self-healing.js +3 -3
  189. package/dist/storage/status-store/version-sync.d.ts +2 -1
  190. package/dist/storage/status-store/version-sync.js +35 -40
  191. package/dist/storage/usage-store.d.ts +1 -5
  192. package/dist/storage/usage-store.js +0 -35
  193. package/dist/tools/auto-update-handler.d.ts +3 -3
  194. package/dist/tools/auto-update-handler.js +3 -3
  195. package/dist/tools/challenge-spec/resilience-challenge-scenarios.d.ts +2 -1
  196. package/dist/tools/challenge-spec/resilience-challenge-scenarios.js +10 -7
  197. package/dist/tools/challenge-spec/scenario-collector.js +1 -1
  198. package/dist/tools/challenge-spec/scenarios-data.js +1 -1
  199. package/dist/tools/challenge-spec/scenarios-utils.d.ts +1 -1
  200. package/dist/tools/challenge-spec/scenarios-utils.js +35 -11
  201. package/dist/tools/challenge-spec.js +5 -5
  202. package/dist/tools/check-readiness.js +1 -1
  203. package/dist/tools/configure-telemetry.js +30 -2
  204. package/dist/tools/create-spec/spec-builder.js +0 -11
  205. package/dist/tools/create-spec.d.ts +1 -0
  206. package/dist/tools/create-spec.js +444 -239
  207. package/dist/tools/git/branch-ops.d.ts +1 -1
  208. package/dist/tools/git/branch-ops.js +3 -2
  209. package/dist/tools/init-project/handler.js +10 -12
  210. package/dist/tools/init-project/host-assets-writer.js +26 -1
  211. package/dist/tools/init-project/lint-scaffolder.d.ts +3 -3
  212. package/dist/tools/init-project/migration-runner.d.ts +2 -4
  213. package/dist/tools/init-project/migration-runner.js +3 -2
  214. package/dist/tools/init-project/portable-index-reconciler.d.ts +4 -0
  215. package/dist/tools/init-project/portable-index-reconciler.js +14 -0
  216. package/dist/tools/init-project/result-builder.js +1 -3
  217. package/dist/tools/jobs/handlers.js +38 -6
  218. package/dist/tools/list-specs.js +5 -26
  219. package/dist/tools/merge-risk-handler.js +2 -2
  220. package/dist/tools/package-handoff.js +2 -0
  221. package/dist/tools/reconcile-spec.js +0 -27
  222. package/dist/tools/register-agent-squad-tools.js +2 -2
  223. package/dist/tools/register-platform-tools/design-stack-tools.js +11 -11
  224. package/dist/tools/register-platform-tools/lifecycle-infra-tools.js +7 -7
  225. package/dist/tools/register-sdd-tools.d.ts +1 -1
  226. package/dist/tools/register-sdd-tools.js +2 -29
  227. package/dist/tools/register-spec-tools/analysis-tools.js +8 -8
  228. package/dist/tools/register-spec-tools/core-spec-tools.js +17 -8
  229. package/dist/tools/safe-handler.d.ts +5 -13
  230. package/dist/tools/safe-handler.js +7 -23
  231. package/dist/tools/schemas/index.d.ts +1 -1
  232. package/dist/tools/schemas/index.js +1 -1
  233. package/dist/tools/schemas/output-schemas.d.ts +0 -23
  234. package/dist/tools/schemas/output-schemas.js +0 -28
  235. package/dist/tools/schemas/spec.d.ts +4 -0
  236. package/dist/tools/schemas/spec.js +3 -0
  237. package/dist/tools/schemas/validate-output-schema.d.ts +11 -0
  238. package/dist/tools/schemas/validate-output-schema.js +7 -0
  239. package/dist/tools/spec-prompt-handler.js +3 -3
  240. package/dist/tools/sync-spec-state-handler.d.ts +1 -1
  241. package/dist/tools/sync-spec-state-handler.js +1 -1
  242. package/dist/tools/tool-entry.d.ts +4 -4
  243. package/dist/tools/tool-entry.js +3 -3
  244. package/dist/tools/tool-registry/core-tools.js +31 -15
  245. package/dist/tools/tool-registry/group-infra.js +27 -110
  246. package/dist/tools/tool-registry/group-quality-compliance.js +26 -26
  247. package/dist/tools/tool-registry/inventory.d.ts +2 -0
  248. package/dist/tools/tool-registry/inventory.js +2 -0
  249. package/dist/tools/tool-registry-helpers.d.ts +3 -3
  250. package/dist/tools/tool-registry-helpers.js +3 -3
  251. package/dist/tools/tool-usage-report/registered-tools.d.ts +1 -1
  252. package/dist/tools/tool-usage-report/registered-tools.js +3 -15
  253. package/dist/tools/update-status/approval-gates.js +3 -0
  254. package/dist/tools/update-status/done-receipt-verifier.js +40 -27
  255. package/dist/tools/update-status/evidence-gate.js +36 -1
  256. package/dist/tools/update-status/file-sync.d.ts +2 -1
  257. package/dist/tools/update-status/file-sync.js +57 -6
  258. package/dist/tools/update-status/index.d.ts +2 -0
  259. package/dist/tools/update-status/index.js +95 -58
  260. package/dist/tools/update-status/response-builder.js +3 -3
  261. package/dist/tools/update-status/side-effects.d.ts +2 -0
  262. package/dist/tools/update-status/side-effects.js +2 -2
  263. package/dist/tools/update-status/transition-guard.js +32 -15
  264. package/dist/tools/update-status-actions.d.ts +4 -2
  265. package/dist/tools/update-status-actions.js +16 -14
  266. package/dist/tools/usage-report.js +1 -16
  267. package/dist/tools/usage-stats.js +1 -18
  268. package/dist/tools/usage-tracking.d.ts +4 -0
  269. package/dist/tools/usage-tracking.js +20 -0
  270. package/dist/tools/validate-lint.d.ts +1 -0
  271. package/dist/tools/validate-lint.js +1 -1
  272. package/dist/tools/validate.d.ts +2 -1
  273. package/dist/tools/validate.js +114 -34
  274. package/dist/transports/http-transport.js +6 -8
  275. package/dist/transports/mcp-types.d.ts +0 -2
  276. package/dist/transports/session-context.js +1 -1
  277. package/dist/types/cascade-hooks.d.ts +1 -1
  278. package/dist/types/ci.d.ts +0 -4
  279. package/dist/types/clarification-token.d.ts +1 -1
  280. package/dist/types/claude-code-runtime.d.ts +0 -27
  281. package/dist/types/commercial-migration.d.ts +17 -0
  282. package/dist/types/commercial-migration.js +2 -0
  283. package/dist/types/common/primitives.d.ts +0 -2
  284. package/dist/types/core-bridge.d.ts +4 -10
  285. package/dist/types/dashboard.d.ts +3 -7
  286. package/dist/types/docs.d.ts +0 -1
  287. package/dist/types/durable-job.d.ts +4 -4
  288. package/dist/types/durable-validation.d.ts +100 -2
  289. package/dist/types/durable-validation.js +165 -1
  290. package/dist/types/errors/structured-error.d.ts +3 -3
  291. package/dist/types/estimation.d.ts +2 -0
  292. package/dist/types/evidence-gates.d.ts +9 -1
  293. package/dist/types/execution.d.ts +2 -0
  294. package/dist/types/gemini-integration.d.ts +0 -11
  295. package/dist/types/handoff-artifacts.d.ts +41 -0
  296. package/dist/types/hooks-advanced.d.ts +0 -13
  297. package/dist/types/impact-detection.d.ts +2 -2
  298. package/dist/types/index.d.ts +2 -6
  299. package/dist/types/index.js +1 -5
  300. package/dist/types/kiro-integration.d.ts +0 -6
  301. package/dist/types/network-policy.d.ts +1 -1
  302. package/dist/types/project/lint-scaffolder.d.ts +1 -1
  303. package/dist/types/runtime-policy.d.ts +11 -0
  304. package/dist/types/session-safeguard.d.ts +0 -31
  305. package/dist/types/spec/canonical-repair.d.ts +81 -0
  306. package/dist/types/spec/canonical-repair.js +2 -0
  307. package/dist/types/spec/core.d.ts +14 -0
  308. package/dist/types/spec/index.d.ts +1 -0
  309. package/dist/types/spec/index.js +1 -0
  310. package/dist/types/spec/inputs.d.ts +29 -0
  311. package/dist/types/spec-format.d.ts +24 -0
  312. package/dist/types/telemetry.d.ts +4 -1
  313. package/dist/types/transport.d.ts +0 -2
  314. package/dist/types/usage.d.ts +1 -36
  315. package/dist/types/usage.js +1 -1
  316. package/dist/types/validate-worker.d.ts +6 -0
  317. package/dist/types/validation-receipt.d.ts +1 -1
  318. package/dist/types/validation.d.ts +2 -2
  319. package/package.json +16 -12
  320. package/planu-native.json +1 -1
  321. package/planu-plugin.json +23 -40
  322. package/scripts/lib/pending-release-file.mjs +93 -0
  323. package/src/i18n/messages/en.json +0 -41
  324. package/src/i18n/messages/es.json +0 -41
  325. package/src/i18n/messages/pt.json +0 -41
  326. package/dist/cli/commands/activate.d.ts +0 -14
  327. package/dist/cli/commands/activate.js +0 -174
  328. package/dist/config/license-plans.json +0 -251
  329. package/dist/config/product-public.ts +0 -148
  330. package/dist/config/server-instructions.ts +0 -121
  331. package/dist/config/version-defaults.ts +0 -76
  332. package/dist/config/version.ts +0 -21
  333. package/dist/engine/ai-integration/gemini/settings-generator.d.ts +0 -4
  334. package/dist/engine/ai-integration/gemini/settings-generator.js +0 -195
  335. package/dist/engine/ai-integration/kiro/hooks-generator.d.ts +0 -6
  336. package/dist/engine/ai-integration/kiro/hooks-generator.js +0 -75
  337. package/dist/engine/hooks/full-spectrum-generator.d.ts +0 -32
  338. package/dist/engine/hooks/full-spectrum-generator.js +0 -117
  339. package/dist/engine/license-validator/config-loader.d.ts +0 -5
  340. package/dist/engine/license-validator/config-loader.js +0 -16
  341. package/dist/engine/license-validator/core.d.ts +0 -15
  342. package/dist/engine/license-validator/core.js +0 -151
  343. package/dist/engine/license-validator/fingerprint.d.ts +0 -3
  344. package/dist/engine/license-validator/fingerprint.js +0 -17
  345. package/dist/engine/license-validator/lemon-squeezy.d.ts +0 -5
  346. package/dist/engine/license-validator/lemon-squeezy.js +0 -55
  347. package/dist/engine/license-validator.d.ts +0 -5
  348. package/dist/engine/license-validator.js +0 -6
  349. package/dist/engine/product-intelligence/index.d.ts +0 -7
  350. package/dist/engine/product-intelligence/index.js +0 -211
  351. package/dist/engine/session/auto-save.d.ts +0 -18
  352. package/dist/engine/session/auto-save.js +0 -98
  353. package/dist/engine/session/context-snapshot.d.ts +0 -8
  354. package/dist/engine/session/context-snapshot.js +0 -49
  355. package/dist/engine/session/memory-sync.d.ts +0 -12
  356. package/dist/engine/session/memory-sync.js +0 -34
  357. package/dist/engine/session/session-diff.d.ts +0 -11
  358. package/dist/engine/session/session-diff.js +0 -42
  359. package/dist/engine/session/session-merge.d.ts +0 -12
  360. package/dist/engine/session/session-merge.js +0 -55
  361. package/dist/engine/session-safeguard/checkpoint-runner.d.ts +0 -4
  362. package/dist/engine/session-safeguard/checkpoint-runner.js +0 -70
  363. package/dist/engine/session-safeguard/learnings-buffer.d.ts +0 -15
  364. package/dist/engine/session-safeguard/learnings-buffer.js +0 -91
  365. package/dist/engine/session-safeguard/precompaction-drain.d.ts +0 -10
  366. package/dist/engine/session-safeguard/precompaction-drain.js +0 -82
  367. package/dist/engine/session-safeguard/unpushed-detector.d.ts +0 -7
  368. package/dist/engine/session-safeguard/unpushed-detector.js +0 -59
  369. package/dist/engine/spec-changelog/core.d.ts +0 -16
  370. package/dist/engine/spec-changelog/core.js +0 -176
  371. package/dist/engine/spec-changelog/diff.d.ts +0 -18
  372. package/dist/engine/spec-changelog/diff.js +0 -121
  373. package/dist/engine/spec-changelog/index.d.ts +0 -3
  374. package/dist/engine/spec-changelog/index.js +0 -4
  375. package/dist/engine/trial-engine.d.ts +0 -5
  376. package/dist/engine/trial-engine.js +0 -14
  377. package/dist/engine/usage-tracker/rate-check.d.ts +0 -7
  378. package/dist/engine/usage-tracker/rate-check.js +0 -18
  379. package/dist/engine/usage-tracker/rate-limiter.d.ts +0 -14
  380. package/dist/engine/usage-tracker/rate-limiter.js +0 -73
  381. package/dist/engine/usage-tracker/trial.d.ts +0 -27
  382. package/dist/engine/usage-tracker/trial.js +0 -49
  383. package/dist/engine/webhook/event-handlers.d.ts +0 -25
  384. package/dist/engine/webhook/event-handlers.js +0 -89
  385. package/dist/engine/webhook/index.d.ts +0 -4
  386. package/dist/engine/webhook/index.js +0 -5
  387. package/dist/engine/webhook/server.d.ts +0 -12
  388. package/dist/engine/webhook/server.js +0 -249
  389. package/dist/engine/webhook/signature.d.ts +0 -16
  390. package/dist/engine/webhook/signature.js +0 -49
  391. package/dist/storage/license-store.d.ts +0 -6
  392. package/dist/storage/license-store.js +0 -63
  393. package/dist/storage/session-store.d.ts +0 -20
  394. package/dist/storage/session-store.js +0 -136
  395. package/dist/tools/activate-license.d.ts +0 -6
  396. package/dist/tools/activate-license.js +0 -132
  397. package/dist/tools/checkpoint-handler.d.ts +0 -3
  398. package/dist/tools/checkpoint-handler.js +0 -130
  399. package/dist/tools/export-session.d.ts +0 -3
  400. package/dist/tools/export-session.js +0 -90
  401. package/dist/tools/license-gate.d.ts +0 -18
  402. package/dist/tools/license-gate.js +0 -222
  403. package/dist/tools/license-status.d.ts +0 -3
  404. package/dist/tools/license-status.js +0 -93
  405. package/dist/tools/list-sessions.d.ts +0 -3
  406. package/dist/tools/list-sessions.js +0 -46
  407. package/dist/tools/planu-session-checkpoint.d.ts +0 -6
  408. package/dist/tools/planu-session-checkpoint.js +0 -42
  409. package/dist/tools/restore-session.d.ts +0 -3
  410. package/dist/tools/restore-session.js +0 -71
  411. package/dist/tools/spec-history.d.ts +0 -3
  412. package/dist/tools/spec-history.js +0 -59
  413. package/dist/tools/webhook.d.ts +0 -6
  414. package/dist/tools/webhook.js +0 -150
  415. package/dist/types/changelog.d.ts +0 -49
  416. package/dist/types/changelog.js +0 -3
  417. package/dist/types/licensing.d.ts +0 -109
  418. package/dist/types/licensing.js +0 -4
  419. package/dist/types/product-intelligence.d.ts +0 -60
  420. package/dist/types/product-intelligence.js +0 -3
  421. package/dist/types/session.d.ts +0 -84
  422. package/dist/types/session.js +0 -3
  423. package/dist/types/webhook.d.ts +0 -62
  424. package/dist/types/webhook.js +0 -4
@@ -1,4 +1,4 @@
1
1
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare const OFFICIAL_SDD_TOOL_NAMES: readonly ['planu_status', 'facilitate', 'init_project', 'clarify_requirements', 'create_spec', 'list_specs', 'challenge_spec', 'check_readiness', 'update_status', 'update_status_batch', 'package_handoff', 'validate', 'get_job', 'watch_job', 'cancel_job', 'restart_job', 'reconcile_spec', 'create_rule', 'create_skill', 'skill_search', 'configure_code_graph', 'code_graph_status', 'submit_feedback', 'triage_feedback', 'resolve_feedback', 'sync_feedback', 'feedback_status'];
2
+ export { OFFICIAL_SDD_TOOL_NAMES } from './tool-registry/inventory.js';
3
3
  export declare function registerSddTools(server: McpServer): void;
4
4
  //# sourceMappingURL=register-sdd-tools.d.ts.map
@@ -12,35 +12,8 @@ import { handleCreateRule } from './create-rule.js';
12
12
  import { handleCreateSkill } from './create-skill.js';
13
13
  import { handleReconcileUniversalRules } from './reconcile-universal-rules.js';
14
14
  import { registerPrompts } from '../prompts/index.js';
15
- export const OFFICIAL_SDD_TOOL_NAMES = [
16
- 'planu_status',
17
- 'facilitate',
18
- 'init_project',
19
- 'clarify_requirements',
20
- 'create_spec',
21
- 'list_specs',
22
- 'challenge_spec',
23
- 'check_readiness',
24
- 'update_status',
25
- 'update_status_batch',
26
- 'package_handoff',
27
- 'validate',
28
- 'get_job',
29
- 'watch_job',
30
- 'cancel_job',
31
- 'restart_job',
32
- 'reconcile_spec',
33
- 'create_rule',
34
- 'create_skill',
35
- 'skill_search',
36
- 'configure_code_graph',
37
- 'code_graph_status',
38
- 'submit_feedback',
39
- 'triage_feedback',
40
- 'resolve_feedback',
41
- 'sync_feedback',
42
- 'feedback_status',
43
- ];
15
+ import { OFFICIAL_SDD_TOOL_NAMES } from './tool-registry/inventory.js';
16
+ export { OFFICIAL_SDD_TOOL_NAMES } from './tool-registry/inventory.js';
44
17
  const OFFICIAL_SDD_TOOL_SET = new Set(OFFICIAL_SDD_TOOL_NAMES);
45
18
  const noop = () => undefined;
46
19
  const DUMMY_TOOL_SLOT = {
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { t } from '../../i18n/index.js';
3
- import { safeTracked, safeLicensed } from '../safe-handler.js';
3
+ import { safeTracked, safeGoverned } from '../safe-handler.js';
4
4
  import { ChecklistFocusEnum, AuditCategoryEnum, SpecIdSchema } from '../schemas/index.js';
5
5
  import { resolveProjectId, missingProjectIdError } from '../resolve-project-id.js';
6
6
  import { handleDetectDrift } from '../detect-drift.js';
@@ -92,7 +92,7 @@ export function registerAnalysisTools(server) {
92
92
  .optional()
93
93
  .describe('Focus areas for the checklist'),
94
94
  },
95
- }, safeLicensed('generate_checklist', async (args) => {
95
+ }, safeGoverned('generate_checklist', async (args) => {
96
96
  const pid = resolveProjectId(args);
97
97
  if (!pid) {
98
98
  return missingProjectIdError;
@@ -130,7 +130,7 @@ export function registerAnalysisTools(server) {
130
130
  .optional()
131
131
  .describe('Manual changes to apply'),
132
132
  },
133
- }, safeLicensed('reconcile_spec', async (args) => {
133
+ }, safeGoverned('reconcile_spec', async (args) => {
134
134
  const pid = resolveProjectId(args);
135
135
  if (!pid) {
136
136
  return missingProjectIdError;
@@ -178,7 +178,7 @@ export function registerAnalysisTools(server) {
178
178
  .describe('Audit categories to check'),
179
179
  specId: SpecIdSchema.optional().describe('Spec ID to audit against'),
180
180
  },
181
- }, safeLicensed('audit', async (args) => {
181
+ }, safeGoverned('audit', async (args) => {
182
182
  const pid = resolveProjectId(args);
183
183
  if (!pid) {
184
184
  return missingProjectIdError;
@@ -220,7 +220,7 @@ export function registerAnalysisTools(server) {
220
220
  .describe('Path to MCP config file (auto-detected if omitted)'),
221
221
  projectId: z.string().max(500).optional().describe('Project ID'),
222
222
  },
223
- }, safeLicensed('discover_mcps', async (args) => handleDiscoverMcps(args)));
223
+ }, safeGoverned('discover_mcps', async (args) => handleDiscoverMcps(args)));
224
224
  // 19. suggest_mcps
225
225
  server.registerTool('suggest_mcps', {
226
226
  description: t('tools.suggest_mcps.description'),
@@ -233,7 +233,7 @@ export function registerAnalysisTools(server) {
233
233
  .describe('Absolute path to project root. Derives projectId automatically.'),
234
234
  specId: SpecIdSchema.optional().describe('Spec ID for context-specific suggestions'),
235
235
  },
236
- }, safeLicensed('suggest_mcps', async (args) => {
236
+ }, safeGoverned('suggest_mcps', async (args) => {
237
237
  const pid = resolveProjectId(args);
238
238
  if (!pid) {
239
239
  return missingProjectIdError;
@@ -252,7 +252,7 @@ export function registerAnalysisTools(server) {
252
252
  .optional()
253
253
  .describe('Absolute path to project root. Derives projectId automatically.'),
254
254
  },
255
- }, safeLicensed('suggest_mcp_server', async (args) => {
255
+ }, safeGoverned('suggest_mcp_server', async (args) => {
256
256
  const pid = resolveProjectId(args);
257
257
  if (!pid) {
258
258
  return missingProjectIdError;
@@ -321,6 +321,6 @@ export function registerAnalysisTools(server) {
321
321
  .describe('When false (default), done-status specs are skipped (respects SPEC-747 freeze). ' +
322
322
  'Set true to migrate done specs (writes backup to planu/backups/ first).'),
323
323
  },
324
- }, safeLicensed('ssr_back_migration', async (args) => handleSsrBackMigration(args)));
324
+ }, safeGoverned('ssr_back_migration', async (args) => handleSsrBackMigration(args)));
325
325
  }
326
326
  //# sourceMappingURL=analysis-tools.js.map
@@ -1,7 +1,8 @@
1
1
  import { z } from 'zod';
2
2
  import { t } from '../../i18n/index.js';
3
- import { safeTracked, safeLicensed } from '../safe-handler.js';
4
- import { SupportedLocaleEnum, SpecStatusEnum, SpecTypeEnum, SpecScopeEnum, SpecTargetEnum, ExperienceLevelEnum, WorkModeEnum, ListSpecsOutputSchema, EstimateOutputSchema, ValidateOutputSchema, SpecIdSchema, } from '../schemas/index.js';
3
+ import { safeTracked, safeGoverned } from '../safe-handler.js';
4
+ import { SupportedLocaleEnum, SpecStatusEnum, ExperienceLevelEnum, WorkModeEnum, ListSpecsOutputSchema, EstimateOutputSchema, ValidateOutputSchema, SpecIdSchema, } from '../schemas/index.js';
5
+ import { SpecAcFormatEnum, SpecScopeEnum, SpecTargetEnum, SpecTypeEnum } from '../schemas/spec.js';
5
6
  import { handleSetLocale } from '../set-locale.js';
6
7
  import { handleInitProject } from '../init-project.js';
7
8
  import { handleSetWorkMode } from '../set-work-mode-handler.js';
@@ -15,6 +16,7 @@ import { handleEstimate } from '../estimate.js';
15
16
  import { handleReverseEngineer } from '../reverse-engineer.js';
16
17
  import { handleValidate } from '../validate.js';
17
18
  import { handleTypeSafetyGate } from '../type-safety-gate.js';
19
+ import { runWithTrustedLocalMcpContext } from '../../engine/lifecycle-reconciliation.js';
18
20
  /** init_project inputSchema — extracted to keep registerCoreSpecTools within line budget. */
19
21
  const INIT_PROJECT_INPUT_SCHEMA = {
20
22
  projectPath: z.string().max(4096).describe('Absolute path to the project root'),
@@ -216,10 +218,7 @@ export function registerCoreSpecTools(server) {
216
218
  .max(500)
217
219
  .optional()
218
220
  .describe('Feature group tag (e.g. "Authentication", "Billing"). Added to tags for categorization. Flat structure — no subdirectories created.'),
219
- acFormat: z
220
- .enum(['bdd', 'checkbox'])
221
- .optional()
222
- .describe('SPEC-224: Format for acceptance criteria in spec.md. ' +
221
+ acFormat: SpecAcFormatEnum.optional().describe('SPEC-224: Format for acceptance criteria in spec.md. ' +
223
222
  'checkbox (default) — markdown checkboxes (- [ ] criterion). ' +
224
223
  'bdd — Gherkin Given-When-Then scenarios for BDD workflows.'),
225
224
  clarificationAnswers: z
@@ -399,12 +398,22 @@ export function registerCoreSpecTools(server) {
399
398
  .max(2000)
400
399
  .optional()
401
400
  .describe('SPEC-733: Required for reverse transitions (done→implementing, discarded→draft). Must be ≥30 chars explaining why the spec is being reopened.'),
401
+ reconciliationRequestId: z
402
+ .string()
403
+ .regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u)
404
+ .optional()
405
+ .describe('Trusted local MCP only: lowercase UUID idempotency key for implementing to review reconciliation.'),
406
+ expectedImplementingTransitionId: z.string().max(500).optional(),
407
+ implementationReviewDigest: z
408
+ .string()
409
+ .regex(/^sha256:[a-f0-9]{64}$/u)
410
+ .optional(),
402
411
  forceApprove: z
403
412
  .boolean()
404
413
  .optional()
405
414
  .describe('SPEC-769: Force-approve a spec that scored below 70 on the readiness gate. Warnings are stored in spec.md frontmatter. Use when the LLM has explicitly confirmed the spec is ready despite a low readiness score.'),
406
415
  },
407
- }, safeTracked('update_status', async (args) => handleUpdateStatus(args)));
416
+ }, safeTracked('update_status', async (args) => runWithTrustedLocalMcpContext(() => handleUpdateStatus(args))));
408
417
  server.registerTool('update_status_batch', {
409
418
  description: 'Batch update many specs to the same status in one MCP execution. Uses the same transition rules as update_status and reports updated/skipped/failed per spec.',
410
419
  inputSchema: {
@@ -444,7 +453,7 @@ export function registerCoreSpecTools(server) {
444
453
  .optional()
445
454
  .describe('Analysis depth: shallow (fast scan), deep (full file scan), deep-v2 (full scan + test coverage, dependency graph, API detection, complexity metrics, config analysis). Default: shallow'),
446
455
  },
447
- }, safeLicensed('reverse_engineer', async (args) => handleReverseEngineer(args)));
456
+ }, safeGoverned('reverse_engineer', async (args) => handleReverseEngineer(args)));
448
457
  // 10. validate
449
458
  server.registerTool('validate', {
450
459
  description: t('tools.validate.description'),
@@ -30,27 +30,19 @@ export declare function withToolTimeout<T>(p: Promise<T>, ms: number, fallback:
30
30
  * graceful MCP error response, preventing server crashes. Also enforces a
31
31
  * configurable execution timeout (default 55s, env PLANU_TOOL_TIMEOUT_MS).
32
32
  *
33
- * Usage — only for alwaysAllowed tools (activate_license, license_status, etc.):
33
+ * Usage — for infrastructure tools that do not need usage recording:
34
34
  * server.registerTool('my_tool', schema, safe(async (args) => { ... }));
35
35
  */
36
36
  export declare function safe<T>(handler: (args: T, extra?: unknown) => Promise<ToolResult>): (args: T, extra?: unknown) => Promise<ToolResult>;
37
37
  /**
38
- * Composable wrapper: usage tracking + error boundary.
39
- * Use for free-tier tools that need rate limiting and usage recording.
38
+ * Composable wrapper: neutral local usage tracking + error boundary.
40
39
  *
41
40
  * Usage:
42
- * server.registerTool('free_tool', schema, safeTracked('free_tool', async (args) => { ... }));
41
+ * server.registerTool('tracked_tool', schema, safeTracked('tracked_tool', async (args) => { ... }));
43
42
  */
44
43
  export declare function safeTracked<T>(toolName: string, handler: (args: T, extra?: unknown) => Promise<ToolResult>): (args: T, extra?: unknown) => Promise<ToolResult>;
45
44
  /**
46
- * Composable wrapper: usage tracking + license gate + error boundary.
47
- * Use for tools that require a paid plan.
48
- *
49
- * Trial bypass: if the 30-day free trial is active, skips the license gate
50
- * entirely and routes to safeTracked (usage tracking without restriction).
51
- *
52
- * Usage:
53
- * server.registerTool('pro_tool', schema, safeLicensed('pro_tool', async (args) => { ... }));
45
+ * Neutral governed wrapper: engineering budget + local usage + error boundary.
54
46
  */
55
- export declare function safeLicensed<T>(toolName: string, handler: (args: T, extra?: unknown) => Promise<ToolResult>): (args: T, extra?: unknown) => Promise<ToolResult>;
47
+ export declare function safeGoverned<T>(toolName: string, handler: (args: T, extra?: unknown) => Promise<ToolResult>): (args: T, extra?: unknown) => Promise<ToolResult>;
56
48
  //# sourceMappingURL=safe-handler.d.ts.map
@@ -1,8 +1,7 @@
1
1
  // tools/safe-handler.ts — Generic error-boundary wrapper for MCP tool handlers.
2
2
  // Catches any unhandled error and returns a graceful MCP error response
3
3
  // instead of crashing the server. Includes cancellation-aware execution deadlines.
4
- import { withLicenseGate, withUsageTracking } from './license-gate.js';
5
- import { isTrialActive } from '../engine/trial-engine.js';
4
+ import { withUsageTracking } from './usage-tracking.js';
6
5
  import { sanitizePath } from './sanitize-path.js';
7
6
  import { ensureHooksStarted } from './start-hooks.js';
8
7
  import { ensureWorkersStarted } from '../engine/workers/index.js';
@@ -388,7 +387,7 @@ export function withToolTimeout(p, ms, fallback) {
388
387
  * graceful MCP error response, preventing server crashes. Also enforces a
389
388
  * configurable execution timeout (default 55s, env PLANU_TOOL_TIMEOUT_MS).
390
389
  *
391
- * Usage — only for alwaysAllowed tools (activate_license, license_status, etc.):
390
+ * Usage — for infrastructure tools that do not need usage recording:
392
391
  * server.registerTool('my_tool', schema, safe(async (args) => { ... }));
393
392
  */
394
393
  export function safe(handler) {
@@ -616,26 +615,18 @@ function safeWithTelemetry(toolName, handler) {
616
615
  };
617
616
  }
618
617
  /**
619
- * Composable wrapper: usage tracking + error boundary.
620
- * Use for free-tier tools that need rate limiting and usage recording.
618
+ * Composable wrapper: neutral local usage tracking + error boundary.
621
619
  *
622
620
  * Usage:
623
- * server.registerTool('free_tool', schema, safeTracked('free_tool', async (args) => { ... }));
621
+ * server.registerTool('tracked_tool', schema, safeTracked('tracked_tool', async (args) => { ... }));
624
622
  */
625
623
  export function safeTracked(toolName, handler) {
626
624
  return safeWithTelemetry(toolName, withUsageTracking(toolName, handler));
627
625
  }
628
626
  /**
629
- * Composable wrapper: usage tracking + license gate + error boundary.
630
- * Use for tools that require a paid plan.
631
- *
632
- * Trial bypass: if the 30-day free trial is active, skips the license gate
633
- * entirely and routes to safeTracked (usage tracking without restriction).
634
- *
635
- * Usage:
636
- * server.registerTool('pro_tool', schema, safeLicensed('pro_tool', async (args) => { ... }));
627
+ * Neutral governed wrapper: engineering budget + local usage + error boundary.
637
628
  */
638
- export function safeLicensed(toolName, handler) {
629
+ export function safeGoverned(toolName, handler) {
639
630
  return safeWithTelemetry(toolName, async (args, extra) => {
640
631
  // Enforce spec budget limit when specId is present in args (opt-in enforcement)
641
632
  if (args !== null && typeof args === 'object') {
@@ -646,14 +637,7 @@ export function safeLicensed(toolName, handler) {
646
637
  await checkBudgetEnforcement(specId, projectPath);
647
638
  }
648
639
  }
649
- // Check server-backed 30-day trial (fast local read only)
650
- if (process.env.PLANU_SKIP_TRIAL !== 'true') {
651
- const trialActive = isTrialActive(); // always false — trial tools removed
652
- if (trialActive) {
653
- return withUsageTracking(toolName, handler)(args, extra);
654
- }
655
- }
656
- return withUsageTracking(toolName, withLicenseGate(toolName, handler))(args, extra);
640
+ return withUsageTracking(toolName, handler)(args, extra);
657
641
  });
658
642
  }
659
643
  //# sourceMappingURL=safe-handler.js.map
@@ -16,7 +16,7 @@ export { TokenIntelligencePeriodEnum, TokenIntelligenceGroupByEnum, TokenIntelli
16
16
  export { ProjectGraphActionEnum, ProjectGraphQueryKindEnum } from './project-graph.js';
17
17
  export { ConfigureLLMProvidersActionEnum, LoadBalancingStrategyEnum, } from './llm-provider-schemas.js';
18
18
  export { PluginActionEnum } from './plugins-schemas.js';
19
- export { ListSpecsOutputSchema, EstimateOutputSchema, ValidateOutputSchema, CheckReadinessOutputSchema, LicenseStatusOutputSchema, } from './output-schemas.js';
19
+ export { ListSpecsOutputSchema, EstimateOutputSchema, ValidateOutputSchema, CheckReadinessOutputSchema, } from './output-schemas.js';
20
20
  export { CreatePRFromSpecSchema, PRStatusSchema, ReviewPRSchema, CreateReleaseSchema, GenerateChangelogSchema, } from './github.js';
21
21
  export { SkillSearchInputSchema, SkillInstallInputSchema } from './skill-registry-schemas.js';
22
22
  export { EcosystemStatusInputSchema } from './ecosystem-schemas.js';
@@ -17,7 +17,7 @@ export { TokenIntelligencePeriodEnum, TokenIntelligenceGroupByEnum, TokenIntelli
17
17
  export { ProjectGraphActionEnum, ProjectGraphQueryKindEnum } from './project-graph.js';
18
18
  export { ConfigureLLMProvidersActionEnum, LoadBalancingStrategyEnum, } from './llm-provider-schemas.js';
19
19
  export { PluginActionEnum } from './plugins-schemas.js';
20
- export { ListSpecsOutputSchema, EstimateOutputSchema, ValidateOutputSchema, CheckReadinessOutputSchema, LicenseStatusOutputSchema, } from './output-schemas.js';
20
+ export { ListSpecsOutputSchema, EstimateOutputSchema, ValidateOutputSchema, CheckReadinessOutputSchema, } from './output-schemas.js';
21
21
  export { CreatePRFromSpecSchema, PRStatusSchema, ReviewPRSchema, CreateReleaseSchema, GenerateChangelogSchema, } from './github.js';
22
22
  export { SkillSearchInputSchema, SkillInstallInputSchema } from './skill-registry-schemas.js';
23
23
  export { EcosystemStatusInputSchema } from './ecosystem-schemas.js';
@@ -216,27 +216,4 @@ export declare const CheckReadinessOutputSchema: {
216
216
  }, z.core.$strip>>;
217
217
  humanSummary: z.ZodOptional<z.ZodString>;
218
218
  };
219
- export declare const LicenseStatusOutputSchema: {
220
- version: z.ZodString;
221
- plan: z.ZodString;
222
- toolsAvailable: z.ZodNumber;
223
- toolsTotal: z.ZodNumber;
224
- limits: z.ZodObject<{
225
- maxProjects: z.ZodNumber;
226
- currentProjects: z.ZodNumber;
227
- maxActiveSpecs: z.ZodNumber;
228
- }, z.core.$strip>;
229
- customer: z.ZodOptional<z.ZodObject<{
230
- name: z.ZodString;
231
- email: z.ZodString;
232
- variant: z.ZodString;
233
- activatedAt: z.ZodString;
234
- lastValidatedAt: z.ZodString;
235
- }, z.core.$strip>>;
236
- activationSlots: z.ZodOptional<z.ZodObject<{
237
- used: z.ZodNumber;
238
- total: z.ZodNumber;
239
- }, z.core.$strip>>;
240
- upgradeUrl: z.ZodOptional<z.ZodString>;
241
- };
242
219
  //# sourceMappingURL=output-schemas.d.ts.map
@@ -159,32 +159,4 @@ export const CheckReadinessOutputSchema = {
159
159
  .optional(),
160
160
  humanSummary: z.string().optional(),
161
161
  };
162
- // ── license_status ──────────────────────────────────────────────────────────
163
- export const LicenseStatusOutputSchema = {
164
- version: z.string(),
165
- plan: z.string(),
166
- toolsAvailable: z.number(),
167
- toolsTotal: z.number(),
168
- limits: z.object({
169
- maxProjects: z.number(),
170
- currentProjects: z.number(),
171
- maxActiveSpecs: z.number(),
172
- }),
173
- customer: z
174
- .object({
175
- name: z.string(),
176
- email: z.string(),
177
- variant: z.string(),
178
- activatedAt: z.string(),
179
- lastValidatedAt: z.string(),
180
- })
181
- .optional(),
182
- activationSlots: z
183
- .object({
184
- used: z.number(),
185
- total: z.number(),
186
- })
187
- .optional(),
188
- upgradeUrl: z.string().optional(),
189
- };
190
162
  //# sourceMappingURL=output-schemas.js.map
@@ -38,6 +38,10 @@ export declare const SpecTargetEnum: z.ZodEnum<{
38
38
  ios: "ios";
39
39
  shared: "shared";
40
40
  }>;
41
+ export declare const SpecAcFormatEnum: z.ZodEnum<{
42
+ bdd: "bdd";
43
+ checkbox: "checkbox";
44
+ }>;
41
45
  export declare const ExperienceLevelEnum: z.ZodEnum<{
42
46
  beginner: "beginner";
43
47
  expert: "expert";
@@ -31,6 +31,9 @@ export const SpecTargetEnum = z
31
31
  'android',
32
32
  ])
33
33
  .describe('Target area: frontend | backend | shared | fullstack | infrastructure | database | ios | android');
34
+ export const SpecAcFormatEnum = z
35
+ .enum(['bdd', 'checkbox'])
36
+ .describe('Acceptance criteria format: bdd | checkbox');
34
37
  export const ExperienceLevelEnum = z
35
38
  .enum(['beginner', 'intermediate', 'expert'])
36
39
  .describe('Experience level: beginner, intermediate, or expert');
@@ -244,6 +244,17 @@ export declare const ValidateOutputSchema: {
244
244
  }>;
245
245
  submittedAt: z.ZodISODateTime;
246
246
  cursor: z.ZodString;
247
+ queue: z.ZodObject<{
248
+ status: z.ZodEnum<{
249
+ active: "active";
250
+ queued: "queued";
251
+ terminal: "terminal";
252
+ }>;
253
+ position: z.ZodNullable<z.ZodNumber>;
254
+ aheadCount: z.ZodNumber;
255
+ capacity: z.ZodNumber;
256
+ remainingBudgetMs: z.ZodNumber;
257
+ }, z.core.$strip>;
247
258
  terminalStates: z.ZodTuple<[z.ZodLiteral<"completed">, z.ZodLiteral<"failed">, z.ZodLiteral<"cancelled">, z.ZodLiteral<"dead-letter">], null>;
248
259
  resultSchema: z.ZodLiteral<"validate-completion/v1">;
249
260
  observation: z.ZodObject<{
@@ -195,6 +195,13 @@ export const ValidateOutputSchema = {
195
195
  state: z.enum(['accepted', 'running', 'checkpointed']),
196
196
  submittedAt: z.iso.datetime(),
197
197
  cursor: z.string().regex(/^[a-f0-9]{64}$/),
198
+ queue: z.object({
199
+ status: z.enum(['active', 'queued', 'terminal']),
200
+ position: z.number().int().positive().nullable(),
201
+ aheadCount: z.number().int().nonnegative(),
202
+ capacity: z.number().int().positive(),
203
+ remainingBudgetMs: z.number().int().nonnegative(),
204
+ }),
198
205
  terminalStates: z.tuple([
199
206
  z.literal('completed'),
200
207
  z.literal('failed'),
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { safeLicensed } from './safe-handler.js';
2
+ import { safeGoverned } from './safe-handler.js';
3
3
  import { getSpec } from '../storage/spec-store.js';
4
4
  import { hashProjectPath } from '../storage/base-store.js';
5
5
  import { generatePromptFromSpec } from '../engine/spec-prompt-generator.js';
@@ -109,7 +109,7 @@ export function registerSpecPromptHandlers(server) {
109
109
  destructiveHint: false,
110
110
  openWorldHint: false,
111
111
  },
112
- }, safeLicensed('expose_spec_as_prompt', async (args) => handleExposeSpecAsPrompt(args, server)));
112
+ }, safeGoverned('expose_spec_as_prompt', async (args) => handleExposeSpecAsPrompt(args, server)));
113
113
  server.registerTool('list_spec_prompts', {
114
114
  description: 'List all Planu spec prompts registered in the current session. ' +
115
115
  'Returns prompt names, spec IDs, and titles.',
@@ -120,6 +120,6 @@ export function registerSpecPromptHandlers(server) {
120
120
  destructiveHint: false,
121
121
  openWorldHint: false,
122
122
  },
123
- }, safeLicensed('list_spec_prompts', (args) => Promise.resolve(handleListSpecPrompts(args))));
123
+ }, safeGoverned('list_spec_prompts', (args) => Promise.resolve(handleListSpecPrompts(args))));
124
124
  }
125
125
  //# sourceMappingURL=spec-prompt-handler.js.map
@@ -12,7 +12,7 @@ export declare function syncSpecState(projectPath: string, projectId: string): P
12
12
  export declare function startupSync(): Promise<void>;
13
13
  /**
14
14
  * Registers the sync_spec_state tool on the MCP server (SPEC-334).
15
- * Always-on (free) tool — registered directly without safeLicensed.
15
+ * Always-on (free) tool — registered directly without safeGoverned.
16
16
  */
17
17
  export declare function registerSyncSpecStateTool(server: McpServer): void;
18
18
  //# sourceMappingURL=sync-spec-state-handler.d.ts.map
@@ -196,7 +196,7 @@ function formatReport(report, label) {
196
196
  // ---------------------------------------------------------------------------
197
197
  /**
198
198
  * Registers the sync_spec_state tool on the MCP server (SPEC-334).
199
- * Always-on (free) tool — registered directly without safeLicensed.
199
+ * Always-on (free) tool — registered directly without safeGoverned.
200
200
  */
201
201
  export function registerSyncSpecStateTool(server) {
202
202
  server.registerTool('sync_spec_state', {
@@ -29,12 +29,12 @@ export interface ToolEntry {
29
29
  annotations?: Record<string, unknown>;
30
30
  /**
31
31
  * Which safe-handler wrapper to apply.
32
- * - 'tracked' → safeTracked (free tier, usage tracking) [default]
33
- * - 'licensed' → safeLicensed (requires paid plan)
34
- * - 'safe' → safe (no license/tracking — for infra/admin tools)
32
+ * - 'tracked' → safeTracked (local usage tracking) [default]
33
+ * - 'governed' → safeGoverned (engineering budget + local usage)
34
+ * - 'safe' → safe (no usage tracking — for infra/admin tools)
35
35
  * - 'none' → raw handler with no wrapper (rare — test only)
36
36
  */
37
- wrap?: 'tracked' | 'licensed' | 'safe' | 'none';
37
+ wrap?: 'tracked' | 'governed' | 'safe' | 'none';
38
38
  /**
39
39
  * Optional Zod output schema for MCP outputSchema validation.
40
40
  * When provided, passed as `outputSchema` to server.registerTool().
@@ -3,7 +3,7 @@
3
3
  // Phase 1 (refactor/declarative-registry): replaces the register-*-tools.ts boilerplate pattern:
4
4
  // server.registerTool(name, { description, inputSchema, annotations }, safeXxx(name, handler))
5
5
  // with a plain data array that registerFromEntries() consumes.
6
- import { safe, safeTracked, safeLicensed } from './safe-handler.js';
6
+ import { safe, safeGoverned, safeTracked } from './safe-handler.js';
7
7
  // ---------------------------------------------------------------------------
8
8
  // Registration helper
9
9
  // ---------------------------------------------------------------------------
@@ -21,8 +21,8 @@ export function registerFromEntries(server, entries) {
21
21
  if (wrap === 'none') {
22
22
  wrappedHandler = handler;
23
23
  }
24
- else if (wrap === 'licensed') {
25
- wrappedHandler = safeLicensed(name, handler);
24
+ else if (wrap === 'governed') {
25
+ wrappedHandler = safeGoverned(name, handler);
26
26
  }
27
27
  else if (wrap === 'safe') {
28
28
  wrappedHandler = safe(handler);