upfynai-code 2.9.0 → 2.9.2

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 (229) hide show
  1. package/README.md +91 -66
  2. package/client/dist/api-docs.html +838 -0
  3. package/client/dist/assets/AppContent-BXZDeSIC.js +545 -0
  4. package/client/dist/assets/CanvasFullScreen-mnpCnLZ9.js +1 -0
  5. package/client/dist/assets/CanvasWorkspace-4CqmjAVQ.js +163 -0
  6. package/client/dist/assets/DashboardPanel-zFIFlw56.js +1 -0
  7. package/client/dist/assets/FileTree-B0c_GaB3.js +1 -0
  8. package/client/dist/assets/GitPanel-DUP4zVU4.js +2 -0
  9. package/client/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  10. package/client/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  11. package/client/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  12. package/client/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  13. package/client/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  14. package/client/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  15. package/client/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  16. package/client/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  17. package/client/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  18. package/client/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  19. package/client/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  20. package/client/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  21. package/client/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  22. package/client/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  23. package/client/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  24. package/client/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  25. package/client/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  26. package/client/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  27. package/client/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  28. package/client/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  29. package/client/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  30. package/client/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  31. package/client/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  32. package/client/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  33. package/client/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  34. package/client/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  35. package/client/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  36. package/client/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  37. package/client/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  38. package/client/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  39. package/client/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  40. package/client/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  41. package/client/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  42. package/client/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  43. package/client/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  44. package/client/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  45. package/client/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  46. package/client/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  47. package/client/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  48. package/client/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  49. package/client/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  50. package/client/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  51. package/client/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  52. package/client/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  53. package/client/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  54. package/client/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  55. package/client/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  56. package/client/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  57. package/client/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  58. package/client/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  59. package/client/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  60. package/client/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  61. package/client/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  62. package/client/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  63. package/client/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  64. package/client/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  65. package/client/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  66. package/client/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  67. package/client/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  68. package/client/dist/assets/LoginModal-BRycfsyD.js +13 -0
  69. package/client/dist/assets/MarkdownPreview-DHmk3qzu.js +1 -0
  70. package/client/dist/assets/MermaidBlock-BuBc_G-F.js +2 -0
  71. package/client/dist/assets/Onboarding-BcnaZZ0o.js +1 -0
  72. package/client/dist/assets/PreviewPanel-CqCa92Tf.js +32 -0
  73. package/client/dist/assets/SetupForm-S0g6u5yT.js +1 -0
  74. package/client/dist/assets/WorkflowsPanel-CouH9JDO.js +1 -0
  75. package/client/dist/assets/index-BFuqS0tY.css +1 -0
  76. package/client/dist/assets/index-CNDcVl2g.js +68 -0
  77. package/client/dist/assets/pdf-CE_K4jFx.js +12 -0
  78. package/client/dist/assets/vendor-canvas-BZV40eAE.css +1 -0
  79. package/client/dist/assets/vendor-canvas-D39yWul6.js +49 -0
  80. package/client/dist/assets/vendor-codemirror-CbtmxxaB.js +35 -0
  81. package/client/dist/assets/vendor-diff-DNQpbhrT.js +69 -0
  82. package/client/dist/assets/vendor-i18n-DCFGyhQR.js +1 -0
  83. package/client/dist/assets/vendor-icons-BaD0x9SL.js +711 -0
  84. package/client/dist/assets/vendor-markdown-CimbIo6Y.js +296 -0
  85. package/client/dist/assets/vendor-mermaid-CH7SGc99.js +2556 -0
  86. package/client/dist/assets/vendor-react-96lCPsRK.js +67 -0
  87. package/client/dist/assets/vendor-syntax-DuHI9Ok6.js +16 -0
  88. package/client/dist/assets/vendor-xterm-CZq1hqo1.js +66 -0
  89. package/client/dist/assets/vendor-xterm-qxJ8_QYu.css +32 -0
  90. package/client/dist/clear-cache.html +85 -0
  91. package/client/dist/convert-icons.md +53 -0
  92. package/client/dist/favicon.png +0 -0
  93. package/client/dist/favicon.svg +5 -0
  94. package/client/dist/generate-icons.js +49 -0
  95. package/client/dist/icons/claude-ai-icon.svg +1 -0
  96. package/client/dist/icons/codex-white.svg +3 -0
  97. package/client/dist/icons/codex.svg +3 -0
  98. package/client/dist/icons/cursor-white.svg +12 -0
  99. package/client/dist/icons/cursor.svg +1 -0
  100. package/client/dist/icons/icon-128x128.png +0 -0
  101. package/client/dist/icons/icon-128x128.svg +5 -0
  102. package/client/dist/icons/icon-144x144.png +0 -0
  103. package/client/dist/icons/icon-144x144.svg +5 -0
  104. package/client/dist/icons/icon-152x152.png +0 -0
  105. package/client/dist/icons/icon-152x152.svg +5 -0
  106. package/client/dist/icons/icon-192x192.png +0 -0
  107. package/client/dist/icons/icon-192x192.svg +5 -0
  108. package/client/dist/icons/icon-384x384.png +0 -0
  109. package/client/dist/icons/icon-384x384.svg +5 -0
  110. package/client/dist/icons/icon-512x512.png +0 -0
  111. package/client/dist/icons/icon-512x512.svg +5 -0
  112. package/client/dist/icons/icon-72x72.png +0 -0
  113. package/client/dist/icons/icon-72x72.svg +5 -0
  114. package/client/dist/icons/icon-96x96.png +0 -0
  115. package/client/dist/icons/icon-96x96.svg +5 -0
  116. package/client/dist/icons/icon-template.svg +5 -0
  117. package/client/dist/index.html +119 -0
  118. package/client/dist/logo-128.png +0 -0
  119. package/client/dist/logo-256.png +0 -0
  120. package/client/dist/logo-32.png +0 -0
  121. package/client/dist/logo-512.png +0 -0
  122. package/client/dist/logo-64.png +0 -0
  123. package/client/dist/logo.svg +14 -0
  124. package/client/dist/manifest.json +61 -0
  125. package/client/dist/mcp-docs.html +108 -0
  126. package/client/dist/offline.html +84 -0
  127. package/client/dist/screenshots/cli-selection.png +0 -0
  128. package/client/dist/screenshots/desktop-main.png +0 -0
  129. package/client/dist/screenshots/mobile-chat.png +0 -0
  130. package/client/dist/screenshots/tools-modal.png +0 -0
  131. package/client/dist/sw.js +82 -0
  132. package/commands/upfynai-connect.md +59 -0
  133. package/commands/upfynai-disconnect.md +31 -0
  134. package/commands/upfynai-doctor.md +99 -0
  135. package/commands/upfynai-export.md +49 -0
  136. package/commands/upfynai-local.md +82 -0
  137. package/commands/upfynai-status.md +75 -0
  138. package/commands/upfynai-stop.md +49 -0
  139. package/commands/upfynai-uninstall.md +58 -0
  140. package/commands/upfynai.md +69 -0
  141. package/package.json +143 -82
  142. package/scripts/build-client.js +17 -0
  143. package/scripts/fix-node-pty.js +67 -0
  144. package/scripts/install-commands.js +78 -0
  145. package/server/agent-loop.js +242 -0
  146. package/server/auto-compact.js +99 -0
  147. package/server/claude-sdk.js +797 -0
  148. package/server/cli-ui.js +785 -0
  149. package/server/cli.js +596 -0
  150. package/server/constants/config.js +31 -0
  151. package/server/cursor-cli.js +270 -0
  152. package/server/database/auth.db +0 -0
  153. package/server/database/db.js +1391 -0
  154. package/server/database/init.sql +70 -0
  155. package/server/index.js +3799 -0
  156. package/server/load-env.js +26 -0
  157. package/server/mcp-server.js +621 -0
  158. package/server/middleware/auth.js +176 -0
  159. package/server/middleware/relayHelpers.js +44 -0
  160. package/server/middleware/sandboxRouter.js +174 -0
  161. package/server/openai-codex.js +403 -0
  162. package/server/openrouter.js +137 -0
  163. package/server/projects.js +1807 -0
  164. package/server/provider-factory.js +174 -0
  165. package/server/relay-client.js +379 -0
  166. package/server/routes/agent.js +1226 -0
  167. package/server/routes/auth.js +554 -0
  168. package/server/routes/canvas.js +53 -0
  169. package/server/routes/cli-auth.js +263 -0
  170. package/server/routes/codex.js +396 -0
  171. package/server/routes/commands.js +707 -0
  172. package/server/routes/composio.js +176 -0
  173. package/server/routes/cursor.js +770 -0
  174. package/server/routes/dashboard.js +295 -0
  175. package/server/routes/git.js +1208 -0
  176. package/server/routes/keys.js +34 -0
  177. package/server/routes/mcp-utils.js +48 -0
  178. package/server/routes/mcp.js +661 -0
  179. package/server/routes/payments.js +227 -0
  180. package/server/routes/projects.js +655 -0
  181. package/server/routes/sessions.js +146 -0
  182. package/server/routes/settings.js +261 -0
  183. package/server/routes/taskmaster.js +1928 -0
  184. package/server/routes/user.js +106 -0
  185. package/server/routes/vapi-chat.js +624 -0
  186. package/server/routes/voice.js +235 -0
  187. package/server/routes/webhooks.js +166 -0
  188. package/server/routes/workflows.js +312 -0
  189. package/server/sandbox.js +120 -0
  190. package/server/services/composio.js +204 -0
  191. package/server/services/sessionRegistry.js +139 -0
  192. package/server/services/whisperService.js +84 -0
  193. package/server/services/workflowScheduler.js +206 -0
  194. package/server/tests/relay-flow.test.js +570 -0
  195. package/server/tests/sessions.test.js +259 -0
  196. package/server/utils/commandParser.js +303 -0
  197. package/server/utils/email.js +61 -0
  198. package/server/utils/gitConfig.js +24 -0
  199. package/server/utils/mcp-detector.js +198 -0
  200. package/server/utils/taskmaster-websocket.js +129 -0
  201. package/shared/integrationCatalog.d.ts +12 -0
  202. package/shared/integrationCatalog.js +172 -0
  203. package/shared/modelConstants.js +96 -0
  204. package/bin/cli.js +0 -97
  205. package/dist/agents/claude.js +0 -229
  206. package/dist/agents/codex.js +0 -48
  207. package/dist/agents/cursor.js +0 -48
  208. package/dist/agents/detect.js +0 -51
  209. package/dist/agents/exec.js +0 -31
  210. package/dist/agents/files.js +0 -105
  211. package/dist/agents/git.js +0 -18
  212. package/dist/agents/gitagent.js +0 -67
  213. package/dist/agents/index.js +0 -88
  214. package/dist/agents/shell.js +0 -38
  215. package/dist/agents/utils.js +0 -136
  216. package/scripts/postinstall.js +0 -9
  217. package/scripts/prepublish.js +0 -58
  218. package/src/animation.js +0 -228
  219. package/src/auth.js +0 -122
  220. package/src/config.js +0 -40
  221. package/src/connect.js +0 -416
  222. package/src/launch.js +0 -78
  223. package/src/mcp.js +0 -57
  224. package/src/permissions.js +0 -140
  225. package/src/persistent-shell.js +0 -261
  226. package/src/server.js +0 -54
  227. /package/{dist → shared}/gitagent/index.js +0 -0
  228. /package/{dist → shared}/gitagent/parser.js +0 -0
  229. /package/{dist → shared}/gitagent/prompt-builder.js +0 -0
@@ -0,0 +1,49 @@
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
@@ -0,0 +1,58 @@
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
@@ -0,0 +1,69 @@
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
package/package.json CHANGED
@@ -1,82 +1,143 @@
1
- {
2
- "name": "upfynai-code",
3
- "version": "2.9.0",
4
- "description": "Unified AI coding interface access AI chat, terminal, file explorer, git, and visual canvas from any browser. Connect your local machine and code from anywhere.",
5
- "type": "module",
6
- "bin": {
7
- "uc": "./bin/cli.js",
8
- "upfynai-code": "./bin/cli.js"
9
- },
10
- "files": [
11
- "bin/",
12
- "src/",
13
- "dist/",
14
- "scripts/",
15
- "README.md",
16
- "LICENSE"
17
- ],
18
- "scripts": {
19
- "start": "node bin/cli.js",
20
- "postinstall": "node scripts/postinstall.js",
21
- "prepublishOnly": "node scripts/prepublish.js"
22
- },
23
- "keywords": [
24
- "upfyn",
25
- "upfynai-code",
26
- "ai",
27
- "coding",
28
- "cli",
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",
39
- "git",
40
- "file-explorer",
41
- "canvas",
42
- "whiteboard",
43
- "mcp",
44
- "model-context-protocol"
45
- ],
46
- "author": {
47
- "name": "Thinqmesh Technologies",
48
- "url": "https://cli.upfyn.com"
49
- },
50
- "license": "GPL-3.0",
51
- "homepage": "https://cli.upfyn.com",
52
- "repository": {
53
- "type": "git",
54
- "url": "git+https://github.com/AnitChaudhry/UpfynAI-Code.git",
55
- "directory": "packages/cli"
56
- },
57
- "bugs": {
58
- "url": "https://github.com/AnitChaudhry/UpfynAI-Code/issues"
59
- },
60
- "dependencies": {
61
- "@anthropic-ai/claude-agent-sdk": "^0.1.71",
62
- "chalk": "^5.3.0",
63
- "commander": "^12.1.0",
64
- "express": "^4.21.0",
65
- "http-proxy-middleware": "^3.0.0",
66
- "js-yaml": "^4.1.0",
67
- "open": "^10.1.0",
68
- "prompts": "^2.4.2",
69
- "ws": "^8.18.0"
70
- },
71
- "optionalDependencies": {
72
- "node-pty": "^1.1.0-beta34"
73
- },
74
- "engines": {
75
- "node": ">=18.0.0"
76
- },
77
- "os": [
78
- "darwin",
79
- "linux",
80
- "win32"
81
- ]
82
- }
1
+ {
2
+ "name": "upfynai-code",
3
+ "version": "2.9.2",
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.",
5
+ "type": "module",
6
+ "main": "server/index.js",
7
+ "bin": {
8
+ "upfynai-code": "server/cli.js",
9
+ "uc": "server/cli.js"
10
+ },
11
+ "files": [
12
+ "server/",
13
+ "shared/",
14
+ "client/dist/",
15
+ "scripts/",
16
+ "commands/",
17
+ "README.md"
18
+ ],
19
+ "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"
25
+ },
26
+ "keywords": [
27
+ "ai",
28
+ "ai-coding",
29
+ "claude-code",
30
+ "cursor",
31
+ "codex",
32
+ "coding-assistant",
33
+ "canvas",
34
+ "whiteboard",
35
+ "visual-coding",
36
+ "terminal",
37
+ "git",
38
+ "mcp",
39
+ "relay",
40
+ "byok",
41
+ "voice-assistant",
42
+ "upfynai",
43
+ "thinqmesh"
44
+ ],
45
+ "author": "Thinqmesh Technologies <hello@thinqmesh.com>",
46
+ "license": "GPL-3.0",
47
+ "homepage": "https://thinqmesh.com",
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "git+https://github.com/thinqmesh/upfynai-code.git"
51
+ },
52
+ "bugs": {
53
+ "url": "https://github.com/thinqmesh/upfynai-code/issues"
54
+ },
55
+ "dependencies": {
56
+ "@anthropic-ai/claude-agent-sdk": "^0.1.71",
57
+ "@anthropic-ai/sdk": "^0.78.0",
58
+ "@codemirror/lang-css": "^6.3.1",
59
+ "@codemirror/lang-html": "^6.4.9",
60
+ "@codemirror/lang-javascript": "^6.2.4",
61
+ "@codemirror/lang-json": "^6.0.1",
62
+ "@codemirror/lang-markdown": "^6.3.3",
63
+ "@codemirror/lang-python": "^6.2.1",
64
+ "@codemirror/merge": "^6.11.1",
65
+ "@codemirror/theme-one-dark": "^6.1.2",
66
+ "@iarna/toml": "^2.2.5",
67
+ "@libsql/client": "^0.14.0",
68
+ "@modelcontextprotocol/sdk": "^1.26.0",
69
+ "@neondatabase/serverless": "^1.0.2",
70
+ "@octokit/rest": "^22.0.0",
71
+ "@openai/codex-sdk": "^0.101.0",
72
+ "@replit/codemirror-minimap": "^0.5.2",
73
+ "@tailwindcss/typography": "^0.5.16",
74
+ "@uiw/react-codemirror": "^4.23.13",
75
+ "@vapi-ai/web": "^2.5.2",
76
+ "@vitejs/plugin-react": "^4.5.2",
77
+ "@xterm/addon-clipboard": "^0.1.0",
78
+ "@xterm/addon-fit": "^0.10.0",
79
+ "@xterm/addon-web-links": "^0.11.0",
80
+ "@xterm/addon-webgl": "^0.18.0",
81
+ "@xterm/xterm": "^5.5.0",
82
+ "@xyflow/react": "^12.10.1",
83
+ "autoprefixer": "^10.4.16",
84
+ "bcryptjs": "^3.0.3",
85
+ "chokidar": "^4.0.3",
86
+ "class-variance-authority": "^0.7.1",
87
+ "clsx": "^2.1.1",
88
+ "composio-core": "^0.5.39",
89
+ "cookie-parser": "^1.4.7",
90
+ "cors": "^2.8.5",
91
+ "cross-spawn": "^7.0.3",
92
+ "dagre": "^0.8.5",
93
+ "edge-tts-universal": "^1.3.3",
94
+ "elkjs": "^0.11.0",
95
+ "express": "^4.18.2",
96
+ "form-data": "^4.0.5",
97
+ "fuse.js": "^7.0.0",
98
+ "google-auth-library": "^10.6.1",
99
+ "gray-matter": "^4.0.3",
100
+ "i18next": "^25.7.4",
101
+ "i18next-browser-languagedetector": "^8.2.0",
102
+ "js-yaml": "^4.1.0",
103
+ "jsonwebtoken": "^9.0.2",
104
+ "katex": "^0.16.25",
105
+ "lucide-react": "^0.515.0",
106
+ "mermaid": "^11.12.3",
107
+ "mime-types": "^3.0.1",
108
+ "multer": "^2.0.2",
109
+ "node-cron": "^4.2.1",
110
+ "pdfjs-dist": "^5.4.624",
111
+ "postcss": "^8.4.32",
112
+ "razorpay": "^2.9.6",
113
+ "react": "^18.2.0",
114
+ "react-diff-viewer-continued": "^4.1.2",
115
+ "react-dom": "^18.2.0",
116
+ "react-dropzone": "^14.2.3",
117
+ "react-i18next": "^16.5.3",
118
+ "react-markdown": "^10.1.0",
119
+ "react-router-dom": "^6.8.1",
120
+ "react-syntax-highlighter": "^15.6.1",
121
+ "rehype-katex": "^7.0.1",
122
+ "rehype-raw": "^7.0.0",
123
+ "remark-gfm": "^4.0.0",
124
+ "remark-math": "^6.0.0",
125
+ "resend": "^6.9.2",
126
+ "tailwind-merge": "^3.3.1",
127
+ "tailwindcss": "^3.4.0",
128
+ "vite": "~6.3.5",
129
+ "ws": "^8.14.2",
130
+ "zod": "^3.25.76",
131
+ "zustand": "^5.0.11"
132
+ },
133
+ "optionalDependencies": {
134
+ "node-pty": "^1.1.0-beta34"
135
+ },
136
+ "devDependencies": {
137
+ "@types/node": "^22.19.7",
138
+ "@types/react": "^18.2.43",
139
+ "@types/react-dom": "^18.2.17",
140
+ "lightningcss": "^1.31.1",
141
+ "typescript": "^5.9.3"
142
+ }
143
+ }
@@ -0,0 +1,17 @@
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();
@@ -0,0 +1,67 @@
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);
@@ -0,0 +1,78 @@
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();