@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,34 +1,43 @@
1
- // Planu Web Fetcher: Stack Detection from text and file paths (SPEC-382)
2
- // SPEC-597-EXEMPT: regex patterns + canonical labels for free-form text scanning.
3
- // Different surface than detection-signals.json (which targets project files,
4
- // not free-text web content). Migration pending a unified detection registry.
1
+ import { technologyValue } from '../technology-registry.js';
5
2
  // ~50 well-known technologies with their normalized names
6
3
  const KNOWN_TECHS = [
7
- { pattern: /\bnext\.?js\b/i, normalized: 'next.js' },
8
- { pattern: /\breact\b/i, normalized: 'react' },
9
- { pattern: /\bvue\.?js\b|\bvuejs\b/i, normalized: 'vue' },
10
- { pattern: /\bangular\b/i, normalized: 'angular' },
11
- { pattern: /\bsvelte\b/i, normalized: 'svelte' },
12
- { pattern: /\bastro\b/i, normalized: 'astro' },
13
- { pattern: /\bremix\b/i, normalized: 'remix' },
4
+ { pattern: /\bnext\.?js\b/i, normalized: technologyValue('technology-next-js-0d857f') },
5
+ { pattern: /\breact\b/i, normalized: technologyValue('technology-react-275976') },
6
+ { pattern: /\bvue\.?js\b|\bvuejs\b/i, normalized: technologyValue('technology-vue-564382') },
7
+ { pattern: /\bangular\b/i, normalized: technologyValue('technology-angular-a39f89') },
8
+ { pattern: /\bsvelte\b/i, normalized: technologyValue('technology-svelte-c190ac') },
9
+ { pattern: /\bastro\b/i, normalized: technologyValue('technology-astro-23661e') },
10
+ { pattern: /\bremix\b/i, normalized: technologyValue('technology-remix-0c5d96') },
14
11
  { pattern: /\bsolid\.?js\b|\bsolidjs\b/i, normalized: 'solid.js' },
15
12
  { pattern: /\bqwik\b/i, normalized: 'qwik' },
16
- { pattern: /\bnuxt\b/i, normalized: 'nuxt' },
13
+ { pattern: /\bnuxt\b/i, normalized: technologyValue('technology-nuxt-22c407') },
17
14
  { pattern: /\bgatsbyjs\b|\bgatsby\b/i, normalized: 'gatsby' },
18
- { pattern: /\bexpress\.?js\b|\bexpressjs\b/i, normalized: 'express' },
15
+ {
16
+ pattern: /\bexpress\.?js\b|\bexpressjs\b/i,
17
+ normalized: technologyValue('technology-express-008231'),
18
+ },
19
19
  { pattern: /\bhono\b/i, normalized: 'hono' },
20
- { pattern: /\bfastify\b/i, normalized: 'fastify' },
20
+ { pattern: /\bfastify\b/i, normalized: technologyValue('technology-fastify-cbe57e') },
21
21
  { pattern: /\bkoa\b/i, normalized: 'koa' },
22
- { pattern: /\bnestjs\b|\bnest\.js\b/i, normalized: 'nestjs' },
23
- { pattern: /\bdjango\b/i, normalized: 'django' },
24
- { pattern: /\bflask\b/i, normalized: 'flask' },
25
- { pattern: /\bfastapi\b/i, normalized: 'fastapi' },
26
- { pattern: /\brails\b|\bruby on rails\b/i, normalized: 'rails' },
27
- { pattern: /\blaravel\b/i, normalized: 'laravel' },
22
+ { pattern: /\bnestjs\b|\bnest\.js\b/i, normalized: technologyValue('technology-nestjs-2d0087') },
23
+ { pattern: /\bdjango\b/i, normalized: technologyValue('technology-django-7d8a08') },
24
+ { pattern: /\bflask\b/i, normalized: technologyValue('technology-flask-b87aa5') },
25
+ { pattern: /\bfastapi\b/i, normalized: technologyValue('technology-fastapi-6aee0e') },
26
+ {
27
+ pattern: /\brails\b|\bruby on rails\b/i,
28
+ normalized: technologyValue('technology-rails-2e1d59'),
29
+ },
30
+ { pattern: /\blaravel\b/i, normalized: technologyValue('technology-laravel-c34cfa') },
28
31
  { pattern: /\bspring boot\b|\bspringboot\b/i, normalized: 'spring' },
29
- { pattern: /\bgin\b.{0,10}\bgo\b|\bgo\b.{0,10}\bgin\b/i, normalized: 'gin' },
30
- { pattern: /\bfiber\b.{0,10}\bgo\b|\bgo\b.{0,10}\bfiber\b/i, normalized: 'fiber' },
31
- { pattern: /\btypescript\b/i, normalized: 'typescript' },
32
+ {
33
+ pattern: /\bgin\b.{0,10}\bgo\b|\bgo\b.{0,10}\bgin\b/i,
34
+ normalized: technologyValue('technology-gin-985adc'),
35
+ },
36
+ {
37
+ pattern: /\bfiber\b.{0,10}\bgo\b|\bgo\b.{0,10}\bfiber\b/i,
38
+ normalized: technologyValue('technology-fiber-77c3e6'),
39
+ },
40
+ { pattern: /\btypescript\b/i, normalized: technologyValue('technology-typescript-969545') },
32
41
  { pattern: /\bjavascript\b/i, normalized: 'javascript' },
33
42
  { pattern: /\bpython\b/i, normalized: 'python' },
34
43
  { pattern: /\bgolang\b|\bgo lang\b|\b(?:^|\s)go(?:\s|$)\b/i, normalized: 'go' },
@@ -36,28 +45,31 @@ const KNOWN_TECHS = [
36
45
  { pattern: /\bjava\b/i, normalized: 'java' },
37
46
  { pattern: /\bkotlin\b/i, normalized: 'kotlin' },
38
47
  { pattern: /\bswift\b/i, normalized: 'swift' },
39
- { pattern: /\bflutter\b/i, normalized: 'flutter' },
48
+ { pattern: /\bflutter\b/i, normalized: technologyValue('technology-flutter-be1396') },
40
49
  { pattern: /\bexpo\b/i, normalized: 'expo' },
41
50
  { pattern: /\breact native\b|\breact-native\b/i, normalized: 'react-native' },
42
51
  { pattern: /\bpostgresql\b|\bpostgres\b/i, normalized: 'postgresql' },
43
52
  { pattern: /\bmysql\b/i, normalized: 'mysql' },
44
53
  { pattern: /\bmongodb\b|\bmongo\b/i, normalized: 'mongodb' },
45
54
  { pattern: /\bsqlite\b/i, normalized: 'sqlite' },
46
- { pattern: /\bsupabase\b/i, normalized: 'supabase' },
55
+ { pattern: /\bsupabase\b/i, normalized: technologyValue('technology-supabase-4d7594') },
47
56
  { pattern: /\bfirebase\b/i, normalized: 'firebase' },
48
- { pattern: /\bprisma\b/i, normalized: 'prisma' },
49
- { pattern: /\bdrizzle\b/i, normalized: 'drizzle' },
50
- { pattern: /\btailwind\b/i, normalized: 'tailwind' },
57
+ { pattern: /\bprisma\b/i, normalized: technologyValue('technology-prisma-99497c') },
58
+ { pattern: /\bdrizzle\b/i, normalized: technologyValue('technology-drizzle-424f22') },
59
+ { pattern: /\btailwind\b/i, normalized: technologyValue('technology-tailwind-44c8cf') },
51
60
  { pattern: /\bvite\b/i, normalized: 'vite' },
52
- { pattern: /\bvitest\b/i, normalized: 'vitest' },
53
- { pattern: /\bjest\b/i, normalized: 'jest' },
54
- { pattern: /\bdocker\b/i, normalized: 'docker' },
55
- { pattern: /\bkubernetes\b|\bk8s\b/i, normalized: 'kubernetes' },
56
- { pattern: /\bstripe\b/i, normalized: 'stripe' },
57
- { pattern: /\bgraphql\b/i, normalized: 'graphql' },
58
- { pattern: /\btrpc\b/i, normalized: 'trpc' },
59
- { pattern: /\bzod\b/i, normalized: 'zod' },
60
- { pattern: /\bprisma\b/i, normalized: 'prisma' },
61
+ { pattern: /\bvitest\b/i, normalized: technologyValue('technology-vitest-a9127f') },
62
+ { pattern: /\bjest\b/i, normalized: technologyValue('technology-jest-35e99f') },
63
+ { pattern: /\bdocker\b/i, normalized: technologyValue('technology-docker-d548c5') },
64
+ {
65
+ pattern: /\bkubernetes\b|\bk8s\b/i,
66
+ normalized: technologyValue('technology-kubernetes-94abcb'),
67
+ },
68
+ { pattern: /\bstripe\b/i, normalized: technologyValue('technology-stripe-2bed20') },
69
+ { pattern: /\bgraphql\b/i, normalized: technologyValue('technology-graphql-aed31c') },
70
+ { pattern: /\btrpc\b/i, normalized: technologyValue('technology-trpc-7a75ed') },
71
+ { pattern: /\bzod\b/i, normalized: technologyValue('technology-zod-4f63cf') },
72
+ { pattern: /\bprisma\b/i, normalized: technologyValue('technology-prisma-99497c') },
61
73
  ];
62
74
  // npm package pattern: word with hyphen or scoped (@scope/pkg)
63
75
  const NPM_PACKAGE_RE = /(?:^|\s)((?:@[\w-]+\/[\w-]+|[\w][\w-]{1,}))(?=\s|$)/g;
@@ -112,33 +124,81 @@ export function detectTechsFromText(text) {
112
124
  }
113
125
  const FILE_TECH_MAP = [
114
126
  { pattern: /package\.json$/, name: 'node', confidence: 'high' },
115
- { pattern: /next\.config\.[cm]?[jt]s$/, name: 'next.js', confidence: 'high' },
127
+ {
128
+ pattern: /next\.config\.[cm]?[jt]s$/,
129
+ name: technologyValue('technology-next-js-0d857f'),
130
+ confidence: 'high',
131
+ },
116
132
  { pattern: /vite\.config\.[cm]?[jt]s$/, name: 'vite', confidence: 'high' },
117
- { pattern: /vitest\.config\.[cm]?[jt]s$/, name: 'vitest', confidence: 'high' },
118
- { pattern: /astro\.config\.[cm]?[jt]s$/, name: 'astro', confidence: 'high' },
119
- { pattern: /remix\.config\.[cm]?[jt]s$/, name: 'remix', confidence: 'high' },
120
- { pattern: /svelte\.config\.[cm]?[jt]s$/, name: 'svelte', confidence: 'high' },
121
- { pattern: /nuxt\.config\.[cm]?[jt]s$/, name: 'nuxt', confidence: 'high' },
122
- { pattern: /tailwind\.config\.[cm]?[jt]s$/, name: 'tailwind', confidence: 'high' },
123
- { pattern: /prisma\/schema\.prisma$|\.prisma$/, name: 'prisma', confidence: 'high' },
124
- { pattern: /drizzle\.config\.[cm]?[jt]s$/, name: 'drizzle', confidence: 'high' },
125
- { pattern: /Dockerfile$|docker-compose\.ya?ml$/, name: 'docker', confidence: 'high' },
133
+ {
134
+ pattern: /vitest\.config\.[cm]?[jt]s$/,
135
+ name: technologyValue('technology-vitest-a9127f'),
136
+ confidence: 'high',
137
+ },
138
+ {
139
+ pattern: /astro\.config\.[cm]?[jt]s$/,
140
+ name: technologyValue('technology-astro-23661e'),
141
+ confidence: 'high',
142
+ },
143
+ {
144
+ pattern: /remix\.config\.[cm]?[jt]s$/,
145
+ name: technologyValue('technology-remix-0c5d96'),
146
+ confidence: 'high',
147
+ },
148
+ {
149
+ pattern: /svelte\.config\.[cm]?[jt]s$/,
150
+ name: technologyValue('technology-svelte-c190ac'),
151
+ confidence: 'high',
152
+ },
153
+ {
154
+ pattern: /nuxt\.config\.[cm]?[jt]s$/,
155
+ name: technologyValue('technology-nuxt-22c407'),
156
+ confidence: 'high',
157
+ },
158
+ {
159
+ pattern: /tailwind\.config\.[cm]?[jt]s$/,
160
+ name: technologyValue('technology-tailwind-44c8cf'),
161
+ confidence: 'high',
162
+ },
163
+ {
164
+ pattern: /prisma\/schema\.prisma$|\.prisma$/,
165
+ name: technologyValue('technology-prisma-99497c'),
166
+ confidence: 'high',
167
+ },
168
+ {
169
+ pattern: /drizzle\.config\.[cm]?[jt]s$/,
170
+ name: technologyValue('technology-drizzle-424f22'),
171
+ confidence: 'high',
172
+ },
173
+ {
174
+ pattern: /Dockerfile$|docker-compose\.ya?ml$/,
175
+ name: technologyValue('technology-docker-d548c5'),
176
+ confidence: 'high',
177
+ },
126
178
  { pattern: /requirements\.txt$|setup\.py$|pyproject\.toml$/, name: 'python', confidence: 'high' },
127
179
  { pattern: /go\.mod$|go\.sum$/, name: 'go', confidence: 'high' },
128
180
  { pattern: /Cargo\.toml$|Cargo\.lock$/, name: 'rust', confidence: 'high' },
129
181
  { pattern: /pom\.xml$|build\.gradle$/, name: 'java', confidence: 'high' },
130
- { pattern: /tsconfig\.json$/, name: 'typescript', confidence: 'high' },
131
- { pattern: /\.tsx?$/, name: 'typescript', confidence: 'medium' },
132
- { pattern: /\.vue$/, name: 'vue', confidence: 'high' },
133
- { pattern: /\.svelte$/, name: 'svelte', confidence: 'high' },
134
- { pattern: /\.tsx$/, name: 'react', confidence: 'medium' },
135
- { pattern: /\.jsx$/, name: 'react', confidence: 'medium' },
182
+ {
183
+ pattern: /tsconfig\.json$/,
184
+ name: technologyValue('technology-typescript-969545'),
185
+ confidence: 'high',
186
+ },
187
+ {
188
+ pattern: /\.tsx?$/,
189
+ name: technologyValue('technology-typescript-969545'),
190
+ confidence: 'medium',
191
+ },
192
+ { pattern: /\.vue$/, name: technologyValue('technology-vue-564382'), confidence: 'high' },
193
+ { pattern: /\.svelte$/, name: technologyValue('technology-svelte-c190ac'), confidence: 'high' },
194
+ { pattern: /\.tsx$/, name: technologyValue('technology-react-275976'), confidence: 'medium' },
195
+ { pattern: /\.jsx$/, name: technologyValue('technology-react-275976'), confidence: 'medium' },
136
196
  { pattern: /\.py$/, name: 'python', confidence: 'medium' },
137
197
  { pattern: /\.go$/, name: 'go', confidence: 'medium' },
138
198
  { pattern: /\.rs$/, name: 'rust', confidence: 'medium' },
139
199
  { pattern: /\.kt$/, name: 'kotlin', confidence: 'medium' },
140
200
  { pattern: /\.swift$/, name: 'swift', confidence: 'medium' },
141
- { pattern: /\.dart$/, name: 'flutter', confidence: 'medium' },
201
+ { pattern: /\.dart$/, name: technologyValue('technology-flutter-be1396'), confidence: 'medium' },
142
202
  ];
143
203
  export function detectTechsFromFiles(fileList) {
144
204
  const found = new Map();
@@ -3,15 +3,16 @@ import { getProjects, addProject } from '../storage/global-projects-store.js';
3
3
  import { specStore } from '../storage/index.js';
4
4
  import { hashProjectPath, readJson } from '../storage/base-store.js';
5
5
  import { glob } from 'glob';
6
+ import { resolveStorageLayout } from '../storage/storage-layout.js';
6
7
  // ---------------------------------------------------------------------------
7
8
  // SPEC-789: Project discovery fallback
8
9
  // ---------------------------------------------------------------------------
9
10
  /**
10
11
  * Resolve the data/projects base directory.
11
- * Uses PLANU_PROJECTS_DIR env var for testability, falls back to `data/projects`.
12
+ * Uses the canonical platform storage layout and never depends on CWD.
12
13
  */
13
14
  function projectsBaseDir() {
14
- return process.env.PLANU_PROJECTS_DIR ?? 'data/projects';
15
+ return resolveStorageLayout().projects;
15
16
  }
16
17
  /**
17
18
  * Walk `data/projects/{hash}/knowledge.json` to discover project paths that
@@ -0,0 +1,3 @@
1
+ export declare function reportClassifiedDegradation(code: string, error: unknown): void;
2
+ export declare function redactFailureMessage(error: unknown): string;
3
+ //# sourceMappingURL=classified-degradation.d.ts.map
@@ -0,0 +1,10 @@
1
+ import { redactText } from '../security/redactor.js';
2
+ import { emitClassifiedDegradation } from './degradation-sink.js';
3
+ export function reportClassifiedDegradation(code, error) {
4
+ emitClassifiedDegradation(code, redactFailureMessage(error));
5
+ }
6
+ export function redactFailureMessage(error) {
7
+ const message = error instanceof Error ? error.message : String(error);
8
+ return redactText(message).slice(0, 300);
9
+ }
10
+ //# sourceMappingURL=classified-degradation.js.map
@@ -0,0 +1,3 @@
1
+ /** Leaf logging boundary. Callers must pass only already-redacted detail. */
2
+ export declare function emitClassifiedDegradation(code: string, error: string): void;
3
+ //# sourceMappingURL=degradation-sink.d.ts.map
@@ -0,0 +1,5 @@
1
+ /** Leaf logging boundary. Callers must pass only already-redacted detail. */
2
+ export function emitClassifiedDegradation(code, error) {
3
+ console.warn('[planu:degraded]', { code, error });
4
+ }
5
+ //# sourceMappingURL=degradation-sink.js.map
@@ -0,0 +1,12 @@
1
+ export declare const BOUNDARY_FAILURE_KINDS: readonly ['NotFound', 'Corrupt', 'IncompatibleVersion', 'PermissionDenied', 'ResourceExhausted', 'Conflict', 'Cancelled', 'DeadlineExceeded', 'DependencyUnavailable', 'Internal'];
2
+ /** Typed, redacted failure safe to return across a process or tool boundary. */
3
+ export declare class BoundaryFailure extends Error {
4
+ readonly kind: (typeof BOUNDARY_FAILURE_KINDS)[number];
5
+ readonly operation: string;
6
+ readonly remediation: string;
7
+ readonly retryable: boolean;
8
+ constructor(kind: (typeof BOUNDARY_FAILURE_KINDS)[number], operation: string, remediation: string, cause?: BoundaryFailure);
9
+ }
10
+ export declare function classifyBoundaryFailure(error: unknown, operation: string, remediation?: string): BoundaryFailure;
11
+ export declare function isBoundaryFailure(value: unknown): value is BoundaryFailure;
12
+ //# sourceMappingURL=error-taxonomy.d.ts.map
@@ -0,0 +1,62 @@
1
+ import { redactText } from '../security/redactor.js';
2
+ export const BOUNDARY_FAILURE_KINDS = [
3
+ 'NotFound',
4
+ 'Corrupt',
5
+ 'IncompatibleVersion',
6
+ 'PermissionDenied',
7
+ 'ResourceExhausted',
8
+ 'Conflict',
9
+ 'Cancelled',
10
+ 'DeadlineExceeded',
11
+ 'DependencyUnavailable',
12
+ 'Internal',
13
+ ];
14
+ const RETRYABLE_KINDS = new Set([
15
+ 'Conflict',
16
+ 'ResourceExhausted',
17
+ 'DependencyUnavailable',
18
+ ]);
19
+ const NODE_ERROR_CLASSIFICATION = {
20
+ ENOENT: 'NotFound',
21
+ EACCES: 'PermissionDenied',
22
+ EPERM: 'PermissionDenied',
23
+ ENOSPC: 'ResourceExhausted',
24
+ EDQUOT: 'ResourceExhausted',
25
+ EEXIST: 'Conflict',
26
+ EBUSY: 'Conflict',
27
+ ECANCELED: 'Cancelled',
28
+ ABORT_ERR: 'Cancelled',
29
+ ETIMEDOUT: 'DeadlineExceeded',
30
+ ECONNREFUSED: 'DependencyUnavailable',
31
+ ECONNRESET: 'DependencyUnavailable',
32
+ ENETUNREACH: 'DependencyUnavailable',
33
+ };
34
+ /** Typed, redacted failure safe to return across a process or tool boundary. */
35
+ export class BoundaryFailure extends Error {
36
+ kind;
37
+ operation;
38
+ remediation;
39
+ retryable;
40
+ constructor(kind, operation, remediation, cause) {
41
+ const safeOperation = redactText(operation).slice(0, 160);
42
+ const safeRemediation = redactText(remediation).slice(0, 512);
43
+ super(`[Planu] ${safeOperation} failed (${kind}). ${safeRemediation}`, cause === undefined ? undefined : { cause });
44
+ this.kind = kind;
45
+ this.operation = operation;
46
+ this.remediation = remediation;
47
+ this.name = 'BoundaryFailure';
48
+ this.retryable = RETRYABLE_KINDS.has(kind);
49
+ }
50
+ }
51
+ export function classifyBoundaryFailure(error, operation, remediation = 'Retry only after the reported condition has been resolved.') {
52
+ if (error instanceof BoundaryFailure) {
53
+ return error;
54
+ }
55
+ const code = error !== null && typeof error === 'object' && 'code' in error ? String(error.code) : undefined;
56
+ const kind = code === undefined ? 'Internal' : (NODE_ERROR_CLASSIFICATION[code] ?? 'Internal');
57
+ return new BoundaryFailure(kind, operation, remediation);
58
+ }
59
+ export function isBoundaryFailure(value) {
60
+ return value instanceof BoundaryFailure;
61
+ }
62
+ //# sourceMappingURL=error-taxonomy.js.map
@@ -87,7 +87,7 @@ function buildExecuteSddFlowPrompt(specId, projectPath, mode) {
87
87
  const branchStep = mode !== 'implement-only'
88
88
  ? '4. Create a feature branch: `git checkout -b feat/' + specId + '-<slug>`.'
89
89
  : '4. Implement in the current branch (implement-only mode).';
90
- const prStep = mode !== 'implement-only' ? '10. Open a PR with `create_pr_from_spec`.' : '';
90
+ const prStep = mode !== 'implement-only' ? '12. Open a PR with `create_pr_from_spec`.' : '';
91
91
  return [
92
92
  `You are implementing Planu spec \`${specId}\`${pathHint}${modeHint} using the full SDD flow.`,
93
93
  '',
@@ -101,11 +101,17 @@ function buildExecuteSddFlowPrompt(specId, projectPath, mode) {
101
101
  '5. Implement all source files following Clean Architecture: types → engine → storage → tools.',
102
102
  '6. Write tests mirroring `src/` structure in `tests/`. Coverage ≥ 95% on new files.',
103
103
  '7. Run `pnpm typecheck && pnpm lint && pnpm test:coverage` — fix all failures.',
104
- '8. Call `validate({ specId: "' + specId + '" })` — fix any failing criteria.',
105
- '9. Call `update_status({ specId: "' + specId + '", status: "done" })` when all criteria pass.',
104
+ '8. Call `validate({ specId: "' +
105
+ specId +
106
+ '" })` and capture the durable acknowledgement fields: `operationId`, `projectId`, `workspaceId`, and `cursor`.',
107
+ '9. Call `watch_job` with those identifiers and the latest cursor. Repeat while the job is non-terminal; do not treat an accepted or running job as a validation result.',
108
+ '10. Require terminal state `completed`, then inspect `job.result.structuredContent`. If the job is failed, dead-letter, or cancelled, stop and report it. Fix every failing criterion and submit a new validation job when needed.',
109
+ '11. Call `update_status({ specId: "' +
110
+ specId +
111
+ '", status: "done" })` only after the completed result reports `ready: true`, `status: "passing"`, and passing quality gates.',
106
112
  prStep,
107
113
  '',
108
- 'Never mark done until ALL acceptance criteria pass `validate`.',
114
+ 'Never mark done from the validate acknowledgement. Mark done only after a completed durable job result confirms that ALL acceptance criteria and quality gates pass.',
109
115
  ]
110
116
  .filter(Boolean)
111
117
  .join('\n');
@@ -3,6 +3,8 @@
3
3
  // Resources are materialized on-demand (no streaming, no TTL cache — data is small JSON).
4
4
  import { readFile } from 'node:fs/promises';
5
5
  import { glob } from 'glob';
6
+ import { resolveStorageLayout } from '../../../storage/storage-layout.js';
7
+ import { join } from 'node:path';
6
8
  /** Planu-namespaced resource URIs exposed by SPEC-588. */
7
9
  export const PLANU_UX_RESOURCE_URIS = {
8
10
  specList: 'planu://ux/specs',
@@ -56,7 +58,7 @@ function safeStr(value) {
56
58
  async function loadAllSpecEntries() {
57
59
  const specs = [];
58
60
  try {
59
- const files = await glob('data/projects/*/specs.json');
61
+ const files = await glob(join(resolveStorageLayout().projects, '*', 'specs.json'));
60
62
  for (const file of files) {
61
63
  try {
62
64
  const raw = await readFile(file, 'utf-8');
@@ -103,7 +105,7 @@ async function buildProgressContent() {
103
105
  }
104
106
  async function buildConstitutionContent() {
105
107
  try {
106
- const files = await glob('data/projects/*/constitution.json');
108
+ const files = await glob(join(resolveStorageLayout().projects, '*', 'constitution.json'));
107
109
  if (files.length > 0 && files[0]) {
108
110
  const raw = await readFile(files[0], 'utf-8');
109
111
  const parsed = JSON.parse(raw);
@@ -13,6 +13,7 @@ import { join } from 'node:path';
13
13
  import { detectCodexWorkspace } from './workspace-scope.js';
14
14
  import { buildRulesForHost } from '../../engine/host-rules-templates/index.js';
15
15
  import { assertEnglishOnlyArtifactText } from '../../engine/spec-language/english-only.js';
16
+ import { PLANU_VERSION } from '../../config/version.js';
16
17
  import { generateImplementerRole, generateReviewerRole, generateSpecWriterRole, } from '../../engine/ai-integration/codex/agent-roles-generator.js';
17
18
  const CODEX_CONFIG_TOML = `# .openai/config.toml — Planu Codex workspace configuration
18
19
  # Auto-generated by Planu init_project. Safe to customize.
@@ -25,7 +26,7 @@ const CODEX_CONFIG_TOML = `# .openai/config.toml — Planu Codex workspace confi
25
26
  name = "planu"
26
27
  transport = "stdio"
27
28
  command = "npx"
28
- args = ["@planu/cli@latest"]
29
+ args = ["@planu/cli@__PLANU_VERSION__"]
29
30
  startup_timeout_sec = 120
30
31
 
31
32
  [workspace]
@@ -60,7 +61,7 @@ MCP server registered in .openai/config.toml.
60
61
  * `<!-- planu:rules:start -->` markers is replaced on subsequent runs.
61
62
  * Safe to call on non-Codex environments — skips silently unless markers are present.
62
63
  */
63
- export async function scaffoldCodexConfig(projectPath, planuVersion = '1.96.0') {
64
+ export async function scaffoldCodexConfig(projectPath, planuVersion = PLANU_VERSION) {
64
65
  const markers = detectCodexWorkspace(projectPath);
65
66
  const isCodexEnv = markers.hasWorkspaceEnv || markers.hasCodexEnv || markers.isEnterprise;
66
67
  // Only scaffold if Codex env markers are present, or if .openai/ already exists
@@ -69,7 +70,7 @@ export async function scaffoldCodexConfig(projectPath, planuVersion = '1.96.0')
69
70
  }
70
71
  const openaiDir = join(projectPath, '.openai');
71
72
  await mkdir(openaiDir, { recursive: true });
72
- await writeIfMissing(join(openaiDir, 'config.toml'), CODEX_CONFIG_TOML);
73
+ await writeIfMissing(join(openaiDir, 'config.toml'), CODEX_CONFIG_TOML.replace('__PLANU_VERSION__', planuVersion));
73
74
  await writeIfMissing(join(projectPath, 'AGENTS.md'), AGENTS_MD_CONTENT);
74
75
  await scaffoldCodexAgentRoles(projectPath);
75
76
  await injectRulesBlock(join(projectPath, 'AGENTS.md'), planuVersion);
@@ -6,6 +6,7 @@ import { writeFile, readFile, mkdir, access } from 'node:fs/promises';
6
6
  import { join } from 'node:path';
7
7
  import { buildRulesForHost } from '../../engine/host-rules-templates/index.js';
8
8
  import { assertEnglishOnlyArtifactText } from '../../engine/spec-language/english-only.js';
9
+ import { PLANU_VERSION } from '../../config/version.js';
9
10
  // ---------------------------------------------------------------------------
10
11
  // File content generators
11
12
  // ---------------------------------------------------------------------------
@@ -125,7 +126,7 @@ function buildPostToolHookSh() {
125
126
  * Called by init_project when a Gemini workspace is detected.
126
127
  * Integration hook for handler.ts: see REPORT at end of implementation.
127
128
  */
128
- export async function scaffoldGeminiConfig(projectPath, planuVersion = '1.96.0') {
129
+ export async function scaffoldGeminiConfig(projectPath, planuVersion = PLANU_VERSION) {
129
130
  const filesCreated = [];
130
131
  const filesSkipped = [];
131
132
  const filesToWrite = [
@@ -1,6 +1,4 @@
1
- // hosts/gemini/multimodal-spec-flow.ts Multimodal-first spec creation pipeline (SPEC-591)
2
- // When Gemini provides an image attachment with a create_spec request,
3
- // automatically chains inject_component_context + figma-tokens extraction.
1
+ import { technologyValue } from '../../engine/technology-registry.js';
4
2
  /** Image MIME types that trigger the multimodal spec pipeline */
5
3
  const IMAGE_MIME_TYPES = new Set([
6
4
  'image/png',
@@ -13,7 +11,12 @@ const IMAGE_MIME_TYPES = new Set([
13
11
  /** PDF MIME type */
14
12
  const PDF_MIME_TYPE = 'application/pdf';
15
13
  /** Figma export tokens detection heuristic — filename or metadata hint */
16
- const FIGMA_TOKEN_HINTS = ['figma', 'design-tokens', 'tokens.json', 'variables.json'];
14
+ const FIGMA_TOKEN_HINTS = [
15
+ technologyValue('technology-figma-5b79d0'),
16
+ 'design-tokens',
17
+ 'tokens.json',
18
+ 'variables.json',
19
+ ];
17
20
  /**
18
21
  * Analyse Gemini's multimodal content parts to determine input shape.
19
22
  * Does not perform I/O — purely inspects the attachment metadata.
package/dist/index.js CHANGED
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  // index.ts — Planu SDD MCP Server entry point.
3
3
  // Creates the MCP server, registers tools & resources, and starts stdio transport.
4
+ import { installNetworkPolicy } from './engine/network-policy.js';
5
+ installNetworkPolicy();
4
6
  // CLI detection — intercept known commands before MCP server setup (SPEC-124)
5
7
  const KNOWN_COMMANDS = [
6
8
  'init',
@@ -23,6 +25,9 @@ const KNOWN_COMMANDS = [
23
25
  'spec',
24
26
  'health',
25
27
  'release',
28
+ 'storage',
29
+ 'inspect',
30
+ 'offline',
26
31
  'help',
27
32
  'version',
28
33
  ];
@@ -32,14 +37,16 @@ if (firstArg && KNOWN_COMMANDS.includes(firstArg)) {
32
37
  await route(process.argv.slice(2));
33
38
  process.exit(0);
34
39
  }
35
- // Minimal static imports only what createMcpServer() needs at module load time.
40
+ // Import the runtime only after the process-wide network policy is installed.
36
41
  // The official tool surface is registered in main() before transport connection
37
42
  // so the first MCP tools/list response is complete for hosts that ignore
38
43
  // notifications/tools/list_changed.
39
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
40
- import { SERVER_INSTRUCTIONS } from './config/server-instructions.js';
41
- import { PLANU_VERSION } from './config/version.js';
42
- import { withToolTracking, getRegisteredTools } from './tools/tool-registry.js';
44
+ const [{ McpServer }, { SERVER_INSTRUCTIONS }, { PLANU_VERSION }, { withToolTracking, getRegisteredTools },] = await Promise.all([
45
+ import('@modelcontextprotocol/sdk/server/mcp.js'),
46
+ import('./config/server-instructions.js'),
47
+ import('./config/version.js'),
48
+ import('./tools/tool-registry.js'),
49
+ ]);
43
50
  function createMcpServer() {
44
51
  const s = withToolTracking(new McpServer({ name: 'planu', version: PLANU_VERSION }, {
45
52
  instructions: SERVER_INSTRUCTIONS,
@@ -65,18 +72,23 @@ function scheduleStartupStateRecovery(startupSync, recoverPendingPostCommitTasks
65
72
  .then(() => recoverPendingPostCommitTasksAtStartup().catch((err) => {
66
73
  console.error('[Planu] Startup post-commit recovery failed:', err);
67
74
  }));
75
+ void import('./engine/execution/validate-job-executor.js').then(({ recoverValidateJobsAtStartup }) => {
76
+ recoverValidateJobsAtStartup();
77
+ });
68
78
  }
69
79
  // Loads post-handshake modules after the MCP handshake has completed.
70
80
  // Separated from main() to keep main() within the 80-line function budget.
81
+ // eslint-disable-next-line max-lines-per-function -- startup dependency orchestration
71
82
  async function setupPostHandshake(handshakeGate, officialToolNames) {
72
83
  // Wait for initialize + notifications/initialized before firing any notifications.
73
84
  await handshakeGate;
74
85
  const envKey = process.env.SDD_LICENSE_KEY;
75
- const [{ bootstrapAutopilotHandlers }, { registerAgentSquadHandlers }, { startupSync }, { recoverPendingPostCommitTasksAtStartup }, { checkForUpdates }, { setConnectedClient }, { handleActivateLicense }, { GroupManager }, { setGroupManager },] = await Promise.all([
86
+ const [{ bootstrapAutopilotHandlers }, { registerAgentSquadHandlers }, { startupSync }, { recoverPendingPostCommitTasksAtStartup }, { startSpecCreatedOutboxConsumer }, { checkForUpdates }, { setConnectedClient }, { handleActivateLicense }, { GroupManager }, { setGroupManager },] = await Promise.all([
76
87
  import('./engine/autopilot/bootstrap.js'),
77
88
  import('./tools/register-agent-squad-tools.js'),
78
89
  import('./tools/sync-spec-state-handler.js'),
79
90
  import('./tools/update-status/index.js'),
91
+ import('./tools/create-spec/spec-created-outbox-consumer.js'),
80
92
  import('./engine/update-notifier.js'),
81
93
  import('./engine/llm-runtime/index.js'),
82
94
  import('./tools/activate-license.js'),
@@ -115,6 +127,9 @@ async function setupPostHandshake(handshakeGate, officialToolNames) {
115
127
  })();
116
128
  // SPEC-334: Sync planu/ YAML frontmatter status → data/ store (non-blocking)
117
129
  scheduleStartupStateRecovery(startupSync, recoverPendingPostCommitTasksAtStartup);
130
+ await startSpecCreatedOutboxConsumer().catch((err) => {
131
+ console.error('[Planu] Startup spec.created outbox recovery failed:', err);
132
+ });
118
133
  // Auto-activate license from environment variable if present.
119
134
  if (envKey) {
120
135
  const { licenseStore: ls } = await import('./storage/index.js');
@@ -3,6 +3,8 @@
3
3
  import { readFile } from 'node:fs/promises';
4
4
  import { glob } from 'glob';
5
5
  import { t } from '../i18n/index.js';
6
+ import { resolveStorageLayout } from '../storage/storage-layout.js';
7
+ import { join } from 'node:path';
6
8
  /**
7
9
  * Scan the data/projects/ directory for pattern JSON files.
8
10
  * Patterns are stored in data/projects/{projectId}/patterns.json
@@ -10,7 +12,7 @@ import { t } from '../i18n/index.js';
10
12
  async function loadAllPatterns() {
11
13
  const allPatterns = [];
12
14
  try {
13
- const patternFiles = await glob('data/projects/*/patterns.json');
15
+ const patternFiles = await glob(join(resolveStorageLayout().projects, '*', 'patterns.json'));
14
16
  for (const file of patternFiles) {
15
17
  try {
16
18
  const raw = await readFile(file, 'utf-8');
@@ -4,6 +4,8 @@
4
4
  import { readFile } from 'node:fs/promises';
5
5
  import { glob } from 'glob';
6
6
  import { t } from '../i18n/index.js';
7
+ import { resolveStorageLayout } from '../storage/storage-layout.js';
8
+ import { join } from 'node:path';
7
9
  /**
8
10
  * Scan the data/projects/ directory for all specs.json files and return them.
9
11
  * Each project stores ALL specs in a single data/projects/{projectId}/specs.json as an array.
@@ -11,7 +13,7 @@ import { t } from '../i18n/index.js';
11
13
  async function loadAllSpecs() {
12
14
  const specs = [];
13
15
  try {
14
- const specFiles = await glob('data/projects/*/specs.json');
16
+ const specFiles = await glob(join(resolveStorageLayout().projects, '*', 'specs.json'));
15
17
  for (const file of specFiles) {
16
18
  try {
17
19
  const raw = await readFile(file, 'utf-8');
@@ -3,6 +3,8 @@
3
3
  import { readFile } from 'node:fs/promises';
4
4
  import { glob } from 'glob';
5
5
  import { t } from '../i18n/index.js';
6
+ import { globalDataDir } from '../storage/base-store.js';
7
+ import { join } from 'node:path';
6
8
  /**
7
9
  * Load built-in templates. These are the default SDD spec types.
8
10
  */
@@ -87,7 +89,7 @@ function getBuiltInTemplates() {
87
89
  async function loadCustomTemplates() {
88
90
  const templates = [];
89
91
  try {
90
- const files = await glob('data/global/templates/*.json');
92
+ const files = await glob(join(globalDataDir(), 'templates', '*.json'));
91
93
  for (const file of files) {
92
94
  try {
93
95
  const raw = await readFile(file, 'utf-8');
@@ -0,0 +1,12 @@
1
+ import type { SecretStoreAdapter } from '../../types/security.js';
2
+ /** Explicit, read-only adapter. IDs must be mapped to named process environment variables. */
3
+ export declare class EnvironmentSecretAdapter implements SecretStoreAdapter {
4
+ private readonly variables;
5
+ private readonly env;
6
+ readonly kind: 'environment';
7
+ constructor(variables: Readonly<Record<string, string>>, env?: NodeJS.ProcessEnv);
8
+ get(id: string): Promise<string | null>;
9
+ set(_id: string, _value: string): Promise<void>;
10
+ delete(_id: string): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=environment.d.ts.map