@planu/cli 5.3.68 → 5.4.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 (381) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/dist/.planu-build.json +1 -1
  3. package/dist/cli/commands/install.d.ts +2 -15
  4. package/dist/config/skill-templates/planu-dogfood-bug.md +43 -0
  5. package/dist/config/skill-templates/planu-implement.md +42 -0
  6. package/dist/config/skill-templates/planu-review.md +47 -0
  7. package/dist/core/shared/fs.d.ts +11 -0
  8. package/dist/core/shared/fs.js +90 -0
  9. package/dist/core/shared/strings.d.ts +3 -0
  10. package/dist/core/shared/strings.js +13 -0
  11. package/dist/engine/actuals/git-analyzer.js +1 -1
  12. package/dist/engine/actuals/progress-parser.js +1 -3
  13. package/dist/engine/agent-handoff-store.js +1 -0
  14. package/dist/engine/agent-squad/dispatcher.js +1 -0
  15. package/dist/engine/agent-telemetry.js +1 -0
  16. package/dist/engine/auth/config.js +1 -0
  17. package/dist/engine/auto-updater/atomic-upgrade.js +1 -0
  18. package/dist/engine/auto-updater/index.js +1 -0
  19. package/dist/engine/autopilot/action-registry.js +20 -0
  20. package/dist/engine/autopilot/audit-logger.js +1 -0
  21. package/dist/engine/autopilot/bootstrap.js +9 -2
  22. package/dist/engine/autopilot/complete-loop.js +4 -0
  23. package/dist/engine/autopilot/crash-shield-rate-limiter.js +1 -0
  24. package/dist/engine/autopilot/event-bus.js +1 -0
  25. package/dist/engine/autopilot/state-updater.js +6 -0
  26. package/dist/engine/browser-validator.js +1 -3
  27. package/dist/engine/build-tool-detector.js +1 -8
  28. package/dist/engine/bundle-installer.js +2 -10
  29. package/dist/engine/cascade-hooks/core/append-releases.js +1 -0
  30. package/dist/engine/cascade-hooks/core/write-session-json.js +2 -2
  31. package/dist/engine/cascade-hooks/hooks/dispatch-hook-event.hook.d.ts +3 -1
  32. package/dist/engine/cascade-hooks/hooks/dispatch-hook-event.hook.js +12 -3
  33. package/dist/engine/cascade-hooks/hooks/estimate-calibration.hook.js +1 -0
  34. package/dist/engine/cascade-hooks/hooks/housekeeping-on-done.hook.js +2 -0
  35. package/dist/engine/cascade-hooks/hooks/implementing-kickoff.hook.js +5 -1
  36. package/dist/engine/cascade-hooks/hooks/lesson-drift.hook.js +1 -0
  37. package/dist/engine/cascade-hooks/hooks/orchestration-plan.hook.js +1 -0
  38. package/dist/engine/cascade-hooks/hooks/session-context.hook.js +4 -2
  39. package/dist/engine/cascade-hooks/hooks/slack-notify.hook.js +1 -0
  40. package/dist/engine/cascade-hooks/hooks/status-json.hook.js +2 -0
  41. package/dist/engine/cascade-hooks/hooks/velocity-profile.hook.js +2 -0
  42. package/dist/engine/cascade-hooks/runner.js +2 -0
  43. package/dist/engine/cascade-hooks/state-drift-detector.js +2 -0
  44. package/dist/engine/checkpoint/checkpoint-manager.js +2 -0
  45. package/dist/engine/checkpoint/policy-engine.js +1 -0
  46. package/dist/engine/ci-generator/stack-detector.js +2 -10
  47. package/dist/engine/clarification-gate/token-store.js +1 -0
  48. package/dist/engine/claude-config-auditor/claudemd-auditor.js +2 -10
  49. package/dist/engine/claude-config-auditor/settings-auditor.js +2 -10
  50. package/dist/engine/client-detection.js +2 -10
  51. package/dist/engine/compliance/auto-remediator.js +1 -0
  52. package/dist/engine/compliance/evidence-builder.d.ts +2 -2
  53. package/dist/engine/compliance/framework-catalog.d.ts +6 -6
  54. package/dist/engine/compliance/gap-analyzer.d.ts +2 -2
  55. package/dist/engine/config-health/build-tool-checker.js +1 -9
  56. package/dist/engine/config-health/ci-commands-collector.d.ts +2 -1
  57. package/dist/engine/config-health/ci-commands-collector.js +2 -9
  58. package/dist/engine/config-health/go-checker.js +1 -9
  59. package/dist/engine/config-health/mcp-config-checker.js +2 -10
  60. package/dist/engine/config-health/python-checker.js +1 -9
  61. package/dist/engine/config-health/rust-checker.js +1 -9
  62. package/dist/engine/config-health/ts-checker-scripts.js +1 -9
  63. package/dist/engine/config-health/ts-checker.js +1 -9
  64. package/dist/engine/context-artifacts/store.js +1 -0
  65. package/dist/engine/context-md-generator.js +1 -0
  66. package/dist/engine/context-orchestrator/index.js +2 -0
  67. package/dist/engine/convention-scanner/convention-parser.js +2 -9
  68. package/dist/engine/cost-guardrails.js +1 -0
  69. package/dist/engine/cost-tracking/ledger.js +1 -0
  70. package/dist/engine/criterion-identity.js +1 -1
  71. package/dist/engine/dashboard/data-loader.js +1 -0
  72. package/dist/engine/dashboard/drift-score.js +2 -0
  73. package/dist/engine/dashboard/spec-updater.d.ts +3 -1
  74. package/dist/engine/dashboard/spec-updater.js +9 -2
  75. package/dist/engine/dashboard/templates-layout.d.ts +2 -2
  76. package/dist/engine/dashboard/templates-layout.js +2 -9
  77. package/dist/engine/data-projects-gc/gc-runner.js +2 -4
  78. package/dist/engine/deleter/audit-logger.js +1 -0
  79. package/dist/engine/deleter/core.js +6 -0
  80. package/dist/engine/deleter/trash-manager.js +1 -0
  81. package/dist/engine/desktop-detector.js +1 -9
  82. package/dist/engine/detection-utils.d.ts +2 -1
  83. package/dist/engine/detection-utils.js +3 -10
  84. package/dist/engine/detectors/advanced-framework-detector/helpers.d.ts +3 -2
  85. package/dist/engine/detectors/advanced-framework-detector/helpers.js +3 -17
  86. package/dist/engine/detectors/cicd-detector.js +2 -10
  87. package/dist/engine/detectors/css-framework-detector.js +2 -10
  88. package/dist/engine/detectors/deployment-detector.js +3 -12
  89. package/dist/engine/detectors/frontend-perf-detector.js +2 -10
  90. package/dist/engine/detectors/gitops-detector.js +3 -11
  91. package/dist/engine/detectors/idp-detector.js +1 -3
  92. package/dist/engine/detectors/k3s-detector.js +3 -11
  93. package/dist/engine/detectors/llm-detector/file-readers.d.ts +2 -1
  94. package/dist/engine/detectors/llm-detector/file-readers.js +2 -9
  95. package/dist/engine/detectors/mfe-detector.js +5 -13
  96. package/dist/engine/detectors/monitoring-detector.js +2 -11
  97. package/dist/engine/detectors/monorepo-detector.d.ts +1 -0
  98. package/dist/engine/detectors/monorepo-detector.js +1 -10
  99. package/dist/engine/detectors/nomad-detector.js +3 -11
  100. package/dist/engine/detectors/otel-ecosystem-detectors.d.ts +2 -1
  101. package/dist/engine/detectors/otel-ecosystem-detectors.js +2 -10
  102. package/dist/engine/doc-generator/executive-summary/html-template.js +1 -7
  103. package/dist/engine/doc-generator/executive-summary/section-builders.js +1 -7
  104. package/dist/engine/doc-generator/per-spec-report/mermaid-renderer.js +1 -7
  105. package/dist/engine/doc-generator/per-spec-report/spec-section-builders.js +1 -7
  106. package/dist/engine/doc-generator/per-spec-report/technical-report.js +1 -7
  107. package/dist/engine/doc-generator/portal/analytics-page.js +1 -7
  108. package/dist/engine/doc-generator/portal/architecture-page.js +1 -7
  109. package/dist/engine/doc-generator/portal/changelog-page.js +1 -7
  110. package/dist/engine/doc-generator/portal/decision-page.js +1 -7
  111. package/dist/engine/doc-generator/portal/decision-timeline-builder.js +1 -7
  112. package/dist/engine/doc-generator/portal/kanban-view-builder.js +1 -7
  113. package/dist/engine/doc-generator/portal/portal-breadcrumbs.js +1 -7
  114. package/dist/engine/doc-generator/portal/portal-landing-cards.js +1 -7
  115. package/dist/engine/doc-generator/portal/portal-navbar.js +1 -7
  116. package/dist/engine/doc-generator/portal/portal-page-detector.d.ts +3 -0
  117. package/dist/engine/doc-generator/portal/portal-page-detector.js +1 -10
  118. package/dist/engine/doc-generator/portal/portal-regenerator.js +2 -0
  119. package/dist/engine/doc-generator/portal/risk-matrix-svg.js +1 -7
  120. package/dist/engine/doc-generator/portal/risk-page.js +1 -7
  121. package/dist/engine/doc-generator/portal/roadmap-page.js +1 -7
  122. package/dist/engine/doc-generator/proposal/proposal-gantt-builder.js +1 -7
  123. package/dist/engine/doc-generator/proposal/proposal-kpi-builder.js +1 -7
  124. package/dist/engine/doc-generator/proposal/proposal-section-builders-advanced.js +2 -8
  125. package/dist/engine/doc-generator/proposal/proposal-section-builders.js +1 -7
  126. package/dist/engine/docs-site-generator/html-templates.js +1 -7
  127. package/dist/engine/docs-site-generator/markdown-renderer.js +1 -7
  128. package/dist/engine/drift/violation-resolver.js +2 -0
  129. package/dist/engine/dynamic-knowledge/knowledge-cache.js +1 -0
  130. package/dist/engine/ecosystem-absorber/knowledge-cache.js +1 -0
  131. package/dist/engine/edge-db-detector.js +1 -10
  132. package/dist/engine/escalator/retry-counter.js +1 -0
  133. package/dist/engine/evidence-gates/artifact-reader.js +1 -0
  134. package/dist/engine/evidence-gates/evidence-autofill.js +1 -0
  135. package/dist/engine/evidence-gates/evidence-skeletons.js +1 -0
  136. package/dist/engine/evidence-gates/reconciliation-freshness.js +1 -0
  137. package/dist/engine/execution/durable-job-heartbeat-runtime.js +1 -0
  138. package/dist/engine/execution/job-runtime.js +2 -0
  139. package/dist/engine/execution/validate-job-executor.d.ts +1 -1
  140. package/dist/engine/execution/validate-job-executor.js +3 -0
  141. package/dist/engine/execution/validate-job-payload.js +1 -0
  142. package/dist/engine/execution/validate-worker-thread.js +1 -0
  143. package/dist/engine/facilitate/context-loader.js +1 -0
  144. package/dist/engine/figma/change-detector.d.ts +1 -8
  145. package/dist/engine/figma/code-connect-fetcher.d.ts +1 -7
  146. package/dist/engine/figma/design-enricher.d.ts +1 -17
  147. package/dist/engine/figma/design-enricher.js +0 -1
  148. package/dist/engine/figma/e2e-generator.d.ts +1 -23
  149. package/dist/engine/figma/flow-analyzer.d.ts +1 -11
  150. package/dist/engine/figma/frame-extractor.d.ts +1 -11
  151. package/dist/engine/figma/frame-extractor.js +3 -0
  152. package/dist/engine/figma/multi-file-manager.d.ts +1 -6
  153. package/dist/engine/figma/spec-generator.js +2 -0
  154. package/dist/engine/figma/thumbnail-fetcher.d.ts +1 -1
  155. package/dist/engine/figma/token-extractor.d.ts +1 -6
  156. package/dist/engine/figma/token-extractor.js +0 -1
  157. package/dist/engine/figma/version-tracker.d.ts +1 -7
  158. package/dist/engine/figma/version-tracker.js +0 -1
  159. package/dist/engine/figma/visual-qa.d.ts +5 -19
  160. package/dist/engine/figma/visual-qa.js +1 -2
  161. package/dist/engine/figma/webhook-manager.d.ts +1 -7
  162. package/dist/engine/frontmatter-sha/reseal.js +1 -0
  163. package/dist/engine/frontmatter-sha/verify-terminal.js +1 -0
  164. package/dist/engine/git-hook-injector.js +2 -10
  165. package/dist/engine/github/quality-dimensions.js +1 -3
  166. package/dist/engine/global-rules-manager.js +2 -3
  167. package/dist/engine/handoff-artifacts/implementation-review-reader.js +1 -0
  168. package/dist/engine/handoff-artifacts/io.js +2 -0
  169. package/dist/engine/handoff-packager.js +2 -1
  170. package/dist/engine/health/auto-fixer.js +1 -0
  171. package/dist/engine/hooks/context-injector.js +1 -0
  172. package/dist/engine/hooks-reconciler.js +1 -8
  173. package/dist/engine/impact-detector/index.js +2 -9
  174. package/dist/engine/implementation-contract/common.js +1 -3
  175. package/dist/engine/implementation-contract/evaluator.js +1 -3
  176. package/dist/engine/keyword-matcher/boundary.d.ts +2 -7
  177. package/dist/engine/keyword-matcher/boundary.js +2 -14
  178. package/dist/engine/lifecycle-reconciliation-io.js +1 -0
  179. package/dist/engine/lifecycle-reconciliation.js +3 -0
  180. package/dist/engine/local-first/detector.js +1 -9
  181. package/dist/engine/marketplace-fetcher/cache.js +2 -0
  182. package/dist/engine/marketplace-fetcher/index.js +1 -0
  183. package/dist/engine/mcp-config/mcp-config-writer.js +2 -10
  184. package/dist/engine/migrations/remove-commercial-state.js +2 -0
  185. package/dist/engine/mobile-detector-shared.d.ts +1 -1
  186. package/dist/engine/mobile-detector-shared.js +2 -9
  187. package/dist/engine/multi-channel-notifier.js +1 -0
  188. package/dist/engine/multi-teammate-review/disagreement-counter.js +1 -0
  189. package/dist/engine/multi-teammate-review/panel-orchestrator.js +1 -0
  190. package/dist/engine/onboarding-engine.js +1 -9
  191. package/dist/engine/permissions-merger/stack-detectors.js +2 -10
  192. package/dist/engine/pii-detector/core.js +1 -3
  193. package/dist/engine/platform-engineering/dx-analyzer.js +1 -10
  194. package/dist/engine/platform-engineering/idp-detector.js +2 -10
  195. package/dist/engine/project-dna/ai-tool-detector.js +2 -10
  196. package/dist/engine/project-dna/stack-detector.js +2 -10
  197. package/dist/engine/project-graph/builder.js +11 -2
  198. package/dist/engine/project-graph/cache.d.ts +5 -2
  199. package/dist/engine/project-graph/cache.js +174 -34
  200. package/dist/engine/project-graph/extractors/decision-store-extractor.js +1 -0
  201. package/dist/engine/project-graph/freshness-projection.js +3 -0
  202. package/dist/engine/project-graph/query.js +14 -11
  203. package/dist/engine/project-health-checker.js +2 -6
  204. package/dist/engine/provider-adapters/shared/spec-loader.js +1 -0
  205. package/dist/engine/quality-gates/gate-evaluator.js +1 -3
  206. package/dist/engine/react-detector.js +6 -14
  207. package/dist/engine/reconcile/apply-changes.js +1 -3
  208. package/dist/engine/registry/core.js +1 -0
  209. package/dist/engine/registry/loader.js +2 -0
  210. package/dist/engine/release/postmortem-generator.js +1 -0
  211. package/dist/engine/release/rollback-runner.d.ts +2 -2
  212. package/dist/engine/release/stuck-spec-detector.js +7 -0
  213. package/dist/engine/release-pipeline/release-spec-closer.js +3 -0
  214. package/dist/engine/rules-reconciler.d.ts +1 -1
  215. package/dist/engine/rules-reconciler.js +2 -9
  216. package/dist/engine/safety/atomic-writer.js +1 -0
  217. package/dist/engine/safety/cross-process-lock.js +2 -0
  218. package/dist/engine/safety/file-mutex.js +1 -0
  219. package/dist/engine/safety/lock-lease-store.js +1 -0
  220. package/dist/engine/safety/lock-scavenger.js +2 -0
  221. package/dist/engine/saga/transition-cascade.js +3 -0
  222. package/dist/engine/scan-project/index.js +1 -0
  223. package/dist/engine/scan-project/module-discoverer.js +1 -9
  224. package/dist/engine/schema-parity-auditor/handler-checker.js +1 -3
  225. package/dist/engine/schema-parity-auditor/index.js +1 -3
  226. package/dist/engine/schema-parity-auditor/type-checker.js +1 -3
  227. package/dist/engine/self-healing/strategies/coverage-fix.js +2 -10
  228. package/dist/engine/session-context-generator.d.ts +8 -0
  229. package/dist/engine/session-context-generator.js +33 -23
  230. package/dist/engine/session-state/session-artifact-refresher.d.ts +7 -0
  231. package/dist/engine/session-state/session-artifact-refresher.js +140 -0
  232. package/dist/engine/session-state/writer.d.ts +3 -0
  233. package/dist/engine/session-state/writer.js +35 -17
  234. package/dist/engine/shared-agent-memory.js +1 -0
  235. package/dist/engine/skill-adapter/index.js +3 -0
  236. package/dist/engine/skill-bootstrap/registry-fetcher.js +1 -0
  237. package/dist/engine/skill-bootstrap/skill-writer.js +2 -9
  238. package/dist/engine/skill-bootstrap/stack-matcher.js +1 -9
  239. package/dist/engine/skill-discovery/multi-agent-writer.d.ts +1 -0
  240. package/dist/engine/skill-discovery/multi-agent-writer.js +1 -9
  241. package/dist/engine/skill-generator/workflow-skill-generator.js +1 -0
  242. package/dist/engine/skill-registry/ttl-refresh.js +2 -0
  243. package/dist/engine/spec-audit/index.js +2 -0
  244. package/dist/engine/spec-audit/report-writer.js +1 -0
  245. package/dist/engine/spec-coverage/core.js +1 -0
  246. package/dist/engine/spec-decomposer/analyzer.js +1 -11
  247. package/dist/engine/spec-dependency-graph/dot-exporter.d.ts +1 -1
  248. package/dist/engine/spec-dependency-graph/graph-builder.d.ts +1 -20
  249. package/dist/engine/spec-dependency-graph/superseded-set.d.ts +1 -1
  250. package/dist/engine/spec-diff-engine.js +1 -7
  251. package/dist/engine/spec-format/read-technical-section.js +1 -3
  252. package/dist/engine/spec-format/replace-section.js +1 -3
  253. package/dist/engine/spec-format/spec-id.d.ts +9 -1
  254. package/dist/engine/spec-format/spec-id.js +24 -3
  255. package/dist/engine/spec-format/unified-spec-builder.js +1 -3
  256. package/dist/engine/spec-migrator/canonical-deduplicator.js +2 -0
  257. package/dist/engine/spec-observability/tracker.js +1 -0
  258. package/dist/engine/spec-registry/adapter.js +2 -10
  259. package/dist/engine/spec-registry/validator.d.ts +1 -0
  260. package/dist/engine/spec-registry/validator.js +1 -9
  261. package/dist/engine/spec-state-machine/transition-spec.js +1 -0
  262. package/dist/engine/spec-templates/custom-loader.js +1 -0
  263. package/dist/engine/stack-auditor/build-tool-auditor.js +1 -9
  264. package/dist/engine/staleness/stale-implementing.js +5 -14
  265. package/dist/engine/status-reconciler/index.js +4 -1
  266. package/dist/engine/structural-memory/helpers.js +1 -0
  267. package/dist/engine/supply-chain/slsa-checker.js +1 -9
  268. package/dist/engine/tdd-enforcer/stub-artifact-path.js +1 -0
  269. package/dist/engine/telemetry/health-checker.js +1 -0
  270. package/dist/engine/telemetry/telemetry-store.js +1 -0
  271. package/dist/engine/token-optimizer/response-cache.js +1 -3
  272. package/dist/engine/tool-groups/group-manager.js +2 -0
  273. package/dist/engine/update-notifier.js +1 -0
  274. package/dist/engine/validation/approved-spec-portability.js +1 -0
  275. package/dist/engine/validation/durable-validation.js +1 -0
  276. package/dist/engine/validation/validation-freshness.js +2 -0
  277. package/dist/engine/validation/validation-receipt.js +1 -0
  278. package/dist/engine/validation/validation-submission.d.ts +1 -1
  279. package/dist/engine/validation-evidence-ledger.js +1 -0
  280. package/dist/engine/validator/deep-code-checker.js +1 -3
  281. package/dist/engine/validator/executable-evidence.d.ts +1 -14
  282. package/dist/engine/validator/scope-resolver.d.ts +2 -2
  283. package/dist/engine/validator/spec-compliance-runner.d.ts +1 -31
  284. package/dist/engine/validator/validation-report-writer.js +1 -1
  285. package/dist/engine/validator.d.ts +1 -1
  286. package/dist/engine/validator.js +1 -0
  287. package/dist/engine/velocity/measure-velocity.js +2 -0
  288. package/dist/engine/version-resolver.js +1 -0
  289. package/dist/engine/workers/handlers/auto-drift.js +3 -0
  290. package/dist/engine/workspace-manager.js +4 -0
  291. package/dist/hosts/gemini/config-scaffold.js +2 -10
  292. package/dist/storage/approval-operation-lock.js +1 -0
  293. package/dist/storage/auto-promoter-config-store.js +1 -0
  294. package/dist/storage/autopilot-log-store.js +1 -0
  295. package/dist/storage/base-store.js +1 -0
  296. package/dist/storage/checkpoint-store.js +1 -0
  297. package/dist/storage/feedback-remote.js +1 -0
  298. package/dist/storage/gaps-log.js +1 -0
  299. package/dist/storage/global-projects-store.js +1 -0
  300. package/dist/storage/global-store.js +1 -0
  301. package/dist/storage/knowledge-store/sessions.js +2 -0
  302. package/dist/storage/migrations/canonical-storage.js +42 -18
  303. package/dist/storage/project-drift-store.js +1 -0
  304. package/dist/storage/project-identity.js +1 -0
  305. package/dist/storage/project-resolver.js +1 -17
  306. package/dist/storage/runtime-db.d.ts +2 -20
  307. package/dist/storage/runtime-db.js +2 -9
  308. package/dist/storage/semantic-index-store.js +1 -0
  309. package/dist/storage/sentry-store.js +1 -0
  310. package/dist/storage/session-state-store.js +1 -0
  311. package/dist/storage/spec-store.d.ts +7 -0
  312. package/dist/storage/spec-store.js +21 -1
  313. package/dist/storage/status-store/atomic-status-write.js +1 -0
  314. package/dist/storage/status-store/file-lock.js +1 -0
  315. package/dist/storage/status-store/self-healing.js +1 -0
  316. package/dist/storage/storage-bundle.d.ts +12 -2
  317. package/dist/storage/supabase-store.js +1 -0
  318. package/dist/storage/technology-selection-store.js +1 -0
  319. package/dist/storage/trash-store.d.ts +2 -4
  320. package/dist/storage/trash-store.js +2 -15
  321. package/dist/storage/vector-store/json-fallback.js +1 -0
  322. package/dist/storage/vector-store/migrator.js +1 -0
  323. package/dist/storage/vector-store/sqlite-adapter.js +1 -0
  324. package/dist/tools/audit-claude-config.js +1 -10
  325. package/dist/tools/check-readiness.js +104 -30
  326. package/dist/tools/clarify-requirements/multiple-choice.d.ts +3 -3
  327. package/dist/tools/configure-oauth-handler.js +1 -0
  328. package/dist/tools/create-skill.js +11 -9
  329. package/dist/tools/create-spec-helpers.d.ts +1 -3
  330. package/dist/tools/create-spec-helpers.js +1 -8
  331. package/dist/tools/create-spec.js +1 -13
  332. package/dist/tools/dashboard.js +5 -0
  333. package/dist/tools/github-pr-handler.js +1 -0
  334. package/dist/tools/github-release-handler.d.ts +1 -0
  335. package/dist/tools/github-release-handler.js +4 -3
  336. package/dist/tools/graph-specs.d.ts +1 -1
  337. package/dist/tools/heal-spec-docs.js +1 -3
  338. package/dist/tools/init-project/git-setup.d.ts +2 -2
  339. package/dist/tools/init-project/host-assets-writer.js +9 -10
  340. package/dist/tools/init-project/lifecycle-helpers.d.ts +2 -2
  341. package/dist/tools/init-project/lint-scaffolder.js +2 -10
  342. package/dist/tools/init-project/stack-detector.d.ts +2 -2
  343. package/dist/tools/reconcile-interactive-question-hooks.d.ts +2 -2
  344. package/dist/tools/register-sdd-tools.js +1 -0
  345. package/dist/tools/safe-handler.js +1 -0
  346. package/dist/tools/schemas/spec-id.d.ts +1 -6
  347. package/dist/tools/schemas/spec-id.js +1 -16
  348. package/dist/tools/tool-entry.d.ts +2 -2
  349. package/dist/tools/tool-entry.js +1 -1
  350. package/dist/tools/tool-registry/core-tools.d.ts +2 -2
  351. package/dist/tools/tool-registry/deprecated-stubs.d.ts +3 -3
  352. package/dist/tools/tool-registry/deprecated-stubs.js +1 -1
  353. package/dist/tools/triage-request.d.ts +2 -2
  354. package/dist/tools/update-status/approval-gates.d.ts +2 -2
  355. package/dist/tools/update-status/approval-gates.js +1 -0
  356. package/dist/tools/update-status/dod-gates.d.ts +1 -1
  357. package/dist/tools/update-status/done-receipt-verifier.d.ts +1 -1
  358. package/dist/tools/update-status/side-effects.js +5 -0
  359. package/dist/tools/update-status-actions.js +28 -40
  360. package/dist/tools/validate-graph-coverage.js +14 -2
  361. package/dist/tools/validate.js +2 -0
  362. package/dist/transports/middleware/types.d.ts +3 -3
  363. package/dist/types/atomic-upgrade.d.ts +1 -1
  364. package/dist/types/cascade-hooks.d.ts +3 -0
  365. package/dist/types/dashboard.d.ts +4 -1
  366. package/dist/types/durable-job.d.ts +20 -0
  367. package/dist/types/durable-job.js +9 -1
  368. package/dist/types/index.d.ts +2 -0
  369. package/dist/types/index.js +2 -0
  370. package/dist/types/installation.d.ts +16 -0
  371. package/dist/types/installation.js +2 -0
  372. package/dist/types/project-knowledge-graph.d.ts +11 -0
  373. package/dist/types/session-checkpoint.d.ts +16 -0
  374. package/dist/types/spec-dependency-graph.d.ts +21 -0
  375. package/dist/types/spec-dependency-graph.js +2 -0
  376. package/dist/types/universal-rules/index.d.ts +1 -0
  377. package/dist/types/validation-evidence.d.ts +45 -0
  378. package/package.json +16 -16
  379. package/planu-plugin.json +1 -1
  380. package/dist/types/storage-bundle.d.ts +0 -13
  381. package/dist/types/storage-bundle.js +0 -2
@@ -1,4 +1,4 @@
1
- import type { ToolEntry } from '../tool-entry.js';
1
+ import type { McpToolEntry } from '../tool-entry.js';
2
2
  /** Template for the deprecation message. Interpolated at runtime. */
3
3
  export declare const DEPRECATION_MESSAGE_TEMPLATE = "This tool has been migrated to a skill. Use the {skill} skill instead: {path}";
4
4
  /**
@@ -8,12 +8,12 @@ export declare const DEPRECATION_MESSAGE_TEMPLATE = "This tool has been migrated
8
8
  export declare const DEPRECATED_TOOLS: readonly ['execute_sdd_flow', 'implement_plan', 'multi_teammate_review', 'run_healing_loop', 'generate_orchestration_plan'];
9
9
  export type DeprecatedToolName = (typeof DEPRECATED_TOOLS)[number];
10
10
  /**
11
- * Create a ToolEntry-compatible deprecation stub.
11
+ * Create a McpToolEntry-compatible deprecation stub.
12
12
  *
13
13
  * - Tool stays registered → callers never see "unknown tool".
14
14
  * - Description starts with `[Deprecated]` → LLMs stop calling it.
15
15
  * - Handler always returns success (no `isError`) regardless of input.
16
16
  * - One stderr warning per process per tool (deduped).
17
17
  */
18
- export declare function makeDeprecationStub(toolName: string, replacementSkillPath: string, replacementSkillName: string): ToolEntry;
18
+ export declare function makeDeprecationStub(toolName: string, replacementSkillPath: string, replacementSkillName: string): McpToolEntry;
19
19
  //# sourceMappingURL=deprecated-stubs.d.ts.map
@@ -36,7 +36,7 @@ function warnOnce(toolName, skillPath) {
36
36
  // Factory
37
37
  // ---------------------------------------------------------------------------
38
38
  /**
39
- * Create a ToolEntry-compatible deprecation stub.
39
+ * Create a McpToolEntry-compatible deprecation stub.
40
40
  *
41
41
  * - Tool stays registered → callers never see "unknown tool".
42
42
  * - Description starts with `[Deprecated]` → LLMs stop calling it.
@@ -15,6 +15,6 @@ export declare const TriageRequestInputSchema: z.ZodObject<{
15
15
  projectId: z.ZodOptional<z.ZodString>;
16
16
  specId: z.ZodOptional<z.ZodString>;
17
17
  }, z.core.$strip>;
18
- export type TriageRequestInput = z.infer<typeof TriageRequestInputSchema>;
19
- export declare function handleTriageRequest(input: TriageRequestInput): Promise<ToolResult>;
18
+ export type TriageRequestParsedInput = z.infer<typeof TriageRequestInputSchema>;
19
+ export declare function handleTriageRequest(input: TriageRequestParsedInput): Promise<ToolResult>;
20
20
  //# sourceMappingURL=triage-request.d.ts.map
@@ -1,13 +1,13 @@
1
1
  import type { FormatGateOutput } from '../../types/spec/inputs.js';
2
2
  import type { Spec } from '../../types/spec/core.js';
3
- export interface ComplianceGateResult {
3
+ export interface ApprovalComplianceGateResult {
4
4
  skipped: boolean;
5
5
  score: number | null;
6
6
  issues: string[];
7
7
  blocked: boolean;
8
8
  }
9
9
  /** Run the optional compliance check for a transition into review. */
10
- export declare function checkComplianceGate(specId: string, projectId: string, projectPath: string | undefined): Promise<ComplianceGateResult>;
10
+ export declare function checkComplianceGate(specId: string, projectId: string, projectPath: string | undefined): Promise<ApprovalComplianceGateResult>;
11
11
  /** Validate canonical spec format before approval, preserving audited bypass warnings. */
12
12
  export declare function checkApprovedFormatGate(spec: Spec, newStatus: string, forceApprove?: boolean | undefined): Promise<FormatGateOutput>;
13
13
  //# sourceMappingURL=approval-gates.d.ts.map
@@ -1,3 +1,4 @@
1
+ // eslint-disable-next-line no-restricted-imports -- grandfathered layer violation, remediation SPEC-1661 SPEC-1662 SPEC-1663
1
2
  import { validateSpecFormat } from '../../core/spec-validator.js';
2
3
  import { getComplianceGateConfig } from '../../storage/compliance-gate-config-store.js';
3
4
  import { formatKeyValue } from '../output-formatter.js';
@@ -118,7 +118,7 @@ export declare function checkImplementationReviewGate(specId: string, projectId:
118
118
  */
119
119
  export declare function checkDoneGates(spec: Spec, specId: string, projectId: string, projectPath: string | undefined, _force: boolean | undefined, _forceReason?: string, verifyReceipt?: DoneReceiptVerifier, implementationReviewDigest?: string): Promise<DoneGateResult>;
120
120
  export { checkQaGate } from './qa-gate.js';
121
- export { checkApprovedFormatGate, checkComplianceGate, type ComplianceGateResult, } from './approval-gates.js';
121
+ export { checkApprovedFormatGate, checkComplianceGate, type ApprovalComplianceGateResult, } from './approval-gates.js';
122
122
  /**
123
123
  * Run the validate gate wrapped in withEscalation for bounded retries.
124
124
  *
@@ -1,4 +1,4 @@
1
- import { type DurableJobRecord } from '../../storage/runtime-db.js';
1
+ import type { DurableJobRecord } from '../../types/durable-job.js';
2
2
  import { type ValidationFreshnessLease } from '../../engine/validation/validation-freshness.js';
3
3
  export { doneReceiptBindingsDifferOnlyInEvidence } from '../../engine/validation/durable-validation.js';
4
4
  export type DoneReceiptVerifier = (identity: {
@@ -1,9 +1,14 @@
1
1
  import { specStore } from '../../storage/index.js';
2
2
  import { runCascade } from '../../engine/cascade-hooks/runner.js';
3
+ import { setDispatchHookEventHandler } from '../../engine/cascade-hooks/hooks/dispatch-hook-event.hook.js';
3
4
  import { appendAutopilotLogEntry } from '../../storage/autopilot-log-store.js';
4
5
  import { redactFailureMessage, reportClassifiedDegradation, } from '../../errors/classified-degradation.js';
5
6
  import { getRuntimePolicy } from '../../engine/runtime-policy.js';
6
7
  import { createExecutionScope } from '../../engine/execution/context.js';
8
+ import { dispatchHookEvent } from '../manage-hooks.js';
9
+ // Wire the tools-layer hook dispatcher into the engine's cascade hook
10
+ // (see engine/cascade-hooks/hooks/dispatch-hook-event.hook.ts — engine must not import tools/ directly).
11
+ setDispatchHookEventHandler(dispatchHookEvent);
7
12
  const queuedTransitions = new Map();
8
13
  const CASCADE_ISOLATED_SCOPE_MS = 30_000;
9
14
  const pendingPostCommitWork = new Set();
@@ -78,12 +78,18 @@ export async function runImplementingSideEffects(projectId, specId, transitionPr
78
78
  try {
79
79
  const spec = foundSpec ?? (await specStore.getSpec(projectId, specId));
80
80
  const results = await Promise.allSettled([
81
- // SPEC-633: Write session state when spec moves to implementing
81
+ // SPEC-633: Write session state when spec moves to implementing, then refresh
82
+ // the paired session artifacts from the resulting store state.
82
83
  (async () => {
83
- const { writeSpecSessionState } = await import('../engine/session-state/writer.js');
84
- await writeSpecSessionState(projectPath, specId, spec?.title ?? specId, 'moved to implementing').catch(() => {
84
+ try {
85
+ const { writeSpecSessionState } = await import('../engine/session-state/writer.js');
86
+ await writeSpecSessionState(projectPath, specId, spec?.title ?? specId, 'moved to implementing');
87
+ const { refreshSessionArtifacts } = await import('../engine/session-state/session-artifact-refresher.js');
88
+ await refreshSessionArtifacts(projectPath, projectId);
89
+ }
90
+ catch {
85
91
  /* best-effort */
86
- });
92
+ }
87
93
  })(),
88
94
  // SPEC-635: Regenerate context.md
89
95
  (async () => {
@@ -92,19 +98,6 @@ export async function runImplementingSideEffects(projectId, specId, transitionPr
92
98
  /* best-effort */
93
99
  });
94
100
  })(),
95
- // SPEC-656: Recalculate epicProgress when spec moves to implementing
96
- (async () => {
97
- try {
98
- const { updateEpicProgressInSession } = await import('../engine/session-state/writer.js');
99
- const allSpecs = await specStore.listSpecs(projectId);
100
- await updateEpicProgressInSession(projectPath, allSpecs).catch(() => {
101
- /* best-effort */
102
- });
103
- }
104
- catch {
105
- /* best-effort */
106
- }
107
- })(),
108
101
  // recommend_model — suggest haiku/sonnet/opus based on spec complexity
109
102
  (async () => {
110
103
  try {
@@ -166,13 +159,6 @@ export async function runDoneActions(projectId, specId, gitBranch, options = {})
166
159
  try {
167
160
  const { resolveProjectPath, git: gitCmd } = await import('./git/git-helpers.js');
168
161
  const projectPath = suppliedProjectPath(options.projectPath) ?? (await resolveProjectPath(projectId));
169
- if (process.env.PLANU_ENABLE_AUTOCOMMIT === 'true') {
170
- await gitCmd(projectPath, ['add', 'planu/']);
171
- const { planuAutoCommit } = await import('../engine/git/planu-autocommit.js');
172
- void planuAutoCommit({ projectPath, specId, reason: 'mark-done' }).catch((err) => {
173
- console.error('[update-status] planuAutoCommit failed:', err instanceof Error ? err.message : String(err));
174
- });
175
- }
176
162
  const { stdout } = await gitCmd(projectPath, ['status', '--porcelain']);
177
163
  const nonPlanuLines = stdout
178
164
  .trim()
@@ -243,15 +229,6 @@ export async function runDoneSideEffects(projectId, specId, gitBranch, transitio
243
229
  const { cleanupSpecOnDone } = await import('./git/cleanup-ops.js');
244
230
  return withAudit(projectPath, 'update_status(done)', 'cleanupSpecOnDone', () => cleanupSpecOnDone(projectPath, specId, gitBranch));
245
231
  })(),
246
- (async () => {
247
- const { removeSpecFromSession } = await import('../engine/session-state/writer.js');
248
- await removeSpecFromSession(projectPath, specId);
249
- })(),
250
- (async () => {
251
- const { updateEpicProgressInSession } = await import('../engine/session-state/writer.js');
252
- const allSpecs = await specStore.listSpecs(projectId);
253
- await updateEpicProgressInSession(projectPath, allSpecs);
254
- })(),
255
232
  (async () => {
256
233
  const { generateContextMd } = await import('../engine/context-md-generator.js');
257
234
  await generateContextMd(projectPath, projectId);
@@ -266,26 +243,37 @@ export async function runDoneSideEffects(projectId, specId, gitBranch, transitio
266
243
  return runHousekeepingSweep({ projectPath });
267
244
  })(),
268
245
  (async () => {
269
- if (hasPending(specId, 'generateSessionContext')) {
246
+ if (hasPending(specId, 'refreshSessionArtifacts')) {
270
247
  return;
271
248
  }
272
- markPending(specId, 'generateSessionContext');
249
+ markPending(specId, 'refreshSessionArtifacts');
273
250
  try {
274
- const { generateSessionContext } = await import('../engine/session-context-generator.js');
275
- await generateSessionContext(projectPath, projectId);
251
+ const { refreshSessionArtifacts } = await import('../engine/session-state/session-artifact-refresher.js');
252
+ await refreshSessionArtifacts(projectPath, projectId);
276
253
  }
277
254
  finally {
278
- clearPending(specId, 'generateSessionContext');
255
+ clearPending(specId, 'refreshSessionArtifacts');
279
256
  }
280
257
  })(),
281
258
  ]);
259
+ if (process.env.PLANU_ENABLE_AUTOCOMMIT === 'true') {
260
+ try {
261
+ const { git: gitCmd } = await import('./git/git-helpers.js');
262
+ await gitCmd(projectPath, ['add', 'planu/']);
263
+ const { planuAutoCommit } = await import('../engine/git/planu-autocommit.js');
264
+ await planuAutoCommit({ projectPath, specId, reason: 'mark-done' });
265
+ }
266
+ catch (err) {
267
+ console.error('[update-status] planuAutoCommit failed:', err instanceof Error ? err.message : String(err));
268
+ }
269
+ }
282
270
  const failures = results.filter((result) => result.status === 'rejected');
283
271
  if (failures.length > 0) {
284
272
  throw new AggregateError(normalizeRejectedReasons(failures), `${String(failures.length)} done side effect(s) failed`);
285
273
  }
286
274
  const cleanup = results[0].status === 'fulfilled' ? results[0].value : null;
287
- const planuCleanup = results[4].status === 'fulfilled' ? results[4].value : null;
288
- const housekeeping = results[5].status === 'fulfilled' ? results[5].value : null;
275
+ const planuCleanup = results[2].status === 'fulfilled' ? results[2].value : null;
276
+ const housekeeping = results[3].status === 'fulfilled' ? results[3].value : null;
289
277
  return {
290
278
  cleanupProposals: cleanup?.proposals ?? [],
291
279
  housekeepingProposal: housekeeping ?? {
@@ -11,6 +11,9 @@ function graphCoverageGaps(slice) {
11
11
  .map((criterion) => criterion.label)
12
12
  .slice(0, 10);
13
13
  }
14
+ function graphCoverageWarnings(slice) {
15
+ return slice.oversizedSources.map((record) => `oversized source: ${record.path} (${record.kind}, ${record.action})`);
16
+ }
14
17
  export async function buildGraphCoverageReport(args) {
15
18
  let graphSlice;
16
19
  try {
@@ -21,7 +24,13 @@ export async function buildGraphCoverageReport(args) {
21
24
  graphSlice = null;
22
25
  }
23
26
  if (graphSlice === null) {
24
- return { availability: 'unavailable', gaps: [], compactNodes: 0, compactEdges: 0 };
27
+ return {
28
+ availability: 'unavailable',
29
+ gaps: [],
30
+ compactNodes: 0,
31
+ compactEdges: 0,
32
+ warnings: [],
33
+ };
25
34
  }
26
35
  return {
27
36
  availability: 'available',
@@ -29,14 +38,17 @@ export async function buildGraphCoverageReport(args) {
29
38
  gaps: graphCoverageGaps(graphSlice),
30
39
  compactNodes: graphSlice.nodes.length,
31
40
  compactEdges: graphSlice.edges.length,
41
+ warnings: graphCoverageWarnings(graphSlice),
32
42
  };
33
43
  }
34
44
  export function formatGraphCoverageText(report) {
35
45
  if (report.availability === 'unavailable') {
36
46
  return '\nGRAPH unavailable (project graph unreadable)';
37
47
  }
38
- return report.gaps.length > 0
48
+ const gapLine = report.gaps.length > 0
39
49
  ? `\nGRAPH ${String(report.gaps.length)} graph-backed coverage gap(s)`
40
50
  : '';
51
+ const warningLines = report.warnings.map((warning) => `\nGRAPH ${warning}`).join('');
52
+ return gapLine + warningLines;
41
53
  }
42
54
  //# sourceMappingURL=validate-graph-coverage.js.map
@@ -867,6 +867,8 @@ function buildValidateStructuredContent(args) {
867
867
  availability: args.graphCoverage.availability,
868
868
  gapsCount: args.graphCoverage.gaps.length,
869
869
  gapsTop5: args.graphCoverage.gaps.slice(0, 5),
870
+ warningsCount: args.graphCoverage.warnings.length,
871
+ warningsTop5: args.graphCoverage.warnings.slice(0, 5),
870
872
  freshness: args.graphCoverage.freshness,
871
873
  },
872
874
  suggestionsTop5: args.suggestions.slice(0, 5),
@@ -11,9 +11,9 @@ export interface ToolContext {
11
11
  /**
12
12
  * A tool handler function signature.
13
13
  */
14
- export type ToolHandler = (input: Record<string, unknown>, ctx: ToolContext) => Promise<ToolResult>;
14
+ export type MiddlewareToolHandler = (input: Record<string, unknown>, ctx: ToolContext) => Promise<ToolResult>;
15
15
  /**
16
- * A middleware is a higher-order function that wraps a ToolHandler.
16
+ * A middleware is a higher-order function that wraps a MiddlewareToolHandler.
17
17
  */
18
- export type Middleware = (handler: ToolHandler) => ToolHandler;
18
+ export type Middleware = (handler: MiddlewareToolHandler) => MiddlewareToolHandler;
19
19
  //# sourceMappingURL=types.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type { SpawnSyncReturns } from 'node:child_process';
2
- import type { InstallationManifest, InstallationRecord } from '../cli/commands/install.js';
2
+ import type { InstallationManifest, InstallationRecord } from './installation.js';
3
3
  export type UpgradePhase = 'after-runtime-verification' | 'before-adapter-switch' | 'after-adapter-switch' | 'before-manifest-switch' | 'after-manifest-switch' | 'after-trust-switch';
4
4
  export type UpgradeJournalState = 'prepared' | 'switching' | 'trust-switched' | 'committed';
5
5
  export interface UpgradeJournal {
@@ -1,5 +1,8 @@
1
1
  import type { Spec } from './spec/core.js';
2
2
  import type { SpecStatus } from './common/primitives.js';
3
+ import type { HookEventPayload } from './hooks.js';
4
+ /** Port through which the dispatch-hook-event hook reaches the tools-layer hook dispatcher. */
5
+ export type DispatchHookEventFn = (projectId: string, payload: HookEventPayload) => Promise<void>;
3
6
  export interface CascadeContext {
4
7
  specId: string;
5
8
  spec: Spec;
@@ -1,4 +1,5 @@
1
- import type { Difficulty, RiskLevel, SpecStatus } from './common/index.js';
1
+ import type { Difficulty, RiskLevel, SpecStatus, ToolResult } from './common/index.js';
2
+ import type { UpdateStatusInput } from './spec/inputs.js';
2
3
  /** State of the dashboard HTTP server (singleton in memory) */
3
4
  export interface DashboardServerState {
4
5
  port: number;
@@ -69,6 +70,8 @@ export interface SpecStatusUpdateResult {
69
70
  newStatus: string;
70
71
  error?: string;
71
72
  }
73
+ /** Port through which the dashboard status route reaches the tools-layer status gate. */
74
+ export type UpdateStatusHandler = (input: UpdateStatusInput) => Promise<ToolResult>;
72
75
  /** Project health score with weighted components */
73
76
  export interface ProjectHealthScore {
74
77
  overall: number;
@@ -35,4 +35,24 @@ export interface ValidateDurableJobPayload {
35
35
  readonly freshnessLease?: ValidationFreshnessLease;
36
36
  readonly specPath: string;
37
37
  }
38
+ export declare const DURABLE_JOB_STATES: readonly ['accepted', 'running', 'checkpointed', 'cancelled', 'failed', 'dead-letter', 'completed'];
39
+ export type DurableJobState = (typeof DURABLE_JOB_STATES)[number];
40
+ export interface DurableJobRecord {
41
+ readonly id: string;
42
+ readonly projectId: string;
43
+ readonly workspaceId: string;
44
+ readonly state: DurableJobState;
45
+ readonly payload: unknown;
46
+ readonly checkpoint?: unknown;
47
+ readonly result?: unknown;
48
+ readonly error?: string;
49
+ readonly attempts: number;
50
+ readonly maxAttempts: number;
51
+ readonly cancelRequested: boolean;
52
+ readonly leaseOwner?: string;
53
+ readonly leaseExpiresAt?: string;
54
+ readonly fencingToken: number;
55
+ readonly createdAt: string;
56
+ readonly updatedAt: string;
57
+ }
38
58
  //# sourceMappingURL=durable-job.d.ts.map
@@ -1,2 +1,10 @@
1
- export {};
1
+ export const DURABLE_JOB_STATES = [
2
+ 'accepted',
3
+ 'running',
4
+ 'checkpointed',
5
+ 'cancelled',
6
+ 'failed',
7
+ 'dead-letter',
8
+ 'completed',
9
+ ];
2
10
  //# sourceMappingURL=durable-job.js.map
@@ -1,4 +1,5 @@
1
1
  export * from './agent-roles.js';
2
+ export * from './installation.js';
2
3
  export * from './cost-ledger.js';
3
4
  export * from './autopilot-summary.js';
4
5
  export * from './common/index.js';
@@ -264,6 +265,7 @@ export * from './agent-memory.js';
264
265
  export * from './agent-spawner.js';
265
266
  export * from './qa-gate.js';
266
267
  export * from './validation-evidence.js';
268
+ export * from './spec-dependency-graph.js';
267
269
  export * from './project-drift.js';
268
270
  export * from './technical-enrichment.js';
269
271
  export * from './agent-team.js';
@@ -1,5 +1,6 @@
1
1
  // Planu — SDD MCP Server Types (barrel re-export)
2
2
  export * from './agent-roles.js';
3
+ export * from './installation.js';
3
4
  export * from './cost-ledger.js';
4
5
  export * from './autopilot-summary.js';
5
6
  export * from './common/index.js';
@@ -261,6 +262,7 @@ export * from './agent-memory.js';
261
262
  export * from './agent-spawner.js';
262
263
  export * from './qa-gate.js';
263
264
  export * from './validation-evidence.js';
265
+ export * from './spec-dependency-graph.js';
264
266
  export * from './project-drift.js';
265
267
  export * from './technical-enrichment.js';
266
268
  export * from './agent-team.js';
@@ -0,0 +1,16 @@
1
+ export interface InstallationRecord {
2
+ host: string;
3
+ configPath: string;
4
+ format: 'standard' | 'zed';
5
+ scope: 'user' | 'project';
6
+ package: string;
7
+ version: string;
8
+ offline: boolean;
9
+ installedAt: string;
10
+ }
11
+ export interface InstallationManifest {
12
+ schemaVersion: 1;
13
+ updatedAt: string;
14
+ installations: InstallationRecord[];
15
+ }
16
+ //# sourceMappingURL=installation.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=installation.js.map
@@ -95,6 +95,14 @@ export interface ProjectKnowledgeGraph {
95
95
  };
96
96
  nodes: ProjectGraphNode[];
97
97
  edges: ProjectGraphEdge[];
98
+ oversizedSources: OversizedSourceRecord[];
99
+ }
100
+ export interface OversizedSourceRecord {
101
+ path: string;
102
+ kind: string;
103
+ bytes: number;
104
+ threshold: number;
105
+ action: 'tail' | 'skip';
98
106
  }
99
107
  export interface ProjectGraphSource {
100
108
  id: string;
@@ -148,6 +156,7 @@ export interface ProjectGraphBuildResult {
148
156
  removedSources: string[];
149
157
  skippedSources: string[];
150
158
  usedCache: boolean;
159
+ oversizedSources: OversizedSourceRecord[];
151
160
  }
152
161
  export interface ProjectGraphFreshness {
153
162
  exists: boolean;
@@ -170,6 +179,7 @@ export interface ProjectGraphSlice {
170
179
  freshness: ProjectGraphFreshness;
171
180
  nodes: ProjectGraphNode[];
172
181
  edges: ProjectGraphEdge[];
182
+ oversizedSources: OversizedSourceRecord[];
173
183
  summary: {
174
184
  specs: number;
175
185
  criteria: number;
@@ -203,6 +213,7 @@ export interface GraphCoverageReport {
203
213
  gaps: string[];
204
214
  compactNodes: number;
205
215
  compactEdges: number;
216
+ warnings: string[];
206
217
  }
207
218
  export interface NativeProjectGraphRuntime {
208
219
  nativeActive: boolean;
@@ -58,6 +58,22 @@ export interface SessionIndex {
58
58
  planVersion?: number;
59
59
  updatedAt: string;
60
60
  }
61
+ /** SPEC-1320: Sanitized failure codes for the paired session-artifact refresher. */
62
+ export type SessionArtifactRefreshFailureCode = 'STAGE_WRITE_FAILED' | 'COMMIT_FAILED' | 'UNEXPECTED_FAILURE';
63
+ /** SPEC-1320: Outcome of a paired refresh of session.json and session-context.md. */
64
+ export interface RefreshSessionArtifactsResult {
65
+ activeSpecIds: string[];
66
+ sessionJsonWritten: boolean;
67
+ sessionContextWritten: boolean;
68
+ }
69
+ /** SPEC-1320: A staged-but-not-yet-committed artifact write in the paired refresh. */
70
+ export interface PreparedSessionArtifact {
71
+ finalPath: string;
72
+ content: string;
73
+ tmpPath: string;
74
+ changed: boolean;
75
+ previous: string | null;
76
+ }
61
77
  /** SPEC-639: Status of a single agent worker in the handoff.json protocol. */
62
78
  export type AgentHandoffStatus = 'pending' | 'done' | 'failed';
63
79
  /** SPEC-639: Entry written by a worker agent when it completes its work. */
@@ -0,0 +1,21 @@
1
+ export type EdgeKind = 'dependency' | 'supersedes' | 'depends_on';
2
+ export interface GraphNode {
3
+ id: string;
4
+ status: string;
5
+ supersededBy?: string;
6
+ }
7
+ export interface GraphEdge {
8
+ from: string;
9
+ to: string;
10
+ kind: EdgeKind;
11
+ }
12
+ export interface SupersedesCycleDiagnostic {
13
+ code: 'SUPERSEDES_CYCLE';
14
+ cycle: string[];
15
+ }
16
+ export interface SpecGraph {
17
+ nodes: GraphNode[];
18
+ edges: GraphEdge[];
19
+ diagnostics: SupersedesCycleDiagnostic[];
20
+ }
21
+ //# sourceMappingURL=spec-dependency-graph.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=spec-dependency-graph.js.map
@@ -73,6 +73,7 @@ export interface CreateSkillInput {
73
73
  host: HostId | 'auto';
74
74
  overwriteExisting?: boolean;
75
75
  description?: string;
76
+ managedByPlanu?: boolean;
76
77
  }
77
78
  /** Result of the create_skill MCP tool handler. */
78
79
  export interface CreateSkillResult {
@@ -59,4 +59,49 @@ export interface ValidationImpactPlan {
59
59
  reason: string;
60
60
  changedPaths: string[];
61
61
  }
62
+ export type ScenarioVerdict = 'pass' | 'fail' | 'missing';
63
+ export interface ScenarioTestLink {
64
+ path: string;
65
+ line?: number;
66
+ runner?: string;
67
+ config?: string;
68
+ description?: string;
69
+ }
70
+ export interface ScenarioStep {
71
+ keyword: string;
72
+ text: string;
73
+ }
74
+ export interface FrontmatterScenario {
75
+ title: string;
76
+ done: boolean;
77
+ tests?: ScenarioTestLink[];
78
+ steps?: ScenarioStep[];
79
+ }
80
+ export interface PerScenarioResult {
81
+ title: string;
82
+ verdict: ScenarioVerdict;
83
+ evidence: string[];
84
+ unverifiable?: true;
85
+ }
86
+ export interface SpecComplianceResult {
87
+ dimensionScore: number;
88
+ perScenario: PerScenarioResult[];
89
+ command: string;
90
+ evidenceSource?: 'frontmatter' | 'criteria' | 'none';
91
+ ignoredCriteriaTitles?: string[];
92
+ }
93
+ export interface EvidenceTestLink {
94
+ path: string;
95
+ }
96
+ export interface EvidenceScenario {
97
+ title: string;
98
+ tests: EvidenceTestLink[];
99
+ }
100
+ export type ExecutableEvidenceSource = 'frontmatter' | 'criteria' | 'none';
101
+ export interface ExecutableEvidence {
102
+ source: ExecutableEvidenceSource;
103
+ scenarios: EvidenceScenario[];
104
+ unmappedCriteria: string[];
105
+ ignoredCriteriaTitles: string[];
106
+ }
62
107
  //# sourceMappingURL=validation-evidence.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planu/cli",
3
- "version": "5.3.68",
3
+ "version": "5.4.0",
4
4
  "description": "Planu — MCP Server for Spec Driven Development. Cross-platform (Linux/macOS/Windows, x64/arm64).",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -129,7 +129,7 @@
129
129
  ],
130
130
  "license": "SEE LICENSE IN LICENSE",
131
131
  "dependencies": {
132
- "@anthropic-ai/sdk": "^0.120.0",
132
+ "@anthropic-ai/sdk": "^0.122.0",
133
133
  "@hono/node-server": "2.1.1",
134
134
  "@modelcontextprotocol/sdk": "^1.30.0",
135
135
  "glob": "^13.0.6",
@@ -142,40 +142,40 @@
142
142
  "@commitlint/config-conventional": "^21.2.2",
143
143
  "@eslint/js": "^10.0.1",
144
144
  "@lhci/cli": "0.15.1",
145
- "@noble/hashes": "2.3.0",
145
+ "@noble/hashes": "2.4.0",
146
146
  "@playwright/test": "1.62.1",
147
147
  "@scure/base": "2.3.0",
148
- "@secretlint/secretlint-rule-no-homedir": "^13.0.4",
149
- "@secretlint/secretlint-rule-preset-recommend": "^13.0.4",
150
- "@stryker-mutator/core": "^9.6.1",
151
- "@stryker-mutator/vitest-runner": "^9.6.1",
148
+ "@secretlint/secretlint-rule-no-homedir": "^13.0.5",
149
+ "@secretlint/secretlint-rule-preset-recommend": "^13.0.5",
150
+ "@stryker-mutator/core": "^10.0.0",
151
+ "@stryker-mutator/vitest-runner": "^10.0.0",
152
152
  "@supabase/supabase-js": "^2.112.4",
153
- "@types/node": "^26.2.0",
153
+ "@types/node": "^26.4.0",
154
154
  "@types/qrcode": "1.5.6",
155
155
  "@typescript/native": "npm:typescript@^7.0.2",
156
156
  "@vitejs/plugin-vue": "^6.0.8",
157
157
  "@vitest/coverage-v8": "^4.1.11",
158
- "@vue/test-utils": "^2.4.11",
159
- "eslint": "10.9.0",
158
+ "@vue/test-utils": "^2.5.0",
159
+ "eslint": "10.9.1",
160
160
  "eslint-config-prettier": "^10.1.8",
161
161
  "eslint-import-resolver-typescript": "^4.4.5",
162
162
  "eslint-plugin-import": "^2.32.0",
163
- "happy-dom": "^20.11.6",
163
+ "happy-dom": "^20.11.12",
164
164
  "husky": "^9.1.7",
165
165
  "javascript-obfuscator": "^5.6.0",
166
166
  "jiti": "2.7.0",
167
- "knip": "^6.32.2",
168
- "lint-staged": "^17.3.0",
167
+ "knip": "^6.32.3",
168
+ "lint-staged": "^17.4.1",
169
169
  "madge": "^8.0.0",
170
170
  "prettier": "^3.9.6",
171
171
  "qrcode": "1.5.4",
172
- "secretlint": "^13.0.4",
172
+ "secretlint": "^13.0.5",
173
173
  "tsc-alias": "^1.9.2",
174
174
  "type-coverage": "^2.30.1",
175
175
  "typescript": "npm:@typescript/typescript6@^6.0.2",
176
- "typescript-eslint": "^8.67.0",
176
+ "typescript-eslint": "^8.68.0",
177
177
  "vite": "^8.2.2",
178
178
  "vitest": "^4.1.11",
179
- "vue": "^3.5.41"
179
+ "vue": "^3.5.42"
180
180
  }
181
181
  }
package/planu-plugin.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "dev.planu.cli",
3
3
  "displayName": "Planu — Spec Driven Development",
4
4
  "description": "Manage software specs, estimations, and autonomous SDD workflows. Language-agnostic MCP server for Claude Code.",
5
- "version": "5.3.68",
5
+ "version": "5.4.0",
6
6
  "icon": "assets/plugin/icon.svg",
7
7
  "command": ["npx", "@planu/cli@latest"],
8
8
  "packageName": "@planu/cli",