upfynai-code 2.6.0 → 2.6.1

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 (295) hide show
  1. package/README.md +123 -88
  2. package/bin/cli.js +63 -0
  3. package/package.json +48 -106
  4. package/src/auth.js +115 -0
  5. package/src/config.js +33 -0
  6. package/src/connect.js +314 -0
  7. package/src/launch.js +54 -0
  8. package/src/mcp.js +57 -0
  9. package/src/server.js +54 -0
  10. package/client/dist/api-docs.html +0 -879
  11. package/client/dist/assets/AppContent-C0CyP3g5.js +0 -513
  12. package/client/dist/assets/CanvasPanel-0u9QR7U-.js +0 -34
  13. package/client/dist/assets/CanvasPanel-WhZulBJw.css +0 -1
  14. package/client/dist/assets/DashboardPanel-Dgqw1yZk.js +0 -1
  15. package/client/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  16. package/client/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  17. package/client/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  18. package/client/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  19. package/client/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  20. package/client/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  21. package/client/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  22. package/client/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  23. package/client/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  24. package/client/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  25. package/client/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  26. package/client/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  27. package/client/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  28. package/client/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  29. package/client/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  30. package/client/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  31. package/client/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  32. package/client/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  33. package/client/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  34. package/client/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  35. package/client/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  36. package/client/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  37. package/client/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  38. package/client/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  39. package/client/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  40. package/client/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  41. package/client/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  42. package/client/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  43. package/client/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  44. package/client/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  45. package/client/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  46. package/client/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  47. package/client/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  48. package/client/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  49. package/client/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  50. package/client/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  51. package/client/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  52. package/client/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  53. package/client/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  54. package/client/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  55. package/client/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  56. package/client/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  57. package/client/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  58. package/client/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  59. package/client/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  60. package/client/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  61. package/client/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  62. package/client/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  63. package/client/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  64. package/client/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  65. package/client/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  66. package/client/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  67. package/client/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  68. package/client/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  69. package/client/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  70. package/client/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  71. package/client/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  72. package/client/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  73. package/client/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  74. package/client/dist/assets/LoginModal-CZDEzqjK.js +0 -19
  75. package/client/dist/assets/MarkdownPreview-CYdvwJaV.js +0 -1
  76. package/client/dist/assets/Onboarding-DR6NZ4Vz.js +0 -1
  77. package/client/dist/assets/SetupForm-D49gtWY4.js +0 -1
  78. package/client/dist/assets/Tableau10-B-NsZVaP.js +0 -1
  79. package/client/dist/assets/WorkflowsPanel-CqlbEJA_.js +0 -1
  80. package/client/dist/assets/_commonjs-dynamic-modules-TDtrdbi3.js +0 -1
  81. package/client/dist/assets/ar-SA-G6X2FPQ2-BWqa1yBH.js +0 -10
  82. package/client/dist/assets/arc-BegSKqEW.js +0 -1
  83. package/client/dist/assets/array-BKyUJesY.js +0 -1
  84. package/client/dist/assets/az-AZ-76LH7QW2-DrVlbZDP.js +0 -1
  85. package/client/dist/assets/bg-BG-XCXSNQG7-DdunjBgT.js +0 -5
  86. package/client/dist/assets/blockDiagram-38ab4fdb-BKMbwGHu.js +0 -118
  87. package/client/dist/assets/bn-BD-2XOGV67Q-_7DtmvwO.js +0 -5
  88. package/client/dist/assets/c4Diagram-3d4e48cf-hJuiHhSn.js +0 -10
  89. package/client/dist/assets/ca-ES-6MX7JW3Y-BFIrmojG.js +0 -8
  90. package/client/dist/assets/channel-Bur-rRTp.js +0 -1
  91. package/client/dist/assets/classDiagram-70f12bd4-BjiAf9cM.js +0 -2
  92. package/client/dist/assets/classDiagram-v2-f2320105-pwBewejc.js +0 -2
  93. package/client/dist/assets/clone-BtqXeoBJ.js +0 -1
  94. package/client/dist/assets/createText-2e5e7dd3-Dq_acOWe.js +0 -5
  95. package/client/dist/assets/cs-CZ-2BRQDIVT-B-x4F6TJ.js +0 -11
  96. package/client/dist/assets/da-DK-5WZEPLOC-Btlc8Dgn.js +0 -5
  97. package/client/dist/assets/de-DE-XR44H4JA-BVu3ZIoD.js +0 -8
  98. package/client/dist/assets/directory-open-01563666-DWU9wJ6I.js +0 -1
  99. package/client/dist/assets/directory-open-4ed118d0-CunoC1EB.js +0 -1
  100. package/client/dist/assets/edges-e0da2a9e-DH0wVTXR.js +0 -4
  101. package/client/dist/assets/el-GR-BZB4AONW-h2ll8_ZC.js +0 -10
  102. package/client/dist/assets/erDiagram-9861fffd-BYezLIR7.js +0 -51
  103. package/client/dist/assets/es-ES-U4NZUMDT-Cveiulwt.js +0 -9
  104. package/client/dist/assets/eu-ES-A7QVB2H4-DQluL2PY.js +0 -11
  105. package/client/dist/assets/fa-IR-HGAKTJCU-BJtcMBSv.js +0 -8
  106. package/client/dist/assets/fi-FI-Z5N7JZ37-D8NfbVXV.js +0 -6
  107. package/client/dist/assets/file-open-002ab408-DIuFHtCF.js +0 -1
  108. package/client/dist/assets/file-open-7c801643-684qeFg4.js +0 -1
  109. package/client/dist/assets/file-save-3189631c-C1wFhQhH.js +0 -1
  110. package/client/dist/assets/file-save-745eba88-Bb9F9Kg7.js +0 -1
  111. package/client/dist/assets/flowDb-956e92f1-scnUykhM.js +0 -10
  112. package/client/dist/assets/flowDiagram-66a62f08-jVyWsfyU.js +0 -4
  113. package/client/dist/assets/flowDiagram-v2-96b9c2cf-N6xgi25h.js +0 -1
  114. package/client/dist/assets/flowchart-elk-definition-4a651766-gKGX3HqR.js +0 -139
  115. package/client/dist/assets/fr-FR-RHASNOE6-vdj42kC6.js +0 -9
  116. package/client/dist/assets/ganttDiagram-c361ad54-C2CiWFUP.js +0 -257
  117. package/client/dist/assets/gitGraphDiagram-72cf32ee-C59Yz2LK.js +0 -70
  118. package/client/dist/assets/gl-ES-HMX3MZ6V-DQo0TzoP.js +0 -10
  119. package/client/dist/assets/graph-Dx_H43Kv.js +0 -1
  120. package/client/dist/assets/he-IL-6SHJWFNN-DKXK5e33.js +0 -10
  121. package/client/dist/assets/hi-IN-IWLTKZ5I-C2Qgqc0R.js +0 -4
  122. package/client/dist/assets/hu-HU-A5ZG7DT2-Ss-6vX0m.js +0 -7
  123. package/client/dist/assets/id-ID-SAP4L64H-D7Wsg1S2.js +0 -10
  124. package/client/dist/assets/image-blob-reduce.esm-D6s-rqMO.js +0 -7
  125. package/client/dist/assets/index-3862675e-u8Nv7hHC.js +0 -1
  126. package/client/dist/assets/index-BVowJdZF.js +0 -97
  127. package/client/dist/assets/index-ce18TYkg.js +0 -27
  128. package/client/dist/assets/index-kQoJx-bc.css +0 -1
  129. package/client/dist/assets/infoDiagram-f8f76790-LmoJYsxo.js +0 -7
  130. package/client/dist/assets/init-Gi6I4Gst.js +0 -1
  131. package/client/dist/assets/it-IT-JPQ66NNP-CAPTVl7M.js +0 -11
  132. package/client/dist/assets/ja-JP-DBVTYXUO-eNVPawR2.js +0 -8
  133. package/client/dist/assets/journeyDiagram-49397b02-BaJqehpR.js +0 -139
  134. package/client/dist/assets/kaa-6HZHGXH3-tpuNkKhS.js +0 -1
  135. package/client/dist/assets/kab-KAB-ZGHBKWFO-Dp83kx4x.js +0 -8
  136. package/client/dist/assets/kk-KZ-P5N5QNE5-B9IlC6YN.js +0 -1
  137. package/client/dist/assets/km-KH-HSX4SM5Z-B_KMYaMj.js +0 -11
  138. package/client/dist/assets/ko-KR-MTYHY66A-yebnUNdb.js +0 -9
  139. package/client/dist/assets/ku-TR-6OUDTVRD-BR6fh6-5.js +0 -9
  140. package/client/dist/assets/layout-DLl5Jwcl.js +0 -1
  141. package/client/dist/assets/line-FpB7omSK.js +0 -1
  142. package/client/dist/assets/linear-CkXqUFJ8.js +0 -1
  143. package/client/dist/assets/lt-LT-XHIRWOB4-SutZSWtR.js +0 -3
  144. package/client/dist/assets/lv-LV-5QDEKY6T-DuAxdcZL.js +0 -7
  145. package/client/dist/assets/mindmap-definition-fc14e90a-DyxXOExh.js +0 -425
  146. package/client/dist/assets/mr-IN-CRQNXWMA-DqDUWM_8.js +0 -13
  147. package/client/dist/assets/my-MM-5M5IBNSE-C40kMFMR.js +0 -1
  148. package/client/dist/assets/nb-NO-T6EIAALU-DVij32Ju.js +0 -10
  149. package/client/dist/assets/nl-NL-IS3SIHDZ-rT84mDYq.js +0 -8
  150. package/client/dist/assets/nn-NO-6E72VCQL-BBZXBW8V.js +0 -8
  151. package/client/dist/assets/oc-FR-POXYY2M6-DzjOugOf.js +0 -8
  152. package/client/dist/assets/ordinal-Cboi1Yqb.js +0 -1
  153. package/client/dist/assets/pa-IN-N4M65BXN-DD1iU8_F.js +0 -4
  154. package/client/dist/assets/path-CbwjOpE9.js +0 -1
  155. package/client/dist/assets/pdf-CE_K4jFx.js +0 -12
  156. package/client/dist/assets/pdf.worker-BA9kU3Pw.mjs +0 -61080
  157. package/client/dist/assets/percentages-BXMCSKIN-WVlHS4wx.js +0 -207
  158. package/client/dist/assets/pica-CQIY57Tf.js +0 -7
  159. package/client/dist/assets/pieDiagram-8a3498a8-Dd_85qBH.js +0 -35
  160. package/client/dist/assets/pl-PL-T2D74RX3-ukVXa48G.js +0 -9
  161. package/client/dist/assets/pt-BR-5N22H2LF-BibawarT.js +0 -9
  162. package/client/dist/assets/pt-PT-UZXXM6DQ-So3i9l9w.js +0 -9
  163. package/client/dist/assets/quadrantDiagram-120e2f19-C4dFVDEx.js +0 -7
  164. package/client/dist/assets/requirementDiagram-deff3bca-DrTO7yFl.js +0 -52
  165. package/client/dist/assets/ro-RO-JPDTUUEW-DY0Xq_Hd.js +0 -11
  166. package/client/dist/assets/roundRect-0PYZxl1G.js +0 -1
  167. package/client/dist/assets/ru-RU-B4JR7IUQ-B7u_Zvkd.js +0 -9
  168. package/client/dist/assets/sankeyDiagram-04a897e0-D24gfzuS.js +0 -8
  169. package/client/dist/assets/sequenceDiagram-704730f1-Dgji2XLQ.js +0 -122
  170. package/client/dist/assets/si-LK-N5RQ5JYF-OejsLzQ_.js +0 -1
  171. package/client/dist/assets/sk-SK-C5VTKIMK-_vy2Bt-M.js +0 -6
  172. package/client/dist/assets/sl-SI-NN7IZMDC-DKOl_u2M.js +0 -6
  173. package/client/dist/assets/stateDiagram-587899a1-CJ8eBaiU.js +0 -1
  174. package/client/dist/assets/stateDiagram-v2-d93cdb3a-C5K3l-Nt.js +0 -1
  175. package/client/dist/assets/styles-6aaf32cf-DAKE0jbx.js +0 -207
  176. package/client/dist/assets/styles-9a916d00-LFAJCgEy.js +0 -160
  177. package/client/dist/assets/styles-c10674c1-CllKO8NG.js +0 -116
  178. package/client/dist/assets/subset-shared.chunk-Uy-J87FQ.js +0 -84
  179. package/client/dist/assets/subset-worker.chunk-dvgDvqt9.js +0 -1
  180. package/client/dist/assets/sv-SE-XGPEYMSR-CDCB2ZV5.js +0 -10
  181. package/client/dist/assets/svgDrawCommon-08f97a94-CObOzbFQ.js +0 -1
  182. package/client/dist/assets/ta-IN-2NMHFXQM-DHUNdO69.js +0 -9
  183. package/client/dist/assets/th-TH-HPSO5L25-zI2hnBq3.js +0 -2
  184. package/client/dist/assets/timeline-definition-85554ec2-C2XHRmxK.js +0 -61
  185. package/client/dist/assets/tr-TR-DEFEU3FU-l-6Hu4-D.js +0 -7
  186. package/client/dist/assets/uk-UA-QMV73CPH-CqSOwrl7.js +0 -6
  187. package/client/dist/assets/vendor-codemirror-D_s0aGBu.js +0 -35
  188. package/client/dist/assets/vendor-i18n-DCFGyhQR.js +0 -1
  189. package/client/dist/assets/vendor-icons-Lb69KSFJ.js +0 -646
  190. package/client/dist/assets/vendor-markdown-BXEi_H3G.js +0 -298
  191. package/client/dist/assets/vendor-react-9mUTKBHH.js +0 -67
  192. package/client/dist/assets/vendor-syntax-DnmwQQJF.js +0 -16
  193. package/client/dist/assets/vendor-xterm-CZq1hqo1.js +0 -66
  194. package/client/dist/assets/vendor-xterm-qxJ8_QYu.css +0 -32
  195. package/client/dist/assets/vi-VN-M7AON7JQ-CUL8-mBZ.js +0 -5
  196. package/client/dist/assets/xychartDiagram-e933f94c-1fmf6slj.js +0 -7
  197. package/client/dist/assets/zh-CN-LNUGB5OW-CB5y5VVU.js +0 -10
  198. package/client/dist/assets/zh-HK-E62DVLB3-BHcrrEeJ.js +0 -1
  199. package/client/dist/assets/zh-TW-RAJ6MFWO-DoDUdkaJ.js +0 -9
  200. package/client/dist/clear-cache.html +0 -85
  201. package/client/dist/convert-icons.md +0 -53
  202. package/client/dist/favicon.png +0 -0
  203. package/client/dist/favicon.svg +0 -9
  204. package/client/dist/generate-icons.js +0 -49
  205. package/client/dist/icons/claude-ai-icon.svg +0 -1
  206. package/client/dist/icons/codex-white.svg +0 -3
  207. package/client/dist/icons/codex.svg +0 -3
  208. package/client/dist/icons/cursor-white.svg +0 -12
  209. package/client/dist/icons/cursor.svg +0 -1
  210. package/client/dist/icons/icon-128x128.png +0 -0
  211. package/client/dist/icons/icon-128x128.svg +0 -12
  212. package/client/dist/icons/icon-144x144.png +0 -0
  213. package/client/dist/icons/icon-144x144.svg +0 -12
  214. package/client/dist/icons/icon-152x152.png +0 -0
  215. package/client/dist/icons/icon-152x152.svg +0 -12
  216. package/client/dist/icons/icon-192x192.png +0 -0
  217. package/client/dist/icons/icon-192x192.svg +0 -12
  218. package/client/dist/icons/icon-384x384.png +0 -0
  219. package/client/dist/icons/icon-384x384.svg +0 -12
  220. package/client/dist/icons/icon-512x512.png +0 -0
  221. package/client/dist/icons/icon-512x512.svg +0 -12
  222. package/client/dist/icons/icon-72x72.png +0 -0
  223. package/client/dist/icons/icon-72x72.svg +0 -12
  224. package/client/dist/icons/icon-96x96.png +0 -0
  225. package/client/dist/icons/icon-96x96.svg +0 -12
  226. package/client/dist/icons/icon-template.svg +0 -12
  227. package/client/dist/index.html +0 -128
  228. package/client/dist/logo-128.png +0 -0
  229. package/client/dist/logo-256.png +0 -0
  230. package/client/dist/logo-32.png +0 -0
  231. package/client/dist/logo-512.png +0 -0
  232. package/client/dist/logo-64.png +0 -0
  233. package/client/dist/logo.svg +0 -17
  234. package/client/dist/manifest.json +0 -61
  235. package/client/dist/mcp-docs.html +0 -119
  236. package/client/dist/screenshots/cli-selection.png +0 -0
  237. package/client/dist/screenshots/desktop-main.png +0 -0
  238. package/client/dist/screenshots/mobile-chat.png +0 -0
  239. package/client/dist/screenshots/tools-modal.png +0 -0
  240. package/client/dist/sw.js +0 -19
  241. package/commands/upfynai-connect.md +0 -59
  242. package/commands/upfynai-disconnect.md +0 -31
  243. package/commands/upfynai-doctor.md +0 -99
  244. package/commands/upfynai-export.md +0 -49
  245. package/commands/upfynai-local.md +0 -82
  246. package/commands/upfynai-status.md +0 -75
  247. package/commands/upfynai-stop.md +0 -49
  248. package/commands/upfynai-uninstall.md +0 -58
  249. package/commands/upfynai.md +0 -69
  250. package/scripts/build-client.js +0 -17
  251. package/scripts/fix-node-pty.js +0 -67
  252. package/scripts/install-commands.js +0 -78
  253. package/server/claude-sdk.js +0 -714
  254. package/server/cli-ui.js +0 -785
  255. package/server/cli.js +0 -596
  256. package/server/constants/config.js +0 -31
  257. package/server/cursor-cli.js +0 -270
  258. package/server/database/auth.db +0 -0
  259. package/server/database/db.js +0 -822
  260. package/server/database/init.sql +0 -70
  261. package/server/index.js +0 -2738
  262. package/server/load-env.js +0 -26
  263. package/server/mcp-server.js +0 -621
  264. package/server/middleware/auth.js +0 -181
  265. package/server/openai-codex.js +0 -403
  266. package/server/openrouter.js +0 -137
  267. package/server/projects.js +0 -1742
  268. package/server/relay-client.js +0 -672
  269. package/server/routes/agent.js +0 -1226
  270. package/server/routes/auth.js +0 -266
  271. package/server/routes/cli-auth.js +0 -263
  272. package/server/routes/codex.js +0 -344
  273. package/server/routes/commands.js +0 -598
  274. package/server/routes/cursor.js +0 -807
  275. package/server/routes/dashboard.js +0 -205
  276. package/server/routes/git.js +0 -1151
  277. package/server/routes/mcp-utils.js +0 -48
  278. package/server/routes/mcp.js +0 -535
  279. package/server/routes/payments.js +0 -172
  280. package/server/routes/projects.js +0 -552
  281. package/server/routes/settings.js +0 -261
  282. package/server/routes/taskmaster.js +0 -1928
  283. package/server/routes/user.js +0 -106
  284. package/server/routes/vapi-chat.js +0 -94
  285. package/server/routes/voice.js +0 -194
  286. package/server/routes/webhooks.js +0 -166
  287. package/server/routes/workflows.js +0 -118
  288. package/server/sandbox.js +0 -120
  289. package/server/services/whisperService.js +0 -84
  290. package/server/services/workflowScheduler.js +0 -186
  291. package/server/utils/commandParser.js +0 -303
  292. package/server/utils/gitConfig.js +0 -24
  293. package/server/utils/mcp-detector.js +0 -198
  294. package/server/utils/taskmaster-websocket.js +0 -129
  295. package/shared/modelConstants.js +0 -96
@@ -1,48 +0,0 @@
1
- /**
2
- * MCP UTILITIES API ROUTES
3
- * ========================
4
- *
5
- * API endpoints for MCP server detection and configuration utilities.
6
- * These endpoints expose centralized MCP detection functionality.
7
- */
8
-
9
- import express from 'express';
10
- import { detectTaskMasterMCPServer, getAllMCPServers } from '../utils/mcp-detector.js';
11
-
12
- const router = express.Router();
13
-
14
- /**
15
- * GET /api/mcp-utils/taskmaster-server
16
- * Check if TaskMaster MCP server is configured
17
- */
18
- router.get('/taskmaster-server', async (req, res) => {
19
- try {
20
- const result = await detectTaskMasterMCPServer();
21
- res.json(result);
22
- } catch (error) {
23
- // MCP detection error
24
- res.status(500).json({
25
- error: 'Failed to detect TaskMaster MCP server',
26
- message: 'An error occurred'
27
- });
28
- }
29
- });
30
-
31
- /**
32
- * GET /api/mcp-utils/all-servers
33
- * Get all configured MCP servers
34
- */
35
- router.get('/all-servers', async (req, res) => {
36
- try {
37
- const result = await getAllMCPServers();
38
- res.json(result);
39
- } catch (error) {
40
- // MCP servers detection error
41
- res.status(500).json({
42
- error: 'Failed to get MCP servers',
43
- message: 'An error occurred'
44
- });
45
- }
46
- });
47
-
48
- export default router;
@@ -1,535 +0,0 @@
1
- import express from 'express';
2
- import { promises as fs } from 'fs';
3
- import path from 'path';
4
- import os from 'os';
5
- import { fileURLToPath } from 'url';
6
- import { dirname } from 'path';
7
- import { spawn } from 'child_process';
8
-
9
- const router = express.Router();
10
- const __filename = fileURLToPath(import.meta.url);
11
- const __dirname = dirname(__filename);
12
-
13
- // Claude CLI command routes
14
-
15
- // GET /api/mcp/cli/list - List MCP servers using Claude CLI
16
- router.get('/cli/list', async (req, res) => {
17
- try {
18
-
19
- const { spawn } = await import('child_process');
20
- const { promisify } = await import('util');
21
- const exec = promisify(spawn);
22
-
23
- const process = spawn('claude', ['mcp', 'list'], {
24
- stdio: ['pipe', 'pipe', 'pipe']
25
- });
26
-
27
- let stdout = '';
28
- let stderr = '';
29
-
30
- process.stdout.on('data', (data) => {
31
- stdout += data.toString();
32
- });
33
-
34
- process.stderr.on('data', (data) => {
35
- stderr += data.toString();
36
- });
37
-
38
- process.on('close', (code) => {
39
- if (code === 0) {
40
- res.json({ success: true, output: stdout, servers: parseClaudeListOutput(stdout) });
41
- } else {
42
- // CLI error
43
- res.status(500).json({ error: 'Claude CLI command failed', details: stderr });
44
- }
45
- });
46
-
47
- process.on('error', (error) => {
48
- // CLI run error
49
- res.status(500).json({ error: 'Failed to run Claude CLI', details: 'An error occurred' });
50
- });
51
- } catch (error) {
52
- // MCP list error
53
- res.status(500).json({ error: 'Failed to list MCP servers', details: 'An error occurred' });
54
- }
55
- });
56
-
57
- // POST /api/mcp/cli/add - Add MCP server using Claude CLI
58
- router.post('/cli/add', async (req, res) => {
59
- try {
60
- const { name, type = 'stdio', command, args = [], url, headers = {}, env = {}, scope = 'user', projectPath } = req.body;
61
-
62
-
63
- const { spawn } = await import('child_process');
64
-
65
- let cliArgs = ['mcp', 'add'];
66
-
67
- // Add scope flag
68
- cliArgs.push('--scope', scope);
69
-
70
- if (type === 'http') {
71
- cliArgs.push('--transport', 'http', name, url);
72
- // Add headers if provided
73
- Object.entries(headers).forEach(([key, value]) => {
74
- cliArgs.push('--header', `${key}: ${value}`);
75
- });
76
- } else if (type === 'sse') {
77
- cliArgs.push('--transport', 'sse', name, url);
78
- // Add headers if provided
79
- Object.entries(headers).forEach(([key, value]) => {
80
- cliArgs.push('--header', `${key}: ${value}`);
81
- });
82
- } else {
83
- // stdio (default): claude mcp add --scope user <name> <command> [args...]
84
- cliArgs.push(name);
85
- // Add environment variables
86
- Object.entries(env).forEach(([key, value]) => {
87
- cliArgs.push('-e', `${key}=${value}`);
88
- });
89
- cliArgs.push(command);
90
- if (args && args.length > 0) {
91
- cliArgs.push(...args);
92
- }
93
- }
94
-
95
-
96
- // For local scope, we need to run the command in the project directory
97
- const spawnOptions = {
98
- stdio: ['pipe', 'pipe', 'pipe']
99
- };
100
-
101
- if (scope === 'local' && projectPath) {
102
- spawnOptions.cwd = projectPath;
103
- }
104
-
105
- const process = spawn('claude', cliArgs, spawnOptions);
106
-
107
- let stdout = '';
108
- let stderr = '';
109
-
110
- process.stdout.on('data', (data) => {
111
- stdout += data.toString();
112
- });
113
-
114
- process.stderr.on('data', (data) => {
115
- stderr += data.toString();
116
- });
117
-
118
- process.on('close', (code) => {
119
- if (code === 0) {
120
- res.json({ success: true, output: stdout, message: `MCP server "${name}" added successfully` });
121
- } else {
122
- // CLI error
123
- res.status(400).json({ error: 'Claude CLI command failed', details: stderr });
124
- }
125
- });
126
-
127
- process.on('error', (error) => {
128
- // CLI run error
129
- res.status(500).json({ error: 'Failed to run Claude CLI', details: 'An error occurred' });
130
- });
131
- } catch (error) {
132
- // MCP add error
133
- res.status(500).json({ error: 'Failed to add MCP server', details: 'An error occurred' });
134
- }
135
- });
136
-
137
- // POST /api/mcp/cli/add-json - Add MCP server using JSON format
138
- router.post('/cli/add-json', async (req, res) => {
139
- try {
140
- const { name, jsonConfig, scope = 'user', projectPath } = req.body;
141
-
142
-
143
- // Validate and parse JSON config
144
- let parsedConfig;
145
- try {
146
- parsedConfig = typeof jsonConfig === 'string' ? JSON.parse(jsonConfig) : jsonConfig;
147
- } catch (parseError) {
148
- return res.status(400).json({
149
- error: 'Invalid JSON configuration',
150
- details: parseError.message
151
- });
152
- }
153
-
154
- // Validate required fields
155
- if (!parsedConfig.type) {
156
- return res.status(400).json({
157
- error: 'Invalid configuration',
158
- details: 'Missing required field: type'
159
- });
160
- }
161
-
162
- if (parsedConfig.type === 'stdio' && !parsedConfig.command) {
163
- return res.status(400).json({
164
- error: 'Invalid configuration',
165
- details: 'stdio type requires a command field'
166
- });
167
- }
168
-
169
- if ((parsedConfig.type === 'http' || parsedConfig.type === 'sse') && !parsedConfig.url) {
170
- return res.status(400).json({
171
- error: 'Invalid configuration',
172
- details: `${parsedConfig.type} type requires a url field`
173
- });
174
- }
175
-
176
- const { spawn } = await import('child_process');
177
-
178
- // Build the command: claude mcp add-json --scope <scope> <name> '<json>'
179
- const cliArgs = ['mcp', 'add-json', '--scope', scope, name];
180
-
181
- // Add the JSON config as a properly formatted string
182
- const jsonString = JSON.stringify(parsedConfig);
183
- cliArgs.push(jsonString);
184
-
185
-
186
- // For local scope, we need to run the command in the project directory
187
- const spawnOptions = {
188
- stdio: ['pipe', 'pipe', 'pipe']
189
- };
190
-
191
- if (scope === 'local' && projectPath) {
192
- spawnOptions.cwd = projectPath;
193
- }
194
-
195
- const process = spawn('claude', cliArgs, spawnOptions);
196
-
197
- let stdout = '';
198
- let stderr = '';
199
-
200
- process.stdout.on('data', (data) => {
201
- stdout += data.toString();
202
- });
203
-
204
- process.stderr.on('data', (data) => {
205
- stderr += data.toString();
206
- });
207
-
208
- process.on('close', (code) => {
209
- if (code === 0) {
210
- res.json({ success: true, output: stdout, message: `MCP server "${name}" added successfully via JSON` });
211
- } else {
212
- // CLI error
213
- res.status(400).json({ error: 'Claude CLI command failed', details: stderr });
214
- }
215
- });
216
-
217
- process.on('error', (error) => {
218
- // CLI run error
219
- res.status(500).json({ error: 'Failed to run Claude CLI', details: 'An error occurred' });
220
- });
221
- } catch (error) {
222
- // MCP JSON add error
223
- res.status(500).json({ error: 'Failed to add MCP server', details: 'An error occurred' });
224
- }
225
- });
226
-
227
- // DELETE /api/mcp/cli/remove/:name - Remove MCP server using Claude CLI
228
- router.delete('/cli/remove/:name', async (req, res) => {
229
- try {
230
- const { name } = req.params;
231
- const { scope } = req.query; // Get scope from query params
232
-
233
- // Handle the ID format (remove scope prefix if present)
234
- let actualName = name;
235
- let actualScope = scope;
236
-
237
- // If the name includes a scope prefix like "local:test", extract it
238
- if (name.includes(':')) {
239
- const [prefix, serverName] = name.split(':');
240
- actualName = serverName;
241
- actualScope = actualScope || prefix; // Use prefix as scope if not provided in query
242
- }
243
-
244
-
245
- const { spawn } = await import('child_process');
246
-
247
- // Build command args based on scope
248
- let cliArgs = ['mcp', 'remove'];
249
-
250
- // Add scope flag if it's local scope
251
- if (actualScope === 'local') {
252
- cliArgs.push('--scope', 'local');
253
- } else if (actualScope === 'user' || !actualScope) {
254
- // User scope is default, but we can be explicit
255
- cliArgs.push('--scope', 'user');
256
- }
257
-
258
- cliArgs.push(actualName);
259
-
260
-
261
- const process = spawn('claude', cliArgs, {
262
- stdio: ['pipe', 'pipe', 'pipe']
263
- });
264
-
265
- let stdout = '';
266
- let stderr = '';
267
-
268
- process.stdout.on('data', (data) => {
269
- stdout += data.toString();
270
- });
271
-
272
- process.stderr.on('data', (data) => {
273
- stderr += data.toString();
274
- });
275
-
276
- process.on('close', (code) => {
277
- if (code === 0) {
278
- res.json({ success: true, output: stdout, message: `MCP server "${name}" removed successfully` });
279
- } else {
280
- // CLI error
281
- res.status(400).json({ error: 'Claude CLI command failed', details: stderr });
282
- }
283
- });
284
-
285
- process.on('error', (error) => {
286
- // CLI run error
287
- res.status(500).json({ error: 'Failed to run Claude CLI', details: 'An error occurred' });
288
- });
289
- } catch (error) {
290
- // MCP remove error
291
- res.status(500).json({ error: 'Failed to remove MCP server', details: 'An error occurred' });
292
- }
293
- });
294
-
295
- // GET /api/mcp/cli/get/:name - Get MCP server details using Claude CLI
296
- router.get('/cli/get/:name', async (req, res) => {
297
- try {
298
- const { name } = req.params;
299
-
300
- // getting MCP server details
301
-
302
- const { spawn } = await import('child_process');
303
-
304
- const process = spawn('claude', ['mcp', 'get', name], {
305
- stdio: ['pipe', 'pipe', 'pipe']
306
- });
307
-
308
- let stdout = '';
309
- let stderr = '';
310
-
311
- process.stdout.on('data', (data) => {
312
- stdout += data.toString();
313
- });
314
-
315
- process.stderr.on('data', (data) => {
316
- stderr += data.toString();
317
- });
318
-
319
- process.on('close', (code) => {
320
- if (code === 0) {
321
- res.json({ success: true, output: stdout, server: parseClaudeGetOutput(stdout) });
322
- } else {
323
- // CLI error
324
- res.status(404).json({ error: 'Claude CLI command failed', details: stderr });
325
- }
326
- });
327
-
328
- process.on('error', (error) => {
329
- // CLI run error
330
- res.status(500).json({ error: 'Failed to run Claude CLI', details: 'An error occurred' });
331
- });
332
- } catch (error) {
333
- // MCP CLI details error
334
- res.status(500).json({ error: 'Failed to get MCP server details', details: 'An error occurred' });
335
- }
336
- });
337
-
338
- // GET /api/mcp/config/read - Read MCP servers directly from Claude config files
339
- router.get('/config/read', async (req, res) => {
340
- try {
341
-
342
- const homeDir = os.homedir();
343
- const configPaths = [
344
- path.join(homeDir, '.claude.json'),
345
- path.join(homeDir, '.claude', 'settings.json')
346
- ];
347
-
348
- let configData = null;
349
- let configPath = null;
350
-
351
- // Try to read from either config file
352
- for (const filepath of configPaths) {
353
- try {
354
- const fileContent = await fs.readFile(filepath, 'utf8');
355
- configData = JSON.parse(fileContent);
356
- configPath = filepath;
357
- break;
358
- } catch (error) {
359
- // File doesn't exist or is not valid JSON, try next
360
- }
361
- }
362
-
363
- if (!configData) {
364
- return res.json({
365
- success: false,
366
- message: 'No Claude configuration file found',
367
- servers: []
368
- });
369
- }
370
-
371
- // Extract MCP servers from the config
372
- const servers = [];
373
-
374
- // Check for user-scoped MCP servers (at root level)
375
- if (configData.mcpServers && typeof configData.mcpServers === 'object' && Object.keys(configData.mcpServers).length > 0) {
376
- for (const [name, config] of Object.entries(configData.mcpServers)) {
377
- const server = {
378
- id: name,
379
- name: name,
380
- type: 'stdio', // Default type
381
- scope: 'user', // User scope - available across all projects
382
- config: {},
383
- raw: config // Include raw config for full details
384
- };
385
-
386
- // Determine transport type and extract config
387
- if (config.command) {
388
- server.type = 'stdio';
389
- server.config.command = config.command;
390
- server.config.args = config.args || [];
391
- server.config.env = config.env || {};
392
- } else if (config.url) {
393
- server.type = config.transport || 'http';
394
- server.config.url = config.url;
395
- server.config.headers = config.headers || {};
396
- }
397
-
398
- servers.push(server);
399
- }
400
- }
401
-
402
- // Check for local-scoped MCP servers (project-specific)
403
- const currentProjectPath = process.cwd();
404
-
405
- // Check under 'projects' key
406
- if (configData.projects && configData.projects[currentProjectPath]) {
407
- const projectConfig = configData.projects[currentProjectPath];
408
- if (projectConfig.mcpServers && typeof projectConfig.mcpServers === 'object' && Object.keys(projectConfig.mcpServers).length > 0) {
409
- for (const [name, config] of Object.entries(projectConfig.mcpServers)) {
410
- const server = {
411
- id: `local:${name}`, // Prefix with scope for uniqueness
412
- name: name, // Keep original name
413
- type: 'stdio', // Default type
414
- scope: 'local', // Local scope - only for this project
415
- projectPath: currentProjectPath,
416
- config: {},
417
- raw: config // Include raw config for full details
418
- };
419
-
420
- // Determine transport type and extract config
421
- if (config.command) {
422
- server.type = 'stdio';
423
- server.config.command = config.command;
424
- server.config.args = config.args || [];
425
- server.config.env = config.env || {};
426
- } else if (config.url) {
427
- server.type = config.transport || 'http';
428
- server.config.url = config.url;
429
- server.config.headers = config.headers || {};
430
- }
431
-
432
- servers.push(server);
433
- }
434
- }
435
- }
436
-
437
-
438
- res.json({
439
- success: true,
440
- configPath: configPath,
441
- servers: servers
442
- });
443
- } catch (error) {
444
- res.status(500).json({
445
- error: 'Failed to read Claude configuration',
446
- details: 'An error occurred'
447
- });
448
- }
449
- });
450
-
451
- // Helper functions to parse Claude CLI output
452
- function parseClaudeListOutput(output) {
453
- const servers = [];
454
- const lines = output.split('\n').filter(line => line.trim());
455
-
456
- for (const line of lines) {
457
- // Skip the header line
458
- if (line.includes('Checking MCP server health')) continue;
459
-
460
- // Parse lines like "test: test test - ✗ Failed to connect"
461
- // or "server-name: command or description - ✓ Connected"
462
- if (line.includes(':')) {
463
- const colonIndex = line.indexOf(':');
464
- const name = line.substring(0, colonIndex).trim();
465
-
466
- // Skip empty names
467
- if (!name) continue;
468
-
469
- // Extract the rest after the name
470
- const rest = line.substring(colonIndex + 1).trim();
471
-
472
- // Try to extract description and status
473
- let description = rest;
474
- let status = 'unknown';
475
- let type = 'stdio'; // default type
476
-
477
- // Check for status indicators
478
- if (rest.includes('✓') || rest.includes('✗')) {
479
- const statusMatch = rest.match(/(.*?)\s*-\s*([✓✗].*)$/);
480
- if (statusMatch) {
481
- description = statusMatch[1].trim();
482
- status = statusMatch[2].includes('✓') ? 'connected' : 'failed';
483
- }
484
- }
485
-
486
- // Try to determine type from description
487
- if (description.startsWith('http://') || description.startsWith('https://')) {
488
- type = 'http';
489
- }
490
-
491
- servers.push({
492
- name,
493
- type,
494
- status: status || 'active',
495
- description
496
- });
497
- }
498
- }
499
-
500
- return servers;
501
- }
502
-
503
- function parseClaudeGetOutput(output) {
504
- // Parse the output from 'claude mcp get <name>' command
505
- // This is a simple parser - might need adjustment based on actual output format
506
- try {
507
- // Try to extract JSON if present
508
- const jsonMatch = output.match(/\{[\s\S]*\}/);
509
- if (jsonMatch) {
510
- return JSON.parse(jsonMatch[0]);
511
- }
512
-
513
- // Otherwise, parse as text
514
- const server = { raw_output: output };
515
- const lines = output.split('\n');
516
-
517
- for (const line of lines) {
518
- if (line.includes('Name:')) {
519
- server.name = line.split(':')[1]?.trim();
520
- } else if (line.includes('Type:')) {
521
- server.type = line.split(':')[1]?.trim();
522
- } else if (line.includes('Command:')) {
523
- server.command = line.split(':')[1]?.trim();
524
- } else if (line.includes('URL:')) {
525
- server.url = line.split(':')[1]?.trim();
526
- }
527
- }
528
-
529
- return server;
530
- } catch (error) {
531
- return { raw_output: output, parse_error: error.message };
532
- }
533
- }
534
-
535
- export default router;