upfynai-code 3.0.4 → 3.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 (258) hide show
  1. package/README.md +69 -92
  2. package/bin/cli.js +191 -0
  3. package/dist/client/assets/AppContent-M14Au3SB.js +542 -0
  4. package/{client/dist/assets/BrowserPanel-0TLEl-IC.js → dist/client/assets/BrowserPanel-TFKm2NDJ.js} +2 -2
  5. package/dist/client/assets/DashboardPanel-C88HjsCh.js +1 -0
  6. package/dist/client/assets/FileTree-DvO1xnDE.js +1 -0
  7. package/{client/dist/assets/GitPanel-C_xFM-N2.js → dist/client/assets/GitPanel-D-slVlyy.js} +2 -2
  8. package/dist/client/assets/LoginModal-Chi4SYcr.js +21 -0
  9. package/{client/dist/assets/MarkdownPreview-CESjI261.js → dist/client/assets/MarkdownPreview-CuIix2u9.js} +1 -1
  10. package/dist/client/assets/MermaidBlock-Dq9uFv82.js +2 -0
  11. package/dist/client/assets/Onboarding-QYXx24dX.js +1 -0
  12. package/{client/dist/assets/PreviewPanel-CqCa92Tf.js → dist/client/assets/PreviewPanel-Dd8q-jo0.js} +1 -1
  13. package/dist/client/assets/SetupForm-CrspaUva.js +1 -0
  14. package/dist/client/assets/WorkflowsPanel-DIlYAdhB.js +1 -0
  15. package/dist/client/assets/index-CnNNzw9A.css +1 -0
  16. package/{client/dist/assets/index-HaY-3pK1.js → dist/client/assets/index-rUkK9FDP.js} +26 -26
  17. package/{client/dist/assets/vendor-codemirror-D2ALgpaX.js → dist/client/assets/vendor-codemirror-jc6nyJQg.js} +1 -1
  18. package/{client/dist/assets/vendor-diff-DNQpbhrT.js → dist/client/assets/vendor-diff-THJmAcEI.js} +1 -1
  19. package/{client/dist/assets/vendor-icons-GyYE35HP.js → dist/client/assets/vendor-icons-CfjIpdrD.js} +145 -155
  20. package/{client/dist/assets/vendor-markdown-CimbIo6Y.js → dist/client/assets/vendor-markdown-Cdm6NEGf.js} +1 -1
  21. package/dist/client/assets/vendor-mermaid-DTPaBx-U.js +2559 -0
  22. package/{client/dist/assets/vendor-react-96lCPsRK.js → dist/client/assets/vendor-react-wFkb6mSf.js} +1 -1
  23. package/{client/dist/assets/vendor-syntax-LS_Nt30I.js → dist/client/assets/vendor-syntax-C_UZR7tc.js} +1 -1
  24. package/dist/client/favicon.png +0 -0
  25. package/dist/client/icons/icon-128x128.png +0 -0
  26. package/dist/client/icons/icon-144x144.png +0 -0
  27. package/dist/client/icons/icon-152x152.png +0 -0
  28. package/dist/client/icons/icon-192x192.png +0 -0
  29. package/dist/client/icons/icon-384x384.png +0 -0
  30. package/dist/client/icons/icon-512x512.png +0 -0
  31. package/dist/client/icons/icon-72x72.png +0 -0
  32. package/dist/client/icons/icon-96x96.png +0 -0
  33. package/{client/dist → dist/client}/index.html +37 -36
  34. package/dist/client/logo-128.png +0 -0
  35. package/dist/client/logo-256.png +0 -0
  36. package/dist/client/logo-32.png +0 -0
  37. package/dist/client/logo-512.png +0 -0
  38. package/dist/client/logo-64.png +0 -0
  39. package/dist/client/logo.png +0 -0
  40. package/{client/dist → dist/client}/manifest.json +12 -12
  41. package/{client/dist → dist/client}/mcp-docs.html +1 -1
  42. package/{client/dist → dist/client}/sw.js +2 -2
  43. package/package.json +56 -105
  44. package/scripts/postinstall.js +9 -0
  45. package/scripts/prepublish.js +77 -0
  46. package/src/animation.js +228 -0
  47. package/src/auth.js +142 -0
  48. package/src/config.js +40 -0
  49. package/src/connect.js +416 -0
  50. package/src/launch.js +81 -0
  51. package/src/mcp.js +57 -0
  52. package/src/permissions.js +140 -0
  53. package/src/persistent-shell.js +261 -0
  54. package/src/server.js +54 -0
  55. package/client/dist/assets/AppContent-CwrTP6TW.js +0 -545
  56. package/client/dist/assets/CanvasFullScreen-D1GWQsGL.js +0 -1
  57. package/client/dist/assets/CanvasWorkspace-D7ORj358.js +0 -163
  58. package/client/dist/assets/DashboardPanel-BV7ybUDe.js +0 -1
  59. package/client/dist/assets/FileTree-5qfhBqdE.js +0 -1
  60. package/client/dist/assets/LoginModal-CImJHRjX.js +0 -13
  61. package/client/dist/assets/MermaidBlock-BFM21cwe.js +0 -2
  62. package/client/dist/assets/Onboarding-B3cteLu2.js +0 -1
  63. package/client/dist/assets/SetupForm-P6dsYgHO.js +0 -1
  64. package/client/dist/assets/WorkflowsPanel-CBoN80kc.js +0 -1
  65. package/client/dist/assets/index-46kkVu2i.css +0 -1
  66. package/client/dist/assets/pdf-CE_K4jFx.js +0 -12
  67. package/client/dist/assets/vendor-canvas-BZV40eAE.css +0 -1
  68. package/client/dist/assets/vendor-canvas-DvHJ_Pn2.js +0 -49
  69. package/client/dist/assets/vendor-mermaid-DucWyDEe.js +0 -2556
  70. package/client/dist/favicon.png +0 -0
  71. package/client/dist/icons/icon-128x128.png +0 -0
  72. package/client/dist/icons/icon-144x144.png +0 -0
  73. package/client/dist/icons/icon-152x152.png +0 -0
  74. package/client/dist/icons/icon-192x192.png +0 -0
  75. package/client/dist/icons/icon-384x384.png +0 -0
  76. package/client/dist/icons/icon-512x512.png +0 -0
  77. package/client/dist/icons/icon-72x72.png +0 -0
  78. package/client/dist/icons/icon-96x96.png +0 -0
  79. package/client/dist/logo-128.png +0 -0
  80. package/client/dist/logo-256.png +0 -0
  81. package/client/dist/logo-32.png +0 -0
  82. package/client/dist/logo-512.png +0 -0
  83. package/client/dist/logo-64.png +0 -0
  84. package/commands/upfynai-connect.md +0 -59
  85. package/commands/upfynai-disconnect.md +0 -31
  86. package/commands/upfynai-doctor.md +0 -99
  87. package/commands/upfynai-export.md +0 -49
  88. package/commands/upfynai-local.md +0 -82
  89. package/commands/upfynai-status.md +0 -75
  90. package/commands/upfynai-stop.md +0 -49
  91. package/commands/upfynai-uninstall.md +0 -58
  92. package/commands/upfynai.md +0 -69
  93. package/scripts/build-client.js +0 -17
  94. package/scripts/fix-node-pty.js +0 -67
  95. package/scripts/install-commands.js +0 -78
  96. package/server/agent-loop.js +0 -242
  97. package/server/auto-compact.js +0 -99
  98. package/server/browser.js +0 -131
  99. package/server/claude-sdk.js +0 -797
  100. package/server/cli-ui.js +0 -798
  101. package/server/cli.js +0 -751
  102. package/server/constants/config.js +0 -31
  103. package/server/cursor-cli.js +0 -270
  104. package/server/database/auth.db +0 -0
  105. package/server/database/db.js +0 -1547
  106. package/server/database/init.sql +0 -70
  107. package/server/index.js +0 -3813
  108. package/server/load-env.js +0 -26
  109. package/server/mcp-server.js +0 -621
  110. package/server/middleware/auth.js +0 -184
  111. package/server/middleware/relayHelpers.js +0 -44
  112. package/server/middleware/sandboxRouter.js +0 -174
  113. package/server/openai-codex.js +0 -403
  114. package/server/openrouter.js +0 -137
  115. package/server/projects.js +0 -1807
  116. package/server/provider-factory.js +0 -174
  117. package/server/relay-client.js +0 -390
  118. package/server/routes/agent.js +0 -1234
  119. package/server/routes/auth.js +0 -559
  120. package/server/routes/browser.js +0 -419
  121. package/server/routes/canvas.js +0 -53
  122. package/server/routes/cli-auth.js +0 -263
  123. package/server/routes/codex.js +0 -396
  124. package/server/routes/commands.js +0 -707
  125. package/server/routes/composio.js +0 -176
  126. package/server/routes/cursor.js +0 -770
  127. package/server/routes/dashboard.js +0 -295
  128. package/server/routes/git.js +0 -1208
  129. package/server/routes/keys.js +0 -34
  130. package/server/routes/mcp-utils.js +0 -48
  131. package/server/routes/mcp.js +0 -661
  132. package/server/routes/payments.js +0 -227
  133. package/server/routes/projects.js +0 -754
  134. package/server/routes/sessions.js +0 -146
  135. package/server/routes/settings.js +0 -261
  136. package/server/routes/taskmaster.js +0 -1928
  137. package/server/routes/user.js +0 -106
  138. package/server/routes/vapi-chat.js +0 -624
  139. package/server/routes/voice.js +0 -235
  140. package/server/routes/webhooks.js +0 -166
  141. package/server/routes/workflows.js +0 -312
  142. package/server/sandbox.js +0 -120
  143. package/server/services/browser-ai.js +0 -154
  144. package/server/services/composio.js +0 -204
  145. package/server/services/sessionRegistry.js +0 -139
  146. package/server/services/whisperService.js +0 -84
  147. package/server/services/workflowScheduler.js +0 -211
  148. package/server/tests/relay-flow.test.js +0 -570
  149. package/server/tests/sessions.test.js +0 -259
  150. package/server/utils/commandParser.js +0 -303
  151. package/server/utils/email.js +0 -66
  152. package/server/utils/gitConfig.js +0 -24
  153. package/server/utils/mcp-detector.js +0 -198
  154. package/server/utils/taskmaster-websocket.js +0 -129
  155. package/shared/integrationCatalog.d.ts +0 -12
  156. package/shared/integrationCatalog.js +0 -172
  157. package/shared/modelConstants.js +0 -96
  158. /package/{shared → dist}/agents/claude.js +0 -0
  159. /package/{shared → dist}/agents/codex.js +0 -0
  160. /package/{shared → dist}/agents/cursor.js +0 -0
  161. /package/{shared → dist}/agents/detect.js +0 -0
  162. /package/{shared → dist}/agents/exec.js +0 -0
  163. /package/{shared → dist}/agents/files.js +0 -0
  164. /package/{shared → dist}/agents/git.js +0 -0
  165. /package/{shared → dist}/agents/gitagent.js +0 -0
  166. /package/{shared → dist}/agents/index.js +0 -0
  167. /package/{shared → dist}/agents/shell.js +0 -0
  168. /package/{shared → dist}/agents/utils.js +0 -0
  169. /package/{client/dist → dist/client}/api-docs.html +0 -0
  170. /package/{client/dist → dist/client}/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  171. /package/{client/dist → dist/client}/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  172. /package/{client/dist → dist/client}/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  173. /package/{client/dist → dist/client}/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  174. /package/{client/dist → dist/client}/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  175. /package/{client/dist → dist/client}/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  176. /package/{client/dist → dist/client}/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  177. /package/{client/dist → dist/client}/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  178. /package/{client/dist → dist/client}/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  179. /package/{client/dist → dist/client}/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  180. /package/{client/dist → dist/client}/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  181. /package/{client/dist → dist/client}/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  182. /package/{client/dist → dist/client}/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  183. /package/{client/dist → dist/client}/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  184. /package/{client/dist → dist/client}/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  185. /package/{client/dist → dist/client}/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  186. /package/{client/dist → dist/client}/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  187. /package/{client/dist → dist/client}/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  188. /package/{client/dist → dist/client}/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  189. /package/{client/dist → dist/client}/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  190. /package/{client/dist → dist/client}/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  191. /package/{client/dist → dist/client}/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  192. /package/{client/dist → dist/client}/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  193. /package/{client/dist → dist/client}/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  194. /package/{client/dist → dist/client}/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  195. /package/{client/dist → dist/client}/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  196. /package/{client/dist → dist/client}/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  197. /package/{client/dist → dist/client}/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  198. /package/{client/dist → dist/client}/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  199. /package/{client/dist → dist/client}/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  200. /package/{client/dist → dist/client}/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  201. /package/{client/dist → dist/client}/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  202. /package/{client/dist → dist/client}/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  203. /package/{client/dist → dist/client}/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  204. /package/{client/dist → dist/client}/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  205. /package/{client/dist → dist/client}/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  206. /package/{client/dist → dist/client}/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  207. /package/{client/dist → dist/client}/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  208. /package/{client/dist → dist/client}/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  209. /package/{client/dist → dist/client}/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  210. /package/{client/dist → dist/client}/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  211. /package/{client/dist → dist/client}/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  212. /package/{client/dist → dist/client}/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  213. /package/{client/dist → dist/client}/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  214. /package/{client/dist → dist/client}/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  215. /package/{client/dist → dist/client}/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  216. /package/{client/dist → dist/client}/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  217. /package/{client/dist → dist/client}/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  218. /package/{client/dist → dist/client}/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  219. /package/{client/dist → dist/client}/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  220. /package/{client/dist → dist/client}/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  221. /package/{client/dist → dist/client}/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  222. /package/{client/dist → dist/client}/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  223. /package/{client/dist → dist/client}/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  224. /package/{client/dist → dist/client}/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  225. /package/{client/dist → dist/client}/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  226. /package/{client/dist → dist/client}/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  227. /package/{client/dist → dist/client}/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  228. /package/{client/dist → dist/client}/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  229. /package/{client/dist → dist/client}/assets/vendor-i18n-DCFGyhQR.js +0 -0
  230. /package/{client/dist → dist/client}/assets/vendor-xterm-CZq1hqo1.js +0 -0
  231. /package/{client/dist → dist/client}/assets/vendor-xterm-qxJ8_QYu.css +0 -0
  232. /package/{client/dist → dist/client}/clear-cache.html +0 -0
  233. /package/{client/dist → dist/client}/convert-icons.md +0 -0
  234. /package/{client/dist → dist/client}/favicon.svg +0 -0
  235. /package/{client/dist → dist/client}/generate-icons.js +0 -0
  236. /package/{client/dist → dist/client}/icons/claude-ai-icon.svg +0 -0
  237. /package/{client/dist → dist/client}/icons/codex-white.svg +0 -0
  238. /package/{client/dist → dist/client}/icons/codex.svg +0 -0
  239. /package/{client/dist → dist/client}/icons/cursor-white.svg +0 -0
  240. /package/{client/dist → dist/client}/icons/cursor.svg +0 -0
  241. /package/{client/dist → dist/client}/icons/icon-128x128.svg +0 -0
  242. /package/{client/dist → dist/client}/icons/icon-144x144.svg +0 -0
  243. /package/{client/dist → dist/client}/icons/icon-152x152.svg +0 -0
  244. /package/{client/dist → dist/client}/icons/icon-192x192.svg +0 -0
  245. /package/{client/dist → dist/client}/icons/icon-384x384.svg +0 -0
  246. /package/{client/dist → dist/client}/icons/icon-512x512.svg +0 -0
  247. /package/{client/dist → dist/client}/icons/icon-72x72.svg +0 -0
  248. /package/{client/dist → dist/client}/icons/icon-96x96.svg +0 -0
  249. /package/{client/dist → dist/client}/icons/icon-template.svg +0 -0
  250. /package/{client/dist → dist/client}/logo.svg +0 -0
  251. /package/{client/dist → dist/client}/offline.html +0 -0
  252. /package/{client/dist → dist/client}/screenshots/cli-selection.png +0 -0
  253. /package/{client/dist → dist/client}/screenshots/desktop-main.png +0 -0
  254. /package/{client/dist → dist/client}/screenshots/mobile-chat.png +0 -0
  255. /package/{client/dist → dist/client}/screenshots/tools-modal.png +0 -0
  256. /package/{shared → dist}/gitagent/index.js +0 -0
  257. /package/{shared → dist}/gitagent/parser.js +0 -0
  258. /package/{shared → dist}/gitagent/prompt-builder.js +0 -0
@@ -64,4 +64,4 @@ Error generating stack: `+u.message+`
64
64
  * LICENSE.md file in the root directory of this source tree.
65
65
  *
66
66
  * @license MIT
67
- */const yp="6";try{window.__reactRouterVersion=yp}catch{}const gp="startTransition",ec=yd[gp];function Np(o){let{basename:f,children:s,future:v,window:g}=o,E=B.useRef();E.current==null&&(E.current=xd({window:g,v5Compat:!0}));let x=E.current,[R,_]=B.useState({action:x.action,location:x.location}),{v7_startTransition:U}=v||{},j=B.useCallback(N=>{U&&ec?ec(()=>_(N)):_(N)},[_,U]);return B.useLayoutEffect(()=>x.listen(j),[x,j]),B.useEffect(()=>hp(v),[v]),B.createElement(vp,{basename:f,children:s,location:R.location,navigationType:R.action,navigator:x,future:v})}var tc;(function(o){o.UseScrollRestoration="useScrollRestoration",o.UseSubmit="useSubmit",o.UseSubmitFetcher="useSubmitFetcher",o.UseFetcher="useFetcher",o.useViewTransitionState="useViewTransitionState"})(tc||(tc={}));var nc;(function(o){o.UseFetcher="useFetcher",o.UseFetchers="useFetchers",o.UseScrollRestoration="useScrollRestoration"})(nc||(nc={}));export{Np as B,vd as R,Ai as a,Sp as b,wp as c,Pp as d,mp as e,Ep as f,Vi as g,xp as h,Cp as i,kp as j,B as r,_p as u};
67
+ */const yp="6";try{window.__reactRouterVersion=yp}catch{}const gp="startTransition",ec=yd[gp];function Np(o){let{basename:f,children:s,future:v,window:g}=o,E=B.useRef();E.current==null&&(E.current=xd({window:g,v5Compat:!0}));let x=E.current,[R,_]=B.useState({action:x.action,location:x.location}),{v7_startTransition:U}=v||{},j=B.useCallback(N=>{U&&ec?ec(()=>_(N)):_(N)},[_,U]);return B.useLayoutEffect(()=>x.listen(j),[x,j]),B.useEffect(()=>hp(v),[v]),B.createElement(vp,{basename:f,children:s,location:R.location,navigationType:R.action,navigator:x,future:v})}var tc;(function(o){o.UseScrollRestoration="useScrollRestoration",o.UseSubmit="useSubmit",o.UseSubmitFetcher="useSubmitFetcher",o.UseFetcher="useFetcher",o.useViewTransitionState="useViewTransitionState"})(tc||(tc={}));var nc;(function(o){o.UseFetcher="useFetcher",o.UseFetchers="useFetchers",o.UseScrollRestoration="useScrollRestoration"})(nc||(nc={}));export{Np as B,vd as R,Sp as a,Pp as b,wp as c,mp as d,Ep as e,Cp as f,Vi as g,_p as h,Ai as i,kp as j,B as r,xp as u};
@@ -1,4 +1,4 @@
1
- import{R as re,c as Te,g as Xd}from"./vendor-react-96lCPsRK.js";import{r as Qd}from"./vendor-markdown-CimbIo6Y.js";const Jd="modulepreload",ep=function(e){return"/app/"+e},mo={},IS=function(t,r,a){let n=Promise.resolve();if(r&&r.length>0){let s=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(p=>({status:"fulfilled",value:p}),p=>({status:"rejected",reason:p}))))};document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));n=s(r.map(c=>{if(c=ep(c),c in mo)return;mo[c]=!0;const u=c.endsWith(".css"),p=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${p}`))return;const m=document.createElement("link");if(m.rel=u?"stylesheet":Jd,u||(m.as="script"),m.crossOrigin="",m.href=c,l&&m.setAttribute("nonce",l),document.head.appendChild(m),u)return new Promise((h,T)=>{m.addEventListener("load",h),m.addEventListener("error",()=>T(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(s){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=s,window.dispatchEvent(o),!o.defaultPrevented)throw s}return n.then(s=>{for(const o of s||[])o.status==="rejected"&&i(o.reason);return t().catch(i)})};function tp(e,t){if(e==null)return{};var r={};for(var a in e)if({}.hasOwnProperty.call(e,a)){if(t.indexOf(a)!==-1)continue;r[a]=e[a]}return r}function rp(e,t){if(e==null)return{};var r,a,n=tp(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)r=i[a],t.indexOf(r)===-1&&{}.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xi(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,a=Array(t);r<t;r++)a[r]=e[r];return a}function ap(e){if(Array.isArray(e))return Xi(e)}function np(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function ip(e,t){if(e){if(typeof e=="string")return Xi(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Xi(e,t):void 0}}function op(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
1
+ import{R as re,c as Te,g as Xd}from"./vendor-react-wFkb6mSf.js";import{r as Qd}from"./vendor-markdown-Cdm6NEGf.js";const Jd="modulepreload",ep=function(e){return"/app/"+e},mo={},IS=function(t,r,a){let n=Promise.resolve();if(r&&r.length>0){let s=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(p=>({status:"fulfilled",value:p}),p=>({status:"rejected",reason:p}))))};document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));n=s(r.map(c=>{if(c=ep(c),c in mo)return;mo[c]=!0;const u=c.endsWith(".css"),p=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${p}`))return;const m=document.createElement("link");if(m.rel=u?"stylesheet":Jd,u||(m.as="script"),m.crossOrigin="",m.href=c,l&&m.setAttribute("nonce",l),document.head.appendChild(m),u)return new Promise((h,T)=>{m.addEventListener("load",h),m.addEventListener("error",()=>T(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(s){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=s,window.dispatchEvent(o),!o.defaultPrevented)throw s}return n.then(s=>{for(const o of s||[])o.status==="rejected"&&i(o.reason);return t().catch(i)})};function tp(e,t){if(e==null)return{};var r={};for(var a in e)if({}.hasOwnProperty.call(e,a)){if(t.indexOf(a)!==-1)continue;r[a]=e[a]}return r}function rp(e,t){if(e==null)return{};var r,a,n=tp(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)r=i[a],t.indexOf(r)===-1&&{}.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xi(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,a=Array(t);r<t;r++)a[r]=e[r];return a}function ap(e){if(Array.isArray(e))return Xi(e)}function np(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function ip(e,t){if(e){if(typeof e=="string")return Xi(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Xi(e,t):void 0}}function op(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
2
2
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Qi(e){return ap(e)||np(e)||ip(e)||op()}function he(e){"@babel/helpers - typeof";return he=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},he(e)}function sp(e,t){if(he(e)!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var a=r.call(e,t);if(he(a)!="object")return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function lp(e){var t=sp(e,"string");return he(t)=="symbol"?t:t+""}function Md(e,t,r){return(t=lp(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ji(){return Ji=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var a in r)({}).hasOwnProperty.call(r,a)&&(e[a]=r[a])}return e},Ji.apply(null,arguments)}function fo(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),r.push.apply(r,a)}return r}function be(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?fo(Object(r),!0).forEach(function(a){Md(e,a,r[a])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):fo(Object(r)).forEach(function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(r,a))})}return e}function up(e){var t=e.length;if(t===0||t===1)return e;if(t===2)return[e[0],e[1],"".concat(e[0],".").concat(e[1]),"".concat(e[1],".").concat(e[0])];if(t===3)return[e[0],e[1],e[2],"".concat(e[0],".").concat(e[1]),"".concat(e[0],".").concat(e[2]),"".concat(e[1],".").concat(e[0]),"".concat(e[1],".").concat(e[2]),"".concat(e[2],".").concat(e[0]),"".concat(e[2],".").concat(e[1]),"".concat(e[0],".").concat(e[1],".").concat(e[2]),"".concat(e[0],".").concat(e[2],".").concat(e[1]),"".concat(e[1],".").concat(e[0],".").concat(e[2]),"".concat(e[1],".").concat(e[2],".").concat(e[0]),"".concat(e[2],".").concat(e[0],".").concat(e[1]),"".concat(e[2],".").concat(e[1],".").concat(e[0])];if(t>=4)return[e[0],e[1],e[2],e[3],"".concat(e[0],".").concat(e[1]),"".concat(e[0],".").concat(e[2]),"".concat(e[0],".").concat(e[3]),"".concat(e[1],".").concat(e[0]),"".concat(e[1],".").concat(e[2]),"".concat(e[1],".").concat(e[3]),"".concat(e[2],".").concat(e[0]),"".concat(e[2],".").concat(e[1]),"".concat(e[2],".").concat(e[3]),"".concat(e[3],".").concat(e[0]),"".concat(e[3],".").concat(e[1]),"".concat(e[3],".").concat(e[2]),"".concat(e[0],".").concat(e[1],".").concat(e[2]),"".concat(e[0],".").concat(e[1],".").concat(e[3]),"".concat(e[0],".").concat(e[2],".").concat(e[1]),"".concat(e[0],".").concat(e[2],".").concat(e[3]),"".concat(e[0],".").concat(e[3],".").concat(e[1]),"".concat(e[0],".").concat(e[3],".").concat(e[2]),"".concat(e[1],".").concat(e[0],".").concat(e[2]),"".concat(e[1],".").concat(e[0],".").concat(e[3]),"".concat(e[1],".").concat(e[2],".").concat(e[0]),"".concat(e[1],".").concat(e[2],".").concat(e[3]),"".concat(e[1],".").concat(e[3],".").concat(e[0]),"".concat(e[1],".").concat(e[3],".").concat(e[2]),"".concat(e[2],".").concat(e[0],".").concat(e[1]),"".concat(e[2],".").concat(e[0],".").concat(e[3]),"".concat(e[2],".").concat(e[1],".").concat(e[0]),"".concat(e[2],".").concat(e[1],".").concat(e[3]),"".concat(e[2],".").concat(e[3],".").concat(e[0]),"".concat(e[2],".").concat(e[3],".").concat(e[1]),"".concat(e[3],".").concat(e[0],".").concat(e[1]),"".concat(e[3],".").concat(e[0],".").concat(e[2]),"".concat(e[3],".").concat(e[1],".").concat(e[0]),"".concat(e[3],".").concat(e[1],".").concat(e[2]),"".concat(e[3],".").concat(e[2],".").concat(e[0]),"".concat(e[3],".").concat(e[2],".").concat(e[1]),"".concat(e[0],".").concat(e[1],".").concat(e[2],".").concat(e[3]),"".concat(e[0],".").concat(e[1],".").concat(e[3],".").concat(e[2]),"".concat(e[0],".").concat(e[2],".").concat(e[1],".").concat(e[3]),"".concat(e[0],".").concat(e[2],".").concat(e[3],".").concat(e[1]),"".concat(e[0],".").concat(e[3],".").concat(e[1],".").concat(e[2]),"".concat(e[0],".").concat(e[3],".").concat(e[2],".").concat(e[1]),"".concat(e[1],".").concat(e[0],".").concat(e[2],".").concat(e[3]),"".concat(e[1],".").concat(e[0],".").concat(e[3],".").concat(e[2]),"".concat(e[1],".").concat(e[2],".").concat(e[0],".").concat(e[3]),"".concat(e[1],".").concat(e[2],".").concat(e[3],".").concat(e[0]),"".concat(e[1],".").concat(e[3],".").concat(e[0],".").concat(e[2]),"".concat(e[1],".").concat(e[3],".").concat(e[2],".").concat(e[0]),"".concat(e[2],".").concat(e[0],".").concat(e[1],".").concat(e[3]),"".concat(e[2],".").concat(e[0],".").concat(e[3],".").concat(e[1]),"".concat(e[2],".").concat(e[1],".").concat(e[0],".").concat(e[3]),"".concat(e[2],".").concat(e[1],".").concat(e[3],".").concat(e[0]),"".concat(e[2],".").concat(e[3],".").concat(e[0],".").concat(e[1]),"".concat(e[2],".").concat(e[3],".").concat(e[1],".").concat(e[0]),"".concat(e[3],".").concat(e[0],".").concat(e[1],".").concat(e[2]),"".concat(e[3],".").concat(e[0],".").concat(e[2],".").concat(e[1]),"".concat(e[3],".").concat(e[1],".").concat(e[0],".").concat(e[2]),"".concat(e[3],".").concat(e[1],".").concat(e[2],".").concat(e[0]),"".concat(e[3],".").concat(e[2],".").concat(e[0],".").concat(e[1]),"".concat(e[3],".").concat(e[2],".").concat(e[1],".").concat(e[0])]}var De={};function cp(e){if(e.length===0||e.length===1)return e;var t=e.join(".");return De[t]||(De[t]=up(e)),De[t]}function dp(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2?arguments[2]:void 0,a=e.filter(function(i){return i!=="token"}),n=cp(a);return n.reduce(function(i,s){return be(be({},i),r[s])},t)}function Eo(e){return e.join(" ")}function pp(e,t){var r=0;return function(a){return r+=1,a.map(function(n,i){return Fd({node:n,stylesheet:e,useInlineStyles:t,key:"code-segment-".concat(r,"-").concat(i)})})}}function Fd(e){var t=e.node,r=e.stylesheet,a=e.style,n=a===void 0?{}:a,i=e.useInlineStyles,s=e.key,o=t.properties,l=t.type,c=t.tagName,u=t.value;if(l==="text")return u;if(c){var p=pp(r,i),m;if(!i)m=be(be({},o),{},{className:Eo(o.className)});else{var h=Object.keys(r).reduce(function(A,b){return b.split(".").forEach(function(g){A.includes(g)||A.push(g)}),A},[]),T=o.className&&o.className.includes("token")?["token"]:[],v=o.className&&T.concat(o.className.filter(function(A){return!h.includes(A)}));m=be(be({},o),{},{className:Eo(v)||void 0,style:dp(o.className,Object.assign({},o.style,n),r)})}var R=p(t.children);return re.createElement(c,Ji({key:s},m),R)}}const gp=(function(e,t){var r=e.listLanguages();return r.indexOf(t)!==-1});var bp=["language","children","style","customStyle","codeTagProps","useInlineStyles","showLineNumbers","showInlineLineNumbers","startingLineNumber","lineNumberContainerStyle","lineNumberStyle","wrapLines","wrapLongLines","lineProps","renderer","PreTag","CodeTag","code","astGenerator"];function ho(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),r.push.apply(r,a)}return r}function ae(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?ho(Object(r),!0).forEach(function(a){Md(e,a,r[a])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ho(Object(r)).forEach(function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(r,a))})}return e}var mp=/\n/g;function fp(e){return e.match(mp)}function Ep(e){var t=e.lines,r=e.startingLineNumber,a=e.style;return t.map(function(n,i){var s=i+r;return re.createElement("span",{key:"line-".concat(i),className:"react-syntax-highlighter-line-number",style:typeof a=="function"?a(s):a},"".concat(s,`
3
3
  `))})}function hp(e){var t=e.codeString,r=e.codeStyle,a=e.containerStyle,n=a===void 0?{float:"left",paddingRight:"10px"}:a,i=e.numberStyle,s=i===void 0?{}:i,o=e.startingLineNumber;return re.createElement("code",{style:Object.assign({},r,n)},Ep({lines:t.replace(/\n$/,"").split(`
4
4
  `),style:s,startingLineNumber:o}))}function Sp(e){return"".concat(e.toString().length,".25em")}function Ud(e,t){return{type:"element",tagName:"span",properties:{key:"line-number--".concat(e),className:["comment","linenumber","react-syntax-highlighter-line-number"],style:t},children:[{type:"text",value:e}]}}function Pd(e,t,r){var a={display:"inline-block",minWidth:Sp(r),paddingRight:"1em",textAlign:"right",userSelect:"none"},n=typeof e=="function"?e(t):e,i=ae(ae({},a),n);return i}function ve(e){var t=e.children,r=e.lineNumber,a=e.lineNumberStyle,n=e.largestLineNumber,i=e.showInlineLineNumbers,s=e.lineProps,o=s===void 0?{}:s,l=e.className,c=l===void 0?[]:l,u=e.showLineNumbers,p=e.wrapLongLines,m=e.wrapLines,h=m===void 0?!1:m,T=h?ae({},typeof o=="function"?o(r):o):{};if(T.className=T.className?[].concat(Qi(T.className.trim().split(/\s+/)),Qi(c)):c,r&&i){var v=Pd(a,r,n);t.unshift(Ud(r,v))}return p&u&&(T.style=ae({display:"flex"},T.style)),{type:"element",tagName:"span",properties:T,children:t}}function Bd(e){for(var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],a=0;a<e.length;a++){var n=e[a];if(n.type==="text")r.push(ve({children:[n],className:Qi(new Set(t))}));else if(n.children){var i=t.concat(n.properties.className);Bd(n.children,i).forEach(function(s){return r.push(s)})}}return r}function yp(e,t,r,a,n,i,s,o,l){var c,u=Bd(e.value),p=[],m=-1,h=0;function T(E,d){var S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[];return ve({children:E,lineNumber:d,lineNumberStyle:o,largestLineNumber:s,showInlineLineNumbers:n,lineProps:r,className:S,showLineNumbers:a,wrapLongLines:l,wrapLines:t})}function v(E,d){if(a&&d&&n){var S=Pd(o,d,s);E.unshift(Ud(d,S))}return E}function R(E,d){var S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[];return t||S.length>0?T(E,d,S):v(E,d)}for(var A=function(){var d=u[h],S=d.children[0].value,_=fp(S);if(_){var y=S.split(`
Binary file
Binary file
Binary file
@@ -35,53 +35,54 @@
35
35
  align-items: center;
36
36
  justify-content: center;
37
37
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
38
- color: #e2e8f0;
39
- flex-direction: column;
40
- gap: 16px;
41
38
  }
42
- #splash .logo-box {
43
- width: 64px; height: 64px;
44
- background: #0d1117;
45
- border-radius: 16px;
46
- display: flex; align-items: center; justify-content: center;
47
- box-shadow: 0 4px 24px rgba(0,184,212,0.25);
48
- border: 1px solid rgba(0,184,212,0.2);
39
+ #splash .app-loading-title {
40
+ font-size: clamp(4rem, 12vw, 10rem);
41
+ font-weight: 900;
42
+ letter-spacing: -0.03em;
43
+ line-height: 1.15;
44
+ padding-bottom: 0.1em;
45
+ color: rgba(255, 255, 255, 0.08);
46
+ background: linear-gradient(
47
+ 90deg,
48
+ rgba(255,255,255,0.08) 0%,
49
+ #3b82f6 15%,
50
+ #8b5cf6 30%,
51
+ #ec4899 45%,
52
+ #f59e0b 60%,
53
+ #10b981 75%,
54
+ rgba(255,255,255,0.08) 100%
55
+ );
56
+ background-size: 250% 100%;
57
+ -webkit-background-clip: text;
58
+ background-clip: text;
59
+ -webkit-text-fill-color: transparent;
60
+ animation: loading-gradient-flow 2s ease-in-out infinite;
61
+ -webkit-user-select: none;
62
+ -moz-user-select: none;
63
+ user-select: none;
64
+ margin: 0;
49
65
  }
50
- #splash .logo-box img { width: 40px; height: 40px; }
51
- #splash h1 { font-size: 1.5rem; font-weight: 700; margin: 0; }
52
- #splash .dots { display: flex; gap: 6px; }
53
- #splash .dots span {
54
- width: 8px; height: 8px; border-radius: 50%;
55
- background: #3b82f6;
56
- animation: bounce 1s infinite;
57
- }
58
- #splash .dots span:nth-child(2) { animation-delay: 0.1s; }
59
- #splash .dots span:nth-child(3) { animation-delay: 0.2s; }
60
- @keyframes bounce {
61
- 0%, 80%, 100% { transform: translateY(0); }
62
- 40% { transform: translateY(-8px); }
66
+ @keyframes loading-gradient-flow {
67
+ 0% { background-position: 100% 50%; }
68
+ 50% { background-position: 0% 50%; }
69
+ 100% { background-position: 100% 50%; }
63
70
  }
64
71
  </style>
65
- <script type="module" crossorigin src="/app/assets/index-HaY-3pK1.js"></script>
66
- <link rel="modulepreload" crossorigin href="/app/assets/vendor-react-96lCPsRK.js">
67
- <link rel="modulepreload" crossorigin href="/app/assets/vendor-markdown-CimbIo6Y.js">
68
- <link rel="modulepreload" crossorigin href="/app/assets/vendor-syntax-LS_Nt30I.js">
69
- <link rel="modulepreload" crossorigin href="/app/assets/vendor-icons-GyYE35HP.js">
72
+ <script type="module" crossorigin src="/app/assets/index-rUkK9FDP.js"></script>
73
+ <link rel="modulepreload" crossorigin href="/app/assets/vendor-react-wFkb6mSf.js">
74
+ <link rel="modulepreload" crossorigin href="/app/assets/vendor-markdown-Cdm6NEGf.js">
75
+ <link rel="modulepreload" crossorigin href="/app/assets/vendor-syntax-C_UZR7tc.js">
76
+ <link rel="modulepreload" crossorigin href="/app/assets/vendor-icons-CfjIpdrD.js">
70
77
  <link rel="modulepreload" crossorigin href="/app/assets/vendor-i18n-DCFGyhQR.js">
71
- <link rel="stylesheet" crossorigin href="/app/assets/index-46kkVu2i.css">
78
+ <link rel="stylesheet" crossorigin href="/app/assets/index-CnNNzw9A.css">
72
79
  </head>
73
80
  <body>
74
81
  <!-- Static splash screen: visible INSTANTLY (pure HTML, no JS needed) -->
75
82
  <!-- React replaces this entire div when it mounts -->
76
83
  <div id="root">
77
84
  <div id="splash">
78
- <div class="logo-box">
79
- <img src="/app/favicon.svg" alt="UpfynAI" />
80
- </div>
81
- <h1>UpfynAI</h1>
82
- <div class="dots">
83
- <span></span><span></span><span></span>
84
- </div>
85
+ <h1 class="app-loading-title">Upfyn AI</h1>
85
86
  </div>
86
87
  </div>
87
88
 
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -2,57 +2,57 @@
2
2
  "name": "UpfynAI",
3
3
  "short_name": "UpfynAI",
4
4
  "description": "UpfynAI — Visual AI Coding Interface",
5
- "start_url": "/",
5
+ "start_url": "/app/",
6
6
  "display": "standalone",
7
- "background_color": "#ffffff",
8
- "theme_color": "#ffffff",
7
+ "background_color": "#0a0f1e",
8
+ "theme_color": "#0a0f1e",
9
9
  "orientation": "portrait-primary",
10
- "scope": "/",
10
+ "scope": "/app/",
11
11
  "icons": [
12
12
  {
13
- "src": "/icons/icon-72x72.png",
13
+ "src": "icons/icon-72x72.png",
14
14
  "sizes": "72x72",
15
15
  "type": "image/png",
16
16
  "purpose": "maskable any"
17
17
  },
18
18
  {
19
- "src": "/icons/icon-96x96.png",
19
+ "src": "icons/icon-96x96.png",
20
20
  "sizes": "96x96",
21
21
  "type": "image/png",
22
22
  "purpose": "maskable any"
23
23
  },
24
24
  {
25
- "src": "/icons/icon-128x128.png",
25
+ "src": "icons/icon-128x128.png",
26
26
  "sizes": "128x128",
27
27
  "type": "image/png",
28
28
  "purpose": "maskable any"
29
29
  },
30
30
  {
31
- "src": "/icons/icon-144x144.png",
31
+ "src": "icons/icon-144x144.png",
32
32
  "sizes": "144x144",
33
33
  "type": "image/png",
34
34
  "purpose": "maskable any"
35
35
  },
36
36
  {
37
- "src": "/icons/icon-152x152.png",
37
+ "src": "icons/icon-152x152.png",
38
38
  "sizes": "152x152",
39
39
  "type": "image/png",
40
40
  "purpose": "maskable any"
41
41
  },
42
42
  {
43
- "src": "/icons/icon-192x192.png",
43
+ "src": "icons/icon-192x192.png",
44
44
  "sizes": "192x192",
45
45
  "type": "image/png",
46
46
  "purpose": "maskable any"
47
47
  },
48
48
  {
49
- "src": "/icons/icon-384x384.png",
49
+ "src": "icons/icon-384x384.png",
50
50
  "sizes": "384x384",
51
51
  "type": "image/png",
52
52
  "purpose": "maskable any"
53
53
  },
54
54
  {
55
- "src": "/icons/icon-512x512.png",
55
+ "src": "icons/icon-512x512.png",
56
56
  "sizes": "512x512",
57
57
  "type": "image/png",
58
58
  "purpose": "maskable any"
@@ -46,7 +46,7 @@
46
46
 
47
47
  <h2>Client Configuration</h2>
48
48
 
49
- <p>Get your personalized MCP configuration from the <strong>Dashboard</strong> at <code>cli.upfyn.com/dashboard</code>. It includes the exact URL and credentials for your account — just copy and paste into your AI tool's MCP settings.</p>
49
+ <p>Get your personalized MCP configuration from the <strong>Dashboard</strong> at <code>code.upfyn.com/dashboard</code>. It includes the exact URL and credentials for your account — just copy and paste into your AI tool's MCP settings.</p>
50
50
 
51
51
  <h3>Claude Desktop</h3>
52
52
  <p>Add to <code>~/.claude/mcp_servers.json</code>:</p>
@@ -1,7 +1,7 @@
1
1
  // Service Worker for UpfynAI
2
- // v4proper caching: cache-first for static assets, network-first for navigation
2
+ // v5cache bust for logo/splash update
3
3
 
4
- const CACHE_NAME = 'upfyn-v4';
4
+ const CACHE_NAME = 'upfyn-v5';
5
5
  const PRECACHE_ASSETS = [
6
6
  '/offline.html',
7
7
  '/favicon.svg',
package/package.json CHANGED
@@ -1,136 +1,87 @@
1
1
  {
2
2
  "name": "upfynai-code",
3
- "version": "3.0.4",
4
- "description": "Visual AI coding interface for Claude Code, Cursor & Codex. Canvas whiteboard, multi-agent chat, terminal, git, voice assistant. Self-host locally or connect to cli.upfyn.com for remote access.",
3
+ "version": "3.2.0",
4
+ "description": "AI coding CLI connect your machine to code.upfyn.com and control it from any browser. Part of the Upfyn Desktop + Web ecosystem.",
5
5
  "type": "module",
6
- "main": "server/index.js",
7
6
  "bin": {
8
- "upfynai-code": "server/cli.js",
9
- "uc": "server/cli.js"
7
+ "uc": "./bin/cli.js",
8
+ "upfynai-code": "./bin/cli.js"
10
9
  },
11
10
  "files": [
12
- "server/",
13
- "shared/",
14
- "client/dist/",
11
+ "bin/",
12
+ "src/",
13
+ "dist/",
15
14
  "scripts/",
16
- "commands/",
17
- "README.md"
15
+ "README.md",
16
+ "LICENSE"
18
17
  ],
19
18
  "scripts": {
20
- "start": "node server/index.js",
21
- "build": "node scripts/build-client.js",
22
- "test": "node --test --test-force-exit server/tests/sessions.test.js server/tests/relay-flow.test.js",
23
- "typecheck": "npx tsc --noEmit -p client/tsconfig.json",
24
- "postinstall": "node scripts/fix-node-pty.js || true && node scripts/install-commands.js"
19
+ "start": "node bin/cli.js",
20
+ "postinstall": "node scripts/postinstall.js",
21
+ "prepublishOnly": "node scripts/prepublish.js"
25
22
  },
26
23
  "keywords": [
24
+ "upfyn",
25
+ "upfynai-code",
27
26
  "ai",
28
- "ai-coding",
29
- "claude-code",
30
- "cursor",
31
- "codex",
32
- "coding-assistant",
33
- "canvas",
34
- "whiteboard",
35
- "visual-coding",
27
+ "coding",
28
+ "cli",
36
29
  "terminal",
30
+ "remote-development",
31
+ "code-editor",
32
+ "ai-assistant",
33
+ "ai-coding",
34
+ "developer-tools",
35
+ "devtools",
36
+ "browser-ide",
37
+ "remote-access",
38
+ "websocket",
37
39
  "git",
40
+ "file-explorer",
41
+ "desktop-app",
42
+ "ecosystem",
38
43
  "mcp",
39
- "relay",
40
- "byok",
41
- "voice-assistant",
42
- "upfynai",
43
- "thinqmesh"
44
+ "model-context-protocol",
45
+ "desktop",
46
+ "tauri",
47
+ "ai-modes",
48
+ "plan-code-analyse",
49
+ "remote-control"
44
50
  ],
45
- "author": "Thinqmesh Technologies <hello@thinqmesh.com>",
51
+ "author": {
52
+ "name": "Thinqmesh Technologies",
53
+ "url": "https://code.upfyn.com"
54
+ },
46
55
  "license": "GPL-3.0",
47
- "homepage": "https://thinqmesh.com",
56
+ "homepage": "https://code.upfyn.com",
48
57
  "repository": {
49
58
  "type": "git",
50
- "url": "git+https://github.com/AnitChaudhry/UpfynAI-Code.git"
59
+ "url": "git+https://github.com/AnitChaudhry/UpfynAI-Code.git",
60
+ "directory": "packages/cli"
51
61
  },
52
62
  "bugs": {
53
63
  "url": "https://github.com/AnitChaudhry/UpfynAI-Code/issues"
54
64
  },
55
65
  "dependencies": {
56
66
  "@anthropic-ai/claude-agent-sdk": "^0.1.71",
57
- "@anthropic-ai/sdk": "^0.78.0",
58
- "@iarna/toml": "^2.2.5",
59
- "@modelcontextprotocol/sdk": "^1.26.0",
60
- "@openai/codex-sdk": "^0.101.0",
61
- "bcryptjs": "^3.0.3",
62
- "chokidar": "^4.0.3",
63
- "cookie-parser": "^1.4.7",
64
- "cors": "^2.8.5",
65
- "cross-spawn": "^7.0.3",
66
- "edge-tts-universal": "^1.3.3",
67
- "express": "^4.18.2",
68
- "form-data": "^4.0.5",
69
- "gray-matter": "^4.0.3",
67
+ "chalk": "^5.3.0",
68
+ "commander": "^12.1.0",
69
+ "express": "^4.21.0",
70
+ "http-proxy-middleware": "^3.0.0",
70
71
  "js-yaml": "^4.1.0",
71
- "jsonwebtoken": "^9.0.2",
72
- "mime-types": "^3.0.1",
73
- "multer": "^2.0.2",
74
- "ws": "^8.14.2",
75
- "zod": "^3.25.76"
72
+ "open": "^10.1.0",
73
+ "prompts": "^2.4.2",
74
+ "ws": "^8.18.0"
76
75
  },
77
76
  "optionalDependencies": {
78
- "libsql": "^0.5.22",
79
77
  "node-pty": "^1.1.0-beta34"
80
78
  },
81
- "devDependencies": {
82
- "@codemirror/lang-css": "^6.3.1",
83
- "@codemirror/lang-html": "^6.4.9",
84
- "@codemirror/lang-javascript": "^6.2.4",
85
- "@codemirror/lang-json": "^6.0.1",
86
- "@codemirror/lang-markdown": "^6.3.3",
87
- "@codemirror/lang-python": "^6.2.1",
88
- "@codemirror/merge": "^6.11.1",
89
- "@codemirror/theme-one-dark": "^6.1.2",
90
- "@replit/codemirror-minimap": "^0.5.2",
91
- "@tailwindcss/typography": "^0.5.16",
92
- "@types/node": "^22.19.7",
93
- "@types/react": "^18.2.43",
94
- "@types/react-dom": "^18.2.17",
95
- "@uiw/react-codemirror": "^4.23.13",
96
- "@vapi-ai/web": "^2.5.2",
97
- "@vitejs/plugin-react": "^4.5.2",
98
- "@xterm/addon-clipboard": "^0.1.0",
99
- "@xterm/addon-fit": "^0.10.0",
100
- "@xterm/addon-web-links": "^0.11.0",
101
- "@xterm/addon-webgl": "^0.18.0",
102
- "@xterm/xterm": "^5.5.0",
103
- "@xyflow/react": "^12.10.1",
104
- "autoprefixer": "^10.4.16",
105
- "class-variance-authority": "^0.7.1",
106
- "clsx": "^2.1.1",
107
- "dagre": "^0.8.5",
108
- "elkjs": "^0.11.0",
109
- "fuse.js": "^7.0.0",
110
- "i18next": "^25.7.4",
111
- "i18next-browser-languagedetector": "^8.2.0",
112
- "katex": "^0.16.25",
113
- "lightningcss": "^1.31.1",
114
- "lucide-react": "^0.515.0",
115
- "mermaid": "^11.12.3",
116
- "pdfjs-dist": "^5.4.624",
117
- "postcss": "^8.4.32",
118
- "react": "^18.2.0",
119
- "react-diff-viewer-continued": "^4.1.2",
120
- "react-dom": "^18.2.0",
121
- "react-dropzone": "^14.2.3",
122
- "react-i18next": "^16.5.3",
123
- "react-markdown": "^10.1.0",
124
- "react-router-dom": "^6.8.1",
125
- "react-syntax-highlighter": "^15.6.1",
126
- "rehype-katex": "^7.0.1",
127
- "rehype-raw": "^7.0.0",
128
- "remark-gfm": "^4.0.0",
129
- "remark-math": "^6.0.0",
130
- "tailwind-merge": "^3.3.1",
131
- "tailwindcss": "^3.4.0",
132
- "typescript": "^5.9.3",
133
- "vite": "~6.3.5",
134
- "zustand": "^5.0.11"
135
- }
79
+ "engines": {
80
+ "node": ">=18.0.0"
81
+ },
82
+ "os": [
83
+ "darwin",
84
+ "linux",
85
+ "win32"
86
+ ]
136
87
  }
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import { playInstallAnimation } from '../src/animation.js';
3
+
4
+ try {
5
+ await playInstallAnimation();
6
+ } catch {
7
+ // Silently fail — animation is cosmetic, don't break installs
8
+ console.log('\n ✓ upfynai-code installed. Run `uc --help` to get started.\n');
9
+ }
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Prepublish script — copies shared agents into dist/ for npm distribution.
4
+ *
5
+ * In the monorepo, connect.js imports from ../../shared/agents/.
6
+ * For npm, we copy those files into dist/agents/ and connect.js
7
+ * resolves them at runtime.
8
+ */
9
+ import { cpSync, mkdirSync, rmSync, existsSync } from 'fs';
10
+ import { join, dirname } from 'path';
11
+ import { fileURLToPath } from 'url';
12
+
13
+ const __dirname = dirname(fileURLToPath(import.meta.url));
14
+ const cliRoot = join(__dirname, '..');
15
+ const distAgents = join(cliRoot, 'dist', 'agents');
16
+ const sharedAgents = join(cliRoot, '..', 'shared', 'agents');
17
+
18
+ // Clean
19
+ if (existsSync(distAgents)) rmSync(distAgents, { recursive: true });
20
+ mkdirSync(distAgents, { recursive: true });
21
+
22
+ // Copy all agent files
23
+ const files = [
24
+ 'index.js', 'utils.js',
25
+ 'claude.js', 'codex.js', 'cursor.js',
26
+ 'shell.js', 'files.js', 'git.js', 'exec.js', 'detect.js',
27
+ 'gitagent.js',
28
+ ];
29
+
30
+ let copied = 0;
31
+ for (const file of files) {
32
+ const src = join(sharedAgents, file);
33
+ const dest = join(distAgents, file);
34
+ if (existsSync(src)) {
35
+ cpSync(src, dest);
36
+ copied++;
37
+ } else {
38
+ console.warn(` [WARN] Missing: ${file}`);
39
+ }
40
+ }
41
+
42
+ // Copy gitagent module (parser + prompt-builder) — needed by gitagent agent
43
+ const sharedGitagent = join(cliRoot, '..', 'shared', 'gitagent');
44
+ const distGitagent = join(cliRoot, 'dist', 'gitagent');
45
+ if (existsSync(distGitagent)) rmSync(distGitagent, { recursive: true });
46
+ mkdirSync(distGitagent, { recursive: true });
47
+
48
+ const gitagentFiles = ['index.js', 'parser.js', 'prompt-builder.js'];
49
+ for (const file of gitagentFiles) {
50
+ const src = join(sharedGitagent, file);
51
+ const dest = join(distGitagent, file);
52
+ if (existsSync(src)) {
53
+ cpSync(src, dest);
54
+ copied++;
55
+ }
56
+ }
57
+
58
+ console.log(` [prepublish] Copied ${copied} agent files to dist/`);
59
+
60
+ // ─── Copy built client dist for local-server static serving ──────────────
61
+ const clientSrc = join(cliRoot, '..', '..', 'backend', 'client', 'dist');
62
+ const clientDest = join(cliRoot, 'dist', 'client');
63
+
64
+ if (existsSync(clientSrc)) {
65
+ if (existsSync(clientDest)) rmSync(clientDest, { recursive: true });
66
+ cpSync(clientSrc, clientDest, { recursive: true });
67
+ console.log(` [prepublish] Copied client dist to dist/client/`);
68
+ } else {
69
+ console.warn(` [WARN] Client dist not found at ${clientSrc} — run 'npm run build' in backend/client first`);
70
+ }
71
+
72
+ // ─── Note: local-server bundling ─────────────────────────────────────────
73
+ // For npm global installs, local-server needs to be bundled with esbuild
74
+ // into dist/local-server.js (with node-pty as external).
75
+ // Run: npx esbuild packages/local-server/index.js --bundle --platform=node --outfile=packages/cli/dist/local-server.js --external:node-pty
76
+ // This is handled by the CI/CD pipeline before npm publish.
77
+ console.log(` [prepublish] Done.`);