gherkin-ai 2.6.1 → 2.6.2

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 (368) hide show
  1. package/README.md +31 -69
  2. package/dist/commands/add.d.ts +2 -0
  3. package/dist/commands/add.d.ts.map +1 -1
  4. package/dist/commands/add.js +13 -7
  5. package/dist/commands/add.js.map +1 -1
  6. package/dist/commands/agent-log.d.ts +8 -0
  7. package/dist/commands/agent-log.d.ts.map +1 -0
  8. package/dist/commands/agent-log.js +30 -0
  9. package/dist/commands/agent-log.js.map +1 -0
  10. package/dist/commands/audit.d.ts +6 -0
  11. package/dist/commands/audit.d.ts.map +1 -0
  12. package/dist/commands/audit.js +29 -0
  13. package/dist/commands/audit.js.map +1 -0
  14. package/dist/commands/autopilot.d.ts.map +1 -1
  15. package/dist/commands/autopilot.js +142 -7
  16. package/dist/commands/autopilot.js.map +1 -1
  17. package/dist/commands/create.d.ts +2 -0
  18. package/dist/commands/create.d.ts.map +1 -1
  19. package/dist/commands/create.js +16 -15
  20. package/dist/commands/create.js.map +1 -1
  21. package/dist/commands/detect.d.ts +4 -1
  22. package/dist/commands/detect.d.ts.map +1 -1
  23. package/dist/commands/detect.js +8 -6
  24. package/dist/commands/detect.js.map +1 -1
  25. package/dist/commands/generate.d.ts.map +1 -1
  26. package/dist/commands/generate.js +172 -22
  27. package/dist/commands/generate.js.map +1 -1
  28. package/dist/commands/implement.d.ts +9 -0
  29. package/dist/commands/implement.d.ts.map +1 -0
  30. package/dist/commands/implement.js +229 -0
  31. package/dist/commands/implement.js.map +1 -0
  32. package/dist/commands/init.d.ts +17 -0
  33. package/dist/commands/init.d.ts.map +1 -1
  34. package/dist/commands/init.js +471 -79
  35. package/dist/commands/init.js.map +1 -1
  36. package/dist/commands/login.d.ts +22 -0
  37. package/dist/commands/login.d.ts.map +1 -0
  38. package/dist/commands/login.js +97 -0
  39. package/dist/commands/login.js.map +1 -0
  40. package/dist/commands/quality.d.ts.map +1 -1
  41. package/dist/commands/quality.js +23 -14
  42. package/dist/commands/quality.js.map +1 -1
  43. package/dist/commands/validate.d.ts +2 -0
  44. package/dist/commands/validate.d.ts.map +1 -1
  45. package/dist/commands/validate.js +126 -15
  46. package/dist/commands/validate.js.map +1 -1
  47. package/dist/commands/verify.d.ts.map +1 -1
  48. package/dist/commands/verify.js +62 -1
  49. package/dist/commands/verify.js.map +1 -1
  50. package/dist/commands/web.d.ts.map +1 -1
  51. package/dist/commands/web.js +4 -0
  52. package/dist/commands/web.js.map +1 -1
  53. package/dist/core/agent-adapter.d.ts +2 -1
  54. package/dist/core/agent-adapter.d.ts.map +1 -1
  55. package/dist/core/agent-adapter.js +139 -138
  56. package/dist/core/agent-adapter.js.map +1 -1
  57. package/dist/core/agent-logger.d.ts +18 -0
  58. package/dist/core/agent-logger.d.ts.map +1 -0
  59. package/dist/core/agent-logger.js +103 -0
  60. package/dist/core/agent-logger.js.map +1 -0
  61. package/dist/core/analysis/cross-service-impact.d.ts +20 -0
  62. package/dist/core/analysis/cross-service-impact.d.ts.map +1 -0
  63. package/dist/core/analysis/cross-service-impact.js +75 -0
  64. package/dist/core/analysis/cross-service-impact.js.map +1 -0
  65. package/dist/core/arch-rules.d.ts.map +1 -1
  66. package/dist/core/arch-rules.js +27 -1
  67. package/dist/core/arch-rules.js.map +1 -1
  68. package/dist/core/ast/adapters/multi-lang-adapter.d.ts +20 -0
  69. package/dist/core/ast/adapters/multi-lang-adapter.d.ts.map +1 -0
  70. package/dist/core/ast/adapters/multi-lang-adapter.js +54 -0
  71. package/dist/core/ast/adapters/multi-lang-adapter.js.map +1 -0
  72. package/dist/core/ast/monorepo-ast-indexer.d.ts +25 -0
  73. package/dist/core/ast/monorepo-ast-indexer.d.ts.map +1 -0
  74. package/dist/core/ast/monorepo-ast-indexer.js +78 -0
  75. package/dist/core/ast/monorepo-ast-indexer.js.map +1 -0
  76. package/dist/core/asyncapi-validator.d.ts +22 -0
  77. package/dist/core/asyncapi-validator.d.ts.map +1 -0
  78. package/dist/core/asyncapi-validator.js +302 -0
  79. package/dist/core/asyncapi-validator.js.map +1 -0
  80. package/dist/core/config.d.ts +19 -0
  81. package/dist/core/config.d.ts.map +1 -1
  82. package/dist/core/config.js +16 -2
  83. package/dist/core/config.js.map +1 -1
  84. package/dist/core/convergence-engine.d.ts.map +1 -1
  85. package/dist/core/convergence-engine.js +81 -0
  86. package/dist/core/convergence-engine.js.map +1 -1
  87. package/dist/core/execution-sandbox.d.ts +1 -0
  88. package/dist/core/execution-sandbox.d.ts.map +1 -1
  89. package/dist/core/execution-sandbox.js +37 -1
  90. package/dist/core/execution-sandbox.js.map +1 -1
  91. package/dist/core/gherkin-parser.d.ts.map +1 -1
  92. package/dist/core/gherkin-parser.js +3 -0
  93. package/dist/core/gherkin-parser.js.map +1 -1
  94. package/dist/core/governance/agent-policy-engine.d.ts +26 -0
  95. package/dist/core/governance/agent-policy-engine.d.ts.map +1 -0
  96. package/dist/core/governance/agent-policy-engine.js +95 -0
  97. package/dist/core/governance/agent-policy-engine.js.map +1 -0
  98. package/dist/core/governance/spec-hash-baseline.d.ts +36 -0
  99. package/dist/core/governance/spec-hash-baseline.d.ts.map +1 -0
  100. package/dist/core/governance/spec-hash-baseline.js +102 -0
  101. package/dist/core/governance/spec-hash-baseline.js.map +1 -0
  102. package/dist/core/inventory.d.ts +40 -0
  103. package/dist/core/inventory.d.ts.map +1 -0
  104. package/dist/core/inventory.js +176 -0
  105. package/dist/core/inventory.js.map +1 -0
  106. package/dist/core/ir-builder.d.ts.map +1 -1
  107. package/dist/core/ir-builder.js +128 -4
  108. package/dist/core/ir-builder.js.map +1 -1
  109. package/dist/core/metrics-engine.d.ts +28 -0
  110. package/dist/core/metrics-engine.d.ts.map +1 -0
  111. package/dist/core/metrics-engine.js +114 -0
  112. package/dist/core/metrics-engine.js.map +1 -0
  113. package/dist/core/patterns-suggester.d.ts.map +1 -1
  114. package/dist/core/patterns-suggester.js +4 -0
  115. package/dist/core/patterns-suggester.js.map +1 -1
  116. package/dist/core/profiles/base-profile.d.ts +41 -0
  117. package/dist/core/profiles/base-profile.d.ts.map +1 -0
  118. package/dist/core/profiles/base-profile.js +10 -0
  119. package/dist/core/profiles/base-profile.js.map +1 -0
  120. package/dist/core/profiles/payment-profile.d.ts +12 -0
  121. package/dist/core/profiles/payment-profile.d.ts.map +1 -0
  122. package/dist/core/profiles/payment-profile.js +73 -0
  123. package/dist/core/profiles/payment-profile.js.map +1 -0
  124. package/dist/core/profiles/profile-registry.d.ts +10 -0
  125. package/dist/core/profiles/profile-registry.d.ts.map +1 -0
  126. package/dist/core/profiles/profile-registry.js +31 -0
  127. package/dist/core/profiles/profile-registry.js.map +1 -0
  128. package/dist/core/requirement-validator.d.ts +5 -1
  129. package/dist/core/requirement-validator.d.ts.map +1 -1
  130. package/dist/core/requirement-validator.js +85 -8
  131. package/dist/core/requirement-validator.js.map +1 -1
  132. package/dist/core/risk-engine.d.ts +13 -0
  133. package/dist/core/risk-engine.d.ts.map +1 -0
  134. package/dist/core/risk-engine.js +119 -0
  135. package/dist/core/risk-engine.js.map +1 -0
  136. package/dist/core/semantic-ir.d.ts +87 -1
  137. package/dist/core/semantic-ir.d.ts.map +1 -1
  138. package/dist/core/stack-detector.d.ts.map +1 -1
  139. package/dist/core/stack-detector.js +75 -51
  140. package/dist/core/stack-detector.js.map +1 -1
  141. package/dist/core/stack-setup.d.ts +27 -0
  142. package/dist/core/stack-setup.d.ts.map +1 -0
  143. package/dist/core/stack-setup.js +151 -0
  144. package/dist/core/stack-setup.js.map +1 -0
  145. package/dist/core/stack-specs.d.ts +2 -0
  146. package/dist/core/stack-specs.d.ts.map +1 -1
  147. package/dist/core/stack-specs.js +68 -12
  148. package/dist/core/stack-specs.js.map +1 -1
  149. package/dist/core/validators/angular-ngrx-validator.d.ts +3 -0
  150. package/dist/core/validators/angular-ngrx-validator.d.ts.map +1 -0
  151. package/dist/core/validators/angular-ngrx-validator.js +29 -0
  152. package/dist/core/validators/angular-ngrx-validator.js.map +1 -0
  153. package/dist/core/validators/c4-sync-validator.d.ts +3 -0
  154. package/dist/core/validators/c4-sync-validator.d.ts.map +1 -0
  155. package/dist/core/validators/c4-sync-validator.js +21 -0
  156. package/dist/core/validators/c4-sync-validator.js.map +1 -0
  157. package/dist/core/validators/distributed-topology-validator.d.ts +3 -0
  158. package/dist/core/validators/distributed-topology-validator.d.ts.map +1 -0
  159. package/dist/core/validators/distributed-topology-validator.js +68 -0
  160. package/dist/core/validators/distributed-topology-validator.js.map +1 -0
  161. package/dist/core/validators/dotnet-cqrs-validator.d.ts +14 -0
  162. package/dist/core/validators/dotnet-cqrs-validator.d.ts.map +1 -0
  163. package/dist/core/validators/dotnet-cqrs-validator.js +38 -0
  164. package/dist/core/validators/dotnet-cqrs-validator.js.map +1 -0
  165. package/dist/core/validators/financial-gates.d.ts +3 -0
  166. package/dist/core/validators/financial-gates.d.ts.map +1 -0
  167. package/dist/core/validators/financial-gates.js +32 -0
  168. package/dist/core/validators/financial-gates.js.map +1 -0
  169. package/dist/core/validators/index.d.ts +14 -0
  170. package/dist/core/validators/index.d.ts.map +1 -0
  171. package/dist/core/validators/index.js +29 -0
  172. package/dist/core/validators/index.js.map +1 -0
  173. package/dist/core/validators/java-spring-validator.d.ts +3 -0
  174. package/dist/core/validators/java-spring-validator.d.ts.map +1 -0
  175. package/dist/core/validators/java-spring-validator.js +31 -0
  176. package/dist/core/validators/java-spring-validator.js.map +1 -0
  177. package/dist/core/validators/react-validator.d.ts +3 -0
  178. package/dist/core/validators/react-validator.d.ts.map +1 -0
  179. package/dist/core/validators/react-validator.js +23 -0
  180. package/dist/core/validators/react-validator.js.map +1 -0
  181. package/dist/core/validators/telemetry-validator.d.ts +3 -0
  182. package/dist/core/validators/telemetry-validator.d.ts.map +1 -0
  183. package/dist/core/validators/telemetry-validator.js +26 -0
  184. package/dist/core/validators/telemetry-validator.js.map +1 -0
  185. package/dist/core/validators/vue-validator.d.ts +7 -0
  186. package/dist/core/validators/vue-validator.d.ts.map +1 -0
  187. package/dist/core/validators/vue-validator.js +37 -0
  188. package/dist/core/validators/vue-validator.js.map +1 -0
  189. package/dist/generators/c4-model.d.ts +4 -0
  190. package/dist/generators/c4-model.d.ts.map +1 -0
  191. package/dist/generators/c4-model.js +47 -0
  192. package/dist/generators/c4-model.js.map +1 -0
  193. package/dist/generators/contracts-csharp.d.ts +2 -1
  194. package/dist/generators/contracts-csharp.d.ts.map +1 -1
  195. package/dist/generators/contracts-csharp.js +91 -22
  196. package/dist/generators/contracts-csharp.js.map +1 -1
  197. package/dist/generators/contracts-go.d.ts +2 -1
  198. package/dist/generators/contracts-go.d.ts.map +1 -1
  199. package/dist/generators/contracts-go.js +6 -6
  200. package/dist/generators/contracts-go.js.map +1 -1
  201. package/dist/generators/contracts-php.d.ts +2 -1
  202. package/dist/generators/contracts-php.d.ts.map +1 -1
  203. package/dist/generators/contracts-php.js +8 -3
  204. package/dist/generators/contracts-php.js.map +1 -1
  205. package/dist/generators/contracts-python.d.ts +2 -1
  206. package/dist/generators/contracts-python.d.ts.map +1 -1
  207. package/dist/generators/contracts-python.js +3 -3
  208. package/dist/generators/contracts-python.js.map +1 -1
  209. package/dist/generators/contracts.d.ts +9 -1
  210. package/dist/generators/contracts.d.ts.map +1 -1
  211. package/dist/generators/contracts.js +189 -60
  212. package/dist/generators/contracts.js.map +1 -1
  213. package/dist/generators/dotnet/aspire-generator.d.ts +3 -0
  214. package/dist/generators/dotnet/aspire-generator.d.ts.map +1 -0
  215. package/dist/generators/dotnet/aspire-generator.js +109 -0
  216. package/dist/generators/dotnet/aspire-generator.js.map +1 -0
  217. package/dist/generators/dotnet/cqrs-handlers-generator.d.ts +2 -0
  218. package/dist/generators/dotnet/cqrs-handlers-generator.d.ts.map +1 -0
  219. package/dist/generators/dotnet/cqrs-handlers-generator.js +86 -0
  220. package/dist/generators/dotnet/cqrs-handlers-generator.js.map +1 -0
  221. package/dist/generators/dotnet/dotnet-testcontainers-generator.d.ts +2 -0
  222. package/dist/generators/dotnet/dotnet-testcontainers-generator.d.ts.map +1 -0
  223. package/dist/generators/dotnet/dotnet-testcontainers-generator.js +119 -0
  224. package/dist/generators/dotnet/dotnet-testcontainers-generator.js.map +1 -0
  225. package/dist/generators/dotnet/idempotency-generator.d.ts +2 -0
  226. package/dist/generators/dotnet/idempotency-generator.d.ts.map +1 -0
  227. package/dist/generators/dotnet/idempotency-generator.js +136 -0
  228. package/dist/generators/dotnet/idempotency-generator.js.map +1 -0
  229. package/dist/generators/dotnet/inbox-generator.d.ts +2 -0
  230. package/dist/generators/dotnet/inbox-generator.d.ts.map +1 -0
  231. package/dist/generators/dotnet/inbox-generator.js +66 -0
  232. package/dist/generators/dotnet/inbox-generator.js.map +1 -0
  233. package/dist/generators/dotnet/opentelemetry-generator.d.ts +2 -0
  234. package/dist/generators/dotnet/opentelemetry-generator.d.ts.map +1 -0
  235. package/dist/generators/dotnet/opentelemetry-generator.js +60 -0
  236. package/dist/generators/dotnet/opentelemetry-generator.js.map +1 -0
  237. package/dist/generators/dotnet/outbox-generator.d.ts +2 -0
  238. package/dist/generators/dotnet/outbox-generator.d.ts.map +1 -0
  239. package/dist/generators/dotnet/outbox-generator.js +151 -0
  240. package/dist/generators/dotnet/outbox-generator.js.map +1 -0
  241. package/dist/generators/dotnet/resilience-generator.d.ts +2 -0
  242. package/dist/generators/dotnet/resilience-generator.d.ts.map +1 -0
  243. package/dist/generators/dotnet/resilience-generator.js +73 -0
  244. package/dist/generators/dotnet/resilience-generator.js.map +1 -0
  245. package/dist/generators/dotnet/saga-generator.d.ts +2 -0
  246. package/dist/generators/dotnet/saga-generator.d.ts.map +1 -0
  247. package/dist/generators/dotnet/saga-generator.js +92 -0
  248. package/dist/generators/dotnet/saga-generator.js.map +1 -0
  249. package/dist/generators/dotnet/signalr-generator.d.ts +2 -0
  250. package/dist/generators/dotnet/signalr-generator.d.ts.map +1 -0
  251. package/dist/generators/dotnet/signalr-generator.js +74 -0
  252. package/dist/generators/dotnet/signalr-generator.js.map +1 -0
  253. package/dist/generators/frontend/angular-ngrx-generator.d.ts +2 -0
  254. package/dist/generators/frontend/angular-ngrx-generator.d.ts.map +1 -0
  255. package/dist/generators/frontend/angular-ngrx-generator.js +167 -0
  256. package/dist/generators/frontend/angular-ngrx-generator.js.map +1 -0
  257. package/dist/generators/frontend/angular-signalr-service.d.ts +2 -0
  258. package/dist/generators/frontend/angular-signalr-service.d.ts.map +1 -0
  259. package/dist/generators/frontend/angular-signalr-service.js +75 -0
  260. package/dist/generators/frontend/angular-signalr-service.js.map +1 -0
  261. package/dist/generators/frontend/react-generator.d.ts +2 -0
  262. package/dist/generators/frontend/react-generator.d.ts.map +1 -0
  263. package/dist/generators/frontend/react-generator.js +94 -0
  264. package/dist/generators/frontend/react-generator.js.map +1 -0
  265. package/dist/generators/frontend/vue-pinia-generator.d.ts +3 -0
  266. package/dist/generators/frontend/vue-pinia-generator.d.ts.map +1 -0
  267. package/dist/generators/frontend/vue-pinia-generator.js +118 -0
  268. package/dist/generators/frontend/vue-pinia-generator.js.map +1 -0
  269. package/dist/generators/infra.d.ts +6 -0
  270. package/dist/generators/infra.d.ts.map +1 -1
  271. package/dist/generators/infra.js +107 -16
  272. package/dist/generators/infra.js.map +1 -1
  273. package/dist/generators/infrastructure/aws-cdk-generator.d.ts +2 -0
  274. package/dist/generators/infrastructure/aws-cdk-generator.d.ts.map +1 -0
  275. package/dist/generators/infrastructure/aws-cdk-generator.js +78 -0
  276. package/dist/generators/infrastructure/aws-cdk-generator.js.map +1 -0
  277. package/dist/generators/java/java-cqrs-generator.d.ts +2 -0
  278. package/dist/generators/java/java-cqrs-generator.d.ts.map +1 -0
  279. package/dist/generators/java/java-cqrs-generator.js +58 -0
  280. package/dist/generators/java/java-cqrs-generator.js.map +1 -0
  281. package/dist/generators/java/java-idempotency-generator.d.ts +5 -0
  282. package/dist/generators/java/java-idempotency-generator.d.ts.map +1 -0
  283. package/dist/generators/java/java-idempotency-generator.js +126 -0
  284. package/dist/generators/java/java-idempotency-generator.js.map +1 -0
  285. package/dist/generators/java/java-opentelemetry-generator.d.ts +2 -0
  286. package/dist/generators/java/java-opentelemetry-generator.d.ts.map +1 -0
  287. package/dist/generators/java/java-opentelemetry-generator.js +51 -0
  288. package/dist/generators/java/java-opentelemetry-generator.js.map +1 -0
  289. package/dist/generators/java/java-outbox-generator.d.ts +5 -0
  290. package/dist/generators/java/java-outbox-generator.d.ts.map +1 -0
  291. package/dist/generators/java/java-outbox-generator.js +159 -0
  292. package/dist/generators/java/java-outbox-generator.js.map +1 -0
  293. package/dist/generators/java/java-saga-generator.d.ts +5 -0
  294. package/dist/generators/java/java-saga-generator.d.ts.map +1 -0
  295. package/dist/generators/java/java-saga-generator.js +130 -0
  296. package/dist/generators/java/java-saga-generator.js.map +1 -0
  297. package/dist/generators/nestjs/cqrs-generator.d.ts +2 -0
  298. package/dist/generators/nestjs/cqrs-generator.d.ts.map +1 -0
  299. package/dist/generators/nestjs/cqrs-generator.js +42 -0
  300. package/dist/generators/nestjs/cqrs-generator.js.map +1 -0
  301. package/dist/generators/nestjs/idempotency-generator.d.ts +2 -0
  302. package/dist/generators/nestjs/idempotency-generator.d.ts.map +1 -0
  303. package/dist/generators/nestjs/idempotency-generator.js +66 -0
  304. package/dist/generators/nestjs/idempotency-generator.js.map +1 -0
  305. package/dist/generators/nestjs/opentelemetry-generator.d.ts +2 -0
  306. package/dist/generators/nestjs/opentelemetry-generator.d.ts.map +1 -0
  307. package/dist/generators/nestjs/opentelemetry-generator.js +36 -0
  308. package/dist/generators/nestjs/opentelemetry-generator.js.map +1 -0
  309. package/dist/generators/nestjs/outbox-generator.d.ts +2 -0
  310. package/dist/generators/nestjs/outbox-generator.d.ts.map +1 -0
  311. package/dist/generators/nestjs/outbox-generator.js +71 -0
  312. package/dist/generators/nestjs/outbox-generator.js.map +1 -0
  313. package/dist/generators/preset-csharp-dotnet.d.ts +2 -1
  314. package/dist/generators/preset-csharp-dotnet.d.ts.map +1 -1
  315. package/dist/generators/preset-csharp-dotnet.js +262 -13
  316. package/dist/generators/preset-csharp-dotnet.js.map +1 -1
  317. package/dist/generators/preset-flutter.js +1 -1
  318. package/dist/generators/preset-go.d.ts.map +1 -1
  319. package/dist/generators/preset-go.js +2 -3
  320. package/dist/generators/preset-go.js.map +1 -1
  321. package/dist/generators/preset-java-spring.d.ts.map +1 -1
  322. package/dist/generators/preset-java-spring.js +33 -7
  323. package/dist/generators/preset-java-spring.js.map +1 -1
  324. package/dist/generators/preset-php-laravel.js +2 -2
  325. package/dist/generators/preset-php-laravel.js.map +1 -1
  326. package/dist/generators/preset-rust-axum.d.ts.map +1 -1
  327. package/dist/generators/preset-rust-axum.js +1 -2
  328. package/dist/generators/preset-rust-axum.js.map +1 -1
  329. package/dist/generators/presets.d.ts.map +1 -1
  330. package/dist/generators/presets.js +60 -11
  331. package/dist/generators/presets.js.map +1 -1
  332. package/dist/generators/prompts.d.ts.map +1 -1
  333. package/dist/generators/prompts.js +11 -0
  334. package/dist/generators/prompts.js.map +1 -1
  335. package/dist/index.js +73 -0
  336. package/dist/index.js.map +1 -1
  337. package/dist/mcp/mcp-server.d.ts.map +1 -1
  338. package/dist/mcp/mcp-server.js +350 -5
  339. package/dist/mcp/mcp-server.js.map +1 -1
  340. package/dist/plugins/core-generators-plugin.d.ts.map +1 -1
  341. package/dist/plugins/core-generators-plugin.js +54 -3
  342. package/dist/plugins/core-generators-plugin.js.map +1 -1
  343. package/dist/ui/public/index.html +146 -12
  344. package/dist/ui/server.d.ts.map +1 -1
  345. package/dist/ui/server.js +164 -17
  346. package/dist/ui/server.js.map +1 -1
  347. package/dist/utils/file-system.d.ts +1 -0
  348. package/dist/utils/file-system.d.ts.map +1 -1
  349. package/dist/utils/file-system.js +9 -0
  350. package/dist/utils/file-system.js.map +1 -1
  351. package/dist/utils/gitignore-manager.d.ts +2 -0
  352. package/dist/utils/gitignore-manager.d.ts.map +1 -0
  353. package/dist/utils/gitignore-manager.js +71 -0
  354. package/dist/utils/gitignore-manager.js.map +1 -0
  355. package/dist/utils/i18n-cli.d.ts +38 -0
  356. package/dist/utils/i18n-cli.d.ts.map +1 -1
  357. package/dist/utils/i18n-cli.js +50 -2
  358. package/dist/utils/i18n-cli.js.map +1 -1
  359. package/dist/utils/token-estimator.d.ts +11 -0
  360. package/dist/utils/token-estimator.d.ts.map +1 -0
  361. package/dist/utils/token-estimator.js +25 -0
  362. package/dist/utils/token-estimator.js.map +1 -0
  363. package/dist/utils/workspace-detector.d.ts.map +1 -1
  364. package/dist/utils/workspace-detector.js +9 -3
  365. package/dist/utils/workspace-detector.js.map +1 -1
  366. package/docs/COMMANDS.md +86 -10
  367. package/docs/USAGE_GUIDE.md +35 -3
  368. package/package.json +7 -3
package/README.md CHANGED
@@ -3,78 +3,37 @@
3
3
  [![npm version](https://img.shields.io/npm/v/gherkin-ai.svg)](https://www.npmjs.com/package/gherkin-ai)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
5
 
6
- > **The Closed-Loop Agentic Testing & Orchestration Engine for Enterprise Full-Stack Applications.**
7
- > Turn product requirements into verifiable Gherkin specifications, execute dual-stack implementations (React + Java Spring Boot), and run self-healing agent loops with zero regressions.
6
+ > **The Closed-Loop Agentic Testing & Orchestration Engine for Full-Stack Applications.**
7
+ > Turn product requirements into verifiable Gherkin specifications, execute dual-stack implementations (React + Java / PHP / .NET / Python), and experiment with self-healing agent loops.
8
+ >
9
+ > [![CI](https://github.com/FennerEduardo/gherkin-ai-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/FennerEduardo/gherkin-ai-cli/actions/workflows/ci.yml)
10
+ > [![Coverage Status](https://img.shields.io/badge/coverage-100%25-brightgreen.svg)]()
8
11
 
9
12
  ---
10
13
 
11
- ## 🌟 Strategic Capabilities (`v2.6.1` Stable Patch Release)
14
+ ## 🌟 Strategic Capabilities
12
15
 
13
- While basic AI spec tools only generate text prompts, `gherkin-ai` acts as an **executable contract and verification harness** between Product Intent, AI Agents (Cursor, Claude Code, Windsurf, Antigravity), Code Implementation, and CI/CD Quality Gates:
16
+ While basic AI spec tools only generate text prompts, `gherkin-ai` acts as an **executable contract and verification harness** between Product Intent, AI Agents (Cursor, Antigravity, Claude Code, Windsurf, Copilot), Code Implementation, and CI/CD Quality Gates:
14
17
 
15
- - 🤖 **True Agentic Engine & Self-Healing (`ghk verify --auto-fix` & `ghk autopilot`)**: Natively connects with LLMs (OpenAI, Anthropic, Ollama). It doesn't just log output; it actively writes and modifies your source code, intercepts test failures, and recursively applies repairs in a true **Closed-Loop**.
18
+ - 🤖 **AI Agent Implementation Orchestration (`ghk implement`)**: Compiles `.ghkgovernance.yaml`, domain contracts (`*.contract.php`, `.ts`, `.py`, `.java`), ADRs, and Gherkin features into a copy-pasteable Master Agent Implementation Prompt.
19
+ - 🐳 **Docker Container Sandbox & Host Protection (`--docker`)**: Generates stack-specific dev container environments (`mcr.microsoft.com/dotnet/sdk:8.0`, `eclipse-temurin:21-jdk-alpine`, `php:8.3-cli-alpine`, `python:3.11-slim`, `node:20-alpine`, `golang:1.22-alpine`, `ruby:3.3-alpine`) so AI agents run tests inside isolated Docker containers without polluting host OS.
20
+ - 📋 **Feature Inventory & Developer Audit Trail (`ghk audit`)**: Auto-detects developer identity (`git config user.name`/`email`), SHA-256 spec & prompt hashes, timestamps, and execution records stored in `.ghe/inventory.json` with LRU retention limit (`maxEntries: 50`) and `--json` export for CI/CD audit pipelines.
21
+ - ⚡ **Token Efficiency & Ultra-Compact Mode (`-C, --compact`)**: Uses direct `@` file pointers for on-demand context resolution (70–85% token savings vs code dumping) and provides a dense ~90-token compact prompt mode for cost-sensitive LLMs.
22
+ - 🌐 **Multilingual CLI & English Prompt Rationale (`ghk lang`)**: Full interactive CLI support in Spanish (`es`) and English (`en`). Master AI Prompts are intentionally generated in **English** for maximum BPE token density (~30% cheaper) and LLM reasoning accuracy.
23
+ - 🤖 **True Agentic Engine & Self-Healing (EXPERIMENTAL - `ghk verify --auto-fix` & `ghk autopilot`)**: Connects natively with LLMs (OpenAI, Anthropic, Ollama), modifies source code, intercepts test failures, and recursively applies repairs in a true **Closed-Loop**. *Note: Agentic execution is currently experimental and should be run with human supervision.*
16
24
  - 🌐 **Web Studio UI (`ghk web`)**: Launch a premium local graphical interface to interactively generate your Gherkin specifications, detect your stack, and orchestrate agent prompts visually.
17
- - 🌳 **Official Cucumber AST Parser**: 100% compliant with the Gherkin standard using the official `@cucumber/gherkin` package. Flawlessly parses DataTables, DocStrings, and advanced scenarios for semantic extraction.
18
- - 🔗 **AST Step Definitions Indexer**: Prevents AI hallucinations by statically analyzing your E2E project (Cypress/Playwright/Cucumber-JS) via `ts-morph`, extracting existing `Given/When/Then` steps, and forcing the LLM to reuse them.
19
- - 🛡️ **Semantically Typed Contracts**: Extracts variables straight from your Gherkin data tables (like `@validate:email`) and outputs strictly typed Zod DTOs instead of generic objects.
20
- - ⚙️ **Headless CI/CD Mode**: Fully decoupled non-interactive mode (`--yes`, `--non-interactive`, `--project <dir>`) designed for frictionless integration into GitHub Actions, Azure DevOps, and automated pipelines.
21
- - 📋 **Pre-flight Requirement Validation**: Built-in semantic validator inside `ghk autopilot` that analyzes requirements before triggering LLM agents, preventing token waste on vague features.
22
- - 🔌 **Native MCP Server & Cursor Skills (`ghk mcp install` & `ghk skill`)**: Zero-config Model Context Protocol (MCP) server. The new `ghk skill` command injects native Cursor and Windsurf `.cursorrules` to let your IDE automatically invoke Gherkin AI as an internal skill.
23
- - 📦 **Context Engineering & Guardrails Engine (`ghk context`)**: Structurally packages project architecture, conventions, and security policies into `.ghe/`, enforcing strict path protection and agent change limits.
24
- - 🏗️ **DOM & Data Model Anchor**: Automatically extracts `schema.prisma` models and Page Object Model (POM) `data-test` selectors, injecting them into the agent's context to ensure generated tests are grounded in technical reality.
25
- - 🏆 **Dynamic Quality Gate Index (`ghk quality`)**: Measures spec coverage, unit tests, E2E, type safety, and security dynamically by parsing your real test coverage (`coverage-summary.json`) and linter outputs.
26
- - ☕ **Enterprise Java, React, Rust & Go Templates**: Extensive boilerplate support. Scaffolds Spring Boot, Next.js, Rust Axum, Go Fiber, and mobile (Flutter/React Native) architectures out-of-the-box.
27
- - 🕵️ **Interactive Stack & Pattern Detection (`ghk detect`)**: Auto-detects existing brownfield architectures and intelligently injects industry-standard design patterns (e.g., Hooks, CQRS, MVC) into Agent prompts.
28
- - 📡 **Event-Driven & AsyncAPI Support**: Automatically extracts domain events from Gherkin and scaffolds standard `asyncapi.json` contracts.
29
- - 🔍 **Deep AST Drift Detection (`ghk diff`)**: Validates in CI/CD pipelines if the implemented DTOs and code have drifted from the `.feature` file. Now cross-references semantic fields, HTTP status codes, and API Endpoints.
25
+ - 🌳 **Official Cucumber AST Parser**: 100% compliant with the Gherkin standard using the official `@cucumber/gherkin` package.
30
26
 
31
27
  ---
32
28
 
33
- ## 📥 Installation & Execution (`v2.6.1`)
29
+ ## 📥 Installation & Execution
34
30
 
35
- You can use `gherkin-ai` via global `npm` installation, on-demand zero-install `npx`, or as a project local dev dependency:
36
-
37
- ### Option 1: Global Installation (`npm`)
38
31
  ```bash
32
+ # Global Installation
39
33
  npm install -g gherkin-ai
40
- ```
41
- Once installed globally, you can use `ghk` or `gherkin-ai` CLI commands directly:
42
- ```bash
43
- ghk mcp install
44
- ghk verify --auto-fix
45
- ghk context build
46
- ghk quality
47
- ```
48
-
49
- ### Option 2: Zero-Install On-Demand (`npx`)
50
- Run any `gherkin-ai` command instantly without global installation:
51
- ```bash
52
- # Auto-install MCP server for Cursor & Claude Desktop
53
- npx -y gherkin-ai mcp install
54
-
55
- # Run closed-loop verification test harness
56
- npx -y gherkin-ai verify --auto-fix
57
34
 
58
- # Build project context & guardrails (.ghe/)
59
- npx -y gherkin-ai context build
60
-
61
- # Calculate feature quality score index
62
- npx -y gherkin-ai quality
63
- ```
64
-
65
- ### Option 3: Local Project Dev Dependency
66
- Add to your project's `devDependencies`:
67
- ```bash
68
- npm install --save-dev gherkin-ai
69
- ```
70
- Then invoke via `npx` or add scripts to your `package.json`:
71
- ```json
72
- {
73
- "scripts": {
74
- "test:verify": "ghk verify --auto-fix",
75
- "quality:check": "ghk quality"
76
- }
77
- }
35
+ # Or Zero-Install On-Demand
36
+ npx -y gherkin-ai implement --feature ./features/01-customer-management.feature
78
37
  ```
79
38
 
80
39
  ---
@@ -82,20 +41,23 @@ Then invoke via `npx` or add scripts to your `package.json`:
82
41
  ## 🚀 Quick Start Commands
83
42
 
84
43
  ```bash
85
- # 1. Setup MCP Server for Cursor & Claude Desktop
86
- ghk mcp install # (or: npx -y gherkin-ai mcp install)
44
+ # 1. Generate Master AI Agent Implementation Prompt & Context Package
45
+ ghk implement --feature ./features/01-customer-management.feature
87
46
 
88
- # 2. Closed-Loop Test Verification with Auto-Fix Loop
89
- ghk verify --auto-fix
47
+ # 2. Generate Ultra-Compact Prompt for Low-Cost LLMs (~90 tokens)
48
+ ghk implement --feature ./features/01-customer-management.feature --compact
90
49
 
91
- # 3. Create a feature using Caveman Mode (skip wizard)
92
- ghk create --caveman
50
+ # 3. View Feature Inventory & Developer Audit Trail History
51
+ ghk audit
93
52
 
94
- # 4. Auto-detect project stack & suggest design patterns
95
- ghk detect
53
+ # 4. Export Audit History as JSON for CI/CD Compliance Pipelines
54
+ ghk audit --json
96
55
 
97
- # 5. Build Project Context & Policy Engine (.ghe/)
98
- ghk context build
56
+ # 5. Configure CLI Language (English or Spanish)
57
+ ghk lang --set es
58
+
59
+ # 6. Run Closed-Loop Test Verification with Auto-Fix Loop
60
+ ghk verify --auto-fix
99
61
  ```
100
62
 
101
63
  ---
@@ -2,5 +2,7 @@ export declare function handleAddCommand(options: {
2
2
  feature?: string;
3
3
  target?: string;
4
4
  config?: string;
5
+ yes?: boolean;
6
+ nonInteractive?: boolean;
5
7
  }): Promise<void>;
6
8
  //# sourceMappingURL=add.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAeA,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8FrH"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAgBA,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsG9J"}
@@ -8,35 +8,36 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.handleAddCommand = handleAddCommand;
10
10
  const path_1 = __importDefault(require("path"));
11
- const inquirer_1 = __importDefault(require("inquirer"));
12
11
  const config_1 = require("../core/config");
13
12
  const stack_detector_1 = require("../core/stack-detector");
14
13
  const gherkin_parser_1 = require("../core/gherkin-parser");
15
14
  const contracts_1 = require("../generators/contracts");
16
15
  const prompts_1 = require("../generators/prompts");
16
+ const ir_builder_1 = require("../core/ir-builder");
17
17
  const create_1 = require("./create");
18
18
  const file_system_1 = require("../utils/file-system");
19
19
  const logger_1 = require("../utils/logger");
20
20
  async function handleAddCommand(options) {
21
21
  logger_1.logger.banner();
22
+ const { promptOrFallback } = require('../utils/i18n-cli');
22
23
  if (!options.feature) {
23
24
  logger_1.logger.info('No --feature file specified. Launching interactive spec wizard...');
24
- await (0, create_1.handleCreateCommand)({ target: options.target });
25
+ await (0, create_1.handleCreateCommand)({ target: options.target, yes: options.yes, nonInteractive: options.nonInteractive });
25
26
  return;
26
27
  }
27
28
  const featurePath = path_1.default.resolve(process.cwd(), options.feature);
28
29
  if (!(0, file_system_1.fileExistsSync)(featurePath)) {
29
30
  logger_1.logger.warn(`Feature file not found at: ${featurePath}`);
30
- const answer = await inquirer_1.default.prompt([
31
+ const answer = await promptOrFallback([
31
32
  {
32
33
  type: 'confirm',
33
34
  name: 'createNow',
34
35
  message: '¿Deseas crear la especificación Gherkin paso a paso ahora (wizard interactivo)?',
35
36
  default: true
36
37
  }
37
- ]);
38
+ ], options);
38
39
  if (answer.createNow) {
39
- await (0, create_1.handleCreateCommand)({ output: options.feature, target: options.target });
40
+ await (0, create_1.handleCreateCommand)({ output: options.feature, target: options.target, yes: options.yes, nonInteractive: options.nonInteractive });
40
41
  return;
41
42
  }
42
43
  else {
@@ -53,13 +54,18 @@ async function handleAddCommand(options) {
53
54
  const gherkinText = (0, file_system_1.readFileSync)(featurePath);
54
55
  const parsed = (0, gherkin_parser_1.parseGherkinText)(gherkinText);
55
56
  const featurePascal = parsed.featureName.replace(/[^a-zA-Z0-9]/g, '') || 'Feature';
56
- const targetDir = options.target
57
+ let targetDir = options.target
57
58
  ? path_1.default.resolve(process.cwd(), options.target)
58
59
  : path_1.default.resolve(process.cwd(), 'src', 'modules', featurePascal.toLowerCase());
60
+ if (!targetDir.startsWith(process.cwd())) {
61
+ logger_1.logger.error(`Security Violation: Target path escapes the current workspace: ${targetDir}`);
62
+ process.exit(1);
63
+ }
59
64
  (0, file_system_1.ensureDirSync)(targetDir);
60
65
  logger_1.logger.info(`Injecting contracts & AI prompts into: ${targetDir}`);
61
66
  // 1. Generate Contracts, OpenAPI, AsyncAPI & Native Language Contract
62
- const { contractsTs, adrMd, openApiJson, asyncApiJson, nativeContract } = (0, contracts_1.generateContracts)(parsed, config);
67
+ const ir = (0, ir_builder_1.buildSpecificationIR)(parsed, featurePath, { domainProfile: config.domainProfile });
68
+ const { contractsTs, adrMd, openApiJson, asyncApiJson, nativeContract } = (0, contracts_1.generateContracts)(parsed, ir, config);
63
69
  const contractFileName = `${featurePascal.toLowerCase()}.contract.ts`;
64
70
  (0, file_system_1.writeFileSync)(path_1.default.join(targetDir, contractFileName), contractsTs);
65
71
  (0, file_system_1.writeFileSync)(path_1.default.join(targetDir, `${featurePascal.toLowerCase()}.openapi.json`), openApiJson);
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function handleAgentLogCommand(options: {
2
+ action?: string;
3
+ feature?: string;
4
+ list?: boolean;
5
+ json?: boolean;
6
+ clear?: boolean;
7
+ }): Promise<void>;
8
+ //# sourceMappingURL=agent-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-log.d.ts","sourceRoot":"","sources":["../../src/commands/agent-log.ts"],"names":[],"mappings":"AAQA,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhB"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /* ==========================================================================
3
+ gherkin-ai-cli - 'agent-log' Command Handler
4
+ ========================================================================== */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.handleAgentLogCommand = handleAgentLogCommand;
7
+ const agent_logger_1 = require("../core/agent-logger");
8
+ const logger_1 = require("../utils/logger");
9
+ async function handleAgentLogCommand(options) {
10
+ const manager = new agent_logger_1.AgentLogManager(process.cwd());
11
+ if (options.clear) {
12
+ manager.clearLogs();
13
+ logger_1.logger.success('Agent action logs cleared successfully.');
14
+ return;
15
+ }
16
+ if (options.action) {
17
+ const featureName = options.feature || 'Global Action';
18
+ manager.recordAction(featureName, options.action);
19
+ logger_1.logger.success(`Agent action logged for feature: ${featureName}`);
20
+ return;
21
+ }
22
+ // Display logs (list mode)
23
+ const records = manager.getLogs(options.feature);
24
+ if (options.json) {
25
+ console.log(JSON.stringify(records, null, 2));
26
+ return;
27
+ }
28
+ console.log(manager.formatCLIReport(records));
29
+ }
30
+ //# sourceMappingURL=agent-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-log.js","sourceRoot":"","sources":["../../src/commands/agent-log.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;AAMhF,sDA+BC;AAnCD,uDAAuD;AACvD,4CAAyC;AAGlC,KAAK,UAAU,qBAAqB,CAAC,OAM3C;IACC,MAAM,OAAO,GAAG,IAAI,8BAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEnD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,eAAM,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;QACvD,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAClD,eAAM,CAAC,OAAO,CAAC,oCAAoC,WAAW,EAAE,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,2BAA2B;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function handleAuditCommand(options: {
2
+ feature?: string;
3
+ json?: boolean;
4
+ clear?: boolean;
5
+ }): Promise<void>;
6
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAOA,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBtH"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ /* ==========================================================================
3
+ gherkin-ai-cli - 'audit' Command Handler (Feature Inventory & Audit Trail)
4
+ ========================================================================== */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.handleAuditCommand = handleAuditCommand;
7
+ const logger_1 = require("../utils/logger");
8
+ const inventory_1 = require("../core/inventory");
9
+ async function handleAuditCommand(options) {
10
+ const manager = new inventory_1.InventoryManager();
11
+ if (options.clear) {
12
+ manager.clearInventory();
13
+ logger_1.logger.success('Feature audit trail inventory cleared successfully.');
14
+ return;
15
+ }
16
+ const isJson = options.json || process.argv.includes('--json');
17
+ if (!isJson) {
18
+ logger_1.logger.banner();
19
+ logger_1.logger.info('Retrieving Feature Implementation & Prompt Audit Records...');
20
+ }
21
+ const records = manager.getInventory(options.feature);
22
+ if (isJson) {
23
+ console.log(JSON.stringify(records, null, 2));
24
+ return;
25
+ }
26
+ console.log(manager.formatCLIReport(records));
27
+ logger_1.logger.success(`Audit trail query complete. (${records.length} record(s) found)`);
28
+ }
29
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;AAKhF,gDAyBC;AA5BD,4CAAyC;AACzC,iDAAqD;AAE9C,KAAK,UAAU,kBAAkB,CAAC,OAA8D;IACrG,MAAM,OAAO,GAAG,IAAI,4BAAgB,EAAE,CAAC;IAEvC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,cAAc,EAAE,CAAC;QACzB,eAAM,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE/D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,eAAM,CAAC,MAAM,EAAE,CAAC;QAChB,eAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,eAAM,CAAC,OAAO,CAAC,gCAAgC,OAAO,CAAC,MAAM,mBAAmB,CAAC,CAAC;AACpF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"autopilot.d.ts","sourceRoot":"","sources":["../../src/commands/autopilot.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,sBAAsB,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmK1F"}
1
+ {"version":3,"file":"autopilot.d.ts","sourceRoot":"","sources":["../../src/commands/autopilot.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAiBD,wBAAsB,sBAAsB,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyS1F"}
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
  /* ==========================================================================
3
3
  gherkin-ai-cli - 'autopilot' Command Handler (Multi-Agent Orchestrator)
4
+
5
+ Enhanced with:
6
+ - Pre-lint validation of generated specifications
7
+ - IR structural validation (commands, events, scenarios)
8
+ - Structured JSON run logging for traceability
4
9
  ========================================================================== */
5
10
  var __importDefault = (this && this.__importDefault) || function (mod) {
6
11
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -11,39 +16,77 @@ const chalk_1 = __importDefault(require("chalk"));
11
16
  const fs_1 = __importDefault(require("fs"));
12
17
  const path_1 = __importDefault(require("path"));
13
18
  const context_builder_1 = require("../core/context-builder");
14
- const quality_score_1 = require("../core/quality-score");
19
+ const risk_engine_1 = require("../core/risk-engine");
15
20
  const agent_adapter_1 = require("../core/agent-adapter");
16
21
  const verify_1 = require("./verify");
17
22
  const config_1 = require("../core/config");
18
23
  const spec_dir_resolver_1 = require("../utils/spec-dir-resolver");
19
24
  const requirement_validator_1 = require("../core/requirement-validator");
25
+ const metrics_engine_1 = require("../core/metrics-engine");
20
26
  async function handleAutopilotCommand(options = {}) {
21
27
  console.log(chalk_1.default.bold.cyan('\n🚀 Launching gherkin-ai Autopilot Autonomous Delivery Orchestrator...\n'));
28
+ const runLog = {
29
+ runId: `run-${Date.now()}`,
30
+ timestamp: new Date().toISOString(),
31
+ requirementFile: '',
32
+ requirementScore: 0,
33
+ specGenerated: false,
34
+ lintScore: null,
35
+ irValidation: null,
36
+ scaffoldingResult: 'skipped',
37
+ verifyIterations: 0,
38
+ riskLevel: 'UNKNOWN',
39
+ riskScore: 0,
40
+ finalStatus: 'failed'
41
+ };
42
+ const metricsEngine = new metrics_engine_1.MetricsEngine();
43
+ const execEvents = [];
44
+ const execErrors = [];
22
45
  const reqFile = options.requirement || 'requirement.md';
46
+ runLog.requirementFile = reqFile;
23
47
  if (!fs_1.default.existsSync(reqFile)) {
24
48
  console.log(chalk_1.default.red(`\n✖ Requirement file not found: ${reqFile}`));
25
49
  console.log(chalk_1.default.yellow(` → Fix: Provide a valid path with --requirement <file>`));
26
50
  console.log(chalk_1.default.yellow(` → Example: ghk autopilot --requirement docs/user-crud.md\n`));
51
+ saveRunLog(runLog);
27
52
  process.exitCode = 1;
28
53
  return;
29
54
  }
30
55
  const reqContent = fs_1.default.readFileSync(reqFile, 'utf8');
31
56
  // Validate requirement before proceeding with agents
32
57
  const validation = (0, requirement_validator_1.validateRequirement)(reqContent);
58
+ runLog.requirementScore = validation.score;
33
59
  if (!validation.isValid) {
34
60
  console.log(chalk_1.default.red('\n✖ Requirement validation failed:'));
35
61
  for (const issue of validation.issues) {
36
- console.log(chalk_1.default.yellow(` ⚠ ${issue.message}`));
62
+ const icon = issue.severity === 'error' ? '✖' : issue.severity === 'warning' ? '⚠' : 'ℹ';
63
+ const color = issue.severity === 'error' ? chalk_1.default.red : issue.severity === 'warning' ? chalk_1.default.yellow : chalk_1.default.gray;
64
+ console.log(color(` ${icon} [${issue.severity.toUpperCase()}] ${issue.message}`));
37
65
  console.log(chalk_1.default.gray(` → ${issue.suggestion}`));
38
66
  }
67
+ console.log(chalk_1.default.cyan(`\n Requirement quality score: ${validation.score}/100`));
68
+ saveRunLog(runLog);
39
69
  process.exitCode = 1;
40
70
  return;
41
71
  }
72
+ // Show warnings even if valid
73
+ const warnings = validation.issues.filter(i => i.severity !== 'error');
74
+ if (warnings.length > 0) {
75
+ console.log(chalk_1.default.yellow(`\n⚠ Requirement passed with ${warnings.length} warning(s) (score: ${validation.score}/100):`));
76
+ for (const w of warnings) {
77
+ console.log(chalk_1.default.yellow(` ⚠ ${w.message}`));
78
+ }
79
+ console.log('');
80
+ }
81
+ else {
82
+ console.log(chalk_1.default.green(`✓ Requirement validation passed (score: ${validation.score}/100)\n`));
83
+ }
42
84
  const { detectPromptInjection } = require('../core/security-sanitizer');
43
85
  const securityCheck = detectPromptInjection(reqContent);
44
86
  if (!securityCheck.isSafe) {
45
87
  console.log(chalk_1.default.red('\n✖ SECURITY ALERT: Prompt Injection Attempt Blocked!'));
46
88
  console.log(chalk_1.default.red(` ⚠ Reason: ${securityCheck.reason}`));
89
+ saveRunLog(runLog);
47
90
  process.exitCode = 1;
48
91
  return;
49
92
  }
@@ -65,11 +108,14 @@ async function handleAutopilotCommand(options = {}) {
65
108
  }
66
109
  catch (error) {
67
110
  console.log(chalk_1.default.red(`\n✖ Spec Agent execution crashed: ${error.message}`));
111
+ saveRunLog(runLog);
68
112
  process.exitCode = 1;
69
113
  return;
70
114
  }
71
115
  let specContent = '';
72
116
  if (specRes.success && specRes.codeModifications && specRes.codeModifications.length > 0) {
117
+ metricsEngine.recordAgentAttempt(specRes.tokensUsed || 0, specRes.codeModifications.length);
118
+ execEvents.push({ type: 'spec_agent_attempt', tokens: specRes.tokensUsed });
73
119
  let specDirPath = process.env.GHK_SPEC_DIR || configInstance.specDir || 'specs';
74
120
  try {
75
121
  specDirPath = (0, spec_dir_resolver_1.resolveSpecDir)(configInstance.specDir);
@@ -85,7 +131,8 @@ async function handleAutopilotCommand(options = {}) {
85
131
  else if (!p.includes('/') && !p.includes('\\')) {
86
132
  p = path_1.default.join(specDirPath, p);
87
133
  }
88
- const fullPath = path_1.default.resolve(p);
134
+ const { resolveSafePath } = require('../utils/file-system');
135
+ const fullPath = resolveSafePath(process.cwd(), p);
89
136
  if (process.env.GHK_DRY_RUN === 'true') {
90
137
  if (process.env.GHK_STDOUT === 'true') {
91
138
  console.log(chalk_1.default.yellow(` [DRY RUN] Proposed spec for ${p}:\n${mod.content}`));
@@ -107,6 +154,7 @@ async function handleAutopilotCommand(options = {}) {
107
154
  specContent = mod.content;
108
155
  }
109
156
  }
157
+ runLog.specGenerated = true;
110
158
  }
111
159
  else {
112
160
  const { saveFailedAttemptLog } = require('../core/agent-adapter');
@@ -114,9 +162,46 @@ async function handleAutopilotCommand(options = {}) {
114
162
  console.log(chalk_1.default.red(`\n✖ Spec Agent failed to generate valid code blocks.`));
115
163
  console.log(chalk_1.default.yellow(` Response from Agent:\n${specRes.agentResponse.substring(0, 300)}...\n`));
116
164
  console.log(chalk_1.default.cyan(` → Diagnostics log saved to: ${logPath}\n`));
165
+ saveRunLog(runLog);
117
166
  process.exitCode = 1;
118
167
  return;
119
168
  }
169
+ // ── Pre-Lint Validation of Generated Spec ──────────────────────────
170
+ if (specContent) {
171
+ try {
172
+ const { parseGherkinText } = require('../core/gherkin-parser');
173
+ const { lintSpecification } = require('../core/specification-linter');
174
+ const { buildIR } = require('../core/ir-builder');
175
+ const parsed = parseGherkinText(specContent);
176
+ const lintResult = lintSpecification(parsed, 'autopilot-generated.feature');
177
+ runLog.lintScore = lintResult.score;
178
+ console.log(chalk_1.default.blue(` 🔍 Pre-lint score of generated spec: ${lintResult.score}/100`));
179
+ if (lintResult.score < 60) {
180
+ console.log(chalk_1.default.red(` ✖ Generated specification quality is too low (${lintResult.score}/100). Minimum: 60.`));
181
+ for (const d of lintResult.diagnostics.filter((d) => d.severity === 'error').slice(0, 5)) {
182
+ console.log(chalk_1.default.red(` ✖ [${d.ruleId}] ${d.message}`));
183
+ }
184
+ console.log(chalk_1.default.yellow(` → Consider improving the requirement document and retrying.\n`));
185
+ saveRunLog(runLog);
186
+ process.exitCode = 1;
187
+ return;
188
+ }
189
+ // IR Structural Validation
190
+ const ir = buildIR(parsed, 'autopilot-generated.feature');
191
+ runLog.irValidation = {
192
+ commands: ir.commands?.length || 0,
193
+ events: ir.events?.length || 0,
194
+ scenarios: ir.scenarios?.length || 0
195
+ };
196
+ console.log(chalk_1.default.blue(` 🧠 IR Validation: ${ir.commands?.length || 0} command(s), ${ir.events?.length || 0} event(s), ${ir.scenarios?.length || 0} scenario(s)`));
197
+ if ((ir.commands?.length || 0) === 0 && (ir.events?.length || 0) === 0) {
198
+ console.log(chalk_1.default.yellow(` ⚠ Warning: Generated spec has no extractable commands or events. Agent prompts may lack context.`));
199
+ }
200
+ }
201
+ catch (lintErr) {
202
+ console.log(chalk_1.default.yellow(` ⚠ Pre-lint skipped: ${lintErr.message}`));
203
+ }
204
+ }
120
205
  console.log(chalk_1.default.blue(`3. Invoking Scaffolding Agent -> Generating Bindings...`));
121
206
  let scaffoldRes;
122
207
  try {
@@ -129,17 +214,35 @@ async function handleAutopilotCommand(options = {}) {
129
214
  }
130
215
  catch (error) {
131
216
  console.log(chalk_1.default.red(`\n✖ Scaffolding Agent execution crashed: ${error.message}`));
217
+ runLog.scaffoldingResult = 'failed';
218
+ saveRunLog(runLog);
132
219
  process.exitCode = 1;
133
220
  return;
134
221
  }
135
222
  if (scaffoldRes.success && scaffoldRes.codeModifications && scaffoldRes.codeModifications.length > 0) {
223
+ metricsEngine.recordAgentAttempt(scaffoldRes.tokensUsed || 0, scaffoldRes.codeModifications.length);
224
+ execEvents.push({ type: 'scaffold_agent_attempt', tokens: scaffoldRes.tokensUsed });
225
+ runLog.scaffoldingResult = 'success';
136
226
  const { validateTypeScriptSyntax } = require('../core/syntax-validator');
137
227
  for (const mod of scaffoldRes.codeModifications) {
138
228
  if (!validateTypeScriptSyntax(mod.filePath, mod.content)) {
139
229
  console.log(chalk_1.default.yellow(` ✖ Skipped writing ${mod.filePath} due to syntax errors.`));
140
230
  continue;
141
231
  }
142
- const fullPath = path_1.default.resolve(mod.filePath);
232
+ const { validateGuardrails } = require('../core/guardrails');
233
+ const guardrailValidation = validateGuardrails({
234
+ action: 'generate_code',
235
+ targetFiles: [mod.filePath]
236
+ }, process.cwd());
237
+ if (!guardrailValidation.allowed) {
238
+ console.log(chalk_1.default.red(` ✖ GUARDRAIL VIOLATION: Agent changes rejected for ${mod.filePath}.`));
239
+ for (const v of guardrailValidation.violations) {
240
+ console.log(chalk_1.default.red(` - ${v}`));
241
+ }
242
+ continue;
243
+ }
244
+ const { resolveSafePath } = require('../utils/file-system');
245
+ const fullPath = resolveSafePath(process.cwd(), mod.filePath);
143
246
  if (process.env.GHK_DRY_RUN === 'true') {
144
247
  if (process.env.GHK_STDOUT === 'true') {
145
248
  console.log(chalk_1.default.yellow(` [DRY RUN] Proposed bindings for ${mod.filePath}:\n${mod.content}`));
@@ -165,14 +268,46 @@ async function handleAutopilotCommand(options = {}) {
165
268
  console.log(chalk_1.default.red(`\n✖ Scaffolding Agent failed to generate valid code blocks.`));
166
269
  console.log(chalk_1.default.yellow(` Response from Agent:\n${scaffoldRes.agentResponse.substring(0, 300)}...\n`));
167
270
  console.log(chalk_1.default.cyan(` → Diagnostics log saved to: ${logPath}\n`));
271
+ runLog.scaffoldingResult = 'failed';
272
+ saveRunLog(runLog);
168
273
  process.exitCode = 1;
169
274
  return;
170
275
  }
171
276
  console.log(chalk_1.default.blue(`4. Invoking Verification Agent & Closed-Loop Repair...`));
172
277
  await (0, verify_1.handleVerifyCommand)({ autoFix: true, maxRetries: 2, command: options.command });
173
278
  console.log(chalk_1.default.blue(`5. Evaluating Enterprise Quality Score Gate...`));
174
- const scorecard = (0, quality_score_1.calculateQualityScorecard)(process.cwd(), configInstance.specDir);
175
- console.log(chalk_1.default.bold.green(`\n✅ Autopilot Execution Complete! Quality Score: ${scorecard.overallScore}%`));
176
- console.log(chalk_1.default.bold.cyan(` Ready for PR Review & Human Approval.\n`));
279
+ const riskCard = (0, risk_engine_1.calculateDeliveryRisk)(process.cwd(), configInstance.specDir);
280
+ runLog.riskLevel = riskCard.riskLevel;
281
+ runLog.riskScore = riskCard.overallRiskScore;
282
+ console.log('\n======================================================');
283
+ console.log(chalk_1.default.bold(' Autopilot Deployment Risk Assessment'));
284
+ console.log('======================================================');
285
+ const riskColor = riskCard.riskLevel === 'CRITICAL' || riskCard.riskLevel === 'HIGH' ? chalk_1.default.red :
286
+ riskCard.riskLevel === 'MEDIUM' ? chalk_1.default.yellow : chalk_1.default.green;
287
+ console.log(chalk_1.default.bold(`Risk Level: ${riskColor(riskCard.riskLevel)} (Score: ${riskCard.overallRiskScore})`));
288
+ if (riskCard.requiresHumanApproval) {
289
+ console.log(chalk_1.default.red('⚠ This change is highly risky and requires human approval.'));
290
+ runLog.finalStatus = 'failed';
291
+ }
292
+ else {
293
+ console.log(chalk_1.default.green('✅ This change is considered safe for autonomous delivery.'));
294
+ runLog.finalStatus = 'success';
295
+ }
296
+ console.log('\nRun `ghk quality` to see a detailed risk breakdown.\n');
297
+ metricsEngine.setRequirements(validation.score > 70 ? 10 : 5, 10); // Mock coverage mapping
298
+ const logPath = metricsEngine.saveExecutionLog(execEvents, execErrors);
299
+ console.log(chalk_1.default.bold.magenta(`\n📊 DVE Metrics & Execution Log saved to: ${logPath}`));
300
+ saveRunLog(runLog);
301
+ }
302
+ function saveRunLog(log) {
303
+ try {
304
+ const logDir = path_1.default.resolve('.gherkin-ai', 'logs', 'autopilot');
305
+ fs_1.default.mkdirSync(logDir, { recursive: true });
306
+ const logPath = path_1.default.join(logDir, `${log.runId}.json`);
307
+ fs_1.default.writeFileSync(logPath, JSON.stringify(log, null, 2), 'utf8');
308
+ }
309
+ catch {
310
+ // Non-critical: don't crash if logging fails
311
+ }
177
312
  }
178
313
  //# sourceMappingURL=autopilot.js.map