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
package/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 WxZRD Media
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,48 @@
1
+ # saasgadget
2
+
3
+ CLI tool for solo SaaS founders — scan repos, generate audit reports, plan changes, and manage MCP servers.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ npx saasgadget scan .
9
+ ```
10
+
11
+ Or install globally:
12
+
13
+ ```bash
14
+ npm install -g saasgadget
15
+ saasgadget scan .
16
+ sg scan . # short alias
17
+ ```
18
+
19
+ ## Commands
20
+
21
+ | Command | Description |
22
+ | ----------- | ---------------------------------------------- |
23
+ | `scan` | Scan a repository for SaaS signals |
24
+ | `report` | Generate a structured audit report pack |
25
+ | `plan` | Create a prioritized change plan |
26
+ | `new` | Scaffold a new SaaS project from templates |
27
+ | `mcp` | Start the MCP server for IDE integration |
28
+ | `auth` | Authenticate with GitHub |
29
+ | `settings` | Manage CLI configuration |
30
+ | `session` | Manage analysis sessions |
31
+ | `doctor` | Diagnose environment and connectivity issues |
32
+
33
+ ## Features
34
+
35
+ - **Repository Analysis**: Detect auth, billing, tenancy, security, and code-health signals
36
+ - **Dual Output**: Every analytical command produces JSON + Markdown
37
+ - **MCP Server**: Expose tools to VS Code Copilot and other MCP clients
38
+ - **Session Management**: Track analysis across multiple runs with token budgets
39
+ - **Project Templates**: Scaffold Stripe billing, Supabase auth, RBAC, and more
40
+
41
+ ## Documentation
42
+
43
+ - Website: [saasgadget.io](https://saasgadget.io)
44
+ - Docs: [docs.saasgadget.io](https://docs.saasgadget.io)
45
+
46
+ ## License
47
+
48
+ MIT — see [LICENSE.md](./LICENSE.md)
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Business Analyst specialist agent — market analysis, revenue model, moat evaluation.
3
+ * @module agents/business-analyst
4
+ */
5
+ import type { IAgent, AgentContext, AgentResult } from '../contracts/agent.js';
6
+ import type { AIProvider } from '../lib/ai/provider-factory.js';
7
+ export declare class BusinessAnalyst implements IAgent {
8
+ private readonly provider;
9
+ constructor(provider: AIProvider);
10
+ getName(): string;
11
+ getDomain(): string;
12
+ analyze(context: AgentContext): Promise<AgentResult>;
13
+ }
14
+ //# sourceMappingURL=business-analyst.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business-analyst.d.ts","sourceRoot":"","sources":["../../src/agents/business-analyst.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAIhE,qBAAa,eAAgB,YAAW,MAAM;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAE1B,QAAQ,EAAE,UAAU;IAIhC,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,MAAM;IAIb,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CA2D3D"}
@@ -0,0 +1,70 @@
1
+ import { bizViabilityTemplate } from '../prompts/biz-viability.js';
2
+ export class BusinessAnalyst {
3
+ provider;
4
+ constructor(provider) {
5
+ this.provider = provider;
6
+ }
7
+ getName() {
8
+ return 'business-analyst';
9
+ }
10
+ getDomain() {
11
+ return 'business';
12
+ }
13
+ async analyze(context) {
14
+ const assumptions = [];
15
+ const signals = [];
16
+ const { repo } = context;
17
+ // Build analysis prompt from template
18
+ const prompt = [
19
+ `PERSONA: ${bizViabilityTemplate.persona}`,
20
+ `OBJECTIVE: ${bizViabilityTemplate.objective}`,
21
+ `CONSTRAINTS: ${bizViabilityTemplate.constraints}`,
22
+ `CONTEXT: Analyzing ${repo.owner}/${repo.name} (ref: ${repo.ref})`,
23
+ `CONFIDENCE RUBRIC: ${bizViabilityTemplate.confidence_rubric}`,
24
+ ].join('\n\n');
25
+ let rawOutput;
26
+ try {
27
+ rawOutput = await this.provider.chat([
28
+ { role: 'system', content: prompt },
29
+ {
30
+ role: 'user',
31
+ content: `Analyze the business viability of ${repo.owner}/${repo.name}. ` +
32
+ `Detail level: ${context.detail ?? 'balanced'}. ` +
33
+ (context.founderProfile
34
+ ? `Founder context available: ${JSON.stringify(context.founderProfile)}`
35
+ : 'No founder context provided.') +
36
+ (context.scanResult
37
+ ? `\n\nPrior scan results available:\n${JSON.stringify(context.scanResult, null, 2).slice(0, 4000)}`
38
+ : ''),
39
+ },
40
+ ]);
41
+ }
42
+ catch {
43
+ rawOutput = 'Business analysis could not be completed — AI provider unavailable.';
44
+ assumptions.push({
45
+ statement: 'AI analysis unavailable — provider returned an error',
46
+ confidence: 0.1,
47
+ source: 'agent',
48
+ });
49
+ }
50
+ // Generate baseline signals from available context
51
+ signals.push({
52
+ id: `ba-${Date.now()}-001`,
53
+ category: 'architecture',
54
+ severity: 'info',
55
+ title: 'Business Analysis Completed',
56
+ finding: `Business viability analysis performed for ${repo.owner}/${repo.name}`,
57
+ evidence: [{ filePath: 'README.md', lineRange: null, content: 'Repository analyzed', toolOutput: null }],
58
+ ruleAnchored: false,
59
+ agentConfidence: 0.7,
60
+ priority: 'next',
61
+ });
62
+ return {
63
+ findings: signals,
64
+ assumptions,
65
+ confidence: 0.7,
66
+ rawOutput,
67
+ };
68
+ }
69
+ }
70
+ //# sourceMappingURL=business-analyst.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business-analyst.js","sourceRoot":"","sources":["../../src/agents/business-analyst.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,MAAM,OAAO,eAAe;IACT,QAAQ,CAAa;IAEtC,YAAY,QAAoB;QAC9B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,SAAS;QACP,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAqB;QACjC,MAAM,WAAW,GAAiB,EAAE,CAAC;QACrC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAEzB,sCAAsC;QACtC,MAAM,MAAM,GAAG;YACb,YAAY,oBAAoB,CAAC,OAAO,EAAE;YAC1C,cAAc,oBAAoB,CAAC,SAAS,EAAE;YAC9C,gBAAgB,oBAAoB,CAAC,WAAW,EAAE;YAClD,sBAAsB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,GAAG,GAAG;YAClE,sBAAsB,oBAAoB,CAAC,iBAAiB,EAAE;SAC/D,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEf,IAAI,SAAiB,CAAC;QACtB,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE;gBACnC;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,qCAAqC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI;wBACvE,iBAAiB,OAAO,CAAC,MAAM,IAAI,UAAU,IAAI;wBACjD,CAAC,OAAO,CAAC,cAAc;4BACrB,CAAC,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;4BACxE,CAAC,CAAC,8BAA8B,CAAC;wBACnC,CAAC,OAAO,CAAC,UAAU;4BACjB,CAAC,CAAC,sCAAsC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;4BACpG,CAAC,CAAC,EAAE,CAAC;iBACV;aACF,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,GAAG,qEAAqE,CAAC;YAClF,WAAW,CAAC,IAAI,CAAC;gBACf,SAAS,EAAE,sDAAsD;gBACjE,UAAU,EAAE,GAAG;gBACf,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;QACL,CAAC;QAED,mDAAmD;QACnD,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,MAAM;YAC1B,QAAQ,EAAE,cAAc;YACxB,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,6BAA6B;YACpC,OAAO,EAAE,6CAA6C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;YAC/E,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YACxG,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,GAAG;YACpB,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE,OAAO;YACjB,WAAW;YACX,UAAU,EAAE,GAAG;YACf,SAAS;SACV,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Code Inspector specialist agent — architecture analysis, code health signals.
3
+ * Receives CopilotProvider instance injected via constructor by the orchestrator.
4
+ * @module agents/code-inspector
5
+ */
6
+ import type { IAgent, AgentContext, AgentResult } from '../contracts/agent.js';
7
+ import type { AIProvider } from '../lib/ai/provider-factory.js';
8
+ export declare class CodeInspector implements IAgent {
9
+ private readonly provider;
10
+ constructor(provider: AIProvider);
11
+ getName(): string;
12
+ getDomain(): string;
13
+ analyze(context: AgentContext): Promise<AgentResult>;
14
+ /**
15
+ * Enhance an existing scan result with additional agent analysis.
16
+ */
17
+ private enhanceExistingScan;
18
+ }
19
+ //# sourceMappingURL=code-inspector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-inspector.d.ts","sourceRoot":"","sources":["../../src/agents/code-inspector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAOhE,qBAAa,aAAc,YAAW,MAAM;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAE1B,QAAQ,EAAE,UAAU;IAIhC,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,MAAM;IAIb,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAsG1D;;OAEG;YACW,mBAAmB;CA+ClC"}
@@ -0,0 +1,149 @@
1
+ import { CATEGORY_TO_DOMAIN } from '../schemas/common.js';
2
+ import { executeScanSaasRepo } from '../mcp/tools/scan-saas-repo.js';
3
+ import { classifyFindings } from '../mcp/tools/classify-signals.js';
4
+ import { applyBaselineRules, computeRiskScore } from '../mcp/tools/compute-risk-score.js';
5
+ export class CodeInspector {
6
+ provider;
7
+ constructor(provider) {
8
+ this.provider = provider;
9
+ }
10
+ getName() {
11
+ return 'code-inspector';
12
+ }
13
+ getDomain() {
14
+ return 'code-health';
15
+ }
16
+ async analyze(context) {
17
+ const assumptions = [];
18
+ const { repo, scanResult } = context;
19
+ // If scan result already exists, enhance it with agent analysis
20
+ if (scanResult && typeof scanResult === 'object' && 'signals' in scanResult) {
21
+ return this.enhanceExistingScan(scanResult, context);
22
+ }
23
+ // Otherwise, run a fresh scan
24
+ const noop = async () => { };
25
+ const scanOutput = await executeScanSaasRepo({
26
+ repo: `${repo.owner}/${repo.name}`,
27
+ ref: repo.ref,
28
+ focus: 'all',
29
+ sourceMode: 'remote',
30
+ }, noop);
31
+ // Classify signals per domain
32
+ const domains = ['auth', 'billing', 'tenancy', 'security', 'code-health'];
33
+ const allSignals = [...scanOutput.signals];
34
+ for (const domain of domains) {
35
+ const domainFindings = scanOutput.signals
36
+ .filter((s) => s.category === domain)
37
+ .map((s) => ({
38
+ filePath: s.evidence[0]?.filePath ?? 'unknown',
39
+ content: s.finding,
40
+ context: s.evidence.map((e) => e.content).join('; '),
41
+ }));
42
+ if (domainFindings.length > 0) {
43
+ const classified = classifyFindings(domainFindings, domain);
44
+ // Merge classified signals (avoid duplicates)
45
+ for (const sig of classified.signals) {
46
+ if (!allSignals.some((s) => s.finding === sig.finding)) {
47
+ allSignals.push(sig);
48
+ }
49
+ }
50
+ }
51
+ }
52
+ // Apply baseline rules and compute risk
53
+ const riskDomains = ['tech', 'security', 'code-health', 'business', 'finance'];
54
+ for (const rd of riskDomains) {
55
+ const baseline = applyBaselineRules(rd, allSignals);
56
+ if (baseline.rulesFired.length > 0) {
57
+ const riskResult = computeRiskScore({
58
+ domain: rd,
59
+ signals: allSignals.filter((s) => CATEGORY_TO_DOMAIN[s.category] === rd),
60
+ rulesBaseline: baseline,
61
+ });
62
+ assumptions.push({
63
+ statement: `${rd} risk: ${riskResult.finalRisk} (${riskResult.summary})`,
64
+ confidence: riskResult.confidence,
65
+ source: 'rule',
66
+ });
67
+ }
68
+ }
69
+ // Try agent enhancement via LLM if available
70
+ let agentEnhancement = '';
71
+ try {
72
+ const signalSummary = allSignals
73
+ .slice(0, 10) // limit to avoid token explosion
74
+ .map((s) => `[${s.severity}] ${s.category}: ${s.finding}`)
75
+ .join('\n');
76
+ agentEnhancement = await this.provider.chat([
77
+ {
78
+ role: 'system',
79
+ content: 'You are a code health analyst. Analyze these signals and provide brief insights about the repository\'s SaaS readiness. Be concise — 3-5 sentences max.',
80
+ },
81
+ {
82
+ role: 'user',
83
+ content: `Repository: ${repo.owner}/${repo.name}\nRef: ${repo.ref}\n\nDetected signals:\n${signalSummary}\n\nProvide a brief assessment of this repository's SaaS maturity.`,
84
+ },
85
+ ]);
86
+ }
87
+ catch {
88
+ assumptions.push({
89
+ statement: 'Agent enhancement unavailable — using rule-based analysis only',
90
+ confidence: 1.0,
91
+ source: 'agent',
92
+ });
93
+ }
94
+ const avgConf = allSignals.length > 0
95
+ ? allSignals.reduce((sum, s) => sum + s.agentConfidence, 0) / allSignals.length
96
+ : 0.5;
97
+ return {
98
+ findings: allSignals,
99
+ assumptions,
100
+ confidence: Math.round(avgConf * 100) / 100,
101
+ rawOutput: agentEnhancement || `Deterministic scan: ${allSignals.length} signals detected.`,
102
+ };
103
+ }
104
+ /**
105
+ * Enhance an existing scan result with additional agent analysis.
106
+ */
107
+ async enhanceExistingScan(scanResult, context) {
108
+ const existingSignals = scanResult['signals'] ?? [];
109
+ const assumptions = [{
110
+ statement: 'Using existing scan results for enhancement',
111
+ confidence: 1.0,
112
+ source: 'agent',
113
+ }];
114
+ let enhancement = '';
115
+ try {
116
+ const signalSummary = existingSignals
117
+ .slice(0, 10)
118
+ .map((s) => `[${s.severity}] ${s.category}: ${s.finding}`)
119
+ .join('\n');
120
+ enhancement = await this.provider.chat([
121
+ {
122
+ role: 'system',
123
+ content: 'You are a code health analyst. Provide insights on the repository\'s SaaS readiness based on these signals. Be concise.',
124
+ },
125
+ {
126
+ role: 'user',
127
+ content: `Repository: ${context.repo.owner}/${context.repo.name}\n\nSignals:\n${signalSummary}`,
128
+ },
129
+ ]);
130
+ }
131
+ catch {
132
+ assumptions.push({
133
+ statement: 'Agent enhancement failed — returning existing signals',
134
+ confidence: 1.0,
135
+ source: 'agent',
136
+ });
137
+ }
138
+ const avgConf = existingSignals.length > 0
139
+ ? existingSignals.reduce((sum, s) => sum + s.agentConfidence, 0) / existingSignals.length
140
+ : 0.5;
141
+ return {
142
+ findings: existingSignals,
143
+ assumptions,
144
+ confidence: Math.round(avgConf * 100) / 100,
145
+ rawOutput: enhancement || `Code inspector analysis: ${existingSignals.length} signals.`,
146
+ };
147
+ }
148
+ }
149
+ //# sourceMappingURL=code-inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-inspector.js","sourceRoot":"","sources":["../../src/agents/code-inspector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Competitor Tracker agent — monitors competitor changes via TF-IDF cosine similarity.
3
+ * Uses the `natural` package for TF-IDF vectorization and cosine comparison.
4
+ * @module agents/competitor-tracker
5
+ */
6
+ import type { IAgent, AgentContext, AgentResult } from '../contracts/agent.js';
7
+ import type { AIProvider } from '../lib/ai/provider-factory.js';
8
+ export declare class CompetitorTracker implements IAgent {
9
+ private readonly provider;
10
+ constructor(provider: AIProvider);
11
+ getName(): string;
12
+ getDomain(): string;
13
+ analyze(context: AgentContext): Promise<AgentResult>;
14
+ /** Extract competitor text blocks from scan result for TF-IDF analysis. */
15
+ private extractCompetitorTexts;
16
+ /** Use TF-IDF to detect trending terms across competitor content. */
17
+ private detectTrends;
18
+ }
19
+ //# sourceMappingURL=competitor-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"competitor-tracker.d.ts","sourceRoot":"","sources":["../../src/agents/competitor-tracker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAwChE,qBAAa,iBAAkB,YAAW,MAAM;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAE1B,QAAQ,EAAE,UAAU;IAIhC,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,MAAM;IAIb,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAgF1D,2EAA2E;IAC3E,OAAO,CAAC,sBAAsB;IAiC9B,qEAAqE;YACvD,YAAY;CAoD3B"}
@@ -0,0 +1,190 @@
1
+ import { competitorIntelTemplate } from '../prompts/competitor-intel.js';
2
+ async function loadTfIdf() {
3
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
4
+ const mod = require('natural');
5
+ return { TfIdf: mod['TfIdf'] };
6
+ }
7
+ /** Compute cosine similarity between two term-frequency vectors. */
8
+ function cosineSimilarity(vecA, vecB) {
9
+ let dot = 0;
10
+ let magA = 0;
11
+ let magB = 0;
12
+ for (const [term, wA] of vecA) {
13
+ magA += wA * wA;
14
+ const wB = vecB.get(term) ?? 0;
15
+ dot += wA * wB;
16
+ }
17
+ for (const wB of vecB.values()) {
18
+ magB += wB * wB;
19
+ }
20
+ const denom = Math.sqrt(magA) * Math.sqrt(magB);
21
+ return denom === 0 ? 0 : dot / denom;
22
+ }
23
+ export class CompetitorTracker {
24
+ provider;
25
+ constructor(provider) {
26
+ this.provider = provider;
27
+ }
28
+ getName() {
29
+ return 'competitor-tracker';
30
+ }
31
+ getDomain() {
32
+ return 'business';
33
+ }
34
+ async analyze(context) {
35
+ const assumptions = [];
36
+ const signals = [];
37
+ const { repo } = context;
38
+ // Attempt TF-IDF trend detection if prior competitor data exists
39
+ let trendAnalysis = '';
40
+ try {
41
+ const competitorData = this.extractCompetitorTexts(context);
42
+ if (competitorData.length >= 2) {
43
+ trendAnalysis = await this.detectTrends(competitorData);
44
+ }
45
+ else {
46
+ assumptions.push({
47
+ statement: 'Insufficient competitor data for trend detection — need at least 2 snapshots',
48
+ confidence: 1.0,
49
+ source: 'agent',
50
+ });
51
+ }
52
+ }
53
+ catch {
54
+ assumptions.push({
55
+ statement: 'TF-IDF analysis failed — falling back to AI-only competitor analysis',
56
+ confidence: 1.0,
57
+ source: 'agent',
58
+ });
59
+ }
60
+ // AI-powered analysis
61
+ const prompt = [
62
+ `PERSONA: ${competitorIntelTemplate.persona}`,
63
+ `OBJECTIVE: ${competitorIntelTemplate.objective}`,
64
+ `CONSTRAINTS: ${competitorIntelTemplate.constraints}`,
65
+ `CONTEXT: Tracking competitors for ${repo.owner}/${repo.name} (ref: ${repo.ref})`,
66
+ `CONFIDENCE RUBRIC: ${competitorIntelTemplate.confidence_rubric}`,
67
+ ].join('\n\n');
68
+ let rawOutput;
69
+ try {
70
+ rawOutput = await this.provider.chat([
71
+ { role: 'system', content: prompt },
72
+ {
73
+ role: 'user',
74
+ content: [
75
+ `Produce competitive intelligence for ${repo.owner}/${repo.name}.`,
76
+ `Detail level: ${context.detail ?? 'balanced'}.`,
77
+ trendAnalysis ? `\nTF-IDF trend analysis:\n${trendAnalysis}` : '',
78
+ context.scanResult
79
+ ? `\nPrior scan results:\n${JSON.stringify(context.scanResult, null, 2).slice(0, 4000)}`
80
+ : '',
81
+ ].filter(Boolean).join(' '),
82
+ },
83
+ ]);
84
+ }
85
+ catch {
86
+ rawOutput = 'Competitor tracking could not be completed — AI provider unavailable.';
87
+ assumptions.push({
88
+ statement: 'AI analysis unavailable — provider returned an error',
89
+ confidence: 0.1,
90
+ source: 'agent',
91
+ });
92
+ }
93
+ signals.push({
94
+ id: `ct-${Date.now()}-001`,
95
+ category: 'architecture',
96
+ severity: 'info',
97
+ title: 'Competitor Tracking Completed',
98
+ finding: `Competitive intelligence gathered for ${repo.owner}/${repo.name}`,
99
+ evidence: [{ filePath: 'README.md', lineRange: null, content: 'Competitor landscape analyzed', toolOutput: null }],
100
+ ruleAnchored: false,
101
+ agentConfidence: trendAnalysis ? 0.75 : 0.5,
102
+ priority: 'next',
103
+ });
104
+ return {
105
+ findings: signals,
106
+ assumptions,
107
+ confidence: trendAnalysis ? 0.75 : 0.5,
108
+ rawOutput,
109
+ };
110
+ }
111
+ /** Extract competitor text blocks from scan result for TF-IDF analysis. */
112
+ extractCompetitorTexts(context) {
113
+ const result = context.scanResult;
114
+ if (!result || typeof result !== 'object')
115
+ return [];
116
+ const texts = [];
117
+ const scan = result;
118
+ // Check for competitor data in various shapes
119
+ if (Array.isArray(scan.competitors)) {
120
+ for (const c of scan.competitors) {
121
+ if (typeof c === 'object' && c !== null) {
122
+ const comp = c;
123
+ const parts = [comp.name, comp.description, comp.features, comp.positioning]
124
+ .filter((v) => typeof v === 'string');
125
+ if (parts.length > 0)
126
+ texts.push(parts.join(' '));
127
+ }
128
+ }
129
+ }
130
+ if (Array.isArray(scan.crawlResults)) {
131
+ for (const cr of scan.crawlResults) {
132
+ if (typeof cr === 'object' && cr !== null) {
133
+ const page = cr;
134
+ if (typeof page.content === 'string' && page.content.length > 50) {
135
+ texts.push(page.content.slice(0, 5000));
136
+ }
137
+ }
138
+ }
139
+ }
140
+ return texts;
141
+ }
142
+ /** Use TF-IDF to detect trending terms across competitor content. */
143
+ async detectTrends(texts) {
144
+ const { TfIdf } = await loadTfIdf();
145
+ const tfidf = new TfIdf();
146
+ for (const text of texts) {
147
+ tfidf.addDocument(text);
148
+ }
149
+ // Build term vectors for each document
150
+ const vectors = [];
151
+ for (let i = 0; i < texts.length; i++) {
152
+ const vec = new Map();
153
+ for (const { term, tfidf: score } of tfidf.listTerms(i)) {
154
+ vec.set(term, score);
155
+ }
156
+ vectors.push(vec);
157
+ }
158
+ // Compute pairwise similarity
159
+ const similarities = [];
160
+ for (let i = 0; i < vectors.length; i++) {
161
+ for (let j = i + 1; j < vectors.length; j++) {
162
+ const sim = cosineSimilarity(vectors[i], vectors[j]);
163
+ similarities.push(`Doc ${i + 1} ↔ Doc ${j + 1}: ${(sim * 100).toFixed(1)}% similarity`);
164
+ }
165
+ }
166
+ // Extract top shared terms (appearing in majority of docs with high TF-IDF)
167
+ const termCounts = new Map();
168
+ for (const vec of vectors) {
169
+ for (const term of vec.keys()) {
170
+ termCounts.set(term, (termCounts.get(term) ?? 0) + 1);
171
+ }
172
+ }
173
+ const threshold = Math.ceil(texts.length * 0.6);
174
+ const sharedTerms = Array.from(termCounts.entries())
175
+ .filter(([, count]) => count >= threshold)
176
+ .sort(([, a], [, b]) => b - a)
177
+ .slice(0, 20)
178
+ .map(([term, count]) => `${term} (${count}/${texts.length} docs)`);
179
+ return [
180
+ '## TF-IDF Trend Analysis',
181
+ '',
182
+ '### Pairwise Similarity',
183
+ ...similarities,
184
+ '',
185
+ '### Shared High-Signal Terms',
186
+ ...sharedTerms.map((t) => `- ${t}`),
187
+ ].join('\n');
188
+ }
189
+ }
190
+ //# sourceMappingURL=competitor-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"competitor-tracker.js","sourceRoot":"","sources":["../../src/agents/competitor-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Finance Auditor specialist agent — unit economics, runway, burn rate analysis.
3
+ * @module agents/finance-auditor
4
+ */
5
+ import type { IAgent, AgentContext, AgentResult } from '../contracts/agent.js';
6
+ import type { AIProvider } from '../lib/ai/provider-factory.js';
7
+ export declare class FinanceAuditor implements IAgent {
8
+ private readonly provider;
9
+ constructor(provider: AIProvider);
10
+ getName(): string;
11
+ getDomain(): string;
12
+ analyze(context: AgentContext): Promise<AgentResult>;
13
+ }
14
+ //# sourceMappingURL=finance-auditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finance-auditor.d.ts","sourceRoot":"","sources":["../../src/agents/finance-auditor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAIhE,qBAAa,cAAe,YAAW,MAAM;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAE1B,QAAQ,EAAE,UAAU;IAIhC,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,MAAM;IAIb,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CA+D3D"}