upfynai-code 0.1.0 → 2.2.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 (340) hide show
  1. package/client/dist/api-docs.html +879 -0
  2. package/client/dist/assets/AppContent-CTSHQdyq.js +513 -0
  3. package/client/dist/assets/CanvasPanel-Cig0Mo9s.js +6 -0
  4. package/client/dist/assets/CanvasPanel-q4HEqNtV.css +1 -0
  5. package/client/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  6. package/client/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  7. package/client/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  8. package/client/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  9. package/client/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  10. package/client/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  11. package/client/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  12. package/client/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  13. package/client/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  14. package/client/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  15. package/client/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  16. package/client/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  17. package/client/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  18. package/client/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  19. package/client/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  20. package/client/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  21. package/client/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  22. package/client/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  23. package/client/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  24. package/client/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  25. package/client/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  26. package/client/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  27. package/client/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  28. package/client/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  29. package/client/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  30. package/client/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  31. package/client/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  32. package/client/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  33. package/client/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  34. package/client/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  35. package/client/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  36. package/client/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  37. package/client/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  38. package/client/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  39. package/client/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  40. package/client/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  41. package/client/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  42. package/client/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  43. package/client/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  44. package/client/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  45. package/client/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  46. package/client/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  47. package/client/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  48. package/client/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  49. package/client/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  50. package/client/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  51. package/client/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  52. package/client/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  53. package/client/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  54. package/client/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  55. package/client/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  56. package/client/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  57. package/client/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  58. package/client/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  59. package/client/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  60. package/client/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  61. package/client/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  62. package/client/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  63. package/client/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  64. package/client/dist/assets/LoginModal-silya-zP.js +11 -0
  65. package/client/dist/assets/MarkdownPreview-B3c7OEj6.js +1 -0
  66. package/client/dist/assets/Onboarding-Coxo6mFA.js +1 -0
  67. package/client/dist/assets/SetupForm-BzYOsbji.js +1 -0
  68. package/client/dist/assets/Tableau10-B-NsZVaP.js +1 -0
  69. package/client/dist/assets/_commonjs-dynamic-modules-TDtrdbi3.js +1 -0
  70. package/client/dist/assets/ar-SA-G6X2FPQ2-Bmw2-hDt.js +10 -0
  71. package/client/dist/assets/arc-BMqY7_Ci.js +1 -0
  72. package/client/dist/assets/array-BKyUJesY.js +1 -0
  73. package/client/dist/assets/az-AZ-76LH7QW2-Dh1le_qs.js +1 -0
  74. package/client/dist/assets/bg-BG-XCXSNQG7-Cbav8Z9z.js +5 -0
  75. package/client/dist/assets/blockDiagram-38ab4fdb-ChHJxsXw.js +118 -0
  76. package/client/dist/assets/bn-BD-2XOGV67Q-DCNjOaWz.js +5 -0
  77. package/client/dist/assets/c4Diagram-3d4e48cf-b8Xue4Z6.js +10 -0
  78. package/client/dist/assets/ca-ES-6MX7JW3Y-Dl_vM7NS.js +8 -0
  79. package/client/dist/assets/channel-CSnvHe_M.js +1 -0
  80. package/client/dist/assets/classDiagram-70f12bd4-BheP7Ggo.js +2 -0
  81. package/client/dist/assets/classDiagram-v2-f2320105-xtym7GEZ.js +2 -0
  82. package/client/dist/assets/clone-B75abXxS.js +1 -0
  83. package/client/dist/assets/createText-2e5e7dd3-_n4jI_fO.js +5 -0
  84. package/client/dist/assets/cs-CZ-2BRQDIVT-ftsKDdz4.js +11 -0
  85. package/client/dist/assets/da-DK-5WZEPLOC-DAjdwGRO.js +5 -0
  86. package/client/dist/assets/de-DE-XR44H4JA-BJXczHGT.js +8 -0
  87. package/client/dist/assets/directory-open-01563666-DWU9wJ6I.js +1 -0
  88. package/client/dist/assets/directory-open-4ed118d0-CunoC1EB.js +1 -0
  89. package/client/dist/assets/edges-e0da2a9e-CfPZr4YM.js +4 -0
  90. package/client/dist/assets/el-GR-BZB4AONW-DW2p_uy7.js +10 -0
  91. package/client/dist/assets/erDiagram-9861fffd-CF33V-Of.js +51 -0
  92. package/client/dist/assets/es-ES-U4NZUMDT-DLOIGnrl.js +9 -0
  93. package/client/dist/assets/eu-ES-A7QVB2H4-LJXbf89m.js +11 -0
  94. package/client/dist/assets/fa-IR-HGAKTJCU-Dvx65fgW.js +8 -0
  95. package/client/dist/assets/fi-FI-Z5N7JZ37-EoL65BQh.js +6 -0
  96. package/client/dist/assets/file-open-002ab408-DIuFHtCF.js +1 -0
  97. package/client/dist/assets/file-open-7c801643-684qeFg4.js +1 -0
  98. package/client/dist/assets/file-save-3189631c-C1wFhQhH.js +1 -0
  99. package/client/dist/assets/file-save-745eba88-Bb9F9Kg7.js +1 -0
  100. package/client/dist/assets/flowDb-956e92f1-HgoXVy2H.js +10 -0
  101. package/client/dist/assets/flowDiagram-66a62f08-tffoET0H.js +4 -0
  102. package/client/dist/assets/flowDiagram-v2-96b9c2cf-Byc3JCHh.js +1 -0
  103. package/client/dist/assets/flowchart-elk-definition-4a651766-DJbI2dpv.js +139 -0
  104. package/client/dist/assets/fr-FR-RHASNOE6-DNk_jdDs.js +9 -0
  105. package/client/dist/assets/ganttDiagram-c361ad54-2XX670FU.js +257 -0
  106. package/client/dist/assets/gitGraphDiagram-72cf32ee-CcUfruAo.js +70 -0
  107. package/client/dist/assets/gl-ES-HMX3MZ6V-dxzFjZlG.js +10 -0
  108. package/client/dist/assets/graph-BSbiMSBC.js +1 -0
  109. package/client/dist/assets/he-IL-6SHJWFNN-Cogsfdt1.js +10 -0
  110. package/client/dist/assets/hi-IN-IWLTKZ5I-L6wbgi4F.js +4 -0
  111. package/client/dist/assets/hu-HU-A5ZG7DT2-DSA6ZDsH.js +7 -0
  112. package/client/dist/assets/id-ID-SAP4L64H-BK_vGGS6.js +10 -0
  113. package/client/dist/assets/image-blob-reduce.esm-BLtmMM_J.js +2 -0
  114. package/client/dist/assets/index-3862675e-Bv32HUgT.js +1 -0
  115. package/client/dist/assets/index-B8wwD_Xo.css +1 -0
  116. package/client/dist/assets/index-BPwf8Fw3.js +27 -0
  117. package/client/dist/assets/index-D1urGMYu.js +95 -0
  118. package/client/dist/assets/infoDiagram-f8f76790-w4mR4pxn.js +7 -0
  119. package/client/dist/assets/init-Gi6I4Gst.js +1 -0
  120. package/client/dist/assets/it-IT-JPQ66NNP-BLdHYMhn.js +11 -0
  121. package/client/dist/assets/ja-JP-DBVTYXUO-B_vmexl_.js +8 -0
  122. package/client/dist/assets/journeyDiagram-49397b02-D9nmO17e.js +139 -0
  123. package/client/dist/assets/kaa-6HZHGXH3-5s-3jl6F.js +1 -0
  124. package/client/dist/assets/kab-KAB-ZGHBKWFO-2QaVDuSf.js +8 -0
  125. package/client/dist/assets/kk-KZ-P5N5QNE5-CTC52Vbi.js +1 -0
  126. package/client/dist/assets/km-KH-HSX4SM5Z-DxawH8UZ.js +11 -0
  127. package/client/dist/assets/ko-KR-MTYHY66A-CmosEM8_.js +9 -0
  128. package/client/dist/assets/ku-TR-6OUDTVRD-DbiLen4y.js +9 -0
  129. package/client/dist/assets/layout-jmt3H9tA.js +1 -0
  130. package/client/dist/assets/line-JTlRayUJ.js +1 -0
  131. package/client/dist/assets/linear-DJeB5p7x.js +1 -0
  132. package/client/dist/assets/lt-LT-XHIRWOB4-CH15wrjA.js +3 -0
  133. package/client/dist/assets/lv-LV-5QDEKY6T-dhgfPuCQ.js +7 -0
  134. package/client/dist/assets/mindmap-definition-fc14e90a-BOOrexmz.js +415 -0
  135. package/client/dist/assets/mr-IN-CRQNXWMA-3Gi6iq7A.js +13 -0
  136. package/client/dist/assets/my-MM-5M5IBNSE-CpH4rdJj.js +1 -0
  137. package/client/dist/assets/nb-NO-T6EIAALU-Du6iiGql.js +10 -0
  138. package/client/dist/assets/nl-NL-IS3SIHDZ-BGvsd1MT.js +8 -0
  139. package/client/dist/assets/nn-NO-6E72VCQL-B-odvJZW.js +8 -0
  140. package/client/dist/assets/oc-FR-POXYY2M6-COC8xNjo.js +8 -0
  141. package/client/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  142. package/client/dist/assets/pa-IN-N4M65BXN-CE21PUQH.js +4 -0
  143. package/client/dist/assets/path-CbwjOpE9.js +1 -0
  144. package/client/dist/assets/pdf-TYrZqVzP.js +12 -0
  145. package/client/dist/assets/pdf.worker-BA9kU3Pw.mjs +61080 -0
  146. package/client/dist/assets/percentages-BXMCSKIN-C9GT0OD3.js +199 -0
  147. package/client/dist/assets/pica-VkdyTzi8.js +2 -0
  148. package/client/dist/assets/pieDiagram-8a3498a8-Cvfh7Qr5.js +35 -0
  149. package/client/dist/assets/pl-PL-T2D74RX3-D4xFVSoT.js +9 -0
  150. package/client/dist/assets/pt-BR-5N22H2LF-CCq257gA.js +9 -0
  151. package/client/dist/assets/pt-PT-UZXXM6DQ-1l8gt5vA.js +9 -0
  152. package/client/dist/assets/quadrantDiagram-120e2f19-BA0js1aD.js +7 -0
  153. package/client/dist/assets/requirementDiagram-deff3bca-B0QNFfIn.js +52 -0
  154. package/client/dist/assets/ro-RO-JPDTUUEW-yosBW01E.js +11 -0
  155. package/client/dist/assets/roundRect-mAH3dD0p.js +1 -0
  156. package/client/dist/assets/ru-RU-B4JR7IUQ-8LkEJUix.js +9 -0
  157. package/client/dist/assets/sankeyDiagram-04a897e0-D4T9eCXn.js +8 -0
  158. package/client/dist/assets/sequenceDiagram-704730f1-CfBUTCrO.js +122 -0
  159. package/client/dist/assets/si-LK-N5RQ5JYF-D8rjbqtd.js +1 -0
  160. package/client/dist/assets/sk-SK-C5VTKIMK-Bg14sAzN.js +6 -0
  161. package/client/dist/assets/sl-SI-NN7IZMDC-CMTib6Zs.js +6 -0
  162. package/client/dist/assets/stateDiagram-587899a1-BGgvmVSZ.js +1 -0
  163. package/client/dist/assets/stateDiagram-v2-d93cdb3a-Qn3DpYuO.js +1 -0
  164. package/client/dist/assets/styles-6aaf32cf-IdVZLPrD.js +207 -0
  165. package/client/dist/assets/styles-9a916d00-BAC3L45X.js +160 -0
  166. package/client/dist/assets/styles-c10674c1-COhXxX8c.js +116 -0
  167. package/client/dist/assets/subset-shared.chunk-BWHnFai4.js +22 -0
  168. package/client/dist/assets/subset-worker.chunk-C8QUSruZ.js +1 -0
  169. package/client/dist/assets/sv-SE-XGPEYMSR-C1425rOF.js +10 -0
  170. package/client/dist/assets/svgDrawCommon-08f97a94-Cfk-fgnN.js +1 -0
  171. package/client/dist/assets/ta-IN-2NMHFXQM-BHHo1zpF.js +9 -0
  172. package/client/dist/assets/th-TH-HPSO5L25-CZVzm_WT.js +2 -0
  173. package/client/dist/assets/timeline-definition-85554ec2-VAvuJith.js +61 -0
  174. package/client/dist/assets/tr-TR-DEFEU3FU-DE1lclCq.js +7 -0
  175. package/client/dist/assets/uk-UA-QMV73CPH-D4lJZ85O.js +6 -0
  176. package/client/dist/assets/vendor-codemirror-BARtJV1V.js +16 -0
  177. package/client/dist/assets/vendor-codemirror-langs-52_y1wip.js +20 -0
  178. package/client/dist/assets/vendor-i18n-ByAl-gdx.js +1 -0
  179. package/client/dist/assets/vendor-icons-D33IkSIf.js +1 -0
  180. package/client/dist/assets/vendor-markdown-CIVH08vJ.js +298 -0
  181. package/client/dist/assets/vendor-react-CHoMc7ka.js +8 -0
  182. package/client/dist/assets/vendor-syntax-Djb62v3a.js +9 -0
  183. package/client/dist/assets/vendor-xterm-DBb3RXlu.js +66 -0
  184. package/client/dist/assets/vendor-xterm-DrlLKa8f.css +1 -0
  185. package/client/dist/assets/vi-VN-M7AON7JQ-Dgc_SShk.js +5 -0
  186. package/client/dist/assets/xychartDiagram-e933f94c-BeyVBJhb.js +7 -0
  187. package/client/dist/assets/zh-CN-LNUGB5OW-MH4Yh8in.js +10 -0
  188. package/client/dist/assets/zh-HK-E62DVLB3-D4XHehjx.js +1 -0
  189. package/client/dist/assets/zh-TW-RAJ6MFWO--efj3evj.js +9 -0
  190. package/client/dist/clear-cache.html +85 -0
  191. package/client/dist/convert-icons.md +53 -0
  192. package/client/dist/favicon.png +0 -0
  193. package/client/dist/favicon.svg +9 -0
  194. package/client/dist/generate-icons.js +49 -0
  195. package/client/dist/icons/claude-ai-icon.svg +1 -0
  196. package/client/dist/icons/codex-white.svg +3 -0
  197. package/client/dist/icons/codex.svg +3 -0
  198. package/client/dist/icons/cursor-white.svg +12 -0
  199. package/client/dist/icons/cursor.svg +1 -0
  200. package/client/dist/icons/icon-128x128.png +0 -0
  201. package/client/dist/icons/icon-128x128.svg +12 -0
  202. package/client/dist/icons/icon-144x144.png +0 -0
  203. package/client/dist/icons/icon-144x144.svg +12 -0
  204. package/client/dist/icons/icon-152x152.png +0 -0
  205. package/client/dist/icons/icon-152x152.svg +12 -0
  206. package/client/dist/icons/icon-192x192.png +0 -0
  207. package/client/dist/icons/icon-192x192.svg +12 -0
  208. package/client/dist/icons/icon-384x384.png +0 -0
  209. package/client/dist/icons/icon-384x384.svg +12 -0
  210. package/client/dist/icons/icon-512x512.png +0 -0
  211. package/client/dist/icons/icon-512x512.svg +12 -0
  212. package/client/dist/icons/icon-72x72.png +0 -0
  213. package/client/dist/icons/icon-72x72.svg +12 -0
  214. package/client/dist/icons/icon-96x96.png +0 -0
  215. package/client/dist/icons/icon-96x96.svg +12 -0
  216. package/client/dist/icons/icon-template.svg +12 -0
  217. package/client/dist/index.html +128 -0
  218. package/client/dist/logo-128.png +0 -0
  219. package/client/dist/logo-256.png +0 -0
  220. package/client/dist/logo-32.png +0 -0
  221. package/client/dist/logo-512.png +0 -0
  222. package/client/dist/logo-64.png +0 -0
  223. package/client/dist/logo.svg +17 -0
  224. package/client/dist/manifest.json +61 -0
  225. package/client/dist/mcp-docs.html +119 -0
  226. package/client/dist/screenshots/cli-selection.png +0 -0
  227. package/client/dist/screenshots/desktop-main.png +0 -0
  228. package/client/dist/screenshots/mobile-chat.png +0 -0
  229. package/client/dist/screenshots/tools-modal.png +0 -0
  230. package/client/dist/sw.js +19 -0
  231. package/commands/upfynai-connect.md +46 -0
  232. package/commands/upfynai-disconnect.md +31 -0
  233. package/commands/upfynai-doctor.md +99 -0
  234. package/commands/upfynai-export.md +49 -0
  235. package/commands/upfynai-local.md +82 -0
  236. package/commands/upfynai-status.md +75 -0
  237. package/commands/upfynai-stop.md +49 -0
  238. package/commands/upfynai-uninstall.md +58 -0
  239. package/commands/upfynai.md +50 -0
  240. package/package.json +106 -47
  241. package/scripts/build-client.js +17 -0
  242. package/scripts/fix-node-pty.js +67 -0
  243. package/scripts/install-commands.js +78 -0
  244. package/server/claude-sdk.js +714 -0
  245. package/server/cli.js +419 -0
  246. package/server/constants/config.js +5 -0
  247. package/server/cursor-cli.js +270 -0
  248. package/server/database/auth.db +0 -0
  249. package/server/database/db.js +606 -0
  250. package/server/database/init.sql +70 -0
  251. package/server/index.js +2269 -0
  252. package/server/load-env.js +26 -0
  253. package/server/mcp-server.js +620 -0
  254. package/server/middleware/auth.js +158 -0
  255. package/server/openai-codex.js +403 -0
  256. package/server/projects.js +1849 -0
  257. package/server/relay-client.js +314 -0
  258. package/server/routes/agent.js +1231 -0
  259. package/server/routes/auth.js +220 -0
  260. package/server/routes/cli-auth.js +263 -0
  261. package/server/routes/codex.js +344 -0
  262. package/server/routes/commands.js +601 -0
  263. package/server/routes/cursor.js +808 -0
  264. package/server/routes/git.js +1165 -0
  265. package/server/routes/mcp-utils.js +48 -0
  266. package/server/routes/mcp.js +552 -0
  267. package/server/routes/payments.js +172 -0
  268. package/server/routes/projects.js +549 -0
  269. package/server/routes/settings.js +178 -0
  270. package/server/routes/taskmaster.js +1964 -0
  271. package/server/routes/user.js +106 -0
  272. package/server/utils/commandParser.js +303 -0
  273. package/server/utils/gitConfig.js +24 -0
  274. package/server/utils/mcp-detector.js +198 -0
  275. package/server/utils/taskmaster-websocket.js +129 -0
  276. package/shared/modelConstants.js +67 -0
  277. package/LICENSE +0 -22
  278. package/bin/cli.js +0 -86
  279. package/dist/assets/CanvasPanel-B48gAKVY.js +0 -538
  280. package/dist/assets/CanvasPanel-B48gAKVY.js.map +0 -1
  281. package/dist/assets/CanvasPanel-BsOG3EVs.css +0 -1
  282. package/dist/assets/index-CEhTwG68.css +0 -1
  283. package/dist/assets/index-GqAGWpJI.js +0 -70
  284. package/dist/assets/index-GqAGWpJI.js.map +0 -1
  285. package/dist/index.html +0 -18
  286. package/index.html +0 -17
  287. package/src/App.tsx +0 -226
  288. package/src/components/canvas/CanvasPanel.tsx +0 -62
  289. package/src/components/canvas/layout/graph-builder.ts +0 -136
  290. package/src/components/canvas/shapes/CompactionNodeShape.tsx +0 -76
  291. package/src/components/canvas/shapes/SessionNodeShape.tsx +0 -93
  292. package/src/components/canvas/shapes/StatuslineWidgetShape.tsx +0 -125
  293. package/src/components/canvas/shapes/TextResponseNodeShape.tsx +0 -86
  294. package/src/components/canvas/shapes/ToolCallNodeShape.tsx +0 -107
  295. package/src/components/canvas/shapes/ToolResultNodeShape.tsx +0 -87
  296. package/src/components/canvas/shapes/shared-styles.ts +0 -35
  297. package/src/components/chat/ChatPanel.tsx +0 -96
  298. package/src/components/chat/InputBar.tsx +0 -81
  299. package/src/components/chat/MessageList.tsx +0 -130
  300. package/src/components/chat/PermissionDialog.tsx +0 -70
  301. package/src/components/layout/FolderSelector.tsx +0 -152
  302. package/src/components/layout/ModelSelector.tsx +0 -65
  303. package/src/components/layout/SessionManager.tsx +0 -115
  304. package/src/components/statusline/StatuslineBar.tsx +0 -114
  305. package/src/main.tsx +0 -10
  306. package/src/server/claude-session.ts +0 -156
  307. package/src/server/index.ts +0 -149
  308. package/src/services/stream-consumer.ts +0 -330
  309. package/src/statusline-core/bin/statusline.sh +0 -121
  310. package/src/statusline-core/commands/sls-config.md +0 -42
  311. package/src/statusline-core/commands/sls-doctor.md +0 -35
  312. package/src/statusline-core/commands/sls-help.md +0 -48
  313. package/src/statusline-core/commands/sls-layout.md +0 -38
  314. package/src/statusline-core/commands/sls-preview.md +0 -34
  315. package/src/statusline-core/commands/sls-theme.md +0 -40
  316. package/src/statusline-core/installer.js +0 -228
  317. package/src/statusline-core/layouts/compact.sh +0 -21
  318. package/src/statusline-core/layouts/full.sh +0 -62
  319. package/src/statusline-core/layouts/standard.sh +0 -39
  320. package/src/statusline-core/lib/core.sh +0 -389
  321. package/src/statusline-core/lib/helpers.sh +0 -81
  322. package/src/statusline-core/lib/json-parser.sh +0 -71
  323. package/src/statusline-core/themes/catppuccin.sh +0 -32
  324. package/src/statusline-core/themes/default.sh +0 -37
  325. package/src/statusline-core/themes/gruvbox.sh +0 -32
  326. package/src/statusline-core/themes/nord.sh +0 -32
  327. package/src/statusline-core/themes/tokyo-night.sh +0 -32
  328. package/src/store/canvas-store.ts +0 -50
  329. package/src/store/chat-store.ts +0 -60
  330. package/src/store/permission-store.ts +0 -29
  331. package/src/store/session-store.ts +0 -52
  332. package/src/store/statusline-store.ts +0 -160
  333. package/src/styles/global.css +0 -117
  334. package/src/themes/index.ts +0 -149
  335. package/src/types/canvas-graph.ts +0 -24
  336. package/src/types/sdk-messages.ts +0 -156
  337. package/src/types/statusline-fields.ts +0 -67
  338. package/src/vite-env.d.ts +0 -1
  339. package/tsconfig.json +0 -26
  340. package/vite.config.ts +0 -24
@@ -0,0 +1,220 @@
1
+ import express from 'express';
2
+ import bcrypt from 'bcryptjs';
3
+ import { userDb, subscriptionDb, relayTokensDb, apiKeysDb } from '../database/db.js';
4
+ import { generateToken, authenticateToken, setSessionCookie, clearSessionCookie } from '../middleware/auth.js';
5
+
6
+ const router = express.Router();
7
+
8
+ // Check auth status and setup requirements
9
+ router.get('/status', async (req, res) => {
10
+ try {
11
+ const hasUsers = await userDb.hasUsers();
12
+ res.json({
13
+ needsSetup: !hasUsers,
14
+ isAuthenticated: false
15
+ });
16
+ } catch (error) {
17
+ // auth status error
18
+ res.status(500).json({ error: 'Internal server error' });
19
+ }
20
+ });
21
+
22
+ // User registration — allows multiple users
23
+ router.post('/register', async (req, res) => {
24
+ try {
25
+ const { username, password, email, phone, firstName, lastName } = req.body;
26
+
27
+ // Validate input
28
+ if (!password) {
29
+ return res.status(400).json({ error: 'Password is required' });
30
+ }
31
+ if (password.length < 6) {
32
+ return res.status(400).json({ error: 'Password must be at least 6 characters' });
33
+ }
34
+
35
+ // Derive display username from firstName + lastName if no username provided
36
+ const fName = (firstName || '').trim();
37
+ const lName = (lastName || '').trim();
38
+ const displayName = username || [fName, lName].filter(Boolean).join(' ') || 'User';
39
+
40
+ if (displayName.length < 2) {
41
+ return res.status(400).json({ error: 'Name must be at least 2 characters' });
42
+ }
43
+
44
+ // Check if email is already registered
45
+ if (email) {
46
+ const existingUser = await userDb.getUserByUsername(email);
47
+ if (existingUser) {
48
+ return res.status(409).json({ error: 'An account with this email already exists. Please sign in.' });
49
+ }
50
+ }
51
+
52
+ // Hash password
53
+ const passwordHash = await bcrypt.hash(password, 12);
54
+
55
+ // Create user
56
+ const user = await userDb.createUser(displayName, passwordHash, email || null, phone || null, fName || null, lName || null);
57
+
58
+ // Auto-create default relay token + API key for the new user
59
+ let connectToken = null;
60
+ try {
61
+ const relayToken = await relayTokensDb.createToken(user.id, 'default');
62
+ connectToken = relayToken.token;
63
+ await apiKeysDb.createApiKey(user.id, 'default');
64
+ } catch { /* non-critical — user can create manually later */ }
65
+
66
+ // Generate token + set cookie
67
+ const token = generateToken(user);
68
+ setSessionCookie(res, token);
69
+ await userDb.updateLastLogin(user.id);
70
+
71
+ // New user — no subscription yet
72
+ res.json({
73
+ success: true,
74
+ user: { id: user.user_code || `upc-${String(user.id).padStart(3, '0')}`, username: user.username, first_name: user.first_name, last_name: user.last_name, email: email || null, phone: phone || null, access_override: user.access_override || null, subscription: null },
75
+ token, // still returned for backward compat / API clients
76
+ connectToken // relay token for CLI connection
77
+ });
78
+
79
+ } catch (error) {
80
+ // registration error
81
+ if (error.message?.includes('UNIQUE')) {
82
+ res.status(409).json({ error: 'An account with this name already exists. Try a different name or sign in.' });
83
+ } else {
84
+ res.status(500).json({ error: 'Internal server error' });
85
+ }
86
+ }
87
+ });
88
+
89
+ // User login
90
+ router.post('/login', async (req, res) => {
91
+ try {
92
+ const { username, password } = req.body;
93
+
94
+ if (!username || !password) {
95
+ return res.status(400).json({ error: 'Username and password are required' });
96
+ }
97
+
98
+ const user = await userDb.getUserByUsername(username.trim());
99
+ if (!user) {
100
+ return res.status(401).json({ error: 'Invalid username or password' });
101
+ }
102
+
103
+ const isValidPassword = await bcrypt.compare(password, user.password_hash);
104
+ if (!isValidPassword) {
105
+ return res.status(401).json({ error: 'Invalid username or password' });
106
+ }
107
+
108
+ // Generate token + set cookie
109
+ const token = generateToken(user);
110
+ setSessionCookie(res, token);
111
+ await userDb.updateLastLogin(user.id);
112
+
113
+ // Backfill relay token + API key if missing (for users created before auto-provisioning)
114
+ try {
115
+ const existingTokens = await relayTokensDb.getTokens(user.id);
116
+ if (existingTokens.length === 0) {
117
+ await relayTokensDb.createToken(user.id, 'default');
118
+ }
119
+ const existingKeys = await apiKeysDb.getApiKeys(user.id);
120
+ if (existingKeys.length === 0) {
121
+ await apiKeysDb.createApiKey(user.id, 'default');
122
+ }
123
+ } catch { /* non-critical backfill */ }
124
+
125
+ // Include active subscription if any
126
+ let subscription = null;
127
+ try {
128
+ await subscriptionDb.expireOverdue();
129
+ const sub = await subscriptionDb.getActiveSub(user.id);
130
+ if (sub) {
131
+ subscription = { id: sub.id, planId: sub.plan_id, status: sub.status, startsAt: sub.starts_at, expiresAt: sub.expires_at };
132
+ }
133
+ } catch { /* non-critical */ }
134
+
135
+ res.json({
136
+ success: true,
137
+ user: { id: user.user_code || `upc-${String(user.id).padStart(3, '0')}`, username: user.username, first_name: user.first_name, last_name: user.last_name, email: user.email, phone: user.phone, access_override: user.access_override || null, subscription },
138
+ token // backward compat
139
+ });
140
+
141
+ } catch (error) {
142
+ // login error
143
+ res.status(500).json({ error: 'Internal server error' });
144
+ }
145
+ });
146
+
147
+ // Get current user (protected route) — includes active subscription
148
+ router.get('/user', authenticateToken, async (req, res) => {
149
+ try {
150
+ // Expire overdue subs, then fetch active
151
+ await subscriptionDb.expireOverdue();
152
+ const sub = await subscriptionDb.getActiveSub(req.user.id);
153
+
154
+ // Map internal id → user_code for frontend, include all user details
155
+ const user = {
156
+ id: req.user.user_code || `upc-${String(req.user.id).padStart(3, '0')}`,
157
+ username: req.user.username,
158
+ first_name: req.user.first_name,
159
+ last_name: req.user.last_name,
160
+ email: req.user.email,
161
+ phone: req.user.phone,
162
+ access_override: req.user.access_override || null,
163
+ created_at: req.user.created_at,
164
+ };
165
+
166
+ if (sub) {
167
+ user.subscription = {
168
+ id: sub.id,
169
+ planId: sub.plan_id,
170
+ status: sub.status,
171
+ startsAt: sub.starts_at,
172
+ expiresAt: sub.expires_at,
173
+ };
174
+ } else {
175
+ user.subscription = null;
176
+ }
177
+
178
+ res.json({ user });
179
+ } catch (error) {
180
+ // user fetch error
181
+ const u = req.user;
182
+ res.json({ user: { id: u.user_code || `upc-${String(u.id).padStart(3, '0')}`, username: u.username, first_name: u.first_name, last_name: u.last_name, email: u.email, phone: u.phone } });
183
+ }
184
+ });
185
+
186
+ // Get user's tokens — relay token (for Connect + MCP) and API key
187
+ router.get('/connect-token', authenticateToken, async (req, res) => {
188
+ try {
189
+ // Relay token — used for both CLI connect and MCP auth
190
+ const tokens = await relayTokensDb.getTokens(req.user.id);
191
+ let active = tokens.find(t => t.is_active);
192
+ if (!active) {
193
+ // Auto-create if none exists (backfill for existing users)
194
+ active = await relayTokensDb.createToken(req.user.id, 'default');
195
+ }
196
+
197
+ // API key — also available if user needs it
198
+ const keys = await apiKeysDb.getApiKeys(req.user.id);
199
+ let activeKey = keys.find(k => k.is_active);
200
+ if (!activeKey) {
201
+ activeKey = await apiKeysDb.createApiKey(req.user.id, 'default');
202
+ }
203
+
204
+ res.json({
205
+ token: active.token, // relay token — works for Connect + MCP
206
+ apiKey: activeKey.api_key, // API key — alternative auth method
207
+ userCode: req.user.user_code || null,
208
+ });
209
+ } catch (error) {
210
+ res.status(500).json({ error: 'Could not fetch connect token' });
211
+ }
212
+ });
213
+
214
+ // Logout — clear the session cookie
215
+ router.post('/logout', authenticateToken, (req, res) => {
216
+ clearSessionCookie(res);
217
+ res.json({ success: true, message: 'Logged out successfully' });
218
+ });
219
+
220
+ export default router;
@@ -0,0 +1,263 @@
1
+ import express from 'express';
2
+ import { spawn } from 'child_process';
3
+ import fs from 'fs/promises';
4
+ import path from 'path';
5
+ import os from 'os';
6
+
7
+ const router = express.Router();
8
+
9
+ router.get('/claude/status', async (req, res) => {
10
+ try {
11
+ const credentialsResult = await checkClaudeCredentials();
12
+
13
+ if (credentialsResult.authenticated) {
14
+ return res.json({
15
+ authenticated: true,
16
+ email: credentialsResult.email || 'Authenticated',
17
+ method: 'credentials_file'
18
+ });
19
+ }
20
+
21
+ return res.json({
22
+ authenticated: false,
23
+ email: null,
24
+ error: credentialsResult.error || 'Not authenticated'
25
+ });
26
+
27
+ } catch (error) {
28
+ // auth status error
29
+ res.status(500).json({
30
+ authenticated: false,
31
+ email: null,
32
+ error: 'An error occurred'
33
+ });
34
+ }
35
+ });
36
+
37
+ router.get('/cursor/status', async (req, res) => {
38
+ try {
39
+ const result = await checkCursorStatus();
40
+
41
+ res.json({
42
+ authenticated: result.authenticated,
43
+ email: result.email,
44
+ error: result.error
45
+ });
46
+
47
+ } catch (error) {
48
+ // auth status error
49
+ res.status(500).json({
50
+ authenticated: false,
51
+ email: null,
52
+ error: 'An error occurred'
53
+ });
54
+ }
55
+ });
56
+
57
+ router.get('/codex/status', async (req, res) => {
58
+ try {
59
+ const result = await checkCodexCredentials();
60
+
61
+ res.json({
62
+ authenticated: result.authenticated,
63
+ email: result.email,
64
+ error: result.error
65
+ });
66
+
67
+ } catch (error) {
68
+ // auth status error
69
+ res.status(500).json({
70
+ authenticated: false,
71
+ email: null,
72
+ error: 'An error occurred'
73
+ });
74
+ }
75
+ });
76
+
77
+ async function checkClaudeCredentials() {
78
+ try {
79
+ const credPath = path.join(os.homedir(), '.claude', '.credentials.json');
80
+ const content = await fs.readFile(credPath, 'utf8');
81
+ const creds = JSON.parse(content);
82
+
83
+ const oauth = creds.claudeAiOauth;
84
+ if (oauth && oauth.accessToken) {
85
+ const isExpired = oauth.expiresAt && Date.now() >= oauth.expiresAt;
86
+
87
+ if (!isExpired) {
88
+ return {
89
+ authenticated: true,
90
+ email: creds.email || creds.user || null
91
+ };
92
+ }
93
+ }
94
+
95
+ return {
96
+ authenticated: false,
97
+ email: null
98
+ };
99
+ } catch (error) {
100
+ return {
101
+ authenticated: false,
102
+ email: null
103
+ };
104
+ }
105
+ }
106
+
107
+ function checkCursorStatus() {
108
+ return new Promise((resolve) => {
109
+ let processCompleted = false;
110
+
111
+ const timeout = setTimeout(() => {
112
+ if (!processCompleted) {
113
+ processCompleted = true;
114
+ if (childProcess) {
115
+ childProcess.kill();
116
+ }
117
+ resolve({
118
+ authenticated: false,
119
+ email: null,
120
+ error: 'Command timeout'
121
+ });
122
+ }
123
+ }, 5000);
124
+
125
+ let childProcess;
126
+ try {
127
+ childProcess = spawn('cursor-agent', ['status']);
128
+ } catch (err) {
129
+ clearTimeout(timeout);
130
+ processCompleted = true;
131
+ resolve({
132
+ authenticated: false,
133
+ email: null,
134
+ error: 'Cursor CLI not found or not installed'
135
+ });
136
+ return;
137
+ }
138
+
139
+ let stdout = '';
140
+ let stderr = '';
141
+
142
+ childProcess.stdout.on('data', (data) => {
143
+ stdout += data.toString();
144
+ });
145
+
146
+ childProcess.stderr.on('data', (data) => {
147
+ stderr += data.toString();
148
+ });
149
+
150
+ childProcess.on('close', (code) => {
151
+ if (processCompleted) return;
152
+ processCompleted = true;
153
+ clearTimeout(timeout);
154
+
155
+ if (code === 0) {
156
+ const emailMatch = stdout.match(/Logged in as ([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/i);
157
+
158
+ if (emailMatch) {
159
+ resolve({
160
+ authenticated: true,
161
+ email: emailMatch[1],
162
+ output: stdout
163
+ });
164
+ } else if (stdout.includes('Logged in')) {
165
+ resolve({
166
+ authenticated: true,
167
+ email: 'Logged in',
168
+ output: stdout
169
+ });
170
+ } else {
171
+ resolve({
172
+ authenticated: false,
173
+ email: null,
174
+ error: 'Not logged in'
175
+ });
176
+ }
177
+ } else {
178
+ resolve({
179
+ authenticated: false,
180
+ email: null,
181
+ error: stderr || 'Not logged in'
182
+ });
183
+ }
184
+ });
185
+
186
+ childProcess.on('error', (err) => {
187
+ if (processCompleted) return;
188
+ processCompleted = true;
189
+ clearTimeout(timeout);
190
+
191
+ resolve({
192
+ authenticated: false,
193
+ email: null,
194
+ error: 'Cursor CLI not found or not installed'
195
+ });
196
+ });
197
+ });
198
+ }
199
+
200
+ async function checkCodexCredentials() {
201
+ try {
202
+ const authPath = path.join(os.homedir(), '.codex', 'auth.json');
203
+ const content = await fs.readFile(authPath, 'utf8');
204
+ const auth = JSON.parse(content);
205
+
206
+ // Tokens are nested under 'tokens' key
207
+ const tokens = auth.tokens || {};
208
+
209
+ // Check for valid tokens (id_token or access_token)
210
+ if (tokens.id_token || tokens.access_token) {
211
+ // Try to extract email from id_token JWT payload
212
+ let email = 'Authenticated';
213
+ if (tokens.id_token) {
214
+ try {
215
+ // JWT is base64url encoded: header.payload.signature
216
+ const parts = tokens.id_token.split('.');
217
+ if (parts.length >= 2) {
218
+ // Decode the payload (second part)
219
+ const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf8'));
220
+ email = payload.email || payload.user || 'Authenticated';
221
+ }
222
+ } catch {
223
+ // If JWT decoding fails, use fallback
224
+ email = 'Authenticated';
225
+ }
226
+ }
227
+
228
+ return {
229
+ authenticated: true,
230
+ email
231
+ };
232
+ }
233
+
234
+ // Also check for OPENAI_API_KEY as fallback auth method
235
+ if (auth.OPENAI_API_KEY) {
236
+ return {
237
+ authenticated: true,
238
+ email: 'API Key Auth'
239
+ };
240
+ }
241
+
242
+ return {
243
+ authenticated: false,
244
+ email: null,
245
+ error: 'No valid tokens found'
246
+ };
247
+ } catch (error) {
248
+ if (error.code === 'ENOENT') {
249
+ return {
250
+ authenticated: false,
251
+ email: null,
252
+ error: 'Codex not configured'
253
+ };
254
+ }
255
+ return {
256
+ authenticated: false,
257
+ email: null,
258
+ error: 'An error occurred'
259
+ };
260
+ }
261
+ }
262
+
263
+ export default router;