@planu/cli 4.12.3 → 4.14.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 (787) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +29 -25
  3. package/dist/cli/commands/inspect.d.ts +4 -0
  4. package/dist/cli/commands/inspect.js +144 -0
  5. package/dist/cli/commands/install.d.ts +19 -1
  6. package/dist/cli/commands/install.js +145 -43
  7. package/dist/cli/commands/job.d.ts +3 -0
  8. package/dist/cli/commands/job.js +119 -0
  9. package/dist/cli/commands/offline.d.ts +15 -0
  10. package/dist/cli/commands/offline.js +132 -0
  11. package/dist/cli/commands/serve.js +4 -0
  12. package/dist/cli/commands/spec.js +1 -1
  13. package/dist/cli/commands/storage.d.ts +3 -0
  14. package/dist/cli/commands/storage.js +102 -0
  15. package/dist/cli/commands/uninstall.d.ts +10 -0
  16. package/dist/cli/commands/uninstall.js +93 -7
  17. package/dist/cli/commands/validate.js +1 -1
  18. package/dist/cli/index.js +2 -0
  19. package/dist/cli/router.js +9 -1
  20. package/dist/config/crash-shield-framework-rules.json +93 -0
  21. package/dist/config/environment-schema.json +149 -0
  22. package/dist/config/hardcode-exceptions.json +4 -0
  23. package/dist/config/license-plans.json +7 -0
  24. package/dist/config/native-release-public-key.pem +3 -0
  25. package/dist/config/native-targets.json +87 -0
  26. package/dist/config/product-public.d.ts +89 -0
  27. package/dist/config/product-public.js +140 -0
  28. package/dist/config/product-public.json +312 -0
  29. package/dist/config/product-public.ts +148 -0
  30. package/dist/config/release-compatibility.json +13 -0
  31. package/dist/config/release-policy.json +26 -0
  32. package/dist/config/runtime-policy.json +44 -0
  33. package/dist/config/skill-templates/planu-validate.md +7 -4
  34. package/dist/config/subagent-templates/planu-spec-implementer.md +7 -3
  35. package/dist/config/subagent-templates/planu-validator.md +10 -5
  36. package/dist/config/technology-registry.json +120 -0
  37. package/dist/config/version.js +7 -8
  38. package/dist/config/version.ts +10 -7
  39. package/dist/engine/abortable-process-runner.js +40 -9
  40. package/dist/engine/advanced-testing/accessibility-checker.js +12 -14
  41. package/dist/engine/advanced-testing/mutation-advisor.js +3 -4
  42. package/dist/engine/advanced-testing/property-based.js +2 -3
  43. package/dist/engine/advanced-testing/test-data-advisor.js +2 -3
  44. package/dist/engine/agent-generator.js +2 -1
  45. package/dist/engine/agent-handoff-store.js +2 -1
  46. package/dist/engine/agent-prompt-generator.js +7 -5
  47. package/dist/engine/agent-telemetry.js +2 -1
  48. package/dist/engine/ai-integration/gemini/extensions-advisor.js +41 -9
  49. package/dist/engine/ambiguity-detector.js +12 -11
  50. package/dist/engine/analyzer/db-engine.js +2 -3
  51. package/dist/engine/analyzer/detectors.js +13 -14
  52. package/dist/engine/analyzer/env-setup.js +9 -10
  53. package/dist/engine/analyzer-env-scanner/env-example.js +7 -8
  54. package/dist/engine/api-spec-generator/graphql-parser.js +2 -2
  55. package/dist/engine/api-validation/graphql-schema-validator.js +2 -1
  56. package/dist/engine/api-validation/openapi-impl-validator.js +6 -7
  57. package/dist/engine/architecture-detector.js +10 -8
  58. package/dist/engine/auth/config.d.ts +1 -1
  59. package/dist/engine/auth/config.js +4 -3
  60. package/dist/engine/auto-updater/atomic-upgrade.d.ts +8 -0
  61. package/dist/engine/auto-updater/atomic-upgrade.js +381 -0
  62. package/dist/engine/auto-updater/config-detector.js +9 -3
  63. package/dist/engine/auto-updater/config-patcher.d.ts +0 -4
  64. package/dist/engine/auto-updater/config-patcher.js +10 -15
  65. package/dist/engine/auto-updater/index.d.ts +3 -1
  66. package/dist/engine/auto-updater/index.js +44 -30
  67. package/dist/engine/auto-updater/npm-registry.js +10 -2
  68. package/dist/engine/auto-updater/release-verifier.d.ts +3 -0
  69. package/dist/engine/auto-updater/release-verifier.js +112 -0
  70. package/dist/engine/auto-updater/upgrade-lock.d.ts +6 -0
  71. package/dist/engine/auto-updater/upgrade-lock.js +28 -0
  72. package/dist/engine/auto-updater/upgrade-trust-state.d.ts +7 -0
  73. package/dist/engine/auto-updater/upgrade-trust-state.js +59 -0
  74. package/dist/engine/autopilot/audit-logger.js +2 -5
  75. package/dist/engine/best-practices-library.js +2 -1
  76. package/dist/engine/browser-validator.js +2 -1
  77. package/dist/engine/build-tool-detector.js +3 -2
  78. package/dist/engine/ci-generator/context-builders.js +7 -5
  79. package/dist/engine/ci-generator/stack-detector.js +0 -2
  80. package/dist/engine/ci-generator/yaml-builder.js +0 -2
  81. package/dist/engine/claude-config-auditor/rules-auditor.js +4 -3
  82. package/dist/engine/code-transforms/typescript/ast-utils.js +2 -3
  83. package/dist/engine/complexity-budget/trivial-detector.js +2 -1
  84. package/dist/engine/compliance-test-generator/index.js +7 -2
  85. package/dist/engine/compliance-test-generator/test-formatter.js +2 -2
  86. package/dist/engine/config-health/mcp-config-checker.js +2 -1
  87. package/dist/engine/config-health/ts-checker-scripts.js +4 -3
  88. package/dist/engine/config-health/ts-checker.js +3 -2
  89. package/dist/engine/convention-injector.js +5 -7
  90. package/dist/engine/convention-scanner/convention-parser.js +3 -2
  91. package/dist/engine/core-bridge-duplicate-blocks.d.ts +3 -0
  92. package/dist/engine/core-bridge-duplicate-blocks.js +57 -0
  93. package/dist/engine/core-bridge-gaps.d.ts +4 -0
  94. package/dist/engine/core-bridge-gaps.js +75 -0
  95. package/dist/engine/core-bridge.d.ts +9 -9
  96. package/dist/engine/core-bridge.js +196 -283
  97. package/dist/engine/cost-tracking/ledger.js +2 -5
  98. package/dist/engine/coverage-gap-analyzer.js +10 -1
  99. package/dist/engine/crash-shield/detectors/framework-detector.d.ts +2 -0
  100. package/dist/engine/crash-shield/detectors/framework-detector.js +110 -192
  101. package/dist/engine/crash-shield/detectors/typescript-detector.js +2 -1
  102. package/dist/engine/dashboard/data-loader.js +2 -1
  103. package/dist/engine/data-projects-gc/gc-runner.d.ts +7 -0
  104. package/dist/engine/data-projects-gc/gc-runner.js +113 -3
  105. package/dist/engine/data-projects-gc/scanner.js +5 -1
  106. package/dist/engine/decision-store.js +11 -14
  107. package/dist/engine/deleter/core.js +5 -5
  108. package/dist/engine/dep-auditor/abandonment-data.js +2 -1
  109. package/dist/engine/dep-auditor/abandonment-registry.js +3 -1
  110. package/dist/engine/dep-auditor/cve-fetcher.js +3 -0
  111. package/dist/engine/dep-auditor/dep-duplicates-detector.js +36 -4
  112. package/dist/engine/dep-auditor/license-registry.js +2 -0
  113. package/dist/engine/dependency-evaluator.d.ts +14 -0
  114. package/dist/engine/dependency-evaluator.js +81 -0
  115. package/dist/engine/deploy/providers/fly.js +7 -7
  116. package/dist/engine/deploy/providers/netlify.js +7 -7
  117. package/dist/engine/deploy/providers/railway.js +10 -12
  118. package/dist/engine/deploy/providers/vercel.js +7 -9
  119. package/dist/engine/deprecation-scanner/pattern-loader.js +0 -2
  120. package/dist/engine/desktop-detector.js +2 -3
  121. package/dist/engine/detect-duplication.js +2 -1
  122. package/dist/engine/detectors/advanced-framework-detector/css-state-detector.js +2 -1
  123. package/dist/engine/detectors/advanced-framework-detector/legacy-detector.js +2 -3
  124. package/dist/engine/detectors/advanced-framework-detector/modern-detector.js +3 -4
  125. package/dist/engine/detectors/agent-framework-detector.js +3 -2
  126. package/dist/engine/detectors/ai-native-detector.js +4 -6
  127. package/dist/engine/detectors/cache-db-detector.js +4 -3
  128. package/dist/engine/detectors/cicd-detector.js +4 -3
  129. package/dist/engine/detectors/deployment-detector.js +11 -12
  130. package/dist/engine/detectors/frontend-perf-detector.js +14 -9
  131. package/dist/engine/detectors/library-detector-multilang-a.js +16 -3
  132. package/dist/engine/detectors/library-detector-node.js +14 -4
  133. package/dist/engine/detectors/library-detector-python.js +7 -1
  134. package/dist/engine/detectors/library-detector.js +0 -2
  135. package/dist/engine/detectors/llm-detector/provider-maps.js +3 -2
  136. package/dist/engine/detectors/mcp-candidate-detector.js +12 -16
  137. package/dist/engine/detectors/mfe-detector.js +6 -7
  138. package/dist/engine/detectors/monitoring-detector.js +4 -3
  139. package/dist/engine/detectors/otel-detector.js +3 -2
  140. package/dist/engine/detectors/otel-ecosystem-detectors.d.ts +2 -2
  141. package/dist/engine/detectors/otel-ecosystem-detectors.js +4 -3
  142. package/dist/engine/detectors/platform-specialty-detector.js +3 -5
  143. package/dist/engine/detectors/template-engine-detector.js +3 -4
  144. package/dist/engine/doc-generator/builders.js +2 -3
  145. package/dist/engine/doc-generator/mobile-distribution-guide.js +13 -17
  146. package/dist/engine/doc-generator/portal/dirty-flag-map.d.ts +2 -2
  147. package/dist/engine/doc-generator/portal/portal-regenerator.js +3 -47
  148. package/dist/engine/domain-detector.js +3 -6
  149. package/dist/engine/dynamic-knowledge/knowledge-cache.js +3 -4
  150. package/dist/engine/dynamic-knowledge/knowledge-merger.js +17 -2
  151. package/dist/engine/dynamic-knowledge/web-researcher.js +15 -14
  152. package/dist/engine/dynamic-migration-detector/manifest-readers-extended.js +0 -2
  153. package/dist/engine/e2e-test-generator.js +4 -3
  154. package/dist/engine/ecosystem-absorber/knowledge-cache.js +2 -1
  155. package/dist/engine/ecosystem-absorber/platform-crawler.js +2 -2
  156. package/dist/engine/escalator/retry-counter.js +2 -1
  157. package/dist/engine/evidence-gates/artifact-reader.d.ts +6 -0
  158. package/dist/engine/evidence-gates/artifact-reader.js +105 -21
  159. package/dist/engine/evidence-gates/lifecycle-gate.d.ts +2 -1
  160. package/dist/engine/evidence-gates/lifecycle-gate.js +54 -0
  161. package/dist/engine/execution/context.d.ts +19 -0
  162. package/dist/engine/execution/context.js +127 -0
  163. package/dist/engine/execution/deadline-io.d.ts +21 -0
  164. package/dist/engine/execution/deadline-io.js +45 -0
  165. package/dist/engine/execution/job-executor.d.ts +16 -0
  166. package/dist/engine/execution/job-executor.js +140 -0
  167. package/dist/engine/execution/job-runtime.d.ts +78 -0
  168. package/dist/engine/execution/job-runtime.js +220 -0
  169. package/dist/engine/execution/native-relevance-scorer.d.ts +6 -0
  170. package/dist/engine/execution/native-relevance-scorer.js +64 -0
  171. package/dist/engine/execution/native-worker-dispatch.d.ts +3 -0
  172. package/dist/engine/execution/native-worker-dispatch.js +46 -0
  173. package/dist/engine/execution/native-worker-protocol.d.ts +6 -0
  174. package/dist/engine/execution/native-worker-protocol.js +33 -0
  175. package/dist/engine/execution/native-worker-runtime.d.ts +4 -0
  176. package/dist/engine/execution/native-worker-runtime.js +177 -0
  177. package/dist/engine/execution/native-worker-thread.d.ts +2 -0
  178. package/dist/engine/execution/native-worker-thread.js +66 -0
  179. package/dist/engine/execution/operation-journal.d.ts +66 -0
  180. package/dist/engine/execution/operation-journal.js +260 -0
  181. package/dist/engine/execution/outbox-worker.d.ts +31 -0
  182. package/dist/engine/execution/outbox-worker.js +192 -0
  183. package/dist/engine/execution/validate-job-executor.d.ts +24 -0
  184. package/dist/engine/execution/validate-job-executor.js +342 -0
  185. package/dist/engine/execution/validate-job-payload.d.ts +5 -0
  186. package/dist/engine/execution/validate-job-payload.js +87 -0
  187. package/dist/engine/execution/validate-job-recovery.d.ts +4 -0
  188. package/dist/engine/execution/validate-job-recovery.js +47 -0
  189. package/dist/engine/execution/validate-worker-runtime.d.ts +5 -0
  190. package/dist/engine/execution/validate-worker-runtime.js +100 -0
  191. package/dist/engine/execution/validate-worker-thread.d.ts +2 -0
  192. package/dist/engine/execution/validate-worker-thread.js +71 -0
  193. package/dist/engine/execution-plan/desktop-distribution.js +3 -7
  194. package/dist/engine/execution-plan/mobile-distribution.js +4 -9
  195. package/dist/engine/execution-plan/phases.js +4 -5
  196. package/dist/engine/execution-plan/plan-utils.js +8 -5
  197. package/dist/engine/facilitate/context-loader.js +3 -9
  198. package/dist/engine/figma/code-connect-fetcher.js +9 -8
  199. package/dist/engine/filesystem-watcher/index.d.ts +3 -3
  200. package/dist/engine/filesystem-watcher/index.js +5 -5
  201. package/dist/engine/framework-detector.js +14 -15
  202. package/dist/engine/git/planu-autocommit.js +8 -7
  203. package/dist/engine/git/repository-probe.d.ts +3 -0
  204. package/dist/engine/git/repository-probe.js +13 -0
  205. package/dist/engine/global-rules-manager.js +2 -2
  206. package/dist/engine/handoff-artifacts/io.js +2 -3
  207. package/dist/engine/handoff-artifacts/schemas/red-tests-handoff.js +8 -1
  208. package/dist/engine/handoff-artifacts/schemas.d.ts +4 -0
  209. package/dist/engine/handoff-artifacts/schemas.js +5 -0
  210. package/dist/engine/hook-generator/stack-hook-templates.js +4 -4
  211. package/dist/engine/hooks/config-loader.js +1 -1
  212. package/dist/engine/hooks/context-injector.js +4 -7
  213. package/dist/engine/hooks/file-watcher.js +1 -14
  214. package/dist/engine/hooks-reconciler.js +6 -4
  215. package/dist/engine/infrastructure/component-mapper.js +5 -7
  216. package/dist/engine/infrastructure/docker-compose-generator.js +8 -10
  217. package/dist/engine/infrastructure/index.js +6 -3
  218. package/dist/engine/infrastructure/kubernetes-generator.js +2 -2
  219. package/dist/engine/infrastructure/railway-generator.js +10 -8
  220. package/dist/engine/infrastructure/signal-detector.js +6 -8
  221. package/dist/engine/infrastructure/terraform-generator.js +6 -8
  222. package/dist/engine/legal-compliance/detector.js +3 -2
  223. package/dist/engine/local-first/storage-advisor.js +5 -6
  224. package/dist/engine/macos-keychain-native-port.d.ts +5 -0
  225. package/dist/engine/macos-keychain-native-port.js +26 -0
  226. package/dist/engine/marketplace-fetcher/cache.js +3 -1
  227. package/dist/engine/mcp-config/mcp-config-writer.d.ts +2 -2
  228. package/dist/engine/mcp-config/mcp-config-writer.js +10 -8
  229. package/dist/engine/migration/db-migrator.js +2 -5
  230. package/dist/engine/migration/equivalence-mapper.js +12 -13
  231. package/dist/engine/migration/service-catalogs.js +6 -7
  232. package/dist/engine/migration/service-migrator-catalogs.js +6 -7
  233. package/dist/engine/mobile-detector-ios.js +2 -3
  234. package/dist/engine/mobile-detector.js +16 -4
  235. package/dist/engine/model-router/complexity-analyzer.js +4 -7
  236. package/dist/engine/multi-agent-review/security-analyzer.js +3 -1
  237. package/dist/engine/multi-app-detector/app-type.js +26 -21
  238. package/dist/engine/multi-app-detector/core.js +3 -2
  239. package/dist/engine/multi-teammate-review/disagreement-counter.js +2 -1
  240. package/dist/engine/multi-teammate-review/panel-orchestrator.js +0 -2
  241. package/dist/engine/mutation-config-generator.js +10 -7
  242. package/dist/engine/native-capability-policy.d.ts +4 -0
  243. package/dist/engine/native-capability-policy.js +24 -0
  244. package/dist/engine/native-platform.d.ts +3 -0
  245. package/dist/engine/native-platform.js +44 -0
  246. package/dist/engine/native-runtime-handshake.d.ts +20 -0
  247. package/dist/engine/native-runtime-handshake.js +230 -0
  248. package/dist/engine/network-policy.d.ts +27 -0
  249. package/dist/engine/network-policy.js +174 -0
  250. package/dist/engine/next-spec-resolver/dependency-filter.js +2 -22
  251. package/dist/engine/nfr-profile-detector.js +12 -16
  252. package/dist/engine/nli-keywords.js +8 -9
  253. package/dist/engine/oauth/config-guard.js +4 -5
  254. package/dist/engine/observability/local-execution-spans.d.ts +15 -0
  255. package/dist/engine/observability/local-execution-spans.js +63 -0
  256. package/dist/engine/orchestrator/runtime.js +0 -1
  257. package/dist/engine/package-registry.js +2 -6
  258. package/dist/engine/performance-analyzer.js +2 -5
  259. package/dist/engine/permissions-merger/stack-detectors.js +5 -5
  260. package/dist/engine/planu-core.darwin-arm64.node.manifest.json +39 -0
  261. package/dist/engine/planu-core.darwin-arm64.node.sbom.json +1310 -0
  262. package/dist/engine/planu-core.darwin-x64.node.manifest.json +39 -0
  263. package/dist/engine/planu-core.darwin-x64.node.sbom.json +1310 -0
  264. package/dist/engine/planu-core.linux-arm64-gnu.node.manifest.json +38 -0
  265. package/dist/engine/planu-core.linux-arm64-gnu.node.sbom.json +1310 -0
  266. package/dist/engine/planu-core.linux-arm64-musl.node.manifest.json +38 -0
  267. package/dist/engine/planu-core.linux-arm64-musl.node.sbom.json +1310 -0
  268. package/dist/engine/planu-core.linux-x64-gnu.node.manifest.json +38 -0
  269. package/dist/engine/planu-core.linux-x64-gnu.node.sbom.json +1310 -0
  270. package/dist/engine/planu-core.linux-x64-musl.node.manifest.json +38 -0
  271. package/dist/engine/planu-core.linux-x64-musl.node.sbom.json +1310 -0
  272. package/dist/engine/planu-core.win32-arm64-msvc.node.manifest.json +38 -0
  273. package/dist/engine/planu-core.win32-arm64-msvc.node.sbom.json +1310 -0
  274. package/dist/engine/planu-core.win32-x64-msvc.node.manifest.json +38 -0
  275. package/dist/engine/planu-core.win32-x64-msvc.node.sbom.json +1310 -0
  276. package/dist/engine/platform-detector/desktop.js +15 -2
  277. package/dist/engine/platform-detector/extensions.js +2 -1
  278. package/dist/engine/platform-detector/games.js +2 -1
  279. package/dist/engine/platform-detector.js +3 -2
  280. package/dist/engine/platform-engineering/idp-detector.js +2 -1
  281. package/dist/engine/plugin-installer/stack-matcher.js +9 -17
  282. package/dist/engine/plugins/lifecycle.js +6 -2
  283. package/dist/engine/prior-decisions/contradiction-detector.js +60 -30
  284. package/dist/engine/project-dna/stack-detector.js +15 -17
  285. package/dist/engine/project-graph/builder.js +11 -0
  286. package/dist/engine/project-graph/cache.js +1 -1
  287. package/dist/engine/project-graph/freshness-projection.d.ts +16 -0
  288. package/dist/engine/project-graph/freshness-projection.js +95 -0
  289. package/dist/engine/project-graph/index.d.ts +1 -0
  290. package/dist/engine/project-graph/index.js +1 -0
  291. package/dist/engine/project-graph/query.js +15 -25
  292. package/dist/engine/project-health-checker.js +3 -4
  293. package/dist/engine/project-scanner/stack-detector.js +17 -17
  294. package/dist/engine/property-test-generator.js +2 -3
  295. package/dist/engine/qa-gate.d.ts +1 -0
  296. package/dist/engine/qa-gate.js +6 -4
  297. package/dist/engine/quality-gates/gate-catalog.js +47 -46
  298. package/dist/engine/quality-gates/gate-injector.js +9 -4
  299. package/dist/engine/registry/core.js +0 -2
  300. package/dist/engine/registry/loader.js +9 -12
  301. package/dist/engine/registry/matcher.js +129 -24
  302. package/dist/engine/resilience-detector/concurrency-detector.js +4 -4
  303. package/dist/engine/resilience-detector/middleware-detector.js +11 -13
  304. package/dist/engine/resilience-detector/validation-detector.js +17 -4
  305. package/dist/engine/reverse-engineer/config-analyzer.js +9 -8
  306. package/dist/engine/reverse-engineer/orchestrator.js +5 -9
  307. package/dist/engine/reverse-engineer/test-file-parser.js +6 -3
  308. package/dist/engine/rules-generator/index.js +6 -5
  309. package/dist/engine/runtime-policy.d.ts +7 -0
  310. package/dist/engine/runtime-policy.js +101 -0
  311. package/dist/engine/runtime-security/checkers/content-security.js +21 -6
  312. package/dist/engine/runtime-security/checkers/file-permissions.js +0 -2
  313. package/dist/engine/safety/atomic-write-file.js +20 -9
  314. package/dist/engine/safety/atomic-writer.js +10 -3
  315. package/dist/engine/safety/cross-process-lock.d.ts +3 -40
  316. package/dist/engine/safety/cross-process-lock.js +268 -272
  317. package/dist/engine/safety/file-mutex.d.ts +2 -9
  318. package/dist/engine/safety/file-mutex.js +155 -87
  319. package/dist/engine/safety/health-monitor.js +15 -6
  320. package/dist/engine/safety/lock-lease-store.d.ts +79 -0
  321. package/dist/engine/safety/lock-lease-store.js +372 -0
  322. package/dist/engine/safety/lock-scavenger.d.ts +2 -5
  323. package/dist/engine/safety/lock-scavenger.js +158 -76
  324. package/dist/engine/safety/lock-staleness.js +4 -1
  325. package/dist/engine/safety/obsolete-lock-guard.d.ts +8 -0
  326. package/dist/engine/safety/obsolete-lock-guard.js +31 -0
  327. package/dist/engine/safety/transaction.js +3 -3
  328. package/dist/engine/sandbox/index.js +2 -1
  329. package/dist/engine/sandbox/runner-detect.js +3 -2
  330. package/dist/engine/sandbox/runner-docker.js +4 -3
  331. package/dist/engine/scan-project/module-discoverer.js +3 -2
  332. package/dist/engine/schema-generator.js +16 -9
  333. package/dist/engine/security-analyzer/criteria-generator.js +2 -3
  334. package/dist/engine/self-healing/healer.js +4 -4
  335. package/dist/engine/session-safeguard/learnings-buffer.d.ts +1 -2
  336. package/dist/engine/session-safeguard/learnings-buffer.js +42 -65
  337. package/dist/engine/shared-agent-memory.js +66 -74
  338. package/dist/engine/skill-adapter/command-rewriter.js +3 -2
  339. package/dist/engine/skill-adapter/index.js +3 -3
  340. package/dist/engine/skill-adapter/placeholder-map.js +3 -2
  341. package/dist/engine/skill-bootstrap/stack-matcher.js +47 -48
  342. package/dist/engine/skill-generation/stack-content-generator.js +0 -2
  343. package/dist/engine/skill-generator/workflow-skill-generator.js +2 -1
  344. package/dist/engine/skill-registry/ttl-refresh.js +3 -1
  345. package/dist/engine/skills/skills-fetcher.js +3 -6
  346. package/dist/engine/skills-reconciler.js +19 -39
  347. package/dist/engine/spec-coverage/test-finder.js +7 -6
  348. package/dist/engine/spec-diff-engine.js +3 -3
  349. package/dist/engine/spec-generator/api-key-resolver.d.ts +1 -1
  350. package/dist/engine/spec-generator/api-key-resolver.js +3 -24
  351. package/dist/engine/spec-generators/issue-extractor.js +9 -3
  352. package/dist/engine/spec-migrator/drift-detector.js +5 -13
  353. package/dist/engine/spec-migrator/filesystem-import.js +14 -10
  354. package/dist/engine/spec-migrator/planu-canonical-policy.js +10 -1
  355. package/dist/engine/spec-migrator/strict-planu-cleanup.js +24 -25
  356. package/dist/engine/spec-registry/adapter.d.ts +0 -5
  357. package/dist/engine/spec-registry/adapter.js +45 -46
  358. package/dist/engine/spec-registry/client.js +2 -0
  359. package/dist/engine/spec-source-sync.js +3 -2
  360. package/dist/engine/spec-templates/custom-loader.js +2 -3
  361. package/dist/engine/spec-templates/templates-domain-specific.js +8 -5
  362. package/dist/engine/spec-templates/templates-perf-integration.js +2 -3
  363. package/dist/engine/stack-auditor/manifest-reader.js +0 -2
  364. package/dist/engine/staleness/stale-implementing.js +7 -7
  365. package/dist/engine/tdd-scaffold-generator.js +24 -11
  366. package/dist/engine/teammate-router/green-phase-verifier.js +2 -1
  367. package/dist/engine/teammate-router/red-phase-verifier.js +2 -1
  368. package/dist/engine/technology-registry.d.ts +11 -0
  369. package/dist/engine/technology-registry.js +142 -0
  370. package/dist/engine/telemetry/error-reporter.d.ts +1 -2
  371. package/dist/engine/telemetry/error-reporter.js +11 -18
  372. package/dist/engine/telemetry/health-checker.js +5 -14
  373. package/dist/engine/telemetry/index.d.ts +0 -1
  374. package/dist/engine/telemetry/index.js +0 -1
  375. package/dist/engine/telemetry/stance.js +3 -2
  376. package/dist/engine/telemetry/telemetry-client.d.ts +1 -5
  377. package/dist/engine/telemetry/telemetry-client.js +45 -29
  378. package/dist/engine/telemetry/telemetry-store.d.ts +3 -3
  379. package/dist/engine/telemetry/telemetry-store.js +30 -23
  380. package/dist/engine/test-framework-detector/detectors.js +8 -8
  381. package/dist/engine/test-framework-detector/strategy.js +8 -9
  382. package/dist/engine/test-generators/agent-test-templates.js +2 -3
  383. package/dist/engine/test-generators/contract-test-generator.d.ts +1 -1
  384. package/dist/engine/test-generators/contract-test-generator.js +9 -202
  385. package/dist/engine/test-generators/platform-test-templates-b.js +2 -3
  386. package/dist/engine/test-generators/platform-test-templates.js +2 -5
  387. package/dist/engine/test-mocks-generator.js +4 -3
  388. package/dist/engine/test-plan-generator.js +30 -12
  389. package/dist/engine/test-scaffold-generator/advanced-scaffold.js +4 -5
  390. package/dist/engine/test-scaffold-generator/unit-scaffold.js +5 -6
  391. package/dist/engine/timing/budget.d.ts +6 -17
  392. package/dist/engine/timing/budget.js +80 -64
  393. package/dist/engine/tool-groups/group-manager.js +3 -3
  394. package/dist/engine/universal-rules/installer.js +1 -1
  395. package/dist/engine/universal-rules/rules/planu-modes.js +2 -0
  396. package/dist/engine/universal-rules/rules/planu-release-policy.js +1 -0
  397. package/dist/engine/update-notifier.js +8 -5
  398. package/dist/engine/validation/approved-spec-portability.d.ts +12 -0
  399. package/dist/engine/validation/approved-spec-portability.js +107 -0
  400. package/dist/engine/validation/durable-validation.d.ts +36 -0
  401. package/dist/engine/validation/durable-validation.js +335 -0
  402. package/dist/engine/validation/validation-freshness.d.ts +36 -0
  403. package/dist/engine/validation/validation-freshness.js +427 -0
  404. package/dist/engine/validation/validation-receipt-codec.d.ts +13 -0
  405. package/dist/engine/validation/validation-receipt-codec.js +182 -0
  406. package/dist/engine/validation/validation-receipt.d.ts +59 -0
  407. package/dist/engine/validation/validation-receipt.js +282 -0
  408. package/dist/engine/validation/validation-source-policy.d.ts +4 -0
  409. package/dist/engine/validation/validation-source-policy.js +16 -0
  410. package/dist/engine/validation/validation-submission.d.ts +36 -0
  411. package/dist/engine/validation/validation-submission.js +128 -0
  412. package/dist/engine/validation-evidence-ledger.js +41 -0
  413. package/dist/engine/validation-impact-planner.js +25 -9
  414. package/dist/engine/validator/spec-compliance-runner.d.ts +1 -1
  415. package/dist/engine/validator/spec-compliance-runner.js +17 -8
  416. package/dist/engine/validator/validation-report-writer.js +1 -1
  417. package/dist/engine/validator.js +2 -1
  418. package/dist/engine/verify-integrations/index.js +1 -1
  419. package/dist/engine/version-resolver.js +5 -6
  420. package/dist/engine/web-fetcher/stack-advisor.js +156 -92
  421. package/dist/engine/web-fetcher/stack-detector.js +114 -54
  422. package/dist/engine/workspace-manager.js +3 -2
  423. package/dist/errors/classified-degradation.d.ts +3 -0
  424. package/dist/errors/classified-degradation.js +10 -0
  425. package/dist/errors/degradation-sink.d.ts +3 -0
  426. package/dist/errors/degradation-sink.js +5 -0
  427. package/dist/errors/error-taxonomy.d.ts +12 -0
  428. package/dist/errors/error-taxonomy.js +62 -0
  429. package/dist/hosts/claude-code/ux/mcp-prompts.js +10 -4
  430. package/dist/hosts/claude-code/ux/mcp-resources.js +4 -2
  431. package/dist/hosts/codex/config-scaffold.js +4 -3
  432. package/dist/hosts/gemini/config-scaffold.js +2 -1
  433. package/dist/hosts/gemini/multimodal-spec-flow.js +7 -4
  434. package/dist/index.js +21 -6
  435. package/dist/resources/patterns.js +3 -1
  436. package/dist/resources/specs.js +3 -1
  437. package/dist/resources/templates.js +3 -1
  438. package/dist/security/adapters/environment.d.ts +12 -0
  439. package/dist/security/adapters/environment.js +25 -0
  440. package/dist/security/adapters/linux-secret-service.d.ts +8 -0
  441. package/dist/security/adapters/linux-secret-service.js +60 -0
  442. package/dist/security/adapters/macos-keychain.d.ts +18 -0
  443. package/dist/security/adapters/macos-keychain.js +90 -0
  444. package/dist/security/adapters/windows-credential-manager.d.ts +8 -0
  445. package/dist/security/adapters/windows-credential-manager.js +58 -0
  446. package/dist/security/redactor.d.ts +5 -0
  447. package/dist/security/redactor.js +58 -0
  448. package/dist/security/secret-field.d.ts +5 -0
  449. package/dist/security/secret-field.js +17 -0
  450. package/dist/security/secret-migration.d.ts +3 -0
  451. package/dist/security/secret-migration.js +123 -0
  452. package/dist/security/secret-provider.d.ts +23 -0
  453. package/dist/security/secret-provider.js +145 -0
  454. package/dist/security/secure-json.d.ts +3 -0
  455. package/dist/security/secure-json.js +29 -0
  456. package/dist/storage/api-surfaces-store.js +2 -2
  457. package/dist/storage/approval-operation-lock.d.ts +1 -1
  458. package/dist/storage/approval-operation-lock.js +5 -3
  459. package/dist/storage/audit-trail-store.d.ts +1 -1
  460. package/dist/storage/audit-trail-store.js +48 -62
  461. package/dist/storage/autopilot-log-store.js +12 -5
  462. package/dist/storage/base-store.d.ts +8 -8
  463. package/dist/storage/base-store.js +57 -20
  464. package/dist/storage/checkpoint-store.js +5 -2
  465. package/dist/storage/comments-store.js +2 -2
  466. package/dist/storage/compliance-audit-store.js +5 -2
  467. package/dist/storage/compliance-gate-config-store.js +7 -4
  468. package/dist/storage/compliance-store.js +2 -2
  469. package/dist/storage/context-profile-store.js +2 -2
  470. package/dist/storage/crash-shield-store.js +8 -4
  471. package/dist/storage/feedback-store.js +10 -6
  472. package/dist/storage/figma-store.js +8 -4
  473. package/dist/storage/file-mutex.js +9 -1
  474. package/dist/storage/gaps-log.js +7 -4
  475. package/dist/storage/global-projects-store.js +4 -2
  476. package/dist/storage/ideas-store.js +2 -2
  477. package/dist/storage/index.d.ts +5 -0
  478. package/dist/storage/index.js +5 -0
  479. package/dist/storage/knowledge-store/knowledge.js +27 -33
  480. package/dist/storage/lessons-store.js +2 -2
  481. package/dist/storage/license-store.js +13 -41
  482. package/dist/storage/migrations/canonical-storage.d.ts +15 -0
  483. package/dist/storage/migrations/canonical-storage.js +599 -0
  484. package/dist/storage/oauth-store.js +36 -8
  485. package/dist/storage/path-resolver.js +16 -3
  486. package/dist/storage/pr-store.js +2 -2
  487. package/dist/storage/project-drift-store.js +20 -8
  488. package/dist/storage/project-identity.d.ts +32 -0
  489. package/dist/storage/project-identity.js +194 -0
  490. package/dist/storage/project-resolver.js +14 -7
  491. package/dist/storage/release-notes-store.js +2 -6
  492. package/dist/storage/runtime-db.d.ts +186 -0
  493. package/dist/storage/runtime-db.js +1054 -0
  494. package/dist/storage/schema-registry.d.ts +5 -0
  495. package/dist/storage/schema-registry.js +74 -0
  496. package/dist/storage/sentry-store.js +20 -9
  497. package/dist/storage/session-state-store.js +12 -5
  498. package/dist/storage/session-store.js +12 -4
  499. package/dist/storage/skill-registry-storage.d.ts +1 -1
  500. package/dist/storage/skill-registry-storage.js +13 -11
  501. package/dist/storage/slack-store.js +10 -5
  502. package/dist/storage/spec-store.js +31 -24
  503. package/dist/storage/status-store/file-lock.js +31 -9
  504. package/dist/storage/status-store/self-healing.js +10 -5
  505. package/dist/storage/status-store/version-sync.js +8 -6
  506. package/dist/storage/steering-store.js +2 -2
  507. package/dist/storage/storage-bundle.d.ts +5 -0
  508. package/dist/storage/storage-bundle.js +117 -0
  509. package/dist/storage/storage-catalog-validation.d.ts +3 -0
  510. package/dist/storage/storage-catalog-validation.js +20 -0
  511. package/dist/storage/storage-catalog.d.ts +25 -0
  512. package/dist/storage/storage-catalog.js +390 -0
  513. package/dist/storage/storage-layout.d.ts +24 -0
  514. package/dist/storage/storage-layout.js +101 -0
  515. package/dist/storage/storybook-store.js +2 -2
  516. package/dist/storage/supabase-store.js +24 -6
  517. package/dist/storage/tdd-policy-store.js +8 -6
  518. package/dist/storage/tech-debt-store.js +3 -3
  519. package/dist/storage/technology-selection-store.d.ts +1 -1
  520. package/dist/storage/technology-selection-store.js +6 -3
  521. package/dist/storage/token-cache-store.js +3 -3
  522. package/dist/storage/token-ledger-store.js +13 -8
  523. package/dist/storage/transition-log.js +7 -4
  524. package/dist/storage/trash-store.js +15 -6
  525. package/dist/storage/vector-store/migrator.js +7 -2
  526. package/dist/storage/vector-store/sqlite-adapter.js +4 -1
  527. package/dist/storage/webhook-server-store.js +2 -2
  528. package/dist/tools/api-spec-generator-handler.js +3 -2
  529. package/dist/tools/auto-update-handler.d.ts +1 -1
  530. package/dist/tools/auto-update-handler.js +1 -1
  531. package/dist/tools/browser-validate-handler.js +2 -1
  532. package/dist/tools/challenge-spec/platform-challenge-scenarios-b.js +8 -5
  533. package/dist/tools/challenge-spec/scenarios-desktop.js +8 -3
  534. package/dist/tools/challenge-spec/scenarios-failure.js +7 -2
  535. package/dist/tools/challenge-spec/security-challenge-scenarios.js +3 -3
  536. package/dist/tools/clarify-requirements/multiple-choice.js +53 -41
  537. package/dist/tools/comments-handler.js +2 -3
  538. package/dist/tools/compliance-test-handler.js +2 -2
  539. package/dist/tools/configure-telemetry.js +11 -11
  540. package/dist/tools/create-spec/auto-pipeline.js +13 -1
  541. package/dist/tools/create-spec/autopilot-analyzer.d.ts +1 -1
  542. package/dist/tools/create-spec/autopilot-analyzer.js +2 -4
  543. package/dist/tools/create-spec/mcp-tool-contract.d.ts +10 -4
  544. package/dist/tools/create-spec/mcp-tool-contract.js +7 -36
  545. package/dist/tools/create-spec/post-creation.d.ts +2 -1
  546. package/dist/tools/create-spec/post-creation.js +56 -54
  547. package/dist/tools/create-spec/relevance-scorer.d.ts +1 -1
  548. package/dist/tools/create-spec/relevance-scorer.js +17 -1
  549. package/dist/tools/create-spec/spec-builder.js +2 -12
  550. package/dist/tools/create-spec/spec-created-outbox-consumer.d.ts +14 -0
  551. package/dist/tools/create-spec/spec-created-outbox-consumer.js +176 -0
  552. package/dist/tools/create-spec.js +385 -520
  553. package/dist/tools/define-ui-contract/agent-interaction-contract.js +2 -4
  554. package/dist/tools/define-ui-contract-desktop/desktop-contract.js +12 -4
  555. package/dist/tools/define-ui-contract-desktop/native-contract.js +7 -3
  556. package/dist/tools/define-ui-contract-extensions.js +2 -3
  557. package/dist/tools/define-ui-contract-mobile.js +5 -9
  558. package/dist/tools/define-ui-contract-web/component-tree.js +4 -3
  559. package/dist/tools/define-ui-contract.js +7 -4
  560. package/dist/tools/deploy/deploy-spec.js +2 -4
  561. package/dist/tools/deploy/deploy-status.js +2 -4
  562. package/dist/tools/design-schema/nosql-category-schemas.js +2 -3
  563. package/dist/tools/design-schema-sql/migrations.js +3 -2
  564. package/dist/tools/design-schema-sql/tables.js +4 -1
  565. package/dist/tools/design-schema.js +4 -3
  566. package/dist/tools/feedback-handler.js +2 -4
  567. package/dist/tools/gc-data-projects.js +5 -5
  568. package/dist/tools/generate-execution-plan.js +3 -4
  569. package/dist/tools/generate-sub-agent.js +2 -1
  570. package/dist/tools/generate-tests/generators/a11y-tests-generator.js +5 -4
  571. package/dist/tools/generate-tests/generators/advanced-testing-generator.js +5 -4
  572. package/dist/tools/generate-tests/generators/concurrency-test-generator/js-templates.js +9 -4
  573. package/dist/tools/generate-tests/generators/concurrency-test-generator.js +8 -4
  574. package/dist/tools/generate-tests/generators/database/detectors.js +9 -3
  575. package/dist/tools/generate-tests/generators/database/index.js +2 -4
  576. package/dist/tools/generate-tests/generators/event-test-generator.js +5 -4
  577. package/dist/tools/generate-tests/generators/game-tests-generator.js +2 -1
  578. package/dist/tools/generate-tests/generators/graphql-test-generator.js +11 -5
  579. package/dist/tools/generate-tests/generators/grpc-test-generator.js +2 -3
  580. package/dist/tools/generate-tests/generators/llm-security-test-generator.js +4 -3
  581. package/dist/tools/generate-tests/generators/local-first-test-generator.js +4 -3
  582. package/dist/tools/generate-tests/generators/mcp-tests-generator.js +11 -9
  583. package/dist/tools/generate-tests/generators/microservices/index.js +2 -3
  584. package/dist/tools/generate-tests/generators/otel-test-generator.js +6 -3
  585. package/dist/tools/generate-tests/generators/security/detectors.js +2 -5
  586. package/dist/tools/generate-tests/generators/security/index.js +2 -4
  587. package/dist/tools/generate-tests/generators/supply-chain-test-generator.js +2 -3
  588. package/dist/tools/generate-tests/generators/visual-regression-generator.js +14 -17
  589. package/dist/tools/generate-tests/generators/websocket-test-generator.js +2 -3
  590. package/dist/tools/generate-tests/test-helpers.js +11 -12
  591. package/dist/tools/generate-tests-content.js +4 -3
  592. package/dist/tools/generate-tests.js +7 -4
  593. package/dist/tools/git/git-helpers.d.ts +0 -2
  594. package/dist/tools/git/git-helpers.js +7 -7
  595. package/dist/tools/github-pr-handler.js +10 -3
  596. package/dist/tools/heal-spec-docs.js +6 -53
  597. package/dist/tools/hook-generator-handler.js +6 -6
  598. package/dist/tools/init-constitution/platform-principles.js +4 -2
  599. package/dist/tools/init-project/agents-md-writer.js +14 -5
  600. package/dist/tools/init-project/claude-md-generator.js +19 -12
  601. package/dist/tools/init-project/handler.js +165 -73
  602. package/dist/tools/init-project/host-assets-writer.d.ts +1 -1
  603. package/dist/tools/init-project/host-assets-writer.js +4 -2
  604. package/dist/tools/init-project/lifecycle-helpers.js +3 -5
  605. package/dist/tools/init-project/lint-scaffolder.js +6 -2
  606. package/dist/tools/init-project/migration-runner.d.ts +10 -1
  607. package/dist/tools/init-project/migration-runner.js +68 -3
  608. package/dist/tools/init-project/per-client-files-writer.js +14 -4
  609. package/dist/tools/init-project/rules-generator.js +10 -2
  610. package/dist/tools/init-project/scaffold-writer.d.ts +1 -1
  611. package/dist/tools/init-project/scaffold-writer.js +17 -15
  612. package/dist/tools/jobs/handlers.d.ts +15 -0
  613. package/dist/tools/jobs/handlers.js +126 -0
  614. package/dist/tools/list-specs.js +35 -34
  615. package/dist/tools/manage-plugins-handler.js +17 -9
  616. package/dist/tools/migrate-tech/advanced-handlers.js +3 -2
  617. package/dist/tools/migrate-tech/build-tool-handlers.js +3 -2
  618. package/dist/tools/migrate-tech/core-handlers.js +5 -2
  619. package/dist/tools/migrate-tech/data-handlers.js +6 -3
  620. package/dist/tools/migrate-tech-advanced/rollback-handlers.js +3 -2
  621. package/dist/tools/migrate-tech-advanced/service-handlers.js +5 -2
  622. package/dist/tools/oauth-handler.js +7 -1
  623. package/dist/tools/register-sdd-tools.d.ts +1 -1
  624. package/dist/tools/register-sdd-tools.js +5 -0
  625. package/dist/tools/register-spec-tools/core-spec-tools.js +31 -0
  626. package/dist/tools/registry/auth.js +13 -5
  627. package/dist/tools/registry/publish.js +7 -4
  628. package/dist/tools/resolve-project-path.d.ts +2 -2
  629. package/dist/tools/resolve-project-path.js +7 -7
  630. package/dist/tools/reverse-engineer/analyzer.js +14 -14
  631. package/dist/tools/rollback-release.js +3 -2
  632. package/dist/tools/safe-handler.js +295 -171
  633. package/dist/tools/schema-generator-handler.js +2 -1
  634. package/dist/tools/schemas/output-schemas.d.ts +88 -82
  635. package/dist/tools/schemas/output-schemas.js +12 -94
  636. package/dist/tools/schemas/plugins-schemas.js +0 -2
  637. package/dist/tools/schemas/registry.js +0 -2
  638. package/dist/tools/schemas/skill-registry-schemas.js +0 -2
  639. package/dist/tools/schemas/validate-output-schema.d.ts +256 -0
  640. package/dist/tools/schemas/validate-output-schema.js +212 -0
  641. package/dist/tools/sentry-handler.js +6 -1
  642. package/dist/tools/skill-bootstrap-handler.js +7 -4
  643. package/dist/tools/status-handler.js +4 -0
  644. package/dist/tools/storage-bundle-handler.d.ts +9 -0
  645. package/dist/tools/storage-bundle-handler.js +29 -0
  646. package/dist/tools/storage-paths-handler.d.ts +9 -0
  647. package/dist/tools/storage-paths-handler.js +17 -0
  648. package/dist/tools/suggest-mcp-server.js +11 -5
  649. package/dist/tools/suggest-mcps.js +29 -9
  650. package/dist/tools/suggest-tooling/advanced-testing-catalog.js +4 -5
  651. package/dist/tools/suggest-tooling/build-tool-catalog.js +2 -1
  652. package/dist/tools/suggest-tooling/css-framework-catalog.js +13 -7
  653. package/dist/tools/suggest-tooling/framework-catalog.js +3 -5
  654. package/dist/tools/suggest-tooling/frontend-perf-catalog.js +2 -6
  655. package/dist/tools/suggest-tooling/handler.js +10 -4
  656. package/dist/tools/suggest-tooling/hypermedia-catalog.js +11 -3
  657. package/dist/tools/suggest-tooling/linting-catalog.js +4 -7
  658. package/dist/tools/suggest-tooling/llm-security-catalog.js +2 -1
  659. package/dist/tools/suggest-tooling/local-first-catalog.js +7 -5
  660. package/dist/tools/suggest-tooling/observability-catalog.js +3 -4
  661. package/dist/tools/suggest-tooling/otel-catalog.js +4 -1
  662. package/dist/tools/suggest-tooling/resilience-catalog.js +16 -5
  663. package/dist/tools/suggest-tooling/skills-catalog.js +10 -9
  664. package/dist/tools/suggest-tooling/supply-chain-catalog.js +2 -3
  665. package/dist/tools/supabase-handler.js +2 -1
  666. package/dist/tools/token-intelligence-handler.js +2 -2
  667. package/dist/tools/token-recording.js +2 -2
  668. package/dist/tools/token-savings-handler.js +2 -2
  669. package/dist/tools/tool-registry/core-tools.js +131 -0
  670. package/dist/tools/tool-registry/group-infra.js +10 -12
  671. package/dist/tools/tool-registry/group-quality-compliance.js +5 -12
  672. package/dist/tools/update-status/approval-gates.d.ts +13 -0
  673. package/dist/tools/update-status/approval-gates.js +81 -0
  674. package/dist/tools/update-status/batch.js +4 -2
  675. package/dist/tools/update-status/dod-gates.d.ts +6 -24
  676. package/dist/tools/update-status/dod-gates.js +60 -135
  677. package/dist/tools/update-status/done-receipt-verifier.d.ts +15 -0
  678. package/dist/tools/update-status/done-receipt-verifier.js +145 -0
  679. package/dist/tools/update-status/evidence-gate.js +154 -2
  680. package/dist/tools/update-status/file-sync.js +23 -12
  681. package/dist/tools/update-status/gate-harness.d.ts +7 -0
  682. package/dist/tools/update-status/gate-harness.js +8 -0
  683. package/dist/tools/update-status/index.js +228 -325
  684. package/dist/tools/update-status/qa-gate.d.ts +1 -1
  685. package/dist/tools/update-status/qa-gate.js +2 -2
  686. package/dist/tools/update-status/side-effects.js +30 -37
  687. package/dist/tools/update-status/transition-guard.d.ts +4 -2
  688. package/dist/tools/update-status/transition-guard.js +57 -10
  689. package/dist/tools/update-status-convention-gate.js +24 -23
  690. package/dist/tools/update-status-reconcile.js +2 -2
  691. package/dist/tools/validate-api-contract-handler.js +3 -3
  692. package/dist/tools/validate-lint.js +20 -13
  693. package/dist/tools/validate.d.ts +3 -1
  694. package/dist/tools/validate.js +213 -5
  695. package/dist/transports/http-transport.js +84 -61
  696. package/dist/transports/middleware/with-telemetry.js +3 -2
  697. package/dist/types/abortable-process.d.ts +2 -0
  698. package/dist/types/advanced-framework.js +0 -2
  699. package/dist/types/atomic-upgrade.d.ts +71 -0
  700. package/dist/types/atomic-upgrade.js +2 -0
  701. package/dist/types/ci.js +0 -2
  702. package/dist/types/core-bridge.d.ts +78 -1
  703. package/dist/types/crash-shield-framework-rules.d.ts +24 -0
  704. package/dist/types/crash-shield-framework-rules.js +2 -0
  705. package/dist/types/data-gc.d.ts +16 -0
  706. package/dist/types/deploy.js +0 -2
  707. package/dist/types/durable-job.d.ts +78 -0
  708. package/dist/types/durable-job.js +2 -0
  709. package/dist/types/durable-validation.d.ts +60 -0
  710. package/dist/types/durable-validation.js +2 -0
  711. package/dist/types/estimation.d.ts +2 -0
  712. package/dist/types/evidence-gates.d.ts +9 -1
  713. package/dist/types/execution.d.ts +43 -0
  714. package/dist/types/handoff-artifacts.d.ts +2 -0
  715. package/dist/types/index.d.ts +2 -0
  716. package/dist/types/index.js +2 -0
  717. package/dist/types/infrastructure.js +0 -2
  718. package/dist/types/lifecycle.js +0 -2
  719. package/dist/types/migration/canonical-storage.d.ts +37 -0
  720. package/dist/types/migration/canonical-storage.js +2 -0
  721. package/dist/types/migration/index.d.ts +1 -1
  722. package/dist/types/native-worker.d.ts +48 -0
  723. package/dist/types/native-worker.js +2 -0
  724. package/dist/types/network-policy.d.ts +12 -0
  725. package/dist/types/network-policy.js +2 -0
  726. package/dist/types/oauth.js +0 -2
  727. package/dist/types/observability.d.ts +32 -0
  728. package/dist/types/outbox-worker.d.ts +35 -0
  729. package/dist/types/outbox-worker.js +11 -0
  730. package/dist/types/permissions-config.d.ts +0 -27
  731. package/dist/types/permissions-config.js +0 -2
  732. package/dist/types/plugin-install.d.ts +0 -11
  733. package/dist/types/plugin-install.js +0 -2
  734. package/dist/types/portal.d.ts +1 -0
  735. package/dist/types/product-public.d.ts +75 -0
  736. package/dist/types/product-public.js +2 -0
  737. package/dist/types/project/inputs.d.ts +2 -0
  738. package/dist/types/project/mfe-detection.js +0 -2
  739. package/dist/types/project/platform-mobile.js +0 -2
  740. package/dist/types/project/platform-specialty.js +0 -2
  741. package/dist/types/project-knowledge-graph.d.ts +7 -0
  742. package/dist/types/runtime-database.d.ts +10 -0
  743. package/dist/types/runtime-database.js +2 -0
  744. package/dist/types/runtime-policy.d.ts +40 -0
  745. package/dist/types/runtime-policy.js +2 -0
  746. package/dist/types/safety.d.ts +4 -5
  747. package/dist/types/schema-registry.d.ts +12 -0
  748. package/dist/types/schema-registry.js +2 -0
  749. package/dist/types/security.d.ts +52 -0
  750. package/dist/types/skill-registry.js +0 -2
  751. package/dist/types/spec/inputs.d.ts +2 -0
  752. package/dist/types/spec-lock-v2.d.ts +13 -7
  753. package/dist/types/spec-lock-v2.js +1 -1
  754. package/dist/types/spec-registry.js +0 -2
  755. package/dist/types/storage-bundle.d.ts +13 -0
  756. package/dist/types/storage-bundle.js +2 -0
  757. package/dist/types/storage-catalog.d.ts +18 -0
  758. package/dist/types/storage-catalog.js +2 -0
  759. package/dist/types/team-planner.js +0 -2
  760. package/dist/types/technology-registry.d.ts +35 -0
  761. package/dist/types/technology-registry.js +2 -0
  762. package/dist/types/technology-symbols.generated.d.ts +117 -0
  763. package/dist/types/technology-symbols.generated.js +2 -0
  764. package/dist/types/telemetry.d.ts +3 -3
  765. package/dist/types/transport.d.ts +2 -0
  766. package/dist/types/validate-worker.d.ts +44 -0
  767. package/dist/types/validate-worker.js +2 -0
  768. package/dist/types/validation-evidence.d.ts +1 -1
  769. package/dist/types/validation-receipt.d.ts +104 -0
  770. package/dist/types/validation-receipt.js +2 -0
  771. package/package.json +31 -20
  772. package/planu-native.json +1 -1
  773. package/planu-plugin.json +1 -1
  774. package/dist/engine/telemetry/geo-resolver.d.ts +0 -9
  775. package/dist/engine/telemetry/geo-resolver.js +0 -43
  776. package/dist/storage/data-dir-discovery.d.ts +0 -31
  777. package/dist/storage/data-dir-discovery.js +0 -140
  778. package/dist/storage/migrations/cwd-to-absolute.d.ts +0 -25
  779. package/dist/storage/migrations/cwd-to-absolute.js +0 -281
  780. package/dist/tools/create-spec/adapters/prior-decisions-hint.d.ts +0 -14
  781. package/dist/tools/create-spec/adapters/prior-decisions-hint.js +0 -30
  782. package/dist/tools/init-project/ancestor-data-detector.d.ts +0 -22
  783. package/dist/tools/init-project/ancestor-data-detector.js +0 -81
  784. package/dist/tools/update-status/force-done-audit.d.ts +0 -2
  785. package/dist/tools/update-status/force-done-audit.js +0 -23
  786. package/dist/types/migration/cwd-to-absolute.d.ts +0 -8
  787. package/dist/types/migration/cwd-to-absolute.js +0 -3
@@ -1,3 +1,4 @@
1
+ import { technologyValue } from '../../engine/technology-registry.js';
1
2
  // tools/suggest-tooling/llm-security-catalog.ts — SPEC-045
2
3
  // Builds LLM guardrails and MLOps tooling recommendation lines for suggest_tooling.
3
4
  import { readFile } from 'node:fs/promises';
@@ -44,7 +45,7 @@ export async function buildLlmSecurityToolingLines(knowledge) {
44
45
  }
45
46
  const config = await loadConfig();
46
47
  const lang = knowledge.language.toLowerCase();
47
- const isNodeProject = lang === 'typescript' || lang === 'javascript';
48
+ const isNodeProject = lang === technologyValue('technology-typescript-969545') || lang === 'javascript';
48
49
  const isPythonProject = lang === 'python';
49
50
  const lines = ['', '## LLM Security & Guardrails', ''];
50
51
  lines.push(`**Provider detectado:** ${detection.provider ?? 'unknown'}`);
@@ -1,5 +1,4 @@
1
- // SPEC-597-EXEMPT: canonical mapping (npm-package↔framework, keyword catalogue)
2
- // — must enumerate framework names by design; no detection logic to migrate.
1
+ import { technologyValue } from '../../engine/technology-registry.js';
3
2
  // tools/suggest-tooling/local-first-catalog.ts — SPEC-047
4
3
  // Builds local-first CRDT, storage, and sync tooling recommendation lines for suggest_tooling.
5
4
  import { readFile } from 'node:fs/promises';
@@ -42,10 +41,13 @@ function getPlatformTag(framework, stack) {
42
41
  if (fw.includes('react-native') || fw.includes('expo') || stackLower.includes('react-native')) {
43
42
  return 'react-native';
44
43
  }
45
- if (fw.includes('flutter') || stackLower.includes('flutter')) {
46
- return 'flutter';
44
+ if (fw.includes(technologyValue('technology-flutter-be1396')) ||
45
+ stackLower.includes(technologyValue('technology-flutter-be1396'))) {
46
+ return technologyValue('technology-flutter-be1396');
47
47
  }
48
- if (fw.includes('tauri') || fw.includes('electron') || stackLower.includes('desktop')) {
48
+ if (fw.includes('tauri') ||
49
+ fw.includes(technologyValue('technology-electron-88b1de')) ||
50
+ stackLower.includes('desktop')) {
49
51
  return 'node';
50
52
  }
51
53
  return 'browser';
@@ -1,5 +1,4 @@
1
- // tools/suggest-tooling/observability-catalog.ts Observability tooling recommendations (SPEC-026a)
2
- // Generates observability-specific tooling recommendations based on detected stack.
1
+ import { technologyValue } from '../../engine/technology-registry.js';
3
2
  // === Alert spec templates (base specs without specId) ===
4
3
  const ALERT_TEMPLATES = [
5
4
  {
@@ -191,7 +190,7 @@ function buildRecommendationLines(knowledge) {
191
190
  // Error tracking — always recommend Sentry first
192
191
  lines.push('#### 1. Error Tracking (Critical)');
193
192
  lines.push('**Recommended:** Sentry');
194
- if (fw.includes('next') || fw.includes('react')) {
193
+ if (fw.includes('next') || fw.includes(technologyValue('technology-react-275976'))) {
195
194
  lines.push('**Install:** `npm install @sentry/nextjs` — run `npx @sentry/wizard@latest -i nextjs`');
196
195
  }
197
196
  else if (lang === 'python') {
@@ -214,7 +213,7 @@ function buildRecommendationLines(knowledge) {
214
213
  lines.push('');
215
214
  // Logging
216
215
  lines.push('#### 3. Structured Logging (Recommended)');
217
- if (lang === 'typescript' || lang === 'javascript') {
216
+ if (lang === technologyValue('technology-typescript-969545') || lang === 'javascript') {
218
217
  lines.push('**Recommended:** Pino (fastest structured logger for Node.js)');
219
218
  lines.push('**Install:** `npm install pino` — outputs JSON by default');
220
219
  }
@@ -1,3 +1,4 @@
1
+ import { technologyValue } from '../../engine/technology-registry.js';
1
2
  // tools/suggest-tooling/otel-catalog.ts — SPEC-044
2
3
  // Loads and formats OTel tooling recommendations from the config catalog.
3
4
  import { readFile } from 'node:fs/promises';
@@ -25,7 +26,9 @@ async function loadOtelConfig() {
25
26
  /** Detect if a project has Kubernetes in its stack */
26
27
  function hasKubernetes(knowledge) {
27
28
  const all = [...knowledge.stack, ...Object.keys(knowledge.tooling)].map((s) => s.toLowerCase());
28
- return all.some((s) => s.includes('kubernetes') || s.includes('k8s') || s.includes('helm'));
29
+ return all.some((s) => s.includes(technologyValue('technology-kubernetes-94abcb')) ||
30
+ s.includes('k8s') ||
31
+ s.includes('helm'));
29
32
  }
30
33
  /**
31
34
  * Build OTel tooling recommendation lines for projects with OTel detected or needed.
@@ -1,6 +1,4 @@
1
- // tools/suggest-tooling/resilience-catalog.ts — SPEC-034
2
- // Generates resilience library and health check recommendations
3
- // based on project language, stack, and detected patterns.
1
+ import { technologyValue } from '../../engine/technology-registry.js';
4
2
  import { getJvmVersion, getRustVersion } from '../../config/version-defaults.js';
5
3
  const RESILIENCE_LIBRARY_BY_LANG = {
6
4
  nodejs: {
@@ -96,7 +94,14 @@ export function needsResilienceRecommendation(knowledge) {
96
94
  */
97
95
  export function needsHealthCheckRecommendation(knowledge) {
98
96
  const stackLower = knowledge.stack.map((s) => s.toLowerCase());
99
- const hasMicroserviceSignals = stackLower.some((s) => ['kubernetes', 'k8s', 'docker', 'helm', 'istio', 'grpc'].some((kw) => s.includes(kw)));
97
+ const hasMicroserviceSignals = stackLower.some((s) => [
98
+ technologyValue('technology-kubernetes-94abcb'),
99
+ 'k8s',
100
+ technologyValue('technology-docker-d548c5'),
101
+ 'helm',
102
+ 'istio',
103
+ 'grpc',
104
+ ].some((kw) => s.includes(kw)));
100
105
  if (!hasMicroserviceSignals) {
101
106
  return false;
102
107
  }
@@ -112,7 +117,13 @@ export function needsHealthCheckRecommendation(knowledge) {
112
117
  export function hasDistributedRateLimitRisk(knowledge) {
113
118
  const stackLower = knowledge.stack.map((s) => s.toLowerCase());
114
119
  const hasLocalRateLimit = stackLower.some((s) => ['express-rate-limit', 'slowapi', 'golang.org/x/time/rate'].some((lib) => s.includes(lib)));
115
- const hasMultiInstance = stackLower.some((s) => ['kubernetes', 'k8s', 'ecs', 'replicas', 'docker-compose'].some((kw) => s.includes(kw)));
120
+ const hasMultiInstance = stackLower.some((s) => [
121
+ technologyValue('technology-kubernetes-94abcb'),
122
+ 'k8s',
123
+ 'ecs',
124
+ 'replicas',
125
+ technologyValue('technology-docker-compose-b0a828'),
126
+ ].some((kw) => s.includes(kw)));
116
127
  return hasLocalRateLimit && hasMultiInstance;
117
128
  }
118
129
  /**
@@ -1,14 +1,12 @@
1
- // SPEC-597-EXEMPT: canonical mapping (npm-package↔framework, keyword catalogue)
2
- // — must enumerate framework names by design; no detection logic to migrate.
3
- // tools/suggest-tooling/skills-catalog.ts — SPEC-022 skills.sh catalog fetcher
4
- // Extracted from suggest-tooling.ts to stay within the 400-line file budget.
1
+ import { technologyValue } from '../../engine/technology-registry.js';
5
2
  import { getJvmVersion } from '../../config/version-defaults.js';
3
+ import { assertNetworkAllowed } from '../../engine/network-policy.js';
6
4
  // === SPEC-013: Mobile tooling lines ===
7
5
  export function buildMobileToolingLines(knowledge) {
8
6
  const mobileFrameworks = [
9
- 'swiftui',
7
+ technologyValue('technology-swiftui-b63400'),
10
8
  'uikit',
11
- 'flutter',
9
+ technologyValue('technology-flutter-be1396'),
12
10
  'react-native',
13
11
  'expo',
14
12
  'jetpack-compose',
@@ -20,7 +18,9 @@ export function buildMobileToolingLines(knowledge) {
20
18
  const isMobile = apps.some(
21
19
  /* v8 ignore start */ // null-coalescing fallback for framework is runtime-dependent
22
20
  (app) => mobileFrameworks.includes(app.framework ?? '') || app.mobilePlatform !== undefined);
23
- const isIos = apps.some((app) => app.mobilePlatform === 'ios' || app.framework === 'swiftui' || app.framework === 'uikit');
21
+ const isIos = apps.some((app) => app.mobilePlatform === 'ios' ||
22
+ app.framework === technologyValue('technology-swiftui-b63400') ||
23
+ app.framework === 'uikit');
24
24
  const isAndroid = apps.some((app) => app.mobilePlatform === 'android' ||
25
25
  app.framework === 'compose' ||
26
26
  app.framework === 'xml-views');
@@ -166,6 +166,7 @@ async function fetchSkillsShCatalog(stack, language) {
166
166
  return new Promise((resolve) => {
167
167
  const stackParam = encodeURIComponent([...stack, language].join(',').toLowerCase());
168
168
  const url = `https://skills.sh/api/catalog?stack=${stackParam}`;
169
+ assertNetworkAllowed(url);
169
170
  // Dynamic import to avoid top-level import of https
170
171
  import('node:https')
171
172
  .then(({ default: https }) => {
@@ -209,7 +210,7 @@ function buildFallbackSkills(knowledge) {
209
210
  const skills = [];
210
211
  const stackLower = knowledge.stack.map((s) => s.toLowerCase());
211
212
  const lang = knowledge.language.toLowerCase();
212
- if (lang === 'typescript' || lang === 'javascript') {
213
+ if (lang === technologyValue('technology-typescript-969545') || lang === 'javascript') {
213
214
  skills.push({
214
215
  name: 'typescript-patterns',
215
216
  description: 'TypeScript best practices, strict mode patterns, and type safety conventions',
@@ -217,7 +218,7 @@ function buildFallbackSkills(knowledge) {
217
218
  justification: `Project uses ${knowledge.language}`,
218
219
  });
219
220
  }
220
- if (stackLower.some((s) => s.includes('react'))) {
221
+ if (stackLower.some((s) => s.includes(technologyValue('technology-react-275976')))) {
221
222
  skills.push({
222
223
  name: 'react-patterns',
223
224
  description: 'React component patterns, hooks best practices, and performance optimization',
@@ -1,5 +1,4 @@
1
- // SPEC-597-EXEMPT: canonical mapping (npm-package↔framework, keyword catalogue)
2
- // — must enumerate framework names by design; no detection logic to migrate.
1
+ import { technologyValue } from '../../engine/technology-registry.js';
3
2
  // tools/suggest-tooling/supply-chain-catalog.ts — SPEC-046
4
3
  // Builds supply chain security tooling recommendation lines for suggest_tooling.
5
4
  import { readFile } from 'node:fs/promises';
@@ -25,7 +24,7 @@ async function loadConfig() {
25
24
  /** Map project language to SBOM tool key. */
26
25
  function getSbomToolKey(language) {
27
26
  const lang = language.toLowerCase();
28
- if (lang === 'typescript' || lang === 'javascript') {
27
+ if (lang === technologyValue('technology-typescript-969545') || lang === 'javascript') {
29
28
  return 'nodejs';
30
29
  }
31
30
  if (lang === 'java' || lang === 'kotlin') {
@@ -1,3 +1,4 @@
1
+ import { technologyValue } from '../engine/technology-registry.js';
1
2
  import { getSupabaseConfig, saveSupabaseConfig, getSupabaseSyncResult, saveSupabaseSyncResult, } from '../storage/supabase-store.js';
2
3
  import { fetchTables, fetchRlsPolicies } from '../engine/supabase/schema-fetcher.js';
3
4
  import { generateRlsSpecTitle, generateRlsSpecDescription, generateRlsAcceptanceCriteria, classifyRlsRisk, } from '../engine/supabase/rls-spec-generator.js';
@@ -165,7 +166,7 @@ export async function handleGenerateRlsSpec(input) {
165
166
  projectPath,
166
167
  type: 'infra',
167
168
  target: 'database',
168
- tags: ['security', 'rls', 'supabase', risk],
169
+ tags: ['security', 'rls', technologyValue('technology-supabase-4d7594'), risk],
169
170
  };
170
171
  try {
171
172
  const result = await handleCreateSpec(createInput);
@@ -1,12 +1,12 @@
1
1
  import { getEntries, getAggregation } from '../storage/token-ledger-store.js';
2
2
  import { hashProjectPath } from '../storage/base-store.js';
3
3
  import { buildTokenWasteReport, detectTokenWasteLoops, formatTokenWasteReport, loadTokenWastePolicy, recommendRelevantTools, } from '../engine/token-optimizer/index.js';
4
- import { join } from 'node:path';
4
+ import { resolveStorageLayout } from '../storage/storage-layout.js';
5
5
  import { formatProjectGraphContext, queryProjectGraphSlice, } from '../engine/project-graph/index.js';
6
6
  // ---------------------------------------------------------------------------
7
7
  // Constants
8
8
  // ---------------------------------------------------------------------------
9
- const DEFAULT_DATA_DIR = join(process.cwd(), 'data');
9
+ const DEFAULT_DATA_DIR = resolveStorageLayout().data;
10
10
  const DEFAULT_VIEW = 'summary';
11
11
  const TOP_N_CONSUMERS = 5;
12
12
  const PROGRESS_BAR_LENGTH = 10;
@@ -1,9 +1,9 @@
1
1
  // tools/token-recording.ts — Fire-and-forget token usage recording for all tool calls.
2
2
  // Called by safeWithTelemetry() after each successful tool execution.
3
- import { join } from 'node:path';
4
3
  import { countTokens, estimateCost } from '../engine/token-optimizer/counter.js';
5
4
  import { recordEntry } from '../storage/token-ledger-store.js';
6
5
  import { hashProjectPath } from '../storage/base-store.js';
6
+ import { resolveStorageLayout } from '../storage/storage-layout.js';
7
7
  const SECRET_KEY_PATTERN = /(api[-_]?key|auth|bearer|credential|password|secret|token)/i;
8
8
  function stringifyForTokenCounting(value) {
9
9
  try {
@@ -42,7 +42,7 @@ export function recordToolTokens(toolName, projectPath, inputArgs, outputText, s
42
42
  cached: false,
43
43
  };
44
44
  const projectHash = hashProjectPath(projectPath);
45
- const dataDir = join(process.cwd(), 'data');
45
+ const dataDir = resolveStorageLayout().data;
46
46
  void recordEntry(projectHash, dataDir, entry).catch((err) => {
47
47
  console.error('[planu] token-recording recordEntry failed:', err);
48
48
  });
@@ -1,8 +1,8 @@
1
1
  import { getEntries } from '../storage/token-ledger-store.js';
2
2
  import { calculateTokenSavings } from '../engine/token-savings-calculator.js';
3
3
  import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
4
- import { join } from 'node:path';
5
- const DEFAULT_DATA_DIR = join(process.cwd(), 'data');
4
+ import { resolveStorageLayout } from '../storage/storage-layout.js';
5
+ const DEFAULT_DATA_DIR = resolveStorageLayout().data;
6
6
  export async function handleTokenSavingsReport(args) {
7
7
  const period = args.period ?? 'month';
8
8
  const projectId = resolveProjectId(args);
@@ -42,8 +42,139 @@ import { handleDogfoodWatch } from '../dogfood-watch.js';
42
42
  import { SecurityReportTimeRangeEnum, SecurityReportFormatEnum, } from '../schemas/runtime-security.js';
43
43
  import { RenderSpecForProviderInputSchema, handleRenderSpecForProvider, } from '../render-spec-for-provider.js';
44
44
  import { handleTriageRequest, TriageRequestInputSchema } from '../triage-request.js';
45
+ import { handleStoragePaths } from '../storage-paths-handler.js';
46
+ import { handleStorageExport, handleStorageImport } from '../storage-bundle-handler.js';
47
+ import { handleCancelJob, handleGetJob, handleRestartJob, handleWatchJob, } from '../jobs/handlers.js';
45
48
  // ── Registry ─────────────────────────────────────────────────────────────────
46
49
  const coreToolsRegistry = [
50
+ {
51
+ name: 'get_job',
52
+ description: 'Read the durable state and latest checkpoint or result for a local Planu job.',
53
+ schema: {
54
+ operationId: z.string().trim().min(1).max(128),
55
+ projectId: z.string().trim().min(1).max(128),
56
+ workspaceId: z.string().trim().min(1).max(128).optional(),
57
+ },
58
+ handler: handleGetJob,
59
+ annotations: {
60
+ title: 'Get Durable Job',
61
+ readOnlyHint: true,
62
+ destructiveHint: false,
63
+ openWorldHint: false,
64
+ },
65
+ wrap: 'safe',
66
+ group: 'infrastructure',
67
+ },
68
+ {
69
+ name: 'watch_job',
70
+ description: 'Wait up to 30 seconds for a durable Planu job to change or reach a terminal state.',
71
+ schema: {
72
+ operationId: z.string().trim().min(1).max(128),
73
+ projectId: z.string().trim().min(1).max(128),
74
+ workspaceId: z.string().trim().min(1).max(128).optional(),
75
+ afterCursor: z
76
+ .string()
77
+ .regex(/^[a-f0-9]{64}$/)
78
+ .optional(),
79
+ timeoutMs: z.number().int().min(0).max(30_000).optional(),
80
+ },
81
+ handler: handleWatchJob,
82
+ annotations: {
83
+ title: 'Watch Durable Job',
84
+ readOnlyHint: true,
85
+ destructiveHint: false,
86
+ openWorldHint: false,
87
+ },
88
+ wrap: 'safe',
89
+ group: 'infrastructure',
90
+ },
91
+ {
92
+ name: 'cancel_job',
93
+ description: 'Durably cancel a Planu job and fence any worker that still holds its former lease.',
94
+ schema: {
95
+ operationId: z.string().trim().min(1).max(128),
96
+ projectId: z.string().trim().min(1).max(128),
97
+ workspaceId: z.string().trim().min(1).max(128).optional(),
98
+ },
99
+ handler: handleCancelJob,
100
+ annotations: {
101
+ title: 'Cancel Durable Job',
102
+ readOnlyHint: false,
103
+ destructiveHint: true,
104
+ idempotentHint: true,
105
+ openWorldHint: false,
106
+ },
107
+ wrap: 'safe',
108
+ group: 'infrastructure',
109
+ },
110
+ {
111
+ name: 'restart_job',
112
+ description: 'Restart a cancelled or failed durable job and schedule its typed executor.',
113
+ schema: {
114
+ operationId: z.string().trim().min(1).max(128),
115
+ projectId: z.string().trim().min(1).max(128),
116
+ workspaceId: z.string().trim().min(1).max(128).optional(),
117
+ },
118
+ handler: handleRestartJob,
119
+ annotations: {
120
+ title: 'Restart Durable Job',
121
+ readOnlyHint: false,
122
+ destructiveHint: false,
123
+ idempotentHint: true,
124
+ openWorldHint: false,
125
+ },
126
+ wrap: 'safe',
127
+ group: 'infrastructure',
128
+ },
129
+ {
130
+ name: 'storage_paths',
131
+ description: 'Resolve the canonical local-first Planu storage catalog, including ownership, lifecycle, sensitivity, retention and portability for every registered artifact family.',
132
+ schema: {
133
+ projectPath: z.string().min(1).max(4096).optional(),
134
+ logicalProjectId: z.string().min(1).max(128).optional(),
135
+ workspaceKeyHash: z.string().min(1).max(128).optional(),
136
+ },
137
+ handler: (args) => Promise.resolve(handleStoragePaths(args)),
138
+ annotations: {
139
+ title: 'Planu Storage Paths',
140
+ readOnlyHint: true,
141
+ destructiveHint: false,
142
+ openWorldHint: false,
143
+ },
144
+ wrap: 'safe',
145
+ group: 'infrastructure',
146
+ },
147
+ {
148
+ name: 'storage_export',
149
+ description: 'Export a versioned, checksummed Planu runtime bundle with secret values redacted.',
150
+ schema: {
151
+ projectId: z.string().min(1).max(128),
152
+ outputPath: z.string().min(1).max(4096),
153
+ },
154
+ handler: handleStorageExport,
155
+ annotations: {
156
+ title: 'Export Planu Storage',
157
+ readOnlyHint: false,
158
+ destructiveHint: false,
159
+ openWorldHint: false,
160
+ },
161
+ wrap: 'safe',
162
+ group: 'infrastructure',
163
+ },
164
+ {
165
+ name: 'storage_import',
166
+ description: 'Verify and transactionally import a checksummed Planu runtime bundle.',
167
+ schema: { inputPath: z.string().min(1).max(4096) },
168
+ handler: handleStorageImport,
169
+ annotations: {
170
+ title: 'Import Planu Storage',
171
+ readOnlyHint: false,
172
+ destructiveHint: false,
173
+ openWorldHint: false,
174
+ },
175
+ wrap: 'safe',
176
+ group: 'infrastructure',
177
+ },
47
178
  // ── generate_batch_script (SPEC-253) ──────────────────────────────────────
48
179
  {
49
180
  name: 'generate_batch_script',
@@ -1,12 +1,4 @@
1
- // SPEC-597-EXEMPT: canonical mapping (npm-package↔framework, keyword catalogue)
2
- // — must enumerate framework names by design; no detection logic to migrate.
3
- /* eslint-disable max-lines, max-lines-per-function -- thematic registry group consolidated by SPEC refactor-phase3 (commit aafeea60); each block is a declarative tool registration ~20 lines, split would re-create the ~120 register-*.ts files this phase intentionally collapsed */
4
- // tools/tool-registry/group-infra.ts — Declarative registry: infrastructure & platform tools.
5
- //
6
- // Phase 2 (refactor/registry-phase2): consolidates register-*.ts files for:
7
- // webhook, dashboard, usage, license, auto-update, deploy, cross-repo-search, browser-validate,
8
- // workers, plugins, registry, skill-registry, tool-groups, rbac, workspace, memory-config,
9
- // onboarding, docs-registry, well-known
1
+ import { technologyValue } from '../../engine/technology-registry.js';
10
2
  import { z } from 'zod';
11
3
  // ── safe handlers ────────────────────────────────────────────────────────────
12
4
  import { safe, safeLicensed, safeTracked } from '../safe-handler.js';
@@ -89,7 +81,13 @@ const SUPPORTED_EVENTS = [
89
81
  'validate.failed',
90
82
  ];
91
83
  const deployProviderEnum = z
92
- .enum(['vercel', 'netlify', 'cloudflare-pages', 'fly', 'railway'])
84
+ .enum([
85
+ technologyValue('technology-vercel-9d3508'),
86
+ technologyValue('technology-netlify-58465a'),
87
+ 'cloudflare-pages',
88
+ technologyValue('technology-fly-f4debd'),
89
+ technologyValue('technology-railway-e34d1c'),
90
+ ])
93
91
  .describe('Deploy provider: vercel | netlify | cloudflare-pages | fly | railway');
94
92
  export function registerInfraGroupTools(server) {
95
93
  // ── License tools ──────────────────────────────────────────────────────────
@@ -329,8 +327,8 @@ export function registerInfraGroupTools(server) {
329
327
  annotations: { readOnlyHint: true },
330
328
  }, safe(async (_args) => handleCheckUpdateStatus()));
331
329
  server.registerTool('enable_auto_update', {
332
- description: 'Enable automatic updates for Planu by switching the MCP config to use ' +
333
- '"npx -y @planu/cli@latest". Detects the config file automatically (~/.claude.json or ' +
330
+ description: 'Resolve the newest verified Planu release and pin the MCP config to its exact version. ' +
331
+ 'Detects the config file automatically (~/.claude.json or ' +
334
332
  'Claude Desktop config). Creates a backup before any modification. ' +
335
333
  'Call with confirm=false (default) to preview the change; confirm=true to apply it.',
336
334
  inputSchema: {
@@ -1,11 +1,4 @@
1
- /* eslint-disable max-lines -- thematic registry group consolidated by SPEC refactor-phase3 (commit aafeea60); each block is a declarative tool registration ~20 lines, split would re-create the ~120 register-*.ts files this phase intentionally collapsed */
2
- // tools/tool-registry/group-quality-compliance.ts — Declarative registry: quality & compliance tools.
3
- //
4
- // Phase 3 (refactor/registry-phase3): consolidates register-*.ts files for:
5
- // compliance, compliance-audit, compliance-gate, compliance-test,
6
- // security, audit-trail, schema-parity, schema-generator,
7
- // tdd, coverage, eval-skill, ears, spec-lint, readiness, approval,
8
- // governance, spec-322 (api contract), spec-323 (tdd scaffold), spec-331 (orchestration plan)
1
+ import { technologyValue } from '../../engine/technology-registry.js';
9
2
  import { z } from 'zod';
10
3
  import { safeLicensed, safeTracked } from '../safe-handler.js';
11
4
  import { projectIdSchema, withProject } from '../tool-registry-helpers.js';
@@ -365,7 +358,7 @@ export function registerQualityComplianceGroupTools(s) {
365
358
  .min(1)
366
359
  .describe(COMPLIANCE_TEST_FRAMEWORK_DESCRIBE),
367
360
  outputFormat: z
368
- .enum(['jest', 'gherkin', 'markdown'])
361
+ .enum([technologyValue('technology-jest-35e99f'), 'gherkin', 'markdown'])
369
362
  .optional()
370
363
  .describe(TEST_FORMAT_DESCRIBE),
371
364
  },
@@ -528,10 +521,10 @@ export function registerQualityComplianceGroupTools(s) {
528
521
  projectPath: z.string().min(1).max(4096).describe('Absolute path to the project root.'),
529
522
  specId: SpecIdSchema.describe('Spec ID to analyze (e.g. SPEC-042).'),
530
523
  library: z
531
- .enum(['zod', 'yup', 'valibot', 'all'])
524
+ .enum([technologyValue('technology-zod-4f63cf'), 'yup', 'valibot', 'all'])
532
525
  .describe('Schema library. Values: zod, yup, valibot, all.'),
533
526
  outputFormat: z
534
- .enum(['typescript', 'javascript'])
527
+ .enum([technologyValue('technology-typescript-969545'), 'javascript'])
535
528
  .describe('Output format. Values: typescript, javascript.'),
536
529
  outputPath: z
537
530
  .string()
@@ -1144,7 +1137,7 @@ export function registerQualityComplianceGroupTools(s) {
1144
1137
  .max(4096)
1145
1138
  .describe('Absolute path to the API contract file. For OpenAPI: .json or .yaml file. For GraphQL: .graphql, .gql, or .sdl file.'),
1146
1139
  contractFormat: z
1147
- .enum(['openapi', 'graphql', 'auto'])
1140
+ .enum(['openapi', technologyValue('technology-graphql-aed31c'), 'auto'])
1148
1141
  .optional()
1149
1142
  .describe('Format of the contract file. Valid values: openapi, graphql, auto. auto (default) detects format from the file extension: .json/.yaml → openapi, .graphql/.gql/.sdl → graphql.'),
1150
1143
  },
@@ -0,0 +1,13 @@
1
+ import type { FormatGateOutput } from '../../types/spec/inputs.js';
2
+ import type { Spec } from '../../types/spec/core.js';
3
+ export interface ComplianceGateResult {
4
+ skipped: boolean;
5
+ score: number | null;
6
+ issues: string[];
7
+ blocked: boolean;
8
+ }
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>;
11
+ /** Validate canonical spec format before approval, preserving audited bypass warnings. */
12
+ export declare function checkApprovedFormatGate(spec: Spec, newStatus: string, forceApprove?: boolean | undefined): Promise<FormatGateOutput>;
13
+ //# sourceMappingURL=approval-gates.d.ts.map
@@ -0,0 +1,81 @@
1
+ import { validateSpecFormat } from '../../core/spec-validator.js';
2
+ import { getComplianceGateConfig } from '../../storage/compliance-gate-config-store.js';
3
+ import { formatKeyValue } from '../output-formatter.js';
4
+ import { reportClassifiedDegradation } from '../../errors/classified-degradation.js';
5
+ /** Run the optional compliance check for a transition into review. */
6
+ export async function checkComplianceGate(specId, projectId, projectPath) {
7
+ if (!projectPath) {
8
+ return { skipped: true, score: null, issues: [], blocked: false };
9
+ }
10
+ try {
11
+ const { scoreCompliance } = await import('../../engine/verifier/compliance-scorer.js');
12
+ const result = await scoreCompliance(specId, projectPath);
13
+ const score = result.score;
14
+ const issues = result.criteriaDetails
15
+ .filter((detail) => detail.status === 'unverified')
16
+ .map((detail) => detail.criterion)
17
+ .slice(0, 5);
18
+ const config = await getComplianceGateConfig(projectId);
19
+ const blocked = (config?.mode ?? 'soft') === 'hard' && score < (config?.threshold ?? 90);
20
+ return { skipped: false, score, issues, blocked };
21
+ }
22
+ catch (error) {
23
+ /* reliability-optional: COMPLIANCE_GATE_UNAVAILABLE — optional gate is explicitly skipped */
24
+ reportClassifiedDegradation('COMPLIANCE_GATE_UNAVAILABLE', error);
25
+ return { skipped: true, score: null, issues: [], blocked: false };
26
+ }
27
+ }
28
+ /** Validate canonical spec format before approval, preserving audited bypass warnings. */
29
+ export async function checkApprovedFormatGate(spec, newStatus, forceApprove = false) {
30
+ if (newStatus !== 'approved') {
31
+ return { blockResult: null, qualityWarnings: [] };
32
+ }
33
+ let result;
34
+ try {
35
+ result = await validateSpecFormat(spec, {
36
+ readinessMode: 'strict',
37
+ bypassReason: forceApprove ? 'forceApprove' : undefined,
38
+ });
39
+ }
40
+ catch (error) {
41
+ /* reliability-optional: FORMAT_GATE_UNAVAILABLE — caller receives explicit degraded result */
42
+ reportClassifiedDegradation('FORMAT_GATE_UNAVAILABLE', error);
43
+ return { blockResult: null, qualityWarnings: [] };
44
+ }
45
+ if (result.valid) {
46
+ const qualityWarnings = result.warnings
47
+ .filter((warning) => warning.message.includes('[BYPASSED: forceApprove]'))
48
+ .map((warning) => `[${warning.code}] ${warning.message.replace('[BYPASSED: forceApprove] ', '')} (path: ${warning.path})`);
49
+ return { blockResult: null, qualityWarnings };
50
+ }
51
+ const message = `Spec format validation failed with ${String(result.errors.length)} error(s) — fix before approving, or pass forceApprove: true to bypass with warnings.`;
52
+ const blockResult = {
53
+ content: [
54
+ {
55
+ type: 'text',
56
+ text: formatKeyValue({
57
+ error: 'SPEC_FORMAT_INVALID',
58
+ message,
59
+ errors: result.errors.length,
60
+ warnings: result.warnings.length,
61
+ firstError: result.errors[0]?.message,
62
+ firstErrorPath: result.errors[0]?.path,
63
+ }, 'Spec format invalid'),
64
+ },
65
+ ],
66
+ isError: true,
67
+ structuredContent: {
68
+ error: 'SPEC_FORMAT_INVALID',
69
+ message,
70
+ errors: result.errors,
71
+ warnings: result.warnings,
72
+ code: 422,
73
+ context: { specId: spec.id, errors: result.errors, warnings: result.warnings },
74
+ fixHint: result.errors[0]
75
+ ? `Fix: ${result.errors[0].message}. Path: ${result.errors[0].path}. Or pass forceApprove: true.`
76
+ : 'Fix all format errors before approving, or pass forceApprove: true to bypass with warnings.',
77
+ },
78
+ };
79
+ return { blockResult, qualityWarnings: [] };
80
+ }
81
+ //# sourceMappingURL=approval-gates.js.map
@@ -1,6 +1,7 @@
1
1
  // tools/update-status/batch.ts — SPEC-1017 batch status transitions
2
2
  import { handleUpdateStatus } from './index.js';
3
3
  import { resolveProjectIdOrAutoDetect } from '../resolve-project-id.js';
4
+ import { reportClassifiedDegradation } from '../../errors/classified-degradation.js';
4
5
  function firstText(result) {
5
6
  const first = result.content[0];
6
7
  return first?.type === 'text' ? first.text : JSON.stringify(result.structuredContent ?? {});
@@ -76,8 +77,9 @@ export async function handleUpdateStatusBatch(input) {
76
77
  const { runStrictPlanuCleanup } = await import('../../engine/spec-migrator/index.js');
77
78
  await runStrictPlanuCleanup(resolved.projectPath);
78
79
  }
79
- catch {
80
- /* best-effort final pass */
80
+ catch (error) {
81
+ /* reliability-cleanup: POST_BATCH_STRICT_CLEANUP validation remains fail-closed */
82
+ reportClassifiedDegradation('POST_BATCH_STRICT_CLEANUP', error);
81
83
  }
82
84
  const text = [
83
85
  `Batch status transition complete: ${input.status}`,