@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
@@ -41,7 +41,7 @@ function average(nums) {
41
41
  return nums.reduce((s, n) => s + n, 0) / nums.length;
42
42
  }
43
43
  function daysInCalendarMonth(year, month) {
44
- return new Date(year, month, 0).getDate(); // month is 1-based here
44
+ return new Date(Date.UTC(year, month, 0)).getUTCDate(); // month is 1-based here
45
45
  }
46
46
  // ---------------------------------------------------------------------------
47
47
  // aggregateEntries
@@ -262,12 +262,11 @@ export function detectAnomalies(entries, dailyBreakdown) {
262
262
  // ---------------------------------------------------------------------------
263
263
  // computeBudgetStatus
264
264
  // ---------------------------------------------------------------------------
265
- export function computeBudgetStatus(entries, config) {
266
- const now = new Date();
267
- const year = now.getFullYear();
268
- const month = now.getMonth() + 1; // 1-based
265
+ export function computeBudgetStatus(entries, config, now = new Date()) {
266
+ const year = now.getUTCFullYear();
267
+ const month = now.getUTCMonth() + 1; // 1-based
269
268
  const daysInMonth = daysInCalendarMonth(year, month);
270
- const daysElapsed = now.getDate();
269
+ const daysElapsed = now.getUTCDate();
271
270
  // Current month filter
272
271
  const monthPrefix = `${year}-${String(month).padStart(2, '0')}`;
273
272
  const monthEntries = entries.filter((e) => e.timestamp.startsWith(monthPrefix));
@@ -1,8 +1,8 @@
1
- import type { UsageEvent, PricingTier } from '../../types/index.js';
1
+ import type { UsageEvent } from '../../types/index.js';
2
2
  /**
3
3
  * Creates a new UsageEvent object. Does NOT persist — that is storage's job.
4
4
  */
5
- export declare function recordUsageEvent(toolName: string, tier: PricingTier, success: boolean): UsageEvent;
5
+ export declare function recordUsageEvent(toolName: string, success: boolean): UsageEvent;
6
6
  /**
7
7
  * Returns events within the specified time period relative to now.
8
8
  * 'all' returns the full array unchanged.
@@ -6,10 +6,9 @@
6
6
  /**
7
7
  * Creates a new UsageEvent object. Does NOT persist — that is storage's job.
8
8
  */
9
- export function recordUsageEvent(toolName, tier, success) {
9
+ export function recordUsageEvent(toolName, success) {
10
10
  return {
11
11
  toolName,
12
- tier,
13
12
  timestamp: new Date().toISOString(),
14
13
  success,
15
14
  };
@@ -1,6 +1,3 @@
1
1
  export { recordUsageEvent, filterEventsByPeriod, countEventsForDate, getLastEventTimestamp, } from './core.js';
2
2
  export { calculateUsageStats, formatStatsAsMarkdown } from './stats.js';
3
- export { TRIAL_DAYS, calculateDaysSinceFirstRun, isTrialActive, trialDaysRemaining, getTrialLimits, } from './trial.js';
4
- export { COOLDOWN_MS, checkDailyLimit, checkCooldown } from './rate-limiter.js';
5
- export { evaluateRateLimit } from './rate-check.js';
6
3
  //# sourceMappingURL=index.d.ts.map
@@ -1,7 +1,4 @@
1
1
  // engine/usage-tracker/index.ts — Barrel re-export for usage-tracker engine module.
2
2
  export { recordUsageEvent, filterEventsByPeriod, countEventsForDate, getLastEventTimestamp, } from './core.js';
3
3
  export { calculateUsageStats, formatStatsAsMarkdown } from './stats.js';
4
- export { TRIAL_DAYS, calculateDaysSinceFirstRun, isTrialActive, trialDaysRemaining, getTrialLimits, } from './trial.js';
5
- export { COOLDOWN_MS, checkDailyLimit, checkCooldown } from './rate-limiter.js';
6
- export { evaluateRateLimit } from './rate-check.js';
7
4
  //# sourceMappingURL=index.js.map
@@ -1,9 +1,9 @@
1
- import type { UsageEvent, UsageStats, ToolHealthEntry, PricingTier } from '../../types/index.js';
1
+ import type { UsageEvent, UsageStats, ToolHealthEntry } from '../../types/index.js';
2
2
  /**
3
3
  * Computes full UsageStats from a set of events and runtime context.
4
4
  * All parameters are passed in — no I/O performed here.
5
5
  */
6
- export declare function calculateUsageStats(events: readonly UsageEvent[], activeSpecs: number, activeProjects: number, currentTier: PricingTier, daysSinceFirstRun: number, isTrialActive: boolean, remainingDailyCalls: number): UsageStats;
6
+ export declare function calculateUsageStats(events: readonly UsageEvent[], activeSpecs: number, activeProjects: number): UsageStats;
7
7
  export declare function buildToolHealthBreakdown(events: readonly UsageEvent[], allKnownTools?: readonly string[]): {
8
8
  breakdown: ToolHealthEntry[];
9
9
  deadTools: string[];
@@ -6,26 +6,19 @@
6
6
  * Computes full UsageStats from a set of events and runtime context.
7
7
  * All parameters are passed in — no I/O performed here.
8
8
  */
9
- export function calculateUsageStats(events, activeSpecs, activeProjects, currentTier, daysSinceFirstRun, isTrialActive, remainingDailyCalls) {
9
+ export function calculateUsageStats(events, activeSpecs, activeProjects) {
10
10
  const callsByTool = {};
11
- const callsByTier = {};
12
11
  for (const event of events) {
13
12
  callsByTool[event.toolName] = (callsByTool[event.toolName] ?? 0) + 1;
14
- callsByTier[event.tier] = (callsByTier[event.tier] ?? 0) + 1;
15
13
  }
16
14
  const topTools = buildTopTools(callsByTool, 10);
17
15
  const { breakdown: toolHealthBreakdown, deadTools } = buildToolHealthBreakdown(events);
18
16
  return {
19
17
  totalCalls: events.length,
20
18
  callsByTool,
21
- callsByTier,
22
19
  topTools,
23
20
  activeSpecs,
24
21
  activeProjects,
25
- currentTier,
26
- daysSinceFirstRun,
27
- isTrialActive,
28
- remainingDailyCalls,
29
22
  toolHealthBreakdown,
30
23
  deadTools,
31
24
  };
@@ -82,15 +75,9 @@ export function formatStatsAsMarkdown(stats) {
82
75
  const lines = [];
83
76
  lines.push('## Usage Statistics');
84
77
  lines.push('');
85
- lines.push(`**Tier:** ${stats.currentTier}`);
86
- lines.push(`**Days since first run:** ${String(stats.daysSinceFirstRun)}`);
87
- lines.push(`**Trial active:** ${stats.isTrialActive ? 'Yes' : 'No'}`);
88
78
  lines.push(`**Total calls:** ${String(stats.totalCalls)}`);
89
79
  lines.push(`**Active specs:** ${String(stats.activeSpecs)}`);
90
80
  lines.push(`**Active projects:** ${String(stats.activeProjects)}`);
91
- if (stats.remainingDailyCalls >= 0) {
92
- lines.push(`**Remaining daily calls:** ${String(stats.remainingDailyCalls)}`);
93
- }
94
81
  lines.push('');
95
82
  lines.push('### Top Tools');
96
83
  lines.push('');
@@ -125,20 +112,6 @@ export function formatStatsAsMarkdown(stats) {
125
112
  lines.push(`- ${tool}`);
126
113
  }
127
114
  }
128
- lines.push('');
129
- lines.push('### Calls by Tier');
130
- lines.push('');
131
- lines.push('| Tier | Calls |');
132
- lines.push('|------|-------|');
133
- const tierEntries = Object.entries(stats.callsByTier);
134
- if (tierEntries.length === 0) {
135
- lines.push('| *(none)* | 0 |');
136
- }
137
- else {
138
- for (const [tier, count] of tierEntries) {
139
- lines.push(`| ${tier} | ${String(count)} |`);
140
- }
141
- }
142
115
  return lines.join('\n');
143
116
  }
144
117
  //# sourceMappingURL=stats.js.map
@@ -1,9 +1,9 @@
1
1
  import type { ValidationArtifactDigests, ValidationReceiptBindings } from '../../types/validation-receipt.js';
2
2
  import type { DurableValidationBindings, ValidationPhase, ValidationPhaseGraphResult, ValidationPhaseProgress } from '../../types/durable-validation.js';
3
3
  export type { DurableValidationBindings } from '../../types/durable-validation.js';
4
+ export { gitSourceTreeDigest } from './validation-source-digest.js';
4
5
  export { createPendingValidationSubmission, createValidationSubmission, validationOperationId, validationSubmissionOperationId, } from './validation-submission.js';
5
6
  export declare function toValidationReceiptBindings(bindings: DurableValidationBindings, artifactDigests: ValidationArtifactDigests): ValidationReceiptBindings;
6
- export declare function gitSourceTreeDigest(projectPath: string): Promise<string>;
7
7
  /** Compute immutable validation and lifecycle-artifact bindings without trusting spec metadata. */
8
8
  export declare function computeDurableValidationBindings(input: {
9
9
  readonly canonicalProjectId: string;
@@ -1,17 +1,15 @@
1
1
  import { technologyValue } from '../technology-registry.js';
2
2
  import { createHash } from 'node:crypto';
3
- import { execFile } from 'node:child_process';
4
- import { lstat, readFile, readlink } from 'node:fs/promises';
3
+ import { readFile } from 'node:fs/promises';
5
4
  import { basename, join } from 'node:path';
6
- import { promisify } from 'node:util';
7
5
  import { runAbortableProcess } from '../abortable-process-runner.js';
8
6
  import { projectDataDir } from '../../storage/base-store.js';
9
7
  import { atomicWriteFile } from '../safety/atomic-write-file.js';
10
8
  import { evidenceArtifactCollectionDigest, evidenceArtifactDigest, } from '../evidence-gates/artifact-reader.js';
11
- import { isValidationSourcePath } from './validation-source-policy.js';
9
+ import { gitSourceTreeDigest } from './validation-source-digest.js';
12
10
  import { PROJECT_ID as CANONICAL_PROJECT_ID } from './validation-receipt-codec.js';
11
+ export { gitSourceTreeDigest } from './validation-source-digest.js';
13
12
  export { createPendingValidationSubmission, createValidationSubmission, validationOperationId, validationSubmissionOperationId, } from './validation-submission.js';
14
- const execFileAsync = promisify(execFile);
15
13
  const DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/u;
16
14
  const DEFAULT_MAX_CONCURRENCY = 2;
17
15
  const MAX_CONCURRENCY = 8;
@@ -74,83 +72,6 @@ async function readEvidenceFile(path) {
74
72
  throw new Error(`[Planu] Invalid lifecycle evidence: ${path}`, { cause: error });
75
73
  }
76
74
  }
77
- async function mapWithConcurrency(values, concurrency, worker) {
78
- const results = new Array(values.length);
79
- let cursor = 0;
80
- const runners = Array.from({ length: Math.min(concurrency, values.length) }, async () => {
81
- for (;;) {
82
- const index = cursor;
83
- cursor += 1;
84
- if (index >= values.length) {
85
- return;
86
- }
87
- results[index] = await worker(values[index]);
88
- }
89
- });
90
- await Promise.all(runners);
91
- return results;
92
- }
93
- export async function gitSourceTreeDigest(projectPath) {
94
- try {
95
- const gitOptions = { cwd: projectPath, encoding: 'utf8', maxBuffer: 16 * 1024 * 1024 };
96
- const [trackedResult, untrackedResult] = await Promise.all([
97
- execFileAsync('git', ['ls-files', '--cached', '-z'], gitOptions),
98
- execFileAsync('git', ['ls-files', '--others', '--exclude-standard', '-z'], gitOptions),
99
- ]);
100
- const sourceEntries = (stdout) => stdout
101
- .split('\0')
102
- .filter(Boolean)
103
- .map((sourcePath) => ({ sourcePath, canonicalPath: sourcePath.normalize('NFC') }))
104
- .filter(({ canonicalPath }) => isValidationSourcePath(canonicalPath));
105
- const entriesToRead = [
106
- ...sourceEntries(trackedResult.stdout),
107
- ...sourceEntries(untrackedResult.stdout),
108
- ].sort((left, right) => Buffer.compare(Buffer.from(left.canonicalPath), Buffer.from(right.canonicalPath)));
109
- if (new Set(entriesToRead.map(({ canonicalPath }) => canonicalPath)).size !== entriesToRead.length) {
110
- throw new Error('source paths collide after Unicode normalization');
111
- }
112
- const entries = await mapWithConcurrency(entriesToRead, MAX_CONCURRENCY, async (entry) => {
113
- const { canonicalPath: path, sourcePath } = entry;
114
- const absolutePath = join(projectPath, sourcePath);
115
- try {
116
- const stats = await lstat(absolutePath);
117
- if (stats.isSymbolicLink()) {
118
- const target = (await readlink(absolutePath)).normalize('NFC');
119
- return { path, content: Buffer.from(`symlink\0${target}`, 'utf8') };
120
- }
121
- if (!stats.isFile()) {
122
- throw new Error(`unsupported source entry type: ${path}`);
123
- }
124
- return {
125
- path,
126
- content: Buffer.concat([Buffer.from('file\0'), await readFile(absolutePath)]),
127
- };
128
- }
129
- catch (error) {
130
- if (error.code === 'ENOENT') {
131
- return undefined;
132
- }
133
- throw error;
134
- }
135
- });
136
- const hash = createHash('sha256');
137
- hash.update('planu-source-v1\0');
138
- for (const entry of entries) {
139
- if (!entry) {
140
- continue;
141
- }
142
- const pathBytes = Buffer.from(entry.path, 'utf8');
143
- hash.update(`${pathBytes.length}:`);
144
- hash.update(pathBytes);
145
- hash.update(`${entry.content.length}:`);
146
- hash.update(entry.content);
147
- }
148
- return `sha256:${hash.digest('hex')}`;
149
- }
150
- catch (error) {
151
- throw new Error('[Planu] Unable to bind validation to the source tree', { cause: error });
152
- }
153
- }
154
75
  /** Compute immutable validation and lifecycle-artifact bindings without trusting spec metadata. */
155
76
  export async function computeDurableValidationBindings(input) {
156
77
  const handoff = join(projectDataDir(input.canonicalProjectId), 'handoffs', input.specId);
@@ -18,6 +18,8 @@ export declare function beginValidationFreshnessBarrier(input: {
18
18
  handoffPath: string;
19
19
  invalidateCurrentBindings?: boolean;
20
20
  }): Promise<ValidationFreshnessLease>;
21
+ /** Stop one exact epoch and drain all invalidations accepted before closure. */
22
+ export declare function closeValidationFreshnessLease(lease: Pick<ValidationFreshnessLease, 'projectId' | 'specId' | 'epoch'>): Promise<void>;
21
23
  /** Bind the post-watch snapshot; an event before this call makes the lease unusable. */
22
24
  export declare function bindValidationFreshnessLease(lease: ValidationFreshnessLease, bindings: ValidationReceiptBindings): Promise<boolean>;
23
25
  /** Drain invalidation work and verify epoch, generation, health, expiry and bound inputs. */
@@ -32,5 +34,13 @@ export declare function rebaselineValidationFreshnessLeaseAfterRecompute(input:
32
34
  expectedBindings: ValidationReceiptBindings;
33
35
  recompute: () => Promise<ValidationReceiptBindings>;
34
36
  }): Promise<ValidationFreshnessLease | undefined>;
35
- export declare function resetValidationFreshnessForTests(): void;
37
+ export declare function resetValidationFreshnessForTests(): Promise<void>;
38
+ /** Count-only process diagnostic; intentionally absent from the package entrypoint. */
39
+ export declare function getValidationFreshnessDiagnosticsForTests(): {
40
+ readonly activeLeases: number;
41
+ readonly watchers: number;
42
+ readonly queuedInvalidations: number;
43
+ readonly timers: number;
44
+ readonly generationTotal: number;
45
+ };
36
46
  //# sourceMappingURL=validation-freshness.d.ts.map