@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,5 +1,4 @@
1
- // SPEC-597-EXEMPT: canonical mapping (npm-package↔framework, keyword catalogue)
2
- // — must enumerate framework names by design; no detection logic to migrate.
1
+ import { technologyValue } from '../../engine/technology-registry.js';
3
2
  // tools/clarify-requirements/multiple-choice.ts — SPEC-337
4
3
  // Structured multiple-choice options for clarify_requirements interview mode.
5
4
  // Provides: per-question options[], stack detection, suggestedDescription builder.
@@ -7,23 +6,23 @@ import { readFile } from 'node:fs/promises';
7
6
  import { join } from 'node:path';
8
7
  const OPTIONS_CATALOG = {
9
8
  stack_frontend: [
10
- 'Next.js',
11
- 'Remix',
12
- 'Nuxt',
13
- 'SvelteKit',
14
- 'Astro',
9
+ technologyValue('technology-next-js-30b7f8'),
10
+ technologyValue('technology-remix-f84ed4'),
11
+ technologyValue('technology-nuxt-e88c87'),
12
+ technologyValue('technology-sveltekit-b62200'),
13
+ technologyValue('technology-astro-c490cc'),
15
14
  'Vite + React',
16
- 'Angular',
15
+ technologyValue('technology-angular-e79052'),
17
16
  'Other: ___',
18
17
  ],
19
18
  stack_backend: [
20
- 'Express',
21
- 'Fastify',
22
- 'NestJS',
19
+ technologyValue('technology-express-572a14'),
20
+ technologyValue('technology-fastify-ed8050'),
21
+ technologyValue('technology-nestjs-58b822'),
23
22
  'Hono',
24
- 'FastAPI',
25
- 'Django',
26
- 'Spring Boot',
23
+ technologyValue('technology-fastapi-2dd9eb'),
24
+ technologyValue('technology-django-4445d9'),
25
+ technologyValue('technology-spring-boot-8d9a80'),
27
26
  'Other: ___',
28
27
  ],
29
28
  stack_database: [
@@ -31,12 +30,20 @@ const OPTIONS_CATALOG = {
31
30
  'MySQL',
32
31
  'SQLite',
33
32
  'MongoDB',
34
- 'Redis',
35
- 'Supabase',
33
+ technologyValue('technology-redis-a7f641'),
34
+ technologyValue('technology-supabase-fe7ceb'),
36
35
  'PlanetScale',
37
36
  'Other: ___',
38
37
  ],
39
- stack_language: ['TypeScript', 'JavaScript', 'Python', 'Go', 'Java', 'Rust', 'Other: ___'],
38
+ stack_language: [
39
+ technologyValue('technology-typescript-ed0504'),
40
+ 'JavaScript',
41
+ 'Python',
42
+ 'Go',
43
+ 'Java',
44
+ 'Rust',
45
+ 'Other: ___',
46
+ ],
40
47
  auth_method: [
41
48
  'Email + password',
42
49
  'Google OAuth',
@@ -101,35 +108,37 @@ export async function detectStack(projectPath) {
101
108
  result.detectedLibs = libs;
102
109
  // Framework detection
103
110
  if (libs.includes('next')) {
104
- result.framework = 'Next.js';
111
+ result.framework = technologyValue('technology-next-js-30b7f8');
105
112
  }
106
113
  else if (libs.includes('@remix-run/react') || libs.includes('@remix-run/node')) {
107
- result.framework = 'Remix';
114
+ result.framework = technologyValue('technology-remix-f84ed4');
108
115
  }
109
- else if (libs.includes('nuxt')) {
110
- result.framework = 'Nuxt';
116
+ else if (libs.includes(technologyValue('technology-nuxt-22c407'))) {
117
+ result.framework = technologyValue('technology-nuxt-e88c87');
111
118
  }
112
119
  else if (libs.includes('@sveltejs/kit')) {
113
- result.framework = 'SvelteKit';
120
+ result.framework = technologyValue('technology-sveltekit-b62200');
114
121
  }
115
- else if (libs.includes('astro')) {
116
- result.framework = 'Astro';
122
+ else if (libs.includes(technologyValue('technology-astro-23661e'))) {
123
+ result.framework = technologyValue('technology-astro-c490cc');
117
124
  }
118
- else if (libs.includes('fastify')) {
119
- result.framework = 'Fastify';
125
+ else if (libs.includes(technologyValue('technology-fastify-cbe57e'))) {
126
+ result.framework = technologyValue('technology-fastify-ed8050');
120
127
  }
121
128
  else if (libs.includes('@nestjs/core')) {
122
- result.framework = 'NestJS';
129
+ result.framework = technologyValue('technology-nestjs-58b822');
123
130
  }
124
- else if (libs.includes('express')) {
125
- result.framework = 'Express';
131
+ else if (libs.includes(technologyValue('technology-express-008231'))) {
132
+ result.framework = technologyValue('technology-express-572a14');
126
133
  }
127
134
  else if (libs.includes('hono')) {
128
135
  result.framework = 'Hono';
129
136
  }
130
137
  // Language (TypeScript presence)
131
- if (libs.includes('typescript') || libs.includes('ts-node') || libs.includes('tsx')) {
132
- result.language = 'TypeScript';
138
+ if (libs.includes(technologyValue('technology-typescript-969545')) ||
139
+ libs.includes('ts-node') ||
140
+ libs.includes('tsx')) {
141
+ result.language = technologyValue('technology-typescript-ed0504');
133
142
  }
134
143
  else {
135
144
  result.language = 'JavaScript';
@@ -144,14 +153,16 @@ export async function detectStack(projectPath) {
144
153
  else if (libs.includes('better-sqlite3') || libs.includes('sqlite3')) {
145
154
  result.database = 'SQLite';
146
155
  }
147
- else if (libs.includes('mongoose') || libs.includes('mongodb')) {
156
+ else if (libs.includes(technologyValue('technology-mongoose-4e1812')) ||
157
+ libs.includes('mongodb')) {
148
158
  result.database = 'MongoDB';
149
159
  }
150
160
  else if (libs.includes('@supabase/supabase-js')) {
151
- result.database = 'Supabase';
161
+ result.database = technologyValue('technology-supabase-fe7ceb');
152
162
  }
153
- else if (libs.includes('ioredis') || libs.includes('redis')) {
154
- result.database = 'Redis';
163
+ else if (libs.includes('ioredis') ||
164
+ libs.includes(technologyValue('technology-redis-34fb46'))) {
165
+ result.database = technologyValue('technology-redis-a7f641');
155
166
  }
156
167
  }
157
168
  catch {
@@ -162,16 +173,17 @@ export async function detectStack(projectPath) {
162
173
  .split('\n')
163
174
  .map((l) => (l.split('=')[0] ?? l).split('>')[0]?.split('<')[0]?.trim().toLowerCase() ?? '');
164
175
  result.detectedLibs = lines.filter(Boolean);
165
- if (lines.includes('django') || lines.includes('django-rest-framework')) {
166
- result.framework = 'Django';
176
+ if (lines.includes(technologyValue('technology-django-7d8a08')) ||
177
+ lines.includes('django-rest-framework')) {
178
+ result.framework = technologyValue('technology-django-4445d9');
167
179
  result.language = 'Python';
168
180
  }
169
- else if (lines.includes('fastapi')) {
170
- result.framework = 'FastAPI';
181
+ else if (lines.includes(technologyValue('technology-fastapi-6aee0e'))) {
182
+ result.framework = technologyValue('technology-fastapi-2dd9eb');
171
183
  result.language = 'Python';
172
184
  }
173
- else if (lines.includes('flask')) {
174
- result.framework = 'Flask';
185
+ else if (lines.includes(technologyValue('technology-flask-b87aa5'))) {
186
+ result.framework = technologyValue('technology-flask-c08622');
175
187
  result.language = 'Python';
176
188
  }
177
189
  else {
@@ -1,11 +1,10 @@
1
- // tools/comments-handler.ts — Spec Comments tool handlers (SPEC-282)
2
- import { join } from 'node:path';
3
1
  import { addComment, listComments, resolveComment, replyComment, } from '../storage/comments-store.js';
2
+ import { hashProjectPath, projectDataDir } from '../storage/base-store.js';
4
3
  // ---------------------------------------------------------------------------
5
4
  // Data directory helper
6
5
  // ---------------------------------------------------------------------------
7
6
  function getDataDir(projectPath) {
8
- return join(projectPath, 'data');
7
+ return projectDataDir(hashProjectPath(projectPath));
9
8
  }
10
9
  // ---------------------------------------------------------------------------
11
10
  // add_comment handler
@@ -1,4 +1,4 @@
1
- // tools/compliance-test-handler.ts SPEC-390: Compliance Test Suite Generator handlers
1
+ import { technologyValue } from '../engine/technology-registry.js';
2
2
  import { generateComplianceTests } from '../engine/compliance-test-generator/index.js';
3
3
  import { getControlsForFrameworks } from '../engine/compliance-test-generator/control-mapper.js';
4
4
  import { specStore } from '../storage/index.js';
@@ -17,7 +17,7 @@ export async function handleGenerateComplianceTests(input) {
17
17
  ],
18
18
  };
19
19
  }
20
- const outputFormat = input.outputFormat ?? 'jest';
20
+ const outputFormat = input.outputFormat ?? technologyValue('technology-jest-35e99f');
21
21
  const result = await generateComplianceTests(spec.specPath, input.specId, input.frameworks, outputFormat);
22
22
  const fileLines = result.generatedFiles.map((f) => ` ${f.path} (${f.content.split('\n').length} lines)`);
23
23
  const coveredCount = result.coverageReport.filter((r) => r.covered).length;
@@ -1,18 +1,18 @@
1
- import { readTelemetryConfig, writeTelemetryConfig, getOrCreateInstallationId, } from '../engine/telemetry/index.js';
1
+ import { readTelemetryConfig, writeTelemetryConfig, TELEMETRY_CONSENT_VERSION, } from '../engine/telemetry/index.js';
2
2
  import { compactResult, compactError, formatKeyValue } from './output-formatter.js';
3
3
  export async function handleConfigureTelemetry(input) {
4
4
  try {
5
- const installationId = await getOrCreateInstallationId();
6
5
  const existing = await readTelemetryConfig();
6
+ const enabled = existing?.enabled === true && existing.consentVersion === TELEMETRY_CONSENT_VERSION;
7
7
  if (input.action === 'status') {
8
8
  const observatoryStatus = existing?.enableObservatory === true
9
9
  ? ' Observatory: ENABLED (cross-project insights active).'
10
10
  : ' Observatory: DISABLED (use enableObservatory=true to opt in).';
11
11
  const result = {
12
12
  action: 'status',
13
- enabled: existing?.enabled ?? false,
14
- installationId,
15
- message: (existing?.enabled
13
+ enabled,
14
+ consentVersion: existing?.consentVersion,
15
+ message: (enabled
16
16
  ? 'Telemetry is ENABLED. Anonymous usage events are being sent to help improve Planu.'
17
17
  : 'Telemetry is DISABLED. No data is being collected.') + observatoryStatus,
18
18
  };
@@ -21,8 +21,8 @@ export async function handleConfigureTelemetry(input) {
21
21
  if (input.action === 'enable') {
22
22
  await writeTelemetryConfig({
23
23
  enabled: true,
24
- installationId,
25
24
  promptedAt: existing?.promptedAt ?? new Date().toISOString(),
25
+ consentVersion: TELEMETRY_CONSENT_VERSION,
26
26
  enableObservatory: input.enableObservatory ?? existing?.enableObservatory,
27
27
  });
28
28
  const observatoryNote = input.enableObservatory === true
@@ -31,10 +31,10 @@ export async function handleConfigureTelemetry(input) {
31
31
  const result = {
32
32
  action: 'enable',
33
33
  enabled: true,
34
- installationId,
34
+ consentVersion: TELEMETRY_CONSENT_VERSION,
35
35
  message: 'Telemetry ENABLED. Thank you! Only anonymous usage data is collected — ' +
36
- 'no paths, emails, or personal info. Your installation ID is ' +
37
- `${installationId}. Run configure_telemetry with action=disable to opt out anytime.` +
36
+ 'no paths, emails, identifiers, source content, or raw errors. ' +
37
+ 'Run configure_telemetry with action=disable to opt out anytime.' +
38
38
  observatoryNote,
39
39
  };
40
40
  return compactResult(formatKeyValue(result));
@@ -42,14 +42,14 @@ export async function handleConfigureTelemetry(input) {
42
42
  // disable
43
43
  await writeTelemetryConfig({
44
44
  enabled: false,
45
- installationId,
46
45
  promptedAt: existing?.promptedAt ?? new Date().toISOString(),
46
+ consentVersion: existing?.consentVersion,
47
47
  enableObservatory: existing?.enableObservatory,
48
48
  });
49
49
  const result = {
50
50
  action: 'disable',
51
51
  enabled: false,
52
- installationId,
52
+ consentVersion: existing?.consentVersion,
53
53
  message: 'Telemetry DISABLED. No usage data will be sent.',
54
54
  };
55
55
  return compactResult(formatKeyValue(result));
@@ -207,8 +207,17 @@ export async function runAutoPostCreatePipeline(specId, projectId, _projectPath)
207
207
  const timeout = setTimeout(() => {
208
208
  controller.abort(abortError(`Auto-pipeline timeout (${String(AUTO_PIPELINE_TIMEOUT_MS / 1000)}s)`));
209
209
  }, AUTO_PIPELINE_TIMEOUT_MS);
210
+ let rejectOnAbort;
211
+ const aborted = new Promise((_resolve, reject) => {
212
+ rejectOnAbort = () => {
213
+ reject(controller.signal.reason instanceof Error
214
+ ? controller.signal.reason
215
+ : abortError('Auto-pipeline aborted'));
216
+ };
217
+ controller.signal.addEventListener('abort', rejectOnAbort, { once: true });
218
+ });
210
219
  try {
211
- return await runPipelineInternal(specId, projectId, controller.signal);
220
+ return await Promise.race([runPipelineInternal(specId, projectId, controller.signal), aborted]);
212
221
  }
213
222
  catch (err) {
214
223
  if (err instanceof Error && err.name === 'AbortError') {
@@ -229,6 +238,9 @@ export async function runAutoPostCreatePipeline(specId, projectId, _projectPath)
229
238
  }
230
239
  finally {
231
240
  clearTimeout(timeout);
241
+ if (rejectOnAbort) {
242
+ controller.signal.removeEventListener('abort', rejectOnAbort);
243
+ }
232
244
  }
233
245
  }
234
246
  //# sourceMappingURL=auto-pipeline.js.map
@@ -20,7 +20,7 @@ export declare function getEmptyAutopilotResult(): AutopilotAnalysis;
20
20
  * Analyze the project to enrich a spec with real file paths and patterns.
21
21
  * Runs automatically during create_spec — no user interaction needed.
22
22
  */
23
- export declare function analyzeProjectForSpec(projectPath: string, description: string, title: string, _knowledge: ProjectKnowledge | null): Promise<AutopilotAnalysis>;
23
+ export declare function analyzeProjectForSpec(projectPath: string, description: string, title: string, _knowledge: ProjectKnowledge | null, signal?: AbortSignal): Promise<AutopilotAnalysis>;
24
24
  /**
25
25
  * SPEC-619 AC1: Detect broad-scope descriptions that mention 2+ major subsystems.
26
26
  * When true, create_spec should ask clarifying questions before proceeding.
@@ -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
  // tools/create-spec/autopilot-analyzer.ts — SPEC-461 Phase 3: Autopilot analysis for create_spec
4
2
  // Analyzes project code to suggest real files, detect patterns, and enrich specs automatically.
5
3
  import { relative, extname } from 'node:path';
@@ -19,7 +17,7 @@ export function getEmptyAutopilotResult() {
19
17
  * Analyze the project to enrich a spec with real file paths and patterns.
20
18
  * Runs automatically during create_spec — no user interaction needed.
21
19
  */
22
- export async function analyzeProjectForSpec(projectPath, description, title, _knowledge) {
20
+ export async function analyzeProjectForSpec(projectPath, description, title, _knowledge, signal) {
23
21
  const result = {
24
22
  suggestedFiles: { create: [], modify: [], test: [] },
25
23
  detectedPatterns: [],
@@ -46,7 +44,7 @@ export async function analyzeProjectForSpec(projectPath, description, title, _kn
46
44
  const keywords = extractKeywordsScorer(`${title} ${description}`);
47
45
  // Scan project files to find semantically related ones
48
46
  try {
49
- const relatedFiles = await findRelevantFiles(projectPath, keywords, 10);
47
+ const relatedFiles = await findRelevantFiles(projectPath, keywords, 10, signal);
50
48
  if (relatedFiles.length === 0) {
51
49
  result.noRelatedFilesMessage =
52
50
  'No related files detected — please populate ## Technical manually';
@@ -1,13 +1,19 @@
1
- import type { ProjectKnowledge, ToolContract } from '../../types/index.js';
1
+ import type { ProjectKnowledge, ToolContract, MCPErrorCode } from '../../types/index.js';
2
2
  export declare function isMcpToolContract(knowledge: ProjectKnowledge | null): boolean;
3
+ export interface McpToolContractOptions {
4
+ /** Explicit effects declared by the caller; descriptions are never treated as executable metadata. */
5
+ sideEffects?: readonly string[];
6
+ /** Explicit protocol errors beyond the safe default contract. */
7
+ errorCodes?: readonly MCPErrorCode[];
8
+ }
3
9
  /**
4
10
  * Generate a ToolContract for an MCP tool.
5
11
  * Criterion 4: name, description, inputSchema (Zod), outputSchema, side effects, error codes, timeout.
6
12
  */
7
- export declare function generateMcpToolContract(toolName: string, description: string, inputFields: string[]): ToolContract;
8
- export declare function formatMcpToolContractAsMarkdown(tools: {
13
+ export declare function generateMcpToolContract(toolName: string, description: string, inputFields: string[], options?: McpToolContractOptions): ToolContract;
14
+ export declare function formatMcpToolContractAsMarkdown(tools: ({
9
15
  name: string;
10
16
  description: string;
11
17
  fields: string[];
12
- }[], knowledge: ProjectKnowledge): string;
18
+ } & McpToolContractOptions)[], knowledge: ProjectKnowledge): string;
13
19
  //# sourceMappingURL=mcp-tool-contract.d.ts.map
@@ -2,6 +2,7 @@
2
2
  // SPEC-016b: Generates Tool Contracts for MCP tools.
3
3
  // Criterion 4: define_ui_contract generates "Tool Contract" for MCP servers.
4
4
  import { isMcpServerProject } from '../../engine/detectors/mcp-server-detector.js';
5
+ import { getRuntimePolicy } from '../../engine/runtime-policy.js';
5
6
  // === Detection ===
6
7
  export function isMcpToolContract(knowledge) {
7
8
  if (!knowledge) {
@@ -10,42 +11,12 @@ export function isMcpToolContract(knowledge) {
10
11
  return isMcpServerProject(knowledge);
11
12
  }
12
13
  // === Tool Contract builder ===
13
- function buildErrorCodes(toolName, description) {
14
- const codes = ['InvalidParams', 'InternalError'];
15
- const lower = description.toLowerCase();
16
- if (lower.includes('not found') ||
17
- lower.includes('missing') ||
18
- lower.includes(toolName.toLowerCase())) {
19
- codes.push('MethodNotFound');
20
- }
21
- // Deduplicate
22
- return [...new Set(codes)];
23
- }
24
- function buildSideEffects(description) {
25
- const lower = description.toLowerCase();
26
- const effects = [];
27
- if (lower.includes('write') || lower.includes('create') || lower.includes('save')) {
28
- effects.push('filesystem-write');
29
- }
30
- if (lower.includes('delete') || lower.includes('remove')) {
31
- effects.push('filesystem-delete');
32
- }
33
- if (lower.includes('http') || lower.includes('fetch') || lower.includes('api')) {
34
- effects.push('network-call');
35
- }
36
- if (lower.includes('database') || lower.includes('db') || lower.includes('query')) {
37
- effects.push('database-read');
38
- }
39
- if (lower.includes('email') || lower.includes('notify') || lower.includes('send')) {
40
- effects.push('external-service-call');
41
- }
42
- return effects;
43
- }
14
+ const DEFAULT_ERROR_CODES = ['InvalidParams', 'InternalError'];
44
15
  /**
45
16
  * Generate a ToolContract for an MCP tool.
46
17
  * Criterion 4: name, description, inputSchema (Zod), outputSchema, side effects, error codes, timeout.
47
18
  */
48
- export function generateMcpToolContract(toolName, description, inputFields) {
19
+ export function generateMcpToolContract(toolName, description, inputFields, options = {}) {
49
20
  const inputSchema = {};
50
21
  for (const field of inputFields) {
51
22
  inputSchema[field] = {
@@ -79,9 +50,9 @@ export function generateMcpToolContract(toolName, description, inputFields) {
79
50
  },
80
51
  required: ['content'],
81
52
  },
82
- sideEffects: buildSideEffects(description),
83
- errorCodes: buildErrorCodes(toolName, description),
84
- timeoutMs: 30000,
53
+ sideEffects: [...new Set(options.sideEffects ?? [])],
54
+ errorCodes: [...new Set(options.errorCodes ?? DEFAULT_ERROR_CODES)],
55
+ timeoutMs: getRuntimePolicy().toolExecution.defaultTimeoutMs,
85
56
  };
86
57
  }
87
58
  // === Formatted output for define_ui_contract ===
@@ -93,7 +64,7 @@ export function formatMcpToolContractAsMarkdown(tools, knowledge) {
93
64
  '',
94
65
  ];
95
66
  for (const tool of tools) {
96
- const contract = generateMcpToolContract(tool.name, tool.description, tool.fields);
67
+ const contract = generateMcpToolContract(tool.name, tool.description, tool.fields, tool);
97
68
  lines.push(`### Tool: \`${contract.name}\``);
98
69
  lines.push('');
99
70
  lines.push(`**Description**: ${contract.description}`);
@@ -20,5 +20,6 @@ export declare function formatPostCreationSuggestion(suggestion: PostCreationSug
20
20
  * Writes results to Planu's external project data dir and appends an
21
21
  * autopilot-log entry on completion. Never throws — fully best-effort.
22
22
  */
23
- export declare function runAutopilotAsync(specId: string, projectPath: string, _description: string): void;
23
+ export declare function runAutopilotAnalysis(specId: string, projectPath: string, description: string): Promise<void>;
24
+ export declare function runAutopilotAsync(specId: string, projectPath: string, description: string): void;
24
25
  //# sourceMappingURL=post-creation.d.ts.map
@@ -1,19 +1,15 @@
1
- // SPEC-597-EXEMPT: canonical mapping (npm-package↔framework, keyword catalogue)
2
- // — must enumerate framework names by design; no detection logic to migrate.
3
- // tools/create-spec/post-creation.ts — Git setup + contradiction detection + post-creation suggestions.
4
- // Extracted from create-spec.ts to keep file sizes within limits.
1
+ import { technologyValue } from '../../engine/technology-registry.js';
5
2
  import { specStore } from '../../storage/index.js';
6
3
  import { detectContradictions } from '../../engine/contradiction-detector.js';
7
4
  import { detectCiCd } from '../../engine/detectors/cicd-detector.js';
8
5
  import { tryAutoSetupGit } from '../create-spec-helpers.js';
9
6
  import { emitAutopilotEvent } from '../../engine/autopilot/event-bus.js';
10
7
  import { incrementSpecCount } from '../../engine/autopilot/state-updater.js';
11
- import { writeFile, mkdir } from 'node:fs/promises';
12
- import { join, dirname } from 'node:path';
8
+ import { join } from 'node:path';
13
9
  import { hashProjectPath, projectDataDir } from '../../storage/base-store.js';
14
10
  import { appendAutopilotLogEntry } from '../../storage/autopilot-log-store.js';
15
11
  import { analyzeContextPreflight, buildTokenWasteReport, loadTokenWastePolicy, recommendRelevantTools, toolsFromPolicyGroups, } from '../../engine/token-optimizer/index.js';
16
- import { queryProjectGraphSlice } from '../../engine/project-graph/index.js';
12
+ import { atomicWriteFile } from '../../engine/safety/atomic-write-file.js';
17
13
  const ASYNC_ANALYSIS_HOOK = 'create-spec-async-analysis';
18
14
  export function getAsyncAnalysisPath(projectPath, specId) {
19
15
  const projectId = hashProjectPath(projectPath);
@@ -25,21 +21,15 @@ export async function buildInitialTokenWasteMetadata(specId, projectPath, descri
25
21
  if (!policy.enabled) {
26
22
  return null;
27
23
  }
28
- const graphSlice = await queryProjectGraphSlice({ projectPath, specId }).catch(() => null);
29
- const graphCandidates = graphSlice?.nodes
30
- .filter((node) => node.type === 'file' || node.type === 'test')
31
- .slice(0, 12)
32
- .map((node) => ({
33
- path: node.label,
34
- reason: 'Related by Project Knowledge Graph compact slice.',
35
- })) ?? [];
36
24
  const context = analyzeContextPreflight({
37
25
  action: 'create_spec',
38
26
  policy,
39
- candidates: [
40
- ...graphCandidates,
41
- { path: 'planu/specs', reason: 'New spec workspace metadata.' },
42
- ],
27
+ // A just-created spec cannot exist in the previous graph snapshot. Asking
28
+ // for a slice by its new ID therefore produced no candidates while forcing
29
+ // a full graph freshness scan/rebuild after every mutation. Graph refresh
30
+ // belongs to the durable post-commit worker; the acknowledgement metadata
31
+ // starts with the canonical spec workspace only.
32
+ candidates: [{ path: 'planu/specs', reason: 'New spec workspace metadata.' }],
43
33
  spec: { id: specId },
44
34
  });
45
35
  const tools = recommendRelevantTools({
@@ -156,7 +146,13 @@ function hasAffirmedPattern(description, pattern) {
156
146
  });
157
147
  }
158
148
  // === Serverless platform detection ===
159
- const SERVERLESS_PLATFORMS = ['vercel', 'netlify', 'lambda', 'cloudflare-workers', 'deno-deploy'];
149
+ const SERVERLESS_PLATFORMS = [
150
+ technologyValue('technology-vercel-9d3508'),
151
+ technologyValue('technology-netlify-58465a'),
152
+ 'lambda',
153
+ 'cloudflare-workers',
154
+ 'deno-deploy',
155
+ ];
160
156
  function isServerlessKnowledge(knowledge) {
161
157
  if (!knowledge) {
162
158
  return false;
@@ -235,41 +231,47 @@ export function formatPostCreationSuggestion(suggestion) {
235
231
  * Writes results to Planu's external project data dir and appends an
236
232
  * autopilot-log entry on completion. Never throws — fully best-effort.
237
233
  */
238
- export function runAutopilotAsync(specId, projectPath, _description) {
234
+ export async function runAutopilotAnalysis(specId, projectPath, description) {
239
235
  const projectId = hashProjectPath(projectPath);
240
236
  const start = Date.now();
241
- void (async () => {
242
- try {
243
- const analysisResult = {
244
- specId,
245
- completedAt: new Date().toISOString(),
246
- pendingAnalysis: false,
247
- tokenWasteAutopilot: await buildInitialTokenWasteMetadata(specId, projectPath, _description),
248
- };
249
- const analysisPath = getAsyncAnalysisPath(projectPath, specId);
250
- await mkdir(dirname(analysisPath), { recursive: true });
251
- await writeFile(analysisPath, JSON.stringify(analysisResult, null, 2), 'utf-8');
252
- await appendAutopilotLogEntry(projectId, {
253
- specId,
254
- hookName: ASYNC_ANALYSIS_HOOK,
255
- result: 'pass',
256
- timestamp: new Date().toISOString(),
257
- durationMs: Date.now() - start,
258
- });
259
- }
260
- catch (err) {
261
- const error = err instanceof Error ? err.message : String(err);
262
- await appendAutopilotLogEntry(projectId, {
263
- specId,
264
- hookName: ASYNC_ANALYSIS_HOOK,
265
- result: 'fail',
266
- error,
267
- timestamp: new Date().toISOString(),
268
- durationMs: Date.now() - start,
269
- }).catch(() => {
270
- /* double best-effort */
271
- });
272
- }
273
- })();
237
+ try {
238
+ const analysisResult = {
239
+ specId,
240
+ completedAt: new Date().toISOString(),
241
+ pendingAnalysis: false,
242
+ tokenWasteAutopilot: await buildInitialTokenWasteMetadata(specId, projectPath, description),
243
+ };
244
+ const analysisPath = getAsyncAnalysisPath(projectPath, specId);
245
+ await atomicWriteFile(analysisPath, JSON.stringify(analysisResult, null, 2), {
246
+ encoding: 'utf-8',
247
+ });
248
+ await appendAutopilotLogEntry(projectId, {
249
+ specId,
250
+ hookName: ASYNC_ANALYSIS_HOOK,
251
+ result: 'pass',
252
+ timestamp: new Date().toISOString(),
253
+ durationMs: Date.now() - start,
254
+ });
255
+ }
256
+ catch (err) {
257
+ const error = err instanceof Error ? err.message : String(err);
258
+ await appendAutopilotLogEntry(projectId, {
259
+ specId,
260
+ hookName: ASYNC_ANALYSIS_HOOK,
261
+ result: 'fail',
262
+ error,
263
+ timestamp: new Date().toISOString(),
264
+ durationMs: Date.now() - start,
265
+ }).catch(() => {
266
+ /* double best-effort */
267
+ });
268
+ throw err;
269
+ }
270
+ }
271
+ export function runAutopilotAsync(specId, projectPath, description) {
272
+ void runAutopilotAnalysis(specId, projectPath, description).catch(() => {
273
+ // The durable outbox consumer uses the awaited entry point above. This wrapper
274
+ // remains for callers that have not yet migrated and always observes rejection.
275
+ });
274
276
  }
275
277
  //# sourceMappingURL=post-creation.js.map
@@ -14,5 +14,5 @@ export declare function scoreFile(filePath: string, keywords: Set<string>): Prom
14
14
  * Scans `src/**\/\*.ts` and `tests/**\/\*.ts` under projectPath,
15
15
  * scores each, drops score=0 entries, returns top-`limit` by descending score.
16
16
  */
17
- export declare function findRelevantFiles(projectPath: string, keywords: Set<string>, limit?: number): Promise<string[]>;
17
+ export declare function findRelevantFiles(projectPath: string, keywords: Set<string>, limit?: number, signal?: AbortSignal): Promise<string[]>;
18
18
  //# sourceMappingURL=relevance-scorer.d.ts.map
@@ -4,6 +4,9 @@
4
4
  import { readFile } from 'node:fs/promises';
5
5
  import { glob } from 'glob';
6
6
  import { join } from 'node:path';
7
+ import { isNativeActive } from '../../engine/core-bridge.js';
8
+ import { runNativeWorkerOperation } from '../../engine/execution/native-worker-runtime.js';
9
+ import { hashProjectPath } from '../../storage/base-store.js';
7
10
  /** Stop words to exclude from keyword extraction. */
8
11
  const STOP_WORDS = new Set([
9
12
  // English stop words
@@ -133,10 +136,23 @@ export async function scoreFile(filePath, keywords) {
133
136
  * Scans `src/**\/\*.ts` and `tests/**\/\*.ts` under projectPath,
134
137
  * scores each, drops score=0 entries, returns top-`limit` by descending score.
135
138
  */
136
- export async function findRelevantFiles(projectPath, keywords, limit = 10) {
139
+ export async function findRelevantFiles(projectPath, keywords, limit = 10, signal) {
137
140
  if (keywords.size === 0) {
138
141
  return [];
139
142
  }
143
+ if (isNativeActive()) {
144
+ const result = await runNativeWorkerOperation({
145
+ projectId: hashProjectPath(projectPath),
146
+ operation: 'find-relevant-files',
147
+ payload: { rootPath: projectPath, keywords: [...keywords], limit },
148
+ deadlineAt: Date.now() + 5_000,
149
+ signal,
150
+ });
151
+ if (!Array.isArray(result) || !result.every((filePath) => typeof filePath === 'string')) {
152
+ throw new Error('[Planu] Native relevance worker returned an invalid payload');
153
+ }
154
+ return result;
155
+ }
140
156
  const patterns = [join(projectPath, 'src/**/*.ts'), join(projectPath, 'tests/**/*.ts')];
141
157
  const candidates = [];
142
158
  for (const pattern of patterns) {