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
@@ -1,121 +0,0 @@
1
- #!/usr/bin/env bash
2
- # skill-statusline v2.0 — Entry point
3
- # Delegates to modular v2 engine if installed, falls back to v1 inline
4
-
5
- STATUSLINE_DIR="${HOME}/.claude/statusline"
6
-
7
- if [ -f "${STATUSLINE_DIR}/core.sh" ]; then
8
- # v2: modular engine with themes, layouts, accurate context
9
- exec bash "${STATUSLINE_DIR}/core.sh"
10
- fi
11
-
12
- # ── v1 fallback (inline legacy script) ──
13
- # This runs if only statusline-command.sh was copied without the statusline/ directory
14
-
15
- input=$(cat)
16
-
17
- json_val() {
18
- echo "$input" | grep -o "\"$1\"[[:space:]]*:[[:space:]]*\"[^\"]*\"" | head -1 | sed 's/.*:.*"\(.*\)"/\1/'
19
- }
20
- json_num() {
21
- echo "$input" | grep -o "\"$1\"[[:space:]]*:[[:space:]]*[0-9.]*" | head -1 | sed 's/.*:[[:space:]]*//'
22
- }
23
- to_fwd() {
24
- echo "$1" | tr '\\' '/' | sed 's|//\+|/|g'
25
- }
26
- rpad() {
27
- local str="$1" w="$2"
28
- local plain
29
- plain=$(printf '%b' "$str" | sed $'s/\033\\[[0-9;]*m//g')
30
- local vlen=${#plain}
31
- local need=$(( w - vlen ))
32
- printf '%b' "$str"
33
- [ "$need" -gt 0 ] && printf "%${need}s" ""
34
- }
35
-
36
- RST='\033[0m'; BOLD='\033[1m'
37
- CYAN='\033[38;2;6;182;212m'; PURPLE='\033[38;2;168;85;247m'
38
- GREEN='\033[38;2;34;197;94m'; YELLOW='\033[38;2;245;158;11m'
39
- RED='\033[38;2;239;68;68m'; ORANGE='\033[38;2;251;146;60m'
40
- WHITE='\033[38;2;228;228;231m'; PINK='\033[38;2;236;72;153m'
41
- SEP_C='\033[38;2;55;55;62m'; DIM_BAR='\033[38;2;40;40;45m'
42
-
43
- cwd=$(json_val "current_dir")
44
- [ -z "$cwd" ] && cwd=$(json_val "cwd")
45
- if [ -z "$cwd" ]; then dir_label="~"; clean_cwd=""
46
- else
47
- clean_cwd=$(to_fwd "$cwd")
48
- dir_label=$(echo "$clean_cwd" | awk -F'/' '{if(NF>3) print $(NF-2)"/"$(NF-1)"/"$NF; else if(NF>2) print $(NF-1)"/"$NF; else print $0}')
49
- [ -z "$dir_label" ] && dir_label="~"
50
- fi
51
-
52
- model_display=$(json_val "display_name"); model_id=$(json_val "id")
53
- [ -z "$model_display" ] && model_display="unknown"
54
- model_ver=""; [ -n "$model_id" ] && model_ver=$(echo "$model_id" | sed -n 's/.*-\([0-9]*\)-\([0-9]*\)$/\1.\2/p')
55
- if [ -n "$model_ver" ] && ! echo "$model_display" | grep -q '[0-9]'; then model_full="${model_display} ${model_ver}"; else model_full="$model_display"; fi
56
-
57
- pct=$(json_num "used_percentage"); [ -z "$pct" ] && pct="0"; pct=$(echo "$pct" | cut -d. -f1)
58
- if [ "$pct" -gt 75 ] 2>/dev/null; then CTX_CLR="$RED"
59
- elif [ "$pct" -gt 40 ] 2>/dev/null; then CTX_CLR="$ORANGE"
60
- else CTX_CLR="$WHITE"; fi
61
- BAR_WIDTH=40; filled=$(( pct * BAR_WIDTH / 100 )); [ "$filled" -gt "$BAR_WIDTH" ] && filled=$BAR_WIDTH
62
- empty=$(( BAR_WIDTH - filled )); bar_filled=""; bar_empty=""
63
- i=0; while [ $i -lt $filled ]; do bar_filled="${bar_filled}█"; i=$((i+1)); done
64
- i=0; while [ $i -lt $empty ]; do bar_empty="${bar_empty}░"; i=$((i+1)); done
65
- ctx_bar="${CTX_CLR}${bar_filled}${RST}${DIM_BAR}${bar_empty}${RST} ${CTX_CLR}${pct}%${RST}"
66
-
67
- branch="no-git"; gh_user=""; gh_repo=""; git_dirty=""
68
- if [ -n "$clean_cwd" ]; then
69
- branch=$(git --no-optional-locks -C "$clean_cwd" symbolic-ref --short HEAD 2>/dev/null)
70
- [ -z "$branch" ] && branch=$(git --no-optional-locks -C "$clean_cwd" rev-parse --short HEAD 2>/dev/null)
71
- if [ -n "$branch" ]; then
72
- remote_url=$(git --no-optional-locks -C "$clean_cwd" remote get-url origin 2>/dev/null)
73
- if [ -n "$remote_url" ]; then
74
- gh_user=$(echo "$remote_url" | sed 's|.*github\.com[:/]\([^/]*\)/.*|\1|'); [ "$gh_user" = "$remote_url" ] && gh_user=""
75
- gh_repo=$(echo "$remote_url" | sed 's|.*/\([^/]*\)\.git$|\1|; s|.*/\([^/]*\)$|\1|'); [ "$gh_repo" = "$remote_url" ] && gh_repo=""
76
- fi
77
- git --no-optional-locks -C "$clean_cwd" diff --cached --quiet 2>/dev/null || git_dirty="${GREEN}+${RST}"
78
- git --no-optional-locks -C "$clean_cwd" diff --quiet 2>/dev/null || git_dirty="${git_dirty}${YELLOW}~${RST}"
79
- fi
80
- [ -z "$branch" ] && branch="no-git"
81
- fi
82
- [ -n "$gh_repo" ] && gh_label="${gh_user}/${gh_repo}/${branch}" || gh_label="$branch"
83
-
84
- cost_raw=$(json_num "total_cost_usd")
85
- if [ -z "$cost_raw" ] || [ "$cost_raw" = "0" ]; then cost_label='$0.00'
86
- else cost_label=$(awk -v c="$cost_raw" 'BEGIN { if (c < 0.01) printf "$%.4f", c; else printf "$%.2f", c }'); fi
87
-
88
- total_in=$(json_num "total_input_tokens"); total_out=$(json_num "total_output_tokens")
89
- [ -z "$total_in" ] && total_in="0"; [ -z "$total_out" ] && total_out="0"
90
- fmt_tok() { awk -v t="$1" 'BEGIN { if (t >= 1000000) printf "%.1fM", t/1000000; else if (t >= 1000) printf "%.0fk", t/1000; else printf "%d", t }'; }
91
- tok_in=$(fmt_tok "$total_in"); tok_out=$(fmt_tok "$total_out")
92
- tok_total=$(awk -v i="$total_in" -v o="$total_out" 'BEGIN { printf "%d", i + o }')
93
- token_label="${tok_in} + ${tok_out} = $(fmt_tok "$tok_total")"
94
-
95
- skill_label="Idle"
96
- if [ -n "$clean_cwd" ]; then
97
- search_path="$clean_cwd"
98
- while [ -n "$search_path" ] && [ "$search_path" != "/" ]; do
99
- proj_hash=$(echo "$search_path" | sed 's|^/\([a-zA-Z]\)/|\U\1--|; s|^[A-Z]:/|&|; s|:/|--|; s|/|-|g')
100
- proj_dir="$HOME/.claude/projects/${proj_hash}"
101
- if [ -d "$proj_dir" ]; then tpath=$(ls -t "$proj_dir"/*.jsonl 2>/dev/null | head -1); [ -n "$tpath" ] && break; fi
102
- search_path=$(echo "$search_path" | sed 's|/[^/]*$||')
103
- done
104
- if [ -n "$tpath" ] && [ -f "$tpath" ]; then
105
- recent_block=$(tail -200 "$tpath" 2>/dev/null)
106
- last_tool=$(echo "$recent_block" | grep -o '"type":"tool_use","id":"[^"]*","name":"[^"]*"' | tail -1 | sed 's/.*"name":"\([^"]*\)".*/\1/')
107
- if [ -n "$last_tool" ]; then
108
- case "$last_tool" in
109
- Task) skill_label="Agent" ;; Read) skill_label="Read" ;; Write) skill_label="Write" ;;
110
- Edit) skill_label="Edit" ;; Glob) skill_label="Search(Files)" ;; Grep) skill_label="Search(Content)" ;;
111
- Bash) skill_label="Terminal" ;; WebSearch) skill_label="Web Search" ;; *) skill_label="$last_tool" ;;
112
- esac
113
- fi
114
- fi
115
- fi
116
-
117
- C1=38; S=$(printf '%b' " ${SEP_C}│${RST} ")
118
- printf ' '; rpad "${PINK}Skill:${RST} ${PINK}${skill_label}${RST}" "$C1"; printf '%b' "$S"; printf '%b\n' "${WHITE}GitHub:${RST} ${WHITE}${gh_label}${RST}${git_dirty}"
119
- printf ' '; rpad "${PURPLE}Model:${RST} ${PURPLE}${BOLD}${model_full}${RST}" "$C1"; printf '%b' "$S"; printf '%b\n' "${CYAN}Dir:${RST} ${CYAN}${dir_label}${RST}"
120
- printf ' '; rpad "${YELLOW}Tokens:${RST} ${YELLOW}${token_label}${RST}" "$C1"; printf '%b' "$S"; printf '%b\n' "${GREEN}Cost:${RST} ${GREEN}${cost_label}${RST}"
121
- printf ' '; printf '%b' "${CTX_CLR}Context:${RST} ${ctx_bar}"
@@ -1,42 +0,0 @@
1
- ---
2
- description: Show or modify statusline configuration options. Examples: /sls-config, /sls-config bar_width 50
3
- argument-hint: "[key] [value]"
4
- ---
5
-
6
- # Statusline Configuration
7
-
8
- View or modify statusline configuration.
9
-
10
- ## Current Config
11
-
12
- ```
13
- !cat ~/.claude/statusline-config.json 2>/dev/null || echo '{"theme":"default","layout":"standard"}'
14
- ```
15
-
16
- ## Available Options
17
-
18
- | Option | Type | Default | Description |
19
- |--------|------|---------|-------------|
20
- | `compaction_warning_threshold` | number | 85 | Context % at which "X% left" warning appears |
21
- | `bar_width` | number | 40 | Width of the context progress bar in characters |
22
- | `cache_ttl_seconds` | number | 5 | How long git/skill cache lives before refresh |
23
- | `show_burn_rate` | boolean | false | Show cost-per-minute calculation |
24
- | `show_vim_mode` | boolean | true | Show vim mode indicator (full layout only) |
25
- | `show_agent_name` | boolean | true | Show active agent name (full layout only) |
26
-
27
- ## Instructions
28
-
29
- If `$ARGUMENTS` has two values (key and value):
30
- 1. Run `ccsl config set <key> <value>` in the terminal
31
- 2. Show the result
32
- 3. Tell them changes take effect on next statusline refresh
33
-
34
- If `$ARGUMENTS` has one value (just a key):
35
- 1. Read `~/.claude/statusline-config.json`
36
- 2. Show the current value of that specific option
37
- 3. Suggest how to change it
38
-
39
- If no arguments:
40
- 1. Run `ccsl config` in the terminal to show all current settings
41
- 2. Show the output
42
- 3. Tell them they can change options with `/sls-config <key> <value>`
@@ -1,35 +0,0 @@
1
- ---
2
- description: Run statusline diagnostics — checks installation, config, performance, and identifies issues
3
- ---
4
-
5
- # Statusline Doctor
6
-
7
- Run comprehensive diagnostics on the statusline installation.
8
-
9
- ## Instructions
10
-
11
- 1. Run `ccsl doctor` in the terminal
12
- 2. Show the full output to the user
13
- 3. If there are any issues (indicated by X or warning symbols), explain what each issue means and how to fix it
14
-
15
- ## What It Checks
16
-
17
- | Check | What It Verifies |
18
- |-------|-----------------|
19
- | bash | Bash is available and its version |
20
- | git | Git is available (needed for GitHub field) |
21
- | settings.json | Has `statusLine` config pointing to the command |
22
- | statusline-command.sh | Entry point script exists at ~/.claude/ |
23
- | v2 engine | core.sh exists in ~/.claude/statusline/ |
24
- | Theme file | Active theme .sh file exists |
25
- | Layout file | Active layout .sh file exists |
26
- | CLAUDE.md | Agent redirect section is present (prevents built-in agent conflicts) |
27
- | Config | statusline-config.json is valid JSON |
28
- | Performance | Benchmark: <50ms excellent, <100ms good, >100ms slow |
29
-
30
- ## Common Fixes
31
-
32
- - **Missing files**: Run `ccsl install` or `ccsl update`
33
- - **Missing CLAUDE.md section**: Run `ccsl update`
34
- - **Slow performance**: Normal on Windows Git Bash cold start — actual Claude Code rendering is faster
35
- - **Invalid config**: Delete `~/.claude/statusline-config.json` and run `ccsl install --quick`
@@ -1,48 +0,0 @@
1
- ---
2
- description: Show all available statusline slash commands and CLI commands
3
- ---
4
-
5
- # Statusline Help
6
-
7
- Show the user all available statusline commands.
8
-
9
- ## Slash Commands (use inside Claude Code)
10
-
11
- | Command | Description |
12
- |---------|-------------|
13
- | `/sls-theme` | List themes |
14
- | `/sls-theme <name>` | Set theme (default, nord, tokyo-night, catppuccin, gruvbox) |
15
- | `/sls-layout` | List layouts |
16
- | `/sls-layout <name>` | Set layout (compact, standard, full) |
17
- | `/sls-preview` | Preview with current settings |
18
- | `/sls-preview <theme> <layout>` | Preview with overrides |
19
- | `/sls-config` | Show all config options |
20
- | `/sls-config <key> <value>` | Set a config option |
21
- | `/sls-doctor` | Run diagnostics |
22
- | `/sls-help` | This help |
23
-
24
- ## CLI Commands (use in any terminal)
25
-
26
- | Command | Description |
27
- |---------|-------------|
28
- | `ccsl install` | Interactive install wizard |
29
- | `ccsl install --quick` | Quick install with defaults |
30
- | `ccsl uninstall` | Remove everything |
31
- | `ccsl update` | Update scripts, keep config |
32
- | `ccsl theme` / `ccsl theme set <name>` | List/set theme |
33
- | `ccsl layout` / `ccsl layout set <name>` | List/set layout |
34
- | `ccsl preview [--theme x] [--layout x]` | Preview rendering |
35
- | `ccsl config` / `ccsl config set <k> <v>` | Show/set options |
36
- | `ccsl doctor` | Run diagnostics |
37
- | `ccsl version` | Show version |
38
- | `ccsl help` | Show CLI help |
39
-
40
- ## Quick Examples
41
-
42
- - Change to Nord theme: `/sls-theme nord`
43
- - Switch to full layout (6 rows): `/sls-layout full`
44
- - Preview Tokyo Night + compact: `/sls-preview tokyo-night compact`
45
- - Lower compaction warning to 80%: `/sls-config compaction_warning_threshold 80`
46
- - Check installation health: `/sls-doctor`
47
-
48
- Present this information clearly to the user in a formatted way.
@@ -1,38 +0,0 @@
1
- ---
2
- description: List available statusline layouts or set a layout. Examples: /sls-layout, /sls-layout full
3
- argument-hint: "[layout-name]"
4
- ---
5
-
6
- # Statusline Layout
7
-
8
- Manage the statusline layout for Claude Code.
9
-
10
- ## Current Config
11
-
12
- ```
13
- !cat ~/.claude/statusline-config.json 2>/dev/null || echo '{"theme":"default","layout":"standard"}'
14
- ```
15
-
16
- ## Available Layouts
17
-
18
- | Layout | Rows | What It Shows |
19
- |--------|------|---------------|
20
- | `compact` | 2 | Model, Dir, Context%, Cost — minimal footprint |
21
- | `standard` | 4 | Skill, Model, GitHub, Dir, Tokens, Cost, Context bar — balanced |
22
- | `full` | 6 | Everything: adds Session tokens, Duration, Lines, Cache, Vim mode, Agent name |
23
-
24
- ## Instructions
25
-
26
- If `$ARGUMENTS` is provided (a layout name):
27
- 1. Run `ccsl layout set $ARGUMENTS` in the terminal
28
- 2. Show the result to the user
29
- 3. Tell them to restart Claude Code or start a new conversation for the layout to take effect
30
-
31
- If no arguments provided:
32
- 1. Run `ccsl layout` in the terminal to list layouts with the current selection highlighted
33
- 2. Show the output to the user
34
- 3. Tell them they can set a layout with `/sls-layout <name>` or `ccsl layout set <name>`
35
-
36
- **Valid layout names:** compact, standard, full
37
-
38
- If the user provides an invalid layout name, show them the valid options above.
@@ -1,34 +0,0 @@
1
- ---
2
- description: Preview the statusline with sample data. Optionally specify theme/layout overrides. Examples: /sls-preview, /sls-preview nord full
3
- argument-hint: "[theme] [layout]"
4
- ---
5
-
6
- # Statusline Preview
7
-
8
- Preview the statusline rendering with sample data.
9
-
10
- ## Current Config
11
-
12
- ```
13
- !cat ~/.claude/statusline-config.json 2>/dev/null || echo '{"theme":"default","layout":"standard"}'
14
- ```
15
-
16
- ## Instructions
17
-
18
- Parse `$ARGUMENTS` for optional theme and layout overrides. Arguments can be in any order — detect which is a theme and which is a layout.
19
-
20
- **Valid themes:** default, nord, tokyo-night, catppuccin, gruvbox
21
- **Valid layouts:** compact, standard, full
22
-
23
- Build the ccsl preview command:
24
- - No arguments: run `ccsl preview`
25
- - Theme only: run `ccsl preview --theme <name>`
26
- - Layout only: run `ccsl preview --layout <name>`
27
- - Both: run `ccsl preview --theme <name> --layout <name>`
28
-
29
- Run the command in the terminal and show the output to the user.
30
-
31
- After showing the preview, remind the user:
32
- - To apply a theme: `/sls-theme <name>` or `ccsl theme set <name>`
33
- - To apply a layout: `/sls-layout <name>` or `ccsl layout set <name>`
34
- - Changes take effect on Claude Code restart
@@ -1,40 +0,0 @@
1
- ---
2
- description: List available statusline themes or set a theme. Examples: /sls-theme, /sls-theme nord
3
- argument-hint: "[theme-name]"
4
- ---
5
-
6
- # Statusline Theme
7
-
8
- Manage the statusline theme for Claude Code.
9
-
10
- ## Current Config
11
-
12
- ```
13
- !cat ~/.claude/statusline-config.json 2>/dev/null || echo '{"theme":"default","layout":"standard"}'
14
- ```
15
-
16
- ## Available Themes
17
-
18
- | Theme | Description |
19
- |-------|-------------|
20
- | `default` | Classic purple/pink/cyan — the original |
21
- | `nord` | Arctic, blue-tinted — frost palette |
22
- | `tokyo-night` | Vibrant neon — dark city glow |
23
- | `catppuccin` | Warm pastels — Mocha variant |
24
- | `gruvbox` | Retro groovy — warm earth tones |
25
-
26
- ## Instructions
27
-
28
- If `$ARGUMENTS` is provided (a theme name):
29
- 1. Run `ccsl theme set $ARGUMENTS` in the terminal
30
- 2. Show the result to the user
31
- 3. Tell them to restart Claude Code or start a new conversation for the theme to take effect
32
-
33
- If no arguments provided:
34
- 1. Run `ccsl theme` in the terminal to list themes with the current selection highlighted
35
- 2. Show the output to the user
36
- 3. Tell them they can set a theme with `/sls-theme <name>` or `ccsl theme set <name>`
37
-
38
- **Valid theme names:** default, nord, tokyo-night, catppuccin, gruvbox
39
-
40
- If the user provides an invalid theme name, show them the valid options above.
@@ -1,228 +0,0 @@
1
- /**
2
- * UC UpfynAI-Code — Statusline Auto-Installer
3
- * Proprietary software by Thinqmesh Technologies, Developed by Anit Chaudhary
4
- *
5
- * Idempotent installer: copies vendored statusline bash scripts to ~/.claude/
6
- * and configures Claude Code to use the statusline. Called on CLI startup.
7
- */
8
-
9
- import fs from 'node:fs';
10
- import path from 'node:path';
11
- import os from 'node:os';
12
- import { fileURLToPath } from 'node:url';
13
-
14
- const __filename = fileURLToPath(import.meta.url);
15
- const CORE_DIR = path.dirname(__filename);
16
-
17
- const HOME = os.homedir();
18
- const CLAUDE_DIR = path.join(HOME, '.claude');
19
- const SL_DIR = path.join(CLAUDE_DIR, 'statusline');
20
- const CONFIG_PATH = path.join(CLAUDE_DIR, 'statusline-config.json');
21
- const SETTINGS_PATH = path.join(CLAUDE_DIR, 'settings.json');
22
- const SCRIPT_DEST = path.join(CLAUDE_DIR, 'statusline-command.sh');
23
- const CLAUDE_MD_PATH = path.join(CLAUDE_DIR, 'CLAUDE.md');
24
- const COMMANDS_DIR = path.join(CLAUDE_DIR, 'commands');
25
-
26
- const SLS_COMMANDS = ['sls-theme', 'sls-layout', 'sls-preview', 'sls-config', 'sls-doctor', 'sls-help'];
27
-
28
- const CLAUDE_MD_START = '<!-- skill-statusline:start -->';
29
- const CLAUDE_MD_END = '<!-- skill-statusline:end -->';
30
-
31
- const CLAUDE_MD_SECTION = `${CLAUDE_MD_START}
32
- ## Statusline — Managed by UC UpfynAI-Code
33
-
34
- The Claude Code statusline is fully configured and managed by **UC UpfynAI-Code** (proprietary software by Thinqmesh Technologies, Developed by Anit Chaudhary). Do NOT use the built-in \`statusline-setup\` agent for any statusline configuration — it is not compatible with this setup.
35
-
36
- ### How It Works
37
- - \`~/.claude/settings.json\` → points to \`bash ~/.claude/statusline-command.sh\`
38
- - \`~/.claude/statusline-command.sh\` → entry point, delegates to v2 engine
39
- - \`~/.claude/statusline/core.sh\` → v2 engine (themes, layouts, accurate context tracking)
40
- - \`~/.claude/statusline-config.json\` → user preferences (theme, layout, options)
41
-
42
- ### When the user asks about statusline configuration, use these CLI commands:
43
-
44
- | Action | Command |
45
- |--------|---------|
46
- | Change theme | \`ccsl theme set <name>\` |
47
- | Change layout | \`ccsl layout set <name>\` |
48
- | List themes | \`ccsl theme\` |
49
- | List layouts | \`ccsl layout\` |
50
- | Preview | \`ccsl preview\` |
51
- | Preview with overrides | \`ccsl preview --theme <name> --layout <name>\` |
52
- | Show config | \`ccsl config\` |
53
- | Set config option | \`ccsl config set <key> <value>\` |
54
- | Diagnostics | \`ccsl doctor\` |
55
- | Update scripts | \`ccsl update\` |
56
- | Reinstall | \`ccsl install\` |
57
-
58
- **Available themes:** default, nord, tokyo-night, catppuccin, gruvbox
59
- **Available layouts:** compact (2 rows), standard (4 rows), full (6 rows)
60
- **Config options:** compaction_warning_threshold, bar_width, cache_ttl_seconds, show_burn_rate, show_vim_mode, show_agent_name
61
-
62
- ### Slash Commands (installed in ~/.claude/commands/)
63
-
64
- Users can also use these slash commands inside Claude Code:
65
- - \`/sls-theme [name]\` — List or set theme
66
- - \`/sls-layout [name]\` — List or set layout
67
- - \`/sls-preview [theme] [layout]\` — Preview with sample data
68
- - \`/sls-config [key] [value]\` — Show or set config options
69
- - \`/sls-doctor\` — Run diagnostics
70
- - \`/sls-help\` — Show all commands
71
-
72
- ### IMPORTANT
73
- - NEVER spawn the \`statusline-setup\` agent — it will fail on Windows and conflict with this setup
74
- - All statusline changes are made via \`ccsl\` CLI commands (run in terminal) or \`/sls-*\` slash commands
75
- - Changes take effect on next Claude Code restart (or next statusline refresh for config changes)
76
- ${CLAUDE_MD_END}`;
77
-
78
- // ── Helpers ──
79
-
80
- function ensureDir(dir) {
81
- if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
82
- }
83
-
84
- function copyDir(src, dest) {
85
- ensureDir(dest);
86
- for (const entry of fs.readdirSync(src)) {
87
- const srcPath = path.join(src, entry);
88
- const destPath = path.join(dest, entry);
89
- if (fs.statSync(srcPath).isDirectory()) {
90
- copyDir(srcPath, destPath);
91
- } else {
92
- fs.copyFileSync(srcPath, destPath);
93
- }
94
- }
95
- }
96
-
97
- function readConfig() {
98
- try {
99
- if (fs.existsSync(CONFIG_PATH)) {
100
- return JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf8'));
101
- }
102
- } catch {}
103
- return { version: 2, theme: 'default', layout: 'standard', options: {} };
104
- }
105
-
106
- function writeConfig(config) {
107
- config.version = 2;
108
- fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + '\n');
109
- }
110
-
111
- function readSettings() {
112
- try {
113
- if (fs.existsSync(SETTINGS_PATH)) {
114
- return JSON.parse(fs.readFileSync(SETTINGS_PATH, 'utf8'));
115
- }
116
- } catch {}
117
- return {};
118
- }
119
-
120
- function writeSettings(settings) {
121
- fs.writeFileSync(SETTINGS_PATH, JSON.stringify(settings, null, 2) + '\n');
122
- }
123
-
124
- // ── File installation ──
125
-
126
- function installFiles() {
127
- ensureDir(CLAUDE_DIR);
128
- ensureDir(SL_DIR);
129
-
130
- // lib/ → ~/.claude/statusline/
131
- const libSrc = path.join(CORE_DIR, 'lib');
132
- if (fs.existsSync(libSrc)) {
133
- for (const f of fs.readdirSync(libSrc)) {
134
- fs.copyFileSync(path.join(libSrc, f), path.join(SL_DIR, f));
135
- }
136
- }
137
-
138
- // themes/ → ~/.claude/statusline/themes/
139
- const themesSrc = path.join(CORE_DIR, 'themes');
140
- if (fs.existsSync(themesSrc)) {
141
- copyDir(themesSrc, path.join(SL_DIR, 'themes'));
142
- }
143
-
144
- // layouts/ → ~/.claude/statusline/layouts/
145
- const layoutsSrc = path.join(CORE_DIR, 'layouts');
146
- if (fs.existsSync(layoutsSrc)) {
147
- copyDir(layoutsSrc, path.join(SL_DIR, 'layouts'));
148
- }
149
-
150
- // Entry point script
151
- const slSrc = path.join(CORE_DIR, 'bin', 'statusline.sh');
152
- if (fs.existsSync(slSrc)) {
153
- fs.copyFileSync(slSrc, SCRIPT_DEST);
154
- }
155
- }
156
-
157
- function installClaudeMd() {
158
- let content = '';
159
- if (fs.existsSync(CLAUDE_MD_PATH)) {
160
- content = fs.readFileSync(CLAUDE_MD_PATH, 'utf8');
161
- const startIdx = content.indexOf(CLAUDE_MD_START);
162
- const endIdx = content.indexOf(CLAUDE_MD_END);
163
- if (startIdx !== -1 && endIdx !== -1) {
164
- content = content.substring(0, startIdx) + content.substring(endIdx + CLAUDE_MD_END.length);
165
- content = content.replace(/\n{3,}/g, '\n\n').trim();
166
- }
167
- }
168
- content = content ? content + '\n\n' + CLAUDE_MD_SECTION + '\n' : CLAUDE_MD_SECTION + '\n';
169
- fs.writeFileSync(CLAUDE_MD_PATH, content);
170
- }
171
-
172
- function installCommands() {
173
- ensureDir(COMMANDS_DIR);
174
- const cmdSrc = path.join(CORE_DIR, 'commands');
175
- if (!fs.existsSync(cmdSrc)) return 0;
176
- let count = 0;
177
- for (const cmd of SLS_COMMANDS) {
178
- const src = path.join(cmdSrc, `${cmd}.md`);
179
- const dest = path.join(COMMANDS_DIR, `${cmd}.md`);
180
- if (fs.existsSync(src)) {
181
- fs.copyFileSync(src, dest);
182
- count++;
183
- }
184
- }
185
- return count;
186
- }
187
-
188
- // ── Main export ──
189
-
190
- export function ensureStatuslineInstalled() {
191
- // Idempotency: skip if already fully configured
192
- const coreExists = fs.existsSync(path.join(SL_DIR, 'core.sh'));
193
- let settingsOk = false;
194
- try {
195
- const settings = readSettings();
196
- settingsOk = !!(settings.statusLine && settings.statusLine.command);
197
- } catch {}
198
-
199
- if (coreExists && settingsOk) {
200
- return { installed: false, reason: 'already-configured' };
201
- }
202
-
203
- // 1. Copy all scripts
204
- installFiles();
205
-
206
- // 2. Write default config if missing
207
- if (!fs.existsSync(CONFIG_PATH)) {
208
- writeConfig({ version: 2, theme: 'default', layout: 'standard', options: {} });
209
- }
210
-
211
- // 3. Patch settings.json
212
- const settings = readSettings();
213
- if (!settings.statusLine) {
214
- settings.statusLine = {
215
- type: 'command',
216
- command: 'bash ~/.claude/statusline-command.sh',
217
- };
218
- writeSettings(settings);
219
- }
220
-
221
- // 4. Update CLAUDE.md
222
- installClaudeMd();
223
-
224
- // 5. Install slash commands
225
- installCommands();
226
-
227
- return { installed: true, reason: 'first-run' };
228
- }
@@ -1,21 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Layout: Compact (2 rows — minimal for narrow terminals)
3
- # Row 1: Model │ Dir │ Cost Context%
4
- # Row 2: Context bar
5
-
6
- render_layout() {
7
- local S
8
- S=$(printf '%b' " ${CLR_SEP}${SEP_CHAR}${CLR_RST} ")
9
-
10
- # Row 1: Model │ Dir │ Cost + Context%
11
- printf ' '
12
- rpad "${CLR_MODEL}${CLR_BOLD}${SL_MODEL}${CLR_RST}" 16
13
- printf '%b' "$S"
14
- rpad "${CLR_DIR}${SL_DIR}${CLR_RST}" 22
15
- printf '%b' "$S"
16
- printf '%b\n' "${CTX_CLR}${SL_CTX_PCT}%%${CLR_RST} ${CLR_COST}${SL_COST}${CLR_RST}"
17
-
18
- # Row 2: Context bar
19
- printf ' '
20
- printf '%b' "${CTX_CLR}Context:${CLR_RST} ${SL_CTX_BAR}${SL_COMPACT_WARNING}"
21
- }
@@ -1,62 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Layout: Full (6 rows — everything)
3
- # Row 1: Skill │ GitHub
4
- # Row 2: Model │ Dir
5
- # Row 3: Window │ Cost
6
- # Row 4: Session │ Lines + Duration
7
- # Row 5: Cache │ Vim/Agent
8
- # Row 6: Context bar
9
-
10
- render_layout() {
11
- local C1="$SL_C1"
12
- local S
13
- S=$(printf '%b' " ${CLR_SEP}${SEP_CHAR}${CLR_RST} ")
14
-
15
- # Row 1: Skill │ GitHub
16
- printf ' '
17
- rpad "${CLR_SKILL}Skill:${CLR_RST} ${CLR_SKILL}${SL_SKILL}${CLR_RST}" "$C1"
18
- printf '%b' "$S"
19
- printf '%b\n' "${CLR_GITHUB}GitHub:${CLR_RST} ${CLR_GITHUB}${SL_GITHUB}${CLR_RST}${SL_GIT_DIRTY}"
20
-
21
- # Row 2: Model │ Dir
22
- printf ' '
23
- rpad "${CLR_MODEL}Model:${CLR_RST} ${CLR_MODEL}${CLR_BOLD}${SL_MODEL}${CLR_RST}" "$C1"
24
- printf '%b' "$S"
25
- printf '%b\n' "${CLR_DIR}Dir:${CLR_RST} ${CLR_DIR}${SL_DIR}${CLR_RST}"
26
-
27
- # Row 3: Window tokens │ Cost + Burn rate
28
- printf ' '
29
- local win_label="${SL_TOKENS_WIN_IN} + ${SL_TOKENS_WIN_OUT}"
30
- if [ "$cur_input" -eq 0 ] 2>/dev/null && [ "$cum_input" -gt 0 ] 2>/dev/null; then
31
- win_label="${SL_TOKENS_CUM_IN} + ${SL_TOKENS_CUM_OUT}"
32
- fi
33
- rpad "${CLR_TOKENS}Window:${CLR_RST} ${CLR_TOKENS}${win_label}${CLR_RST}" "$C1"
34
- printf '%b' "$S"
35
- local cost_display="${CLR_COST}Cost:${CLR_RST} ${CLR_COST}${SL_COST}${CLR_RST}"
36
- [ -n "$SL_BURN_RATE" ] && cost_display="${cost_display} ${CLR_LABEL}(${SL_BURN_RATE})${CLR_RST}"
37
- printf '%b\n' "$cost_display"
38
-
39
- # Row 4: Session tokens │ Lines + Duration
40
- printf ' '
41
- rpad "${CLR_TOKENS}Session:${CLR_RST} ${CLR_LABEL}${SL_TOKENS_CUM_IN} + ${SL_TOKENS_CUM_OUT}${CLR_RST}" "$C1"
42
- printf '%b' "$S"
43
- printf '%b\n' "${CLR_LABEL}+${SL_LINES_ADDED}/-${SL_LINES_REMOVED} ${SL_DURATION}${CLR_RST}"
44
-
45
- # Row 5: Cache │ Vim/Agent
46
- printf ' '
47
- rpad "${CLR_AGENT}Cache:${CLR_RST} ${CLR_LABEL}W:${SL_CACHE_CREATE} R:${SL_CACHE_READ}${CLR_RST}" "$C1"
48
- printf '%b' "$S"
49
- local vim_agent=""
50
- if [ -n "$SL_VIM_MODE" ] && [ "$SL_VIM_MODE" != "null" ]; then
51
- vim_agent="${CLR_VIM}${SL_VIM_MODE}${CLR_RST}"
52
- fi
53
- if [ -n "$SL_AGENT_NAME" ] && [ "$SL_AGENT_NAME" != "null" ]; then
54
- [ -n "$vim_agent" ] && vim_agent="${vim_agent} "
55
- vim_agent="${vim_agent}${CLR_AGENT}@${SL_AGENT_NAME}${CLR_RST}"
56
- fi
57
- printf '%b\n' "$vim_agent"
58
-
59
- # Row 6: Context bar (full width)
60
- printf ' '
61
- printf '%b' "${CTX_CLR}Context:${CLR_RST} ${SL_CTX_BAR}${SL_COMPACT_WARNING}"
62
- }