saasgadget 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 (515) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +48 -0
  3. package/dist/agents/business-analyst.d.ts +14 -0
  4. package/dist/agents/business-analyst.d.ts.map +1 -0
  5. package/dist/agents/business-analyst.js +70 -0
  6. package/dist/agents/business-analyst.js.map +1 -0
  7. package/dist/agents/code-inspector.d.ts +19 -0
  8. package/dist/agents/code-inspector.d.ts.map +1 -0
  9. package/dist/agents/code-inspector.js +149 -0
  10. package/dist/agents/code-inspector.js.map +1 -0
  11. package/dist/agents/competitor-tracker.d.ts +19 -0
  12. package/dist/agents/competitor-tracker.d.ts.map +1 -0
  13. package/dist/agents/competitor-tracker.js +190 -0
  14. package/dist/agents/competitor-tracker.js.map +1 -0
  15. package/dist/agents/finance-auditor.d.ts +14 -0
  16. package/dist/agents/finance-auditor.d.ts.map +1 -0
  17. package/dist/agents/finance-auditor.js +73 -0
  18. package/dist/agents/finance-auditor.js.map +1 -0
  19. package/dist/agents/gtm-strategist.d.ts +14 -0
  20. package/dist/agents/gtm-strategist.d.ts.map +1 -0
  21. package/dist/agents/gtm-strategist.js +73 -0
  22. package/dist/agents/gtm-strategist.js.map +1 -0
  23. package/dist/agents/orchestrator.d.ts +52 -0
  24. package/dist/agents/orchestrator.d.ts.map +1 -0
  25. package/dist/agents/orchestrator.js +174 -0
  26. package/dist/agents/orchestrator.js.map +1 -0
  27. package/dist/agents/sdk-client.d.ts +48 -0
  28. package/dist/agents/sdk-client.d.ts.map +1 -0
  29. package/dist/agents/sdk-client.js +119 -0
  30. package/dist/agents/sdk-client.js.map +1 -0
  31. package/dist/agents/security-compliance.d.ts +14 -0
  32. package/dist/agents/security-compliance.d.ts.map +1 -0
  33. package/dist/agents/security-compliance.js +87 -0
  34. package/dist/agents/security-compliance.js.map +1 -0
  35. package/dist/agents/skeptic-reviewer.d.ts +14 -0
  36. package/dist/agents/skeptic-reviewer.d.ts.map +1 -0
  37. package/dist/agents/skeptic-reviewer.js +65 -0
  38. package/dist/agents/skeptic-reviewer.js.map +1 -0
  39. package/dist/agents/skills-directory.d.ts +36 -0
  40. package/dist/agents/skills-directory.d.ts.map +1 -0
  41. package/dist/agents/skills-directory.js +108 -0
  42. package/dist/agents/skills-directory.js.map +1 -0
  43. package/dist/cli/commands/auth.d.ts +8 -0
  44. package/dist/cli/commands/auth.d.ts.map +1 -0
  45. package/dist/cli/commands/auth.js +90 -0
  46. package/dist/cli/commands/auth.js.map +1 -0
  47. package/dist/cli/commands/doctor.d.ts +10 -0
  48. package/dist/cli/commands/doctor.d.ts.map +1 -0
  49. package/dist/cli/commands/doctor.js +240 -0
  50. package/dist/cli/commands/doctor.js.map +1 -0
  51. package/dist/cli/commands/fix.d.ts +4 -0
  52. package/dist/cli/commands/fix.d.ts.map +1 -0
  53. package/dist/cli/commands/fix.js +344 -0
  54. package/dist/cli/commands/fix.js.map +1 -0
  55. package/dist/cli/commands/init.d.ts +8 -0
  56. package/dist/cli/commands/init.d.ts.map +1 -0
  57. package/dist/cli/commands/init.js +109 -0
  58. package/dist/cli/commands/init.js.map +1 -0
  59. package/dist/cli/commands/mcp.d.ts +4 -0
  60. package/dist/cli/commands/mcp.d.ts.map +1 -0
  61. package/dist/cli/commands/mcp.js +441 -0
  62. package/dist/cli/commands/mcp.js.map +1 -0
  63. package/dist/cli/commands/new.d.ts +4 -0
  64. package/dist/cli/commands/new.d.ts.map +1 -0
  65. package/dist/cli/commands/new.js +193 -0
  66. package/dist/cli/commands/new.js.map +1 -0
  67. package/dist/cli/commands/pack.d.ts +4 -0
  68. package/dist/cli/commands/pack.d.ts.map +1 -0
  69. package/dist/cli/commands/pack.js +312 -0
  70. package/dist/cli/commands/pack.js.map +1 -0
  71. package/dist/cli/commands/plan.d.ts +4 -0
  72. package/dist/cli/commands/plan.d.ts.map +1 -0
  73. package/dist/cli/commands/plan.js +250 -0
  74. package/dist/cli/commands/plan.js.map +1 -0
  75. package/dist/cli/commands/research.d.ts +7 -0
  76. package/dist/cli/commands/research.d.ts.map +1 -0
  77. package/dist/cli/commands/research.js +331 -0
  78. package/dist/cli/commands/research.js.map +1 -0
  79. package/dist/cli/commands/scan.d.ts +4 -0
  80. package/dist/cli/commands/scan.d.ts.map +1 -0
  81. package/dist/cli/commands/scan.js +434 -0
  82. package/dist/cli/commands/scan.js.map +1 -0
  83. package/dist/cli/commands/session.d.ts +4 -0
  84. package/dist/cli/commands/session.d.ts.map +1 -0
  85. package/dist/cli/commands/session.js +343 -0
  86. package/dist/cli/commands/session.js.map +1 -0
  87. package/dist/cli/commands/settings.d.ts +8 -0
  88. package/dist/cli/commands/settings.d.ts.map +1 -0
  89. package/dist/cli/commands/settings.js +302 -0
  90. package/dist/cli/commands/settings.js.map +1 -0
  91. package/dist/cli/commands/start.d.ts +10 -0
  92. package/dist/cli/commands/start.d.ts.map +1 -0
  93. package/dist/cli/commands/start.js +185 -0
  94. package/dist/cli/commands/start.js.map +1 -0
  95. package/dist/cli/commands/types.d.ts +15 -0
  96. package/dist/cli/commands/types.d.ts.map +1 -0
  97. package/dist/cli/commands/types.js +2 -0
  98. package/dist/cli/commands/types.js.map +1 -0
  99. package/dist/cli/flag-resolver.d.ts +17 -0
  100. package/dist/cli/flag-resolver.d.ts.map +1 -0
  101. package/dist/cli/flag-resolver.js +57 -0
  102. package/dist/cli/flag-resolver.js.map +1 -0
  103. package/dist/cli/output/formatter.d.ts +22 -0
  104. package/dist/cli/output/formatter.d.ts.map +1 -0
  105. package/dist/cli/output/formatter.js +40 -0
  106. package/dist/cli/output/formatter.js.map +1 -0
  107. package/dist/cli/output/hints.d.ts +7 -0
  108. package/dist/cli/output/hints.d.ts.map +1 -0
  109. package/dist/cli/output/hints.js +27 -0
  110. package/dist/cli/output/hints.js.map +1 -0
  111. package/dist/cli/output/json-writer.d.ts +7 -0
  112. package/dist/cli/output/json-writer.d.ts.map +1 -0
  113. package/dist/cli/output/json-writer.js +19 -0
  114. package/dist/cli/output/json-writer.js.map +1 -0
  115. package/dist/cli/output/markdown-writer.d.ts +7 -0
  116. package/dist/cli/output/markdown-writer.d.ts.map +1 -0
  117. package/dist/cli/output/markdown-writer.js +75 -0
  118. package/dist/cli/output/markdown-writer.js.map +1 -0
  119. package/dist/cli/tui/banner.d.ts +2 -0
  120. package/dist/cli/tui/banner.d.ts.map +1 -0
  121. package/dist/cli/tui/banner.js +46 -0
  122. package/dist/cli/tui/banner.js.map +1 -0
  123. package/dist/cli/tui/colors.d.ts +22 -0
  124. package/dist/cli/tui/colors.d.ts.map +1 -0
  125. package/dist/cli/tui/colors.js +79 -0
  126. package/dist/cli/tui/colors.js.map +1 -0
  127. package/dist/cli/tui/dashboard.d.ts +20 -0
  128. package/dist/cli/tui/dashboard.d.ts.map +1 -0
  129. package/dist/cli/tui/dashboard.js +140 -0
  130. package/dist/cli/tui/dashboard.js.map +1 -0
  131. package/dist/cli/tui/prompt.d.ts +55 -0
  132. package/dist/cli/tui/prompt.d.ts.map +1 -0
  133. package/dist/cli/tui/prompt.js +193 -0
  134. package/dist/cli/tui/prompt.js.map +1 -0
  135. package/dist/cli/tui/slash-commands.d.ts +43 -0
  136. package/dist/cli/tui/slash-commands.d.ts.map +1 -0
  137. package/dist/cli/tui/slash-commands.js +439 -0
  138. package/dist/cli/tui/slash-commands.js.map +1 -0
  139. package/dist/config/config-store.d.ts +27 -0
  140. package/dist/config/config-store.d.ts.map +1 -0
  141. package/dist/config/config-store.js +125 -0
  142. package/dist/config/config-store.js.map +1 -0
  143. package/dist/config/presets.d.ts +15 -0
  144. package/dist/config/presets.d.ts.map +1 -0
  145. package/dist/config/presets.js +91 -0
  146. package/dist/config/presets.js.map +1 -0
  147. package/dist/config/tool-profiles.d.ts +29 -0
  148. package/dist/config/tool-profiles.d.ts.map +1 -0
  149. package/dist/config/tool-profiles.js +56 -0
  150. package/dist/config/tool-profiles.js.map +1 -0
  151. package/dist/contracts/agent-invoker.d.ts +9 -0
  152. package/dist/contracts/agent-invoker.d.ts.map +1 -0
  153. package/dist/contracts/agent-invoker.js +2 -0
  154. package/dist/contracts/agent-invoker.js.map +1 -0
  155. package/dist/contracts/agent.d.ts +36 -0
  156. package/dist/contracts/agent.d.ts.map +1 -0
  157. package/dist/contracts/agent.js +2 -0
  158. package/dist/contracts/agent.js.map +1 -0
  159. package/dist/contracts/config-store.d.ts +13 -0
  160. package/dist/contracts/config-store.d.ts.map +1 -0
  161. package/dist/contracts/config-store.js +2 -0
  162. package/dist/contracts/config-store.js.map +1 -0
  163. package/dist/contracts/crawler.d.ts +17 -0
  164. package/dist/contracts/crawler.d.ts.map +1 -0
  165. package/dist/contracts/crawler.js +2 -0
  166. package/dist/contracts/crawler.js.map +1 -0
  167. package/dist/contracts/exporter.d.ts +18 -0
  168. package/dist/contracts/exporter.d.ts.map +1 -0
  169. package/dist/contracts/exporter.js +11 -0
  170. package/dist/contracts/exporter.js.map +1 -0
  171. package/dist/contracts/index.d.ts +14 -0
  172. package/dist/contracts/index.d.ts.map +1 -0
  173. package/dist/contracts/index.js +2 -0
  174. package/dist/contracts/index.js.map +1 -0
  175. package/dist/contracts/mcp-tool-provider.d.ts +18 -0
  176. package/dist/contracts/mcp-tool-provider.d.ts.map +1 -0
  177. package/dist/contracts/mcp-tool-provider.js +2 -0
  178. package/dist/contracts/mcp-tool-provider.js.map +1 -0
  179. package/dist/contracts/report-pack-generator.d.ts +20 -0
  180. package/dist/contracts/report-pack-generator.d.ts.map +1 -0
  181. package/dist/contracts/report-pack-generator.js +2 -0
  182. package/dist/contracts/report-pack-generator.js.map +1 -0
  183. package/dist/contracts/search-provider.d.ts +15 -0
  184. package/dist/contracts/search-provider.d.ts.map +1 -0
  185. package/dist/contracts/search-provider.js +2 -0
  186. package/dist/contracts/search-provider.js.map +1 -0
  187. package/dist/contracts/session-manager.d.ts +36 -0
  188. package/dist/contracts/session-manager.d.ts.map +1 -0
  189. package/dist/contracts/session-manager.js +2 -0
  190. package/dist/contracts/session-manager.js.map +1 -0
  191. package/dist/index.d.ts +3 -0
  192. package/dist/index.d.ts.map +1 -0
  193. package/dist/index.js +299 -0
  194. package/dist/index.js.map +1 -0
  195. package/dist/lib/ai/provider-factory.d.ts +64 -0
  196. package/dist/lib/ai/provider-factory.d.ts.map +1 -0
  197. package/dist/lib/ai/provider-factory.js +249 -0
  198. package/dist/lib/ai/provider-factory.js.map +1 -0
  199. package/dist/lib/audit-logger.d.ts +10 -0
  200. package/dist/lib/audit-logger.d.ts.map +1 -0
  201. package/dist/lib/audit-logger.js +101 -0
  202. package/dist/lib/audit-logger.js.map +1 -0
  203. package/dist/lib/auth.d.ts +39 -0
  204. package/dist/lib/auth.d.ts.map +1 -0
  205. package/dist/lib/auth.js +219 -0
  206. package/dist/lib/auth.js.map +1 -0
  207. package/dist/lib/competitor-scheduler.d.ts +73 -0
  208. package/dist/lib/competitor-scheduler.d.ts.map +1 -0
  209. package/dist/lib/competitor-scheduler.js +235 -0
  210. package/dist/lib/competitor-scheduler.js.map +1 -0
  211. package/dist/lib/crawler.d.ts +17 -0
  212. package/dist/lib/crawler.d.ts.map +1 -0
  213. package/dist/lib/crawler.js +168 -0
  214. package/dist/lib/crawler.js.map +1 -0
  215. package/dist/lib/errors.d.ts +34 -0
  216. package/dist/lib/errors.d.ts.map +1 -0
  217. package/dist/lib/errors.js +63 -0
  218. package/dist/lib/errors.js.map +1 -0
  219. package/dist/lib/exporter.d.ts +9 -0
  220. package/dist/lib/exporter.d.ts.map +1 -0
  221. package/dist/lib/exporter.js +100 -0
  222. package/dist/lib/exporter.js.map +1 -0
  223. package/dist/lib/html-cleaner.d.ts +19 -0
  224. package/dist/lib/html-cleaner.d.ts.map +1 -0
  225. package/dist/lib/html-cleaner.js +144 -0
  226. package/dist/lib/html-cleaner.js.map +1 -0
  227. package/dist/lib/http.d.ts +18 -0
  228. package/dist/lib/http.d.ts.map +1 -0
  229. package/dist/lib/http.js +83 -0
  230. package/dist/lib/http.js.map +1 -0
  231. package/dist/lib/lockfile.d.ts +10 -0
  232. package/dist/lib/lockfile.d.ts.map +1 -0
  233. package/dist/lib/lockfile.js +56 -0
  234. package/dist/lib/lockfile.js.map +1 -0
  235. package/dist/lib/mcp-registry.d.ts +47 -0
  236. package/dist/lib/mcp-registry.d.ts.map +1 -0
  237. package/dist/lib/mcp-registry.js +212 -0
  238. package/dist/lib/mcp-registry.js.map +1 -0
  239. package/dist/lib/profile-resolver.d.ts +28 -0
  240. package/dist/lib/profile-resolver.d.ts.map +1 -0
  241. package/dist/lib/profile-resolver.js +72 -0
  242. package/dist/lib/profile-resolver.js.map +1 -0
  243. package/dist/lib/profile-store.d.ts +14 -0
  244. package/dist/lib/profile-store.d.ts.map +1 -0
  245. package/dist/lib/profile-store.js +80 -0
  246. package/dist/lib/profile-store.js.map +1 -0
  247. package/dist/lib/rate-limiter.d.ts +32 -0
  248. package/dist/lib/rate-limiter.d.ts.map +1 -0
  249. package/dist/lib/rate-limiter.js +124 -0
  250. package/dist/lib/rate-limiter.js.map +1 -0
  251. package/dist/lib/sandbox.d.ts +25 -0
  252. package/dist/lib/sandbox.d.ts.map +1 -0
  253. package/dist/lib/sandbox.js +134 -0
  254. package/dist/lib/sandbox.js.map +1 -0
  255. package/dist/lib/search.d.ts +22 -0
  256. package/dist/lib/search.d.ts.map +1 -0
  257. package/dist/lib/search.js +147 -0
  258. package/dist/lib/search.js.map +1 -0
  259. package/dist/lib/secret-scanner.d.ts +26 -0
  260. package/dist/lib/secret-scanner.d.ts.map +1 -0
  261. package/dist/lib/secret-scanner.js +74 -0
  262. package/dist/lib/secret-scanner.js.map +1 -0
  263. package/dist/lib/url.d.ts +17 -0
  264. package/dist/lib/url.d.ts.map +1 -0
  265. package/dist/lib/url.js +51 -0
  266. package/dist/lib/url.js.map +1 -0
  267. package/dist/mcp/progressive-discovery.d.ts +21 -0
  268. package/dist/mcp/progressive-discovery.d.ts.map +1 -0
  269. package/dist/mcp/progressive-discovery.js +86 -0
  270. package/dist/mcp/progressive-discovery.js.map +1 -0
  271. package/dist/mcp/ptc-executor.d.ts +92 -0
  272. package/dist/mcp/ptc-executor.d.ts.map +1 -0
  273. package/dist/mcp/ptc-executor.js +199 -0
  274. package/dist/mcp/ptc-executor.js.map +1 -0
  275. package/dist/mcp/server.d.ts +29 -0
  276. package/dist/mcp/server.d.ts.map +1 -0
  277. package/dist/mcp/server.js +299 -0
  278. package/dist/mcp/server.js.map +1 -0
  279. package/dist/mcp/tool-codegen.d.ts +33 -0
  280. package/dist/mcp/tool-codegen.d.ts.map +1 -0
  281. package/dist/mcp/tool-codegen.js +129 -0
  282. package/dist/mcp/tool-codegen.js.map +1 -0
  283. package/dist/mcp/tool-examples.d.ts +22 -0
  284. package/dist/mcp/tool-examples.d.ts.map +1 -0
  285. package/dist/mcp/tool-examples.js +117 -0
  286. package/dist/mcp/tool-examples.js.map +1 -0
  287. package/dist/mcp/tools/classify-signals.d.ts +67 -0
  288. package/dist/mcp/tools/classify-signals.d.ts.map +1 -0
  289. package/dist/mcp/tools/classify-signals.js +124 -0
  290. package/dist/mcp/tools/classify-signals.js.map +1 -0
  291. package/dist/mcp/tools/compute-risk-score.d.ts +97 -0
  292. package/dist/mcp/tools/compute-risk-score.d.ts.map +1 -0
  293. package/dist/mcp/tools/compute-risk-score.js +171 -0
  294. package/dist/mcp/tools/compute-risk-score.js.map +1 -0
  295. package/dist/mcp/tools/generate-plan.d.ts +99 -0
  296. package/dist/mcp/tools/generate-plan.d.ts.map +1 -0
  297. package/dist/mcp/tools/generate-plan.js +200 -0
  298. package/dist/mcp/tools/generate-plan.js.map +1 -0
  299. package/dist/mcp/tools/generate-report-pack.d.ts +119 -0
  300. package/dist/mcp/tools/generate-report-pack.d.ts.map +1 -0
  301. package/dist/mcp/tools/generate-report-pack.js +304 -0
  302. package/dist/mcp/tools/generate-report-pack.js.map +1 -0
  303. package/dist/mcp/tools/run-skeptic-review.d.ts +33 -0
  304. package/dist/mcp/tools/run-skeptic-review.d.ts.map +1 -0
  305. package/dist/mcp/tools/run-skeptic-review.js +157 -0
  306. package/dist/mcp/tools/run-skeptic-review.js.map +1 -0
  307. package/dist/mcp/tools/scan-saas-repo.d.ts +103 -0
  308. package/dist/mcp/tools/scan-saas-repo.d.ts.map +1 -0
  309. package/dist/mcp/tools/scan-saas-repo.js +421 -0
  310. package/dist/mcp/tools/scan-saas-repo.js.map +1 -0
  311. package/dist/mcp/tools/scrape-competitor.d.ts +38 -0
  312. package/dist/mcp/tools/scrape-competitor.d.ts.map +1 -0
  313. package/dist/mcp/tools/scrape-competitor.js +124 -0
  314. package/dist/mcp/tools/scrape-competitor.js.map +1 -0
  315. package/dist/mcp/tools/search-tools.d.ts +37 -0
  316. package/dist/mcp/tools/search-tools.d.ts.map +1 -0
  317. package/dist/mcp/tools/search-tools.js +109 -0
  318. package/dist/mcp/tools/search-tools.js.map +1 -0
  319. package/dist/packs/business-viability.d.ts +30 -0
  320. package/dist/packs/business-viability.d.ts.map +1 -0
  321. package/dist/packs/business-viability.js +37 -0
  322. package/dist/packs/business-viability.js.map +1 -0
  323. package/dist/packs/competitor-intel.d.ts +34 -0
  324. package/dist/packs/competitor-intel.d.ts.map +1 -0
  325. package/dist/packs/competitor-intel.js +72 -0
  326. package/dist/packs/competitor-intel.js.map +1 -0
  327. package/dist/packs/financial-audit.d.ts +40 -0
  328. package/dist/packs/financial-audit.d.ts.map +1 -0
  329. package/dist/packs/financial-audit.js +74 -0
  330. package/dist/packs/financial-audit.js.map +1 -0
  331. package/dist/packs/pitch-deck.d.ts +38 -0
  332. package/dist/packs/pitch-deck.d.ts.map +1 -0
  333. package/dist/packs/pitch-deck.js +80 -0
  334. package/dist/packs/pitch-deck.js.map +1 -0
  335. package/dist/packs/smm-gtm.d.ts +38 -0
  336. package/dist/packs/smm-gtm.d.ts.map +1 -0
  337. package/dist/packs/smm-gtm.js +83 -0
  338. package/dist/packs/smm-gtm.js.map +1 -0
  339. package/dist/packs/tech-audit.d.ts +34 -0
  340. package/dist/packs/tech-audit.d.ts.map +1 -0
  341. package/dist/packs/tech-audit.js +43 -0
  342. package/dist/packs/tech-audit.js.map +1 -0
  343. package/dist/project-templates/build-proof.d.ts +24 -0
  344. package/dist/project-templates/build-proof.d.ts.map +1 -0
  345. package/dist/project-templates/build-proof.js +108 -0
  346. package/dist/project-templates/build-proof.js.map +1 -0
  347. package/dist/project-templates/quickstart-renderer.d.ts +16 -0
  348. package/dist/project-templates/quickstart-renderer.d.ts.map +1 -0
  349. package/dist/project-templates/quickstart-renderer.js +57 -0
  350. package/dist/project-templates/quickstart-renderer.js.map +1 -0
  351. package/dist/project-templates/registry.d.ts +68 -0
  352. package/dist/project-templates/registry.d.ts.map +1 -0
  353. package/dist/project-templates/registry.js +328 -0
  354. package/dist/project-templates/registry.js.map +1 -0
  355. package/dist/project-templates/templates.d.ts +3 -0
  356. package/dist/project-templates/templates.d.ts.map +1 -0
  357. package/dist/project-templates/templates.js +188 -0
  358. package/dist/project-templates/templates.js.map +1 -0
  359. package/dist/prompts/biz-viability.d.ts +10 -0
  360. package/dist/prompts/biz-viability.d.ts.map +1 -0
  361. package/dist/prompts/biz-viability.js +35 -0
  362. package/dist/prompts/biz-viability.js.map +1 -0
  363. package/dist/prompts/catalog.d.ts +16 -0
  364. package/dist/prompts/catalog.d.ts.map +1 -0
  365. package/dist/prompts/catalog.js +17 -0
  366. package/dist/prompts/catalog.js.map +1 -0
  367. package/dist/prompts/competitor-intel.d.ts +10 -0
  368. package/dist/prompts/competitor-intel.d.ts.map +1 -0
  369. package/dist/prompts/competitor-intel.js +37 -0
  370. package/dist/prompts/competitor-intel.js.map +1 -0
  371. package/dist/prompts/finance-audit.d.ts +10 -0
  372. package/dist/prompts/finance-audit.d.ts.map +1 -0
  373. package/dist/prompts/finance-audit.js +35 -0
  374. package/dist/prompts/finance-audit.js.map +1 -0
  375. package/dist/prompts/fix-sprint-plan.d.ts +10 -0
  376. package/dist/prompts/fix-sprint-plan.d.ts.map +1 -0
  377. package/dist/prompts/fix-sprint-plan.js +45 -0
  378. package/dist/prompts/fix-sprint-plan.js.map +1 -0
  379. package/dist/prompts/gtm-smm.d.ts +10 -0
  380. package/dist/prompts/gtm-smm.d.ts.map +1 -0
  381. package/dist/prompts/gtm-smm.js +35 -0
  382. package/dist/prompts/gtm-smm.js.map +1 -0
  383. package/dist/prompts/orchestrator-dispatch.d.ts +40 -0
  384. package/dist/prompts/orchestrator-dispatch.d.ts.map +1 -0
  385. package/dist/prompts/orchestrator-dispatch.js +92 -0
  386. package/dist/prompts/orchestrator-dispatch.js.map +1 -0
  387. package/dist/prompts/pitch-deck.d.ts +10 -0
  388. package/dist/prompts/pitch-deck.d.ts.map +1 -0
  389. package/dist/prompts/pitch-deck.js +36 -0
  390. package/dist/prompts/pitch-deck.js.map +1 -0
  391. package/dist/prompts/prompt-template.d.ts +16 -0
  392. package/dist/prompts/prompt-template.d.ts.map +1 -0
  393. package/dist/prompts/prompt-template.js +22 -0
  394. package/dist/prompts/prompt-template.js.map +1 -0
  395. package/dist/prompts/repo-audit-deep.d.ts +10 -0
  396. package/dist/prompts/repo-audit-deep.d.ts.map +1 -0
  397. package/dist/prompts/repo-audit-deep.js +39 -0
  398. package/dist/prompts/repo-audit-deep.js.map +1 -0
  399. package/dist/prompts/repo-scan-quick.d.ts +35 -0
  400. package/dist/prompts/repo-scan-quick.d.ts.map +1 -0
  401. package/dist/prompts/repo-scan-quick.js +69 -0
  402. package/dist/prompts/repo-scan-quick.js.map +1 -0
  403. package/dist/prompts/skeptic-review.d.ts +10 -0
  404. package/dist/prompts/skeptic-review.d.ts.map +1 -0
  405. package/dist/prompts/skeptic-review.js +40 -0
  406. package/dist/prompts/skeptic-review.js.map +1 -0
  407. package/dist/schemas/agent-step-sequence.d.ts +41 -0
  408. package/dist/schemas/agent-step-sequence.d.ts.map +1 -0
  409. package/dist/schemas/agent-step-sequence.js +25 -0
  410. package/dist/schemas/agent-step-sequence.js.map +1 -0
  411. package/dist/schemas/artifact-envelope.v1.d.ts +69 -0
  412. package/dist/schemas/artifact-envelope.v1.d.ts.map +1 -0
  413. package/dist/schemas/artifact-envelope.v1.js +24 -0
  414. package/dist/schemas/artifact-envelope.v1.js.map +1 -0
  415. package/dist/schemas/business-viability.v1.d.ts +223 -0
  416. package/dist/schemas/business-viability.v1.d.ts.map +1 -0
  417. package/dist/schemas/business-viability.v1.js +47 -0
  418. package/dist/schemas/business-viability.v1.js.map +1 -0
  419. package/dist/schemas/common.d.ts +9 -0
  420. package/dist/schemas/common.d.ts.map +1 -0
  421. package/dist/schemas/common.js +8 -0
  422. package/dist/schemas/common.js.map +1 -0
  423. package/dist/schemas/competitor-intel.v1.d.ts +239 -0
  424. package/dist/schemas/competitor-intel.v1.d.ts.map +1 -0
  425. package/dist/schemas/competitor-intel.v1.js +59 -0
  426. package/dist/schemas/competitor-intel.v1.js.map +1 -0
  427. package/dist/schemas/config.d.ts +133 -0
  428. package/dist/schemas/config.d.ts.map +1 -0
  429. package/dist/schemas/config.js +142 -0
  430. package/dist/schemas/config.js.map +1 -0
  431. package/dist/schemas/financial-audit.v1.d.ts +139 -0
  432. package/dist/schemas/financial-audit.v1.d.ts.map +1 -0
  433. package/dist/schemas/financial-audit.v1.js +50 -0
  434. package/dist/schemas/financial-audit.v1.js.map +1 -0
  435. package/dist/schemas/fix-result.v1.d.ts +104 -0
  436. package/dist/schemas/fix-result.v1.d.ts.map +1 -0
  437. package/dist/schemas/fix-result.v1.js +41 -0
  438. package/dist/schemas/fix-result.v1.js.map +1 -0
  439. package/dist/schemas/founder-profile.d.ts +76 -0
  440. package/dist/schemas/founder-profile.d.ts.map +1 -0
  441. package/dist/schemas/founder-profile.js +54 -0
  442. package/dist/schemas/founder-profile.js.map +1 -0
  443. package/dist/schemas/investor-readiness.v1.d.ts +20 -0
  444. package/dist/schemas/investor-readiness.v1.d.ts.map +1 -0
  445. package/dist/schemas/investor-readiness.v1.js +15 -0
  446. package/dist/schemas/investor-readiness.v1.js.map +1 -0
  447. package/dist/schemas/mcp-server-entry.d.ts +37 -0
  448. package/dist/schemas/mcp-server-entry.d.ts.map +1 -0
  449. package/dist/schemas/mcp-server-entry.js +23 -0
  450. package/dist/schemas/mcp-server-entry.js.map +1 -0
  451. package/dist/schemas/pitch-deck.v1.d.ts +141 -0
  452. package/dist/schemas/pitch-deck.v1.d.ts.map +1 -0
  453. package/dist/schemas/pitch-deck.v1.js +57 -0
  454. package/dist/schemas/pitch-deck.v1.js.map +1 -0
  455. package/dist/schemas/plan.v1.d.ts +97 -0
  456. package/dist/schemas/plan.v1.d.ts.map +1 -0
  457. package/dist/schemas/plan.v1.js +41 -0
  458. package/dist/schemas/plan.v1.js.map +1 -0
  459. package/dist/schemas/project-template.d.ts +101 -0
  460. package/dist/schemas/project-template.d.ts.map +1 -0
  461. package/dist/schemas/project-template.js +59 -0
  462. package/dist/schemas/project-template.js.map +1 -0
  463. package/dist/schemas/research-result.v1.d.ts +45 -0
  464. package/dist/schemas/research-result.v1.d.ts.map +1 -0
  465. package/dist/schemas/research-result.v1.js +20 -0
  466. package/dist/schemas/research-result.v1.js.map +1 -0
  467. package/dist/schemas/roadmap.v1.d.ts +49 -0
  468. package/dist/schemas/roadmap.v1.d.ts.map +1 -0
  469. package/dist/schemas/roadmap.v1.js +22 -0
  470. package/dist/schemas/roadmap.v1.js.map +1 -0
  471. package/dist/schemas/scan-result.v1.d.ts +87 -0
  472. package/dist/schemas/scan-result.v1.d.ts.map +1 -0
  473. package/dist/schemas/scan-result.v1.js +22 -0
  474. package/dist/schemas/scan-result.v1.js.map +1 -0
  475. package/dist/schemas/session.d.ts +165 -0
  476. package/dist/schemas/session.d.ts.map +1 -0
  477. package/dist/schemas/session.js +70 -0
  478. package/dist/schemas/session.js.map +1 -0
  479. package/dist/schemas/smm-gtm.v1.d.ts +175 -0
  480. package/dist/schemas/smm-gtm.v1.d.ts.map +1 -0
  481. package/dist/schemas/smm-gtm.v1.js +60 -0
  482. package/dist/schemas/smm-gtm.v1.js.map +1 -0
  483. package/dist/schemas/tech-audit.v1.d.ts +254 -0
  484. package/dist/schemas/tech-audit.v1.d.ts.map +1 -0
  485. package/dist/schemas/tech-audit.v1.js +61 -0
  486. package/dist/schemas/tech-audit.v1.js.map +1 -0
  487. package/dist/session/agent-session.d.ts +20 -0
  488. package/dist/session/agent-session.d.ts.map +1 -0
  489. package/dist/session/agent-session.js +53 -0
  490. package/dist/session/agent-session.js.map +1 -0
  491. package/dist/session/compaction/memory-pointers.d.ts +17 -0
  492. package/dist/session/compaction/memory-pointers.d.ts.map +1 -0
  493. package/dist/session/compaction/memory-pointers.js +46 -0
  494. package/dist/session/compaction/memory-pointers.js.map +1 -0
  495. package/dist/session/compaction/selective-retention.d.ts +19 -0
  496. package/dist/session/compaction/selective-retention.d.ts.map +1 -0
  497. package/dist/session/compaction/selective-retention.js +36 -0
  498. package/dist/session/compaction/selective-retention.js.map +1 -0
  499. package/dist/session/compaction/trajectory-summarizer.d.ts +22 -0
  500. package/dist/session/compaction/trajectory-summarizer.d.ts.map +1 -0
  501. package/dist/session/compaction/trajectory-summarizer.js +34 -0
  502. package/dist/session/compaction/trajectory-summarizer.js.map +1 -0
  503. package/dist/session/sdk-hooks.d.ts +31 -0
  504. package/dist/session/sdk-hooks.d.ts.map +1 -0
  505. package/dist/session/sdk-hooks.js +56 -0
  506. package/dist/session/sdk-hooks.js.map +1 -0
  507. package/dist/session/session-manager.d.ts +42 -0
  508. package/dist/session/session-manager.d.ts.map +1 -0
  509. package/dist/session/session-manager.js +236 -0
  510. package/dist/session/session-manager.js.map +1 -0
  511. package/dist/session/token-tracker.d.ts +31 -0
  512. package/dist/session/token-tracker.d.ts.map +1 -0
  513. package/dist/session/token-tracker.js +66 -0
  514. package/dist/session/token-tracker.js.map +1 -0
  515. package/package.json +80 -0
@@ -0,0 +1,240 @@
1
+ import { resolveToken, validateToken } from '../../lib/auth.js';
2
+ import { httpFetch } from '../../lib/http.js';
3
+ import { colorize, bold } from '../tui/colors.js';
4
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
5
+ import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js';
6
+ import { createMCPServer } from '../../mcp/server.js';
7
+ function printHelp() {
8
+ console.log(`Usage: saasgadget doctor
9
+
10
+ Validates environment readiness:
11
+ - GitHub token validity
12
+ - AI backend connectivity
13
+ - MCP tool availability (listing + operational probe)
14
+ - Brave Search API key (optional)
15
+
16
+ Exit codes:
17
+ 0 = all required checks pass
18
+ 1 = one or more required checks fail
19
+ `);
20
+ }
21
+ export const USAGE = `
22
+ Usage: saasgadget doctor
23
+
24
+ Validates environment readiness:
25
+ - GitHub token validity
26
+ - AI backend connectivity
27
+ - MCP tool availability (listing + operational probe)
28
+ - Brave Search API key (optional)
29
+
30
+ Exit codes:
31
+ 0 = all required checks pass
32
+ 1 = one or more required checks fail
33
+ `;
34
+ const REQUIRED_MCP_TOOLS = [
35
+ 'scan_saas_repo',
36
+ 'classify_signals',
37
+ 'generate_report_pack',
38
+ 'generate_plan',
39
+ 'scrape_competitor',
40
+ 'compute_risk_score',
41
+ 'run_skeptic_review',
42
+ ];
43
+ async function checkToken() {
44
+ try {
45
+ const tokenInfo = await resolveToken();
46
+ const identity = await validateToken(tokenInfo.token);
47
+ return {
48
+ name: 'GitHub Token',
49
+ status: 'pass',
50
+ detail: `Authenticated as ${identity.login} (source: ${tokenInfo.source})`,
51
+ };
52
+ }
53
+ catch (err) {
54
+ return {
55
+ name: 'GitHub Token',
56
+ status: 'fail',
57
+ detail: err instanceof Error ? err.message : 'Token resolution failed',
58
+ remediation: 'Set COPILOT_GITHUB_TOKEN, GH_TOKEN, or GITHUB_TOKEN env var, or run `saasgadget auth login`.',
59
+ };
60
+ }
61
+ }
62
+ async function checkAIBackend() {
63
+ try {
64
+ const result = await httpFetch('https://api.github.com/meta', {
65
+ headers: { 'User-Agent': 'SaaSGadgetCLI' },
66
+ timeoutMs: 10_000,
67
+ });
68
+ if (result.status === 200) {
69
+ return {
70
+ name: 'AI Backend Connectivity',
71
+ status: 'pass',
72
+ detail: 'GitHub API reachable',
73
+ };
74
+ }
75
+ return {
76
+ name: 'AI Backend Connectivity',
77
+ status: 'fail',
78
+ detail: `GitHub API returned status ${result.status}`,
79
+ remediation: 'Check your internet connection and proxy settings.',
80
+ };
81
+ }
82
+ catch (err) {
83
+ return {
84
+ name: 'AI Backend Connectivity',
85
+ status: 'fail',
86
+ detail: err instanceof Error ? err.message : 'Connection failed',
87
+ remediation: 'Check your internet connection and proxy settings.',
88
+ };
89
+ }
90
+ }
91
+ async function checkMCPTools() {
92
+ const results = [];
93
+ // Phase 1: Create an in-process MCP server + client pair for probing
94
+ let client = null;
95
+ try {
96
+ const server = createMCPServer({ toolTimeoutMs: 5_000 });
97
+ const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
98
+ client = new Client({ name: 'saasgadget-doctor', version: '1.0.0' });
99
+ await server.connect(serverTransport);
100
+ await client.connect(clientTransport);
101
+ results.push({
102
+ name: 'MCP Server Module',
103
+ status: 'pass',
104
+ detail: 'MCP server created and connected in-process',
105
+ });
106
+ // Phase 2: listTools() — verify all 7 required tools are registered
107
+ const { tools } = await client.listTools();
108
+ const registeredNames = new Set(tools.map((t) => t.name));
109
+ for (const tool of REQUIRED_MCP_TOOLS) {
110
+ if (registeredNames.has(tool)) {
111
+ results.push({
112
+ name: `MCP Tool Listed: ${tool}`,
113
+ status: 'pass',
114
+ detail: 'Registered in tool list',
115
+ });
116
+ }
117
+ else {
118
+ results.push({
119
+ name: `MCP Tool Listed: ${tool}`,
120
+ status: 'fail',
121
+ detail: 'NOT found in tool list',
122
+ remediation: `Tool "${tool}" is missing from MCP server registration. Verify src/mcp/server.ts.`,
123
+ });
124
+ }
125
+ }
126
+ // Phase 3: Operational probe (M4) — callTool with minimal input per tool
127
+ // Expects structured MCP error {isError: true} (not a transport crash)
128
+ for (const tool of REQUIRED_MCP_TOOLS) {
129
+ if (!registeredNames.has(tool))
130
+ continue;
131
+ try {
132
+ const probeResult = await client.callTool({ name: tool, arguments: {} });
133
+ // Any structured response (even isError: true) = operationally reachable
134
+ if (probeResult.isError) {
135
+ results.push({
136
+ name: `MCP Probe: ${tool}`,
137
+ status: 'pass',
138
+ detail: 'Operational — returned structured error (expected without full context)',
139
+ });
140
+ }
141
+ else {
142
+ results.push({
143
+ name: `MCP Probe: ${tool}`,
144
+ status: 'pass',
145
+ detail: 'Operational — returned success response',
146
+ });
147
+ }
148
+ }
149
+ catch (err) {
150
+ // Transport crash or unhandled throw = distinct failure mode
151
+ results.push({
152
+ name: `MCP Probe: ${tool}`,
153
+ status: 'fail',
154
+ detail: `Non-operational — ${err instanceof Error ? err.message : 'unknown error'}`,
155
+ remediation: `Tool "${tool}" crashed during probe. Check tool handler in src/mcp/tools/.`,
156
+ });
157
+ }
158
+ }
159
+ // Cleanup
160
+ await client.close();
161
+ }
162
+ catch (err) {
163
+ results.push({
164
+ name: 'MCP Server Module',
165
+ status: 'fail',
166
+ detail: err instanceof Error ? err.message : 'Failed to create MCP server',
167
+ remediation: 'Run `npm run build` first, or check src/mcp/server.ts for errors.',
168
+ });
169
+ for (const tool of REQUIRED_MCP_TOOLS) {
170
+ results.push({
171
+ name: `MCP Tool: ${tool}`,
172
+ status: 'warn',
173
+ detail: 'Skipped — MCP server creation failed',
174
+ });
175
+ }
176
+ }
177
+ return results;
178
+ }
179
+ function checkBraveApiKey() {
180
+ const key = process.env['BRAVE_API_KEY'];
181
+ if (key && key.length > 0) {
182
+ return {
183
+ name: 'Brave Search Fallback',
184
+ status: 'pass',
185
+ detail: 'BRAVE_API_KEY configured — enhanced search available',
186
+ };
187
+ }
188
+ return {
189
+ name: 'Brave Search Fallback',
190
+ status: 'warn',
191
+ detail: 'Not configured — set BRAVE_API_KEY for enhanced search (optional)',
192
+ };
193
+ }
194
+ function formatStatus(status) {
195
+ switch (status) {
196
+ case 'pass':
197
+ return colorize('✓ PASS', 'success');
198
+ case 'fail':
199
+ return colorize('✗ FAIL', 'error');
200
+ case 'warn':
201
+ return colorize('⚠ WARN', 'warning');
202
+ }
203
+ }
204
+ export async function execute(args, flags) {
205
+ if (args.includes('--help') || args.includes('-h') || flags.help) {
206
+ printHelp();
207
+ return;
208
+ }
209
+ console.log(bold(colorize('\n SaaSGadget Doctor — Environment Check\n', 'primary')));
210
+ const results = [];
211
+ // Run checks
212
+ results.push(await checkToken());
213
+ results.push(await checkAIBackend());
214
+ const mcpResults = await checkMCPTools();
215
+ results.push(...mcpResults);
216
+ results.push(checkBraveApiKey());
217
+ // Display results
218
+ let hasFailures = false;
219
+ for (const result of results) {
220
+ const statusStr = formatStatus(result.status);
221
+ console.log(` ${statusStr} ${result.name}`);
222
+ console.log(` ${colorize(result.detail, 'muted')}`);
223
+ if (result.remediation) {
224
+ console.log(` ${colorize('→ ' + result.remediation, 'accent')}`);
225
+ }
226
+ if (result.status === 'fail')
227
+ hasFailures = true;
228
+ }
229
+ // Summary
230
+ const passCount = results.filter((r) => r.status === 'pass').length;
231
+ const failCount = results.filter((r) => r.status === 'fail').length;
232
+ const warnCount = results.filter((r) => r.status === 'warn').length;
233
+ console.log(`\n ${bold('Summary:')} ${colorize(`${passCount} pass`, 'success')}, ` +
234
+ `${failCount > 0 ? colorize(`${failCount} fail`, 'error') : `${failCount} fail`}, ` +
235
+ `${warnCount > 0 ? colorize(`${warnCount} warn`, 'warning') : `${warnCount} warn`}\n`);
236
+ if (hasFailures) {
237
+ process.exit(1);
238
+ }
239
+ }
240
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CommandFlags } from './types.js';
2
+ export declare const USAGE = "\nUsage: saasgadget fix [options] [<request>]\n\nGenerate and optionally apply code patches for a change request.\n\nOptions:\n --repo <owner/name> Repository to fix (required)\n --request <text> Change request description (or positional argument)\n --ref <ref> Git ref (default: repo default branch)\n --tier <level> safe | moderate | advanced (default: safe)\n --local Use a local checkout\n --path <dir> Local checkout path (requires --local)\n --execute Apply patches immediately (skips dry-run)\n --dry-run Preview patches without applying (default)\n --skeptic Run skeptic review on generated patches\n -h, --help Show this help message\n\nExamples:\n saasgadget fix --repo owner/name \"Add rate limiting to /api/auth\"\n saasgadget fix --repo owner/name --execute --tier moderate \"Remove hardcoded secret\"\n";
3
+ export declare function execute(args: string[], flags: CommandFlags): Promise<void>;
4
+ //# sourceMappingURL=fix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/fix.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAa/C,eAAO,MAAM,KAAK,+5BAoBjB,CAAC;AAwFF,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8RhF"}
@@ -0,0 +1,344 @@
1
+ /**
2
+ * fix command — generate and optionally apply code patches.
3
+ * @module cli/commands/fix
4
+ */
5
+ import { join } from 'node:path';
6
+ import { writeFile, mkdir, readFile } from 'node:fs/promises';
7
+ import { createHash } from 'node:crypto';
8
+ import { executeGeneratePlan } from '../../mcp/tools/generate-plan.js';
9
+ import { writeJsonArtifact } from '../output/json-writer.js';
10
+ import { writeMarkdownArtifact } from '../output/markdown-writer.js';
11
+ import { resolveDefaultBranch } from '../../lib/http.js';
12
+ import { scanForOWASP, scanForSecrets } from '../../lib/secret-scanner.js';
13
+ import { SessionManager } from '../../session/session-manager.js';
14
+ import { setAgentInvoker } from '../../mcp/server.js';
15
+ import { SaaSGadgetError } from '../../lib/errors.js';
16
+ import { resolveOutputDir } from '../flag-resolver.js';
17
+ export const USAGE = `
18
+ Usage: saasgadget fix [options] [<request>]
19
+
20
+ Generate and optionally apply code patches for a change request.
21
+
22
+ Options:
23
+ --repo <owner/name> Repository to fix (required)
24
+ --request <text> Change request description (or positional argument)
25
+ --ref <ref> Git ref (default: repo default branch)
26
+ --tier <level> safe | moderate | advanced (default: safe)
27
+ --local Use a local checkout
28
+ --path <dir> Local checkout path (requires --local)
29
+ --execute Apply patches immediately (skips dry-run)
30
+ --dry-run Preview patches without applying (default)
31
+ --skeptic Run skeptic review on generated patches
32
+ -h, --help Show this help message
33
+
34
+ Examples:
35
+ saasgadget fix --repo owner/name "Add rate limiting to /api/auth"
36
+ saasgadget fix --repo owner/name --execute --tier moderate "Remove hardcoded secret"
37
+ `;
38
+ function parseFixArgs(args, flags) {
39
+ let request;
40
+ let repo;
41
+ let ref;
42
+ let tier = 'safe';
43
+ let dryRun = true;
44
+ let execute = false;
45
+ let local = false;
46
+ let localPath;
47
+ let skeptic = false;
48
+ for (let i = 0; i < args.length; i++) {
49
+ const arg = args[i] ?? '';
50
+ if (arg === '--request' && i + 1 < args.length) {
51
+ request = args[++i] ?? '';
52
+ }
53
+ else if (arg === '--repo' && i + 1 < args.length) {
54
+ repo = args[++i] ?? '';
55
+ }
56
+ else if (arg === '--ref' && i + 1 < args.length) {
57
+ ref = args[++i] ?? '';
58
+ }
59
+ else if (arg === '--tier' && i + 1 < args.length) {
60
+ tier = args[++i];
61
+ }
62
+ else if (arg === '--execute') {
63
+ execute = true;
64
+ dryRun = false;
65
+ }
66
+ else if (arg === '--dry-run') {
67
+ dryRun = true;
68
+ execute = false;
69
+ }
70
+ else if (arg === '--local') {
71
+ local = true;
72
+ }
73
+ else if (arg === '--path' && i + 1 < args.length) {
74
+ localPath = args[++i] ?? '';
75
+ }
76
+ else if (arg === '--skeptic') {
77
+ skeptic = true;
78
+ }
79
+ else if (arg === '--yolo') {
80
+ // parsed from args; also available via flags.yolo from global flag
81
+ }
82
+ else if (!arg.startsWith('--') && !request) {
83
+ // Positional: issue description
84
+ request = arg;
85
+ }
86
+ }
87
+ if (!repo) {
88
+ throw new SaaSGadgetError('Missing required flag: --repo <owner/name>', 'FIX_MISSING_REPO', 'Provide --repo flag, e.g.: saasgadget fix --repo owner/name "Fix auth bypass"');
89
+ }
90
+ if (!request) {
91
+ throw new SaaSGadgetError('Missing issue description', 'FIX_MISSING_REQUEST', 'Provide an issue description, e.g.: saasgadget fix --repo owner/name "Fix auth bypass"');
92
+ }
93
+ if (execute && !local) {
94
+ throw new SaaSGadgetError('--execute requires --local flag (file writes need local checkout)', 'FIX_EXECUTE_REQUIRES_LOCAL', 'Add --local flag: saasgadget fix --repo owner/name "..." --execute --local');
95
+ }
96
+ const outputDir = resolveOutputDir(flags);
97
+ // Note: outputDir will be re-resolved with session ID after session creation
98
+ const detail = (flags.detail ?? 'balanced');
99
+ const yolo = flags.yolo ?? false;
100
+ return { request, repo, ref, tier, dryRun, execute, local, localPath, skeptic, yolo, outputDir, detail };
101
+ }
102
+ export async function execute(args, flags) {
103
+ const opts = parseFixArgs(args, flags);
104
+ const [owner, name] = opts.repo.split('/');
105
+ if (!owner || !name) {
106
+ throw new SaaSGadgetError('Invalid --repo format. Expected owner/name.', 'FIX_INVALID_REPO', 'Use --repo owner/name format');
107
+ }
108
+ // Resolve ref
109
+ let resolvedRef = opts.ref;
110
+ if (!resolvedRef) {
111
+ resolvedRef = await resolveDefaultBranch(owner, name);
112
+ }
113
+ if (!resolvedRef)
114
+ resolvedRef = 'main';
115
+ // Create session
116
+ const sessionManager = new SessionManager();
117
+ const session = await sessionManager.create({
118
+ userId: 'local',
119
+ taskType: 'fix',
120
+ repo: opts.repo,
121
+ ref: resolvedRef,
122
+ sourceMode: 'remote',
123
+ approvalMode: opts.yolo ? 'yolo' : 'guided',
124
+ tokenBudget: 1_000_000,
125
+ toolProfile: opts.dryRun ? 'plan' : 'run',
126
+ });
127
+ if (!flags.quiet) {
128
+ console.log(`Generating fix for ${opts.repo}@${resolvedRef}...`);
129
+ console.log(`Request: ${opts.request}`);
130
+ console.log(`Tier: ${opts.tier} | Mode: ${opts.dryRun ? 'dry-run' : 'execute'}`);
131
+ console.log(`Session: ${session.sessionId}`);
132
+ }
133
+ // Re-resolve outputDir with session ID for session-bound output
134
+ if (!flags.outputDir) {
135
+ opts.outputDir = resolveOutputDir(flags, session.sessionId);
136
+ }
137
+ const startMs = Date.now();
138
+ try {
139
+ const log = flags.verbose
140
+ ? async (_level, msg) => { console.log(` [fix] ${msg}`); }
141
+ : async () => { };
142
+ // Set up agent invoker
143
+ const { Orchestrator } = await import('../../agents/orchestrator.js');
144
+ const { CodeInspector } = await import('../../agents/code-inspector.js');
145
+ const { getAIProvider } = await import('../../lib/ai/provider-factory.js');
146
+ const { ConfigStore } = await import('../../config/config-store.js');
147
+ const configStore = new ConfigStore();
148
+ const orchestrator = new Orchestrator(configStore);
149
+ const provider = getAIProvider();
150
+ orchestrator.registerAgent(new CodeInspector(provider));
151
+ setAgentInvoker(orchestrator);
152
+ // Generate plan first (fix builds on plan)
153
+ const planResult = await executeGeneratePlan({
154
+ request: opts.request,
155
+ repo: opts.repo,
156
+ ref: resolvedRef,
157
+ scanResult: null,
158
+ detail: opts.detail,
159
+ }, orchestrator, log);
160
+ // Convert plan steps to patches filtered by tier
161
+ const tierOrder = { safe: 0, moderate: 1, advanced: 2 };
162
+ const maxTier = tierOrder[opts.tier];
163
+ const patches = planResult.steps
164
+ .filter((step) => tierOrder[step.riskTier] <= maxTier)
165
+ .map((step) => ({
166
+ filePath: step.filePath,
167
+ lineRange: step.lineRange ?? { start: 1, end: 1 },
168
+ before: '',
169
+ after: '',
170
+ rationale: step.rationale,
171
+ riskTier: step.riskTier,
172
+ confidence: step.confidence,
173
+ targetFileHash: undefined,
174
+ }));
175
+ // Compute SHA-256 hashes for stale-patch protection when local checkout
176
+ if (opts.local) {
177
+ const basePath = opts.localPath ?? process.cwd();
178
+ for (const patch of patches) {
179
+ try {
180
+ const content = await readFile(join(basePath, patch.filePath), 'utf-8');
181
+ patch.targetFileHash = createHash('sha256').update(content).digest('hex');
182
+ }
183
+ catch {
184
+ // File may not exist yet (new file patches)
185
+ patch.targetFileHash = undefined;
186
+ }
187
+ }
188
+ }
189
+ const fixId = `fix-${Date.now().toString(36)}`;
190
+ const patchDir = join(opts.outputDir, 'patches');
191
+ const fixResult = {
192
+ id: fixId,
193
+ sessionId: session.sessionId,
194
+ request: opts.request,
195
+ repo: opts.repo,
196
+ generatedAt: new Date().toISOString(),
197
+ tier: opts.tier,
198
+ patches,
199
+ riskItems: planResult.riskItems.map((r) => ({
200
+ ...r,
201
+ priority: 'now',
202
+ })),
203
+ status: 'draft',
204
+ promptVersions: { 'fix.sprint.plan': '1.0.0' },
205
+ nextActions: planResult.nextActions,
206
+ sevenDayTimeline: planResult.sevenDayTimeline,
207
+ outputPatchDir: patchDir,
208
+ };
209
+ // Write patch files if --execute (not dry-run)
210
+ if (opts.execute && patches.length > 0) {
211
+ await mkdir(patchDir, { recursive: true });
212
+ // Stale-patch verification before applying
213
+ if (opts.local) {
214
+ const basePath = opts.localPath ?? process.cwd();
215
+ for (const patch of patches) {
216
+ if (patch.targetFileHash) {
217
+ try {
218
+ const currentContent = await readFile(join(basePath, patch.filePath), 'utf-8');
219
+ const currentHash = createHash('sha256').update(currentContent).digest('hex');
220
+ if (currentHash !== patch.targetFileHash) {
221
+ throw new SaaSGadgetError(`Target file ${patch.filePath} changed since patch was generated (hash mismatch)`, 'FIX_STALE_PATCH', 'Re-run the fix command to generate fresh patches against the current file state');
222
+ }
223
+ }
224
+ catch (err) {
225
+ if (err instanceof SaaSGadgetError)
226
+ throw err;
227
+ // File not found — new file patch, proceed
228
+ }
229
+ }
230
+ }
231
+ }
232
+ for (let i = 0; i < patches.length; i++) {
233
+ const patch = patches[i] ?? patches[0];
234
+ // T086: OWASP + secret scanning gate before writing patches
235
+ const patchContent = patch.after;
236
+ if (patchContent) {
237
+ const owaspFindings = scanForOWASP(patchContent);
238
+ const secretFindings = scanForSecrets(patchContent);
239
+ if (owaspFindings.length > 0 && !opts.yolo) {
240
+ const details = owaspFindings
241
+ .map((f) => ` [${f.category}] ${f.name} at line ${f.line}`)
242
+ .join('\n');
243
+ throw new SaaSGadgetError(`Patch for ${patch.filePath} contains OWASP vulnerability patterns:\n${details}`, 'FIX_OWASP_VIOLATION', 'Review the generated patch. Use --yolo to bypass (not recommended for production).');
244
+ }
245
+ if (secretFindings.length > 0) {
246
+ const details = secretFindings
247
+ .map((f) => ` [${f.pattern}] line ${f.line}: ${f.context.slice(0, 60)}`)
248
+ .join('\n');
249
+ throw new SaaSGadgetError(`Patch for ${patch.filePath} contains potential secrets:\n${details}`, 'FIX_SECRET_LEAK', 'Remove hardcoded credentials before applying. Secrets must never be committed to code.');
250
+ }
251
+ }
252
+ const patchFile = join(patchDir, `patch-${String(i + 1).padStart(3, '0')}.json`);
253
+ await writeFile(patchFile, JSON.stringify(patch, null, 2));
254
+ }
255
+ fixResult.status = 'applied';
256
+ if (!flags.quiet)
257
+ console.log(` Patches written to: ${patchDir}`);
258
+ }
259
+ // Run optional skeptic review
260
+ let skepticReview = null;
261
+ if (opts.skeptic) {
262
+ const { executeSkepticReview } = await import('../../mcp/tools/run-skeptic-review.js');
263
+ skepticReview = await executeSkepticReview({
264
+ artifact: fixResult,
265
+ packType: 'fix',
266
+ }, orchestrator, log);
267
+ }
268
+ const durationMs = Date.now() - startMs;
269
+ // Build artifact envelope
270
+ const envelope = {
271
+ metadata: {
272
+ schemaVersion: '1.0.0',
273
+ packType: 'fix',
274
+ generatedAt: fixResult.generatedAt,
275
+ repo: opts.repo,
276
+ sessionId: session.sessionId,
277
+ promptVersions: fixResult.promptVersions,
278
+ },
279
+ data: {
280
+ id: fixResult.id,
281
+ request: fixResult.request,
282
+ tier: fixResult.tier,
283
+ patches: fixResult.patches,
284
+ riskItems: fixResult.riskItems,
285
+ status: fixResult.status,
286
+ patchCount: patches.length,
287
+ },
288
+ nextActions: fixResult.nextActions,
289
+ sevenDayTimeline: fixResult.sevenDayTimeline,
290
+ assumptions: planResult.assumptions,
291
+ dataFreshness: new Date().toISOString(),
292
+ completeness: patches.length === planResult.steps.length ? 'complete' : 'partial',
293
+ skepticReview,
294
+ };
295
+ // Write outputs per contract: fix.json, fix.md, fix.checklist.md
296
+ const format = flags.format ?? 'dual';
297
+ if (format === 'json' || format === 'dual') {
298
+ const jsonPath = join(opts.outputDir, 'fix.json');
299
+ await writeJsonArtifact(jsonPath, envelope);
300
+ if (!flags.quiet)
301
+ console.log(` JSON: ${jsonPath}`);
302
+ }
303
+ if (format === 'markdown' || format === 'dual') {
304
+ const mdPath = join(opts.outputDir, 'fix.md');
305
+ await writeMarkdownArtifact(mdPath, envelope);
306
+ if (!flags.quiet)
307
+ console.log(` Markdown: ${mdPath}`);
308
+ }
309
+ // Checklist artifact
310
+ const checklistPath = join(opts.outputDir, 'fix.checklist.md');
311
+ const checklistLines = [
312
+ '# Fix Checklist',
313
+ '',
314
+ `**Repo**: ${opts.repo}`,
315
+ `**Request**: ${opts.request}`,
316
+ `**Tier**: ${opts.tier}`,
317
+ `**Generated**: ${fixResult.generatedAt}`,
318
+ '',
319
+ '## Patches',
320
+ ...patches.map((p, i) => `- [ ] Patch ${i + 1}: ${p.filePath} — ${p.rationale} (${p.riskTier})`),
321
+ '',
322
+ '## Risk Items',
323
+ ...fixResult.riskItems.map((r) => `- [ ] ${r.description}`),
324
+ '',
325
+ '## Next Actions',
326
+ ...fixResult.nextActions.map((a) => `- [ ] ${a.action}`),
327
+ ];
328
+ await writeFile(checklistPath, checklistLines.join('\n'));
329
+ if (!flags.quiet)
330
+ console.log(` Checklist: ${checklistPath}`);
331
+ await sessionManager.update({ ...session, state: 'completed' });
332
+ if (!flags.quiet) {
333
+ console.log(`\nFix generated in ${durationMs}ms`);
334
+ console.log(`Patches: ${patches.length} (tier: ${opts.tier})`);
335
+ console.log(`Status: ${fixResult.status}`);
336
+ console.log(`Risk items: ${fixResult.riskItems.length}`);
337
+ }
338
+ }
339
+ catch (error) {
340
+ await sessionManager.update({ ...session, state: 'error' });
341
+ throw error;
342
+ }
343
+ }
344
+ //# sourceMappingURL=fix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix.js","sourceRoot":"","sources":["../../../src/cli/commands/fix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * init command — interactive profile preset selection, config file creation, first-run wizard.
3
+ * @module cli/commands/init
4
+ */
5
+ import type { CommandFlags } from './types.js';
6
+ export declare const USAGE = "\nUsage: saasgadget init [--reset] [--preset <name>]\n\nOptions:\n --reset Regenerate config from defaults\n --preset <name> Skip interactive selection (founder-safe | power-user | audit-max)\n -h, --help Show this help message\n";
7
+ export declare function execute(args: string[], flags: CommandFlags): Promise<void>;
8
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAgB/C,eAAO,MAAM,KAAK,yQAOjB,CAAC;AAuCF,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkEhF"}