wiggum-cli 0.1.0

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 (236) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +341 -0
  3. package/bin/ralph.js +8 -0
  4. package/dist/ai/enhancer.d.ts +100 -0
  5. package/dist/ai/enhancer.d.ts.map +1 -0
  6. package/dist/ai/enhancer.js +233 -0
  7. package/dist/ai/enhancer.js.map +1 -0
  8. package/dist/ai/index.d.ts +8 -0
  9. package/dist/ai/index.d.ts.map +1 -0
  10. package/dist/ai/index.js +11 -0
  11. package/dist/ai/index.js.map +1 -0
  12. package/dist/ai/prompts.d.ts +26 -0
  13. package/dist/ai/prompts.d.ts.map +1 -0
  14. package/dist/ai/prompts.js +201 -0
  15. package/dist/ai/prompts.js.map +1 -0
  16. package/dist/ai/providers.d.ts +35 -0
  17. package/dist/ai/providers.d.ts.map +1 -0
  18. package/dist/ai/providers.js +104 -0
  19. package/dist/ai/providers.js.map +1 -0
  20. package/dist/cli.d.ts +6 -0
  21. package/dist/cli.d.ts.map +1 -0
  22. package/dist/cli.js +196 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/commands/init.d.ts +16 -0
  25. package/dist/commands/init.d.ts.map +1 -0
  26. package/dist/commands/init.js +124 -0
  27. package/dist/commands/init.js.map +1 -0
  28. package/dist/commands/monitor.d.ts +17 -0
  29. package/dist/commands/monitor.d.ts.map +1 -0
  30. package/dist/commands/monitor.js +342 -0
  31. package/dist/commands/monitor.js.map +1 -0
  32. package/dist/commands/new.d.ts +19 -0
  33. package/dist/commands/new.d.ts.map +1 -0
  34. package/dist/commands/new.js +272 -0
  35. package/dist/commands/new.js.map +1 -0
  36. package/dist/commands/run.d.ts +16 -0
  37. package/dist/commands/run.d.ts.map +1 -0
  38. package/dist/commands/run.js +175 -0
  39. package/dist/commands/run.js.map +1 -0
  40. package/dist/generator/config.d.ts +59 -0
  41. package/dist/generator/config.d.ts.map +1 -0
  42. package/dist/generator/config.js +68 -0
  43. package/dist/generator/config.js.map +1 -0
  44. package/dist/generator/index.d.ts +64 -0
  45. package/dist/generator/index.d.ts.map +1 -0
  46. package/dist/generator/index.js +147 -0
  47. package/dist/generator/index.js.map +1 -0
  48. package/dist/generator/templates.d.ts +70 -0
  49. package/dist/generator/templates.d.ts.map +1 -0
  50. package/dist/generator/templates.js +296 -0
  51. package/dist/generator/templates.js.map +1 -0
  52. package/dist/generator/writer.d.ts +93 -0
  53. package/dist/generator/writer.d.ts.map +1 -0
  54. package/dist/generator/writer.js +213 -0
  55. package/dist/generator/writer.js.map +1 -0
  56. package/dist/index.d.ts +12 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +17 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/scanner/detectors/core/framework.d.ts +11 -0
  61. package/dist/scanner/detectors/core/framework.d.ts.map +1 -0
  62. package/dist/scanner/detectors/core/framework.js +275 -0
  63. package/dist/scanner/detectors/core/framework.js.map +1 -0
  64. package/dist/scanner/detectors/core/packageManager.d.ts +11 -0
  65. package/dist/scanner/detectors/core/packageManager.d.ts.map +1 -0
  66. package/dist/scanner/detectors/core/packageManager.js +74 -0
  67. package/dist/scanner/detectors/core/packageManager.js.map +1 -0
  68. package/dist/scanner/detectors/core/styling.d.ts +12 -0
  69. package/dist/scanner/detectors/core/styling.d.ts.map +1 -0
  70. package/dist/scanner/detectors/core/styling.js +230 -0
  71. package/dist/scanner/detectors/core/styling.js.map +1 -0
  72. package/dist/scanner/detectors/core/testing.d.ts +12 -0
  73. package/dist/scanner/detectors/core/testing.d.ts.map +1 -0
  74. package/dist/scanner/detectors/core/testing.js +190 -0
  75. package/dist/scanner/detectors/core/testing.js.map +1 -0
  76. package/dist/scanner/detectors/data/api.d.ts +12 -0
  77. package/dist/scanner/detectors/data/api.d.ts.map +1 -0
  78. package/dist/scanner/detectors/data/api.js +261 -0
  79. package/dist/scanner/detectors/data/api.js.map +1 -0
  80. package/dist/scanner/detectors/data/database.d.ts +12 -0
  81. package/dist/scanner/detectors/data/database.d.ts.map +1 -0
  82. package/dist/scanner/detectors/data/database.js +213 -0
  83. package/dist/scanner/detectors/data/database.js.map +1 -0
  84. package/dist/scanner/detectors/data/orm.d.ts +12 -0
  85. package/dist/scanner/detectors/data/orm.d.ts.map +1 -0
  86. package/dist/scanner/detectors/data/orm.js +160 -0
  87. package/dist/scanner/detectors/data/orm.js.map +1 -0
  88. package/dist/scanner/detectors/frontend/formHandling.d.ts +12 -0
  89. package/dist/scanner/detectors/frontend/formHandling.d.ts.map +1 -0
  90. package/dist/scanner/detectors/frontend/formHandling.js +211 -0
  91. package/dist/scanner/detectors/frontend/formHandling.js.map +1 -0
  92. package/dist/scanner/detectors/frontend/stateManagement.d.ts +12 -0
  93. package/dist/scanner/detectors/frontend/stateManagement.d.ts.map +1 -0
  94. package/dist/scanner/detectors/frontend/stateManagement.js +221 -0
  95. package/dist/scanner/detectors/frontend/stateManagement.js.map +1 -0
  96. package/dist/scanner/detectors/frontend/uiComponents.d.ts +12 -0
  97. package/dist/scanner/detectors/frontend/uiComponents.d.ts.map +1 -0
  98. package/dist/scanner/detectors/frontend/uiComponents.js +285 -0
  99. package/dist/scanner/detectors/frontend/uiComponents.js.map +1 -0
  100. package/dist/scanner/detectors/infra/deployment.d.ts +12 -0
  101. package/dist/scanner/detectors/infra/deployment.d.ts.map +1 -0
  102. package/dist/scanner/detectors/infra/deployment.js +301 -0
  103. package/dist/scanner/detectors/infra/deployment.js.map +1 -0
  104. package/dist/scanner/detectors/infra/monorepo.d.ts +12 -0
  105. package/dist/scanner/detectors/infra/monorepo.d.ts.map +1 -0
  106. package/dist/scanner/detectors/infra/monorepo.js +219 -0
  107. package/dist/scanner/detectors/infra/monorepo.js.map +1 -0
  108. package/dist/scanner/detectors/mcp/mcpProject.d.ts +12 -0
  109. package/dist/scanner/detectors/mcp/mcpProject.d.ts.map +1 -0
  110. package/dist/scanner/detectors/mcp/mcpProject.js +154 -0
  111. package/dist/scanner/detectors/mcp/mcpProject.js.map +1 -0
  112. package/dist/scanner/detectors/mcp/mcpServers.d.ts +17 -0
  113. package/dist/scanner/detectors/mcp/mcpServers.d.ts.map +1 -0
  114. package/dist/scanner/detectors/mcp/mcpServers.js +193 -0
  115. package/dist/scanner/detectors/mcp/mcpServers.js.map +1 -0
  116. package/dist/scanner/detectors/services/analytics.d.ts +12 -0
  117. package/dist/scanner/detectors/services/analytics.d.ts.map +1 -0
  118. package/dist/scanner/detectors/services/analytics.js +236 -0
  119. package/dist/scanner/detectors/services/analytics.js.map +1 -0
  120. package/dist/scanner/detectors/services/auth.d.ts +12 -0
  121. package/dist/scanner/detectors/services/auth.d.ts.map +1 -0
  122. package/dist/scanner/detectors/services/auth.js +217 -0
  123. package/dist/scanner/detectors/services/auth.js.map +1 -0
  124. package/dist/scanner/detectors/services/email.d.ts +12 -0
  125. package/dist/scanner/detectors/services/email.d.ts.map +1 -0
  126. package/dist/scanner/detectors/services/email.js +211 -0
  127. package/dist/scanner/detectors/services/email.js.map +1 -0
  128. package/dist/scanner/detectors/services/payments.d.ts +12 -0
  129. package/dist/scanner/detectors/services/payments.d.ts.map +1 -0
  130. package/dist/scanner/detectors/services/payments.js +185 -0
  131. package/dist/scanner/detectors/services/payments.js.map +1 -0
  132. package/dist/scanner/detectors/utils.d.ts +160 -0
  133. package/dist/scanner/detectors/utils.d.ts.map +1 -0
  134. package/dist/scanner/detectors/utils.js +222 -0
  135. package/dist/scanner/detectors/utils.js.map +1 -0
  136. package/dist/scanner/index.d.ts +42 -0
  137. package/dist/scanner/index.d.ts.map +1 -0
  138. package/dist/scanner/index.js +282 -0
  139. package/dist/scanner/index.js.map +1 -0
  140. package/dist/scanner/registry.d.ts +43 -0
  141. package/dist/scanner/registry.d.ts.map +1 -0
  142. package/dist/scanner/registry.js +243 -0
  143. package/dist/scanner/registry.js.map +1 -0
  144. package/dist/scanner/types.d.ts +112 -0
  145. package/dist/scanner/types.d.ts.map +1 -0
  146. package/dist/scanner/types.js +6 -0
  147. package/dist/scanner/types.js.map +1 -0
  148. package/dist/templates/config/ralph.config.js.tmpl +38 -0
  149. package/dist/templates/guides/AGENTS.md.tmpl +100 -0
  150. package/dist/templates/guides/FRONTEND.md.tmpl +523 -0
  151. package/dist/templates/guides/PERFORMANCE.md.tmpl +264 -0
  152. package/dist/templates/guides/SECURITY.md.tmpl +100 -0
  153. package/dist/templates/prompts/PROMPT.md.tmpl +77 -0
  154. package/dist/templates/prompts/PROMPT_e2e.md.tmpl +234 -0
  155. package/dist/templates/prompts/PROMPT_feature.md.tmpl +83 -0
  156. package/dist/templates/prompts/PROMPT_review.md.tmpl +167 -0
  157. package/dist/templates/prompts/PROMPT_verify.md.tmpl +72 -0
  158. package/dist/templates/root/.gitignore.tmpl +5 -0
  159. package/dist/templates/root/LEARNINGS.md.tmpl +24 -0
  160. package/dist/templates/root/README.md.tmpl +61 -0
  161. package/dist/templates/scripts/feature-loop.sh.tmpl +267 -0
  162. package/dist/templates/scripts/loop.sh.tmpl +59 -0
  163. package/dist/templates/scripts/ralph-monitor.sh.tmpl +244 -0
  164. package/dist/templates/specs/README.md.tmpl +57 -0
  165. package/dist/templates/specs/_example.md.tmpl +71 -0
  166. package/dist/utils/config.d.ts +95 -0
  167. package/dist/utils/config.d.ts.map +1 -0
  168. package/dist/utils/config.js +148 -0
  169. package/dist/utils/config.js.map +1 -0
  170. package/dist/utils/header.d.ts +5 -0
  171. package/dist/utils/header.d.ts.map +1 -0
  172. package/dist/utils/header.js +15 -0
  173. package/dist/utils/header.js.map +1 -0
  174. package/dist/utils/logger.d.ts +11 -0
  175. package/dist/utils/logger.d.ts.map +1 -0
  176. package/dist/utils/logger.js +24 -0
  177. package/dist/utils/logger.js.map +1 -0
  178. package/package.json +44 -0
  179. package/src/ai/enhancer.ts +350 -0
  180. package/src/ai/index.ts +38 -0
  181. package/src/ai/prompts.ts +217 -0
  182. package/src/ai/providers.ts +136 -0
  183. package/src/cli.ts +255 -0
  184. package/src/commands/init.ts +149 -0
  185. package/src/commands/monitor.ts +412 -0
  186. package/src/commands/new.ts +312 -0
  187. package/src/commands/run.ts +214 -0
  188. package/src/generator/config.ts +116 -0
  189. package/src/generator/index.ts +227 -0
  190. package/src/generator/templates.ts +412 -0
  191. package/src/generator/writer.ts +293 -0
  192. package/src/index.ts +41 -0
  193. package/src/scanner/detectors/core/framework.ts +332 -0
  194. package/src/scanner/detectors/core/packageManager.ts +91 -0
  195. package/src/scanner/detectors/core/styling.ts +261 -0
  196. package/src/scanner/detectors/core/testing.ts +221 -0
  197. package/src/scanner/detectors/data/api.ts +303 -0
  198. package/src/scanner/detectors/data/database.ts +245 -0
  199. package/src/scanner/detectors/data/orm.ts +180 -0
  200. package/src/scanner/detectors/frontend/formHandling.ts +244 -0
  201. package/src/scanner/detectors/frontend/stateManagement.ts +261 -0
  202. package/src/scanner/detectors/frontend/uiComponents.ts +328 -0
  203. package/src/scanner/detectors/infra/deployment.ts +343 -0
  204. package/src/scanner/detectors/infra/monorepo.ts +251 -0
  205. package/src/scanner/detectors/mcp/mcpProject.ts +176 -0
  206. package/src/scanner/detectors/mcp/mcpServers.ts +237 -0
  207. package/src/scanner/detectors/services/analytics.ts +273 -0
  208. package/src/scanner/detectors/services/auth.ts +254 -0
  209. package/src/scanner/detectors/services/email.ts +244 -0
  210. package/src/scanner/detectors/services/payments.ts +213 -0
  211. package/src/scanner/detectors/utils.ts +251 -0
  212. package/src/scanner/index.ts +354 -0
  213. package/src/scanner/registry.ts +301 -0
  214. package/src/scanner/types.ts +152 -0
  215. package/src/templates/config/ralph.config.js.tmpl +38 -0
  216. package/src/templates/guides/AGENTS.md.tmpl +100 -0
  217. package/src/templates/guides/FRONTEND.md.tmpl +523 -0
  218. package/src/templates/guides/PERFORMANCE.md.tmpl +264 -0
  219. package/src/templates/guides/SECURITY.md.tmpl +100 -0
  220. package/src/templates/prompts/PROMPT.md.tmpl +77 -0
  221. package/src/templates/prompts/PROMPT_e2e.md.tmpl +234 -0
  222. package/src/templates/prompts/PROMPT_feature.md.tmpl +83 -0
  223. package/src/templates/prompts/PROMPT_review.md.tmpl +167 -0
  224. package/src/templates/prompts/PROMPT_verify.md.tmpl +72 -0
  225. package/src/templates/root/.gitignore.tmpl +5 -0
  226. package/src/templates/root/LEARNINGS.md.tmpl +24 -0
  227. package/src/templates/root/README.md.tmpl +61 -0
  228. package/src/templates/scripts/feature-loop.sh.tmpl +267 -0
  229. package/src/templates/scripts/loop.sh.tmpl +59 -0
  230. package/src/templates/scripts/ralph-monitor.sh.tmpl +244 -0
  231. package/src/templates/specs/README.md.tmpl +57 -0
  232. package/src/templates/specs/_example.md.tmpl +71 -0
  233. package/src/utils/config.ts +221 -0
  234. package/src/utils/header.ts +15 -0
  235. package/src/utils/logger.ts +28 -0
  236. package/tsconfig.json +19 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhancer.js","sourceRoot":"","sources":["../../src/ai/enhancer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAmB,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA0E5C;;GAEG;AACH,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,wCAAwC;QACxC,+CAA+C;QAC/C,IAAI,QAAQ,GAAG,IAAI,CAAC;QAEpB,yCAAyC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC7D,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QAED,0BAA0B;QAC1B,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,WAAW,EAAE,CAAC;YAChB,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAqB,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,KAAoB,EACpB,QAA0B;IAE1B,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAE9B,+CAA+C;IAC/C,IAAI,QAAQ,CAAC,iBAAiB,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACrD,8DAA8D;QAC9D,IACE,QAAQ,CAAC,iBAAiB,CAAC,OAAO;YAClC,QAAQ,CAAC,iBAAiB,CAAC,UAAU,KAAK,MAAM,EAChD,CAAC;YACD,QAAQ,CAAC,SAAS,GAAG;gBACnB,GAAG,QAAQ,CAAC,SAAS;gBACrB,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,OAAO;gBAC3C,QAAQ,EAAE;oBACR,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ;oBAC9B,OAAO,QAAQ,CAAC,iBAAiB,CAAC,KAAK,IAAI,kBAAkB,EAAE;iBAChE;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,QAAQ,CAAC,qBAAqB,IAAI,QAAQ,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChF,MAAM,aAAa,GAAG,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEtE,QAAQ,CAAC,GAAG,GAAG;YACb,GAAG,QAAQ,CAAC,GAAG;YACf,WAAW,EAAE;gBACX,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,IAAI,EAAE,CAAC;gBACpC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;aACtE;SACF,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,UAAU;IACb,QAAQ,CAAa;IACrB,OAAO,CAAU;IAEzB,YAAY,UAA2B,EAAE;QACvC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,UAAsB;QAClC,gCAAgC;QAChC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxC,OAAO;gBACL,GAAG,UAAU;gBACb,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,0BAA0B,MAAM,4BAA4B;aACtE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,2BAA2B;YAC3B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE7D,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,sBAAsB,QAAQ,KAAK,OAAO,GAAG,CAAC,CAAC;YAC7D,CAAC;YAED,6BAA6B;YAC7B,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAEhD,oBAAoB;YACpB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;gBAClC,KAAK;gBACL,MAAM,EAAE,aAAa;gBACrB,MAAM;gBACN,eAAe,EAAE,IAAI;gBACrB,WAAW,EAAE,GAAG,EAAE,+CAA+C;aAClE,CAAC,CAAC;YAEH,qBAAqB;YACrB,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YAEvC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;oBACL,GAAG,UAAU;oBACb,UAAU,EAAE,KAAK;oBACjB,UAAU,EAAE,IAAI,CAAC,QAAQ;oBACzB,OAAO,EAAE,sCAAsC;iBAChD,CAAC;YACJ,CAAC;YAED,kCAAkC;YAClC,MAAM,aAAa,GAAG,iBAAiB,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAEpE,OAAO;gBACL,GAAG,UAAU;gBACb,KAAK,EAAE,aAAa;gBACpB,UAAU,EAAE,QAAQ;gBACpB,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,IAAI,CAAC,QAAQ;aAC1B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,CAAC,KAAK,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAC;YAEvD,OAAO;gBACL,GAAG,UAAU;gBACb,UAAU,EAAE,KAAK;gBACjB,UAAU,EAAE,IAAI,CAAC,QAAQ;gBACzB,OAAO,EAAE,YAAY;aACtB,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAsB,EACtB,OAAyB;IAEzB,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAA0B;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,qBAAqB;IACrB,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,IAAI,QAAQ,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC,CAAC;QACrE,IAAI,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,yBAAyB;IACzB,IAAI,QAAQ,CAAC,qBAAqB,IAAI,QAAQ,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,qBAAqB,EAAE,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,qBAAqB;IACrB,IAAI,QAAQ,CAAC,iBAAiB,IAAI,QAAQ,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,OAAO,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,sBAAsB;IACtB,IAAI,QAAQ,CAAC,qBAAqB,IAAI,QAAQ,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACvC,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,4BAA4B;IAC5B,IAAI,QAAQ,CAAC,uBAAuB,IAAI,QAAQ,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpF,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACzC,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,uBAAuB,EAAE,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,OAAO,UAAU,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,wBAAwB;IACxB,IAAI,QAAQ,CAAC,oBAAoB,EAAE,CAAC;QAClC,IACE,QAAQ,CAAC,oBAAoB,CAAC,cAAc;YAC5C,QAAQ,CAAC,oBAAoB,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EACvD,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC5C,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,cAAc,EAAE,CAAC;gBAChE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC5B,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IACE,QAAQ,CAAC,oBAAoB,CAAC,WAAW;YACzC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EACpD,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACrC,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,oBAAoB,CAAC,WAAW,EAAE,CAAC;gBACnE,KAAK,CAAC,IAAI,CAAC,OAAO,UAAU,EAAE,CAAC,CAAC;YAClC,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * AI Module
3
+ * Main export for AI-enhanced analysis functionality
4
+ */
5
+ export { type AIProvider, type ProviderConfig, getModel, hasApiKey, getAvailableProvider, getApiKeyEnvVar, } from './providers.js';
6
+ export { formatStackForPrompt, SYSTEM_PROMPT, createAnalysisPrompt, createValidationPrompt, createRecommendationsPrompt, } from './prompts.js';
7
+ export { type FrameworkInsights, type ArchitecturalPattern, type CodingConvention, type McpRecommendation, type AdditionalDetections, type AIAnalysisResult, type EnhancedScanResult, type EnhancerOptions, AIEnhancer, enhanceWithAI, formatAIAnalysis, } from './enhancer.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,QAAQ,EACR,SAAS,EACT,oBAAoB,EACpB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,UAAU,EACV,aAAa,EACb,gBAAgB,GACjB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * AI Module
3
+ * Main export for AI-enhanced analysis functionality
4
+ */
5
+ // Provider configuration
6
+ export { getModel, hasApiKey, getAvailableProvider, getApiKeyEnvVar, } from './providers.js';
7
+ // Analysis prompts
8
+ export { formatStackForPrompt, SYSTEM_PROMPT, createAnalysisPrompt, createValidationPrompt, createRecommendationsPrompt, } from './prompts.js';
9
+ // AI enhancer
10
+ export { AIEnhancer, enhanceWithAI, formatAIAnalysis, } from './enhancer.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yBAAyB;AACzB,OAAO,EAGL,QAAQ,EACR,SAAS,EACT,oBAAoB,EACpB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,mBAAmB;AACnB,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AAEtB,cAAc;AACd,OAAO,EASL,UAAU,EACV,aAAa,EACb,gBAAgB,GACjB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * AI Analysis Prompts
3
+ * Defines prompts for codebase analysis and enhancement
4
+ */
5
+ import type { ScanResult, DetectedStack } from '../scanner/types.js';
6
+ /**
7
+ * Format the detected stack for inclusion in prompts
8
+ */
9
+ export declare function formatStackForPrompt(stack: DetectedStack): string;
10
+ /**
11
+ * System prompt for codebase analysis
12
+ */
13
+ export declare const SYSTEM_PROMPT = "You are an expert software architect analyzing a codebase to provide insights for AI-assisted development.\n\nYour role is to:\n1. Analyze the detected tech stack and provide deeper insights\n2. Identify architectural patterns and coding conventions\n3. Suggest improvements to the detection results\n4. Recommend MCP servers that would benefit this project\n5. Generate custom prompt suggestions for AI coding assistants\n\nBe concise and actionable. Focus on practical insights that help developers work more effectively with AI tools.\n\nRespond in valid JSON format only.";
14
+ /**
15
+ * Create the codebase analysis prompt
16
+ */
17
+ export declare function createAnalysisPrompt(scanResult: ScanResult): string;
18
+ /**
19
+ * Prompt for validating and improving scanner results
20
+ */
21
+ export declare function createValidationPrompt(scanResult: ScanResult): string;
22
+ /**
23
+ * Prompt for generating stack-specific recommendations
24
+ */
25
+ export declare function createRecommendationsPrompt(scanResult: ScanResult): string;
26
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/ai/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAErE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CA4EjE;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,okBAWS,CAAC;AAEpC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CA8CnE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CA2BrE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CA0B1E"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * AI Analysis Prompts
3
+ * Defines prompts for codebase analysis and enhancement
4
+ */
5
+ /**
6
+ * Format the detected stack for inclusion in prompts
7
+ */
8
+ export function formatStackForPrompt(stack) {
9
+ const sections = [];
10
+ // Core
11
+ if (stack.framework) {
12
+ const variant = stack.framework.variant ? ` (${stack.framework.variant})` : '';
13
+ sections.push(`Framework: ${stack.framework.name}${variant}`);
14
+ }
15
+ if (stack.packageManager) {
16
+ sections.push(`Package Manager: ${stack.packageManager.name}`);
17
+ }
18
+ if (stack.testing?.unit) {
19
+ sections.push(`Unit Testing: ${stack.testing.unit.name}`);
20
+ }
21
+ if (stack.testing?.e2e) {
22
+ sections.push(`E2E Testing: ${stack.testing.e2e.name}`);
23
+ }
24
+ if (stack.styling) {
25
+ sections.push(`Styling: ${stack.styling.name}`);
26
+ }
27
+ // Data Layer
28
+ if (stack.database) {
29
+ sections.push(`Database: ${stack.database.name}`);
30
+ }
31
+ if (stack.orm) {
32
+ sections.push(`ORM: ${stack.orm.name}`);
33
+ }
34
+ if (stack.api && stack.api.length > 0) {
35
+ sections.push(`API Patterns: ${stack.api.map(a => a.name).join(', ')}`);
36
+ }
37
+ // Frontend
38
+ if (stack.stateManagement) {
39
+ sections.push(`State Management: ${stack.stateManagement.name}`);
40
+ }
41
+ if (stack.uiComponents && stack.uiComponents.length > 0) {
42
+ sections.push(`UI Components: ${stack.uiComponents.map(u => u.name).join(', ')}`);
43
+ }
44
+ if (stack.formHandling && stack.formHandling.length > 0) {
45
+ sections.push(`Form Handling: ${stack.formHandling.map(f => f.name).join(', ')}`);
46
+ }
47
+ // Services
48
+ if (stack.auth) {
49
+ sections.push(`Auth: ${stack.auth.name}`);
50
+ }
51
+ if (stack.analytics && stack.analytics.length > 0) {
52
+ sections.push(`Analytics: ${stack.analytics.map(a => a.name).join(', ')}`);
53
+ }
54
+ if (stack.payments) {
55
+ sections.push(`Payments: ${stack.payments.name}`);
56
+ }
57
+ if (stack.email) {
58
+ sections.push(`Email: ${stack.email.name}`);
59
+ }
60
+ // Infrastructure
61
+ if (stack.deployment && stack.deployment.length > 0) {
62
+ sections.push(`Deployment: ${stack.deployment.map(d => d.name).join(', ')}`);
63
+ }
64
+ if (stack.monorepo) {
65
+ sections.push(`Monorepo: ${stack.monorepo.name}`);
66
+ }
67
+ // MCP
68
+ if (stack.mcp) {
69
+ if (stack.mcp.isProject) {
70
+ sections.push('MCP: This is an MCP server project');
71
+ }
72
+ if (stack.mcp.detected && stack.mcp.detected.length > 0) {
73
+ sections.push(`MCP Servers: ${stack.mcp.detected.map(m => m.name).join(', ')}`);
74
+ }
75
+ }
76
+ return sections.join('\n');
77
+ }
78
+ /**
79
+ * System prompt for codebase analysis
80
+ */
81
+ export const SYSTEM_PROMPT = `You are an expert software architect analyzing a codebase to provide insights for AI-assisted development.
82
+
83
+ Your role is to:
84
+ 1. Analyze the detected tech stack and provide deeper insights
85
+ 2. Identify architectural patterns and coding conventions
86
+ 3. Suggest improvements to the detection results
87
+ 4. Recommend MCP servers that would benefit this project
88
+ 5. Generate custom prompt suggestions for AI coding assistants
89
+
90
+ Be concise and actionable. Focus on practical insights that help developers work more effectively with AI tools.
91
+
92
+ Respond in valid JSON format only.`;
93
+ /**
94
+ * Create the codebase analysis prompt
95
+ */
96
+ export function createAnalysisPrompt(scanResult) {
97
+ const stackInfo = formatStackForPrompt(scanResult.stack);
98
+ return `Analyze this codebase and provide enhanced insights.
99
+
100
+ Project Root: ${scanResult.projectRoot}
101
+
102
+ Detected Stack:
103
+ ${stackInfo || 'No technologies detected'}
104
+
105
+ Based on this stack, provide analysis in the following JSON format:
106
+ {
107
+ "frameworkInsights": {
108
+ "variant": "more specific variant if detectable (e.g., 'app-router', 'pages-router', 'spa', 'ssr')",
109
+ "confidence": "high/medium/low",
110
+ "notes": "any additional observations about framework usage"
111
+ },
112
+ "architecturalPatterns": [
113
+ {
114
+ "pattern": "pattern name",
115
+ "confidence": "high/medium/low",
116
+ "evidence": "why you think this pattern is used"
117
+ }
118
+ ],
119
+ "codingConventions": [
120
+ {
121
+ "convention": "convention name",
122
+ "suggestion": "how to follow this convention"
123
+ }
124
+ ],
125
+ "recommendedMcpServers": [
126
+ {
127
+ "name": "server name",
128
+ "reason": "why this would be useful"
129
+ }
130
+ ],
131
+ "customPromptSuggestions": [
132
+ "Specific prompt suggestions tailored to this codebase"
133
+ ],
134
+ "additionalDetections": {
135
+ "possibleMissed": ["technologies that might be in use but weren't detected"],
136
+ "refinements": ["suggestions to improve existing detections"]
137
+ }
138
+ }
139
+
140
+ Only include sections where you have meaningful insights. Keep responses focused and actionable.`;
141
+ }
142
+ /**
143
+ * Prompt for validating and improving scanner results
144
+ */
145
+ export function createValidationPrompt(scanResult) {
146
+ const stackInfo = formatStackForPrompt(scanResult.stack);
147
+ return `Review and validate these scanner detection results for accuracy.
148
+
149
+ Detected Stack:
150
+ ${stackInfo || 'No technologies detected'}
151
+
152
+ For each detection, assess if it seems accurate based on common project patterns.
153
+ Identify any likely false positives or missing detections.
154
+
155
+ Respond in JSON format:
156
+ {
157
+ "validations": [
158
+ {
159
+ "technology": "name",
160
+ "status": "confirmed/uncertain/likely-false-positive",
161
+ "notes": "explanation if uncertain or false positive"
162
+ }
163
+ ],
164
+ "likelyMissed": [
165
+ {
166
+ "technology": "name",
167
+ "reason": "why this might be in use"
168
+ }
169
+ ]
170
+ }`;
171
+ }
172
+ /**
173
+ * Prompt for generating stack-specific recommendations
174
+ */
175
+ export function createRecommendationsPrompt(scanResult) {
176
+ const stackInfo = formatStackForPrompt(scanResult.stack);
177
+ return `Based on this tech stack, provide specific recommendations for AI-assisted development.
178
+
179
+ Detected Stack:
180
+ ${stackInfo || 'No technologies detected'}
181
+
182
+ Provide recommendations in JSON format:
183
+ {
184
+ "mcpServers": [
185
+ {
186
+ "name": "server identifier",
187
+ "priority": "high/medium/low",
188
+ "reason": "why this is recommended"
189
+ }
190
+ ],
191
+ "aiToolingTips": [
192
+ "Tips for working with AI tools on this codebase"
193
+ ],
194
+ "contextSuggestions": [
195
+ "Important context an AI should know about this stack"
196
+ ]
197
+ }
198
+
199
+ Focus on practical, actionable recommendations.`;
200
+ }
201
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/ai/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * AI Provider Configuration
3
+ * Configures AI providers (Anthropic, OpenAI, OpenRouter) for the enhancer
4
+ */
5
+ import type { LanguageModel } from 'ai';
6
+ /**
7
+ * Supported AI providers
8
+ */
9
+ export type AIProvider = 'anthropic' | 'openai' | 'openrouter';
10
+ /**
11
+ * Provider configuration result
12
+ */
13
+ export interface ProviderConfig {
14
+ model: LanguageModel;
15
+ provider: AIProvider;
16
+ modelId: string;
17
+ }
18
+ /**
19
+ * Check if an API key is available for a provider
20
+ */
21
+ export declare function hasApiKey(provider: AIProvider): boolean;
22
+ /**
23
+ * Get a configured AI model for the specified provider
24
+ */
25
+ export declare function getModel(provider?: AIProvider): ProviderConfig;
26
+ /**
27
+ * Get the first available provider with an API key
28
+ * Checks in order: anthropic, openai, openrouter
29
+ */
30
+ export declare function getAvailableProvider(): AIProvider | null;
31
+ /**
32
+ * Get the environment variable name for a provider's API key
33
+ */
34
+ export declare function getApiKeyEnvVar(provider: AIProvider): string;
35
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/ai/providers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,UAAU,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAqBD;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAGvD;AAmBD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,GAAE,UAAwB,GAAG,cAAc,CA0C3E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,UAAU,GAAG,IAAI,CAUxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAE5D"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * AI Provider Configuration
3
+ * Configures AI providers (Anthropic, OpenAI, OpenRouter) for the enhancer
4
+ */
5
+ import { createAnthropic } from '@ai-sdk/anthropic';
6
+ import { createOpenAI } from '@ai-sdk/openai';
7
+ /**
8
+ * Environment variable names for each provider
9
+ */
10
+ const API_KEY_ENV_VARS = {
11
+ anthropic: 'ANTHROPIC_API_KEY',
12
+ openai: 'OPENAI_API_KEY',
13
+ openrouter: 'OPENROUTER_API_KEY',
14
+ };
15
+ /**
16
+ * Default models for each provider
17
+ * Using fast/cost-effective models for speed
18
+ */
19
+ const DEFAULT_MODELS = {
20
+ anthropic: 'claude-sonnet-4-20250514',
21
+ openai: 'gpt-4o-mini',
22
+ openrouter: 'anthropic/claude-3.5-sonnet',
23
+ };
24
+ /**
25
+ * Check if an API key is available for a provider
26
+ */
27
+ export function hasApiKey(provider) {
28
+ const envVar = API_KEY_ENV_VARS[provider];
29
+ return !!process.env[envVar];
30
+ }
31
+ /**
32
+ * Get the API key for a provider
33
+ * @throws Error if API key is not set
34
+ */
35
+ function getApiKey(provider) {
36
+ const envVar = API_KEY_ENV_VARS[provider];
37
+ const apiKey = process.env[envVar];
38
+ if (!apiKey) {
39
+ throw new Error(`API key not found. Set ${envVar} environment variable to use ${provider} provider.`);
40
+ }
41
+ return apiKey;
42
+ }
43
+ /**
44
+ * Get a configured AI model for the specified provider
45
+ */
46
+ export function getModel(provider = 'anthropic') {
47
+ const modelId = DEFAULT_MODELS[provider];
48
+ switch (provider) {
49
+ case 'anthropic': {
50
+ const anthropic = createAnthropic({
51
+ apiKey: getApiKey('anthropic'),
52
+ });
53
+ return {
54
+ model: anthropic(modelId),
55
+ provider,
56
+ modelId,
57
+ };
58
+ }
59
+ case 'openai': {
60
+ const openai = createOpenAI({
61
+ apiKey: getApiKey('openai'),
62
+ });
63
+ return {
64
+ model: openai(modelId),
65
+ provider,
66
+ modelId,
67
+ };
68
+ }
69
+ case 'openrouter': {
70
+ // OpenRouter uses OpenAI-compatible API
71
+ const openrouter = createOpenAI({
72
+ apiKey: getApiKey('openrouter'),
73
+ baseURL: 'https://openrouter.ai/api/v1',
74
+ });
75
+ return {
76
+ model: openrouter(modelId),
77
+ provider,
78
+ modelId,
79
+ };
80
+ }
81
+ default:
82
+ throw new Error(`Unknown provider: ${provider}`);
83
+ }
84
+ }
85
+ /**
86
+ * Get the first available provider with an API key
87
+ * Checks in order: anthropic, openai, openrouter
88
+ */
89
+ export function getAvailableProvider() {
90
+ const providers = ['anthropic', 'openai', 'openrouter'];
91
+ for (const provider of providers) {
92
+ if (hasApiKey(provider)) {
93
+ return provider;
94
+ }
95
+ }
96
+ return null;
97
+ }
98
+ /**
99
+ * Get the environment variable name for a provider's API key
100
+ */
101
+ export function getApiKeyEnvVar(provider) {
102
+ return API_KEY_ENV_VARS[provider];
103
+ }
104
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/ai/providers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAiB9C;;GAEG;AACH,MAAM,gBAAgB,GAA+B;IACnD,SAAS,EAAE,mBAAmB;IAC9B,MAAM,EAAE,gBAAgB;IACxB,UAAU,EAAE,oBAAoB;CACjC,CAAC;AAEF;;;GAGG;AACH,MAAM,cAAc,GAA+B;IACjD,SAAS,EAAE,0BAA0B;IACrC,MAAM,EAAE,aAAa;IACrB,UAAU,EAAE,6BAA6B;CAC1C,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAoB;IAC5C,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,QAAoB;IACrC,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,0BAA0B,MAAM,gCAAgC,QAAQ,YAAY,CACrF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,WAAuB,WAAW;IACzD,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEzC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,SAAS,GAAG,eAAe,CAAC;gBAChC,MAAM,EAAE,SAAS,CAAC,WAAW,CAAC;aAC/B,CAAC,CAAC;YACH,OAAO;gBACL,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC;gBACzB,QAAQ;gBACR,OAAO;aACR,CAAC;QACJ,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,YAAY,CAAC;gBAC1B,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC;aAC5B,CAAC,CAAC;YACH,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;gBACtB,QAAQ;gBACR,OAAO;aACR,CAAC;QACJ,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,wCAAwC;YACxC,MAAM,UAAU,GAAG,YAAY,CAAC;gBAC9B,MAAM,EAAE,SAAS,CAAC,YAAY,CAAC;gBAC/B,OAAO,EAAE,8BAA8B;aACxC,CAAC,CAAC;YACH,OAAO;gBACL,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;gBAC1B,QAAQ;gBACR,OAAO;aACR,CAAC;QACJ,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,SAAS,GAAiB,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEtE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAoB;IAClD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Set up and configure the CLI
4
+ */
5
+ export declare function createCli(): Command;
6
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAoOnC"}
package/dist/cli.js ADDED
@@ -0,0 +1,196 @@
1
+ import { Command } from 'commander';
2
+ import { displayHeader } from './utils/header.js';
3
+ import { initCommand } from './commands/init.js';
4
+ import { runCommand } from './commands/run.js';
5
+ import { monitorCommand } from './commands/monitor.js';
6
+ import { newCommand } from './commands/new.js';
7
+ import { logger } from './utils/logger.js';
8
+ /**
9
+ * Set up and configure the CLI
10
+ */
11
+ export function createCli() {
12
+ const program = new Command();
13
+ program
14
+ .name('ralph')
15
+ .description('AI-powered feature development loop CLI.\n\n' +
16
+ 'Ralph auto-detects your tech stack and generates an intelligent\n' +
17
+ 'development environment for AI-driven feature implementation.')
18
+ .version('0.1.0')
19
+ .hook('preAction', () => {
20
+ displayHeader();
21
+ })
22
+ .addHelpText('after', `
23
+ Examples:
24
+ $ ralph init Initialize Ralph in your project
25
+ $ ralph init --ai Initialize with AI-enhanced analysis
26
+ $ ralph new my-feature Create a new feature specification
27
+ $ ralph run my-feature Run the feature development loop
28
+ $ ralph monitor my-feature Monitor progress in real-time
29
+
30
+ Documentation:
31
+ https://github.com/your-org/ralph-cli#readme
32
+ `);
33
+ // ralph init
34
+ program
35
+ .command('init')
36
+ .description('Initialize Ralph in the current project.\n\n' +
37
+ 'Scans your codebase to detect the tech stack (framework, testing,\n' +
38
+ 'database, auth, etc.) and generates configuration files in .ralph/')
39
+ .option('--ai', 'Enable AI-enhanced analysis for deeper project insights')
40
+ .option('--provider <name>', 'AI provider to use (anthropic, openai, openrouter)', 'anthropic')
41
+ .option('-y, --yes', 'Accept defaults and skip all confirmation prompts')
42
+ .addHelpText('after', `
43
+ Examples:
44
+ $ ralph init Basic initialization
45
+ $ ralph init --ai With AI-enhanced analysis (Anthropic)
46
+ $ ralph init --ai --provider openai With OpenAI provider
47
+ $ ralph init --yes Non-interactive mode
48
+
49
+ Environment Variables:
50
+ ANTHROPIC_API_KEY Required for --ai with anthropic provider
51
+ OPENAI_API_KEY Required for --ai with openai provider
52
+ OPENROUTER_API_KEY Required for --ai with openrouter provider
53
+ `)
54
+ .action(async (options) => {
55
+ try {
56
+ await initCommand(options);
57
+ }
58
+ catch (error) {
59
+ handleCommandError(error);
60
+ }
61
+ });
62
+ // ralph run <feature>
63
+ program
64
+ .command('run <feature>')
65
+ .description('Run the feature development loop for a specific feature.\n\n' +
66
+ 'Executes the AI-driven implementation workflow using the feature\n' +
67
+ 'spec in .ralph/specs/<feature>.md')
68
+ .option('--worktree', 'Use git worktree for isolation (enables parallel execution of multiple features)')
69
+ .option('--resume', 'Resume an interrupted loop (reuses existing branch and worktree)')
70
+ .option('--model <model>', 'Claude model to use for implementation (opus, sonnet)')
71
+ .option('--max-iterations <n>', 'Maximum number of implementation iterations (default: 50)', parseInt)
72
+ .option('--max-e2e-attempts <n>', 'Maximum E2E test retry attempts before giving up (default: 3)', parseInt)
73
+ .addHelpText('after', `
74
+ Examples:
75
+ $ ralph run user-auth Run the user-auth feature
76
+ $ ralph run payment --worktree Run in isolated worktree
77
+ $ ralph run payment --resume Resume interrupted session
78
+ $ ralph run my-feature --model opus Use Claude Opus model
79
+ $ ralph run my-feature --max-iterations 30 --max-e2e-attempts 5
80
+
81
+ Notes:
82
+ - Create a feature spec first with: ralph new <feature>
83
+ - The spec file should be at: .ralph/specs/<feature>.md
84
+ - Use --worktree to run multiple features in parallel
85
+ `)
86
+ .action(async (feature, options) => {
87
+ try {
88
+ const runOptions = {
89
+ worktree: options.worktree,
90
+ resume: options.resume,
91
+ model: options.model,
92
+ maxIterations: options.maxIterations,
93
+ maxE2eAttempts: options.maxE2eAttempts,
94
+ };
95
+ await runCommand(feature, runOptions);
96
+ }
97
+ catch (error) {
98
+ handleCommandError(error);
99
+ }
100
+ });
101
+ // ralph monitor <feature>
102
+ program
103
+ .command('monitor <feature>')
104
+ .description('Launch the monitoring dashboard for a feature.\n\n' +
105
+ 'Displays real-time progress including iteration count, phase,\n' +
106
+ 'task completion, token usage, and E2E test status.')
107
+ .option('--bash', 'Use the bash script monitor instead of the built-in dashboard')
108
+ .option('--python', 'Use the Python TUI monitor (if available)')
109
+ .option('--interval <seconds>', 'Dashboard refresh interval in seconds (default: 5)', parseInt, 5)
110
+ .addHelpText('after', `
111
+ Examples:
112
+ $ ralph monitor my-feature Monitor with built-in dashboard
113
+ $ ralph monitor my-feature --interval 2 Refresh every 2 seconds
114
+ $ ralph monitor my-feature --bash Use bash script monitor
115
+
116
+ Dashboard Shows:
117
+ - Current phase (Planning, Implementation, E2E Testing, etc.)
118
+ - Iteration progress
119
+ - Task completion status
120
+ - Token usage (input/output)
121
+ - Git branch information
122
+ `)
123
+ .action(async (feature, options) => {
124
+ try {
125
+ const monitorOptions = {
126
+ bash: options.bash,
127
+ python: options.python,
128
+ interval: options.interval,
129
+ };
130
+ await monitorCommand(feature, monitorOptions);
131
+ }
132
+ catch (error) {
133
+ handleCommandError(error);
134
+ }
135
+ });
136
+ // ralph new <feature>
137
+ program
138
+ .command('new <feature>')
139
+ .description('Create a new feature specification from template.\n\n' +
140
+ 'Generates a markdown spec file with sections for requirements,\n' +
141
+ 'acceptance criteria, technical notes, and more.')
142
+ .option('-e, --edit', 'Open the spec in your editor after creation')
143
+ .option('--editor <editor>', 'Editor command to use (defaults to $EDITOR or "code")')
144
+ .option('-y, --yes', 'Skip confirmation prompts')
145
+ .option('-f, --force', 'Overwrite existing spec file without prompting')
146
+ .addHelpText('after', `
147
+ Examples:
148
+ $ ralph new user-dashboard Create spec with prompts
149
+ $ ralph new user-dashboard --edit Create and open in editor
150
+ $ ralph new user-dashboard -e --editor vim Open in vim
151
+ $ ralph new user-dashboard --yes Skip confirmations
152
+ $ ralph new user-dashboard --force Overwrite if exists
153
+
154
+ Output:
155
+ Creates: .ralph/specs/<feature>.md
156
+
157
+ Template includes sections for:
158
+ - Purpose and user stories
159
+ - Functional and non-functional requirements
160
+ - Technical notes and dependencies
161
+ - Visual requirements (for UI features)
162
+ - API endpoints
163
+ - Acceptance criteria
164
+ `)
165
+ .action(async (feature, options) => {
166
+ try {
167
+ const newOptions = {
168
+ edit: options.edit,
169
+ editor: options.editor,
170
+ yes: options.yes,
171
+ force: options.force,
172
+ };
173
+ await newCommand(feature, newOptions);
174
+ }
175
+ catch (error) {
176
+ handleCommandError(error);
177
+ }
178
+ });
179
+ return program;
180
+ }
181
+ /**
182
+ * Handle command errors with user-friendly output
183
+ */
184
+ function handleCommandError(error) {
185
+ if (error instanceof Error) {
186
+ logger.error(error.message);
187
+ if (process.env.DEBUG) {
188
+ console.error(error.stack);
189
+ }
190
+ }
191
+ else {
192
+ logger.error(String(error));
193
+ }
194
+ process.exit(1);
195
+ }
196
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}