@planu/cli 4.14.1 → 5.1.1

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 (452) hide show
  1. package/CHANGELOG.md +82 -0
  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 +12 -3
  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 +33 -19
  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 +12 -1
  46. package/dist/engine/evidence-gates/artifact-reader.js +174 -4
  47. package/dist/engine/evidence-gates/evidence-autofill.d.ts +10 -0
  48. package/dist/engine/evidence-gates/evidence-autofill.js +148 -0
  49. package/dist/engine/evidence-gates/evidence-skeletons.d.ts +19 -0
  50. package/dist/engine/evidence-gates/evidence-skeletons.js +69 -0
  51. package/dist/engine/evidence-gates/lifecycle-gate.js +4 -3
  52. package/dist/engine/evidence-gates/reconciliation-freshness.d.ts +11 -0
  53. package/dist/engine/evidence-gates/reconciliation-freshness.js +72 -0
  54. package/dist/engine/evidence-index/done-drift.d.ts +1 -1
  55. package/dist/engine/evidence-index/done-drift.js +40 -18
  56. package/dist/engine/execution/context.js +3 -0
  57. package/dist/engine/execution/durable-job-heartbeat-runtime.d.ts +4 -0
  58. package/dist/engine/execution/durable-job-heartbeat-runtime.js +400 -0
  59. package/dist/engine/execution/job-runtime.d.ts +30 -0
  60. package/dist/engine/execution/job-runtime.js +114 -6
  61. package/dist/engine/execution/operation-journal.js +10 -4
  62. package/dist/engine/execution/public-job-sanitizer.d.ts +4 -0
  63. package/dist/engine/execution/public-job-sanitizer.js +31 -0
  64. package/dist/engine/execution/validate-job-executor.d.ts +12 -1
  65. package/dist/engine/execution/validate-job-executor.js +549 -86
  66. package/dist/engine/execution/validate-job-payload.js +107 -50
  67. package/dist/engine/execution/validate-job-recovery.js +1 -1
  68. package/dist/engine/execution/validate-worker-runtime.d.ts +5 -0
  69. package/dist/engine/execution/validate-worker-runtime.js +90 -2
  70. package/dist/engine/execution/validate-worker-thread.js +17 -24
  71. package/dist/engine/handoff-artifacts/schemas.d.ts +2 -1
  72. package/dist/engine/handoff-artifacts/schemas.js +33 -0
  73. package/dist/engine/handoff-packager.d.ts +19 -0
  74. package/dist/engine/handoff-packager.js +415 -13
  75. package/dist/engine/hooks/effort-configurator.js +1 -1
  76. package/dist/engine/impact-detector/test-break-predictor.js +3 -3
  77. package/dist/engine/impact-detector/tool-registration.js +1 -1
  78. package/dist/engine/implementation-contract/renderer.js +23 -8
  79. package/dist/engine/lifecycle-reconciliation-io.d.ts +11 -0
  80. package/dist/engine/lifecycle-reconciliation-io.js +180 -0
  81. package/dist/engine/lifecycle-reconciliation.d.ts +16 -0
  82. package/dist/engine/lifecycle-reconciliation.js +406 -0
  83. package/dist/engine/local-first/tool-classification.js +2 -0
  84. package/dist/engine/macos-keychain-native-port.d.ts +5 -0
  85. package/dist/engine/macos-keychain-native-port.js +19 -7
  86. package/dist/engine/migrations/remove-commercial-state.d.ts +3 -0
  87. package/dist/engine/migrations/remove-commercial-state.js +343 -0
  88. package/dist/engine/minimality/policy-loader.js +247 -6
  89. package/dist/engine/network-policy.js +1 -0
  90. package/dist/engine/planu-core.darwin-arm64.node.manifest.json +7 -7
  91. package/dist/engine/planu-core.darwin-arm64.node.sbom.json +20 -20
  92. package/dist/engine/planu-core.darwin-x64.node.manifest.json +7 -7
  93. package/dist/engine/planu-core.darwin-x64.node.sbom.json +20 -20
  94. package/dist/engine/planu-core.linux-arm64-gnu.node.manifest.json +7 -7
  95. package/dist/engine/planu-core.linux-arm64-gnu.node.sbom.json +20 -20
  96. package/dist/engine/planu-core.linux-arm64-musl.node.manifest.json +7 -7
  97. package/dist/engine/planu-core.linux-arm64-musl.node.sbom.json +20 -20
  98. package/dist/engine/planu-core.linux-x64-gnu.node.manifest.json +7 -7
  99. package/dist/engine/planu-core.linux-x64-gnu.node.sbom.json +20 -20
  100. package/dist/engine/planu-core.linux-x64-musl.node.manifest.json +7 -7
  101. package/dist/engine/planu-core.linux-x64-musl.node.sbom.json +20 -20
  102. package/dist/engine/planu-core.win32-arm64-msvc.node.manifest.json +7 -7
  103. package/dist/engine/planu-core.win32-arm64-msvc.node.sbom.json +20 -20
  104. package/dist/engine/planu-core.win32-x64-msvc.node.manifest.json +7 -7
  105. package/dist/engine/planu-core.win32-x64-msvc.node.sbom.json +20 -20
  106. package/dist/engine/readiness-checker.d.ts +1 -16
  107. package/dist/engine/readiness-checker.js +27 -88
  108. package/dist/engine/reverse-engineer/api-detector.js +2 -13
  109. package/dist/engine/reverse-engineer/complexity-analyzer.js +2 -13
  110. package/dist/engine/reverse-engineer/config-analyzer.js +2 -13
  111. package/dist/engine/reverse-engineer/dependency-graph.js +2 -13
  112. package/dist/engine/reverse-engineer/test-analyzer.js +2 -13
  113. package/dist/engine/reverse-engineer/walk-ignore.d.ts +3 -0
  114. package/dist/engine/reverse-engineer/walk-ignore.js +26 -0
  115. package/dist/engine/runtime-policy.d.ts +2 -0
  116. package/dist/engine/runtime-policy.js +42 -5
  117. package/dist/engine/runtime-security/rate-limiter.js +0 -1
  118. package/dist/engine/safety/contained-project-file.d.ts +3 -0
  119. package/dist/engine/safety/contained-project-file.js +23 -0
  120. package/dist/engine/scope-boundaries/contradiction-checker.js +63 -1
  121. package/dist/engine/scope-boundaries/scope-validator.js +45 -7
  122. package/dist/engine/session/checkpoint-writer.js +0 -9
  123. package/dist/engine/spec-format/acceptance-criteria.d.ts +6 -2
  124. package/dist/engine/spec-format/acceptance-criteria.js +82 -22
  125. package/dist/engine/spec-format/markdown-sections.d.ts +14 -0
  126. package/dist/engine/spec-format/markdown-sections.js +105 -0
  127. package/dist/engine/spec-format/read-technical-section.js +33 -5
  128. package/dist/engine/spec-format/technical-md-populator.js +3 -2
  129. package/dist/engine/spec-format/text-fences.js +20 -2
  130. package/dist/engine/spec-format/unified-spec-builder.d.ts +7 -0
  131. package/dist/engine/spec-format/unified-spec-builder.js +202 -0
  132. package/dist/engine/spec-migrator/canonical-deduplicator.d.ts +18 -0
  133. package/dist/engine/spec-migrator/canonical-deduplicator.js +479 -0
  134. package/dist/engine/spec-migrator/filesystem-import.d.ts +4 -8
  135. package/dist/engine/spec-migrator/filesystem-import.js +121 -14
  136. package/dist/engine/spec-migrator/frontmatter-parser.js +32 -15
  137. package/dist/engine/spec-migrator/index.d.ts +1 -0
  138. package/dist/engine/spec-migrator/index.js +1 -0
  139. package/dist/engine/spec-state-machine/transition-spec.d.ts +6 -1
  140. package/dist/engine/spec-state-machine/transition-spec.js +10 -1
  141. package/dist/engine/spec-state-syncer.js +1 -1
  142. package/dist/engine/technical-enricher/index.js +16 -8
  143. package/dist/engine/technical-enricher/render-enriched.d.ts +1 -0
  144. package/dist/engine/technical-enricher/render-enriched.js +42 -14
  145. package/dist/engine/telemetry/health-checker.js +53 -17
  146. package/dist/engine/telemetry/telemetry-client.js +26 -8
  147. package/dist/engine/text-signal-boundaries.d.ts +2 -0
  148. package/dist/engine/text-signal-boundaries.js +25 -2
  149. package/dist/engine/time/relative-date.d.ts +3 -0
  150. package/dist/engine/time/relative-date.js +16 -0
  151. package/dist/engine/timing/budget.d.ts +11 -0
  152. package/dist/engine/timing/budget.js +31 -9
  153. package/dist/engine/token-optimizer/analytics.d.ts +1 -1
  154. package/dist/engine/token-optimizer/analytics.js +5 -6
  155. package/dist/engine/usage-tracker/core.d.ts +2 -2
  156. package/dist/engine/usage-tracker/core.js +1 -2
  157. package/dist/engine/usage-tracker/index.d.ts +0 -3
  158. package/dist/engine/usage-tracker/index.js +0 -3
  159. package/dist/engine/usage-tracker/stats.d.ts +2 -2
  160. package/dist/engine/usage-tracker/stats.js +1 -28
  161. package/dist/engine/validation/durable-validation.d.ts +1 -1
  162. package/dist/engine/validation/durable-validation.js +3 -82
  163. package/dist/engine/validation/validation-freshness.d.ts +11 -1
  164. package/dist/engine/validation/validation-freshness.js +231 -91
  165. package/dist/engine/validation/validation-receipt.d.ts +9 -6
  166. package/dist/engine/validation/validation-receipt.js +84 -24
  167. package/dist/engine/validation/validation-source-digest.d.ts +2 -0
  168. package/dist/engine/validation/validation-source-digest.js +86 -0
  169. package/dist/engine/validation/validation-submission.d.ts +5 -4
  170. package/dist/engine/validation/validation-submission.js +25 -11
  171. package/dist/engine/validation/validation-worktree.d.ts +21 -0
  172. package/dist/engine/validation/validation-worktree.js +260 -0
  173. package/dist/engine/validation-impact-planner.d.ts +14 -2
  174. package/dist/engine/validation-impact-planner.js +0 -3
  175. package/dist/engine/validator/dor-dod.d.ts +1 -0
  176. package/dist/engine/validator/dor-dod.js +5 -3
  177. package/dist/engine/validator/extractors.d.ts +1 -5
  178. package/dist/engine/validator/extractors.js +24 -69
  179. package/dist/engine/validator/spec-compliance-runner.d.ts +12 -24
  180. package/dist/engine/validator/spec-compliance-runner.js +429 -211
  181. package/dist/engine/validator.js +35 -22
  182. package/dist/index.js +4 -16
  183. package/dist/resources/usage-stats-resource.js +2 -18
  184. package/dist/security/adapters/linux-secret-service.js +7 -3
  185. package/dist/security/adapters/windows-credential-manager.js +6 -4
  186. package/dist/server/routes/specs.js +13 -1
  187. package/dist/storage/base-store.d.ts +1 -1
  188. package/dist/storage/base-store.js +1 -1
  189. package/dist/storage/feedback-remote.d.ts +2 -3
  190. package/dist/storage/feedback-remote.js +45 -31
  191. package/dist/storage/global-store.d.ts +1 -17
  192. package/dist/storage/global-store.js +1 -42
  193. package/dist/storage/index.d.ts +0 -2
  194. package/dist/storage/index.js +0 -2
  195. package/dist/storage/migrations/canonical-storage.js +124 -11
  196. package/dist/storage/runtime-db.d.ts +9 -0
  197. package/dist/storage/runtime-db.js +64 -8
  198. package/dist/storage/spec-store.d.ts +14 -2
  199. package/dist/storage/spec-store.js +104 -14
  200. package/dist/storage/status-store/atomic-status-write.d.ts +5 -0
  201. package/dist/storage/status-store/atomic-status-write.js +57 -0
  202. package/dist/storage/status-store/file-lock.js +30 -11
  203. package/dist/storage/status-store/self-healing.js +3 -3
  204. package/dist/storage/status-store/version-sync.d.ts +2 -1
  205. package/dist/storage/status-store/version-sync.js +35 -40
  206. package/dist/storage/usage-store.d.ts +1 -5
  207. package/dist/storage/usage-store.js +0 -35
  208. package/dist/tools/auto-update-handler.d.ts +3 -3
  209. package/dist/tools/auto-update-handler.js +3 -3
  210. package/dist/tools/challenge-spec/resilience-challenge-scenarios.d.ts +2 -1
  211. package/dist/tools/challenge-spec/resilience-challenge-scenarios.js +10 -7
  212. package/dist/tools/challenge-spec/scenario-collector.js +1 -1
  213. package/dist/tools/challenge-spec/scenarios-data.js +1 -1
  214. package/dist/tools/challenge-spec/scenarios-utils.d.ts +1 -1
  215. package/dist/tools/challenge-spec/scenarios-utils.js +35 -11
  216. package/dist/tools/challenge-spec-helpers.d.ts +10 -1
  217. package/dist/tools/challenge-spec-helpers.js +63 -22
  218. package/dist/tools/challenge-spec.js +23 -8
  219. package/dist/tools/check-readiness.js +38 -14
  220. package/dist/tools/configure-telemetry.js +30 -2
  221. package/dist/tools/create-spec/spec-builder.d.ts +7 -0
  222. package/dist/tools/create-spec/spec-builder.js +19 -15
  223. package/dist/tools/create-spec.d.ts +1 -0
  224. package/dist/tools/create-spec.js +584 -309
  225. package/dist/tools/git/branch-ops.d.ts +1 -1
  226. package/dist/tools/git/branch-ops.js +3 -2
  227. package/dist/tools/init-project/handler.js +10 -12
  228. package/dist/tools/init-project/host-assets-writer.js +26 -1
  229. package/dist/tools/init-project/lint-scaffolder.d.ts +3 -3
  230. package/dist/tools/init-project/migration-runner.d.ts +2 -4
  231. package/dist/tools/init-project/migration-runner.js +3 -2
  232. package/dist/tools/init-project/portable-index-reconciler.d.ts +4 -0
  233. package/dist/tools/init-project/portable-index-reconciler.js +14 -0
  234. package/dist/tools/init-project/result-builder.js +1 -3
  235. package/dist/tools/jobs/handlers.js +38 -6
  236. package/dist/tools/list-specs.js +5 -26
  237. package/dist/tools/merge-risk-handler.js +2 -2
  238. package/dist/tools/package-handoff.js +2 -0
  239. package/dist/tools/reconcile-spec.js +0 -27
  240. package/dist/tools/register-agent-squad-tools.js +2 -2
  241. package/dist/tools/register-platform-tools/design-stack-tools.js +11 -11
  242. package/dist/tools/register-platform-tools/lifecycle-infra-tools.js +7 -7
  243. package/dist/tools/register-sdd-tools.d.ts +1 -1
  244. package/dist/tools/register-sdd-tools.js +2 -29
  245. package/dist/tools/register-spec-tools/analysis-tools.js +8 -8
  246. package/dist/tools/register-spec-tools/core-spec-tools.js +29 -19
  247. package/dist/tools/safe-handler.d.ts +5 -13
  248. package/dist/tools/safe-handler.js +7 -23
  249. package/dist/tools/schemas/index.d.ts +1 -1
  250. package/dist/tools/schemas/index.js +1 -1
  251. package/dist/tools/schemas/output-schemas.d.ts +0 -23
  252. package/dist/tools/schemas/output-schemas.js +0 -28
  253. package/dist/tools/schemas/spec.d.ts +4 -0
  254. package/dist/tools/schemas/spec.js +3 -0
  255. package/dist/tools/schemas/validate-output-schema.d.ts +11 -0
  256. package/dist/tools/schemas/validate-output-schema.js +7 -0
  257. package/dist/tools/spec-prompt-handler.js +3 -3
  258. package/dist/tools/sync-spec-state-handler.d.ts +1 -1
  259. package/dist/tools/sync-spec-state-handler.js +50 -2
  260. package/dist/tools/tool-entry.d.ts +4 -4
  261. package/dist/tools/tool-entry.js +3 -3
  262. package/dist/tools/tool-registry/core-tools.js +31 -15
  263. package/dist/tools/tool-registry/group-infra.js +27 -110
  264. package/dist/tools/tool-registry/group-quality-compliance.js +26 -26
  265. package/dist/tools/tool-registry/inventory.d.ts +2 -0
  266. package/dist/tools/tool-registry/inventory.js +2 -0
  267. package/dist/tools/tool-registry-helpers.d.ts +3 -3
  268. package/dist/tools/tool-registry-helpers.js +3 -3
  269. package/dist/tools/tool-usage-report/registered-tools.d.ts +1 -1
  270. package/dist/tools/tool-usage-report/registered-tools.js +3 -15
  271. package/dist/tools/update-status/approval-gates.js +3 -0
  272. package/dist/tools/update-status/batch.d.ts +6 -2
  273. package/dist/tools/update-status/batch.js +58 -1
  274. package/dist/tools/update-status/dod-gates.d.ts +16 -1
  275. package/dist/tools/update-status/dod-gates.js +191 -1
  276. package/dist/tools/update-status/done-receipt-verifier.d.ts +8 -0
  277. package/dist/tools/update-status/done-receipt-verifier.js +75 -27
  278. package/dist/tools/update-status/evidence-gate.d.ts +4 -0
  279. package/dist/tools/update-status/evidence-gate.js +103 -3
  280. package/dist/tools/update-status/file-sync.d.ts +4 -3
  281. package/dist/tools/update-status/file-sync.js +57 -6
  282. package/dist/tools/update-status/index.d.ts +25 -1
  283. package/dist/tools/update-status/index.js +292 -78
  284. package/dist/tools/update-status/response-builder.js +3 -3
  285. package/dist/tools/update-status/side-effects.d.ts +2 -0
  286. package/dist/tools/update-status/side-effects.js +2 -2
  287. package/dist/tools/update-status/transition-guard.js +45 -16
  288. package/dist/tools/update-status-actions.d.ts +4 -2
  289. package/dist/tools/update-status-actions.js +16 -14
  290. package/dist/tools/usage-report.js +1 -16
  291. package/dist/tools/usage-stats.js +1 -18
  292. package/dist/tools/usage-tracking.d.ts +4 -0
  293. package/dist/tools/usage-tracking.js +20 -0
  294. package/dist/tools/validate-lint.d.ts +1 -0
  295. package/dist/tools/validate-lint.js +1 -1
  296. package/dist/tools/validate.d.ts +2 -1
  297. package/dist/tools/validate.js +114 -34
  298. package/dist/tools/workspace-dashboard-handler.js +38 -0
  299. package/dist/transports/http-transport.js +6 -8
  300. package/dist/transports/mcp-types.d.ts +0 -2
  301. package/dist/transports/session-context.js +1 -1
  302. package/dist/types/cascade-hooks.d.ts +1 -1
  303. package/dist/types/ci.d.ts +0 -4
  304. package/dist/types/clarification-token.d.ts +1 -1
  305. package/dist/types/claude-code-runtime.d.ts +0 -27
  306. package/dist/types/commercial-migration.d.ts +17 -0
  307. package/dist/types/commercial-migration.js +2 -0
  308. package/dist/types/common/primitives.d.ts +0 -2
  309. package/dist/types/core-bridge.d.ts +4 -10
  310. package/dist/types/dashboard.d.ts +3 -7
  311. package/dist/types/docs.d.ts +0 -1
  312. package/dist/types/durable-job.d.ts +4 -4
  313. package/dist/types/durable-validation.d.ts +100 -2
  314. package/dist/types/durable-validation.js +165 -1
  315. package/dist/types/errors/structured-error.d.ts +3 -3
  316. package/dist/types/estimation.d.ts +2 -0
  317. package/dist/types/evidence-autofill.d.ts +34 -0
  318. package/dist/types/evidence-autofill.js +2 -0
  319. package/dist/types/evidence-gates.d.ts +9 -1
  320. package/dist/types/execution.d.ts +2 -0
  321. package/dist/types/gemini-integration.d.ts +0 -11
  322. package/dist/types/handoff-artifacts.d.ts +41 -0
  323. package/dist/types/hooks-advanced.d.ts +0 -13
  324. package/dist/types/impact-detection.d.ts +2 -2
  325. package/dist/types/index.d.ts +3 -6
  326. package/dist/types/index.js +2 -5
  327. package/dist/types/kiro-integration.d.ts +0 -6
  328. package/dist/types/network-policy.d.ts +1 -1
  329. package/dist/types/project/lint-scaffolder.d.ts +1 -1
  330. package/dist/types/runtime-policy.d.ts +11 -0
  331. package/dist/types/session-safeguard.d.ts +0 -31
  332. package/dist/types/spec/canonical-repair.d.ts +81 -0
  333. package/dist/types/spec/canonical-repair.js +2 -0
  334. package/dist/types/spec/core.d.ts +20 -0
  335. package/dist/types/spec/index.d.ts +1 -0
  336. package/dist/types/spec/index.js +1 -0
  337. package/dist/types/spec/inputs.d.ts +35 -1
  338. package/dist/types/spec-format.d.ts +25 -1
  339. package/dist/types/telemetry.d.ts +4 -1
  340. package/dist/types/transition-log.d.ts +1 -1
  341. package/dist/types/transport.d.ts +0 -2
  342. package/dist/types/usage.d.ts +1 -36
  343. package/dist/types/usage.js +1 -1
  344. package/dist/types/validate-worker.d.ts +6 -0
  345. package/dist/types/validation-receipt.d.ts +1 -1
  346. package/dist/types/validation.d.ts +10 -4
  347. package/package.json +17 -12
  348. package/planu-native.json +1 -1
  349. package/planu-plugin.json +23 -40
  350. package/scripts/lib/pending-release-file.mjs +93 -0
  351. package/src/i18n/messages/en.json +0 -41
  352. package/src/i18n/messages/es.json +0 -41
  353. package/src/i18n/messages/pt.json +0 -41
  354. package/dist/cli/commands/activate.d.ts +0 -14
  355. package/dist/cli/commands/activate.js +0 -174
  356. package/dist/config/license-plans.json +0 -251
  357. package/dist/config/product-public.ts +0 -148
  358. package/dist/config/server-instructions.ts +0 -121
  359. package/dist/config/version-defaults.ts +0 -76
  360. package/dist/config/version.ts +0 -21
  361. package/dist/engine/ai-integration/gemini/settings-generator.d.ts +0 -4
  362. package/dist/engine/ai-integration/gemini/settings-generator.js +0 -195
  363. package/dist/engine/ai-integration/kiro/hooks-generator.d.ts +0 -6
  364. package/dist/engine/ai-integration/kiro/hooks-generator.js +0 -75
  365. package/dist/engine/hooks/full-spectrum-generator.d.ts +0 -32
  366. package/dist/engine/hooks/full-spectrum-generator.js +0 -117
  367. package/dist/engine/license-validator/config-loader.d.ts +0 -5
  368. package/dist/engine/license-validator/config-loader.js +0 -16
  369. package/dist/engine/license-validator/core.d.ts +0 -15
  370. package/dist/engine/license-validator/core.js +0 -151
  371. package/dist/engine/license-validator/fingerprint.d.ts +0 -3
  372. package/dist/engine/license-validator/fingerprint.js +0 -17
  373. package/dist/engine/license-validator/lemon-squeezy.d.ts +0 -5
  374. package/dist/engine/license-validator/lemon-squeezy.js +0 -55
  375. package/dist/engine/license-validator.d.ts +0 -5
  376. package/dist/engine/license-validator.js +0 -6
  377. package/dist/engine/product-intelligence/index.d.ts +0 -7
  378. package/dist/engine/product-intelligence/index.js +0 -211
  379. package/dist/engine/session/auto-save.d.ts +0 -18
  380. package/dist/engine/session/auto-save.js +0 -98
  381. package/dist/engine/session/context-snapshot.d.ts +0 -8
  382. package/dist/engine/session/context-snapshot.js +0 -49
  383. package/dist/engine/session/memory-sync.d.ts +0 -12
  384. package/dist/engine/session/memory-sync.js +0 -34
  385. package/dist/engine/session/session-diff.d.ts +0 -11
  386. package/dist/engine/session/session-diff.js +0 -42
  387. package/dist/engine/session/session-merge.d.ts +0 -12
  388. package/dist/engine/session/session-merge.js +0 -55
  389. package/dist/engine/session-safeguard/checkpoint-runner.d.ts +0 -4
  390. package/dist/engine/session-safeguard/checkpoint-runner.js +0 -70
  391. package/dist/engine/session-safeguard/learnings-buffer.d.ts +0 -15
  392. package/dist/engine/session-safeguard/learnings-buffer.js +0 -91
  393. package/dist/engine/session-safeguard/precompaction-drain.d.ts +0 -10
  394. package/dist/engine/session-safeguard/precompaction-drain.js +0 -82
  395. package/dist/engine/session-safeguard/unpushed-detector.d.ts +0 -7
  396. package/dist/engine/session-safeguard/unpushed-detector.js +0 -59
  397. package/dist/engine/spec-changelog/core.d.ts +0 -16
  398. package/dist/engine/spec-changelog/core.js +0 -176
  399. package/dist/engine/spec-changelog/diff.d.ts +0 -18
  400. package/dist/engine/spec-changelog/diff.js +0 -121
  401. package/dist/engine/spec-changelog/index.d.ts +0 -3
  402. package/dist/engine/spec-changelog/index.js +0 -4
  403. package/dist/engine/trial-engine.d.ts +0 -5
  404. package/dist/engine/trial-engine.js +0 -14
  405. package/dist/engine/usage-tracker/rate-check.d.ts +0 -7
  406. package/dist/engine/usage-tracker/rate-check.js +0 -18
  407. package/dist/engine/usage-tracker/rate-limiter.d.ts +0 -14
  408. package/dist/engine/usage-tracker/rate-limiter.js +0 -73
  409. package/dist/engine/usage-tracker/trial.d.ts +0 -27
  410. package/dist/engine/usage-tracker/trial.js +0 -49
  411. package/dist/engine/webhook/event-handlers.d.ts +0 -25
  412. package/dist/engine/webhook/event-handlers.js +0 -89
  413. package/dist/engine/webhook/index.d.ts +0 -4
  414. package/dist/engine/webhook/index.js +0 -5
  415. package/dist/engine/webhook/server.d.ts +0 -12
  416. package/dist/engine/webhook/server.js +0 -249
  417. package/dist/engine/webhook/signature.d.ts +0 -16
  418. package/dist/engine/webhook/signature.js +0 -49
  419. package/dist/storage/license-store.d.ts +0 -6
  420. package/dist/storage/license-store.js +0 -63
  421. package/dist/storage/session-store.d.ts +0 -20
  422. package/dist/storage/session-store.js +0 -136
  423. package/dist/tools/activate-license.d.ts +0 -6
  424. package/dist/tools/activate-license.js +0 -132
  425. package/dist/tools/checkpoint-handler.d.ts +0 -3
  426. package/dist/tools/checkpoint-handler.js +0 -130
  427. package/dist/tools/export-session.d.ts +0 -3
  428. package/dist/tools/export-session.js +0 -90
  429. package/dist/tools/license-gate.d.ts +0 -18
  430. package/dist/tools/license-gate.js +0 -222
  431. package/dist/tools/license-status.d.ts +0 -3
  432. package/dist/tools/license-status.js +0 -93
  433. package/dist/tools/list-sessions.d.ts +0 -3
  434. package/dist/tools/list-sessions.js +0 -46
  435. package/dist/tools/planu-session-checkpoint.d.ts +0 -6
  436. package/dist/tools/planu-session-checkpoint.js +0 -42
  437. package/dist/tools/restore-session.d.ts +0 -3
  438. package/dist/tools/restore-session.js +0 -71
  439. package/dist/tools/spec-history.d.ts +0 -3
  440. package/dist/tools/spec-history.js +0 -59
  441. package/dist/tools/webhook.d.ts +0 -6
  442. package/dist/tools/webhook.js +0 -150
  443. package/dist/types/changelog.d.ts +0 -49
  444. package/dist/types/changelog.js +0 -3
  445. package/dist/types/licensing.d.ts +0 -109
  446. package/dist/types/licensing.js +0 -4
  447. package/dist/types/product-intelligence.d.ts +0 -60
  448. package/dist/types/product-intelligence.js +0 -3
  449. package/dist/types/session.d.ts +0 -84
  450. package/dist/types/session.js +0 -3
  451. package/dist/types/webhook.d.ts +0 -62
  452. package/dist/types/webhook.js +0 -4
package/CHANGELOG.md CHANGED
@@ -1,3 +1,85 @@
1
+ ## [5.1.1] - 2026-08-04
2
+
3
+ ### Bug Fixes
4
+ - fix(release-harness): resolve published artifact from staged repack when publish has no tarball argv
5
+ - fix(release): stop CLI-guard stdout pollution, npm view array probe, and tarball-path publish leak
6
+
7
+
8
+ ## [5.1.0] - 2026-08-04
9
+
10
+ ### Features
11
+ - feat(lifecycle): automate done evidence pipeline end to end
12
+
13
+ ### Bug Fixes
14
+ - fix(update-status): make typed failure explicit at dod-gates catch sites
15
+ - fix(deps): patch hono, fast-uri, ip-address, and undici advisories via overrides
16
+ - fix(evidence-gates): derive contract example kinds from filenames
17
+ - fix(reverse-engineer): share walk-ignore list and add fast release-gate test lane
18
+ - fix(challenge): suppress ungrounded concurrency boilerplate in challenge_spec
19
+ - fix(update-status): report per-spec failure reasons in batch results
20
+ - fix(create-spec): guarantee spec.md write before reporting persisted
21
+ - fix(create-spec): release idempotency claim when create_spec fails before commit
22
+ - fix(release): accept npm 12 pack metadata
23
+ - fix(deps): patch transitive security advisories
24
+ - fix(privacy): redact minimality policy locators
25
+ - fix(lifecycle): route review evidence by target
26
+ - fix(readiness): unify canonical validation evidence
27
+
28
+ ### Chores
29
+ - chore(pnpm): disable modules purge confirmation for non-TTY automation
30
+ - chore(planu): session checkpoint before release
31
+ - chore(planu): close SPEC-1350 lifecycle state
32
+ - chore(planu): hand off freshness blocker
33
+ - chore(planu): checkpoint release handoff
34
+ - chore(planu): preserve native engine review state
35
+ - chore(planu): persist delayed challenge evidence
36
+ - chore(planu): recover delayed audit specs
37
+ - chore(planu): capture lifecycle dogfood failures
38
+ - chore(planu): persist release remediation handoffs
39
+ - chore(planu): approve final release blockers
40
+ - chore(planu): start dependency security remediation
41
+ - chore(planu): approve final security remediation
42
+ - chore(planu): checkpoint final release remediations
43
+ - chore(planu): start lifecycle routing implementation
44
+ - chore(planu): approve lifecycle routing remediation
45
+ - chore(planu): checkpoint release remediation specs
46
+ - chore(planu): track v5 release dogfood regressions
47
+
48
+
49
+ ## [5.0.0] - 2026-07-31
50
+
51
+ ### Breaking Changes
52
+
53
+ - Removed Planu commercial plans, license activation, trials, project/spec
54
+ limits, daily commercial quotas, and the Lemon Squeezy entitlement surface.
55
+ - All local tools are available without payment under the Planu Proprietary
56
+ Free-Use License. The official unmodified package may be used commercially or
57
+ non-commercially with unlimited users and instances; the repository and
58
+ TypeScript implementation remain private and proprietary.
59
+ - Removed the public license commands, entitlement fields, environment
60
+ variables, and tier-based tool metadata. Consumers must remove those obsolete
61
+ fields instead of relying on compatibility aliases.
62
+ - Removed the orphaned `product-intelligence` public types and embedded
63
+ telemetry/feedback project endpoints and credentials. Telemetry delivery now
64
+ requires explicit `PLANU_TELEMETRY_ENDPOINT` and `PLANU_TELEMETRY_TOKEN`
65
+ configuration; remote feedback requires `PLANU_FEEDBACK_ENDPOINT`.
66
+
67
+ ### Security and Distribution
68
+
69
+ - Preserved engineering budgets, hosted authentication and authorization,
70
+ transport abuse controls, dependency-license auditing, model pricing, runtime
71
+ timeouts, local usage health, and generic outbound webhooks.
72
+ - Added narrow, idempotent cleanup for obsolete commercial state and a forward
73
+ Supabase migration that removes trial data without rewriting migration history.
74
+ - Hardened npm packaging to allow public `.d.ts` declarations while rejecting
75
+ implementation `.ts`, source maps, embedded sources, personal paths, and
76
+ personal identity metadata.
77
+
78
+ ### Community
79
+
80
+ - Kept direct BTC, ETH, and SOL donations, sponsorship channels, testimonials,
81
+ and the disabled-until-configured newsletter contract.
82
+
1
83
  ## [4.14.1] - 2026-07-29
2
84
 
3
85
  ### Bug Fixes
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';
@@ -30,13 +30,14 @@ function printSpecSubcommandHelp() {
30
30
  ` ${'list'.padEnd(10)} ${dim('List specs [--status draft|approved|done...]')}`,
31
31
  ` ${'show'.padEnd(10)} ${dim('Show spec details (SPEC-NNN)')}`,
32
32
  ` ${'status'.padEnd(10)} ${dim('Update spec status (SPEC-NNN <status>)')}`,
33
+ ` ${''.padEnd(10)} ${dim('Batch targets: draft|review|approved|implementing|discarded')}`,
33
34
  ` ${'validate'.padEnd(10)} ${dim('Validate a spec against its codebase')}`,
34
35
  '',
35
36
  cyan('Examples:'),
36
37
  ` planu spec create "Add login flow"`,
37
38
  ` planu spec list --status approved`,
38
39
  ` planu spec show SPEC-001`,
39
- ` planu spec status SPEC-001 done`,
40
+ ` planu spec status SPEC-001 done --implementation-review-digest sha256:<64-hex>`,
40
41
  ` planu spec validate SPEC-001`,
41
42
  ];
42
43
  process.stdout.write(lines.join('\n') + '\n');
@@ -60,7 +61,7 @@ async function runValidate(args, flags) {
60
61
  return;
61
62
  }
62
63
  const projectId = values['project-id'] ?? detectProjectId();
63
- const result = await handleValidate({ specId, projectId });
64
+ const result = await handleValidate({ specId, projectId, projectPath: process.cwd() });
64
65
  if (result.isError) {
65
66
  process.stderr.write(`${red(formatToolResult(result, flags))}\n`);
66
67
  process.exitCode = 1;
@@ -207,6 +208,7 @@ async function runShow(args, flags) {
207
208
  // ---------------------------------------------------------------------------
208
209
  // Subcommand: spec status
209
210
  // ---------------------------------------------------------------------------
211
+ // eslint-disable-next-line complexity -- batch done requires an explicit pre-resolution fail-closed branch
210
212
  async function runStatus(args, flags) {
211
213
  const { positionals, values } = parseArgs({
212
214
  args,
@@ -215,6 +217,7 @@ async function runStatus(args, flags) {
215
217
  notes: { type: 'string', short: 'n' },
216
218
  batch: { type: 'boolean' },
217
219
  set: { type: 'string', short: 's' },
220
+ 'implementation-review-digest': { type: 'string' },
218
221
  },
219
222
  strict: false,
220
223
  allowPositionals: true,
@@ -232,6 +235,11 @@ async function runStatus(args, flags) {
232
235
  process.exitCode = 1;
233
236
  return;
234
237
  }
238
+ if (batch && status === 'done') {
239
+ process.stderr.write(`${red('BATCH_DONE_UNSUPPORTED:')} Close specs individually with update_status(done) and full implementation review evidence.\n`);
240
+ process.exitCode = 1;
241
+ return;
242
+ }
235
243
  const projectId = values['project-id'] ?? detectProjectId();
236
244
  if (batch) {
237
245
  const result = await handleUpdateStatusBatch({
@@ -253,6 +261,7 @@ async function runStatus(args, flags) {
253
261
  projectId,
254
262
  status: status,
255
263
  reviewNotes: values.notes ?? undefined,
264
+ implementationReviewDigest: values['implementation-review-digest'] ?? undefined,
256
265
  });
257
266
  if (result.isError) {
258
267
  process.stderr.write(`${red(formatToolResult(result, flags))}\n`);
@@ -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