@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
@@ -1,222 +0,0 @@
1
- // tools/license-gate.ts — Runtime license enforcement for MCP tool handlers.
2
- // Provides getCurrentTier() with in-memory cache and withLicenseGate() wrapper.
3
- import { createHash } from 'node:crypto';
4
- import { licenseStore } from '../storage/index.js';
5
- import * as usageStore from '../storage/usage-store.js';
6
- import { resolveCurrentTier, checkToolAccess, isValidationFresh, isInGracePeriod, validateLicense, computeMachineFingerprint, isOpenAccessActive, } from '../engine/license-validator.js';
7
- import { evaluateRateLimit, isTrialActive, trialDaysRemaining, recordUsageEvent, } from '../engine/usage-tracker/index.js';
8
- import { getSessionContext } from '../transports/session-context.js';
9
- // ---------------------------------------------------------------------------
10
- // Owner token override (SHA-256 verified, not reversible)
11
- // ---------------------------------------------------------------------------
12
- // Salt prefix for owner token hashing (v1). New token hashes must be generated
13
- // as: sha256(HASH_SALT + token). To regenerate OWNER_TOKEN_HASH run:
14
- // node -e "const{createHash}=require('crypto');console.log(createHash('sha256').update('planu-owner-v1'+process.argv[1]).digest('hex'))" <token>
15
- const HASH_SALT = 'planu-owner-v1';
16
- // Hash generated without salt (legacy). Kept for migration: if you rotate the
17
- // owner token, generate a new salted hash and replace OWNER_TOKEN_HASH_V1.
18
- const OWNER_TOKEN_HASH = '9f9e8410fd0a718540fe1e29f7beaa2506b539c8732915d8eddcb3bcff9b9465';
19
- function checkOwnerOverride() {
20
- const token = process.env.SDD_OWNER_TOKEN;
21
- if (!token) {
22
- return null;
23
- }
24
- const trimmed = token.trim();
25
- // Try salted hash first (current scheme).
26
- const saltedHash = createHash('sha256')
27
- .update(HASH_SALT + trimmed)
28
- .digest('hex');
29
- if (saltedHash === OWNER_TOKEN_HASH) {
30
- return 'enterprise';
31
- }
32
- // Fall back to legacy unsalted hash so existing tokens keep working.
33
- // DEPRECATED: regenerate OWNER_TOKEN_HASH with salt when rotating the token.
34
- const legacyHash = createHash('sha256').update(trimmed).digest('hex');
35
- return legacyHash === OWNER_TOKEN_HASH ? 'enterprise' : null;
36
- }
37
- // ---------------------------------------------------------------------------
38
- // In-memory tier cache (avoids disk read on every tool call)
39
- // ---------------------------------------------------------------------------
40
- const CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
41
- let cachedTier = null;
42
- let cacheTimestamp = 0;
43
- export async function getCurrentTier() {
44
- // Per-session license key (hosted multi-tenant mode via HTTP transport)
45
- const sessionCtx = getSessionContext();
46
- if (sessionCtx?.licenseKey) {
47
- return resolveSessionTier(sessionCtx.licenseKey);
48
- }
49
- const now = Date.now();
50
- if (cachedTier !== null && now - cacheTimestamp < CACHE_TTL_MS) {
51
- return cachedTier;
52
- }
53
- const ownerTier = checkOwnerOverride();
54
- if (ownerTier) {
55
- cachedTier = ownerTier;
56
- cacheTimestamp = now;
57
- return cachedTier;
58
- }
59
- let state = await licenseStore.getLicenseState();
60
- // Synchronous online validation when license is stale (>7 days)
61
- if (state && !isValidationFresh(state)) {
62
- state = await performOnlineValidation(state);
63
- }
64
- cachedTier = resolveCurrentTier(state);
65
- cacheTimestamp = now;
66
- return cachedTier;
67
- }
68
- export function invalidateTierCache() {
69
- cachedTier = null;
70
- cacheTimestamp = 0;
71
- }
72
- /**
73
- * Synchronous tier estimate based on environment variables only — no disk I/O.
74
- * Used at server startup to set the display name before async validation runs.
75
- * Returns 'enterprise' for owner token, 'pro' if a license key env var is set, 'free' otherwise.
76
- */
77
- export function getTierSync() {
78
- if (checkOwnerOverride()) {
79
- return 'enterprise';
80
- }
81
- if (process.env.SDD_LICENSE_KEY?.trim()) {
82
- return 'pro';
83
- }
84
- return 'free';
85
- }
86
- // ---------------------------------------------------------------------------
87
- // Per-session license resolution (hosted multi-tenant mode)
88
- // ---------------------------------------------------------------------------
89
- const sessionTierCache = new Map();
90
- const SESSION_TIER_TTL_MS = 10 * 60 * 1000; // 10 min — longer since online validation is expensive
91
- const RATE_LIMIT_EXEMPT_TOOLS = new Set([
92
- 'planu_status',
93
- 'update_status_batch',
94
- 'configure_code_graph',
95
- 'code_graph_status',
96
- ]);
97
- export function shouldBypassDailyRateLimit(toolName) {
98
- return RATE_LIMIT_EXEMPT_TOOLS.has(toolName);
99
- }
100
- async function resolveSessionTier(licenseKey) {
101
- const now = Date.now();
102
- const cached = sessionTierCache.get(licenseKey);
103
- if (cached && now < cached.expiresAt) {
104
- return cached.tier;
105
- }
106
- try {
107
- const result = await validateLicense(licenseKey, 'hosted');
108
- const tier = result.valid ? 'pro' : 'free';
109
- sessionTierCache.set(licenseKey, { tier, expiresAt: now + SESSION_TIER_TTL_MS });
110
- return tier;
111
- }
112
- catch {
113
- // API unreachable — degrade to free (no grace period for session keys)
114
- sessionTierCache.set(licenseKey, { tier: 'free', expiresAt: now + 60_000 }); // retry in 1 min
115
- return 'free';
116
- }
117
- }
118
- // ---------------------------------------------------------------------------
119
- // License gate wrapper
120
- // ---------------------------------------------------------------------------
121
- export function withLicenseGate(toolName, handler) {
122
- return async (args, extra) => {
123
- const tier = await getCurrentTier();
124
- const trialContext = await resolveTrialContext(tier);
125
- const check = checkToolAccess(toolName, tier, trialContext);
126
- if (!check.allowed) {
127
- return { content: [{ type: 'text', text: check.message }], isError: true };
128
- }
129
- return handler(args, extra);
130
- };
131
- }
132
- /**
133
- * Resolves trial activity for free-tier users. Returns empty context for paid tiers
134
- * (no need to query trial state — they already have full access).
135
- */
136
- async function resolveTrialContext(tier) {
137
- if (tier !== 'free') {
138
- return { trialActive: false, trialDaysRemaining: 0 };
139
- }
140
- try {
141
- const trialState = await usageStore.ensureTrialState();
142
- return {
143
- trialActive: isTrialActive(trialState.firstRunAt),
144
- trialDaysRemaining: trialDaysRemaining(trialState.firstRunAt),
145
- };
146
- }
147
- catch {
148
- return { trialActive: false, trialDaysRemaining: 0 };
149
- }
150
- }
151
- // ---------------------------------------------------------------------------
152
- // Usage tracking wrapper
153
- // ---------------------------------------------------------------------------
154
- /**
155
- * Wraps a handler with rate limiting (free tier only) and usage event recording.
156
- * For free tier: checks daily limit + cooldown before executing.
157
- * For all tiers: records a usage event after execution (fire-and-forget).
158
- */
159
- export function withUsageTracking(toolName, handler) {
160
- return async (args, extra) => {
161
- const tier = await getCurrentTier();
162
- // During open-access window, skip rate limiting for free tier
163
- if (tier === 'free' && !isOpenAccessActive() && !shouldBypassDailyRateLimit(toolName)) {
164
- const today = new Date().toISOString().slice(0, 10);
165
- const [trialState, callCount, lastCallAt] = await Promise.all([
166
- usageStore.ensureTrialState(),
167
- usageStore.getDailyCallCount(today),
168
- usageStore.getLastCallTimestamp(),
169
- ]);
170
- const maxCalls = isTrialActive(trialState.firstRunAt) ? 50 : 30;
171
- const check = evaluateRateLimit(callCount, maxCalls, lastCallAt, new Date());
172
- if (!check.allowed) {
173
- return { content: [{ type: 'text', text: check.message }], isError: true };
174
- }
175
- }
176
- // Cast to ToolResult | undefined: TypeScript says ToolResult, but JS runtime may
177
- // return undefined if a handler has a missing return path not caught at compile time.
178
- // noImplicitReturns in tsconfig prevents new occurrences; this guard handles old ones.
179
- const rawResult = (await handler(args, extra));
180
- const result = rawResult ?? {
181
- content: [{ type: 'text', text: 'Internal error: tool handler returned no result' }],
182
- isError: true,
183
- };
184
- const success = !result.isError;
185
- void usageStore
186
- .appendUsageEvent(recordUsageEvent(toolName, tier, success))
187
- .catch((err) => {
188
- console.error('[planu] appendUsageEvent failed:', err);
189
- });
190
- return result;
191
- };
192
- }
193
- // ---------------------------------------------------------------------------
194
- // Synchronous online validation (replaces background fire-and-forget)
195
- // ---------------------------------------------------------------------------
196
- async function performOnlineValidation(state) {
197
- try {
198
- const result = await validateLicense(state.licenseKey, state.instanceId);
199
- if (!result.valid) {
200
- // License revoked remotely — clear local state
201
- await licenseStore.deleteLicenseState();
202
- return null;
203
- }
204
- const refreshed = {
205
- ...state,
206
- lastValidatedAt: new Date().toISOString(),
207
- activationUsage: result.license_key.activation_usage,
208
- machineFingerprint: computeMachineFingerprint(),
209
- };
210
- await licenseStore.saveLicenseState(refreshed);
211
- return refreshed;
212
- }
213
- catch {
214
- // API unreachable — allow if within grace period (TTL + 3 days)
215
- if (isInGracePeriod(state)) {
216
- return state;
217
- }
218
- // Grace period expired — degrade to free
219
- return null;
220
- }
221
- }
222
- //# sourceMappingURL=license-gate.js.map
@@ -1,3 +0,0 @@
1
- import type { LicenseStatusInput, ToolResult } from '../types/index.js';
2
- export declare function handleLicenseStatus(_args: LicenseStatusInput): Promise<ToolResult>;
3
- //# sourceMappingURL=license-status.d.ts.map
@@ -1,93 +0,0 @@
1
- // tools/license-status.ts — Handler for license_status MCP tool.
2
- // Shows current tier, limits, usage, and upgrade URL.
3
- import { licenseStore } from '../storage/index.js';
4
- import { getTierLimits, loadLicensePlans } from '../engine/license-validator.js';
5
- import { getCurrentTier } from './license-gate.js';
6
- import { readFileSync } from 'node:fs';
7
- import { join, dirname } from 'node:path';
8
- import { fileURLToPath } from 'node:url';
9
- function getVersion() {
10
- try {
11
- const dir = dirname(fileURLToPath(import.meta.url));
12
- const pkg = JSON.parse(readFileSync(join(dir, '../../package.json'), 'utf-8'));
13
- return pkg.version;
14
- }
15
- catch {
16
- return 'unknown';
17
- }
18
- }
19
- export async function handleLicenseStatus(_args) {
20
- const [state, tier] = await Promise.all([licenseStore.getLicenseState(), getCurrentTier()]);
21
- const limits = getTierLimits(tier);
22
- const config = loadLicensePlans();
23
- const projectCount = await licenseStore.countActiveProjects();
24
- const lines = [];
25
- lines.push(`## Planu License Status`);
26
- lines.push('');
27
- const tierLabel = tier.charAt(0).toUpperCase() + tier.slice(1);
28
- const totalTools = config.freeTools.length + config.proTools.length + config.alwaysAllowed.length;
29
- lines.push(`**Version:** ${getVersion()}`);
30
- lines.push(`**Plan:** ${tierLabel}`);
31
- if (state?.customerName) {
32
- lines.push(`**Customer:** ${state.customerName} (${state.customerEmail})`);
33
- lines.push(`**Variant:** ${state.variantName}`);
34
- lines.push(`**Activated:** ${state.activatedAt}`);
35
- lines.push(`**Last validated:** ${state.lastValidatedAt}`);
36
- }
37
- if (tier === 'free') {
38
- const freeAvailable = config.freeTools.length + config.alwaysAllowed.length;
39
- lines.push(`**Tools available:** ${String(freeAvailable)} of ${String(totalTools)}`);
40
- }
41
- else {
42
- lines.push(`**Tools available:** ${String(totalTools)} of ${String(totalTools)}`);
43
- }
44
- lines.push('');
45
- lines.push('### Limits');
46
- lines.push(`- Projects: ${String(projectCount)} / ${limits.maxProjects >= 999999 ? '∞' : String(limits.maxProjects)}`);
47
- lines.push(`- Active specs: ${limits.maxActiveSpecs >= 999999 ? '∞' : String(limits.maxActiveSpecs)} per project`);
48
- if (state?.customerName && state.activationLimit > 0) {
49
- lines.push(`- Activation slots: ${String(state.activationUsage)} / ${String(state.activationLimit)}`);
50
- }
51
- if (tier === 'free') {
52
- lines.push('');
53
- lines.push('### Upgrade');
54
- lines.push(`Unlock all ${String(totalTools)} tools, 10 projects, and unlimited specs.`);
55
- lines.push(`→ ${config.upgradeUrl}`);
56
- lines.push('');
57
- lines.push('Already have a key? Use `activate_license` to activate it.');
58
- }
59
- const structured = {
60
- version: getVersion(),
61
- plan: tierLabel,
62
- toolsAvailable: tier === 'free' ? config.freeTools.length + config.alwaysAllowed.length : totalTools,
63
- toolsTotal: totalTools,
64
- limits: {
65
- maxProjects: limits.maxProjects,
66
- currentProjects: projectCount,
67
- maxActiveSpecs: limits.maxActiveSpecs,
68
- },
69
- };
70
- if (state?.customerName) {
71
- structured.customer = {
72
- name: state.customerName,
73
- email: state.customerEmail,
74
- variant: state.variantName,
75
- activatedAt: state.activatedAt,
76
- lastValidatedAt: state.lastValidatedAt,
77
- };
78
- if (state.customerName && state.activationLimit > 0) {
79
- structured.activationSlots = {
80
- used: state.activationUsage,
81
- total: state.activationLimit,
82
- };
83
- }
84
- }
85
- if (tier === 'free') {
86
- structured.upgradeUrl = config.upgradeUrl;
87
- }
88
- return {
89
- content: [{ type: 'text', text: lines.join('\n') }],
90
- structuredContent: structured,
91
- };
92
- }
93
- //# sourceMappingURL=license-status.js.map
@@ -1,3 +0,0 @@
1
- import type { ToolResult, ListSessionsInput } from '../types/index.js';
2
- export declare function handleListSessions(params: ListSessionsInput): Promise<ToolResult>;
3
- //# sourceMappingURL=list-sessions.d.ts.map
@@ -1,46 +0,0 @@
1
- import { hashProjectPath } from '../storage/base-store.js';
2
- import * as sessionStore from '../storage/session-store.js';
3
- import { t, ti } from '../i18n/index.js';
4
- export async function handleListSessions(params) {
5
- const projectId = hashProjectPath(params.projectPath);
6
- const limit = params.limit ?? 10;
7
- try {
8
- const items = await sessionStore.listItems(projectId, limit);
9
- const lines = [];
10
- lines.push(t('tools.response.sessionsTitle'));
11
- lines.push('');
12
- if (items.length === 0) {
13
- lines.push(t('tools.response.noSessions'));
14
- }
15
- else {
16
- lines.push(ti('tools.response.sessionsFound', { count: items.length }));
17
- lines.push('');
18
- for (const session of items) {
19
- lines.push(`- **${session.id}** | created: ${session.startedAt} | saved: ${session.lastSavedAt}`);
20
- }
21
- }
22
- lines.push('');
23
- lines.push('🚀 **Next Steps**');
24
- lines.push('1. Use `restore_session` to resume a session');
25
- lines.push('2. Use `export_session` to save session data');
26
- const sessionTips = {
27
- naming: 'Name sessions at start: claude -n auth-refactor | Or rename during: /rename auth-refactor',
28
- resume: 'Resume by name: claude --resume auth-refactor | Most recent: claude --continue',
29
- fromPr: 'Resume PR session: claude --from-pr 123 (auto-linked when PR created inside Claude Code)',
30
- pickerShortcuts: 'In /resume picker: P=preview, R=rename, B=filter by branch, /=search',
31
- btw: 'Use /btw for quick side questions — answer appears in overlay, never enters conversation history',
32
- };
33
- return {
34
- content: [{ type: 'text', text: lines.join('\n') }],
35
- sessionTips,
36
- };
37
- }
38
- catch (error) {
39
- const message = error instanceof Error ? error.message : String(error);
40
- return {
41
- content: [{ type: 'text', text: `Error listing sessions: ${message}` }],
42
- isError: true,
43
- };
44
- }
45
- }
46
- //# sourceMappingURL=list-sessions.js.map
@@ -1,6 +0,0 @@
1
- import type { ToolResult } from '../types/index.js';
2
- export declare function handlePlanSessionCheckpoint(input: {
3
- projectPath?: string;
4
- dryRun?: boolean;
5
- }): Promise<ToolResult>;
6
- //# sourceMappingURL=planu-session-checkpoint.d.ts.map
@@ -1,42 +0,0 @@
1
- import { runCheckpoint } from '../engine/session-safeguard/checkpoint-runner.js';
2
- import { readPlanuConfig } from '../engine/planu-config-writer.js';
3
- import { readFile } from 'node:fs/promises';
4
- import { join } from 'node:path';
5
- const DEFAULT_AUTOPUSH_BRANCHES = ['feat/*', 'fix/*', 'chore/*'];
6
- function resolveProjectPath(input) {
7
- return input ?? process.cwd();
8
- }
9
- async function loadProjectConfig(projectPath) {
10
- const configPath = join(projectPath, 'planu', 'config.json');
11
- const config = await readPlanuConfig(configPath, readFile);
12
- return {
13
- autopush: config?.autopush ?? false,
14
- autopushBranches: config?.autopushBranches ?? DEFAULT_AUTOPUSH_BRANCHES,
15
- };
16
- }
17
- export async function handlePlanSessionCheckpoint(input) {
18
- const projectPath = resolveProjectPath(input.projectPath);
19
- const { autopush, autopushBranches } = await loadProjectConfig(projectPath);
20
- const result = await runCheckpoint({
21
- projectPath,
22
- dryRun: input.dryRun ?? false,
23
- autopush,
24
- autopushBranches,
25
- });
26
- const lines = [result.humanSummary, ''];
27
- if (result.unpushedCommits && result.unpushedCommits.oldestAgeHours >= 2) {
28
- const u = result.unpushedCommits;
29
- lines.push(`WARNING: ${String(u.count)} commit(s) unpushed for ${String(u.oldestAgeHours)}h on branch ${u.branch}. Run git push or enable autopush.`);
30
- }
31
- if (result.pushed?.pushed === true) {
32
- lines.push(`Pushed ${String(result.pushed.commitsPushed)} commit(s) to ${result.pushed.ref}`);
33
- }
34
- lines.push('');
35
- lines.push(`session-context refreshed: ${String(result.sessionContextRefreshed)}`);
36
- lines.push(`learnings flushed: ${String(result.learningsFlushed)}`);
37
- lines.push(`unpushed commits: ${String(result.unpushedCommits?.count ?? 0)}`);
38
- return {
39
- content: [{ type: 'text', text: lines.join('\n').trim() }],
40
- };
41
- }
42
- //# sourceMappingURL=planu-session-checkpoint.js.map
@@ -1,3 +0,0 @@
1
- import type { ToolResult, RestoreSessionInput } from '../types/index.js';
2
- export declare function handleRestoreSession(params: RestoreSessionInput): Promise<ToolResult>;
3
- //# sourceMappingURL=restore-session.d.ts.map
@@ -1,71 +0,0 @@
1
- import { hashProjectPath } from '../storage/base-store.js';
2
- import * as sessionStore from '../storage/session-store.js';
3
- import { diffSessions, formatDiffSummary } from '../engine/session/session-diff.js';
4
- import { compactJson } from './output-formatter.js';
5
- export async function handleRestoreSession(params) {
6
- const projectId = hashProjectPath(params.projectPath);
7
- // Handle fromPr shortcut — returns the resume command without touching session storage
8
- if (params.fromPr !== undefined) {
9
- const n = params.fromPr;
10
- const result = {
11
- resumeCommand: `claude --from-pr ${n}`,
12
- description: `Resumes the Claude Code session that created or was linked to PR #${n}`,
13
- tip: 'Sessions auto-link when you use gh pr create inside Claude Code',
14
- };
15
- return { content: [{ type: 'text', text: compactJson(result) }] };
16
- }
17
- try {
18
- let session;
19
- if (params.sessionId) {
20
- session = await sessionStore.load(projectId, params.sessionId);
21
- }
22
- else {
23
- session = await sessionStore.getLatest(projectId);
24
- }
25
- if (!session) {
26
- return {
27
- content: [
28
- {
29
- type: 'text',
30
- text: compactJson({
31
- message: 'No sessions found for this project. Start working and sessions will be saved automatically.',
32
- projectId,
33
- }),
34
- },
35
- ],
36
- };
37
- }
38
- // Try to compute diff with the second-latest session
39
- let diffSummary = '';
40
- const allSessions = await sessionStore.list(projectId);
41
- if (allSessions.length >= 2) {
42
- const previous = allSessions[1];
43
- if (previous) {
44
- const diff = diffSessions(previous, session);
45
- diffSummary = formatDiffSummary(diff);
46
- }
47
- }
48
- const result = {
49
- sessionId: session.id,
50
- startedAt: session.startedAt,
51
- lastSavedAt: session.lastSavedAt,
52
- contextSummary: session.contextSummary,
53
- activeSpecs: session.activeSpecs,
54
- pendingDecisions: session.decisions.slice(-5),
55
- toolCallCount: session.toolCallCount,
56
- diffSummary: diffSummary || undefined,
57
- message: 'Session restored successfully.',
58
- };
59
- return {
60
- content: [{ type: 'text', text: compactJson(result, 60) }],
61
- };
62
- }
63
- catch (error) {
64
- const message = error instanceof Error ? error.message : String(error);
65
- return {
66
- content: [{ type: 'text', text: `Error restoring session: ${message}` }],
67
- isError: true,
68
- };
69
- }
70
- }
71
- //# sourceMappingURL=restore-session.js.map
@@ -1,3 +0,0 @@
1
- import type { SpecHistoryInput, ToolResult } from '../types/index.js';
2
- export declare function handleSpecHistory(params: SpecHistoryInput): Promise<ToolResult>;
3
- //# sourceMappingURL=spec-history.d.ts.map
@@ -1,59 +0,0 @@
1
- import { readChangelog } from '../engine/spec-changelog/index.js';
2
- import { compactResult } from './output-formatter.js';
3
- const VALID_ENTRY_TYPES = [
4
- 'criteria_added',
5
- 'criteria_removed',
6
- 'status_changed',
7
- 'scope_changed',
8
- 'progress_updated',
9
- 'reconciled',
10
- ];
11
- function parseFilterTypes(filter) {
12
- return filter
13
- .split(',')
14
- .map((s) => s.trim())
15
- .filter((t) => VALID_ENTRY_TYPES.includes(t));
16
- }
17
- export async function handleSpecHistory(params) {
18
- const { specId, specDir, filter } = params;
19
- try {
20
- const changelog = await readChangelog({ specDir, specId });
21
- if (!changelog) {
22
- return compactResult(JSON.stringify({
23
- specId,
24
- entries: [],
25
- totalEntries: 0,
26
- filtered: false,
27
- message: `No hay CHANGELOG.md para ${specId}. El changelog se crea automaticamente cuando se ejecuta reconcile_spec o update_status sobre la spec.`,
28
- }, null, 2));
29
- }
30
- let entries = changelog.entries;
31
- let filtered = false;
32
- if (filter) {
33
- const filterTypes = parseFilterTypes(filter);
34
- if (filterTypes.length > 0) {
35
- entries = entries.filter((e) => filterTypes.includes(e.type));
36
- filtered = true;
37
- }
38
- }
39
- const message = entries.length === 0 && filtered
40
- ? 'No hay entradas del tipo solicitado'
41
- : `${entries.length} entrada${entries.length !== 1 ? 's' : ''} encontrada${entries.length !== 1 ? 's' : ''} en el changelog de ${specId}`;
42
- const result = {
43
- specId,
44
- entries,
45
- totalEntries: entries.length,
46
- filtered,
47
- message,
48
- };
49
- return compactResult(JSON.stringify(result, null, 2));
50
- }
51
- catch (error) {
52
- const message = error instanceof Error ? error.message : String(error);
53
- return {
54
- content: [{ type: 'text', text: `Error reading spec history: ${message}` }],
55
- isError: true,
56
- };
57
- }
58
- }
59
- //# sourceMappingURL=spec-history.js.map
@@ -1,6 +0,0 @@
1
- import type { ToolResult, StartWebhookInput, StopWebhookInput, WebhookStatusInput, WebhookServerState } from '../types/index.js';
2
- export declare function handleStartWebhook(args: StartWebhookInput): Promise<ToolResult>;
3
- export declare function handleStopWebhook(_args: StopWebhookInput): Promise<ToolResult>;
4
- export declare function handleWebhookStatus(args: WebhookStatusInput): ToolResult;
5
- export declare function formatStateForDisplay(state: WebhookServerState): string;
6
- //# sourceMappingURL=webhook.d.ts.map