wind-agent-cli 1.37.3 → 1.38.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/README.md +16 -1
  2. package/dist/api-docs.html +2 -2
  3. package/dist/assets/{CodeEditor-BqmxpZ_D.js → CodeEditor-Cx2QOPKS.js} +6 -6
  4. package/dist/assets/FileTree-CaCZBfXB.js +1 -0
  5. package/dist/assets/GitPanel-C8vu-HU9.js +4 -0
  6. package/dist/assets/{MarkdownPreview-93h_1tJa.js → MarkdownPreview-DM1I8sMC.js} +17 -27
  7. package/dist/assets/Shell-DrlLKa8f.css +1 -0
  8. package/dist/assets/Shell-eRBEAkRb.js +76 -0
  9. package/dist/assets/StandaloneShell-C_SgfnxT.js +1 -0
  10. package/dist/assets/TaskMasterPanel-ePMcx8a-.js +2 -0
  11. package/dist/assets/abnfDiagram-N423BO3Z-BcJZs1lF.js +1 -0
  12. package/dist/assets/arc-B53XXXxy.js +1 -0
  13. package/dist/assets/architectureDiagram-T3A2C74G-vTs0UDp_.js +36 -0
  14. package/dist/assets/{blockDiagram-VBNYF7ZC-oSjQ1SgE.js → blockDiagram-VBNYF7ZC-CRlmkPBH.js} +4 -4
  15. package/dist/assets/c4Diagram-5PPSVZJV-CDkarwX2.js +10 -0
  16. package/dist/assets/channel-BBmlxLKm.js +1 -0
  17. package/dist/assets/{chunk-2GRJ4B5K-B07uZ07O.js → chunk-2GRJ4B5K-CdVcURNG.js} +1 -1
  18. package/dist/assets/{chunk-2Q5K7J3B-DNSfO7xS.js → chunk-2Q5K7J3B-CSMQbOQx.js} +1 -1
  19. package/dist/assets/chunk-5RXB4S5H-DFW9zj_c.js +231 -0
  20. package/dist/assets/{chunk-5VM5RSS4-B7vZV0zC.js → chunk-5VM5RSS4-DBpthDmq.js} +1 -1
  21. package/dist/assets/{chunk-6Q2QTUOP-DuS_xUGG.js → chunk-6Q2QTUOP-BcUSTdgD.js} +1 -1
  22. package/dist/assets/chunk-GF5L2VYU-4m17UUNv.js +206 -0
  23. package/dist/assets/{chunk-JWPE2WC7-DD2hcXvs.js → chunk-JWPE2WC7-BQbCGGN3.js} +1 -1
  24. package/dist/assets/{chunk-KBJHAD2P-Cz-l38qp.js → chunk-KBJHAD2P-BSUyigrP.js} +1 -1
  25. package/dist/assets/{chunk-RYQCIY6F-DGFIU1YM.js → chunk-RYQCIY6F-IDx48cke.js} +1 -1
  26. package/dist/assets/{chunk-XXDRQBXY-CmfzoYFl.js → chunk-XXDRQBXY-CkptWWiw.js} +1 -1
  27. package/dist/assets/classDiagram-JCYQIIEL-Zuuh6WIs.js +1 -0
  28. package/dist/assets/classDiagram-v2-OCEON4UE-Zuuh6WIs.js +1 -0
  29. package/dist/assets/cose-bilkent-JH36ORCC-Di3RMB4X.js +1 -0
  30. package/dist/assets/{cynefin-VYW2F7L2-P1HecReO.js → cynefin-VYW2F7L2-DBEP-JNm.js} +11 -23
  31. package/dist/assets/cynefinDiagram-MW4NZA55-DCa5bQ3E.js +62 -0
  32. package/dist/assets/cytoscape.esm-yzknjiTM.js +321 -0
  33. package/dist/assets/dagre-VZM6K2ZE-N0N_WSj2.js +4 -0
  34. package/dist/assets/{diagram-7IWD3JNH-9CWGFMYR.js → diagram-7IWD3JNH-wYn0p431.js} +5 -5
  35. package/dist/assets/{diagram-B4RE2ZJO-TWK59T6V.js → diagram-B4RE2ZJO-Cse-jrwQ.js} +2 -2
  36. package/dist/assets/diagram-LBJQPF4R-Byhmgq5m.js +24 -0
  37. package/dist/assets/diagram-Q27KOJAE-BNsUkxU7.js +24 -0
  38. package/dist/assets/diagram-UB23O5K3-C3QHYX7n.js +41 -0
  39. package/dist/assets/ebnfDiagram-BXEA7PRR-BP6B3t_z.js +1 -0
  40. package/dist/assets/erDiagram-JOGREHBK-CjYRNWDj.js +85 -0
  41. package/dist/assets/feature-chat-CenAll-X.js +88 -0
  42. package/dist/assets/feature-workspace-X9kJZ4EG.js +39 -0
  43. package/dist/assets/{flowDiagram-UKHOOZJN-DEr2II5V.js → flowDiagram-UKHOOZJN-4H-yy-hv.js} +4 -4
  44. package/dist/assets/ganttDiagram-PKOTCBZU-CEjsxzjF.js +292 -0
  45. package/dist/assets/gitGraphDiagram-DS77QQ5N-CNEvMqer.js +106 -0
  46. package/dist/assets/graph-DOmOIIwC.js +1 -0
  47. package/dist/assets/index-BIKUx4Nd.js +1 -0
  48. package/dist/assets/index-BnTqIKbW.js +1 -0
  49. package/dist/assets/index-CblFvRGn.js +35 -0
  50. package/dist/assets/index-Cr5MbHuj.css +1 -0
  51. package/dist/assets/{index-BSe3UiFA.js → index-Dn_5mZup.js} +3 -3
  52. package/dist/assets/infoDiagram-6WML65LV-CaQEYwl_.js +2 -0
  53. package/dist/assets/ishikawaDiagram-WSZJBQD7-jvmcvqKv.js +70 -0
  54. package/dist/assets/journeyDiagram-NVQOT4AX-D3t6ZEEp.js +139 -0
  55. package/dist/assets/{kanban-definition-27J2QSJJ-DmlgiV7K.js → kanban-definition-27J2QSJJ-DndXvXlL.js} +6 -6
  56. package/dist/assets/{layout-D6BstSzF.js → layout-D-LzfAck.js} +1 -1
  57. package/dist/assets/{linear-Ct_eoJQk.js → linear-CRI9G1bv.js} +1 -1
  58. package/dist/assets/map-DxJ2ADlA.js +1 -0
  59. package/dist/assets/mermaid.core-Nej1-0Ug.js +306 -0
  60. package/dist/assets/{mindmap-definition-FAOFIHXS-DGtMgQhf.js → mindmap-definition-FAOFIHXS-7fzz0Exr.js} +4 -4
  61. package/dist/assets/pegDiagram-VL7TDLO6-DTiRFRfv.js +1 -0
  62. package/dist/assets/{pieDiagram-7S7Q4E2Y-DMkt_Zfr.js → pieDiagram-7S7Q4E2Y-BU4cScsB.js} +2 -2
  63. package/dist/assets/quadrantDiagram-CIZ2JOQS-Cc13j5j0.js +7 -0
  64. package/dist/assets/railroadDiagram-AXF67PYL-CfB467SJ.js +1 -0
  65. package/dist/assets/requirementDiagram-LRYGKXZP-BddSRoQa.js +84 -0
  66. package/dist/assets/sankeyDiagram-W5VNT64P-D33-L55R.js +40 -0
  67. package/dist/assets/sequenceDiagram-SI44F4Z6-BP7gKO1m.js +162 -0
  68. package/dist/assets/sizeCapture-X5ZJPWSS-DLmxTSos.js +1 -0
  69. package/dist/assets/stateDiagram-OKZ733FA-2fN5h0fl.js +1 -0
  70. package/dist/assets/stateDiagram-v2-UEYNNEHI-ddGXuRHz.js +1 -0
  71. package/dist/assets/swimlanes-SLNWSIFB-m6QzM3CR.js +2 -0
  72. package/dist/assets/swimlanesDiagram-ULZ7WXOC-DNmdh3Nm.js +8 -0
  73. package/dist/assets/timeline-definition-Z64GVDOM-B-4XL-3f.js +120 -0
  74. package/dist/assets/vendor-data-DsEZeNPr.js +4 -0
  75. package/dist/assets/vendor-i18n-B6HjLCnN.js +1 -0
  76. package/dist/assets/vendor-markdown-DkITEES2.js +298 -0
  77. package/dist/assets/vendor-react-C2GTiUCy.js +10 -0
  78. package/dist/assets/vendor-ui-CAUHSABu.js +49 -0
  79. package/dist/assets/vennDiagram-T6HMQDX7-C-2U26ta.js +34 -0
  80. package/dist/assets/{wardleyDiagram-T6FBY63Y-Db9dsaXv.js → wardleyDiagram-T6FBY63Y-BM4F1_6i.js} +2 -2
  81. package/dist/assets/workbox-window.prod.es5-BBnX5xw4.js +2 -0
  82. package/dist/assets/xychartDiagram-ELKLHX3M-BWBCnHJm.js +7 -0
  83. package/dist/favicon.png +0 -0
  84. package/dist/icons/icon-128x128.png +0 -0
  85. package/dist/icons/icon-144x144.png +0 -0
  86. package/dist/icons/icon-152x152.png +0 -0
  87. package/dist/icons/icon-180x180.png +0 -0
  88. package/dist/icons/icon-192x192.png +0 -0
  89. package/dist/icons/icon-384x384.png +0 -0
  90. package/dist/icons/icon-512x512.png +0 -0
  91. package/dist/icons/icon-72x72.png +0 -0
  92. package/dist/icons/icon-96x96.png +0 -0
  93. package/dist/icons/icon-maskable-192x192.png +0 -0
  94. package/dist/icons/icon-maskable-512x512.png +0 -0
  95. package/dist/icons/new-icon.png +0 -0
  96. package/dist/index.html +17 -27
  97. package/dist/logo-128.png +0 -0
  98. package/dist/logo-256.png +0 -0
  99. package/dist/manifest.webmanifest +1 -0
  100. package/dist/push-sw.js +48 -0
  101. package/dist/screenshots/setup-screen-mobile.png +0 -0
  102. package/dist/screenshots/setup-screen.png +0 -0
  103. package/dist/sw.js +1 -124
  104. package/dist/workbox-ae5c0bb2.js +1 -0
  105. package/dist-server/server/index.js +1 -1
  106. package/dist-server/server/index.js.map +1 -1
  107. package/dist-server/server/load-env.js +4 -2
  108. package/dist-server/server/load-env.js.map +1 -1
  109. package/dist-server/server/modules/agent/agent.routes.js +1 -1
  110. package/dist-server/server/modules/agent/agent.routes.js.map +1 -1
  111. package/dist-server/server/modules/browser-use/browser-use.service.js +1 -1
  112. package/dist-server/server/modules/browser-use/browser-use.service.js.map +1 -1
  113. package/dist-server/server/modules/cli/cli.service.js +5 -5
  114. package/dist-server/server/modules/cli/cli.service.js.map +1 -1
  115. package/dist-server/server/modules/cli/sandbox.service.js +7 -7
  116. package/dist-server/server/modules/cli/sandbox.service.js.map +1 -1
  117. package/dist-server/server/modules/commands/commands.routes.js +1 -1
  118. package/dist-server/server/modules/commands/commands.routes.js.map +1 -1
  119. package/dist-server/server/modules/commands/tests/commands.test.js +1 -1
  120. package/dist-server/server/modules/commands/tests/commands.test.js.map +1 -1
  121. package/dist-server/server/modules/database/connection.js +1 -1
  122. package/dist-server/server/modules/database/connection.js.map +1 -1
  123. package/dist-server/server/modules/database/repositories/sessions.db.js +1 -1
  124. package/dist-server/server/modules/database/tests/projects.db.integration.test.js +3 -2
  125. package/dist-server/server/modules/database/tests/projects.db.integration.test.js.map +1 -1
  126. package/dist-server/server/modules/database/tests/sessions-provider-mapping.test.js +4 -3
  127. package/dist-server/server/modules/database/tests/sessions-provider-mapping.test.js.map +1 -1
  128. package/dist-server/server/modules/database/tests/sessions.db.integration.test.js +2 -1
  129. package/dist-server/server/modules/database/tests/sessions.db.integration.test.js.map +1 -1
  130. package/dist-server/server/modules/notifications/services/notification-orchestrator.service.js +1 -1
  131. package/dist-server/server/modules/notifications/services/notification-orchestrator.service.js.map +1 -1
  132. package/dist-server/server/modules/notifications/vapid-keys.service.js +1 -1
  133. package/dist-server/server/modules/notifications/vapid-keys.service.js.map +1 -1
  134. package/dist-server/server/modules/projects/tests/project-management.service.test.js +2 -1
  135. package/dist-server/server/modules/projects/tests/project-management.service.test.js.map +1 -1
  136. package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js +2 -2
  137. package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js.map +1 -1
  138. package/dist-server/server/modules/providers/list/codex/codex-models.provider.js +1 -1
  139. package/dist-server/server/modules/providers/list/codex/codex-models.provider.js.map +1 -1
  140. package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js +1 -1
  141. package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js.map +1 -1
  142. package/dist-server/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.js.map +1 -1
  143. package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js +1 -1
  144. package/dist-server/server/modules/providers/services/sessions.service.js +1 -1
  145. package/dist-server/server/modules/providers/tests/claude-auth.test.js +8 -0
  146. package/dist-server/server/modules/providers/tests/claude-auth.test.js.map +1 -1
  147. package/dist-server/server/modules/providers/tests/codex-sessions.test.js +1 -1
  148. package/dist-server/server/modules/providers/tests/codex-sessions.test.js.map +1 -1
  149. package/dist-server/server/modules/providers/tests/opencode-sessions.test.js +2 -2
  150. package/dist-server/server/modules/providers/tests/opencode-sessions.test.js.map +1 -1
  151. package/dist-server/server/modules/providers/tests/provider.routes.test.js +1 -1
  152. package/dist-server/server/modules/providers/tests/provider.routes.test.js.map +1 -1
  153. package/dist-server/server/modules/system/system.service.js +1 -1
  154. package/dist-server/server/modules/system/system.service.js.map +1 -1
  155. package/dist-server/server/modules/system/tests/system.service.test.js +1 -1
  156. package/dist-server/server/modules/system/tests/system.service.test.js.map +1 -1
  157. package/dist-server/server/modules/taskmaster/taskmaster.routes.js +4 -3
  158. package/dist-server/server/modules/taskmaster/taskmaster.routes.js.map +1 -1
  159. package/dist-server/server/modules/websocket/services/shell-websocket.service.js +1 -1
  160. package/dist-server/server/modules/websocket/services/shell-websocket.service.js.map +1 -1
  161. package/dist-server/server/modules/worktrees/services/worktree-list.service.js +1 -1
  162. package/dist-server/server/modules/worktrees/services/worktree-open.service.js +1 -1
  163. package/dist-server/server/modules/worktrees/services/worktree-remove.service.js +1 -1
  164. package/electron/cloud.js +3 -3
  165. package/electron/desktopNotifications.js +1 -1
  166. package/electron/desktopWindow.js +12 -12
  167. package/electron/launcher/index.html +1 -1
  168. package/electron/launcher/launcher.js +14 -14
  169. package/electron/localServer.js +5 -5
  170. package/electron/main.js +19 -19
  171. package/electron/serverInstaller.js +2 -2
  172. package/electron/viewHost.js +1 -1
  173. package/package.json +53 -37
  174. package/public/api-docs.html +2 -2
  175. package/scripts/build-client.mjs +30 -0
  176. package/scripts/generate-pwa-icons.ps1 +33 -0
  177. package/scripts/verify-pwa-build.mjs +37 -0
  178. package/server/index.ts +1 -1
  179. package/server/load-env.ts +4 -2
  180. package/server/modules/agent/agent.routes.ts +1 -1
  181. package/server/modules/browser-use/browser-use.service.ts +1 -1
  182. package/server/modules/cli/cli.service.ts +5 -5
  183. package/server/modules/cli/sandbox.service.ts +7 -7
  184. package/server/modules/commands/commands.routes.ts +1 -1
  185. package/server/modules/commands/tests/commands.test.ts +1 -1
  186. package/server/modules/database/connection.ts +2 -1
  187. package/server/modules/database/repositories/sessions.db.ts +1 -1
  188. package/server/modules/database/tests/projects.db.integration.test.ts +3 -2
  189. package/server/modules/database/tests/sessions-provider-mapping.test.ts +4 -3
  190. package/server/modules/database/tests/sessions.db.integration.test.ts +2 -1
  191. package/server/modules/notifications/services/notification-orchestrator.service.js +1 -1
  192. package/server/modules/notifications/vapid-keys.service.ts +1 -1
  193. package/server/modules/projects/tests/project-management.service.test.ts +2 -1
  194. package/server/modules/providers/list/codex/codex-app-server.client.ts +2 -2
  195. package/server/modules/providers/list/codex/codex-models.provider.ts +1 -1
  196. package/server/modules/providers/list/cursor/cursor-models.provider.ts +1 -1
  197. package/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.ts +0 -1
  198. package/server/modules/providers/list/opencode/opencode-models.provider.ts +1 -1
  199. package/server/modules/providers/services/sessions.service.ts +1 -1
  200. package/server/modules/providers/tests/claude-auth.test.ts +7 -0
  201. package/server/modules/providers/tests/codex-sessions.test.ts +1 -1
  202. package/server/modules/providers/tests/opencode-sessions.test.ts +2 -2
  203. package/server/modules/providers/tests/provider.routes.test.ts +1 -1
  204. package/server/modules/system/system.service.ts +1 -1
  205. package/server/modules/system/tests/system.service.test.ts +1 -1
  206. package/server/modules/taskmaster/taskmaster.routes.ts +4 -3
  207. package/server/modules/websocket/services/shell-websocket.service.ts +1 -1
  208. package/server/modules/worktrees/services/worktree-list.service.ts +1 -1
  209. package/server/modules/worktrees/services/worktree-open.service.ts +1 -1
  210. package/server/modules/worktrees/services/worktree-remove.service.ts +1 -1
  211. package/server/shared/interfaces.ts +1 -1
  212. package/server/shared/types.ts +6 -6
  213. package/dist/assets/FileTree-DLE7Ioai.js +0 -127
  214. package/dist/assets/GitPanel-f8RMRa8D.js +0 -29
  215. package/dist/assets/PluginTabContent-DU1jjkXP.js +0 -1
  216. package/dist/assets/Shell-CN_2MRIM.js +0 -81
  217. package/dist/assets/Shell-qxJ8_QYu.css +0 -32
  218. package/dist/assets/StandaloneShell-D0avS8UE.js +0 -1
  219. package/dist/assets/TaskMasterPanel-Cpf1Q5Ph.js +0 -32
  220. package/dist/assets/abnfDiagram-N423BO3Z-p3aJIm4T.js +0 -1
  221. package/dist/assets/arc-CTeud6Fl.js +0 -1
  222. package/dist/assets/architectureDiagram-T3A2C74G-CG7kRCJU.js +0 -36
  223. package/dist/assets/c4Diagram-5PPSVZJV-RkzF0DJV.js +0 -10
  224. package/dist/assets/channel-BfQbarn9.js +0 -1
  225. package/dist/assets/chunk-5RXB4S5H-BTeYcgyb.js +0 -231
  226. package/dist/assets/chunk-GF5L2VYU-CKLZ3iVD.js +0 -206
  227. package/dist/assets/classDiagram-JCYQIIEL-Bpfe3kq7.js +0 -1
  228. package/dist/assets/classDiagram-v2-OCEON4UE-Bpfe3kq7.js +0 -1
  229. package/dist/assets/code-xml-CLpHzEOP.js +0 -6
  230. package/dist/assets/cose-bilkent-JH36ORCC-DlFcLXCB.js +0 -1
  231. package/dist/assets/cynefinDiagram-MW4NZA55-COgduz5P.js +0 -62
  232. package/dist/assets/cytoscape.esm-C10L9Icf.js +0 -331
  233. package/dist/assets/dagre-VZM6K2ZE-Bbb-siGp.js +0 -4
  234. package/dist/assets/diagram-LBJQPF4R-ErMC9yaa.js +0 -24
  235. package/dist/assets/diagram-Q27KOJAE-Dt_-C7hV.js +0 -24
  236. package/dist/assets/diagram-UB23O5K3-BJ1DnRAF.js +0 -41
  237. package/dist/assets/ebnfDiagram-BXEA7PRR-CE1YaQ9s.js +0 -1
  238. package/dist/assets/erDiagram-JOGREHBK-Bqk7N9aY.js +0 -85
  239. package/dist/assets/ganttDiagram-PKOTCBZU-CWYAUeYN.js +0 -292
  240. package/dist/assets/gitGraphDiagram-DS77QQ5N-tdEcEIM6.js +0 -106
  241. package/dist/assets/graph-Cx-EqisW.js +0 -1
  242. package/dist/assets/index-B-sTfSZq.js +0 -1
  243. package/dist/assets/index-B_FDMWar.js +0 -1174
  244. package/dist/assets/index-CWJtg2pR.js +0 -11
  245. package/dist/assets/index-t1w8KNxn.css +0 -1
  246. package/dist/assets/infoDiagram-6WML65LV-A3IqRUnO.js +0 -2
  247. package/dist/assets/ishikawaDiagram-WSZJBQD7-B2uL6bkK.js +0 -70
  248. package/dist/assets/journeyDiagram-NVQOT4AX-D9JB-hRW.js +0 -139
  249. package/dist/assets/map-CV9uif0g.js +0 -1
  250. package/dist/assets/mermaid.core-CQ698HNn.js +0 -312
  251. package/dist/assets/pegDiagram-VL7TDLO6-CO6vP4n9.js +0 -1
  252. package/dist/assets/quadrantDiagram-CIZ2JOQS-DgNxRz6t.js +0 -7
  253. package/dist/assets/railroadDiagram-AXF67PYL-DKz9UqA9.js +0 -1
  254. package/dist/assets/requirementDiagram-LRYGKXZP-L84XyGgV.js +0 -84
  255. package/dist/assets/sankeyDiagram-W5VNT64P-CQqWbJ3j.js +0 -40
  256. package/dist/assets/sequenceDiagram-SI44F4Z6--tnzS2tb.js +0 -162
  257. package/dist/assets/sizeCapture-X5ZJPWSS-DujwEOtm.js +0 -1
  258. package/dist/assets/stateDiagram-OKZ733FA-BK3TcZY2.js +0 -1
  259. package/dist/assets/stateDiagram-v2-UEYNNEHI-_medyomK.js +0 -1
  260. package/dist/assets/swimlanes-SLNWSIFB-naX-Uv1B.js +0 -2
  261. package/dist/assets/swimlanesDiagram-ULZ7WXOC-DstIv3TC.js +0 -8
  262. package/dist/assets/timeline-definition-Z64GVDOM-C-vP_ddU.js +0 -120
  263. package/dist/assets/vendor-react-whEHfigN.js +0 -59
  264. package/dist/assets/vennDiagram-T6HMQDX7-DN-I7o-7.js +0 -34
  265. package/dist/assets/xychartDiagram-ELKLHX3M-DE6OxW_p.js +0 -7
  266. package/dist/manifest.json +0 -61
package/electron/main.js CHANGED
@@ -11,7 +11,7 @@ import { TabsController } from './tabs.js';
11
11
 
12
12
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
13
13
 
14
- const APP_NAME = 'CloudCLI';
14
+ const APP_NAME = 'WindCli';
15
15
  const APP_USER_MODEL_ID = 'ai.cloudcli.desktop';
16
16
  const CALLBACK_PROTOCOL = 'cloudcli';
17
17
  const CALLBACK_URL = `${CALLBACK_PROTOCOL}://auth/callback`;
@@ -247,7 +247,7 @@ async function copyDiagnostics() {
247
247
  await dialog.showMessageBox(desktopWindow?.getMainWindow() || undefined, {
248
248
  type: 'info',
249
249
  title: 'Diagnostics copied',
250
- message: 'CloudCLI desktop diagnostics were copied to the clipboard.',
250
+ message: 'WindCli desktop diagnostics were copied to the clipboard.',
251
251
  });
252
252
  }
253
253
 
@@ -259,15 +259,15 @@ async function refreshCloudEnvironments({ showErrors = false } = {}) {
259
259
  } catch (error) {
260
260
  const authState = cloud.getAuthState();
261
261
  if (authState === 'expired') {
262
- const expiredError = new Error('Your CloudCLI session expired. Reconnect your account.');
262
+ const expiredError = new Error('Your CloudCLI Cloud session expired. Reconnect your account.');
263
263
  if (showErrors) {
264
- await showError('CloudCLI login required', expiredError);
264
+ await showError('CloudCLI Cloud login required', expiredError);
265
265
  return [];
266
266
  }
267
267
  throw expiredError;
268
268
  }
269
269
  if (showErrors) {
270
- await showError('Could not load CloudCLI environments', error);
270
+ await showError('Could not load CloudCLI Cloud environments', error);
271
271
  return [];
272
272
  }
273
273
  throw error;
@@ -299,13 +299,13 @@ async function handleDeepLink(url) {
299
299
  }
300
300
 
301
301
  if (!pendingCloudConnectStartedAt || Date.now() - pendingCloudConnectStartedAt > AUTH_CALLBACK_TTL_MS) {
302
- await showError('CloudCLI account connection failed', new Error('No recent CloudCLI account connection was started from this app.'));
302
+ await showError('CloudCLI Cloud account connection failed', new Error('No recent CloudCLI Cloud account connection was started from this app.'));
303
303
  return;
304
304
  }
305
305
 
306
306
  const apiKey = parsed.searchParams.get('api_key');
307
307
  if (!apiKey) {
308
- await showError('CloudCLI account connection failed', new Error('The callback did not include an API key.'));
308
+ await showError('CloudCLI Cloud account connection failed', new Error('The callback did not include an API key.'));
309
309
  return;
310
310
  }
311
311
 
@@ -318,8 +318,8 @@ async function handleDeepLink(url) {
318
318
 
319
319
  dialog.showMessageBox(desktopWindow?.getMainWindow() || undefined, {
320
320
  type: 'info',
321
- title: 'CloudCLI account connected',
322
- message: cloud.getAccount()?.email ? `Connected as ${cloud.getAccount().email}.` : 'CloudCLI account connected.',
321
+ title: 'CloudCLI Cloud account connected',
322
+ message: cloud.getAccount()?.email ? `Connected as ${cloud.getAccount().email}.` : 'CloudCLI Cloud account connected.',
323
323
  }).catch(() => {});
324
324
  }
325
325
 
@@ -329,7 +329,7 @@ async function copyLocalWebUrl() {
329
329
  const localUrl = localServer.getLocalServerUrl();
330
330
 
331
331
  if (!shareableUrl) {
332
- throw new Error('Local CloudCLI URL is not available yet.');
332
+ throw new Error('Local WindCli URL is not available yet.');
333
333
  }
334
334
 
335
335
  clipboard.writeText(shareableUrl);
@@ -340,7 +340,7 @@ async function copyLocalWebUrl() {
340
340
  message: isLanUrl ? 'LAN web URL copied.' : 'Local web URL copied.',
341
341
  detail: isLanUrl
342
342
  ? `${shareableUrl}\n\nUse this URL from another device on the same network.`
343
- : `${shareableUrl}\n\nThis URL works on this computer. Enable LAN access before starting Local CloudCLI to copy a phone-accessible URL.`,
343
+ : `${shareableUrl}\n\nThis URL works on this computer. Enable LAN access before starting Local WindCli to copy a phone-accessible URL.`,
344
344
  });
345
345
 
346
346
  return getDesktopState();
@@ -350,7 +350,7 @@ async function openLocalWebUi() {
350
350
  await localServer.ensureLocalServer();
351
351
  const url = localServer.getShareableWebUrl() || localServer.getLocalServerUrl();
352
352
  if (!url) {
353
- throw new Error('Local CloudCLI URL is not available yet.');
353
+ throw new Error('Local WindCli URL is not available yet.');
354
354
  }
355
355
 
356
356
  await openExternalUrl(url);
@@ -366,7 +366,7 @@ async function updateDesktopSetting(key, value) {
366
366
  type: 'info',
367
367
  title: 'Restart local server to apply',
368
368
  message: 'LAN access changes apply the next time the local server starts.',
369
- detail: 'Quit CloudCLI and stop the local server, then open Local CloudCLI again.',
369
+ detail: 'Quit WindCli and stop the local server, then open Local WindCli again.',
370
370
  });
371
371
  }
372
372
 
@@ -386,7 +386,7 @@ async function showEnvironmentPicker() {
386
386
  }
387
387
  }
388
388
 
389
- const choices = ['Local CloudCLI', ...environments.map((environment) => {
389
+ const choices = ['Local WindCli', ...environments.map((environment) => {
390
390
  const status = environment.status === 'running' ? '' : ` (${environment.status})`;
391
391
  return `${environment.name || environment.subdomain}${status}`;
392
392
  })];
@@ -396,7 +396,7 @@ async function showEnvironmentPicker() {
396
396
  buttons: [...choices, 'Cancel'],
397
397
  defaultId: 0,
398
398
  cancelId: choices.length,
399
- title: 'Switch CloudCLI Environment',
399
+ title: 'Switch WindCli Environment',
400
400
  message: 'Choose where this desktop window should connect.',
401
401
  detail: refreshError ? `Cloud environments could not be refreshed. Showing cached environments.\n\n${refreshError.message || refreshError}` : undefined,
402
402
  });
@@ -588,7 +588,7 @@ async function openEnvironmentInDesktop(environment) {
588
588
  cancelId: 1,
589
589
  title: 'Start environment?',
590
590
  message: `${pendingTarget.name} is ${environment.status}.`,
591
- detail: 'CloudCLI can start it before opening the remote app.',
591
+ detail: 'WindCli can start it before opening the remote app.',
592
592
  });
593
593
 
594
594
  if (response.response !== 0) {
@@ -696,7 +696,7 @@ function getRemoteEnvironmentMenuItems() {
696
696
  const environments = cloud.getEnvironments();
697
697
 
698
698
  if (!cloudAccount?.apiKey) {
699
- return [{ label: 'Connect CloudCLI Account...', click: () => void connectCloudAccount() }];
699
+ return [{ label: 'Connect CloudCLI Cloud Account...', click: () => void connectCloudAccount() }];
700
700
  }
701
701
 
702
702
  if (!environments.length) {
@@ -895,7 +895,7 @@ async function bootstrap() {
895
895
  app.setAboutPanelOptions({
896
896
  applicationName: APP_NAME,
897
897
  applicationVersion: app.getVersion(),
898
- copyright: 'CloudCLI',
898
+ copyright: 'WindCli',
899
899
  });
900
900
 
901
901
  localServer = new LocalServerController({
@@ -938,7 +938,7 @@ async function bootstrap() {
938
938
 
939
939
  if (registerSingleInstance()) {
940
940
  bootstrap().catch(async (error) => {
941
- await showError('CloudCLI failed to start', error);
941
+ await showError('WindCli failed to start', error);
942
942
  app.quit();
943
943
  });
944
944
  }
@@ -7,14 +7,14 @@ import os from 'node:os';
7
7
  import path from 'node:path';
8
8
 
9
9
  /**
10
- * Installs the versioned local server runtime used by CloudCLI Desktop.
10
+ * Installs the versioned local server runtime used by WindCli Desktop.
11
11
  *
12
12
  * Server bundles are cached under:
13
13
  * ~/.cloudcli/server/<version>/dist-server/server/index.js
14
14
  */
15
15
 
16
16
  const DEFAULT_INSTALL_ROOT = path.join(os.homedir(), '.cloudcli', 'server');
17
- const DEFAULT_BUNDLE_BASE_URL = 'https://github.com/siteboon/claudecodeui/releases/download';
17
+ const DEFAULT_BUNDLE_BASE_URL = 'https://github.com/CaineWind/wacli/releases/download';
18
18
  const MAX_REDIRECTS = 5;
19
19
  const LOCAL_DOWNLOAD_HOSTS = new Set(['localhost', '127.0.0.1', '::1']);
20
20
 
@@ -251,7 +251,7 @@ export class ViewHost {
251
251
  const view = this.getOrCreateTabView(tabId);
252
252
  if (view.__cloudcliLoadingUrl) return;
253
253
  this.attach(view);
254
- const html = buildPlaceholderHtml(target.name || this.appName, 'Starting Local CloudCLI...', logs);
254
+ const html = buildPlaceholderHtml(target.name || this.appName, 'Starting Local WindCli...', logs);
255
255
  if (view.__cloudcliStartupHtml === html) return;
256
256
  await view.webContents.loadURL(`data:text/html;charset=utf-8,${encodeURIComponent(html)}`);
257
257
  view.__cloudcliStartupHtml = html;
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "wind-agent-cli",
3
- "version": "1.37.3",
4
- "productName": "CloudCLI",
5
- "description": "A web-based UI for Claude Code CLI",
3
+ "version": "1.38.1",
4
+ "productName": "WindCli",
5
+ "description": "A local-first web interface for AI coding agents",
6
6
  "type": "module",
7
7
  "engines": {
8
8
  "node": ">=22"
@@ -48,7 +48,7 @@
48
48
  "server:bundle": "npm run build && node scripts/release/build-server-bundle.js",
49
49
  "desktop:icon:mac": "node electron/scripts/generate-macos-icon.js",
50
50
  "build": "npm run build:client && npm run build:server",
51
- "build:client": "vite build",
51
+ "build:client": "node scripts/build-client.mjs && node scripts/verify-pwa-build.mjs",
52
52
  "prebuild:server": "node -e \"require('node:fs').rmSync('dist-server.next', { recursive: true, force: true })\"",
53
53
  "build:server": "tsc -p server/tsconfig.json && tsc-alias -p server/tsconfig.json",
54
54
  "postbuild:server": "node scripts/promote-dist-server.mjs",
@@ -56,20 +56,22 @@
56
56
  "typecheck": "tsc --noEmit -p tsconfig.json && tsc --noEmit -p server/tsconfig.json",
57
57
  "test": "tsx --tsconfig server/tsconfig.json --test \"server/**/*.test.ts\" \"server/**/*.test.js\"",
58
58
  "test:client": "tsx --test \"src/**/*.test.ts\" \"src/**/*.test.tsx\"",
59
- "lint": "eslint src/ server/",
59
+ "lint": "eslint src/ server/ --max-warnings=0",
60
60
  "lint:fix": "eslint src/ server/ --fix",
61
61
  "start": "npm run build && npm run server",
62
62
  "release": "./release.sh",
63
63
  "prepublishOnly": "npm run build",
64
64
  "postinstall": "node scripts/fix-node-pty.js && node scripts/fix-codex-sdk-windows-hide.js",
65
65
  "prepare": "husky",
66
- "update:platform": "./update-platform.sh"
66
+ "update:platform": "./update-platform.sh",
67
+ "audit:production": "npm audit --omit=dev --audit-level=low",
68
+ "audit:all": "npm audit --audit-level=low"
67
69
  },
68
70
  "build": {
69
71
  "appId": "ai.cloudcli.desktop",
70
- "productName": "CloudCLI",
72
+ "productName": "WindCli",
71
73
  "asar": false,
72
- "artifactName": "cloudcli-desktop-${version}-${os}-${arch}.${ext}",
74
+ "artifactName": "windcli-desktop-${version}-${os}-${arch}.${ext}",
73
75
  "directories": {
74
76
  "output": "release/desktop"
75
77
  },
@@ -88,7 +90,7 @@
88
90
  ],
89
91
  "protocols": [
90
92
  {
91
- "name": "CloudCLI",
93
+ "name": "WindCli",
92
94
  "schemes": [
93
95
  "cloudcli"
94
96
  ]
@@ -102,11 +104,11 @@
102
104
  "dmg"
103
105
  ],
104
106
  "extendInfo": {
105
- "CFBundleName": "CloudCLI",
106
- "CFBundleDisplayName": "CloudCLI",
107
+ "CFBundleName": "WindCli",
108
+ "CFBundleDisplayName": "WindCli",
107
109
  "CFBundleURLTypes": [
108
110
  {
109
- "CFBundleURLName": "CloudCLI",
111
+ "CFBundleURLName": "WindCli",
110
112
  "CFBundleURLSchemes": [
111
113
  "cloudcli"
112
114
  ]
@@ -141,7 +143,7 @@
141
143
  "ui",
142
144
  "mobile IDE"
143
145
  ],
144
- "author": "CloudCLI UI Contributors",
146
+ "author": "WindCli contributors",
145
147
  "license": "AGPL-3.0-or-later",
146
148
  "dependencies": {
147
149
  "@anthropic-ai/claude-agent-sdk": "^0.3.165",
@@ -159,22 +161,22 @@
159
161
  "@replit/codemirror-minimap": "^0.5.2",
160
162
  "@tailwindcss/typography": "^0.5.16",
161
163
  "@uiw/react-codemirror": "^4.23.13",
162
- "@vscode/ripgrep": "^1.17.1",
164
+ "@vscode/ripgrep": "^1.18.0",
163
165
  "@xterm/addon-clipboard": "^0.1.0",
164
166
  "@xterm/addon-fit": "^0.10.0",
165
167
  "@xterm/addon-web-links": "^0.11.0",
166
168
  "@xterm/addon-webgl": "^0.18.0",
167
169
  "@xterm/xterm": "^5.5.0",
168
170
  "bcrypt": "^6.0.0",
169
- "better-sqlite3": "^12.6.2",
171
+ "better-sqlite3": "^13.0.3",
170
172
  "chokidar": "^4.0.3",
171
173
  "class-variance-authority": "^0.7.1",
172
174
  "clsx": "^2.1.1",
173
175
  "cmdk": "^1.1.1",
174
176
  "cors": "^2.8.5",
175
177
  "cross-spawn": "^7.0.3",
176
- "dompurify": "^3.4.7",
177
- "express": "^4.18.2",
178
+ "dompurify": "^3.4.14",
179
+ "express": "^4.22.2",
178
180
  "fuse.js": "^7.0.0",
179
181
  "gray-matter": "^4.0.3",
180
182
  "i18next": "^25.7.4",
@@ -186,7 +188,7 @@
186
188
  "lucide-react": "^0.515.0",
187
189
  "mermaid": "^11.16.1",
188
190
  "mime-types": "^3.0.1",
189
- "multer": "^2.0.1",
191
+ "multer": "^2.3.0",
190
192
  "node-fetch": "^2.7.0",
191
193
  "node-pty": "^1.2.0-beta.12",
192
194
  "react": "^18.2.0",
@@ -195,8 +197,8 @@
195
197
  "react-error-boundary": "^4.1.2",
196
198
  "react-i18next": "^16.5.3",
197
199
  "react-markdown": "^10.1.0",
198
- "react-router-dom": "^6.8.1",
199
- "react-syntax-highlighter": "^15.6.1",
200
+ "react-router-dom": "^7.18.3",
201
+ "react-syntax-highlighter": "^16.1.1",
200
202
  "rehype-katex": "^7.0.1",
201
203
  "rehype-raw": "^7.0.0",
202
204
  "remark-breaks": "^4.0.0",
@@ -204,29 +206,33 @@
204
206
  "remark-math": "^6.0.0",
205
207
  "tailwind-merge": "^3.3.1",
206
208
  "web-push": "^3.6.7",
207
- "ws": "^8.14.2"
209
+ "ws": "^8.21.3"
208
210
  },
209
211
  "devDependencies": {
210
212
  "@commitlint/cli": "^20.5.0",
211
213
  "@commitlint/config-conventional": "^20.5.0",
212
214
  "@eslint/js": "^9.39.3",
213
- "@release-it/conventional-changelog": "^10.0.5",
214
- "@types/better-sqlite3": "^7.6.13",
215
+ "@release-it/conventional-changelog": "^12.0.0",
216
+ "@testing-library/dom": "^10.4.1",
217
+ "@testing-library/react": "^16.3.3",
218
+ "@types/better-sqlite3": "^9.6.0",
215
219
  "@types/cors": "^2.8.19",
216
220
  "@types/cross-spawn": "^6.0.6",
217
221
  "@types/express": "^5.0.6",
222
+ "@types/jsdom": "^30.0.0",
218
223
  "@types/mime-types": "^3.0.1",
219
224
  "@types/multer": "^2.2.0",
220
225
  "@types/node": "^22.19.7",
221
226
  "@types/react": "^18.2.43",
222
227
  "@types/react-dom": "^18.2.17",
223
228
  "@types/ws": "^8.18.1",
224
- "@vitejs/plugin-react": "^4.6.0",
229
+ "@vitejs/plugin-react": "^5.2.0",
225
230
  "auto-changelog": "^2.5.0",
226
231
  "autoprefixer": "^10.4.16",
227
232
  "concurrently": "^8.2.2",
233
+ "conventional-changelog-conventionalcommits": "^10.4.0",
228
234
  "cross-env": "^10.1.0",
229
- "electron": "^38.0.0",
235
+ "electron": "^44.1.1",
230
236
  "electron-builder": "^26.15.3",
231
237
  "eslint": "^9.39.3",
232
238
  "eslint-import-resolver-typescript": "^4.4.4",
@@ -239,24 +245,34 @@
239
245
  "eslint-plugin-unused-imports": "^4.4.1",
240
246
  "globals": "^17.4.0",
241
247
  "husky": "^9.1.7",
248
+ "jsdom": "^29.1.1",
242
249
  "lint-staged": "^16.3.2",
243
- "node-gyp": "^10.0.0",
244
- "postcss": "^8.4.32",
245
- "release-it": "^19.0.5",
246
- "sharp": "^0.34.2",
247
- "tailwindcss": "^3.4.0",
250
+ "node-gyp": "^12.4.0",
251
+ "postcss": "^8.5.26",
252
+ "release-it": "^21.0.2",
253
+ "sharp": "^0.35.4",
254
+ "tailwindcss": "^3.4.19",
248
255
  "tsc-alias": "^1.8.16",
249
- "tsx": "^4.21.0",
256
+ "tsx": "^4.23.13",
250
257
  "typescript": "^5.9.3",
251
258
  "typescript-eslint": "^8.56.1",
252
- "vite": "^7.0.4"
259
+ "vite": "^7.3.6",
260
+ "vite-plugin-pwa": "^1.3.0"
261
+ },
262
+ "overrides": {
263
+ "@humanfs/node": "0.16.8",
264
+ "qs": "6.16.0"
253
265
  },
254
266
  "lint-staged": {
255
- "src/**/*.{ts,tsx,js,jsx}": "eslint",
256
- "server/**/*.{js,ts}": "eslint"
267
+ "src/**/*.{ts,tsx,js,jsx}": "eslint --max-warnings=0",
268
+ "server/**/*.{js,ts}": "eslint --max-warnings=0"
257
269
  },
258
- "optionalDependencies": {
259
- "@nut-tree-fork/nut-js": "^4.2.6",
260
- "screenshot-desktop": "^1.15.4"
270
+ "allowScripts": {
271
+ "bcrypt@6.0.0": true,
272
+ "electron-winstaller@5.4.0": true,
273
+ "esbuild@0.28.2": true,
274
+ "node-pty@1.2.0-beta.12": true,
275
+ "unrs-resolver@1.11.1": true,
276
+ "better-sqlite3": false
261
277
  }
262
278
  }
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>CloudCLI - API Documentation</title>
6
+ <title>WindCli - API Documentation</title>
7
7
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
8
8
  <link rel="icon" type="image/png" href="/favicon.png" />
9
9
 
@@ -418,7 +418,7 @@
418
418
  </svg>
419
419
  </div>
420
420
  <div class="brand-text">
421
- <h1>CloudCLI</h1>
421
+ <h1>WindCli</h1>
422
422
  <div class="subtitle">API Documentation</div>
423
423
  </div>
424
424
  </div>
@@ -0,0 +1,30 @@
1
+ import { build, createLogger } from 'vite';
2
+
3
+ const logger = createLogger('info');
4
+ const warnings = [];
5
+ const seenWarnings = new Set();
6
+ const originalWarn = logger.warn.bind(logger);
7
+ const originalWarnOnce = logger.warnOnce.bind(logger);
8
+
9
+ const recordWarning = (message) => {
10
+ if (!seenWarnings.has(message)) {
11
+ seenWarnings.add(message);
12
+ warnings.push(message);
13
+ }
14
+ };
15
+
16
+ logger.warn = (message, options) => {
17
+ recordWarning(message);
18
+ originalWarn(message, options);
19
+ };
20
+
21
+ logger.warnOnce = (message, options) => {
22
+ recordWarning(message);
23
+ originalWarnOnce(message, options);
24
+ };
25
+
26
+ await build({ customLogger: logger });
27
+
28
+ if (warnings.length > 0) {
29
+ throw new Error('Client build emitted ' + warnings.length + ' warning(s).');
30
+ }
@@ -0,0 +1,33 @@
1
+ param(
2
+ [string]$Source = "public/icons/new-icon.png"
3
+ )
4
+
5
+ $ErrorActionPreference = "Stop"
6
+ $sizes = @(72, 96, 128, 144, 152, 180, 192, 384, 512)
7
+
8
+ foreach ($size in $sizes) {
9
+ ffmpeg -hide_banner -loglevel error -y -i $Source `
10
+ -vf "scale=${size}:${size}:flags=lanczos,format=rgba" `
11
+ -frames:v 1 "public/icons/icon-${size}x${size}.png"
12
+ if ($LASTEXITCODE -ne 0) { throw "ffmpeg failed to generate ${size}x${size} icon" }
13
+ }
14
+
15
+ foreach ($size in @(192, 512)) {
16
+ ffmpeg -hide_banner -loglevel error -y `
17
+ -f lavfi -i "color=c=0x111111:s=${size}x${size}" -i $Source `
18
+ -filter_complex "[1:v]scale=${size}:${size}:flags=lanczos,format=rgba[fg];[0:v][fg]overlay=0:0:format=auto,format=rgb24[out]" `
19
+ -map "[out]" -frames:v 1 "public/icons/icon-maskable-${size}x${size}.png"
20
+ if ($LASTEXITCODE -ne 0) { throw "ffmpeg failed to generate ${size}x${size} maskable icon" }
21
+ }
22
+
23
+ foreach ($asset in @(
24
+ @{ Size = 32; Path = "public/favicon.png" },
25
+ @{ Size = 128; Path = "public/logo-128.png" },
26
+ @{ Size = 256; Path = "public/logo-256.png" }
27
+ )) {
28
+ $size = $asset.Size
29
+ ffmpeg -hide_banner -loglevel error -y -i $Source `
30
+ -vf "scale=${size}:${size}:flags=lanczos,format=rgba" `
31
+ -frames:v 1 $asset.Path
32
+ if ($LASTEXITCODE -ne 0) { throw "ffmpeg failed to generate $($asset.Path)" }
33
+ }
@@ -0,0 +1,37 @@
1
+ import { readFile } from 'node:fs/promises';
2
+
3
+ const manifestPath = new URL('../dist/manifest.webmanifest', import.meta.url);
4
+ const serviceWorkerPath = new URL('../dist/sw.js', import.meta.url);
5
+
6
+ const manifest = JSON.parse(await readFile(manifestPath, 'utf8'));
7
+ const serviceWorker = await readFile(serviceWorkerPath, 'utf8');
8
+
9
+ const assert = (condition, message) => {
10
+ if (!condition) throw new Error(`PWA build verification failed: ${message}`);
11
+ };
12
+
13
+ const assertPng = async (relativePath) => {
14
+ const file = await readFile(new URL(`../dist/${relativePath}`, import.meta.url));
15
+ assert(file.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10])), `${relativePath} is not a PNG file`);
16
+ };
17
+
18
+ assert(manifest.name === 'WindCli', 'manifest name must be WindCli');
19
+ assert(manifest.display === 'standalone', 'manifest must use standalone display mode');
20
+ assert(manifest.start_url === '.', 'manifest start_url must remain deployment-relative');
21
+ assert(manifest.scope === '.', 'manifest scope must remain deployment-relative');
22
+
23
+ for (const [size, purpose] of [['192x192', 'any'], ['512x512', 'any'], ['192x192', 'maskable'], ['512x512', 'maskable']]) {
24
+ const icon = manifest.icons?.find((candidate) => candidate.sizes === size && candidate.purpose === purpose);
25
+ assert(icon?.type === 'image/png', `missing ${size} ${purpose} PNG icon`);
26
+ await assertPng(icon.src);
27
+ }
28
+
29
+ assert(manifest.screenshots?.some((screenshot) => screenshot.form_factor === 'wide'), 'missing wide screenshot');
30
+ assert(manifest.screenshots?.some((screenshot) => screenshot.form_factor === 'narrow'), 'missing narrow screenshot');
31
+ assert(manifest.screenshots.every((screenshot) => screenshot.type === 'image/png'), 'screenshots must be PNG files');
32
+ await Promise.all(manifest.screenshots.map((screenshot) => assertPng(screenshot.src)));
33
+ assert(serviceWorker.includes('push-sw.js'), 'push notification worker is not imported');
34
+ assert(serviceWorker.includes('SKIP_WAITING'), 'prompted service-worker updates are not supported');
35
+ assert(serviceWorker.includes('plugin-ws'), 'navigation fallback denylist is missing server routes');
36
+
37
+ console.log(`PWA build verified: ${manifest.icons.length} icons, ${manifest.screenshots.length} screenshots`);
package/server/index.ts CHANGED
@@ -352,7 +352,7 @@ async function startServer() {
352
352
 
353
353
  console.log('');
354
354
  console.log(terminalTextStyles.dim('═'.repeat(63)));
355
- console.log(` ${terminalTextStyles.bright('CloudCLI Server - Ready')}`);
355
+ console.log(` ${terminalTextStyles.bright('WindCli Server - Ready')}`);
356
356
  console.log(terminalTextStyles.dim('═'.repeat(63)));
357
357
  console.log('');
358
358
  console.log(`${terminalTextStyles.info('[INFO]')} Server URL: ${terminalTextStyles.bright('http://' + DISPLAY_HOST + ':' + SERVER_PORT)}`);
@@ -34,8 +34,10 @@ try {
34
34
  }
35
35
  }
36
36
  });
37
- } catch (e: any) {
38
- console.error('No .env file found or error reading it:', e.message);
37
+ } catch (error: unknown) {
38
+ if (!(error instanceof Error && 'code' in error && error.code === 'ENOENT')) {
39
+ console.error('Unable to read .env:', error);
40
+ }
39
41
  }
40
42
 
41
43
  // Keep the default database in a stable user-level location so rebuilding dist-server
@@ -1166,7 +1166,7 @@ export function createAgentRouter(dependencies: AgentRouterDependencies): expres
1166
1166
  } else {
1167
1167
  prBody += `Agent task: ${message}`;
1168
1168
  }
1169
- prBody += '\n\n---\n*This pull request was automatically created by CloudCLI.ai Agent.*';
1169
+ prBody += '\n\n---\n*This pull request was automatically created by WindCli Agent.*';
1170
1170
 
1171
1171
  console.log(`📝 PR Title: ${prTitle}`);
1172
1172
 
@@ -287,7 +287,7 @@ function runCommand(command: string, args: string[]): Promise<void> {
287
287
  function formatInstallError(error: unknown): string {
288
288
  const message = error instanceof Error ? error.message : String(error);
289
289
  if (message.includes('sudo') && message.includes('password')) {
290
- return 'Installing Chromium system dependencies requires administrator privileges. Run `npx playwright install-deps chromium` on the machine where CloudCLI runs, then try again.';
290
+ return 'Installing Chromium system dependencies requires administrator privileges. Run `npx playwright install-deps chromium` on the machine where WindCli runs, then try again.';
291
291
  }
292
292
  return message || 'Failed to install Browser runtime.';
293
293
  }
@@ -84,7 +84,7 @@ function showStatus(dependencies: CliServiceDependencies): void {
84
84
  const claudeProjectsPath = path.join(dependencies.homeDirectory, '.claude', 'projects');
85
85
  const environmentFilePath = path.join(dependencies.applicationRoot, '.env');
86
86
 
87
- output.log(`\n${terminalTextStyles.bright('CloudCLI UI - Status')}\n`);
87
+ output.log(`\n${terminalTextStyles.bright('WindCli UI - Status')}\n`);
88
88
  output.log(terminalTextStyles.dim('═'.repeat(60)));
89
89
  output.log(`\n${terminalTextStyles.info('[INFO]')} Version: ${terminalTextStyles.bright(dependencies.packageMetadata.version)}`);
90
90
  output.log(`\n${terminalTextStyles.info('[INFO]')} Installation Directory:`);
@@ -127,14 +127,14 @@ function showStatus(dependencies: CliServiceDependencies): void {
127
127
  function showHelp(dependencies: CliServiceDependencies): void {
128
128
  dependencies.output.log(`
129
129
  ╔═══════════════════════════════════════════════════════════════╗
130
- CloudCLI - Command Line Tool ║
130
+ WindCli - Command Line Tool ║
131
131
  ╚═══════════════════════════════════════════════════════════════╝
132
132
 
133
133
  Usage:
134
134
  wacli [command] [options]
135
135
 
136
136
  Commands:
137
- start Start the CloudCLI server (default)
137
+ start Start the WindCli server (default)
138
138
  sandbox Manage Docker sandbox environments
139
139
  browser-use-mcp Run Browser MCP stdio server
140
140
  status Show configuration and data locations
@@ -162,10 +162,10 @@ Environment Variables:
162
162
  CONTEXT_WINDOW Set context window size (default: 160000)
163
163
 
164
164
  Documentation:
165
- ${dependencies.packageMetadata.homepage || 'https://github.com/siteboon/claudecodeui'}
165
+ ${dependencies.packageMetadata.homepage || 'https://github.com/CaineWind/wacli'}
166
166
 
167
167
  Report Issues:
168
- ${dependencies.packageMetadata.bugsUrl || 'https://github.com/siteboon/claudecodeui/issues'}
168
+ ${dependencies.packageMetadata.bugsUrl || 'https://github.com/CaineWind/wacli/issues'}
169
169
  `);
170
170
  }
171
171