@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
@@ -17,16 +17,21 @@ async function pathIsDirectory(path) {
17
17
  return false;
18
18
  }
19
19
  }
20
+ async function readDirectory(path) {
21
+ try {
22
+ return await readdir(path);
23
+ }
24
+ catch {
25
+ return [];
26
+ }
27
+ }
20
28
  async function gitRmCached(projectPath, relPath) {
21
29
  if (!existsSync(join(projectPath, '.git'))) {
22
30
  return;
23
31
  }
24
32
  try {
25
- const args = ['rm', '--cached', '--quiet', '--ignore-unmatch'];
26
- if (await pathIsDirectory(join(projectPath, relPath))) {
27
- args.push('-r');
28
- }
29
- args.push(relPath);
33
+ // This helper is only called for directories from removePath.
34
+ const args = ['rm', '--cached', '--quiet', '--ignore-unmatch', '-r', relPath];
30
35
  await execFileAsync('git', args, {
31
36
  cwd: projectPath,
32
37
  timeout: 5_000,
@@ -48,9 +53,6 @@ function appendSectionIfMissing(specContent, heading, body) {
48
53
  async function mergeLegacySpecFile(projectPath, specDir, fileName) {
49
54
  const specPath = join(specDir, 'spec.md');
50
55
  const legacyPath = join(specDir, fileName);
51
- if (!existsSync(legacyPath) || !existsSync(specPath)) {
52
- return false;
53
- }
54
56
  const [specContent, legacyContent] = await Promise.all([
55
57
  readFile(specPath, 'utf-8'),
56
58
  readFile(legacyPath, 'utf-8'),
@@ -70,7 +72,6 @@ async function mergeLegacySpecFile(projectPath, specDir, fileName) {
70
72
  });
71
73
  }
72
74
  await safeUnlink(projectPath, legacyPath);
73
- return true;
74
75
  }
75
76
  async function removePath(projectPath, absolutePath) {
76
77
  const rel = relative(projectPath, absolutePath);
@@ -116,13 +117,12 @@ async function updateGitignore(projectPath) {
116
117
  return true;
117
118
  }
118
119
  async function walkSpecDirectory(projectPath, specDir, result) {
119
- const entries = await readdir(specDir).catch(() => []);
120
+ const entries = await readDirectory(specDir);
120
121
  for (const entry of entries) {
121
122
  const full = join(specDir, entry);
122
123
  if (mustMergeBeforeDeleteSpecFile(entry)) {
123
- if (await mergeLegacySpecFile(projectPath, specDir, entry)) {
124
- result.merged.push(relative(projectPath, full));
125
- }
124
+ await mergeLegacySpecFile(projectPath, specDir, entry);
125
+ result.merged.push(relative(projectPath, full));
126
126
  continue;
127
127
  }
128
128
  const isDir = await pathIsDirectory(full);
@@ -134,11 +134,10 @@ async function walkSpecDirectory(projectPath, specDir, result) {
134
134
  }
135
135
  }
136
136
  async function shouldDeleteOrphanSpecDir(specDir) {
137
- const entries = await readdir(specDir).catch(() => []);
138
- if (entries.includes('spec.md')) {
139
- return false;
140
- }
141
- return !entries.some((entry) => mustMergeBeforeDeleteSpecFile(entry));
137
+ const entries = await readDirectory(specDir);
138
+ // Legacy split files are only mergeable when the canonical destination exists.
139
+ // Keeping them without spec.md leaves a permanently non-canonical orphan behind.
140
+ return !entries.includes('spec.md');
142
141
  }
143
142
  export async function runStrictPlanuCleanup(projectPath) {
144
143
  const result = { deleted: [], merged: [], gitignoreUpdated: false };
@@ -146,7 +145,7 @@ export async function runStrictPlanuCleanup(projectPath) {
146
145
  if (!existsSync(planuDir)) {
147
146
  return result;
148
147
  }
149
- const entries = await readdir(planuDir).catch(() => []);
148
+ const entries = await readDirectory(planuDir);
150
149
  for (const entry of entries) {
151
150
  const full = join(planuDir, entry);
152
151
  const isDir = await pathIsDirectory(full);
@@ -161,7 +160,7 @@ export async function runStrictPlanuCleanup(projectPath) {
161
160
  }
162
161
  }
163
162
  const releasesDir = join(planuDir, 'releases');
164
- for (const entry of await readdir(releasesDir).catch(() => [])) {
163
+ for (const entry of await readDirectory(releasesDir)) {
165
164
  const rel = `releases/${entry}`;
166
165
  if (!isCanonicalReleaseFile(rel)) {
167
166
  const full = join(releasesDir, entry);
@@ -170,7 +169,7 @@ export async function runStrictPlanuCleanup(projectPath) {
170
169
  }
171
170
  }
172
171
  const specsDir = join(planuDir, 'specs');
173
- for (const entry of await readdir(specsDir).catch(() => [])) {
172
+ for (const entry of await readDirectory(specsDir)) {
174
173
  const full = join(specsDir, entry);
175
174
  if (!(await pathIsDirectory(full)) || entry === 'data') {
176
175
  await removePath(projectPath, full);
@@ -198,7 +197,7 @@ export async function validateStrictPlanuLayout(projectPath, options = {}) {
198
197
  const offenders = [];
199
198
  const planuDir = join(projectPath, 'planu');
200
199
  if (options.includeRoot !== false) {
201
- const entries = await readdir(planuDir).catch(() => []);
200
+ const entries = await readDirectory(planuDir);
202
201
  for (const entry of entries) {
203
202
  const full = join(planuDir, entry);
204
203
  const isDir = await pathIsDirectory(full);
@@ -207,7 +206,7 @@ export async function validateStrictPlanuLayout(projectPath, options = {}) {
207
206
  offenders.push(relative(projectPath, full));
208
207
  }
209
208
  }
210
- for (const entry of await readdir(join(planuDir, 'releases')).catch(() => [])) {
209
+ for (const entry of await readDirectory(join(planuDir, 'releases'))) {
211
210
  const rel = `releases/${entry}`;
212
211
  if (!isCanonicalReleaseFile(rel)) {
213
212
  offenders.push(`planu/${rel}`);
@@ -215,7 +214,7 @@ export async function validateStrictPlanuLayout(projectPath, options = {}) {
215
214
  }
216
215
  }
217
216
  const scopedSpecDirs = resolveSpecDirsForValidation(projectPath, options.specPath) ??
218
- (await readdir(join(planuDir, 'specs')).catch(() => [])).map((specDir) => join(planuDir, 'specs', specDir));
217
+ (await readDirectory(join(planuDir, 'specs'))).map((specDir) => join(planuDir, 'specs', specDir));
219
218
  for (const full of scopedSpecDirs) {
220
219
  const specDir = relative(join(planuDir, 'specs'), full);
221
220
  if (!(await pathIsDirectory(full)) || specDir === 'data') {
@@ -226,7 +225,7 @@ export async function validateStrictPlanuLayout(projectPath, options = {}) {
226
225
  offenders.push(relative(projectPath, full));
227
226
  continue;
228
227
  }
229
- for (const entry of await readdir(full).catch(() => [])) {
228
+ for (const entry of await readDirectory(full)) {
230
229
  const entryPath = join(full, entry);
231
230
  const isDir = await pathIsDirectory(entryPath);
232
231
  if (isDir ? !isCanonicalSpecDir(entry) : !isCanonicalSpecFile(entry)) {
@@ -1,8 +1,3 @@
1
- /**
2
- * Stack detection and spec adaptation for registry specs.
3
- * Detects project technology stack from config files and applies
4
- * framework-specific substitutions to spec content.
5
- */
6
1
  import type { StackDetectionResult, StackAdaptation } from '../../types/index.js';
7
2
  export declare function detectStack(projectPath: string): Promise<StackDetectionResult>;
8
3
  export declare function adaptSpec(specDir: string, projectStack: StackDetectionResult, adaptableMap?: Record<string, Record<string, string>>): Promise<StackAdaptation[]>;
@@ -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 '../technology-registry.js';
3
2
  /**
4
3
  * Stack detection and spec adaptation for registry specs.
5
4
  * Detects project technology stack from config files and applies
@@ -59,49 +58,49 @@ function textContains(text, keyword) {
59
58
  // ---------------------------------------------------------------------------
60
59
  function detectNodeFramework(pkg) {
61
60
  if (hasDep(pkg, 'next')) {
62
- return 'nextjs';
61
+ return technologyValue('technology-nextjs-c93379');
63
62
  }
64
- if (hasDep(pkg, 'nuxt')) {
65
- return 'nuxt';
63
+ if (hasDep(pkg, technologyValue('technology-nuxt-22c407'))) {
64
+ return technologyValue('technology-nuxt-22c407');
66
65
  }
67
- if (hasDep(pkg, '@sveltejs/kit') || hasDep(pkg, 'svelte')) {
68
- return 'sveltekit';
66
+ if (hasDep(pkg, '@sveltejs/kit') || hasDep(pkg, technologyValue('technology-svelte-c190ac'))) {
67
+ return technologyValue('technology-sveltekit-eefb03');
69
68
  }
70
- if (hasDep(pkg, '@remix-run/node') || hasDep(pkg, 'remix')) {
71
- return 'remix';
69
+ if (hasDep(pkg, '@remix-run/node') || hasDep(pkg, technologyValue('technology-remix-0c5d96'))) {
70
+ return technologyValue('technology-remix-0c5d96');
72
71
  }
73
- if (hasDep(pkg, 'astro')) {
74
- return 'astro';
72
+ if (hasDep(pkg, technologyValue('technology-astro-23661e'))) {
73
+ return technologyValue('technology-astro-23661e');
75
74
  }
76
- if (hasDep(pkg, 'fastify')) {
77
- return 'fastify';
75
+ if (hasDep(pkg, technologyValue('technology-fastify-cbe57e'))) {
76
+ return technologyValue('technology-fastify-cbe57e');
78
77
  }
79
- if (hasDep(pkg, 'express')) {
80
- return 'express';
78
+ if (hasDep(pkg, technologyValue('technology-express-008231'))) {
79
+ return technologyValue('technology-express-008231');
81
80
  }
82
81
  return 'unknown';
83
82
  }
84
83
  function detectNodeOrm(pkg) {
85
- if (hasDep(pkg, '@prisma/client') || hasDep(pkg, 'prisma')) {
86
- return 'prisma';
84
+ if (hasDep(pkg, '@prisma/client') || hasDep(pkg, technologyValue('technology-prisma-99497c'))) {
85
+ return technologyValue('technology-prisma-99497c');
87
86
  }
88
87
  if (hasDep(pkg, 'drizzle-orm')) {
89
- return 'drizzle';
88
+ return technologyValue('technology-drizzle-424f22');
90
89
  }
91
- if (hasDep(pkg, 'sequelize')) {
92
- return 'sequelize';
90
+ if (hasDep(pkg, technologyValue('technology-sequelize-d18291'))) {
91
+ return technologyValue('technology-sequelize-d18291');
93
92
  }
94
- if (hasDep(pkg, 'typeorm')) {
95
- return 'typeorm';
93
+ if (hasDep(pkg, technologyValue('technology-typeorm-527d4d'))) {
94
+ return technologyValue('technology-typeorm-527d4d');
96
95
  }
97
96
  return undefined;
98
97
  }
99
98
  function detectNodeTestRunner(pkg) {
100
- if (hasDevDep(pkg, 'vitest')) {
101
- return 'vitest';
99
+ if (hasDevDep(pkg, technologyValue('technology-vitest-a9127f'))) {
100
+ return technologyValue('technology-vitest-a9127f');
102
101
  }
103
- if (hasDevDep(pkg, 'jest')) {
104
- return 'jest';
102
+ if (hasDevDep(pkg, technologyValue('technology-jest-35e99f'))) {
103
+ return technologyValue('technology-jest-35e99f');
105
104
  }
106
105
  if (hasDevDep(pkg, 'mocha')) {
107
106
  return 'mocha';
@@ -140,7 +139,7 @@ async function detectNodePackageManager(projectPath) {
140
139
  async function detectNodeStack(projectPath, pkg) {
141
140
  const result = { language: 'javascript', framework: 'unknown' };
142
141
  if (await fileExists(join(projectPath, 'tsconfig.json'))) {
143
- result.language = 'typescript';
142
+ result.language = technologyValue('technology-typescript-969545');
144
143
  }
145
144
  result.framework = detectNodeFramework(pkg);
146
145
  result.orm = detectNodeOrm(pkg);
@@ -158,20 +157,20 @@ async function detectPythonStack(projectPath) {
158
157
  const requirements = await readTextSafe(join(projectPath, 'requirements.txt'));
159
158
  const combined = [pyproject, requirements].filter(Boolean).join('\n');
160
159
  /* v8 ignore start -- Python framework detection branches */
161
- if (textContains(combined, 'fastapi')) {
162
- result.framework = 'fastapi';
160
+ if (textContains(combined, technologyValue('technology-fastapi-6aee0e'))) {
161
+ result.framework = technologyValue('technology-fastapi-6aee0e');
163
162
  }
164
- else if (textContains(combined, 'django')) {
165
- result.framework = 'django';
163
+ else if (textContains(combined, technologyValue('technology-django-7d8a08'))) {
164
+ result.framework = technologyValue('technology-django-7d8a08');
166
165
  }
167
- else if (textContains(combined, 'flask')) {
168
- result.framework = 'flask';
166
+ else if (textContains(combined, technologyValue('technology-flask-b87aa5'))) {
167
+ result.framework = technologyValue('technology-flask-b87aa5');
169
168
  }
170
- if (textContains(combined, 'sqlalchemy')) {
171
- result.orm = 'sqlalchemy';
169
+ if (textContains(combined, technologyValue('technology-sqlalchemy-37f268'))) {
170
+ result.orm = technologyValue('technology-sqlalchemy-37f268');
172
171
  }
173
- if (textContains(combined, 'pytest')) {
174
- result.testRunner = 'pytest';
172
+ if (textContains(combined, technologyValue('technology-pytest-2b0121'))) {
173
+ result.testRunner = technologyValue('technology-pytest-2b0121');
175
174
  }
176
175
  if (await fileExists(join(projectPath, 'poetry.lock'))) {
177
176
  result.packageManager = 'poetry';
@@ -193,13 +192,13 @@ async function detectGoStack(projectPath) {
193
192
  return result;
194
193
  }
195
194
  if (goMod.includes('github.com/gin-gonic/gin')) {
196
- result.framework = 'gin';
195
+ result.framework = technologyValue('technology-gin-985adc');
197
196
  }
198
197
  else if (goMod.includes('github.com/gofiber/fiber')) {
199
- result.framework = 'fiber';
198
+ result.framework = technologyValue('technology-fiber-77c3e6');
200
199
  }
201
200
  if (goMod.includes('gorm.io/gorm')) {
202
- result.orm = 'gorm';
201
+ result.orm = technologyValue('technology-gorm-7f6614');
203
202
  }
204
203
  return result;
205
204
  }
@@ -209,14 +208,14 @@ async function detectRustStack(projectPath) {
209
208
  if (!cargo) {
210
209
  return result;
211
210
  }
212
- if (textContains(cargo, 'actix-web')) {
213
- result.framework = 'actix-web';
211
+ if (textContains(cargo, technologyValue('technology-actix-web-ab3e35'))) {
212
+ result.framework = technologyValue('technology-actix-web-ab3e35');
214
213
  }
215
- else if (textContains(cargo, 'axum')) {
216
- result.framework = 'axum';
214
+ else if (textContains(cargo, technologyValue('technology-axum-af7119'))) {
215
+ result.framework = technologyValue('technology-axum-af7119');
217
216
  }
218
- if (textContains(cargo, 'diesel')) {
219
- result.orm = 'diesel';
217
+ if (textContains(cargo, technologyValue('technology-diesel-f83cff'))) {
218
+ result.orm = technologyValue('technology-diesel-f83cff');
220
219
  }
221
220
  return result;
222
221
  }
@@ -2,6 +2,7 @@
2
2
  // HTTP client for the Planu spec registry. Uses node:https/http only (no external deps).
3
3
  import * as https from 'node:https';
4
4
  import * as http from 'node:http';
5
+ import { assertNetworkAllowed } from '../network-policy.js';
5
6
  const DEFAULT_BASE_URL = 'https://registry.planu.dev/api/v1';
6
7
  const MAX_RETRIES = 3;
7
8
  const BASE_DELAY_MS = 1000;
@@ -71,6 +72,7 @@ async function request(url, options, body) {
71
72
  }
72
73
  /** Execute a single HTTP request. */
73
74
  function executeRequest(url, options, body) {
75
+ assertNetworkAllowed(url);
74
76
  return new Promise((resolve, reject) => {
75
77
  const transport = getTransport(url);
76
78
  const req = transport.request(url, options, (res) => {
@@ -1,3 +1,4 @@
1
+ import { technologyValue } from './technology-registry.js';
1
2
  // engine/spec-source-sync.ts — Spec-as-Source sync logic (SPEC-349)
2
3
  import { readFile } from 'node:fs/promises';
3
4
  // ---------------------------------------------------------------------------
@@ -26,9 +27,9 @@ export function detectMarkers(content) {
26
27
  export function detectLanguage(filePath) {
27
28
  const ext = filePath.split('.').pop()?.toLowerCase() ?? '';
28
29
  const MAP = {
29
- ts: 'typescript',
30
+ ts: technologyValue('technology-typescript-969545'),
30
31
  js: 'javascript',
31
- tsx: 'typescript',
32
+ tsx: technologyValue('technology-typescript-969545'),
32
33
  jsx: 'javascript',
33
34
  py: 'python',
34
35
  rb: 'ruby',
@@ -4,6 +4,7 @@
4
4
  import { readdir, readFile } from 'node:fs/promises';
5
5
  import { join } from 'node:path';
6
6
  import { z } from 'zod';
7
+ import { resolvedStorageArtifactPath } from '../../storage/storage-catalog.js';
7
8
  /** Zod schema for validating custom template JSON files. */
8
9
  const templateVariableSchema = z.object({
9
10
  key: z.string().min(1),
@@ -53,14 +54,12 @@ const customTemplateSchema = z.object({
53
54
  fichaTecnicaTemplate: z.string().min(1),
54
55
  progressTemplate: z.string().min(1),
55
56
  });
56
- /** Default directory for custom user templates. */
57
- const CUSTOM_TEMPLATES_DIR = 'data/global/spec-templates/custom';
58
57
  /**
59
58
  * Loads custom templates from a directory. Each .json file is validated.
60
59
  * Malformed files generate warnings but do not block loading of other templates.
61
60
  */
62
61
  export async function loadCustomTemplates(baseDir) {
63
- const dir = baseDir ?? CUSTOM_TEMPLATES_DIR;
62
+ const dir = baseDir ?? resolvedStorageArtifactPath('custom-spec-templates');
64
63
  const templates = [];
65
64
  const warnings = [];
66
65
  let files;
@@ -1,7 +1,4 @@
1
- // engine/spec-templates/templates-domain-specific.ts Domain-specific spec templates A (SPEC-513).
2
- // Auth login, auth OAuth, Stripe payment, and CRUD resource templates.
3
- // Templates 5-8 (REST API integration, webhook, file upload, background job) are in
4
- // templates-domain-specific-b.ts.
1
+ import { technologyValue } from '../technology-registry.js';
5
2
  import { REST_API_INTEGRATION_TEMPLATE, WEBHOOK_CONSUMER_TEMPLATE, FILE_UPLOAD_TEMPLATE, BACKGROUND_JOB_TEMPLATE, } from './templates-domain-specific-b.js';
6
3
  export { REST_API_INTEGRATION_TEMPLATE, WEBHOOK_CONSUMER_TEMPLATE, FILE_UPLOAD_TEMPLATE, BACKGROUND_JOB_TEMPLATE, };
7
4
  /** Auth Login spec template — credential validation, session, rate limiting, lockout. */
@@ -223,7 +220,13 @@ export const STRIPE_PAYMENT_TEMPLATE = {
223
220
  name: 'Stripe Payment',
224
221
  category: 'integration',
225
222
  description: 'Stripe checkout sessions, webhook signature verification, refunds, and failed payment retry.',
226
- tags: ['payments', 'stripe', 'webhook', 'idempotency', 'backend'],
223
+ tags: [
224
+ 'payments',
225
+ technologyValue('technology-stripe-2bed20'),
226
+ 'webhook',
227
+ 'idempotency',
228
+ 'backend',
229
+ ],
227
230
  complexityScore: 'M',
228
231
  estimationBase: {
229
232
  hoursMin: 20,
@@ -1,5 +1,4 @@
1
- // engine/spec-templates/templates-perf-integration.ts Performance + third-party integration templates.
2
- // Extracted from catalog-extra.ts to keep file sizes within limits.
1
+ import { technologyValue } from '../technology-registry.js';
3
2
  /** Performance optimization spec template. */
4
3
  export const PERFORMANCE_OPTIMIZATION_TEMPLATE = {
5
4
  id: 'performance-optimization',
@@ -139,7 +138,7 @@ export const THIRD_PARTY_INTEGRATION_TEMPLATE = {
139
138
  key: 'ServiceName',
140
139
  label: 'Service name',
141
140
  description: 'Name of the external service to integrate',
142
- example: 'Stripe',
141
+ example: technologyValue('technology-stripe-961a60'),
143
142
  required: true,
144
143
  },
145
144
  {
@@ -1,5 +1,3 @@
1
- // SPEC-597-EXEMPT: canonical mapping (npm-package↔framework, keyword catalogue)
2
- // — must enumerate framework names by design; no detection logic to migrate.
3
1
  // manifest-reader.ts — Reads project manifest files (SPEC-041)
4
2
  import { readFile } from 'node:fs/promises';
5
3
  import { join } from 'node:path';
@@ -5,7 +5,7 @@
5
5
  import { readFile, access, readdir } from 'node:fs/promises';
6
6
  import { join } from 'node:path';
7
7
  import { constants } from 'node:fs';
8
- import { hashProjectPath } from '../../storage/base-store.js';
8
+ import { hashProjectPath, projectDataDir } from '../../storage/base-store.js';
9
9
  // ---------------------------------------------------------------------------
10
10
  // Helpers
11
11
  // ---------------------------------------------------------------------------
@@ -18,8 +18,8 @@ async function fileExists(p) {
18
18
  return false;
19
19
  }
20
20
  }
21
- async function getLastTransitionForSpec(projectPath, projectId, specId) {
22
- const logPath = join(projectPath, 'planu', 'data', 'projects', projectId, 'transition-log.jsonl');
21
+ async function getLastTransitionForSpec(projectId, specId) {
22
+ const logPath = join(projectDataDir(projectId), 'transition-log.jsonl');
23
23
  try {
24
24
  const raw = await readFile(logPath, 'utf-8');
25
25
  const lines = raw.trim().split('\n').filter(Boolean);
@@ -47,8 +47,8 @@ async function getLastTransitionForSpec(projectPath, projectId, specId) {
47
47
  return null;
48
48
  }
49
49
  }
50
- async function getDaysInImplementing(projectPath, projectId, specId) {
51
- const logPath = join(projectPath, 'planu', 'data', 'projects', projectId, 'transition-log.jsonl');
50
+ async function getDaysInImplementing(projectId, specId) {
51
+ const logPath = join(projectDataDir(projectId), 'transition-log.jsonl');
52
52
  try {
53
53
  const raw = await readFile(logPath, 'utf-8');
54
54
  const lines = raw.trim().split('\n').filter(Boolean);
@@ -120,8 +120,8 @@ export async function findStaleImplementing(params) {
120
120
  // No specs dir
121
121
  }
122
122
  const hasProgress = specDir !== null && (await fileExists(join(specDir, 'progress.md')));
123
- const daysInStatus = await getDaysInImplementing(projectPath, projectId, spec.id);
124
- const lastTransition = await getLastTransitionForSpec(projectPath, projectId, spec.id);
123
+ const daysInStatus = await getDaysInImplementing(projectId, spec.id);
124
+ const lastTransition = await getLastTransitionForSpec(projectId, spec.id);
125
125
  if (daysInStatus >= daysThreshold || daysInStatus === -1) {
126
126
  results.push({
127
127
  specId: spec.id,
@@ -1,3 +1,4 @@
1
+ import { technologyValue } from './technology-registry.js';
1
2
  // engine/tdd-scaffold-generator.ts — SPEC-323
2
3
  // Generates TDD scaffold (failing test stubs + impl skeleton) from spec ACs.
3
4
  import { readFile } from 'node:fs/promises';
@@ -41,11 +42,11 @@ async function detectFramework(projectPath) {
41
42
  ...(pkg.dependencies ?? {}),
42
43
  ...(pkg.devDependencies ?? {}),
43
44
  };
44
- if ('vitest' in deps) {
45
- return 'vitest';
45
+ if (technologyValue('technology-vitest-a9127f') in deps) {
46
+ return technologyValue('technology-vitest-a9127f');
46
47
  }
47
- if ('jest' in deps) {
48
- return 'jest';
48
+ if (technologyValue('technology-jest-35e99f') in deps) {
49
+ return technologyValue('technology-jest-35e99f');
49
50
  }
50
51
  if ('mocha' in deps) {
51
52
  return 'mocha';
@@ -56,7 +57,7 @@ async function detectFramework(projectPath) {
56
57
  // Check for Python or Java markers
57
58
  const setup = await readFile(join(projectPath, 'setup.py'), 'utf8').catch(() => null);
58
59
  if (setup !== null) {
59
- return 'pytest';
60
+ return technologyValue('technology-pytest-2b0121');
60
61
  }
61
62
  const pom = await readFile(join(projectPath, 'pom.xml'), 'utf8').catch(() => null);
62
63
  if (pom !== null) {
@@ -174,13 +175,13 @@ function buildJunitContent(stubs) {
174
175
  }
175
176
  function buildTestContent(stubs, framework) {
176
177
  switch (framework) {
177
- case 'vitest':
178
+ case technologyValue('technology-vitest-a9127f'):
178
179
  return buildVitestContent(stubs);
179
- case 'jest':
180
+ case technologyValue('technology-jest-35e99f'):
180
181
  return buildJestContent(stubs);
181
182
  case 'mocha':
182
183
  return buildMochaContent(stubs);
183
- case 'pytest':
184
+ case technologyValue('technology-pytest-2b0121'):
184
185
  return buildPytestContent(stubs);
185
186
  case 'junit':
186
187
  return buildJunitContent(stubs);
@@ -223,9 +224,21 @@ export async function generateTddScaffold(specPath, projectPath) {
223
224
  testName: criterionToTestName(criterion),
224
225
  framework,
225
226
  }));
226
- const ext = framework === 'pytest' ? 'py' : framework === 'junit' ? 'java' : 'ts';
227
- const testExt = framework === 'pytest' ? '_test.py' : framework === 'junit' ? 'Test.java' : '.test.ts';
228
- const testDir = framework === 'pytest' ? 'tests' : framework === 'junit' ? 'src/test' : 'tests';
227
+ const ext = framework === technologyValue('technology-pytest-2b0121')
228
+ ? 'py'
229
+ : framework === 'junit'
230
+ ? 'java'
231
+ : 'ts';
232
+ const testExt = framework === technologyValue('technology-pytest-2b0121')
233
+ ? '_test.py'
234
+ : framework === 'junit'
235
+ ? 'Test.java'
236
+ : '.test.ts';
237
+ const testDir = framework === technologyValue('technology-pytest-2b0121')
238
+ ? 'tests'
239
+ : framework === 'junit'
240
+ ? 'src/test'
241
+ : 'tests';
229
242
  const testFilePath = join(projectPath, testDir, `${slug}${testExt}`);
230
243
  const implFilePath = join(projectPath, 'src', `${slug}.${ext}`);
231
244
  const testContent = buildTestContent(stubs, framework);
@@ -1,3 +1,4 @@
1
+ import { technologyValue } from '../technology-registry.js';
1
2
  // engine/teammate-router/green-phase-verifier.ts — SPEC-750
2
3
  // Verifies green phase: tests pass AND none of the red tests were deleted.
3
4
  import { execFile as execFileCb } from 'node:child_process';
@@ -24,7 +25,7 @@ export async function verifyGreenPhase(redHandoff, projectRoot) {
24
25
  // Step 2: Run the tests and expect them to pass now
25
26
  try {
26
27
  const testArgs = ['--pool=forks', ...redHandoff.testFiles];
27
- await execFile('npx', ['vitest', 'run', ...testArgs], {
28
+ await execFile('npx', [technologyValue('technology-vitest-a9127f'), 'run', ...testArgs], {
28
29
  cwd: projectRoot,
29
30
  timeout: 120_000,
30
31
  });
@@ -1,3 +1,4 @@
1
+ import { technologyValue } from '../technology-registry.js';
1
2
  // engine/teammate-router/red-phase-verifier.ts — SPEC-750
2
3
  // Runs the test suite and confirms that all expected tests are failing (RED phase).
3
4
  import { execFile as execFileCb } from 'node:child_process';
@@ -12,7 +13,7 @@ export async function verifyRedPhase(handoff, projectRoot) {
12
13
  try {
13
14
  // Run just the test files from the handoff
14
15
  const testArgs = ['--pool=forks', ...handoff.testFiles];
15
- await execFile('npx', ['vitest', 'run', ...testArgs], {
16
+ await execFile('npx', [technologyValue('technology-vitest-a9127f'), 'run', ...testArgs], {
16
17
  cwd: projectRoot,
17
18
  timeout: 120_000,
18
19
  });
@@ -0,0 +1,11 @@
1
+ import type { TechnologyRegistry } from '../types/technology-registry.js';
2
+ import type { TechnologySymbolMap } from '../types/technology-symbols.generated.js';
3
+ export declare function parseTechnologyRegistry(input: {
4
+ authority: unknown;
5
+ frameworkCatalog: unknown;
6
+ detectionCatalog: unknown;
7
+ }): TechnologyRegistry;
8
+ export declare function technologyValue<K extends keyof TechnologySymbolMap>(symbol: K): TechnologySymbolMap[K];
9
+ export declare function loadTechnologyRegistry(directory?: string): TechnologyRegistry;
10
+ export declare function resetTechnologyRegistryCache(): void;
11
+ //# sourceMappingURL=technology-registry.d.ts.map