@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,6 +1,4 @@
1
- // tools/define-ui-contract/agent-interaction-contract.ts
2
- // SPEC-016a criterion 3: Interaction Contract for AI agent specs.
3
- // Agents interact via channels (chat, email, dashboard, notifications) not UI components.
1
+ import { technologyValue } from '../../engine/technology-registry.js';
4
2
  import { generateAgentInteractionContract, formatInteractionContractAsMarkdown, isAgentSpec, } from '../../engine/agent-spec-generator.js';
5
3
  export { isAgentSpec };
6
4
  /**
@@ -31,7 +29,7 @@ export function isAgentInteractionContract(knowledge, spec) {
31
29
  export function generateAgentInteractionContractMarkdown(spec, knowledge) {
32
30
  const contract = generateAgentInteractionContract(spec.title, `${spec.title} ${spec.tags.join(' ')}`);
33
31
  const markdown = formatInteractionContractAsMarkdown(contract, spec.title);
34
- const lang = knowledge?.language ?? 'typescript';
32
+ const lang = knowledge?.language ?? technologyValue('technology-typescript-969545');
35
33
  const suffix = lang === 'python' ? 'py' : 'ts';
36
34
  const appendix = [
37
35
  '',
@@ -1,4 +1,10 @@
1
- const DESKTOP_FW_SET = new Set(['electron', 'tauri', 'dotnet', 'qt']);
1
+ import { technologyValue } from '../../engine/technology-registry.js';
2
+ const DESKTOP_FW_SET = new Set([
3
+ technologyValue('technology-electron-88b1de'),
4
+ 'tauri',
5
+ 'dotnet',
6
+ 'qt',
7
+ ]);
2
8
  /**
3
9
  * Returns true if the project is a desktop app based on framework or category.
4
10
  */
@@ -12,7 +18,7 @@ export function isDesktopProject(knowledge) {
12
18
  * Generate a desktop UI contract with window management, menus, tray, and dialogs.
13
19
  */
14
20
  export function generateDesktopUIContract(screens, knowledge) {
15
- const framework = knowledge.framework ?? 'electron';
21
+ const framework = knowledge.framework ?? technologyValue('technology-electron-88b1de');
16
22
  const frameworkTitle = framework.charAt(0).toUpperCase() + framework.slice(1);
17
23
  const components = buildDesktopComponents(screens, framework);
18
24
  const lines = [
@@ -42,7 +48,7 @@ export function generateDesktopUIContract(screens, knowledge) {
42
48
  }
43
49
  function buildWindowSection(framework) {
44
50
  const isTauri = framework === 'tauri';
45
- const titleBarLabel = isTauri ? 'Tauri' : 'Electron';
51
+ const titleBarLabel = isTauri ? 'Tauri' : technologyValue('technology-electron-61a62a');
46
52
  return [
47
53
  '- **MainWindow**: primary app window (resizable, min-size: 800x600)',
48
54
  `- **TitleBar**: custom ${titleBarLabel} title bar with window controls (min/max/close)`,
@@ -81,7 +87,9 @@ function buildShortcutsSection(framework) {
81
87
  /* v8 ignore start */
82
88
  const modifier = process.platform === 'darwin' ? 'Cmd' : 'Ctrl';
83
89
  /* v8 ignore stop */
84
- const globalShortcutApi = framework === 'electron' ? 'globalShortcut.register()' : 'tauri global shortcut API';
90
+ const globalShortcutApi = framework === technologyValue('technology-electron-88b1de')
91
+ ? 'globalShortcut.register()'
92
+ : 'tauri global shortcut API';
85
93
  return [
86
94
  `- **File operations**: ${modifier}+N (New), ${modifier}+O (Open), ${modifier}+S (Save)`,
87
95
  `- **Edit operations**: ${modifier}+Z (Undo), ${modifier}+Y (Redo), ${modifier}+F (Find)`,
@@ -1,3 +1,4 @@
1
+ import { technologyValue } from '../../engine/technology-registry.js';
1
2
  // === SPEC-014b: WPF / Avalonia MVVM pattern section ===
2
3
  /**
3
4
  * Returns true if the project uses WPF or Avalonia (MVVM-oriented .NET desktop frameworks).
@@ -72,7 +73,9 @@ export function isMacOSNativeProject(knowledge) {
72
73
  const lang = knowledge.language.toLowerCase();
73
74
  const stack = knowledge.stack.map((s) => s.toLowerCase());
74
75
  return (lang === 'swift' ||
75
- stack.some((s) => s.includes('swiftui') || s.includes('appkit') || s.includes('nsapplication')));
76
+ stack.some((s) => s.includes(technologyValue('technology-swiftui-b63400')) ||
77
+ s.includes('appkit') ||
78
+ s.includes('nsapplication')));
76
79
  }
77
80
  /**
78
81
  * Generate macOS native window pattern UI contract.
@@ -80,8 +83,9 @@ export function isMacOSNativeProject(knowledge) {
80
83
  export function generateMacOSNativeUIContract(screens, knowledge) {
81
84
  const stack = knowledge.stack.map((s) => s.toLowerCase());
82
85
  const isMenuBar = stack.some((s) => s.includes('nsstatusitem') || s.includes('menubarextra'));
83
- const isSwiftUI = stack.some((s) => s.includes('swiftui')) || !stack.some((s) => s.includes('nsapplication'));
84
- const framework = isSwiftUI ? 'SwiftUI' : 'AppKit';
86
+ const isSwiftUI = stack.some((s) => s.includes(technologyValue('technology-swiftui-b63400'))) ||
87
+ !stack.some((s) => s.includes('nsapplication'));
88
+ const framework = isSwiftUI ? technologyValue('technology-swiftui-2d05f5') : 'AppKit';
85
89
  const lines = [
86
90
  `## macOS Native UI Contract — ${framework}`,
87
91
  '',
@@ -1,5 +1,4 @@
1
- // tools/define-ui-contract-extensions.ts Extension UI contract generation (SPEC-014a)
2
- // Generates UI contracts for browser extensions and IDE extensions.
1
+ import { technologyValue } from '../engine/technology-registry.js';
3
2
  const EXTENSION_CATEGORIES = new Set(['browser-extension', 'ide-extension']);
4
3
  /**
5
4
  * Returns true if the project is a browser or IDE extension.
@@ -18,7 +17,7 @@ export function generateExtensionUIContract(screens, knowledge) {
18
17
  }
19
18
  // --- Browser Extension -------------------------------------------------------
20
19
  function generateBrowserExtensionUIContract(screens, knowledge) {
21
- const platform = knowledge.framework ?? 'chrome';
20
+ const platform = knowledge.framework ?? technologyValue('technology-chrome-9390ef');
22
21
  const platformTitle = platform.charAt(0).toUpperCase() + platform.slice(1);
23
22
  const components = buildBrowserExtensionComponents(screens);
24
23
  const lines = [
@@ -1,16 +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/define-ui-contract-mobile.ts — Mobile UI contract generation (SPEC-013)
4
- // Contains mobile-specific contract generation for SwiftUI, UIKit, Jetpack Compose,
5
- // Android XML Views, Flutter, and React Native.
1
+ import { technologyValue } from '../engine/technology-registry.js';
6
2
  export const MOBILE_FRAMEWORKS = new Set([
7
- 'swiftui',
3
+ technologyValue('technology-swiftui-b63400'),
8
4
  'uikit',
9
5
  'jetpack-compose',
10
6
  'compose',
11
7
  'android-views',
12
8
  'xml-views',
13
- 'flutter',
9
+ technologyValue('technology-flutter-be1396'),
14
10
  'react-native',
15
11
  ]);
16
12
  export function isMobileFramework(framework) {
@@ -25,7 +21,7 @@ export function generateMobileUIContract(screens, knowledge) {
25
21
  return blocks.join('\n\n---\n\n');
26
22
  }
27
23
  function generateMobileScreenContract(name, fw) {
28
- if (fw === 'swiftui') {
24
+ if (fw === technologyValue('technology-swiftui-b63400')) {
29
25
  return (`## UI Contract — SwiftUI\n\n` +
30
26
  `### View: ${name}View\n\n` +
31
27
  `**Protocol:** \`View\`\n` +
@@ -84,7 +80,7 @@ function generateMobileScreenContract(name, fw) {
84
80
  `\`\`\`\n` +
85
81
  `**Navigation:** NavController with SafeArgs`);
86
82
  }
87
- if (fw === 'flutter') {
83
+ if (fw === technologyValue('technology-flutter-be1396')) {
88
84
  return (`## UI Contract — Flutter\n\n` +
89
85
  `### Widget: ${name}Screen\n\n` +
90
86
  `**Type:** StatefulWidget or ConsumerWidget (Riverpod)\n` +
@@ -1,4 +1,4 @@
1
- // tools/define-ui-contract-web/component-tree.ts Component tree generation for web frontends
1
+ import { technologyValue } from '../../engine/technology-registry.js';
2
2
  export function toPascalCase(str) {
3
3
  return str
4
4
  .split(/[-_\s]+/)
@@ -7,8 +7,9 @@ export function toPascalCase(str) {
7
7
  }
8
8
  // -- Component tree generation ------------------------------------------------
9
9
  export function generateComponentTree(screenNames, specContent, knowledge) {
10
- const framework = knowledge.framework ?? 'react';
11
- const isReact = framework.toLowerCase().includes('react') || framework.toLowerCase().includes('next');
10
+ const framework = knowledge.framework ?? technologyValue('technology-react-275976');
11
+ const isReact = framework.toLowerCase().includes(technologyValue('technology-react-275976')) ||
12
+ framework.toLowerCase().includes('next');
12
13
  return screenNames.map((screenName) => {
13
14
  const children = generateScreenComponents(screenName, specContent, isReact);
14
15
  return {
@@ -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/define-ui-contract.ts — UI contract & component tree
4
3
  // Analyzes a spec to generate component trees, data flow definitions,
5
4
  // loading states, and error states for frontend implementation.
@@ -192,10 +191,14 @@ export async function handleDefineUIContract(args) {
192
191
  function determineProjectContext(framework, target) {
193
192
  const fw = (framework ?? '').toLowerCase();
194
193
  if (target === 'frontend' || target === 'fullstack') {
195
- if (fw.includes('next') || fw.includes('nuxt') || fw.includes('remix')) {
194
+ if (fw.includes('next') ||
195
+ fw.includes(technologyValue('technology-nuxt-22c407')) ||
196
+ fw.includes(technologyValue('technology-remix-0c5d96'))) {
196
197
  return 'webapp';
197
198
  }
198
- if (fw.includes('react') || fw.includes('vue') || fw.includes('svelte')) {
199
+ if (fw.includes(technologyValue('technology-react-275976')) ||
200
+ fw.includes(technologyValue('technology-vue-564382')) ||
201
+ fw.includes(technologyValue('technology-svelte-c190ac'))) {
199
202
  return 'webapp';
200
203
  }
201
204
  return 'web';
@@ -1,6 +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
- // tools/deploy/deploy-spec.ts — SPEC-478
1
+ import { technologyValue } from '../../engine/technology-registry.js';
4
2
  import { getDeployConfig, recordDeployment } from '../../storage/deploy-config-store.js';
5
3
  import { deployToVercel } from '../../engine/deploy/providers/vercel.js';
6
4
  import { trackCost } from '../../engine/cost-tracking/operation-tracker.js';
@@ -19,7 +17,7 @@ export async function handleDeploySpec(input) {
19
17
  isError: true,
20
18
  };
21
19
  }
22
- if (input.provider !== 'vercel') {
20
+ if (input.provider !== technologyValue('technology-vercel-9d3508')) {
23
21
  return {
24
22
  content: [
25
23
  {
@@ -1,6 +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
- // tools/deploy/deploy-status.ts — SPEC-478
1
+ import { technologyValue } from '../../engine/technology-registry.js';
4
2
  import { listDeployments, getDeployConfig } from '../../storage/deploy-config-store.js';
5
3
  import { getVercelDeploymentStatus } from '../../engine/deploy/providers/vercel.js';
6
4
  import { trackCost } from '../../engine/cost-tracking/operation-tracker.js';
@@ -9,7 +7,7 @@ export async function handleDeployStatus(input) {
9
7
  try {
10
8
  if (input.deploymentId && input.provider && input.refresh) {
11
9
  const config = await getDeployConfig(input.projectPath, input.provider);
12
- if (config && input.provider === 'vercel') {
10
+ if (config && input.provider === technologyValue('technology-vercel-9d3508')) {
13
11
  const fresh = await getVercelDeploymentStatus(config, input.deploymentId);
14
12
  return {
15
13
  content: [
@@ -1,11 +1,10 @@
1
- // tools/design-schema/nosql-category-schemas.ts Schema generators for NoSQL categories (SPEC-059)
2
- // Covers: Cache (B.3), Search (C.3), Time-Series (D.2), Vector (F.3)
1
+ import { technologyValue } from '../../engine/technology-registry.js';
3
2
  // === Cache Schema (B.3) ===
4
3
  export function isCacheSchema(knowledge) {
5
4
  return knowledge.cacheEngine !== undefined && knowledge.cacheEngine !== null;
6
5
  }
7
6
  export function generateCacheSchema(entityNames, knowledge) {
8
- const engine = knowledge.cacheEngine ?? 'redis';
7
+ const engine = knowledge.cacheEngine ?? technologyValue('technology-redis-34fb46');
9
8
  const prefix = entityNames[0]?.toLowerCase() ?? 'app';
10
9
  const lines = [
11
10
  `## Cache Schema Design — ${engine.toUpperCase()}`,
@@ -1,3 +1,4 @@
1
+ import { technologyValue } from '../../engine/technology-registry.js';
1
2
  // -- Migration generation -----------------------------------------------------
2
3
  export function generateMigrations(tables, indexes, rlsPolicies, engine) {
3
4
  const migrations = [];
@@ -51,7 +52,7 @@ export function generateMigrations(tables, indexes, rlsPolicies, engine) {
51
52
  dataLoss: false,
52
53
  });
53
54
  }
54
- if (engine === 'supabase' || engine === 'postgresql') {
55
+ if (engine === technologyValue('technology-supabase-4d7594') || engine === 'postgresql') {
55
56
  for (const table of tables) {
56
57
  migrations.push({
57
58
  order: order++,
@@ -104,7 +105,7 @@ export function buildDataIntegrityRules(tables, engine) {
104
105
  rules.push(`${table.name}: check constraints enforce valid data ranges`);
105
106
  }
106
107
  }
107
- if (engine === 'supabase' || engine === 'postgresql') {
108
+ if (engine === technologyValue('technology-supabase-4d7594') || engine === 'postgresql') {
108
109
  rules.push('Row-Level Security (RLS) enabled on all tables');
109
110
  }
110
111
  return rules;
@@ -1,3 +1,4 @@
1
+ import { technologyValue } from '../../engine/technology-registry.js';
1
2
  // -- Table generation ---------------------------------------------------------
2
3
  export function generateTables(entities, engine) {
3
4
  const tables = [];
@@ -7,7 +8,9 @@ export function generateTables(entities, engine) {
7
8
  name: 'id',
8
9
  type: engine === 'mongodb' ? 'ObjectId' : 'uuid',
9
10
  nullable: false,
10
- default: engine === 'postgresql' || engine === 'supabase' ? 'gen_random_uuid()' : null,
11
+ default: engine === 'postgresql' || engine === technologyValue('technology-supabase-4d7594')
12
+ ? 'gen_random_uuid()'
13
+ : null,
11
14
  comment: 'Primary key',
12
15
  },
13
16
  ];
@@ -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/design-schema.ts — Data-first schema design
4
3
  // Analyzes a spec to generate database schema recommendations including
5
4
  // tables, indexes, RLS policies, migrations, and relationships.
@@ -172,7 +171,9 @@ export async function handleDesignSchema(args) {
172
171
  injectPrivacyAuditFields(tables, dbEngine);
173
172
  }
174
173
  const indexes = generateIndexes(tables, dbEngine);
175
- const rlsPolicies = dbEngine === 'supabase' || dbEngine === 'postgresql' ? generateRLSPolicies(tables) : [];
174
+ const rlsPolicies = dbEngine === technologyValue('technology-supabase-4d7594') || dbEngine === 'postgresql'
175
+ ? generateRLSPolicies(tables)
176
+ : [];
176
177
  const migrations = generateMigrations(tables, indexes, rlsPolicies, dbEngine);
177
178
  const relationships = buildRelationships(tables);
178
179
  const dataIntegrity = buildDataIntegrityRules(tables, dbEngine);
@@ -1,13 +1,11 @@
1
- // tools/feedback-handler.ts — Feedback Hub tool handlers (SPEC-188)
2
- import { join } from 'node:path';
3
1
  import { submitFeedback, getFeedback, resolveFeedback, findSimilar, getSummary, getFeedbackRemoteHealth, syncFeedbackRemote, } from '../storage/feedback-store.js';
4
2
  import { triageFeedback, formatTriageReport } from '../engine/feedback/triage.js';
3
+ import { globalDataDir, hashProjectPath, projectDataDir } from '../storage/base-store.js';
5
4
  // ---------------------------------------------------------------------------
6
5
  // Default data directory
7
6
  // ---------------------------------------------------------------------------
8
7
  function getDataDir(projectPath) {
9
- const base = projectPath ?? process.cwd();
10
- return join(base, 'data');
8
+ return projectPath ? projectDataDir(hashProjectPath(projectPath)) : globalDataDir();
11
9
  }
12
10
  // ---------------------------------------------------------------------------
13
11
  // Type emoji mapping
@@ -1,14 +1,13 @@
1
1
  // tools/gc-data-projects.ts — SPEC-581
2
2
  // MCP tool handler: garbage-collect data/projects/ test dirs and stale dirs.
3
- import { join, resolve } from 'node:path';
4
3
  import { runGC } from '../engine/data-projects-gc/gc-runner.js';
5
4
  import { getProjects } from '../storage/global-projects-store.js';
5
+ import { resolveStorageLayout } from '../storage/storage-layout.js';
6
6
  // ---------------------------------------------------------------------------
7
7
  // Helpers
8
8
  // ---------------------------------------------------------------------------
9
- function resolveDataProjectsDir(projectPath) {
10
- const base = projectPath ? resolve(projectPath) : process.cwd();
11
- return join(base, 'data', 'projects');
9
+ function resolveDataProjectsDir(_projectPath) {
10
+ return resolveStorageLayout().projects;
12
11
  }
13
12
  function formatEntries(entries, limit = 10) {
14
13
  if (entries.length === 0) {
@@ -44,7 +43,7 @@ function buildReport(result) {
44
43
  formatEntries(result.orphaned),
45
44
  ];
46
45
  if (!result.dryRun) {
47
- lines.push('', `### Deleted (${result.deleted.length})`);
46
+ lines.push('', `### Moved to recoverable trash (${result.deleted.length})`);
48
47
  if (result.deleted.length === 0) {
49
48
  lines.push(' _none_');
50
49
  }
@@ -82,6 +81,7 @@ export async function handleGcDataProjects(input) {
82
81
  inactiveDays,
83
82
  registeredHashes,
84
83
  includeOrphans: includeOrphans && registeredHashes !== undefined,
84
+ trashDir: resolveStorageLayout().trash,
85
85
  });
86
86
  return {
87
87
  content: [{ type: 'text', text: buildReport(result) }],
@@ -3,8 +3,7 @@
3
3
  // Phase logic lives in src/engine/execution-plan/phases.ts
4
4
  // Mobile distribution lives in src/engine/execution-plan/mobile-distribution.ts
5
5
  // Utilities live in src/engine/execution-plan/plan-utils.ts
6
- import { mkdir, writeFile } from 'node:fs/promises';
7
- import { dirname, join } from 'node:path';
6
+ import { join } from 'node:path';
8
7
  import { specStore, knowledgeStore, patternStore } from '../storage/index.js';
9
8
  import { t, ti } from '../i18n/index.js';
10
9
  import { generatePlanMarkdown } from '../engine/dor-dod.js';
@@ -13,6 +12,7 @@ import { generateMobileDistributionPhase, isMobileDistributionSpec, } from '../e
13
12
  import { isDesktopReleaseSpec, generateDesktopDistributionPhase, } from '../engine/execution-plan/desktop-distribution.js';
14
13
  import { determineCriticalPath, findParallelizable, readSpecContent, } from '../engine/execution-plan/plan-utils.js';
15
14
  import { projectDataDir } from '../storage/base-store.js';
15
+ import { atomicWriteFile } from '../engine/safety/atomic-write-file.js';
16
16
  export async function handleGenerateExecutionPlan(args) {
17
17
  const { specId, projectId } = args;
18
18
  const spec = await specStore.getSpec(projectId, specId);
@@ -41,8 +41,7 @@ export async function handleGenerateExecutionPlan(args) {
41
41
  try {
42
42
  planPath = join(projectDataDir(projectId), 'handoffs', specId, 'execution-plan.md');
43
43
  const planContent = generatePlanMarkdown(plan, spec);
44
- await mkdir(dirname(planPath), { recursive: true });
45
- await writeFile(planPath, planContent, 'utf-8');
44
+ await atomicWriteFile(planPath, planContent, { encoding: 'utf-8' });
46
45
  await specStore.updateSpec(projectId, specId, { planPath });
47
46
  /* v8 ignore next 3 -- defensive: filesystem write failure during plan generation */
48
47
  }
@@ -1,3 +1,4 @@
1
+ import { technologyValue } from '../engine/technology-registry.js';
1
2
  // tools/generate-sub-agent.ts — Create specialized sub-agents
2
3
  // Uses agent-generator engine: generateSubAgent()
3
4
  import { t, ti } from '../i18n/index.js';
@@ -62,7 +63,7 @@ export async function handleGenerateSubAgent(args) {
62
63
  const lang = file.path.endsWith('.py')
63
64
  ? 'python'
64
65
  : file.path.endsWith('.ts')
65
- ? 'typescript'
66
+ ? technologyValue('technology-typescript-969545')
66
67
  : file.path.endsWith('.json')
67
68
  ? 'json'
68
69
  : 'text';
@@ -1,5 +1,4 @@
1
- // tools/generate-tests/generators/a11y-tests-generator.ts
2
- // SPEC-017a: Accessibility test definitions and content generators
1
+ import { technologyValue } from '../../../engine/technology-registry.js';
3
2
  export function generateA11yTestDefs(title, testDir) {
4
3
  return [
5
4
  {
@@ -27,8 +26,10 @@ export function generateA11yTestContent(title, framework, language) {
27
26
  return generateJsA11yTest(title, framework);
28
27
  }
29
28
  function generateJsA11yTest(title, framework) {
30
- const isVitest = framework === 'vitest';
31
- const runner = isVitest ? 'vitest' : 'jest';
29
+ const isVitest = framework === technologyValue('technology-vitest-a9127f');
30
+ const runner = isVitest
31
+ ? technologyValue('technology-vitest-a9127f')
32
+ : technologyValue('technology-jest-35e99f');
32
33
  return [
33
34
  `// Accessibility tests for: ${title}`,
34
35
  '// Generated by Planu SDD MCP Server',
@@ -1,5 +1,4 @@
1
- // tools/generate-tests/generators/advanced-testing-generator.ts — SPEC-049
2
- // Generates advanced testing scaffolds: property-based, mutation config, a11y, chaos runbook.
1
+ import { technologyValue } from '../../../engine/technology-registry.js';
3
2
  import { detectPropertyBasedNeed, generatePropertyScaffold, generateMutationConfig, getMutationTool, generateChaosRunbook, buildChaosRunbookMarkdown, isKubernetesProject, generateA11yTests, isWebProject, } from '../../../engine/advanced-testing/index.js';
4
3
  /** Criteria keywords that trigger property-based test generation. */
5
4
  const CRITICAL_KEYWORDS = ['critical', 'payment', 'auth', 'security', 'financial', 'core'];
@@ -105,10 +104,12 @@ function buildChaosRunbookFile(spec, testDir, autoGenerate) {
105
104
  }
106
105
  /** Generate an accessibility test file for the spec. */
107
106
  function buildA11yTestFile(spec, testDir, language, autoGenerate) {
108
- const testFramework = language === 'typescript' || language === 'javascript' ? 'playwright' : 'pa11y';
107
+ const testFramework = language === technologyValue('technology-typescript-969545') || language === 'javascript'
108
+ ? technologyValue('technology-playwright-7827e8')
109
+ : 'pa11y';
109
110
  const a11yScaffold = generateA11yTests(testFramework);
110
111
  const slug = spec.id.toLowerCase().replace(/[^a-z0-9]/g, '-');
111
- const ext = language === 'typescript' ? 'ts' : 'js';
112
+ const ext = language === technologyValue('technology-typescript-969545') ? 'ts' : 'js';
112
113
  return {
113
114
  path: `${testDir}/advanced/${slug}.a11y.${ext}`,
114
115
  framework: a11yScaffold.framework,
@@ -1,8 +1,11 @@
1
+ import { technologyValue } from '../../../../engine/technology-registry.js';
1
2
  // tools/generate-tests/generators/concurrency-test-generator/js-templates.ts — SPEC-034
2
3
  // TypeScript/JavaScript concurrency test scaffolds
3
4
  export function generateJsConcurrencyTest(title, framework, model) {
4
- const isVitest = framework === 'vitest';
5
- const runner = isVitest ? 'vitest' : 'jest';
5
+ const isVitest = framework === technologyValue('technology-vitest-a9127f');
6
+ const runner = isVitest
7
+ ? technologyValue('technology-vitest-a9127f')
8
+ : technologyValue('technology-jest-35e99f');
6
9
  const lines = [
7
10
  `// Concurrency tests for: ${title}`,
8
11
  `// Concurrency model: ${model}`,
@@ -36,8 +39,10 @@ export function generateJsConcurrencyTest(title, framework, model) {
36
39
  return lines.join('\n');
37
40
  }
38
41
  export function generateJsPactTest(title, framework) {
39
- const isVitest = framework === 'vitest';
40
- const runner = isVitest ? 'vitest' : 'jest';
42
+ const isVitest = framework === technologyValue('technology-vitest-a9127f');
43
+ const runner = isVitest
44
+ ? technologyValue('technology-vitest-a9127f')
45
+ : technologyValue('technology-jest-35e99f');
41
46
  return [
42
47
  `// Pact consumer contract tests for: ${title}`,
43
48
  '// Install: npm install --save-dev @pact-foundation/pact',
@@ -1,6 +1,4 @@
1
- // tools/generate-tests/generators/concurrency-test-generator.ts — SPEC-034
2
- // Generates concurrency, resilience, and Pact consumer contract test scaffolds.
3
- // Delegates to sub-modules in ./concurrency-test-generator/
1
+ import { technologyValue } from '../../../engine/technology-registry.js';
4
2
  import { generateJsConcurrencyTest, generateJsPactTest, } from './concurrency-test-generator/js-templates.js';
5
3
  import { generateGoConcurrencyTest } from './concurrency-test-generator/go-templates.js';
6
4
  import { generateJavaConcurrencyTest, generateJavaPactTest, } from './concurrency-test-generator/java-templates.js';
@@ -11,7 +9,13 @@ import { getConcurrencyModelForLanguage, getTestExt } from './concurrency-test-g
11
9
  */
12
10
  export function isConcurrencyProject(knowledge) {
13
11
  const stackLower = knowledge.stack.map((s) => s.toLowerCase());
14
- return (stackLower.some((s) => ['redis', 'memcached', 'shared-state', 'mutex', 'concurrent'].some((kw) => s.includes(kw))) ||
12
+ return (stackLower.some((s) => [
13
+ technologyValue('technology-redis-34fb46'),
14
+ 'memcached',
15
+ 'shared-state',
16
+ 'mutex',
17
+ 'concurrent',
18
+ ].some((kw) => s.includes(kw))) ||
15
19
  knowledge.language === 'go' ||
16
20
  knowledge.language === 'java' ||
17
21
  knowledge.language === 'rust');
@@ -1,6 +1,12 @@
1
- // tools/generate-tests/generators/database/detectors.ts
2
- // Signal constants and detection helpers for database-related tech stack.
3
- const CACHE_SIGNALS = ['redis', 'memcached', 'node-cache', 'caffeine', 'ehcache', 'valkey'];
1
+ import { technologyValue } from '../../../../engine/technology-registry.js';
2
+ const CACHE_SIGNALS = [
3
+ technologyValue('technology-redis-34fb46'),
4
+ 'memcached',
5
+ 'node-cache',
6
+ 'caffeine',
7
+ 'ehcache',
8
+ 'valkey',
9
+ ];
4
10
  const SEARCH_SIGNALS = [
5
11
  'elasticsearch',
6
12
  'meilisearch',
@@ -1,6 +1,4 @@
1
- // tools/generate-tests/generators/database/index.ts
2
- // Entry point for the database test generator module.
3
- // Orchestrates detection, test definitions, and scaffold generation.
1
+ import { technologyValue } from '../../../../engine/technology-registry.js';
4
2
  import { detectCaching, detectSearchEngine, hasOrm } from './detectors.js';
5
3
  import { buildTsDatabaseTest } from './ts-scaffold.js';
6
4
  import { buildPythonDatabaseTest } from './python-scaffold.js';
@@ -11,7 +9,7 @@ export function generateDatabaseTestFiles(spec, testDir, framework, language, te
11
9
  const db = knowledge.database;
12
10
  const isPython = language === 'python';
13
11
  const ext = isPython ? 'py' : testExt;
14
- const fw = isPython ? 'pytest' : framework;
12
+ const fw = isPython ? technologyValue('technology-pytest-2b0121') : framework;
15
13
  const content = isPython
16
14
  ? buildPythonDatabaseTest(spec.title, db, orm, cache, search)
17
15
  : buildTsDatabaseTest(spec.title, db, orm, cache, search);
@@ -1,5 +1,4 @@
1
- // tools/generate-tests/generators/event-test-generator.ts Event test scaffolds (SPEC-031)
2
- // Generates DLQ and idempotence test definitions and file scaffolds.
1
+ import { technologyValue } from '../../../engine/technology-registry.js';
3
2
  import { detectBrokers, getBrokerConfig, requiresIdempotence, supportsDLQ, } from '../../../engine/event-detector.js';
4
3
  /**
5
4
  * Returns true when the project uses a known event broker.
@@ -88,8 +87,10 @@ export function generateEventTestFiles(spec, testDir, testFramework, language, k
88
87
  // Content generators
89
88
  // ---------------------------------------------------------------------------
90
89
  function generateJsEventTest(title, brokerName, framework, hasDLQ, needsIdempotence) {
91
- const isVitest = framework === 'vitest';
92
- const runner = isVitest ? 'vitest' : 'jest';
90
+ const isVitest = framework === technologyValue('technology-vitest-a9127f');
91
+ const runner = isVitest
92
+ ? technologyValue('technology-vitest-a9127f')
93
+ : technologyValue('technology-jest-35e99f');
93
94
  const lines = [
94
95
  `// Event-driven tests for: ${title}`,
95
96
  `// Broker: ${brokerName}`,
@@ -1,3 +1,4 @@
1
+ import { technologyValue } from '../../../engine/technology-registry.js';
1
2
  const GAME_FW_SET = new Set(['unity', 'godot', 'unreal', 'bevy', 'phaser', 'pygame']);
2
3
  /**
3
4
  * Returns true if the project is a game that needs game-specific tests.
@@ -135,7 +136,7 @@ function generateRustCppTestContent(title, engine) {
135
136
  ].join('\n');
136
137
  }
137
138
  function generateJSGameTestContent(title, testFramework) {
138
- const isVitest = testFramework === 'vitest';
139
+ const isVitest = testFramework === technologyValue('technology-vitest-a9127f');
139
140
  return [
140
141
  isVitest
141
142
  ? "import { describe, it, expect } from 'vitest';"
@@ -1,13 +1,19 @@
1
- // tools/generate-tests/generators/graphql-test-generator.ts SPEC-058a Section D
2
- // Generates GraphQL API test scaffolds: schema validation, queries, mutations, security.
3
- const GRAPHQL_SIGNALS = ['graphql', 'apollo', 'urql', 'relay', 'hasura', '@graphql-codegen'];
1
+ import { technologyValue } from '../../../engine/technology-registry.js';
2
+ const GRAPHQL_SIGNALS = [
3
+ technologyValue('technology-graphql-aed31c'),
4
+ 'apollo',
5
+ 'urql',
6
+ 'relay',
7
+ 'hasura',
8
+ '@graphql-codegen',
9
+ ];
4
10
  /**
5
11
  * Returns true when the project uses GraphQL (Apollo, Urql, Relay, Hasura, etc.).
6
12
  */
7
13
  export function isGraphqlProject(knowledge) {
8
14
  const stackLower = knowledge.stack.map((s) => s.toLowerCase());
9
15
  const hasSignal = GRAPHQL_SIGNALS.some((sig) => stackLower.some((s) => s.includes(sig)));
10
- const hasContract = knowledge.apiContracts.some((c) => c.type.toLowerCase() === 'graphql');
16
+ const hasContract = knowledge.apiContracts.some((c) => c.type.toLowerCase() === technologyValue('technology-graphql-aed31c'));
11
17
  return hasSignal || hasContract;
12
18
  }
13
19
  /**
@@ -221,7 +227,7 @@ class Test${cls}GraphQL:
221
227
  export function generateGraphqlTestFiles(spec, testDir, framework, language, testExt, autoGenerate) {
222
228
  const isPython = language === 'python';
223
229
  const resolvedExt = isPython ? 'py' : testExt;
224
- const resolvedFramework = isPython ? 'pytest' : framework;
230
+ const resolvedFramework = isPython ? technologyValue('technology-pytest-2b0121') : framework;
225
231
  const content = isPython ? buildPythonGraphqlTest(spec.title) : buildTsGraphqlTest(spec.title);
226
232
  return [
227
233
  {
@@ -1,5 +1,4 @@
1
- // tools/generate-tests/generators/grpc-test-generator.ts SPEC-058a Section D
2
- // Generates gRPC test scaffolds: proto contracts, unary, streaming, deadlines.
1
+ import { technologyValue } from '../../../engine/technology-registry.js';
3
2
  const GRPC_SIGNALS = ['grpc', '@grpc/grpc-js', 'protobuf', 'buf', 'proto-loader', 'grpc-web'];
4
3
  /**
5
4
  * Returns true when the project uses gRPC / Protocol Buffers.
@@ -264,7 +263,7 @@ export function generateGrpcTestFiles(spec, testDir, framework, language, testEx
264
263
  else if (language === 'python') {
265
264
  content = buildPythonGrpcTest(spec.title);
266
265
  resolvedExt = 'py';
267
- resolvedFramework = 'pytest';
266
+ resolvedFramework = technologyValue('technology-pytest-2b0121');
268
267
  }
269
268
  else {
270
269
  content = buildTsGrpcTest(spec.title);