@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
package/CHANGELOG.md CHANGED
@@ -1,3 +1,37 @@
1
+ ## [5.0.0] - 2026-07-31
2
+
3
+ ### Breaking Changes
4
+
5
+ - Removed Planu commercial plans, license activation, trials, project/spec
6
+ limits, daily commercial quotas, and the Lemon Squeezy entitlement surface.
7
+ - All local tools are available without payment under the Planu Proprietary
8
+ Free-Use License. The official unmodified package may be used commercially or
9
+ non-commercially with unlimited users and instances; the repository and
10
+ TypeScript implementation remain private and proprietary.
11
+ - Removed the public license commands, entitlement fields, environment
12
+ variables, and tier-based tool metadata. Consumers must remove those obsolete
13
+ fields instead of relying on compatibility aliases.
14
+ - Removed the orphaned `product-intelligence` public types and embedded
15
+ telemetry/feedback project endpoints and credentials. Telemetry delivery now
16
+ requires explicit `PLANU_TELEMETRY_ENDPOINT` and `PLANU_TELEMETRY_TOKEN`
17
+ configuration; remote feedback requires `PLANU_FEEDBACK_ENDPOINT`.
18
+
19
+ ### Security and Distribution
20
+
21
+ - Preserved engineering budgets, hosted authentication and authorization,
22
+ transport abuse controls, dependency-license auditing, model pricing, runtime
23
+ timeouts, local usage health, and generic outbound webhooks.
24
+ - Added narrow, idempotent cleanup for obsolete commercial state and a forward
25
+ Supabase migration that removes trial data without rewriting migration history.
26
+ - Hardened npm packaging to allow public `.d.ts` declarations while rejecting
27
+ implementation `.ts`, source maps, embedded sources, personal paths, and
28
+ personal identity metadata.
29
+
30
+ ### Community
31
+
32
+ - Kept direct BTC, ETH, and SOL donations, sponsorship channels, testimonials,
33
+ and the disabled-until-configured newsletter contract.
34
+
1
35
  ## [4.14.1] - 2026-07-29
2
36
 
3
37
  ### Bug Fixes
@@ -4474,4 +4508,4 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) · Versioning:
4474
4508
  - Mermaid diagram generation (architecture, sequence, state machine, ER, data flow)
4475
4509
  - Multi-language i18n (EN/ES/PT) for generated specs
4476
4510
  - Clean Architecture (hexagonal) — engine, tools, storage, types layers
4477
- - 10,857 tests with ≥95% coverage
4511
+ - 10,857 tests with ≥95% coverage
package/LICENSE CHANGED
@@ -1,16 +1,59 @@
1
+ Planu Proprietary Free-Use License 1.0
2
+
1
3
  Copyright (c) 2026 Planu. All rights reserved.
2
4
 
3
- This software and associated documentation files (the "Software") are the
4
- proprietary property of Planu. Unauthorized copying, modification, distribution,
5
- or use of this Software, in whole or in part, is strictly prohibited without
6
- prior written permission from the copyright holder.
5
+ 1. Definitions
6
+
7
+ "Official Package" means an unmodified Planu executable package made available
8
+ by Planu through an authorized package registry or distribution channel. It
9
+ includes the JavaScript runtime, native binaries, public type declarations,
10
+ documentation, and other files intentionally included in that package.
11
+
12
+ 2. Free-use grant
13
+
14
+ Subject to this license, Planu grants you a worldwide, royalty-free,
15
+ non-exclusive, non-transferable license to install and execute Official
16
+ Packages for commercial and non-commercial purposes, with no limit on users,
17
+ projects, installations, or instances. You may make the internal copies
18
+ reasonably necessary for npm installation, package caches, CI, containers,
19
+ deployment, disaster recovery, and backups. Those copies must remain
20
+ unmodified, be used only by you or your organization, and retain this license
21
+ and all proprietary notices.
22
+
23
+ 3. Proprietary ownership and restrictions
24
+
25
+ Planu and its licensors retain all right, title, and interest in the software,
26
+ repository, implementation source code, and derivative works. This license
27
+ does not grant source-code access or any open-source rights. Except where
28
+ applicable law expressly prevents the restriction, you may not:
29
+
30
+ - publish, disclose, sell, sublicense, or provide Planu implementation source;
31
+ - modify, adapt, translate, reverse engineer, decompile, or create derivative
32
+ builds from an Official Package;
33
+ - remove or alter copyright, license, attribution, or proprietary notices;
34
+ - repackage, mirror, resell, sublicense, or publicly redistribute an Official
35
+ Package or a derived build; or
36
+ - use Planu trademarks to imply endorsement or authorship of another product.
37
+
38
+ Planu may separately authorize redistribution or modification in writing.
39
+
40
+ 4. Third-party components
41
+
42
+ Third-party components remain subject to their own license terms. Those terms
43
+ do not change the proprietary status of Planu's original implementation.
44
+
45
+ 5. Termination
46
+
47
+ This license terminates automatically if you breach it. On termination, you
48
+ must stop using Planu and delete copies under your control, except archival
49
+ copies that applicable law requires you to retain.
50
+
51
+ 6. Disclaimer and limitation of liability
7
52
 
8
- The Software is provided "as is", without warranty of any kind, express or
9
- implied, including but not limited to the warranties of merchantability,
10
- fitness for a particular purpose, and noninfringement. In no event shall the
11
- authors or copyright holders be liable for any claim, damages, or other
12
- liability, whether in an action of contract, tort, or otherwise, arising from,
13
- out of, or in connection with the Software or the use or other dealings in the
14
- Software.
53
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
54
+ IMPLIED, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
55
+ NONINFRINGEMENT. TO THE MAXIMUM EXTENT PERMITTED BY LAW, PLANU AND ITS AUTHORS
56
+ OR COPYRIGHT HOLDERS ARE NOT LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY
57
+ ARISING FROM OR RELATED TO THE SOFTWARE OR ITS USE.
15
58
 
16
- For licensing inquiries, contact: hello@planu.dev
59
+ For permissions beyond this license, contact hello@planu.dev.
package/README.md CHANGED
@@ -21,7 +21,7 @@ Planu is a Spec Driven Development stack for AI coding agents: an MCP server and
21
21
  - **Local change detection** — observes project changes without requiring a hosted configuration service.
22
22
  - **Unified Spec Format** — Requirements and technical details in a single, context-efficient `spec.md`.
23
23
  - **Atomic Integrity** — Indestructible writes and **Freeze-on-done** immutability (P0).
24
- - **27 official MCP tools** for the public SDD surface, with advanced workflows kept in skills, CLI commands, and internal pipelines.
24
+ - **28 official MCP tools** for the public SDD surface, with advanced workflows kept in skills, CLI commands, and internal pipelines.
25
25
  - **Multi-agent compatible** — Optimized for Claude Code, Cursor, Windsurf, and Gemini CLI.
26
26
 
27
27
  ---
@@ -126,4 +126,12 @@ pnpm release:local # Local-first release flow when shipping
126
126
 
127
127
  ## License
128
128
 
129
- Planu is proprietary software. See the [license terms](LICENSE) for permitted use and distribution restrictions.
129
+ Planu is proprietary, free-use software. The official unmodified package may be
130
+ installed and executed without payment for commercial and non-commercial work,
131
+ with unlimited users and instances. Internal copies needed for npm caches, CI,
132
+ containers, deployment, and backups are permitted. The repository and
133
+ TypeScript implementation sources remain private; modification, repackaging,
134
+ derived builds, and public redistribution are restricted. Distributed
135
+ JavaScript remains readable and is not represented as secret.
136
+
137
+ See the [Planu Proprietary Free-Use License](LICENSE) for the complete terms.
@@ -1,9 +1,4 @@
1
1
  import type { CliCommand } from '../../types/cli.js';
2
- export interface LicenseActivationResult {
3
- key: string;
4
- customerEmail: string;
5
- variantName: string;
6
- }
7
2
  interface McpEntry {
8
3
  command: string;
9
4
  args: string[];
@@ -46,7 +41,7 @@ export interface InstallationManifest {
46
41
  updatedAt: string;
47
42
  installations: InstallationRecord[];
48
43
  }
49
- declare function buildMcpEntry(_licenseKey?: string): McpEntry;
44
+ declare function buildMcpEntry(): McpEntry;
50
45
  declare function readJsonFile(filePath: string): ToolConfig;
51
46
  declare function hasPlanuEntry(config: ToolConfig, format: ToolDefinition['format']): boolean;
52
47
  export declare function readInstallationManifest(manifestPath: string): InstallationManifest;
@@ -55,12 +50,6 @@ export declare function removeInstallationRecords(manifestPath: string, removedC
55
50
  declare function writeStandardEntry(filePath: string, entry: McpEntry): void;
56
51
  declare function writeZedEntry(filePath: string, entry: McpEntry): void;
57
52
  declare function removeEntry(filePath: string, format: ToolDefinition['format']): void;
58
- /**
59
- * Prompt the user for a license key and activate it.
60
- * Returns the activation result or null if the user skips.
61
- * In CI/headless mode (SDD_OWNER_TOKEN already set), returns a synthetic result immediately.
62
- */
63
- export declare function promptLicense(): Promise<LicenseActivationResult | null>;
64
53
  export { buildMcpEntry, readJsonFile, hasPlanuEntry, writeStandardEntry, writeZedEntry, removeEntry, };
65
54
  export declare const installCommand: CliCommand;
66
55
  //# sourceMappingURL=install.d.ts.map
@@ -5,9 +5,9 @@ import { homedir } from 'node:os';
5
5
  import { dirname, isAbsolute, join } from 'node:path';
6
6
  import { bold, cyan, green, yellow, dim } from '../colors.js';
7
7
  import { PLANU_VERSION } from '../../config/version.js';
8
- import { confirm, select, ask } from '../interactive.js';
9
- import { activateLicense } from '../../engine/license-validator.js';
8
+ import { confirm, select } from '../interactive.js';
10
9
  import { resolveStorageLayout } from '../../storage/storage-layout.js';
10
+ import { removeCommercialState } from '../../engine/migrations/remove-commercial-state.js';
11
11
  // ---------------------------------------------------------------------------
12
12
  // Constants
13
13
  // ---------------------------------------------------------------------------
@@ -66,7 +66,7 @@ const TOOLS = [
66
66
  // ---------------------------------------------------------------------------
67
67
  // Helpers
68
68
  // ---------------------------------------------------------------------------
69
- function buildMcpEntry(_licenseKey) {
69
+ function buildMcpEntry() {
70
70
  const offline = process.env.PLANU_OFFLINE === '1';
71
71
  return {
72
72
  command: 'npx',
@@ -243,61 +243,6 @@ function removeEntry(filePath, format) {
243
243
  : removePlanuFromStandard(config);
244
244
  writeJsonAtomically(filePath, updated);
245
245
  }
246
- // ---------------------------------------------------------------------------
247
- // License step helper (exported for tests)
248
- // ---------------------------------------------------------------------------
249
- /**
250
- * Prompt the user for a license key and activate it.
251
- * Returns the activation result or null if the user skips.
252
- * In CI/headless mode (SDD_OWNER_TOKEN already set), returns a synthetic result immediately.
253
- */
254
- export async function promptLicense() {
255
- // Headless / CI mode: use token from environment directly
256
- const envToken = process.env.SDD_OWNER_TOKEN;
257
- if (envToken) {
258
- return { key: envToken, customerEmail: '', variantName: 'Pro' };
259
- }
260
- if (process.env.PLANU_OFFLINE === '1') {
261
- return null;
262
- }
263
- const wantsLicense = await confirm('Do you have a Pro license key?', false);
264
- if (!wantsLicense) {
265
- return null;
266
- }
267
- const key = await ask('Enter your license key:');
268
- if (!key) {
269
- return null;
270
- }
271
- process.stdout.write(`${dim('Validating license key...')}\n`);
272
- try {
273
- const result = await activateLicense(key, 'planu-cli');
274
- if (!result.activated) {
275
- const errMsg = result.error ?? 'Invalid license key';
276
- process.stdout.write(`${yellow('!')} License validation failed: ${errMsg}\n`);
277
- const continueWithout = await confirm('Continue without license?', true);
278
- if (!continueWithout) {
279
- throw new Error('Aborted by user after license validation failure');
280
- }
281
- return null;
282
- }
283
- const email = result.meta.customer_email;
284
- const variant = result.meta.variant_name;
285
- process.stdout.write(`${green('+')} Pro license — ${email}\n`);
286
- return { key, customerEmail: email, variantName: variant };
287
- }
288
- catch (err) {
289
- if (err instanceof Error && err.message.startsWith('Aborted')) {
290
- throw err;
291
- }
292
- const msg = err instanceof Error ? err.message : String(err);
293
- process.stdout.write(`${yellow('!')} License API error: ${msg}\n`);
294
- const continueWithout = await confirm('Continue without license?', true);
295
- if (!continueWithout) {
296
- throw new Error('Aborted by user after license API error', { cause: err });
297
- }
298
- return null;
299
- }
300
- }
301
246
  // Exported so tests can use them without going through the interactive CLI
302
247
  export { buildMcpEntry, readJsonFile, hasPlanuEntry, writeStandardEntry, writeZedEntry, removeEntry, };
303
248
  // ---------------------------------------------------------------------------
@@ -372,8 +317,8 @@ async function resolveTargets(detected, installAll) {
372
317
  }
373
318
  return detected.filter((t) => t.name === choice);
374
319
  }
375
- async function installToPath(tool, targetPath, scope, quiet, licenseKey) {
376
- const entry = buildMcpEntry(licenseKey);
320
+ async function installToPath(tool, targetPath, scope, quiet) {
321
+ const entry = buildMcpEntry();
377
322
  const targetExisted = existsSync(targetPath);
378
323
  const previousContent = targetExisted ? readFileSync(targetPath, 'utf8') : null;
379
324
  let existingConfig = {};
@@ -455,6 +400,9 @@ export const installCommand = {
455
400
  installAll = true;
456
401
  }
457
402
  }
403
+ await removeCommercialState({
404
+ hostConfigPaths: TOOLS.flatMap((tool) => tool.projectScopePath ? [tool.userScopePath, tool.projectScopePath] : [tool.userScopePath]),
405
+ });
458
406
  printBanner();
459
407
  // Detect installed tools (user-scope paths)
460
408
  const detected = [];
@@ -486,10 +434,6 @@ export const installCommand = {
486
434
  }
487
435
  const scope = await resolveScope(scopeArg);
488
436
  const targets = await resolveTargets(detected, installAll);
489
- // License step — prompt or read from env
490
- process.stdout.write('\n');
491
- const license = await promptLicense();
492
- const licenseKey = license?.key;
493
437
  process.stdout.write(`\n${cyan('Installing...')}\n`);
494
438
  let installed = 0;
495
439
  for (const tool of targets) {
@@ -504,7 +448,7 @@ export const installCommand = {
504
448
  else {
505
449
  targetPath = tool.userScopePath;
506
450
  }
507
- const ok = await installToPath(tool, targetPath, scope, quiet, licenseKey);
451
+ const ok = await installToPath(tool, targetPath, scope, quiet);
508
452
  if (ok) {
509
453
  installed++;
510
454
  }
@@ -51,7 +51,7 @@ var __disposeResources = (this && this.__disposeResources) || (function (Suppres
51
51
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
52
52
  });
53
53
  import { parseArgs } from 'node:util';
54
- import { durableJobCursor, DurableJobRuntime } from '../../engine/execution/job-runtime.js';
54
+ import { publicJobCursor, DurableJobRuntime } from '../../engine/execution/job-runtime.js';
55
55
  const USAGE = 'planu job <get|watch|cancel> --operation-id ID --project-id ID [--workspace-id ID] [--after-cursor CURSOR] [--timeout-ms N] [--json]';
56
56
  export const jobCommand = {
57
57
  name: 'job',
@@ -86,7 +86,7 @@ export const jobCommand = {
86
86
  workspaceId: values['workspace-id'],
87
87
  };
88
88
  const runtime = __addDisposableResource(env_1, new DurableJobRuntime(), false);
89
- const job = action === 'cancel'
89
+ const internalJob = action === 'cancel'
90
90
  ? runtime.cancel(identity)
91
91
  : action === 'watch'
92
92
  ? await runtime.watch({
@@ -95,7 +95,8 @@ export const jobCommand = {
95
95
  timeoutMs: parseTimeout(values['timeout-ms']),
96
96
  })
97
97
  : runtime.get(identity);
98
- process.stdout.write(`${JSON.stringify({ job, cursor: durableJobCursor(job) }, null, flags?.json === true || values.json === true ? undefined : 2)}\n`);
98
+ const job = runtime.observe(internalJob);
99
+ process.stdout.write(`${JSON.stringify({ job, cursor: publicJobCursor(job) }, null, flags?.json === true || values.json === true ? undefined : 2)}\n`);
99
100
  }
100
101
  catch (e_1) {
101
102
  env_1.error = e_1;
@@ -12,7 +12,7 @@ import { handleCreateSpec } from '../../tools/create-spec.js';
12
12
  import { handleListSpecs } from '../../tools/list-specs.js';
13
13
  import { handleUpdateStatus } from '../../tools/update-status.js';
14
14
  import { handleUpdateStatusBatch } from '../../tools/update-status/batch.js';
15
- import { executeValidate as handleValidate } from '../../tools/validate.js';
15
+ import { handleValidate } from '../../tools/validate.js';
16
16
  import { formatToolResult } from '../formatter.js';
17
17
  import { detectProjectId } from '../project-detector.js';
18
18
  import { bold, cyan, green, red, dim } from '../colors.js';
@@ -60,7 +60,7 @@ async function runValidate(args, flags) {
60
60
  return;
61
61
  }
62
62
  const projectId = values['project-id'] ?? detectProjectId();
63
- const result = await handleValidate({ specId, projectId });
63
+ const result = await handleValidate({ specId, projectId, projectPath: process.cwd() });
64
64
  if (result.isError) {
65
65
  process.stderr.write(`${red(formatToolResult(result, flags))}\n`);
66
66
  process.exitCode = 1;
@@ -1,6 +1,6 @@
1
1
  // cli/commands/validate.ts — planu validate <specId> (SPEC-124)
2
2
  import { parseArgs } from 'node:util';
3
- import { executeValidate as handleValidate } from '../../tools/validate.js';
3
+ import { handleValidate } from '../../tools/validate.js';
4
4
  import { formatToolResult } from '../formatter.js';
5
5
  import { detectProjectId } from '../project-detector.js';
6
6
  import { red } from '../colors.js';
@@ -24,7 +24,7 @@ export const validateCommand = {
24
24
  return;
25
25
  }
26
26
  const projectId = values['project-id'] ?? detectProjectId();
27
- const result = await handleValidate({ specId, projectId });
27
+ const result = await handleValidate({ specId, projectId, projectPath: process.cwd() });
28
28
  if (result.isError) {
29
29
  process.stderr.write(`${red(formatToolResult(result, flags))}\n`);
30
30
  process.exitCode = 1;
@@ -4,7 +4,7 @@ import { PLANU_VERSION } from '../config/version.js';
4
4
  import { red, bold, cyan, dim } from './colors.js';
5
5
  // Lazy-load commands to avoid importing tool handlers when not needed
6
6
  async function loadCommands() {
7
- const [{ initCommand }, { createCommand }, { listCommand }, { statusCommand }, { estimateCommand }, { validateCommand }, { dashboardCommand }, { auditCommand }, { serveCommand }, { handoffCommand }, { watchCommand }, { installCommand }, { doctorCommand }, { uninstallCommand }, { activateCommand }, { specCommand }, { healthCommand }, { releaseCommand }, { storageCommand }, { inspectCommand }, { offlineCommand }, { jobCommand },] = await Promise.all([
7
+ const [{ initCommand }, { createCommand }, { listCommand }, { statusCommand }, { estimateCommand }, { validateCommand }, { dashboardCommand }, { auditCommand }, { serveCommand }, { handoffCommand }, { watchCommand }, { installCommand }, { doctorCommand }, { uninstallCommand }, { specCommand }, { healthCommand }, { releaseCommand }, { storageCommand }, { inspectCommand }, { offlineCommand }, { jobCommand },] = await Promise.all([
8
8
  import('./commands/init.js'),
9
9
  import('./commands/create.js'),
10
10
  import('./commands/list.js'),
@@ -19,7 +19,6 @@ async function loadCommands() {
19
19
  import('./commands/install.js'),
20
20
  import('./commands/doctor.js'),
21
21
  import('./commands/uninstall.js'),
22
- import('./commands/activate.js'),
23
22
  import('./commands/spec.js'),
24
23
  import('./commands/health.js'),
25
24
  import('./commands/release.js'),
@@ -43,7 +42,6 @@ async function loadCommands() {
43
42
  installCommand,
44
43
  doctorCommand,
45
44
  uninstallCommand,
46
- activateCommand,
47
45
  specCommand,
48
46
  healthCommand,
49
47
  releaseCommand,
@@ -101,9 +101,6 @@
101
101
  { "name": "PLANU_SAGA_CHAOS", "type": "string", "scope": "test", "sensitivity": "public", "default": null },
102
102
  { "name": "PLANU_SESSION_BUDGET", "type": "number", "scope": "runtime", "sensitivity": "private", "default": null },
103
103
  { "name": "PLANU_SESSION_ID", "type": "string", "scope": "runtime", "sensitivity": "private", "default": null },
104
- { "name": "PLANU_SKIP_TRIAL", "type": "boolean", "scope": "runtime", "sensitivity": "public", "default": null },
105
- { "name": "PLANU_SUPABASE_KEY", "type": "string", "scope": "runtime", "sensitivity": "secret", "default": null },
106
- { "name": "PLANU_SUPABASE_URL", "type": "string", "scope": "runtime", "sensitivity": "public", "default": null },
107
104
  {
108
105
  "name": "PLANU_SUPPRESS_AUTOCOMMIT",
109
106
  "type": "boolean",
@@ -126,6 +123,7 @@
126
123
  "sensitivity": "public",
127
124
  "default": null
128
125
  },
126
+ { "name": "PLANU_TELEMETRY_TOKEN", "type": "string", "scope": "runtime", "sensitivity": "secret", "default": null },
129
127
  { "name": "PLANU_TIMING", "type": "boolean", "scope": "runtime", "sensitivity": "public", "default": null },
130
128
  { "name": "PLANU_TOOL_TIMEOUT_MS", "type": "number", "scope": "runtime", "sensitivity": "public", "default": null },
131
129
  {
@@ -0,0 +1,4 @@
1
+ /** Single editable authority for the official local SDD tool surface. */
2
+ export declare const OFFICIAL_SDD_TOOL_NAMES: readonly ['planu_status', 'session_checkpoint', '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'];
3
+ export declare function readCanonicalToolNames(): string[];
4
+ //# sourceMappingURL=official-sdd-tools.d.ts.map
@@ -0,0 +1,35 @@
1
+ /** Single editable authority for the official local SDD tool surface. */
2
+ export const OFFICIAL_SDD_TOOL_NAMES = [
3
+ 'planu_status',
4
+ 'session_checkpoint',
5
+ 'facilitate',
6
+ 'init_project',
7
+ 'clarify_requirements',
8
+ 'create_spec',
9
+ 'list_specs',
10
+ 'challenge_spec',
11
+ 'check_readiness',
12
+ 'update_status',
13
+ 'update_status_batch',
14
+ 'package_handoff',
15
+ 'validate',
16
+ 'get_job',
17
+ 'watch_job',
18
+ 'cancel_job',
19
+ 'restart_job',
20
+ 'reconcile_spec',
21
+ 'create_rule',
22
+ 'create_skill',
23
+ 'skill_search',
24
+ 'configure_code_graph',
25
+ 'code_graph_status',
26
+ 'submit_feedback',
27
+ 'triage_feedback',
28
+ 'resolve_feedback',
29
+ 'sync_feedback',
30
+ 'feedback_status',
31
+ ];
32
+ export function readCanonicalToolNames() {
33
+ return [...OFFICIAL_SDD_TOOL_NAMES];
34
+ }
35
+ //# sourceMappingURL=official-sdd-tools.js.map
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import type { ProductPublicManifest } from '../types/product-public.js';
3
- export declare const productPublicSchema: z.ZodObject<{
3
+ export declare const productPublicSchema: z.ZodPipe<z.ZodObject<{
4
4
  schemaVersion: z.ZodLiteral<1>;
5
5
  website: z.ZodObject<{
6
6
  baseUrl: z.ZodURL;
@@ -75,14 +75,150 @@ export declare const productPublicSchema: z.ZodObject<{
75
75
  }, z.core.$strict>>;
76
76
  claims: z.ZodObject<{
77
77
  installCommand: z.ZodString;
78
- publicToolInventory: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodString]>>;
79
78
  registryReadmeBaseline: z.ZodObject<{
80
79
  package: z.ZodLiteral<"@planu/cli">;
81
80
  version: z.ZodString;
82
81
  sha256: z.ZodString;
83
82
  }, z.core.$strict>;
84
83
  }, z.core.$strict>;
85
- }, z.core.$strict>;
84
+ }, z.core.$strict>, z.ZodTransform<{
85
+ schemaVersion: 1;
86
+ website: {
87
+ baseUrl: string;
88
+ defaultLocale: string;
89
+ theme: {
90
+ defaultAppearance: "system";
91
+ allowUserToggle: boolean;
92
+ };
93
+ disabledRouteSegments: string[];
94
+ locales: {
95
+ id: string;
96
+ contentLocale: "de" | "en" | "es" | "fr" | "pt" | "zh";
97
+ label: string;
98
+ lang: string;
99
+ hreflang: string;
100
+ ogLocale: string;
101
+ nav: {
102
+ text: string;
103
+ path: string;
104
+ }[];
105
+ chrome: {
106
+ footerLead: string;
107
+ support: string;
108
+ changelog: string;
109
+ reportBug: string;
110
+ appearance: string;
111
+ lightTheme: string;
112
+ darkTheme: string;
113
+ sidebar: string;
114
+ top: string;
115
+ language: string;
116
+ skip: string;
117
+ outline: string;
118
+ previous: string;
119
+ next: string;
120
+ search: string;
121
+ noResults: string;
122
+ };
123
+ }[];
124
+ newsletter: {
125
+ enabled: boolean;
126
+ provider: "none";
127
+ signupUrl: string | null;
128
+ };
129
+ sponsors: {
130
+ enabled: boolean;
131
+ pagePath: string;
132
+ githubUrl: string;
133
+ contactEmail: string;
134
+ };
135
+ };
136
+ donations: {
137
+ id: "btc" | "eth" | "sol";
138
+ symbol: string;
139
+ network: string;
140
+ address: string;
141
+ qrPath: string;
142
+ walletUri: string | null;
143
+ }[];
144
+ claims: {
145
+ installCommand: string;
146
+ registryReadmeBaseline: {
147
+ package: "@planu/cli";
148
+ version: string;
149
+ sha256: string;
150
+ };
151
+ publicToolInventory: string[];
152
+ };
153
+ }, {
154
+ schemaVersion: 1;
155
+ website: {
156
+ baseUrl: string;
157
+ defaultLocale: string;
158
+ theme: {
159
+ defaultAppearance: "system";
160
+ allowUserToggle: boolean;
161
+ };
162
+ disabledRouteSegments: string[];
163
+ locales: {
164
+ id: string;
165
+ contentLocale: "de" | "en" | "es" | "fr" | "pt" | "zh";
166
+ label: string;
167
+ lang: string;
168
+ hreflang: string;
169
+ ogLocale: string;
170
+ nav: {
171
+ text: string;
172
+ path: string;
173
+ }[];
174
+ chrome: {
175
+ footerLead: string;
176
+ support: string;
177
+ changelog: string;
178
+ reportBug: string;
179
+ appearance: string;
180
+ lightTheme: string;
181
+ darkTheme: string;
182
+ sidebar: string;
183
+ top: string;
184
+ language: string;
185
+ skip: string;
186
+ outline: string;
187
+ previous: string;
188
+ next: string;
189
+ search: string;
190
+ noResults: string;
191
+ };
192
+ }[];
193
+ newsletter: {
194
+ enabled: boolean;
195
+ provider: "none";
196
+ signupUrl: string | null;
197
+ };
198
+ sponsors: {
199
+ enabled: boolean;
200
+ pagePath: string;
201
+ githubUrl: string;
202
+ contactEmail: string;
203
+ };
204
+ };
205
+ donations: {
206
+ id: "btc" | "eth" | "sol";
207
+ symbol: string;
208
+ network: string;
209
+ address: string;
210
+ qrPath: string;
211
+ walletUri: string | null;
212
+ }[];
213
+ claims: {
214
+ installCommand: string;
215
+ registryReadmeBaseline: {
216
+ package: "@planu/cli";
217
+ version: string;
218
+ sha256: string;
219
+ };
220
+ };
221
+ }>>;
86
222
  export declare function parseProductPublicManifest(input: unknown): ProductPublicManifest;
87
223
  export declare function getProductPublicManifest(): ProductPublicManifest;
88
224
  export declare const productPublic: ProductPublicManifest;
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import rawProductPublic from './product-public.json' with { type: 'json' };
3
+ import { readCanonicalToolNames } from './official-sdd-tools.js';
3
4
  const nonBlank = z.string().trim().min(1).max(512);
4
5
  const pathSegment = z.string().regex(/^[A-Za-z0-9-]+$/u);
5
6
  const navItemSchema = z.object({ text: nonBlank, path: nonBlank }).strict();
@@ -81,7 +82,6 @@ export const productPublicSchema = z
81
82
  claims: z
82
83
  .object({
83
84
  installCommand: nonBlank,
84
- publicToolInventory: z.array(pathSegment.or(z.string().regex(/^[a-z][a-z0-9_]+$/u))).min(1),
85
85
  registryReadmeBaseline: z
86
86
  .object({
87
87
  package: z.literal('@planu/cli'),
@@ -93,6 +93,13 @@ export const productPublicSchema = z
93
93
  .strict(),
94
94
  })
95
95
  .strict()
96
+ .transform((value) => ({
97
+ ...value,
98
+ claims: {
99
+ ...value.claims,
100
+ publicToolInventory: readCanonicalToolNames(),
101
+ },
102
+ }))
96
103
  .superRefine((value, context) => {
97
104
  const localeIds = value.website.locales.map(({ id }) => id);
98
105
  const donationIds = value.donations.map(({ id }) => id);