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/dist/index.js ADDED
@@ -0,0 +1,299 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI entry point — process.argv parsing, global flags, command routing.
4
+ * @module index
5
+ */
6
+ import { z } from 'zod';
7
+ import { createRequire } from 'node:module';
8
+ import { renderBanner } from './cli/tui/banner.js';
9
+ import { resolveFlags } from './cli/flag-resolver.js';
10
+ import { auditLog } from './lib/audit-logger.js';
11
+ import { printHint } from './cli/output/hints.js';
12
+ import { ConfigStore } from './config/config-store.js';
13
+ import { setAccessibleMode } from './cli/tui/colors.js';
14
+ const GlobalFlagsSchema = z.object({
15
+ version: z.boolean().default(false),
16
+ help: z.boolean().default(false),
17
+ yolo: z.boolean().default(false),
18
+ format: z.enum(['json', 'markdown', 'dual']).optional(),
19
+ verbose: z.boolean().default(false),
20
+ quiet: z.boolean().default(false),
21
+ outputDir: z.string().optional(),
22
+ compact: z.boolean().default(false),
23
+ detail: z.enum(['concise', 'balanced', 'exhaustive']).optional(),
24
+ accessible: z.boolean().default(false),
25
+ });
26
+ function parseArgs(argv) {
27
+ const args = argv.slice(2); // skip node + script
28
+ const rawFlags = {};
29
+ const positional = [];
30
+ for (let i = 0; i < args.length; i++) {
31
+ const arg = args[i] ?? '';
32
+ if (arg === '--version' || arg === '-V') {
33
+ rawFlags['version'] = true;
34
+ }
35
+ else if (arg === '--help' || arg === '-h') {
36
+ rawFlags['help'] = true;
37
+ }
38
+ else if (arg === '--yolo') {
39
+ rawFlags['yolo'] = true;
40
+ }
41
+ else if (arg === '--verbose') {
42
+ rawFlags['verbose'] = true;
43
+ }
44
+ else if (arg === '--quiet') {
45
+ rawFlags['quiet'] = true;
46
+ }
47
+ else if (arg === '--compact') {
48
+ rawFlags['compact'] = true;
49
+ }
50
+ else if (arg === '--accessible' || arg === '--a11y') {
51
+ rawFlags['accessible'] = true;
52
+ }
53
+ else if (arg === '--json') {
54
+ rawFlags['format'] = 'json';
55
+ }
56
+ else if (arg === '--debug') {
57
+ rawFlags['verbose'] = true;
58
+ }
59
+ else if (arg === '--format' && i + 1 < args.length) {
60
+ rawFlags['format'] = args[++i] ?? '';
61
+ }
62
+ else if (arg === '--output-dir' && i + 1 < args.length) {
63
+ rawFlags['outputDir'] = args[++i] ?? '';
64
+ }
65
+ else if (arg === '--detail' && i + 1 < args.length) {
66
+ rawFlags['detail'] = args[++i] ?? '';
67
+ }
68
+ else if (arg.startsWith('--')) {
69
+ // Pass unknown flags to sub-commands
70
+ positional.push(arg);
71
+ }
72
+ else {
73
+ positional.push(arg);
74
+ }
75
+ }
76
+ // Ensure any leading --flags before the command are reordered so the
77
+ // first non-flag becomes the command. This prevents `saasgadget --dry-run scan`
78
+ // from treating `--dry-run` as the command name.
79
+ const firstNonFlag = positional.findIndex((a) => !a.startsWith('-'));
80
+ if (firstNonFlag > 0) {
81
+ const cmd = positional.splice(firstNonFlag, 1)[0];
82
+ positional.unshift(cmd);
83
+ }
84
+ const flags = GlobalFlagsSchema.parse(rawFlags);
85
+ const command = positional.length > 0 ? (positional[0] ?? null) : null;
86
+ const subArgs = positional.slice(1);
87
+ return { command, subArgs, flags };
88
+ }
89
+ function printVersion() {
90
+ try {
91
+ const req = createRequire(import.meta.url);
92
+ const pkg = req('../package.json');
93
+ console.log(pkg.version);
94
+ }
95
+ catch {
96
+ console.log('0.0.0');
97
+ }
98
+ }
99
+ async function printHelp(command) {
100
+ if (command) {
101
+ const loader = COMMANDS[command];
102
+ if (loader) {
103
+ try {
104
+ const mod = await loader();
105
+ if (mod.USAGE) {
106
+ console.log(mod.USAGE.trim());
107
+ return;
108
+ }
109
+ }
110
+ catch { /* fall through to generic help */ }
111
+ }
112
+ console.log(`Usage: saasgadget ${command} [options]\n`);
113
+ console.log(`No detailed help available for '${command}'. Run 'saasgadget --help' to see all commands.`);
114
+ return;
115
+ }
116
+ console.log(`Usage: saasgadget <command> [options]
117
+
118
+ Commands:
119
+ init Initialize CLI configuration
120
+ auth login Authenticate via GitHub Copilot token
121
+ doctor Validate environment readiness
122
+ settings View or modify settings
123
+ scan Scan a SaaS repository
124
+ pack <type> Generate a report pack
125
+ plan Plan a code change
126
+ fix Apply fixes to code
127
+ research Conduct web research
128
+ mcp Manage MCP servers
129
+ new Scaffold a new SaaS project
130
+ session Manage sessions (list, resume)
131
+ start Launch interactive TUI mode
132
+
133
+ Global Flags:
134
+ -V, --version Print version and exit
135
+ -h, --help Print help and exit
136
+ --yolo Skip all approval prompts (session-scoped)
137
+ --format <type> Output format: json, markdown, dual (default: dual)
138
+ --verbose Enable verbose logging
139
+ --quiet Suppress banner and non-essential output
140
+ --output-dir <path> Custom output directory
141
+ --compact Trigger context compaction on active session
142
+ --detail <level> Detail level: concise, balanced, exhaustive
143
+ --accessible, --a11y Enable accessible mode (NO_COLOR, screen-reader hints)
144
+
145
+ Examples:
146
+ $ sg scan https://github.com/octocat/hello-world
147
+ $ sg pack drift --repo octocat/hello-world --output-dir ./reports
148
+ $ sg doctor
149
+ $ sg start # Launch interactive TUI mode
150
+ $ sg mcp search "github"
151
+ $ sg new --template nextjs-saas --name my-app
152
+
153
+ For command-specific help:
154
+ $ sg <command> --help
155
+ `);
156
+ }
157
+ const COMMANDS = {
158
+ init: () => import('./cli/commands/init.js'),
159
+ auth: () => import('./cli/commands/auth.js'),
160
+ doctor: () => import('./cli/commands/doctor.js'),
161
+ settings: () => import('./cli/commands/settings.js'),
162
+ scan: () => import('./cli/commands/scan.js'),
163
+ pack: () => import('./cli/commands/pack.js'),
164
+ plan: () => import('./cli/commands/plan.js'),
165
+ fix: () => import('./cli/commands/fix.js'),
166
+ research: () => import('./cli/commands/research.js'),
167
+ mcp: () => import('./cli/commands/mcp.js'),
168
+ new: () => import('./cli/commands/new.js'),
169
+ session: () => import('./cli/commands/session.js'),
170
+ start: () => import('./cli/commands/start.js'),
171
+ };
172
+ /** Commands that auto-wrap in TUI when app.mode is 'tui'. */
173
+ const TUI_WRAPPABLE_COMMANDS = new Set([
174
+ 'scan', 'pack', 'plan', 'fix', 'research',
175
+ ]);
176
+ async function loadAppMode() {
177
+ try {
178
+ const config = await new ConfigStore().load();
179
+ return config.app.mode;
180
+ }
181
+ catch {
182
+ return 'cli'; // fallback when config unavailable
183
+ }
184
+ }
185
+ async function main() {
186
+ const { command, subArgs, flags: rawFlags } = parseArgs(process.argv);
187
+ if (rawFlags.version) {
188
+ printVersion();
189
+ process.exit(0);
190
+ }
191
+ if (!command || rawFlags.help) {
192
+ if (!rawFlags.quiet) {
193
+ console.log(renderBanner());
194
+ }
195
+ await printHelp(command ?? undefined);
196
+ process.exit(0);
197
+ }
198
+ // Handle --compact: trigger context compaction on active session
199
+ if (rawFlags.compact) {
200
+ console.error('No active session. --compact requires an active session with token context.');
201
+ process.exit(1);
202
+ }
203
+ // Flag conflict detection
204
+ if (rawFlags.verbose && rawFlags.quiet) {
205
+ console.error('Conflicting flags: --verbose and --quiet cannot be used together.');
206
+ process.exit(1);
207
+ }
208
+ // Resolve effective flags: CLI > workspace > global config
209
+ const flags = await resolveFlags(command, rawFlags);
210
+ // Enable accessible mode (NO_COLOR + high-contrast + screen-reader hints)
211
+ if (flags.accessible) {
212
+ setAccessibleMode(true);
213
+ }
214
+ if (!flags.quiet) {
215
+ console.log(renderBanner());
216
+ }
217
+ // app.mode routing: when 'tui', analytical commands auto-wrap in TUI
218
+ const appMode = await loadAppMode();
219
+ if (appMode === 'tui' && TUI_WRAPPABLE_COMMANDS.has(command) && command !== 'start') {
220
+ // Auto-wrap: run the command then launch TUI for follow-up
221
+ const cmdLoader = COMMANDS[command];
222
+ if (!cmdLoader) {
223
+ process.exit(1);
224
+ }
225
+ const startMs = Date.now();
226
+ try {
227
+ const mod = await cmdLoader();
228
+ await mod.execute(subArgs, flags);
229
+ await auditLog('cli', 'command.complete', {
230
+ command,
231
+ args: subArgs,
232
+ elapsedMs: Date.now() - startMs,
233
+ status: 'ok',
234
+ }).catch(() => { });
235
+ }
236
+ catch (error) {
237
+ await auditLog('cli', 'command.error', {
238
+ command,
239
+ args: subArgs,
240
+ elapsedMs: Date.now() - startMs,
241
+ status: 'error',
242
+ error: error instanceof Error ? error.message : String(error),
243
+ }).catch(() => { });
244
+ if (error instanceof Error && 'remediation' in error) {
245
+ const sgError = error;
246
+ console.error(`\n[${sgError.code}] ${sgError.message}`);
247
+ console.error(` → ${sgError.remediation}\n`);
248
+ }
249
+ else {
250
+ console.error(error instanceof Error ? error.message : String(error));
251
+ }
252
+ // Continue to TUI even after error so user can issue follow-up commands
253
+ }
254
+ // Launch TUI for follow-up commands in the same session
255
+ const startMod = await import('./cli/commands/start.js');
256
+ await startMod.execute([], flags);
257
+ process.exit(0);
258
+ }
259
+ const loader = COMMANDS[command];
260
+ if (!loader) {
261
+ console.error(`Unknown command: ${command}\nRun 'saasgadget --help' for usage.`);
262
+ process.exit(1);
263
+ }
264
+ const startMs = Date.now();
265
+ try {
266
+ const mod = await loader();
267
+ await mod.execute(subArgs, flags);
268
+ // Contextual slash-command hints for TUI discoverability
269
+ printHint(command, flags.quiet);
270
+ // Log tool invocation on success
271
+ await auditLog('cli', 'command.complete', {
272
+ command,
273
+ args: subArgs,
274
+ elapsedMs: Date.now() - startMs,
275
+ status: 'ok',
276
+ }).catch(() => { });
277
+ }
278
+ catch (error) {
279
+ // Log tool invocation on error
280
+ await auditLog('cli', 'command.error', {
281
+ command,
282
+ args: subArgs,
283
+ elapsedMs: Date.now() - startMs,
284
+ status: 'error',
285
+ error: error instanceof Error ? error.message : String(error),
286
+ }).catch(() => { });
287
+ if (error instanceof Error && 'remediation' in error) {
288
+ const sgError = error;
289
+ console.error(`\n[${sgError.code}] ${sgError.message}`);
290
+ console.error(` → ${sgError.remediation}\n`);
291
+ }
292
+ else {
293
+ console.error(error instanceof Error ? error.message : String(error));
294
+ }
295
+ process.exit(1);
296
+ }
297
+ }
298
+ main();
299
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * AI provider factory — multi-LLM provider registry.
3
+ * v1: CopilotProvider active. v2: OpenAI + Anthropic via BYOK.
4
+ * PTC Pattern P8: Multi-LLM — pluggable provider registry.
5
+ * @module lib/ai/provider-factory
6
+ */
7
+ export interface AIProvider {
8
+ readonly name: string;
9
+ chat(messages: Array<{
10
+ role: 'system' | 'user' | 'assistant';
11
+ content: string;
12
+ }>): Promise<string>;
13
+ }
14
+ export interface ProviderConfig {
15
+ /** Provider identifier */
16
+ name: string;
17
+ /** Model identifier (e.g., 'gpt-4o', 'claude-sonnet-4-20250514') */
18
+ model?: string;
19
+ /** API key for BYOK providers */
20
+ apiKey?: string;
21
+ /** Provider-specific options */
22
+ options?: Record<string, unknown>;
23
+ }
24
+ /** Cost tracking entry for a single provider call. */
25
+ export interface ProviderCostEntry {
26
+ provider: string;
27
+ model: string;
28
+ inputTokens: number;
29
+ outputTokens: number;
30
+ estimatedCostUsd: number;
31
+ timestamp: number;
32
+ }
33
+ /** Estimate cost and log it. Returns the entry. */
34
+ export declare function trackCost(provider: string, model: string, inputTokens: number, outputTokens: number): ProviderCostEntry;
35
+ /** Get all cost entries for the current session. */
36
+ export declare function getCostLog(): readonly ProviderCostEntry[];
37
+ /** Get total estimated cost for the current session. */
38
+ export declare function getTotalCost(): number;
39
+ /** Reset cost log (e.g., at session start). */
40
+ export declare function resetCostLog(): void;
41
+ type ProviderFactory = (config?: ProviderConfig) => AIProvider;
42
+ /**
43
+ * Register a custom AI provider factory.
44
+ */
45
+ export declare function registerProvider(name: string, factory: ProviderFactory): void;
46
+ /**
47
+ * Register a Vercel AI SDK provider with a model identifier.
48
+ */
49
+ export declare function registerVercelProvider(name: string, model: string): void;
50
+ /**
51
+ * Get an AI provider by name. Falls back to 'copilot' if not found.
52
+ */
53
+ export declare function getAIProvider(name?: string, config?: ProviderConfig): AIProvider;
54
+ /**
55
+ * Get an AI provider with fallback chain support.
56
+ * Tries each provider in order until one succeeds.
57
+ */
58
+ export declare function getAIProviderWithFallback(chain: string[], configMap?: Record<string, ProviderConfig>): AIProvider;
59
+ /**
60
+ * List all registered provider names.
61
+ */
62
+ export declare function listProviders(): string[];
63
+ export {};
64
+ //# sourceMappingURL=provider-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-factory.d.ts","sourceRoot":"","sources":["../../../src/lib/ai/provider-factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACpG;AAID,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAeD,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,iBAAiB,CAYvH;AAED,oDAAoD;AACpD,wBAAgB,UAAU,IAAI,SAAS,iBAAiB,EAAE,CAEzD;AAED,wDAAwD;AACxD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,+CAA+C;AAC/C,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAkKD,KAAK,eAAe,GAAG,CAAC,MAAM,CAAC,EAAE,cAAc,KAAK,UAAU,CAAC;AAgB/D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAE7E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAExE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,SAAY,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,UAAU,CAMnF;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GACzC,UAAU,CA0BZ;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC"}
@@ -0,0 +1,249 @@
1
+ /**
2
+ * AI provider factory — multi-LLM provider registry.
3
+ * v1: CopilotProvider active. v2: OpenAI + Anthropic via BYOK.
4
+ * PTC Pattern P8: Multi-LLM — pluggable provider registry.
5
+ * @module lib/ai/provider-factory
6
+ */
7
+ import { ConfigError } from '../errors.js';
8
+ // ── Per-model cost rates (USD per 1K tokens) ──
9
+ const COST_RATES = {
10
+ 'gpt-4o': { input: 0.0025, output: 0.01 },
11
+ 'gpt-4o-mini': { input: 0.00015, output: 0.0006 },
12
+ 'gpt-4': { input: 0.03, output: 0.06 },
13
+ 'claude-sonnet-4-20250514': { input: 0.003, output: 0.015 },
14
+ 'claude-3-5-haiku-20241022': { input: 0.001, output: 0.005 },
15
+ 'claude-3-opus-20240229': { input: 0.015, output: 0.075 },
16
+ 'copilot': { input: 0, output: 0 }, // free tier
17
+ };
18
+ const costLog = [];
19
+ /** Estimate cost and log it. Returns the entry. */
20
+ export function trackCost(provider, model, inputTokens, outputTokens) {
21
+ const rates = COST_RATES[model] ?? { input: 0, output: 0 };
22
+ const entry = {
23
+ provider,
24
+ model,
25
+ inputTokens,
26
+ outputTokens,
27
+ estimatedCostUsd: (inputTokens / 1000) * rates.input + (outputTokens / 1000) * rates.output,
28
+ timestamp: Date.now(),
29
+ };
30
+ costLog.push(entry);
31
+ return entry;
32
+ }
33
+ /** Get all cost entries for the current session. */
34
+ export function getCostLog() {
35
+ return costLog;
36
+ }
37
+ /** Get total estimated cost for the current session. */
38
+ export function getTotalCost() {
39
+ return costLog.reduce((sum, e) => sum + e.estimatedCostUsd, 0);
40
+ }
41
+ /** Reset cost log (e.g., at session start). */
42
+ export function resetCostLog() {
43
+ costLog.length = 0;
44
+ }
45
+ /**
46
+ * CopilotProvider wraps @github/copilot-sdk for LLM calls.
47
+ * Lazy-loaded to allow CLI to function without SDK in non-AI paths.
48
+ */
49
+ class CopilotProvider {
50
+ name = 'copilot';
51
+ async chat(messages) {
52
+ // Dynamic import so the binary can load even if the SDK is missing
53
+ const sdk = (await import('@github/copilot-sdk'));
54
+ // @github/copilot-sdk exports may vary — guard the call
55
+ const chatFn = sdk['chat'] ?? sdk['default'];
56
+ if (typeof chatFn !== 'function') {
57
+ throw new ConfigError('copilot-sdk does not export a chat function in this version.', 'Update @github/copilot-sdk or check your Node.js version.');
58
+ }
59
+ const response = (await chatFn({ messages }));
60
+ const text = response.text ?? response.content ?? '';
61
+ trackCost('copilot', 'copilot', estimateTokens(messages), estimateTokens([{ role: 'assistant', content: text }]));
62
+ return text;
63
+ }
64
+ }
65
+ /**
66
+ * OpenAI provider — wraps the `openai` package for GPT models.
67
+ * Requires BYOK: `OPENAI_API_KEY` env var or config-provided key.
68
+ */
69
+ class OpenAIProvider {
70
+ name = 'openai';
71
+ model;
72
+ apiKey;
73
+ constructor(model, apiKey) {
74
+ this.model = model;
75
+ this.apiKey = apiKey;
76
+ }
77
+ async chat(messages) {
78
+ try {
79
+ // @ts-expect-error -- openai is an optional peer dependency
80
+ const { default: OpenAI } = (await import('openai'));
81
+ const client = new OpenAI({ apiKey: this.apiKey });
82
+ const response = await client.chat.completions.create({
83
+ model: this.model,
84
+ messages,
85
+ });
86
+ const text = response.choices[0]?.message?.content ?? '';
87
+ trackCost('openai', this.model, response.usage?.prompt_tokens ?? 0, response.usage?.completion_tokens ?? 0);
88
+ return text;
89
+ }
90
+ catch (error) {
91
+ if (error instanceof Error && (error.message.includes('Cannot find module') || error.message.includes('Cannot find package'))) {
92
+ throw new ConfigError(`OpenAI SDK not installed. Run: npm install openai\n` +
93
+ `Provider "openai" (model: ${this.model}) requires the 'openai' package.`);
94
+ }
95
+ throw error;
96
+ }
97
+ }
98
+ }
99
+ /**
100
+ * Anthropic provider — wraps the `@anthropic-ai/sdk` package for Claude models.
101
+ * Requires BYOK: `ANTHROPIC_API_KEY` env var or config-provided key.
102
+ */
103
+ class AnthropicProvider {
104
+ name = 'anthropic';
105
+ model;
106
+ apiKey;
107
+ constructor(model, apiKey) {
108
+ this.model = model;
109
+ this.apiKey = apiKey;
110
+ }
111
+ async chat(messages) {
112
+ try {
113
+ // @ts-expect-error -- @anthropic-ai/sdk is an optional peer dependency
114
+ const { default: Anthropic } = (await import('@anthropic-ai/sdk'));
115
+ const client = new Anthropic({ apiKey: this.apiKey });
116
+ // Anthropic separates system messages from the messages array
117
+ const systemMsg = messages.filter(m => m.role === 'system').map(m => m.content).join('\n\n');
118
+ const chatMessages = messages.filter(m => m.role !== 'system');
119
+ const response = await client.messages.create({
120
+ model: this.model,
121
+ max_tokens: 4096,
122
+ system: systemMsg || undefined,
123
+ messages: chatMessages,
124
+ });
125
+ const text = response.content.map((b) => b.text).join('');
126
+ trackCost('anthropic', this.model, response.usage?.input_tokens ?? 0, response.usage?.output_tokens ?? 0);
127
+ return text;
128
+ }
129
+ catch (error) {
130
+ if (error instanceof Error && (error.message.includes('Cannot find module') || error.message.includes('Cannot find package'))) {
131
+ throw new ConfigError(`Anthropic SDK not installed. Run: npm install @anthropic-ai/sdk\n` +
132
+ `Provider "anthropic" (model: ${this.model}) requires the '@anthropic-ai/sdk' package.`);
133
+ }
134
+ throw error;
135
+ }
136
+ }
137
+ }
138
+ /**
139
+ * Vercel AI SDK provider — wraps the `ai` package for multi-model support.
140
+ * Requires `ai` + a model provider package (e.g., `@ai-sdk/openai`).
141
+ */
142
+ class VercelAIProvider {
143
+ name;
144
+ model;
145
+ constructor(name, model) {
146
+ this.name = name;
147
+ this.model = model;
148
+ }
149
+ async chat(messages) {
150
+ try {
151
+ // @ts-expect-error -- ai is an optional peer dependency
152
+ const ai = (await import('ai'));
153
+ const generateTextFn = ai['generateText'];
154
+ if (typeof generateTextFn !== 'function') {
155
+ throw new ConfigError('Vercel AI SDK does not export generateText in this version.', 'Update the `ai` package: npm install ai@latest');
156
+ }
157
+ const result = await generateTextFn({
158
+ model: this.model,
159
+ messages,
160
+ });
161
+ return result.text ?? '';
162
+ }
163
+ catch (error) {
164
+ if (error instanceof Error && (error.message.includes('Cannot find module') || error.message.includes('Cannot find package'))) {
165
+ throw new ConfigError(`Vercel AI SDK not installed. Run: npm install ai @ai-sdk/openai\n` +
166
+ `Provider "${this.name}" requires the 'ai' package.`);
167
+ }
168
+ throw error;
169
+ }
170
+ }
171
+ }
172
+ const providerFactories = new Map([
173
+ ['copilot', () => new CopilotProvider()],
174
+ ['openai', (config) => {
175
+ const apiKey = config?.apiKey ?? process.env['OPENAI_API_KEY'] ?? '';
176
+ if (!apiKey)
177
+ throw new ConfigError('OpenAI API key required. Set OPENAI_API_KEY env var or configure via `saasgadget settings set ai.providers.openai.apiKey <key>`.');
178
+ return new OpenAIProvider(config?.model ?? 'gpt-4o', apiKey);
179
+ }],
180
+ ['anthropic', (config) => {
181
+ const apiKey = config?.apiKey ?? process.env['ANTHROPIC_API_KEY'] ?? '';
182
+ if (!apiKey)
183
+ throw new ConfigError('Anthropic API key required. Set ANTHROPIC_API_KEY env var or configure via `saasgadget settings set ai.providers.anthropic.apiKey <key>`.');
184
+ return new AnthropicProvider(config?.model ?? 'claude-sonnet-4-20250514', apiKey);
185
+ }],
186
+ ]);
187
+ /**
188
+ * Register a custom AI provider factory.
189
+ */
190
+ export function registerProvider(name, factory) {
191
+ providerFactories.set(name, factory);
192
+ }
193
+ /**
194
+ * Register a Vercel AI SDK provider with a model identifier.
195
+ */
196
+ export function registerVercelProvider(name, model) {
197
+ providerFactories.set(name, () => new VercelAIProvider(name, model));
198
+ }
199
+ /**
200
+ * Get an AI provider by name. Falls back to 'copilot' if not found.
201
+ */
202
+ export function getAIProvider(name = 'copilot', config) {
203
+ const factory = providerFactories.get(name);
204
+ if (!factory) {
205
+ throw new ConfigError(`Unknown AI provider: "${name}". Available: ${[...providerFactories.keys()].join(', ')}`, 'Use one of the available providers or register a custom one.');
206
+ }
207
+ return factory(config);
208
+ }
209
+ /**
210
+ * Get an AI provider with fallback chain support.
211
+ * Tries each provider in order until one succeeds.
212
+ */
213
+ export function getAIProviderWithFallback(chain, configMap) {
214
+ if (chain.length === 0) {
215
+ return getAIProvider('copilot');
216
+ }
217
+ // If only one provider, return directly (no fallback wrapping)
218
+ if (chain.length === 1) {
219
+ return getAIProvider(chain[0], configMap?.[chain[0]]);
220
+ }
221
+ // Wrap in a fallback proxy
222
+ return {
223
+ name: `fallback(${chain.join('→')})`,
224
+ async chat(messages) {
225
+ let lastError;
226
+ for (const providerName of chain) {
227
+ try {
228
+ const provider = getAIProvider(providerName, configMap?.[providerName]);
229
+ return await provider.chat(messages);
230
+ }
231
+ catch (err) {
232
+ lastError = err instanceof Error ? err : new Error(String(err));
233
+ }
234
+ }
235
+ throw lastError ?? new Error('All providers in fallback chain failed.');
236
+ },
237
+ };
238
+ }
239
+ /**
240
+ * List all registered provider names.
241
+ */
242
+ export function listProviders() {
243
+ return [...providerFactories.keys()];
244
+ }
245
+ /** Rough token estimation (4 chars ≈ 1 token). */
246
+ function estimateTokens(messages) {
247
+ return Math.ceil(messages.reduce((sum, m) => sum + m.content.length, 0) / 4);
248
+ }
249
+ //# sourceMappingURL=provider-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-factory.js","sourceRoot":"","sources":["../../../src/lib/ai/provider-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare function auditLog(sessionId: string, event: string, data: Record<string, unknown>): Promise<void>;
2
+ /**
3
+ * Rotate logs: remove files older than MAX_LOG_AGE_MS,
4
+ * then remove oldest files if total size exceeds MAX_LOG_DIR_BYTES.
5
+ */
6
+ export declare function rotateLogs(): Promise<{
7
+ deleted: string[];
8
+ totalRemaining: number;
9
+ }>;
10
+ //# sourceMappingURL=audit-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-logger.d.ts","sourceRoot":"","sources":["../../src/lib/audit-logger.ts"],"names":[],"mappings":"AA0CA,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAaf;AAOD;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CA6CzF"}