lean-claudient-core 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 (507) hide show
  1. package/.reports/detailed-analysis_2026-06-20_01ed326b.html +200 -0
  2. package/.reports/detailed-analysis_2026-06-20_08d39381.html +200 -0
  3. package/.reports/detailed-analysis_2026-06-20_0a331144.html +200 -0
  4. package/.reports/detailed-analysis_2026-06-20_0d54ffef.html +200 -0
  5. package/.reports/detailed-analysis_2026-06-20_14bfa31c.html +200 -0
  6. package/.reports/detailed-analysis_2026-06-20_211feac4.html +200 -0
  7. package/.reports/detailed-analysis_2026-06-20_22381bc2.html +200 -0
  8. package/.reports/detailed-analysis_2026-06-20_29b4ea0a.html +200 -0
  9. package/.reports/detailed-analysis_2026-06-20_2df0ad14.html +200 -0
  10. package/.reports/detailed-analysis_2026-06-20_343ec84c.html +200 -0
  11. package/.reports/detailed-analysis_2026-06-20_3a01030d.html +200 -0
  12. package/.reports/detailed-analysis_2026-06-20_3b4c99ec.html +200 -0
  13. package/.reports/detailed-analysis_2026-06-20_3d368827.html +200 -0
  14. package/.reports/detailed-analysis_2026-06-20_53544d3d.html +200 -0
  15. package/.reports/detailed-analysis_2026-06-20_5721164a.html +200 -0
  16. package/.reports/detailed-analysis_2026-06-20_57caf5e7.html +200 -0
  17. package/.reports/detailed-analysis_2026-06-20_624302f5.html +200 -0
  18. package/.reports/detailed-analysis_2026-06-20_62456384.html +200 -0
  19. package/.reports/detailed-analysis_2026-06-20_636a52f1.html +200 -0
  20. package/.reports/detailed-analysis_2026-06-20_63d1ad41.html +200 -0
  21. package/.reports/detailed-analysis_2026-06-20_7451ccd7.html +200 -0
  22. package/.reports/detailed-analysis_2026-06-20_74da4e9a.html +200 -0
  23. package/.reports/detailed-analysis_2026-06-20_83a90083.html +200 -0
  24. package/.reports/detailed-analysis_2026-06-20_867fbdd9.html +200 -0
  25. package/.reports/detailed-analysis_2026-06-20_974c3299.html +200 -0
  26. package/.reports/detailed-analysis_2026-06-20_a04639a2.html +200 -0
  27. package/.reports/detailed-analysis_2026-06-20_a8e23d6d.html +200 -0
  28. package/.reports/detailed-analysis_2026-06-20_aa9150f0.html +200 -0
  29. package/.reports/detailed-analysis_2026-06-20_acbeee08.html +200 -0
  30. package/.reports/detailed-analysis_2026-06-20_c4ffa0e2.html +200 -0
  31. package/.reports/detailed-analysis_2026-06-20_c5f7684b.html +200 -0
  32. package/.reports/detailed-analysis_2026-06-20_c963b1fa.html +200 -0
  33. package/.reports/detailed-analysis_2026-06-20_d4bde41f.html +200 -0
  34. package/.reports/detailed-analysis_2026-06-20_d6eb2497.html +200 -0
  35. package/.reports/detailed-analysis_2026-06-20_ea6f7f58.html +200 -0
  36. package/.reports/detailed-analysis_2026-06-20_ebf4e060.html +200 -0
  37. package/.reports/detailed-analysis_2026-06-20_ec4313a9.html +200 -0
  38. package/.reports/detailed-analysis_2026-06-20_fc65d18e.html +200 -0
  39. package/.reports/executive-summary_2026-06-20_00406d50.html +109 -0
  40. package/.reports/executive-summary_2026-06-20_0bb202d3.html +109 -0
  41. package/.reports/executive-summary_2026-06-20_0bcd7481.html +109 -0
  42. package/.reports/executive-summary_2026-06-20_11506445.html +109 -0
  43. package/.reports/executive-summary_2026-06-20_13616cda.html +109 -0
  44. package/.reports/executive-summary_2026-06-20_19d41c2f.html +109 -0
  45. package/.reports/executive-summary_2026-06-20_1b0d6e96.html +109 -0
  46. package/.reports/executive-summary_2026-06-20_1e38670b.html +109 -0
  47. package/.reports/executive-summary_2026-06-20_1f32f793.html +109 -0
  48. package/.reports/executive-summary_2026-06-20_1f40f7d3.html +109 -0
  49. package/.reports/executive-summary_2026-06-20_25a40a7e.html +109 -0
  50. package/.reports/executive-summary_2026-06-20_26d11818.html +109 -0
  51. package/.reports/executive-summary_2026-06-20_26ed4593.html +109 -0
  52. package/.reports/executive-summary_2026-06-20_291b90a8.html +109 -0
  53. package/.reports/executive-summary_2026-06-20_2957a848.html +109 -0
  54. package/.reports/executive-summary_2026-06-20_2a04eb77.html +109 -0
  55. package/.reports/executive-summary_2026-06-20_2fa701f9.html +109 -0
  56. package/.reports/executive-summary_2026-06-20_327af8f5.html +109 -0
  57. package/.reports/executive-summary_2026-06-20_3418c729.html +109 -0
  58. package/.reports/executive-summary_2026-06-20_3571763d.html +109 -0
  59. package/.reports/executive-summary_2026-06-20_36225353.html +109 -0
  60. package/.reports/executive-summary_2026-06-20_3b2de891.html +109 -0
  61. package/.reports/executive-summary_2026-06-20_45b980c2.html +109 -0
  62. package/.reports/executive-summary_2026-06-20_46fcbf17.html +109 -0
  63. package/.reports/executive-summary_2026-06-20_48c8fa5e.html +109 -0
  64. package/.reports/executive-summary_2026-06-20_4ba55c43.html +109 -0
  65. package/.reports/executive-summary_2026-06-20_4f4498e6.html +109 -0
  66. package/.reports/executive-summary_2026-06-20_54c33bf0.html +109 -0
  67. package/.reports/executive-summary_2026-06-20_54cc7077.html +109 -0
  68. package/.reports/executive-summary_2026-06-20_5a12912e.html +109 -0
  69. package/.reports/executive-summary_2026-06-20_636fac87.html +109 -0
  70. package/.reports/executive-summary_2026-06-20_6587faaf.html +109 -0
  71. package/.reports/executive-summary_2026-06-20_6adbdd03.html +109 -0
  72. package/.reports/executive-summary_2026-06-20_6bf344ec.html +109 -0
  73. package/.reports/executive-summary_2026-06-20_7142aeed.html +109 -0
  74. package/.reports/executive-summary_2026-06-20_72bc0ceb.html +109 -0
  75. package/.reports/executive-summary_2026-06-20_775752ac.html +109 -0
  76. package/.reports/executive-summary_2026-06-20_7a9c3223.html +109 -0
  77. package/.reports/executive-summary_2026-06-20_808e6376.html +109 -0
  78. package/.reports/executive-summary_2026-06-20_8de9142d.html +109 -0
  79. package/.reports/executive-summary_2026-06-20_91981fbe.html +109 -0
  80. package/.reports/executive-summary_2026-06-20_93191c8c.html +109 -0
  81. package/.reports/executive-summary_2026-06-20_9be48a87.html +109 -0
  82. package/.reports/executive-summary_2026-06-20_9c127198.html +109 -0
  83. package/.reports/executive-summary_2026-06-20_9ee303ac.html +109 -0
  84. package/.reports/executive-summary_2026-06-20_9ee52709.html +109 -0
  85. package/.reports/executive-summary_2026-06-20_a0fa27de.html +109 -0
  86. package/.reports/executive-summary_2026-06-20_a1813e47.html +109 -0
  87. package/.reports/executive-summary_2026-06-20_a974edc1.html +109 -0
  88. package/.reports/executive-summary_2026-06-20_aa711737.html +109 -0
  89. package/.reports/executive-summary_2026-06-20_aa752246.html +109 -0
  90. package/.reports/executive-summary_2026-06-20_ac6f0927.html +109 -0
  91. package/.reports/executive-summary_2026-06-20_b231b143.html +109 -0
  92. package/.reports/executive-summary_2026-06-20_b570a2bd.html +109 -0
  93. package/.reports/executive-summary_2026-06-20_b6fbf650.html +109 -0
  94. package/.reports/executive-summary_2026-06-20_b9f8ddf3.html +109 -0
  95. package/.reports/executive-summary_2026-06-20_bf95cc63.html +109 -0
  96. package/.reports/executive-summary_2026-06-20_c0d0aefe.html +109 -0
  97. package/.reports/executive-summary_2026-06-20_c1933c36.html +109 -0
  98. package/.reports/executive-summary_2026-06-20_c99bba8a.html +109 -0
  99. package/.reports/executive-summary_2026-06-20_cc3846ac.html +109 -0
  100. package/.reports/executive-summary_2026-06-20_d485993c.html +109 -0
  101. package/.reports/executive-summary_2026-06-20_d56f75f7.html +109 -0
  102. package/.reports/executive-summary_2026-06-20_d57660cc.html +109 -0
  103. package/.reports/executive-summary_2026-06-20_dc036f62.html +109 -0
  104. package/.reports/executive-summary_2026-06-20_df783f47.html +109 -0
  105. package/.reports/executive-summary_2026-06-20_e2191adb.html +109 -0
  106. package/.reports/executive-summary_2026-06-20_e9f1d504.html +109 -0
  107. package/.reports/executive-summary_2026-06-20_ea82f5e1.html +109 -0
  108. package/.reports/executive-summary_2026-06-20_ec3e70cb.html +109 -0
  109. package/.reports/executive-summary_2026-06-20_ee6cf902.html +109 -0
  110. package/.reports/executive-summary_2026-06-20_f6cb657c.html +109 -0
  111. package/.reports/executive-summary_2026-06-20_f8c60046.html +109 -0
  112. package/.reports/executive-summary_2026-06-20_fa184840.html +109 -0
  113. package/.reports/executive-summary_2026-06-20_fc88bcb4.html +109 -0
  114. package/.reports/executive-summary_2026-06-20_ffa79c4e.html +109 -0
  115. package/README.md +53 -0
  116. package/dist/automation/actionApprover.d.ts +89 -0
  117. package/dist/automation/actionApprover.d.ts.map +1 -0
  118. package/dist/automation/actionApprover.js +264 -0
  119. package/dist/automation/actionApprover.js.map +1 -0
  120. package/dist/automation/actionExecutor.d.ts +125 -0
  121. package/dist/automation/actionExecutor.d.ts.map +1 -0
  122. package/dist/automation/actionExecutor.js +304 -0
  123. package/dist/automation/actionExecutor.js.map +1 -0
  124. package/dist/automation/alertRules.d.ts +55 -0
  125. package/dist/automation/alertRules.d.ts.map +1 -0
  126. package/dist/automation/alertRules.js +70 -0
  127. package/dist/automation/alertRules.js.map +1 -0
  128. package/dist/automation/alertSystem.d.ts +109 -0
  129. package/dist/automation/alertSystem.d.ts.map +1 -0
  130. package/dist/automation/alertSystem.js +303 -0
  131. package/dist/automation/alertSystem.js.map +1 -0
  132. package/dist/automation/competitorResponse.d.ts +119 -0
  133. package/dist/automation/competitorResponse.d.ts.map +1 -0
  134. package/dist/automation/competitorResponse.js +343 -0
  135. package/dist/automation/competitorResponse.js.map +1 -0
  136. package/dist/automation/composioClient.d.ts +107 -0
  137. package/dist/automation/composioClient.d.ts.map +1 -0
  138. package/dist/automation/composioClient.js +286 -0
  139. package/dist/automation/composioClient.js.map +1 -0
  140. package/dist/automation/crmExport.d.ts +116 -0
  141. package/dist/automation/crmExport.d.ts.map +1 -0
  142. package/dist/automation/crmExport.js +282 -0
  143. package/dist/automation/crmExport.js.map +1 -0
  144. package/dist/automation/crmIntegration.d.ts +83 -0
  145. package/dist/automation/crmIntegration.d.ts.map +1 -0
  146. package/dist/automation/crmIntegration.js +207 -0
  147. package/dist/automation/crmIntegration.js.map +1 -0
  148. package/dist/automation/gmailIntegration.d.ts +73 -0
  149. package/dist/automation/gmailIntegration.d.ts.map +1 -0
  150. package/dist/automation/gmailIntegration.js +184 -0
  151. package/dist/automation/gmailIntegration.js.map +1 -0
  152. package/dist/automation/index.d.ts +17 -0
  153. package/dist/automation/index.d.ts.map +1 -0
  154. package/dist/automation/index.js +17 -0
  155. package/dist/automation/index.js.map +1 -0
  156. package/dist/automation/jiraIntegration.d.ts +103 -0
  157. package/dist/automation/jiraIntegration.d.ts.map +1 -0
  158. package/dist/automation/jiraIntegration.js +222 -0
  159. package/dist/automation/jiraIntegration.js.map +1 -0
  160. package/dist/automation/jobQueue.d.ts +98 -0
  161. package/dist/automation/jobQueue.d.ts.map +1 -0
  162. package/dist/automation/jobQueue.js +207 -0
  163. package/dist/automation/jobQueue.js.map +1 -0
  164. package/dist/automation/leadQualification.d.ts +60 -0
  165. package/dist/automation/leadQualification.d.ts.map +1 -0
  166. package/dist/automation/leadQualification.js +204 -0
  167. package/dist/automation/leadQualification.js.map +1 -0
  168. package/dist/automation/qualificationRules.d.ts +100 -0
  169. package/dist/automation/qualificationRules.d.ts.map +1 -0
  170. package/dist/automation/qualificationRules.js +202 -0
  171. package/dist/automation/qualificationRules.js.map +1 -0
  172. package/dist/automation/responseTemplates.d.ts +64 -0
  173. package/dist/automation/responseTemplates.d.ts.map +1 -0
  174. package/dist/automation/responseTemplates.js +374 -0
  175. package/dist/automation/responseTemplates.js.map +1 -0
  176. package/dist/automation/scheduler.d.ts +85 -0
  177. package/dist/automation/scheduler.d.ts.map +1 -0
  178. package/dist/automation/scheduler.js +194 -0
  179. package/dist/automation/scheduler.js.map +1 -0
  180. package/dist/automation/types.d.ts +223 -0
  181. package/dist/automation/types.d.ts.map +1 -0
  182. package/dist/automation/types.js +32 -0
  183. package/dist/automation/types.js.map +1 -0
  184. package/dist/cli/index.d.ts +3 -0
  185. package/dist/cli/index.d.ts.map +1 -0
  186. package/dist/cli/index.js +575 -0
  187. package/dist/cli/index.js.map +1 -0
  188. package/dist/compression/caveman.d.ts +14 -0
  189. package/dist/compression/caveman.d.ts.map +1 -0
  190. package/dist/compression/caveman.js +188 -0
  191. package/dist/compression/caveman.js.map +1 -0
  192. package/dist/compression/caveman.test.d.ts +2 -0
  193. package/dist/compression/caveman.test.d.ts.map +1 -0
  194. package/dist/compression/caveman.test.js.map +1 -0
  195. package/dist/config/configManager.d.ts +6 -0
  196. package/dist/config/configManager.d.ts.map +1 -0
  197. package/dist/config/configManager.js +62 -0
  198. package/dist/config/configManager.js.map +1 -0
  199. package/dist/config/schema.d.ts +95 -0
  200. package/dist/config/schema.d.ts.map +1 -0
  201. package/dist/config/schema.js +19 -0
  202. package/dist/config/schema.js.map +1 -0
  203. package/dist/context/autoCompact.d.ts +19 -0
  204. package/dist/context/autoCompact.d.ts.map +1 -0
  205. package/dist/context/autoCompact.js +101 -0
  206. package/dist/context/autoCompact.js.map +1 -0
  207. package/dist/context/readDedup.d.ts +21 -0
  208. package/dist/context/readDedup.d.ts.map +1 -0
  209. package/dist/context/readDedup.js +55 -0
  210. package/dist/context/readDedup.js.map +1 -0
  211. package/dist/context/toolBudgets.d.ts +15 -0
  212. package/dist/context/toolBudgets.d.ts.map +1 -0
  213. package/dist/context/toolBudgets.js +35 -0
  214. package/dist/context/toolBudgets.js.map +1 -0
  215. package/dist/core/auditLogger.d.ts +30 -0
  216. package/dist/core/auditLogger.d.ts.map +1 -0
  217. package/dist/core/auditLogger.js +51 -0
  218. package/dist/core/auditLogger.js.map +1 -0
  219. package/dist/core/stateManager.d.ts +10 -0
  220. package/dist/core/stateManager.d.ts.map +1 -0
  221. package/dist/core/stateManager.js +59 -0
  222. package/dist/core/stateManager.js.map +1 -0
  223. package/dist/database/feedbackSchema.d.ts +80 -0
  224. package/dist/database/feedbackSchema.d.ts.map +1 -0
  225. package/dist/database/feedbackSchema.js +94 -0
  226. package/dist/database/feedbackSchema.js.map +1 -0
  227. package/dist/database/leadsSchema.d.ts +99 -0
  228. package/dist/database/leadsSchema.d.ts.map +1 -0
  229. package/dist/database/leadsSchema.js +136 -0
  230. package/dist/database/leadsSchema.js.map +1 -0
  231. package/dist/intelligence/competitorScoring.d.ts +25 -0
  232. package/dist/intelligence/competitorScoring.d.ts.map +1 -0
  233. package/dist/intelligence/competitorScoring.js +181 -0
  234. package/dist/intelligence/competitorScoring.js.map +1 -0
  235. package/dist/intelligence/competitorTracker.d.ts +36 -0
  236. package/dist/intelligence/competitorTracker.d.ts.map +1 -0
  237. package/dist/intelligence/competitorTracker.js +286 -0
  238. package/dist/intelligence/competitorTracker.js.map +1 -0
  239. package/dist/intelligence/competitorTypes.d.ts +93 -0
  240. package/dist/intelligence/competitorTypes.d.ts.map +1 -0
  241. package/dist/intelligence/competitorTypes.js +6 -0
  242. package/dist/intelligence/competitorTypes.js.map +1 -0
  243. package/dist/intelligence/competitors.json +76 -0
  244. package/dist/intelligence/feedbackLoop.d.ts +118 -0
  245. package/dist/intelligence/feedbackLoop.d.ts.map +1 -0
  246. package/dist/intelligence/feedbackLoop.js +368 -0
  247. package/dist/intelligence/feedbackLoop.js.map +1 -0
  248. package/dist/intelligence/gitHubTracker.d.ts +14 -0
  249. package/dist/intelligence/gitHubTracker.d.ts.map +1 -0
  250. package/dist/intelligence/gitHubTracker.js +153 -0
  251. package/dist/intelligence/gitHubTracker.js.map +1 -0
  252. package/dist/intelligence/hackerNewsScanner.d.ts +21 -0
  253. package/dist/intelligence/hackerNewsScanner.d.ts.map +1 -0
  254. package/dist/intelligence/hackerNewsScanner.js +88 -0
  255. package/dist/intelligence/hackerNewsScanner.js.map +1 -0
  256. package/dist/intelligence/hiringSignals.d.ts +16 -0
  257. package/dist/intelligence/hiringSignals.d.ts.map +1 -0
  258. package/dist/intelligence/hiringSignals.js +132 -0
  259. package/dist/intelligence/hiringSignals.js.map +1 -0
  260. package/dist/intelligence/index.d.ts +9 -0
  261. package/dist/intelligence/index.d.ts.map +1 -0
  262. package/dist/intelligence/index.js +9 -0
  263. package/dist/intelligence/index.js.map +1 -0
  264. package/dist/intelligence/leadEnrichment.d.ts +59 -0
  265. package/dist/intelligence/leadEnrichment.d.ts.map +1 -0
  266. package/dist/intelligence/leadEnrichment.js +209 -0
  267. package/dist/intelligence/leadEnrichment.js.map +1 -0
  268. package/dist/intelligence/leadEnrichmentTypes.d.ts +49 -0
  269. package/dist/intelligence/leadEnrichmentTypes.d.ts.map +1 -0
  270. package/dist/intelligence/leadEnrichmentTypes.js +7 -0
  271. package/dist/intelligence/leadEnrichmentTypes.js.map +1 -0
  272. package/dist/intelligence/marketScanner.d.ts +18 -0
  273. package/dist/intelligence/marketScanner.d.ts.map +1 -0
  274. package/dist/intelligence/marketScanner.js +225 -0
  275. package/dist/intelligence/marketScanner.js.map +1 -0
  276. package/dist/intelligence/polymarketScanner.d.ts +20 -0
  277. package/dist/intelligence/polymarketScanner.d.ts.map +1 -0
  278. package/dist/intelligence/polymarketScanner.js +88 -0
  279. package/dist/intelligence/polymarketScanner.js.map +1 -0
  280. package/dist/intelligence/redditScanner.d.ts +22 -0
  281. package/dist/intelligence/redditScanner.d.ts.map +1 -0
  282. package/dist/intelligence/redditScanner.js +89 -0
  283. package/dist/intelligence/redditScanner.js.map +1 -0
  284. package/dist/intelligence/signalAggregator.d.ts +10 -0
  285. package/dist/intelligence/signalAggregator.d.ts.map +1 -0
  286. package/dist/intelligence/signalAggregator.js +64 -0
  287. package/dist/intelligence/signalAggregator.js.map +1 -0
  288. package/dist/intelligence/trendAnalysis.d.ts +13 -0
  289. package/dist/intelligence/trendAnalysis.d.ts.map +1 -0
  290. package/dist/intelligence/trendAnalysis.js +106 -0
  291. package/dist/intelligence/trendAnalysis.js.map +1 -0
  292. package/dist/intelligence/twitterScanner.d.ts +22 -0
  293. package/dist/intelligence/twitterScanner.d.ts.map +1 -0
  294. package/dist/intelligence/twitterScanner.js +63 -0
  295. package/dist/intelligence/twitterScanner.js.map +1 -0
  296. package/dist/intelligence/types.d.ts +566 -0
  297. package/dist/intelligence/types.d.ts.map +1 -0
  298. package/dist/intelligence/types.js +87 -0
  299. package/dist/intelligence/types.js.map +1 -0
  300. package/dist/intelligence/userComplaints.d.ts +15 -0
  301. package/dist/intelligence/userComplaints.d.ts.map +1 -0
  302. package/dist/intelligence/userComplaints.js +193 -0
  303. package/dist/intelligence/userComplaints.js.map +1 -0
  304. package/dist/metrics/businessMetrics.d.ts +41 -0
  305. package/dist/metrics/businessMetrics.d.ts.map +1 -0
  306. package/dist/metrics/businessMetrics.js +120 -0
  307. package/dist/metrics/businessMetrics.js.map +1 -0
  308. package/dist/metrics/businessMetrics.test.d.ts +2 -0
  309. package/dist/metrics/businessMetrics.test.d.ts.map +1 -0
  310. package/dist/metrics/businessMetrics.test.js.map +1 -0
  311. package/dist/metrics/businessMetricsAgg.d.ts +85 -0
  312. package/dist/metrics/businessMetricsAgg.d.ts.map +1 -0
  313. package/dist/metrics/businessMetricsAgg.js +406 -0
  314. package/dist/metrics/businessMetricsAgg.js.map +1 -0
  315. package/dist/metrics/competitorMetrics.d.ts +57 -0
  316. package/dist/metrics/competitorMetrics.d.ts.map +1 -0
  317. package/dist/metrics/competitorMetrics.js +94 -0
  318. package/dist/metrics/competitorMetrics.js.map +1 -0
  319. package/dist/metrics/dashboardGenerator.d.ts +16 -0
  320. package/dist/metrics/dashboardGenerator.d.ts.map +1 -0
  321. package/dist/metrics/dashboardGenerator.js +313 -0
  322. package/dist/metrics/dashboardGenerator.js.map +1 -0
  323. package/dist/metrics/dashboardHTML.d.ts +18 -0
  324. package/dist/metrics/dashboardHTML.d.ts.map +1 -0
  325. package/dist/metrics/dashboardHTML.js +613 -0
  326. package/dist/metrics/dashboardHTML.js.map +1 -0
  327. package/dist/metrics/grafanaExport.d.ts +53 -0
  328. package/dist/metrics/grafanaExport.d.ts.map +1 -0
  329. package/dist/metrics/grafanaExport.js +277 -0
  330. package/dist/metrics/grafanaExport.js.map +1 -0
  331. package/dist/metrics/index.d.ts +17 -0
  332. package/dist/metrics/index.d.ts.map +1 -0
  333. package/dist/metrics/index.js +17 -0
  334. package/dist/metrics/index.js.map +1 -0
  335. package/dist/metrics/leadsMetrics.d.ts +48 -0
  336. package/dist/metrics/leadsMetrics.d.ts.map +1 -0
  337. package/dist/metrics/leadsMetrics.js +82 -0
  338. package/dist/metrics/leadsMetrics.js.map +1 -0
  339. package/dist/metrics/leadsMetrics.test.d.ts +2 -0
  340. package/dist/metrics/leadsMetrics.test.d.ts.map +1 -0
  341. package/dist/metrics/leadsMetrics.test.js.map +1 -0
  342. package/dist/metrics/metricsTypes.d.ts +114 -0
  343. package/dist/metrics/metricsTypes.d.ts.map +1 -0
  344. package/dist/metrics/metricsTypes.js +7 -0
  345. package/dist/metrics/metricsTypes.js.map +1 -0
  346. package/dist/metrics/revenueProjection.d.ts +44 -0
  347. package/dist/metrics/revenueProjection.d.ts.map +1 -0
  348. package/dist/metrics/revenueProjection.js +239 -0
  349. package/dist/metrics/revenueProjection.js.map +1 -0
  350. package/dist/metrics/revenueTypes.d.ts +62 -0
  351. package/dist/metrics/revenueTypes.d.ts.map +1 -0
  352. package/dist/metrics/revenueTypes.js +7 -0
  353. package/dist/metrics/revenueTypes.js.map +1 -0
  354. package/dist/metrics/roiCalculator.d.ts +39 -0
  355. package/dist/metrics/roiCalculator.d.ts.map +1 -0
  356. package/dist/metrics/roiCalculator.js +128 -0
  357. package/dist/metrics/roiCalculator.js.map +1 -0
  358. package/dist/metrics/roiCalculator.test.d.ts +2 -0
  359. package/dist/metrics/roiCalculator.test.d.ts.map +1 -0
  360. package/dist/metrics/roiCalculator.test.js.map +1 -0
  361. package/dist/metrics/trendMetrics.d.ts +51 -0
  362. package/dist/metrics/trendMetrics.d.ts.map +1 -0
  363. package/dist/metrics/trendMetrics.js +116 -0
  364. package/dist/metrics/trendMetrics.js.map +1 -0
  365. package/dist/modes/conservativeCTOMode.d.ts +32 -0
  366. package/dist/modes/conservativeCTOMode.d.ts.map +1 -0
  367. package/dist/modes/conservativeCTOMode.js +98 -0
  368. package/dist/modes/conservativeCTOMode.js.map +1 -0
  369. package/dist/modes/index.d.ts +3 -0
  370. package/dist/modes/index.d.ts.map +1 -0
  371. package/dist/modes/index.js +3 -0
  372. package/dist/modes/index.js.map +1 -0
  373. package/dist/modes/seniorDeveloperMode.d.ts +17 -0
  374. package/dist/modes/seniorDeveloperMode.d.ts.map +1 -0
  375. package/dist/modes/seniorDeveloperMode.js +77 -0
  376. package/dist/modes/seniorDeveloperMode.js.map +1 -0
  377. package/dist/recovery/contextRecovery.d.ts +28 -0
  378. package/dist/recovery/contextRecovery.d.ts.map +1 -0
  379. package/dist/recovery/contextRecovery.js +113 -0
  380. package/dist/recovery/contextRecovery.js.map +1 -0
  381. package/dist/repair/errorDiagnostics.d.ts +28 -0
  382. package/dist/repair/errorDiagnostics.d.ts.map +1 -0
  383. package/dist/repair/errorDiagnostics.js +158 -0
  384. package/dist/repair/errorDiagnostics.js.map +1 -0
  385. package/dist/repair/skillCapture.d.ts +22 -0
  386. package/dist/repair/skillCapture.d.ts.map +1 -0
  387. package/dist/repair/skillCapture.js +119 -0
  388. package/dist/repair/skillCapture.js.map +1 -0
  389. package/dist/reporting/reportGenerator.d.ts +117 -0
  390. package/dist/reporting/reportGenerator.d.ts.map +1 -0
  391. package/dist/reporting/reportGenerator.js +613 -0
  392. package/dist/reporting/reportGenerator.js.map +1 -0
  393. package/dist/reporting/templates.d.ts +68 -0
  394. package/dist/reporting/templates.d.ts.map +1 -0
  395. package/dist/reporting/templates.js +629 -0
  396. package/dist/reporting/templates.js.map +1 -0
  397. package/dist/security/owaspScanner.d.ts +74 -0
  398. package/dist/security/owaspScanner.d.ts.map +1 -0
  399. package/dist/security/owaspScanner.js +309 -0
  400. package/dist/security/owaspScanner.js.map +1 -0
  401. package/dist/security/piiRedaction.d.ts +67 -0
  402. package/dist/security/piiRedaction.d.ts.map +1 -0
  403. package/dist/security/piiRedaction.js +189 -0
  404. package/dist/security/piiRedaction.js.map +1 -0
  405. package/dist/security/secretsDetection.d.ts +47 -0
  406. package/dist/security/secretsDetection.d.ts.map +1 -0
  407. package/dist/security/secretsDetection.js +272 -0
  408. package/dist/security/secretsDetection.js.map +1 -0
  409. package/dist/subagents/builder.d.ts +33 -0
  410. package/dist/subagents/builder.d.ts.map +1 -0
  411. package/dist/subagents/builder.js +158 -0
  412. package/dist/subagents/builder.js.map +1 -0
  413. package/dist/subagents/investigator.d.ts +31 -0
  414. package/dist/subagents/investigator.d.ts.map +1 -0
  415. package/dist/subagents/investigator.js +166 -0
  416. package/dist/subagents/investigator.js.map +1 -0
  417. package/dist/subagents/orchestrator.d.ts +48 -0
  418. package/dist/subagents/orchestrator.d.ts.map +1 -0
  419. package/dist/subagents/orchestrator.js +151 -0
  420. package/dist/subagents/orchestrator.js.map +1 -0
  421. package/dist/subagents/reviewer.d.ts +31 -0
  422. package/dist/subagents/reviewer.d.ts.map +1 -0
  423. package/dist/subagents/reviewer.js +154 -0
  424. package/dist/subagents/reviewer.js.map +1 -0
  425. package/dist/telemetry/tokenCounter.d.ts +21 -0
  426. package/dist/telemetry/tokenCounter.d.ts.map +1 -0
  427. package/dist/telemetry/tokenCounter.js +49 -0
  428. package/dist/telemetry/tokenCounter.js.map +1 -0
  429. package/package.json +61 -0
  430. package/src/automation/actionApprover.ts +342 -0
  431. package/src/automation/actionExecutor.ts +399 -0
  432. package/src/automation/alertRules.ts +113 -0
  433. package/src/automation/alertSystem.ts +402 -0
  434. package/src/automation/competitorResponse.ts +511 -0
  435. package/src/automation/composioClient.ts +360 -0
  436. package/src/automation/crmExport.ts +407 -0
  437. package/src/automation/crmIntegration.ts +268 -0
  438. package/src/automation/gmailIntegration.ts +244 -0
  439. package/src/automation/index.ts +17 -0
  440. package/src/automation/jiraIntegration.ts +310 -0
  441. package/src/automation/jobQueue.ts +278 -0
  442. package/src/automation/leadQualification.ts +270 -0
  443. package/src/automation/qualificationRules.ts +304 -0
  444. package/src/automation/responseTemplates.ts +419 -0
  445. package/src/automation/scheduler.ts +254 -0
  446. package/src/automation/types.ts +270 -0
  447. package/src/cli/index.ts +646 -0
  448. package/src/compression/caveman.ts +257 -0
  449. package/src/config/configManager.ts +63 -0
  450. package/src/config/schema.ts +27 -0
  451. package/src/context/autoCompact.ts +123 -0
  452. package/src/context/readDedup.ts +84 -0
  453. package/src/context/toolBudgets.ts +43 -0
  454. package/src/core/auditLogger.ts +69 -0
  455. package/src/core/stateManager.ts +73 -0
  456. package/src/database/feedbackSchema.ts +168 -0
  457. package/src/database/leadsSchema.ts +205 -0
  458. package/src/intelligence/competitorScoring.ts +292 -0
  459. package/src/intelligence/competitorTracker.ts +362 -0
  460. package/src/intelligence/competitorTypes.ts +100 -0
  461. package/src/intelligence/competitors.json +76 -0
  462. package/src/intelligence/feedbackLoop.ts +538 -0
  463. package/src/intelligence/gitHubTracker.ts +204 -0
  464. package/src/intelligence/hackerNewsScanner.ts +121 -0
  465. package/src/intelligence/hiringSignals.ts +162 -0
  466. package/src/intelligence/index.ts +9 -0
  467. package/src/intelligence/leadEnrichment.ts +275 -0
  468. package/src/intelligence/leadEnrichmentTypes.ts +54 -0
  469. package/src/intelligence/marketScanner.ts +285 -0
  470. package/src/intelligence/polymarketScanner.ts +120 -0
  471. package/src/intelligence/redditScanner.ts +122 -0
  472. package/src/intelligence/signalAggregator.ts +94 -0
  473. package/src/intelligence/trendAnalysis.ts +140 -0
  474. package/src/intelligence/twitterScanner.ts +94 -0
  475. package/src/intelligence/types.ts +130 -0
  476. package/src/intelligence/userComplaints.ts +236 -0
  477. package/src/metrics/businessMetrics.ts +186 -0
  478. package/src/metrics/businessMetricsAgg.ts +554 -0
  479. package/src/metrics/competitorMetrics.ts +175 -0
  480. package/src/metrics/dashboardGenerator.ts +335 -0
  481. package/src/metrics/dashboardHTML.ts +637 -0
  482. package/src/metrics/grafanaExport.ts +347 -0
  483. package/src/metrics/index.ts +17 -0
  484. package/src/metrics/leadsMetrics.ts +145 -0
  485. package/src/metrics/metricsTypes.ts +129 -0
  486. package/src/metrics/revenueProjection.ts +319 -0
  487. package/src/metrics/revenueTypes.ts +67 -0
  488. package/src/metrics/roiCalculator.ts +199 -0
  489. package/src/metrics/trendMetrics.ts +190 -0
  490. package/src/modes/conservativeCTOMode.ts +124 -0
  491. package/src/modes/index.ts +6 -0
  492. package/src/modes/seniorDeveloperMode.ts +94 -0
  493. package/src/recovery/contextRecovery.ts +141 -0
  494. package/src/repair/errorDiagnostics.ts +198 -0
  495. package/src/repair/skillCapture.ts +157 -0
  496. package/src/reporting/reportGenerator.ts +802 -0
  497. package/src/reporting/templates.ts +677 -0
  498. package/src/security/owaspScanner.ts +390 -0
  499. package/src/security/phase8Hardening.ts +536 -0
  500. package/src/security/piiRedaction.ts +215 -0
  501. package/src/security/secretsDetection.js +271 -0
  502. package/src/security/secretsDetection.ts +318 -0
  503. package/src/subagents/builder.ts +277 -0
  504. package/src/subagents/investigator.ts +224 -0
  505. package/src/subagents/orchestrator.ts +212 -0
  506. package/src/subagents/reviewer.ts +215 -0
  507. package/src/telemetry/tokenCounter.ts +81 -0
@@ -0,0 +1,292 @@
1
+ /**
2
+ * Competitor Threat Assessment & Scoring
3
+ * Combines all signals to calculate threat levels
4
+ */
5
+
6
+ import {
7
+ CompetitorThreat,
8
+ GithubEvent,
9
+ HiringSignal,
10
+ UserComplaint,
11
+ CompetitorIntelligence,
12
+ } from './competitorTypes.js';
13
+
14
+ export interface ScoringFactors {
15
+ feature_velocity: number; // 0-100: releases per month
16
+ hiring_velocity: number; // 0-100: hiring increase rate
17
+ market_sentiment: number; // 0-100: inverse of complaint negativity
18
+ funding_signal: number; // 0-100: estimated from hiring & GitHub activity
19
+ market_traction: number; // 0-100: estimated from GitHub stars, adoption
20
+ }
21
+
22
+ /**
23
+ * Calculate threat score (0-100) based on competitive signals
24
+ */
25
+ export function scoreCompetitor(
26
+ competitor_id: string,
27
+ competitor_name: string,
28
+ github_activity: GithubEvent[],
29
+ hiring_signals: HiringSignal[],
30
+ user_feedback: UserComplaint[],
31
+ ): CompetitorThreat {
32
+ const factors = calculateScoringFactors(
33
+ github_activity,
34
+ hiring_signals,
35
+ user_feedback,
36
+ );
37
+
38
+ // Weighted score calculation
39
+ const threat_score =
40
+ factors.feature_velocity * 0.25 +
41
+ factors.hiring_velocity * 0.25 +
42
+ factors.market_sentiment * 0.2 +
43
+ factors.funding_signal * 0.15 +
44
+ factors.market_traction * 0.15;
45
+
46
+ const threat_level = getThreatLevel(threat_score);
47
+
48
+ // Identify strategic strengths and weaknesses
49
+ const strengths = identifyStrengths(factors, user_feedback);
50
+ const weaknesses = identifyWeaknesses(factors, user_feedback);
51
+ const opportunities = identifyOpportunities(weaknesses, user_feedback);
52
+ const risks = identifyRisks(factors, hiring_signals);
53
+
54
+ return {
55
+ competitor_id,
56
+ competitor_name,
57
+ threat_score: Math.round(threat_score),
58
+ threat_level,
59
+ feature_velocity: factors.feature_velocity,
60
+ hiring_velocity: factors.hiring_velocity,
61
+ market_sentiment: mapSentimentToLabel(factors.market_sentiment),
62
+ strengths,
63
+ weaknesses,
64
+ opportunities,
65
+ risks,
66
+ confidence: Math.min(
67
+ 100,
68
+ (github_activity.length + hiring_signals.length + user_feedback.length) * 5,
69
+ ),
70
+ updated: new Date().toISOString(),
71
+ };
72
+ }
73
+
74
+ function calculateScoringFactors(
75
+ github_activity: GithubEvent[],
76
+ hiring_signals: HiringSignal[],
77
+ user_feedback: UserComplaint[],
78
+ ): ScoringFactors {
79
+ // Feature velocity: high-impact commits/releases per month
80
+ const thirtyDaysAgo = new Date();
81
+ thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30);
82
+
83
+ const recentHighImpact = github_activity.filter(
84
+ (e) =>
85
+ new Date(e.date) > thirtyDaysAgo &&
86
+ (e.impact_level === 'high' || e.type === 'release'),
87
+ ).length;
88
+
89
+ const feature_velocity = Math.min(100, recentHighImpact * 20);
90
+
91
+ // Hiring velocity: increase in hiring activity
92
+ const recent_hiring = hiring_signals.filter(
93
+ (s) => new Date(s.date) > thirtyDaysAgo,
94
+ ).length;
95
+ const hiring_velocity = Math.min(100, recent_hiring * 10);
96
+
97
+ // Market sentiment: inverse of negative complaints
98
+ const negative_complaints = user_feedback.filter(
99
+ (c) => c.sentiment === 'negative',
100
+ ).length;
101
+ const positive_complaints = user_feedback.filter(
102
+ (c) => c.sentiment === 'positive',
103
+ ).length;
104
+
105
+ let sentiment_score = 50; // neutral baseline
106
+ if (user_feedback.length > 0) {
107
+ sentiment_score = Math.round(
108
+ ((positive_complaints - negative_complaints) / user_feedback.length) *
109
+ 50 +
110
+ 50,
111
+ );
112
+ }
113
+ const market_sentiment = Math.max(0, Math.min(100, sentiment_score));
114
+
115
+ // Funding signal: estimated from hiring and GitHub activity
116
+ const hiring_signal = recent_hiring > 0 ? 40 : 20;
117
+ const github_signal = github_activity.length > 10 ? 40 : 20;
118
+ const funding_signal = hiring_signal + github_signal;
119
+
120
+ // Market traction: GitHub activity as proxy
121
+ const market_traction = Math.min(100, github_activity.length * 3);
122
+
123
+ return {
124
+ feature_velocity,
125
+ hiring_velocity,
126
+ market_sentiment,
127
+ funding_signal,
128
+ market_traction,
129
+ };
130
+ }
131
+
132
+ function getThreatLevel(score: number): 'critical' | 'high' | 'medium' | 'low' {
133
+ if (score >= 75) return 'critical';
134
+ if (score >= 50) return 'high';
135
+ if (score >= 25) return 'medium';
136
+ return 'low';
137
+ }
138
+
139
+ function mapSentimentToLabel(
140
+ score: number,
141
+ ): 'very_negative' | 'negative' | 'neutral' | 'positive' | 'very_positive' {
142
+ if (score >= 70) return 'very_positive';
143
+ if (score >= 55) return 'positive';
144
+ if (score >= 45) return 'neutral';
145
+ if (score >= 30) return 'negative';
146
+ return 'very_negative';
147
+ }
148
+
149
+ function identifyStrengths(
150
+ factors: ScoringFactors,
151
+ user_feedback: UserComplaint[],
152
+ ): string[] {
153
+ const strengths: string[] = [];
154
+
155
+ if (factors.feature_velocity > 60) {
156
+ strengths.push('Rapid feature development velocity');
157
+ }
158
+
159
+ if (factors.hiring_velocity > 50) {
160
+ strengths.push('Strong hiring momentum indicates investment');
161
+ }
162
+
163
+ const positive_feedback = user_feedback.filter(
164
+ (c) => c.sentiment === 'positive',
165
+ );
166
+ if (positive_feedback.length > 2) {
167
+ strengths.push('Positive user sentiment on key features');
168
+ }
169
+
170
+ if (factors.market_traction > 60) {
171
+ strengths.push('Strong community engagement');
172
+ }
173
+
174
+ return strengths.length > 0
175
+ ? strengths
176
+ : ['Stable market presence'];
177
+ }
178
+
179
+ function identifyWeaknesses(
180
+ factors: ScoringFactors,
181
+ user_feedback: UserComplaint[],
182
+ ): string[] {
183
+ const weaknesses: string[] = [];
184
+
185
+ if (factors.feature_velocity < 30) {
186
+ weaknesses.push('Slower feature release cycle');
187
+ }
188
+
189
+ if (factors.hiring_velocity < 20) {
190
+ weaknesses.push('Limited hiring investment');
191
+ }
192
+
193
+ const critical_issues = user_feedback.filter(
194
+ (c) => c.sentiment === 'negative' && c.frequency >= 8,
195
+ );
196
+
197
+ if (critical_issues.length > 0) {
198
+ weaknesses.push(
199
+ `${critical_issues.length} critical user pain points`,
200
+ );
201
+ }
202
+
203
+ // Cost-related complaints
204
+ const cost_complaints = user_feedback.filter(
205
+ (c) => c.category === 'cost' && c.sentiment === 'negative',
206
+ );
207
+ if (cost_complaints.length > 0) {
208
+ weaknesses.push('Pricing concerns from users');
209
+ }
210
+
211
+ return weaknesses.length > 0
212
+ ? weaknesses
213
+ : ['Limited data for assessment'];
214
+ }
215
+
216
+ function identifyOpportunities(
217
+ weaknesses: string[],
218
+ user_feedback: UserComplaint[],
219
+ ): string[] {
220
+ const opportunities: string[] = [];
221
+
222
+ // Gaps to exploit
223
+ if (
224
+ weaknesses.some((w) =>
225
+ w.includes('slower') || w.includes('Limited'),
226
+ )
227
+ ) {
228
+ opportunities.push('Out-pace with feature releases');
229
+ }
230
+
231
+ // Cost opportunities
232
+ const cost_complaints = user_feedback.filter(
233
+ (c) => c.category === 'cost' && c.sentiment === 'negative',
234
+ );
235
+ if (cost_complaints.length > 0) {
236
+ opportunities.push('Undercut on pricing');
237
+ }
238
+
239
+ // Performance opportunities
240
+ const perf_complaints = user_feedback.filter(
241
+ (c) => c.category === 'performance' && c.sentiment === 'negative',
242
+ );
243
+ if (perf_complaints.length > 0) {
244
+ opportunities.push('Optimize for performance');
245
+ }
246
+
247
+ return opportunities.length > 0
248
+ ? opportunities
249
+ : ['Monitor for strategic pivots'];
250
+ }
251
+
252
+ function identifyRisks(
253
+ factors: ScoringFactors,
254
+ hiring_signals: HiringSignal[],
255
+ ): string[] {
256
+ const risks: string[] = [];
257
+
258
+ if (factors.hiring_velocity > 60) {
259
+ risks.push('Aggressive team expansion may indicate major pivot');
260
+ }
261
+
262
+ if (factors.feature_velocity > 70) {
263
+ risks.push('Rapid innovation cycle could introduce new competitive advantage');
264
+ }
265
+
266
+ // Check for sales/market expansion hiring
267
+ const sales_hiring = hiring_signals.filter(
268
+ (s) => s.role_type === 'sales',
269
+ ).length;
270
+ if (sales_hiring > 2) {
271
+ risks.push('Enterprise market expansion underway');
272
+ }
273
+
274
+ return risks.length > 0 ? risks : ['Monitor quarterly'];
275
+ }
276
+
277
+ /**
278
+ * Compare multiple competitors and rank by threat
279
+ */
280
+ export function rankCompetitorThreats(threats: CompetitorThreat[]): CompetitorThreat[] {
281
+ return [...threats].sort((a, b) => b.threat_score - a.threat_score);
282
+ }
283
+
284
+ /**
285
+ * Generate competitive positioning summary
286
+ */
287
+ export function generatePositioningSummary(threat: CompetitorThreat): string {
288
+ const level = threat.threat_level.toUpperCase();
289
+ const score = threat.threat_score;
290
+
291
+ return `${threat.competitor_name}: ${level} threat (${score}/100) - ${threat.strengths[0] || 'Stable market presence'}`;
292
+ }
@@ -0,0 +1,362 @@
1
+ /**
2
+ * Competitor Intelligence Orchestrator
3
+ * Coordinates parallel tracking across GitHub, hiring, and user feedback
4
+ * Generates weekly intelligence reports
5
+ */
6
+
7
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
8
+ import { resolve, dirname } from 'path';
9
+ import {
10
+ Competitor,
11
+ CompetitorIntelligence,
12
+ IntelligenceReport,
13
+ TrackingConfig,
14
+ } from './competitorTypes.js';
15
+ import { trackGitHub, analyzeGitHubTrend } from './gitHubTracker.js';
16
+ import { detectHiringSignals, analyzeHiringStrategy, calculateHiringVelocity } from './hiringSignals.js';
17
+ import { aggregateUserComplaints, analyzeComplaintPatterns } from './userComplaints.js';
18
+ import {
19
+ scoreCompetitor,
20
+ rankCompetitorThreats,
21
+ generatePositioningSummary,
22
+ } from './competitorScoring.js';
23
+
24
+ export class CompetitorTracker {
25
+ private configPath: string;
26
+ private config: TrackingConfig = getDefaultTrackingConfig();
27
+ private competitors: Competitor[] = [];
28
+
29
+ constructor(configPath: string = 'src/intelligence/competitors.json') {
30
+ this.configPath = resolve(configPath);
31
+ this.loadConfig();
32
+ }
33
+
34
+ private loadConfig(): void {
35
+ try {
36
+ const raw = readFileSync(this.configPath, 'utf-8');
37
+ const data = JSON.parse(raw);
38
+ this.competitors = data.competitors || [];
39
+ // Merge tracking config with report_settings
40
+ const trackingConfig = data.tracking || getDefaultTrackingConfig();
41
+ const reportSettings = data.report_settings || {};
42
+ this.config = {
43
+ ...getDefaultTrackingConfig(),
44
+ ...trackingConfig,
45
+ auto_append_findings: reportSettings.auto_append_findings !== undefined
46
+ ? reportSettings.auto_append_findings
47
+ : trackingConfig.auto_append_findings !== undefined
48
+ ? trackingConfig.auto_append_findings
49
+ : true,
50
+ include_scoring: reportSettings.include_scoring !== undefined
51
+ ? reportSettings.include_scoring
52
+ : trackingConfig.include_scoring !== undefined
53
+ ? trackingConfig.include_scoring
54
+ : true,
55
+ weekly_summary: reportSettings.weekly_summary !== undefined
56
+ ? reportSettings.weekly_summary
57
+ : trackingConfig.weekly_summary !== undefined
58
+ ? trackingConfig.weekly_summary
59
+ : true,
60
+ slack_notifications: reportSettings.slack_notifications !== undefined
61
+ ? reportSettings.slack_notifications
62
+ : trackingConfig.slack_notifications !== undefined
63
+ ? trackingConfig.slack_notifications
64
+ : false,
65
+ };
66
+ } catch (error) {
67
+ console.error(`Failed to load competitors config: ${(error as Error).message}`);
68
+ this.competitors = [];
69
+ this.config = getDefaultTrackingConfig();
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Track all competitors in parallel
75
+ */
76
+ async trackAllCompetitors(): Promise<CompetitorIntelligence[]> {
77
+ console.log(`[CompetitorTracker] Tracking ${this.competitors.length} competitors...`);
78
+
79
+ const promises = this.competitors.map((competitor) =>
80
+ this.trackCompetitor(competitor),
81
+ );
82
+
83
+ const results = await Promise.allSettled(promises);
84
+
85
+ const intelligence: CompetitorIntelligence[] = [];
86
+ for (let i = 0; i < results.length; i++) {
87
+ if (results[i].status === 'fulfilled') {
88
+ intelligence.push((results[i] as PromiseFulfilledResult<CompetitorIntelligence>).value);
89
+ } else {
90
+ console.error(
91
+ `Failed to track ${this.competitors[i].name}: ${(results[i] as PromiseRejectedResult).reason}`,
92
+ );
93
+ }
94
+ }
95
+
96
+ return intelligence;
97
+ }
98
+
99
+ /**
100
+ * Track individual competitor across all sources
101
+ */
102
+ private async trackCompetitor(
103
+ competitor: Competitor,
104
+ ): Promise<CompetitorIntelligence> {
105
+ console.log(` Tracking: ${competitor.name}...`);
106
+
107
+ // Parallel data collection
108
+ const [github_activity, hiring_signals, user_feedback] = await Promise.all([
109
+ trackGitHub(competitor).catch((e) => {
110
+ console.error(`GitHub track failed for ${competitor.name}: ${e}`);
111
+ return [];
112
+ }),
113
+ detectHiringSignals(competitor).catch((e) => {
114
+ console.error(`Hiring detection failed for ${competitor.name}: ${e}`);
115
+ return [];
116
+ }),
117
+ aggregateUserComplaints(competitor).catch((e) => {
118
+ console.error(`Complaint aggregation failed for ${competitor.name}: ${e}`);
119
+ return [];
120
+ }),
121
+ ]);
122
+
123
+ // Assess threat level
124
+ const threat_assessment = scoreCompetitor(
125
+ competitor.id,
126
+ competitor.name,
127
+ github_activity,
128
+ hiring_signals,
129
+ user_feedback,
130
+ );
131
+
132
+ return {
133
+ competitor_id: competitor.id,
134
+ competitor_name: competitor.name,
135
+ github_activity,
136
+ hiring_signals,
137
+ user_feedback,
138
+ threat_assessment,
139
+ last_updated: new Date().toISOString(),
140
+ data_points: github_activity.length + hiring_signals.length + user_feedback.length,
141
+ };
142
+ }
143
+
144
+ /**
145
+ * Generate weekly intelligence report
146
+ */
147
+ generateIntelligenceReport(
148
+ intelligence_data: CompetitorIntelligence[],
149
+ ): IntelligenceReport {
150
+ const now = new Date();
151
+ const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
152
+
153
+ // Calculate aggregated metrics
154
+ let total_feature_releases = 0;
155
+ let total_hiring_signals = 0;
156
+ let total_complaints = 0;
157
+
158
+ for (const intel of intelligence_data) {
159
+ total_feature_releases += intel.github_activity.filter(
160
+ (e) => e.type === 'release',
161
+ ).length;
162
+ total_hiring_signals += intel.hiring_signals.length;
163
+ total_complaints += intel.user_feedback.length;
164
+ }
165
+
166
+ // Rank threats
167
+ const threats = intelligence_data.map((i) => i.threat_assessment);
168
+ const ranked_threats = rankCompetitorThreats(threats);
169
+ const highest_threat = ranked_threats[0]?.competitor_name || 'None detected';
170
+
171
+ // Key findings
172
+ const key_findings: string[] = [];
173
+ for (const intel of intelligence_data) {
174
+ const summary = generatePositioningSummary(intel.threat_assessment);
175
+ key_findings.push(summary);
176
+
177
+ // Add specific findings
178
+ if (intel.threat_assessment.threat_level === 'critical') {
179
+ key_findings.push(
180
+ ` ⚠️ ${intel.competitor_name}: ${intel.threat_assessment.risks[0]}`,
181
+ );
182
+ }
183
+
184
+ if (intel.github_activity.length > 5) {
185
+ const trend = analyzeGitHubTrend(intel.github_activity);
186
+ if (trend.feature_velocity > 3) {
187
+ key_findings.push(
188
+ ` 📈 ${intel.competitor_name}: High feature velocity (${trend.feature_velocity} releases)`,
189
+ );
190
+ }
191
+ }
192
+ }
193
+
194
+ const summary = `
195
+ Competitive Intelligence Report
196
+ Period: ${weekAgo.toISOString().split('T')[0]} to ${now.toISOString().split('T')[0]}
197
+
198
+ High-Threat Competitors: ${ranked_threats.filter((t) => t.threat_level === 'critical' || t.threat_level === 'high').length}
199
+ Top Threat: ${highest_threat}
200
+
201
+ Aggregate Metrics:
202
+ - Feature Releases Detected: ${total_feature_releases}
203
+ - Hiring Signals: ${total_hiring_signals}
204
+ - User Complaints Aggregated: ${total_complaints}
205
+ `.trim();
206
+
207
+ return {
208
+ period_start: weekAgo.toISOString().split('T')[0],
209
+ period_end: now.toISOString().split('T')[0],
210
+ total_competitors_tracked: intelligence_data.length,
211
+ highest_threat,
212
+ key_findings,
213
+ feature_releases_detected: total_feature_releases,
214
+ hiring_signals_detected: total_hiring_signals,
215
+ user_complaints_aggregated: total_complaints,
216
+ competitor_data: intelligence_data,
217
+ summary,
218
+ };
219
+ }
220
+
221
+ /**
222
+ * Save report to findings markdown file
223
+ */
224
+ async saveReport(report: IntelligenceReport, findings_path: string): Promise<void> {
225
+ const markdown = this.formatReportAsMarkdown(report);
226
+
227
+ try {
228
+ const fullPath = resolve(findings_path);
229
+ const dir = dirname(fullPath);
230
+
231
+ // Ensure directory exists
232
+ if (!existsSync(dir)) {
233
+ mkdirSync(dir, { recursive: true });
234
+ }
235
+
236
+ let existing = '';
237
+
238
+ if (existsSync(fullPath)) {
239
+ existing = readFileSync(fullPath, 'utf-8');
240
+ }
241
+
242
+ const updated = existing + '\n' + markdown;
243
+ writeFileSync(fullPath, updated, 'utf-8');
244
+
245
+ console.log(`✓ Report saved to ${fullPath}`);
246
+ } catch (error) {
247
+ console.error(`Failed to save report: ${(error as Error).message}`);
248
+ }
249
+ }
250
+
251
+ get trackingConfig(): TrackingConfig {
252
+ return this.config;
253
+ }
254
+
255
+ private formatReportAsMarkdown(report: IntelligenceReport): string {
256
+ const date = new Date().toISOString();
257
+
258
+ let md = `## Competitive Intelligence Report - ${report.period_end}\n\n`;
259
+ md += `**Generated**: ${date}\n\n`;
260
+ md += `**Period**: ${report.period_start} to ${report.period_end}\n\n`;
261
+
262
+ md += `### Summary\n\n${report.summary}\n\n`;
263
+
264
+ md += `### Key Findings\n\n`;
265
+ for (const finding of report.key_findings) {
266
+ md += `- ${finding}\n`;
267
+ }
268
+ md += '\n';
269
+
270
+ md += `### Threat Assessment\n\n`;
271
+ md += `| Competitor | Threat Level | Score | Strengths |\n`;
272
+ md += `|---|---|---|---|\n`;
273
+
274
+ for (const intel of report.competitor_data) {
275
+ const threat = intel.threat_assessment;
276
+ const strengths = threat.strengths.slice(0, 2).join(', ');
277
+ md += `| ${threat.competitor_name} | **${threat.threat_level.toUpperCase()}** | ${threat.threat_score}/100 | ${strengths} |\n`;
278
+ }
279
+ md += '\n';
280
+
281
+ md += `### Feature Releases\n\n`;
282
+ for (const intel of report.competitor_data) {
283
+ if (intel.github_activity.length > 0) {
284
+ const releases = intel.github_activity
285
+ .filter((e) => e.type === 'release')
286
+ .slice(0, 3);
287
+ if (releases.length > 0) {
288
+ md += `**${intel.competitor_name}**:\n`;
289
+ for (const release of releases) {
290
+ md += `- ${release.date}: ${release.feature}\n`;
291
+ }
292
+ md += '\n';
293
+ }
294
+ }
295
+ }
296
+
297
+ md += `### Hiring Signals\n\n`;
298
+ for (const intel of report.competitor_data) {
299
+ if (intel.hiring_signals.length > 0) {
300
+ md += `**${intel.competitor_name}**: ${intel.hiring_signals.length} open positions\n`;
301
+ const strategy = analyzeHiringStrategy(intel.hiring_signals);
302
+ md += `- Strategic Focus: ${strategy.strategic_focus}\n`;
303
+ md += `- Locations: ${strategy.geographic_expansion.join(', ')}\n`;
304
+ md += '\n';
305
+ }
306
+ }
307
+
308
+ md += `### User Sentiment\n\n`;
309
+ for (const intel of report.competitor_data) {
310
+ if (intel.user_feedback.length > 0) {
311
+ const analysis = analyzeComplaintPatterns(intel.user_feedback);
312
+ md += `**${intel.competitor_name}**:\n`;
313
+ if (analysis.critical_issues.length > 0) {
314
+ md += `- Critical Issues: ${analysis.critical_issues[0]}\n`;
315
+ }
316
+ md += `- Sentiment Distribution: ${JSON.stringify(analysis.sentiment_distribution)}\n`;
317
+ md += '\n';
318
+ }
319
+ }
320
+
321
+ md += `---\n\n`;
322
+
323
+ return md;
324
+ }
325
+ }
326
+
327
+ function getDefaultTrackingConfig(): TrackingConfig {
328
+ return {
329
+ enabled: true,
330
+ interval_hours: 24,
331
+ data_retention_days: 90,
332
+ sources: ['github', 'hiring', 'social'],
333
+ auto_append_findings: true,
334
+ include_scoring: true,
335
+ weekly_summary: true,
336
+ slack_notifications: false,
337
+ };
338
+ }
339
+
340
+ /**
341
+ * Main entry point for tracking competitors
342
+ */
343
+ export async function trackCompetitors(
344
+ configPath: string = 'src/intelligence/competitors.json',
345
+ findingsPath: string = 'findings/competitor_intelligence.md',
346
+ ): Promise<IntelligenceReport> {
347
+ const tracker = new CompetitorTracker(configPath);
348
+
349
+ const intelligence = await tracker.trackAllCompetitors();
350
+ const report = tracker.generateIntelligenceReport(intelligence);
351
+
352
+ const config = tracker.trackingConfig;
353
+ const shouldSave = config && config.auto_append_findings;
354
+
355
+ if (shouldSave) {
356
+ await tracker.saveReport(report, findingsPath);
357
+ } else {
358
+ console.log(`[CompetitorTracker] Report generation skipped auto-append (config: ${JSON.stringify(config)})`);
359
+ }
360
+
361
+ return report;
362
+ }