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,99 +0,0 @@
1
- ---
2
- description: Run Upfyn-Code diagnostics — check installation, server, connection, and project config
3
- ---
4
-
5
- # Upfyn-Code — Doctor (Diagnostics)
6
-
7
- You are the Upfyn-Code assistant. Run a full diagnostic check and report the results.
8
-
9
- ## Checks to perform
10
-
11
- Run each check and report with ✅ (pass), ⚠️ (warning), or ❌ (fail):
12
-
13
- 1. **Package installed**: Check if `upfynai-code` is installed globally
14
- ```
15
- npm list -g upfynai-code --depth=0 2>/dev/null
16
- ```
17
-
18
- 2. **Server running**: Check health endpoint
19
- ```
20
- curl -s http://localhost:3001/health 2>/dev/null
21
- ```
22
-
23
- 3. **Claude Code CLI**: Verify `claude` CLI is available
24
- ```
25
- which claude 2>/dev/null || where claude 2>/dev/null
26
- ```
27
-
28
- 4. **Node.js version**: Check node version (needs 18+)
29
- ```
30
- node --version
31
- ```
32
-
33
- 5. **Project .claude directory**: Check if current project has `.claude/` folder
34
- ```
35
- ls -la .claude/ 2>/dev/null || echo "NO_CLAUDE_DIR"
36
- ```
37
-
38
- 6. **Project CLAUDE.md**: Check if project has CLAUDE.md instructions
39
- ```
40
- ls CLAUDE.md 2>/dev/null || echo "NO_CLAUDE_MD"
41
- ```
42
-
43
- 7. **User commands directory**: Check `~/.claude/commands/` exists
44
- ```
45
- ls ~/.claude/commands/ 2>/dev/null || echo "NO_COMMANDS_DIR"
46
- ```
47
-
48
- 8. **Upfyn-Code commands installed**: Check if upfynai slash commands are in `~/.claude/commands/`
49
- ```
50
- ls ~/.claude/commands/upfynai*.md 2>/dev/null || echo "NOT_INSTALLED"
51
- ```
52
-
53
- 9. **Database**: Check if auth.db exists
54
- ```
55
- ls ~/.claude/upfynai-code/auth.db 2>/dev/null || echo "NO_DB"
56
- ```
57
-
58
- 10. **Port availability**: Check if port 3001 is in use
59
- ```
60
- lsof -i :3001 2>/dev/null || netstat -an | grep 3001 2>/dev/null || echo "PORT_FREE"
61
- ```
62
-
63
- 11. **MCP servers**: Check if any MCP servers are configured in `.claude/`
64
- ```
65
- cat .claude/mcp.json 2>/dev/null || echo "NO_MCP"
66
- ```
67
-
68
- 12. **Settings**: Check Claude settings
69
- ```
70
- cat ~/.claude/settings.json 2>/dev/null || echo "NO_SETTINGS"
71
- ```
72
-
73
- ## Output format
74
-
75
- ```
76
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
77
- Upfyn-Code Doctor — Diagnostics Report
78
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
79
-
80
- [✅/❌] Package installed: [version or NOT FOUND]
81
- [✅/❌] Server running: [status]
82
- [✅/❌] Claude CLI: [path]
83
- [✅/❌] Node.js: [version]
84
- [✅/⚠️] Project .claude/: [found/missing]
85
- [✅/⚠️] CLAUDE.md: [found/missing]
86
- [✅/❌] Commands directory: [path]
87
- [✅/⚠️] Upfyn-Code commands: [installed/missing]
88
- [✅/⚠️] Database: [path/missing]
89
- [✅/⚠️] Port 3001: [in use/free]
90
- [✅/⚠️] MCP servers: [count or none]
91
- [✅/⚠️] Settings: [found/missing]
92
-
93
- Summary: X passed, Y warnings, Z failed
94
-
95
- [If any failures, suggest fixes]
96
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
97
- ```
98
-
99
- $ARGUMENTS
@@ -1,49 +0,0 @@
1
- ---
2
- description: Export current session or canvas data to file
3
- ---
4
-
5
- # Upfyn-Code — Export Session/Canvas
6
-
7
- You are the Upfyn-Code assistant. The user wants to export their session or canvas data.
8
-
9
- ## What to do
10
-
11
- ### Determine export type from arguments
12
- - `$ARGUMENTS` may contain: `session`, `canvas`, `all`, or a file path
13
-
14
- ### Option 1: Export session conversation
15
- 1. Read the current session's conversation from Claude Code's session files:
16
- ```
17
- ls ~/.claude/projects/*/sessions/ 2>/dev/null
18
- ```
19
- 2. Find the active session's JSONL file
20
- 3. Parse and format the conversation into readable markdown
21
- 4. Save to the specified path or default `./upfynai-export-[timestamp].md`
22
-
23
- ### Option 2: Export canvas state
24
- 1. If the server is running, fetch canvas state from the API:
25
- ```
26
- curl -s http://localhost:3001/api/canvas-state 2>/dev/null
27
- ```
28
- 2. Format the canvas nodes as a structured JSON or markdown document
29
- 3. Include: node types, connections, tool calls, responses, timestamps
30
-
31
- ### Option 3: Export all (default)
32
- Export both session conversation and canvas state.
33
-
34
- ### Output format
35
- ```
36
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
37
- 📤 Upfyn-Code Export
38
-
39
- Type: [session/canvas/all]
40
- File: [output path]
41
- Nodes: [count]
42
- Messages: [count]
43
- Size: [file size]
44
-
45
- Export saved successfully!
46
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
47
- ```
48
-
49
- $ARGUMENTS
@@ -1,82 +0,0 @@
1
- ---
2
- description: Install Upfyn-Code locally for this project — sets up .claude integration, commands, and config
3
- ---
4
-
5
- # Upfyn-Code — Local Installation
6
-
7
- You are the Upfyn-Code assistant. The user wants to install Upfyn-Code locally for the current project. This sets up the full integration between this project's Claude Code CLI and the web UI.
8
-
9
- ## What to do
10
-
11
- ### Step 1: Install the npm package globally (if not already)
12
- ```
13
- npm list -g upfynai-code --depth=0 2>/dev/null || npm install -g upfynai-code
14
- ```
15
-
16
- ### Step 2: Create user-level commands directory
17
- ```
18
- mkdir -p ~/.claude/commands
19
- ```
20
-
21
- ### Step 3: Copy all Upfyn-Code slash commands to user commands
22
- Copy the following command files from the upfynai-code package into `~/.claude/commands/`:
23
- - `upfynai.md`
24
- - `upfynai-connect.md`
25
- - `upfynai-disconnect.md`
26
- - `upfynai-doctor.md`
27
- - `upfynai-local.md`
28
- - `upfynai-uninstall.md`
29
- - `upfynai-export.md`
30
- - `upfynai-status.md`
31
- - `upfynai-stop.md`
32
-
33
- Find the package location:
34
- ```
35
- npm root -g
36
- ```
37
- Then copy from `[global_modules]/upfynai-code/commands/` to `~/.claude/commands/`.
38
-
39
- ### Step 4: Set up project .claude directory
40
- ```
41
- mkdir -p .claude/commands
42
- ```
43
-
44
- ### Step 5: Read existing project configuration
45
- If `.claude/` directory already exists, read and preserve:
46
- - `CLAUDE.md` — project instructions
47
- - `.claude/settings.json` — project settings
48
- - `.claude/mcp.json` — MCP server config
49
- - `.claude/commands/` — project-level custom commands
50
-
51
- Report what was found to the user.
52
-
53
- ### Step 6: Create/update project CLAUDE.md with Upfyn-Code context
54
- If CLAUDE.md exists, append an Upfyn-Code section. If not, mention that the user can create one.
55
- Do NOT overwrite existing CLAUDE.md content.
56
-
57
- ### Step 7: Display completion
58
- ```
59
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
60
- ✅ Upfyn-Code installed locally!
61
-
62
- 📁 Project: [current directory]
63
- 📂 .claude/ directory: [found/created]
64
- 📄 CLAUDE.md: [found/created note]
65
- 🔧 MCP servers: [count found]
66
- ⚡ Slash commands installed to ~/.claude/commands/
67
-
68
- Available commands:
69
- /upfynai — Start the web UI server
70
- /upfynai-connect — Connect this session to web UI
71
- /upfynai-disconnect — Disconnect from web UI
72
- /upfynai-status — Show connection status
73
- /upfynai-doctor — Run diagnostics
74
- /upfynai-export — Export session/canvas data
75
- /upfynai-stop — Stop the web UI server
76
- /upfynai-uninstall — Remove Upfyn-Code
77
-
78
- Next step: Run /upfynai to start the web UI
79
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
80
- ```
81
-
82
- $ARGUMENTS
@@ -1,75 +0,0 @@
1
- ---
2
- description: Show Upfyn-Code connection status — server, sessions, project info
3
- ---
4
-
5
- # Upfyn-Code — Status
6
-
7
- You are the Upfyn-Code assistant. Show the current status of the Upfyn-Code system.
8
-
9
- ## What to do
10
-
11
- Gather and display all of the following:
12
-
13
- 1. **Server status**: Check if the server is running
14
- ```
15
- curl -s http://localhost:3001/health 2>/dev/null || echo "NOT_RUNNING"
16
- ```
17
-
18
- 2. **Current project**: Show `pwd` and whether it has `.claude/` directory
19
- ```
20
- pwd
21
- ls -d .claude 2>/dev/null || echo "NO_CLAUDE_DIR"
22
- ```
23
-
24
- 3. **Project CLAUDE.md**: Check for project instructions
25
- ```
26
- test -f CLAUDE.md && echo "FOUND" || echo "NOT_FOUND"
27
- ```
28
-
29
- 4. **Project .claude/settings.json**: Check project settings
30
- ```
31
- cat .claude/settings.json 2>/dev/null || echo "NO_SETTINGS"
32
- ```
33
-
34
- 5. **MCP servers**: Check configured MCP servers
35
- ```
36
- cat .claude/mcp.json 2>/dev/null || echo "NO_MCP"
37
- ```
38
-
39
- 6. **Active sessions**: If server is running, get session count
40
- ```
41
- curl -s http://localhost:3001/api/projects 2>/dev/null
42
- ```
43
-
44
- 7. **Installed version**:
45
- ```
46
- npm list -g upfynai-code --depth=0 2>/dev/null
47
- ```
48
-
49
- 8. **Slash commands**: Check which upfynai commands are installed
50
- ```
51
- ls ~/.claude/commands/upfynai*.md 2>/dev/null
52
- ```
53
-
54
- ## Output format
55
- ```
56
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
57
- Upfyn-Code — Status
58
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
59
-
60
- Server: [🟢 Running at http://localhost:3001 / 🔴 Not running]
61
- Version: [x.y.z]
62
- Project: [current directory name]
63
- .claude/: [✅ Found / ⚠️ Not found]
64
- CLAUDE.md: [✅ Found / ⚠️ Not found]
65
- MCP servers: [count or none]
66
- Settings: [found/default]
67
- Sessions: [count active]
68
- Commands: [count installed] / 9 total
69
-
70
- [If server running, show URL]
71
- [If not running, suggest /upfynai to start]
72
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
73
- ```
74
-
75
- $ARGUMENTS
@@ -1,49 +0,0 @@
1
- ---
2
- description: Stop the Upfyn-Code web UI server
3
- ---
4
-
5
- # Upfyn-Code — Stop Server
6
-
7
- You are the Upfyn-Code assistant. The user wants to stop the Upfyn-Code web UI server.
8
-
9
- ## What to do
10
-
11
- 1. Check if the server is running:
12
- ```
13
- curl -s http://localhost:3001/health 2>/dev/null || echo "NOT_RUNNING"
14
- ```
15
-
16
- 2. If not running, tell the user:
17
- ```
18
- Server is not running. Nothing to stop.
19
- ```
20
-
21
- 3. If running, find and stop the process:
22
-
23
- On macOS/Linux:
24
- ```
25
- lsof -ti :3001 | xargs kill 2>/dev/null
26
- ```
27
-
28
- On Windows:
29
- ```
30
- netstat -ano | findstr :3001
31
- ```
32
- Then kill the PID.
33
-
34
- 4. Verify it stopped:
35
- ```
36
- curl -s http://localhost:3001/health 2>/dev/null || echo "STOPPED"
37
- ```
38
-
39
- 5. Display confirmation:
40
- ```
41
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
42
- ⏹️ Upfyn-Code server stopped
43
-
44
- Port 3001 is now free.
45
- Run /upfynai to start again.
46
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
47
- ```
48
-
49
- $ARGUMENTS
@@ -1,58 +0,0 @@
1
- ---
2
- description: Remove Upfyn-Code — uninstalls commands, cleans up config
3
- ---
4
-
5
- # Upfyn-Code — Uninstall
6
-
7
- You are the Upfyn-Code assistant. The user wants to uninstall Upfyn-Code.
8
-
9
- ## What to do
10
-
11
- ### Step 1: Stop the server if running
12
- ```
13
- curl -s http://localhost:3001/health 2>/dev/null && echo "SERVER_RUNNING"
14
- ```
15
- If running, ask the user if they want to stop it first.
16
-
17
- ### Step 2: Remove slash commands from ~/.claude/commands/
18
- ```
19
- rm -f ~/.claude/commands/upfynai.md
20
- rm -f ~/.claude/commands/upfynai-connect.md
21
- rm -f ~/.claude/commands/upfynai-disconnect.md
22
- rm -f ~/.claude/commands/upfynai-doctor.md
23
- rm -f ~/.claude/commands/upfynai-local.md
24
- rm -f ~/.claude/commands/upfynai-uninstall.md
25
- rm -f ~/.claude/commands/upfynai-export.md
26
- rm -f ~/.claude/commands/upfynai-status.md
27
- rm -f ~/.claude/commands/upfynai-stop.md
28
- ```
29
-
30
- ### Step 3: Ask about global package
31
- Ask the user: "Do you also want to uninstall the global npm package?"
32
-
33
- If yes:
34
- ```
35
- npm uninstall -g upfynai-code
36
- ```
37
-
38
- ### Step 4: Ask about database
39
- Ask the user: "Do you want to remove the database (session history will be lost)?"
40
-
41
- If yes, remove the database file.
42
-
43
- ### Step 5: Display completion
44
- ```
45
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
46
- 🗑️ Upfyn-Code uninstalled
47
-
48
- Removed:
49
- ✅ Slash commands from ~/.claude/commands/
50
- [✅/⏭️] Global npm package
51
- [✅/⏭️] Database
52
-
53
- Your .claude/ project files were NOT modified.
54
- Your CLAUDE.md was NOT modified.
55
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
56
- ```
57
-
58
- $ARGUMENTS
@@ -1,69 +0,0 @@
1
- ---
2
- description: Start Upfyn-Code web UI server and get connection URL
3
- ---
4
-
5
- # Upfyn-Code — Start UI Server
6
-
7
- You are the Upfyn-Code assistant. The user wants to start or connect to the Upfyn-Code web UI.
8
-
9
- ## What to do
10
-
11
- 1. First check if there's a saved hosted config:
12
- ```
13
- cat ~/.upfynai/config.json 2>/dev/null || echo "NO_CONFIG"
14
- ```
15
-
16
- 2. **If config has `server` and `relayKey`** — connect to hosted server directly:
17
- ```
18
- npx upfynai-code connect --server <server_from_config> --key <relayKey_from_config>
19
- ```
20
- Then display:
21
- ```
22
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
23
- Upfyn-Code — Connected to hosted server!
24
-
25
- Web UI: https://cli.upfyn.com
26
- Project: [current working directory]
27
- Session: synced
28
-
29
- Use /upfynai-disconnect to unlink
30
- Use /upfynai-status to check connection
31
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
32
- ```
33
-
34
- 3. **If no hosted config** — start local server:
35
- - Check if `upfynai-code` is installed:
36
- ```
37
- npm list -g upfynai-code --depth=0 2>/dev/null || echo "NOT_INSTALLED"
38
- ```
39
- - If NOT installed, tell the user:
40
- ```
41
- Upfyn-Code is not installed globally. Install it with:
42
- npm install -g upfynai-code
43
- ```
44
- - If installed, check if already running:
45
- ```
46
- curl -s http://localhost:3001/health 2>/dev/null || echo "NOT_RUNNING"
47
- ```
48
- - If NOT running, start it:
49
- ```
50
- upfynai-code start &
51
- ```
52
- - Display:
53
- ```
54
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
55
- Upfyn-Code is running!
56
-
57
- Open in browser: http://localhost:3001
58
- Project: [current working directory]
59
- WebSocket: ws://localhost:3001/ws
60
-
61
- Use /upfynai-connect to link this CLI session
62
- Use /upfynai-disconnect to unlink
63
- Use /upfynai-doctor to run diagnostics
64
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
65
- ```
66
-
67
- 4. If the user provided arguments like `--port 8080`, pass them to the start command.
68
-
69
- $ARGUMENTS
@@ -1,17 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Build the client (frontend) from the backend directory.
4
- * Uses Vite API directly to avoid npx resolution issues.
5
- */
6
- import path from 'path';
7
- import { fileURLToPath } from 'url';
8
-
9
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
10
- const clientDir = path.join(__dirname, '..', 'client');
11
-
12
- // Change cwd so Vite/Tailwind resolve configs from client/
13
- process.chdir(clientDir);
14
- console.log(`Building client from: ${clientDir}`);
15
-
16
- const { build } = await import('vite');
17
- await build();
@@ -1,67 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Fix node-pty spawn-helper permissions on macOS
4
- *
5
- * This script fixes a known issue with node-pty where the spawn-helper
6
- * binary is shipped without execute permissions, causing "posix_spawnp failed" errors.
7
- *
8
- * @see https://github.com/microsoft/node-pty/issues/850
9
- * @module scripts/fix-node-pty
10
- */
11
-
12
- import { promises as fs } from 'fs';
13
- import path from 'path';
14
- import { fileURLToPath } from 'url';
15
-
16
- const __filename = fileURLToPath(import.meta.url);
17
- const __dirname = path.dirname(__filename);
18
-
19
- /**
20
- * Fixes the spawn-helper binary permissions for node-pty on macOS.
21
- *
22
- * The node-pty package ships the spawn-helper binary without execute permissions
23
- * (644 instead of 755), which causes "posix_spawnp failed" errors when trying
24
- * to spawn terminal processes.
25
- *
26
- * This function:
27
- * 1. Checks if running on macOS (darwin)
28
- * 2. Locates spawn-helper binaries for both arm64 and x64 architectures
29
- * 3. Sets execute permissions (755) on each binary found
30
- *
31
- * @async
32
- * @function fixSpawnHelper
33
- * @returns {Promise<void>} Resolves when permissions are fixed or skipped
34
- * @example
35
- * // Run as postinstall script
36
- * await fixSpawnHelper();
37
- */
38
- async function fixSpawnHelper() {
39
- const nodeModulesPath = path.join(__dirname, '..', 'node_modules', 'node-pty', 'prebuilds');
40
-
41
- // Only run on macOS
42
- if (process.platform !== 'darwin') {
43
- return;
44
- }
45
-
46
- const darwinDirs = ['darwin-arm64', 'darwin-x64'];
47
-
48
- for (const dir of darwinDirs) {
49
- const spawnHelperPath = path.join(nodeModulesPath, dir, 'spawn-helper');
50
-
51
- try {
52
- // Check if file exists
53
- await fs.access(spawnHelperPath);
54
-
55
- // Make it executable (755)
56
- await fs.chmod(spawnHelperPath, 0o755);
57
- console.log(`[postinstall] Fixed permissions for ${spawnHelperPath}`);
58
- } catch (err) {
59
- // File doesn't exist or other error - ignore
60
- if (err.code !== 'ENOENT') {
61
- console.warn(`[postinstall] Warning: Could not fix ${spawnHelperPath}: ${err.message}`);
62
- }
63
- }
64
- }
65
- }
66
-
67
- fixSpawnHelper().catch(console.error);
@@ -1,78 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Upfyn-Code — Slash Command Installer
4
- *
5
- * Copies slash command .md files to ~/.claude/commands/
6
- * so they become available as /upfynai-* inside your AI CLI.
7
- *
8
- * Run manually: node scripts/install-commands.js
9
- * Or via CLI: uc install-commands
10
- */
11
-
12
- import fs from 'fs';
13
- import path from 'path';
14
- import os from 'os';
15
- import { fileURLToPath } from 'url';
16
-
17
- const __filename = fileURLToPath(import.meta.url);
18
- const __dirname = path.dirname(__filename);
19
-
20
- const COMMANDS_SOURCE = path.join(__dirname, '..', 'commands');
21
- const COMMANDS_DEST = path.join(os.homedir(), '.claude', 'commands');
22
-
23
- const colors = {
24
- reset: '\x1b[0m',
25
- green: '\x1b[32m',
26
- yellow: '\x1b[33m',
27
- cyan: '\x1b[36m',
28
- dim: '\x1b[2m',
29
- bright: '\x1b[1m',
30
- };
31
-
32
- function main() {
33
- console.log(`\n${colors.bright}Upfyn-Code — Installing Slash Commands${colors.reset}\n`);
34
-
35
- // Ensure ~/.claude/commands/ exists
36
- if (!fs.existsSync(COMMANDS_DEST)) {
37
- fs.mkdirSync(COMMANDS_DEST, { recursive: true });
38
- console.log(`${colors.green}✅${colors.reset} Created ${colors.dim}${COMMANDS_DEST}${colors.reset}`);
39
- }
40
-
41
- // Read all .md files from commands source
42
- if (!fs.existsSync(COMMANDS_SOURCE)) {
43
- console.error(`${colors.yellow}⚠️${colors.reset} Commands source not found: ${COMMANDS_SOURCE}`);
44
- process.exit(0);
45
- }
46
-
47
- const files = fs.readdirSync(COMMANDS_SOURCE).filter(f => f.endsWith('.md'));
48
-
49
- if (files.length === 0) {
50
- console.log(`${colors.yellow}⚠️${colors.reset} No command files found in ${COMMANDS_SOURCE}`);
51
- process.exit(0);
52
- }
53
-
54
- let installed = 0;
55
- let updated = 0;
56
-
57
- for (const file of files) {
58
- const src = path.join(COMMANDS_SOURCE, file);
59
- const dest = path.join(COMMANDS_DEST, file);
60
-
61
- const existed = fs.existsSync(dest);
62
- fs.copyFileSync(src, dest);
63
-
64
- if (existed) {
65
- updated++;
66
- console.log(`${colors.cyan}🔄${colors.reset} Updated /${file.replace('.md', '')}`);
67
- } else {
68
- installed++;
69
- console.log(`${colors.green}✅${colors.reset} Installed /${file.replace('.md', '')}`);
70
- }
71
- }
72
-
73
- console.log(`\n${colors.bright}Done!${colors.reset} ${installed} installed, ${updated} updated`);
74
- console.log(`${colors.dim}Commands are now available in your AI CLI${colors.reset}`);
75
- console.log(`${colors.dim}Try: /upfynai to start the web UI${colors.reset}\n`);
76
- }
77
-
78
- main();