claudedesk 3.8.6 → 4.1.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 (354) hide show
  1. package/.github/workflows/ci.yml +72 -0
  2. package/.github/workflows/release.yml +112 -0
  3. package/CHANGELOG.md +179 -0
  4. package/CONTRIBUTING.md +450 -0
  5. package/LICENSE +1 -1
  6. package/README.md +242 -1404
  7. package/SECURITY.md +88 -0
  8. package/dist/main/ansi-strip.js +25 -0
  9. package/dist/main/built-in-actions.js +137 -0
  10. package/dist/main/checkpoint-manager.js +301 -0
  11. package/dist/main/checkpoint-persistence.js +182 -0
  12. package/dist/main/cli-manager.js +223 -0
  13. package/dist/main/file-dragdrop-handler.js +168 -0
  14. package/dist/main/file-utils.js +211 -0
  15. package/dist/main/history-manager.js +737 -0
  16. package/dist/main/index.js +225 -0
  17. package/dist/main/ipc-emitter.js +22 -0
  18. package/dist/main/ipc-handlers.js +441 -0
  19. package/dist/main/ipc-registry.js +52 -0
  20. package/dist/main/prompt-templates-manager.js +209 -0
  21. package/dist/main/quota-service.js +318 -0
  22. package/dist/main/session-manager.js +301 -0
  23. package/dist/main/session-persistence.js +121 -0
  24. package/dist/main/session-pool.js +226 -0
  25. package/dist/main/settings-persistence.js +356 -0
  26. package/dist/preload/index.js +46 -0
  27. package/dist/renderer/assets/index-B6x9OLWJ.css +32 -0
  28. package/dist/renderer/assets/index-VvIMscbd.js +12863 -0
  29. package/dist/renderer/index.html +14 -0
  30. package/dist/shared/claude-detector.js +44 -0
  31. package/dist/shared/ipc-contract.js +158 -0
  32. package/dist/shared/ipc-types.js +2 -0
  33. package/dist/shared/types/checkpoint-types.js +5 -0
  34. package/dist/shared/types/history-types.js +5 -0
  35. package/dist/shared/types/prompt-templates.js +3 -0
  36. package/electron-builder.yml +54 -0
  37. package/package.json +38 -92
  38. package/postcss.config.js +6 -0
  39. package/resources/.gitkeep +0 -0
  40. package/resources/icon.svg +8 -0
  41. package/src/main/ansi-strip.ts +25 -0
  42. package/src/main/built-in-actions.ts +136 -0
  43. package/src/main/checkpoint-manager.ts +356 -0
  44. package/src/main/checkpoint-persistence.ts +158 -0
  45. package/src/main/cli-manager.ts +225 -0
  46. package/src/main/file-dragdrop-handler.ts +164 -0
  47. package/src/main/file-utils.ts +190 -0
  48. package/src/main/history-manager.ts +801 -0
  49. package/src/main/index.ts +220 -0
  50. package/src/main/ipc-emitter.ts +28 -0
  51. package/src/main/ipc-handlers.ts +326 -0
  52. package/src/main/ipc-registry.ts +72 -0
  53. package/src/main/prompt-templates-manager.ts +211 -0
  54. package/src/main/quota-service.ts +388 -0
  55. package/src/main/session-manager.ts +384 -0
  56. package/src/main/session-persistence.ts +93 -0
  57. package/src/main/session-pool.ts +277 -0
  58. package/src/main/settings-persistence.ts +390 -0
  59. package/src/preload/index.ts +54 -0
  60. package/src/renderer/App.tsx +821 -0
  61. package/src/renderer/components/AboutDialog.tsx +322 -0
  62. package/src/renderer/components/CheckpointPanel.tsx +374 -0
  63. package/src/renderer/components/CommandPalette.tsx +465 -0
  64. package/src/renderer/components/DragDropContextMenu.tsx +233 -0
  65. package/src/renderer/components/DragDropOverlay.tsx +202 -0
  66. package/src/renderer/components/DragDropSettings.tsx +401 -0
  67. package/src/renderer/components/HistoryPanel.css +536 -0
  68. package/src/renderer/components/HistoryPanel.tsx +681 -0
  69. package/src/renderer/components/PaneHeader.tsx +251 -0
  70. package/src/renderer/components/PaneSessionPicker.tsx +206 -0
  71. package/src/renderer/components/SplitLayout.tsx +215 -0
  72. package/src/renderer/components/TemplateEditor.tsx +805 -0
  73. package/src/renderer/components/Terminal.tsx +677 -0
  74. package/src/renderer/components/TitleBarBranding.tsx +124 -0
  75. package/src/renderer/components/ui/BrandLogo.tsx +29 -0
  76. package/src/renderer/components/ui/BudgetPanel.tsx +1087 -0
  77. package/src/renderer/components/ui/BudgetSettings.tsx +1181 -0
  78. package/src/renderer/components/ui/CheckpointDialog.tsx +273 -0
  79. package/src/renderer/components/ui/ConfirmDialog.tsx +219 -0
  80. package/src/renderer/components/ui/ContextMenu.tsx +205 -0
  81. package/src/renderer/components/ui/EmptyState.tsx +116 -0
  82. package/src/renderer/components/ui/NewSessionDialog.tsx +921 -0
  83. package/src/renderer/components/ui/SettingsDialog.tsx +1513 -0
  84. package/src/renderer/components/ui/Tab.tsx +430 -0
  85. package/src/renderer/components/ui/TabBar.tsx +593 -0
  86. package/src/renderer/components/ui/index.ts +18 -0
  87. package/src/renderer/hooks/index.ts +2 -0
  88. package/src/renderer/hooks/useCheckpoints.ts +267 -0
  89. package/src/renderer/hooks/useCommandPalette.ts +146 -0
  90. package/src/renderer/hooks/useDragDrop.ts +134 -0
  91. package/src/renderer/hooks/useHistory.ts +190 -0
  92. package/src/renderer/hooks/useQuota.ts +84 -0
  93. package/src/renderer/hooks/useSessionManager.ts +199 -0
  94. package/src/renderer/hooks/useSplitView.ts +464 -0
  95. package/src/renderer/index.html +13 -0
  96. package/src/renderer/main.tsx +10 -0
  97. package/src/renderer/styles/globals.css +244 -0
  98. package/src/renderer/utils/fuzzy-search.ts +184 -0
  99. package/src/renderer/utils/toast.ts +83 -0
  100. package/src/renderer/utils/variable-resolver.ts +111 -0
  101. package/src/shared/claude-detector.ts +42 -0
  102. package/src/shared/ipc-contract.ts +392 -0
  103. package/src/shared/ipc-types.ts +251 -0
  104. package/src/shared/types/checkpoint-types.ts +86 -0
  105. package/src/shared/types/history-types.ts +106 -0
  106. package/src/shared/types/prompt-templates.ts +60 -0
  107. package/tailwind.config.js +27 -0
  108. package/tsconfig.json +28 -0
  109. package/tsconfig.main.json +25 -0
  110. package/tsconfig.node.json +11 -0
  111. package/vite.config.ts +22 -0
  112. package/config/repos.example.json +0 -128
  113. package/config/settings.example.json +0 -87
  114. package/config/skills/code-review.md +0 -76
  115. package/config/skills/full-check.md +0 -26
  116. package/config/skills/lint-fix.md +0 -23
  117. package/dist/api/agent-routes.d.ts +0 -2
  118. package/dist/api/agent-routes.d.ts.map +0 -1
  119. package/dist/api/agent-routes.js +0 -435
  120. package/dist/api/agent-routes.js.map +0 -1
  121. package/dist/api/app-routes.d.ts +0 -2
  122. package/dist/api/app-routes.d.ts.map +0 -1
  123. package/dist/api/app-routes.js +0 -150
  124. package/dist/api/app-routes.js.map +0 -1
  125. package/dist/api/docker-routes.d.ts +0 -2
  126. package/dist/api/docker-routes.d.ts.map +0 -1
  127. package/dist/api/docker-routes.js +0 -167
  128. package/dist/api/docker-routes.js.map +0 -1
  129. package/dist/api/idea-routes.d.ts +0 -2
  130. package/dist/api/idea-routes.d.ts.map +0 -1
  131. package/dist/api/idea-routes.js +0 -176
  132. package/dist/api/idea-routes.js.map +0 -1
  133. package/dist/api/mcp-routes.d.ts +0 -2
  134. package/dist/api/mcp-routes.d.ts.map +0 -1
  135. package/dist/api/mcp-routes.js +0 -306
  136. package/dist/api/mcp-routes.js.map +0 -1
  137. package/dist/api/middleware.d.ts +0 -10
  138. package/dist/api/middleware.d.ts.map +0 -1
  139. package/dist/api/middleware.js +0 -298
  140. package/dist/api/middleware.js.map +0 -1
  141. package/dist/api/pin-auth.d.ts +0 -65
  142. package/dist/api/pin-auth.d.ts.map +0 -1
  143. package/dist/api/pin-auth.js +0 -218
  144. package/dist/api/pin-auth.js.map +0 -1
  145. package/dist/api/routes.d.ts +0 -2
  146. package/dist/api/routes.d.ts.map +0 -1
  147. package/dist/api/routes.js +0 -491
  148. package/dist/api/routes.js.map +0 -1
  149. package/dist/api/settings-routes.d.ts +0 -2
  150. package/dist/api/settings-routes.d.ts.map +0 -1
  151. package/dist/api/settings-routes.js +0 -797
  152. package/dist/api/settings-routes.js.map +0 -1
  153. package/dist/api/skill-routes.d.ts +0 -2
  154. package/dist/api/skill-routes.d.ts.map +0 -1
  155. package/dist/api/skill-routes.js +0 -88
  156. package/dist/api/skill-routes.js.map +0 -1
  157. package/dist/api/system-routes.d.ts +0 -5
  158. package/dist/api/system-routes.d.ts.map +0 -1
  159. package/dist/api/system-routes.js +0 -367
  160. package/dist/api/system-routes.js.map +0 -1
  161. package/dist/api/terminal-routes.d.ts +0 -2
  162. package/dist/api/terminal-routes.d.ts.map +0 -1
  163. package/dist/api/terminal-routes.js +0 -4440
  164. package/dist/api/terminal-routes.js.map +0 -1
  165. package/dist/api/tunnel-routes.d.ts +0 -2
  166. package/dist/api/tunnel-routes.d.ts.map +0 -1
  167. package/dist/api/tunnel-routes.js +0 -194
  168. package/dist/api/tunnel-routes.js.map +0 -1
  169. package/dist/api/workspace-routes.d.ts +0 -3
  170. package/dist/api/workspace-routes.d.ts.map +0 -1
  171. package/dist/api/workspace-routes.js +0 -871
  172. package/dist/api/workspace-routes.js.map +0 -1
  173. package/dist/cli.d.ts +0 -3
  174. package/dist/cli.d.ts.map +0 -1
  175. package/dist/cli.js +0 -418
  176. package/dist/cli.js.map +0 -1
  177. package/dist/client/assets/index-CY1_Wy-P.css +0 -1
  178. package/dist/client/assets/index-DeLzq_MS.js +0 -7858
  179. package/dist/client/favicon.svg +0 -37
  180. package/dist/client/icons/icon-192.svg +0 -5
  181. package/dist/client/icons/icon-512.svg +0 -5
  182. package/dist/client/icons/logo-with-message.png +0 -0
  183. package/dist/client/icons/logo.png +0 -0
  184. package/dist/client/index.html +0 -25
  185. package/dist/client/manifest.json +0 -62
  186. package/dist/client/sw.js +0 -243
  187. package/dist/config/agent-usage.d.ts +0 -35
  188. package/dist/config/agent-usage.d.ts.map +0 -1
  189. package/dist/config/agent-usage.js +0 -113
  190. package/dist/config/agent-usage.js.map +0 -1
  191. package/dist/config/mcp-catalog.d.ts +0 -18
  192. package/dist/config/mcp-catalog.d.ts.map +0 -1
  193. package/dist/config/mcp-catalog.js +0 -583
  194. package/dist/config/mcp-catalog.js.map +0 -1
  195. package/dist/config/mcp-servers.d.ts +0 -42
  196. package/dist/config/mcp-servers.d.ts.map +0 -1
  197. package/dist/config/mcp-servers.js +0 -158
  198. package/dist/config/mcp-servers.js.map +0 -1
  199. package/dist/config/repos.d.ts +0 -37
  200. package/dist/config/repos.d.ts.map +0 -1
  201. package/dist/config/repos.js +0 -461
  202. package/dist/config/repos.js.map +0 -1
  203. package/dist/config/settings.d.ts +0 -856
  204. package/dist/config/settings.d.ts.map +0 -1
  205. package/dist/config/settings.js +0 -668
  206. package/dist/config/settings.js.map +0 -1
  207. package/dist/config/skills.d.ts +0 -19
  208. package/dist/config/skills.d.ts.map +0 -1
  209. package/dist/config/skills.js +0 -201
  210. package/dist/config/skills.js.map +0 -1
  211. package/dist/config/workspaces.d.ts +0 -1038
  212. package/dist/config/workspaces.d.ts.map +0 -1
  213. package/dist/config/workspaces.js +0 -600
  214. package/dist/config/workspaces.js.map +0 -1
  215. package/dist/core/allocator-manager.d.ts +0 -98
  216. package/dist/core/allocator-manager.d.ts.map +0 -1
  217. package/dist/core/allocator-manager.js +0 -412
  218. package/dist/core/allocator-manager.js.map +0 -1
  219. package/dist/core/app-manager.d.ts +0 -85
  220. package/dist/core/app-manager.d.ts.map +0 -1
  221. package/dist/core/app-manager.js +0 -447
  222. package/dist/core/app-manager.js.map +0 -1
  223. package/dist/core/claude-invoker.d.ts +0 -50
  224. package/dist/core/claude-invoker.d.ts.map +0 -1
  225. package/dist/core/claude-invoker.js +0 -588
  226. package/dist/core/claude-invoker.js.map +0 -1
  227. package/dist/core/claude-session-reader.d.ts +0 -25
  228. package/dist/core/claude-session-reader.d.ts.map +0 -1
  229. package/dist/core/claude-session-reader.js +0 -184
  230. package/dist/core/claude-session-reader.js.map +0 -1
  231. package/dist/core/claude-usage-query.d.ts +0 -87
  232. package/dist/core/claude-usage-query.d.ts.map +0 -1
  233. package/dist/core/claude-usage-query.js +0 -307
  234. package/dist/core/claude-usage-query.js.map +0 -1
  235. package/dist/core/context-manager.d.ts +0 -85
  236. package/dist/core/context-manager.d.ts.map +0 -1
  237. package/dist/core/context-manager.js +0 -326
  238. package/dist/core/context-manager.js.map +0 -1
  239. package/dist/core/git-credential-helper.d.ts +0 -57
  240. package/dist/core/git-credential-helper.d.ts.map +0 -1
  241. package/dist/core/git-credential-helper.js +0 -182
  242. package/dist/core/git-credential-helper.js.map +0 -1
  243. package/dist/core/git-sandbox.d.ts +0 -140
  244. package/dist/core/git-sandbox.d.ts.map +0 -1
  245. package/dist/core/git-sandbox.js +0 -926
  246. package/dist/core/git-sandbox.js.map +0 -1
  247. package/dist/core/github-integration.d.ts +0 -95
  248. package/dist/core/github-integration.d.ts.map +0 -1
  249. package/dist/core/github-integration.js +0 -494
  250. package/dist/core/github-integration.js.map +0 -1
  251. package/dist/core/github-oauth.d.ts +0 -88
  252. package/dist/core/github-oauth.d.ts.map +0 -1
  253. package/dist/core/github-oauth.js +0 -245
  254. package/dist/core/github-oauth.js.map +0 -1
  255. package/dist/core/gitlab-integration.d.ts +0 -66
  256. package/dist/core/gitlab-integration.d.ts.map +0 -1
  257. package/dist/core/gitlab-integration.js +0 -353
  258. package/dist/core/gitlab-integration.js.map +0 -1
  259. package/dist/core/gitlab-oauth.d.ts +0 -100
  260. package/dist/core/gitlab-oauth.d.ts.map +0 -1
  261. package/dist/core/gitlab-oauth.js +0 -366
  262. package/dist/core/gitlab-oauth.js.map +0 -1
  263. package/dist/core/idea-manager.d.ts +0 -41
  264. package/dist/core/idea-manager.d.ts.map +0 -1
  265. package/dist/core/idea-manager.js +0 -674
  266. package/dist/core/idea-manager.js.map +0 -1
  267. package/dist/core/insights-extractor.d.ts +0 -68
  268. package/dist/core/insights-extractor.d.ts.map +0 -1
  269. package/dist/core/insights-extractor.js +0 -402
  270. package/dist/core/insights-extractor.js.map +0 -1
  271. package/dist/core/logger.d.ts +0 -27
  272. package/dist/core/logger.d.ts.map +0 -1
  273. package/dist/core/logger.js +0 -70
  274. package/dist/core/logger.js.map +0 -1
  275. package/dist/core/mcp-client.d.ts +0 -41
  276. package/dist/core/mcp-client.d.ts.map +0 -1
  277. package/dist/core/mcp-client.js +0 -190
  278. package/dist/core/mcp-client.js.map +0 -1
  279. package/dist/core/mcp-manager.d.ts +0 -62
  280. package/dist/core/mcp-manager.d.ts.map +0 -1
  281. package/dist/core/mcp-manager.js +0 -288
  282. package/dist/core/mcp-manager.js.map +0 -1
  283. package/dist/core/pipeline-monitor.d.ts +0 -81
  284. package/dist/core/pipeline-monitor.d.ts.map +0 -1
  285. package/dist/core/pipeline-monitor.js +0 -667
  286. package/dist/core/pipeline-monitor.js.map +0 -1
  287. package/dist/core/process-runner.d.ts +0 -27
  288. package/dist/core/process-runner.d.ts.map +0 -1
  289. package/dist/core/process-runner.js +0 -147
  290. package/dist/core/process-runner.js.map +0 -1
  291. package/dist/core/project-detector.d.ts +0 -30
  292. package/dist/core/project-detector.d.ts.map +0 -1
  293. package/dist/core/project-detector.js +0 -482
  294. package/dist/core/project-detector.js.map +0 -1
  295. package/dist/core/qr-generator.d.ts +0 -18
  296. package/dist/core/qr-generator.d.ts.map +0 -1
  297. package/dist/core/qr-generator.js +0 -61
  298. package/dist/core/qr-generator.js.map +0 -1
  299. package/dist/core/remote-tunnel-manager.d.ts +0 -59
  300. package/dist/core/remote-tunnel-manager.d.ts.map +0 -1
  301. package/dist/core/remote-tunnel-manager.js +0 -235
  302. package/dist/core/remote-tunnel-manager.js.map +0 -1
  303. package/dist/core/shared-docker-manager.d.ts +0 -41
  304. package/dist/core/shared-docker-manager.d.ts.map +0 -1
  305. package/dist/core/shared-docker-manager.js +0 -433
  306. package/dist/core/shared-docker-manager.js.map +0 -1
  307. package/dist/core/skill-executor.d.ts +0 -25
  308. package/dist/core/skill-executor.d.ts.map +0 -1
  309. package/dist/core/skill-executor.js +0 -171
  310. package/dist/core/skill-executor.js.map +0 -1
  311. package/dist/core/terminal-session.d.ts +0 -181
  312. package/dist/core/terminal-session.d.ts.map +0 -1
  313. package/dist/core/terminal-session.js +0 -3033
  314. package/dist/core/terminal-session.js.map +0 -1
  315. package/dist/core/token-encryption.d.ts +0 -35
  316. package/dist/core/token-encryption.d.ts.map +0 -1
  317. package/dist/core/token-encryption.js +0 -162
  318. package/dist/core/token-encryption.js.map +0 -1
  319. package/dist/core/token-estimator.d.ts +0 -66
  320. package/dist/core/token-estimator.d.ts.map +0 -1
  321. package/dist/core/token-estimator.js +0 -231
  322. package/dist/core/token-estimator.js.map +0 -1
  323. package/dist/core/tunnel-manager.d.ts +0 -35
  324. package/dist/core/tunnel-manager.d.ts.map +0 -1
  325. package/dist/core/tunnel-manager.js +0 -137
  326. package/dist/core/tunnel-manager.js.map +0 -1
  327. package/dist/core/update-checker.d.ts +0 -67
  328. package/dist/core/update-checker.d.ts.map +0 -1
  329. package/dist/core/update-checker.js +0 -334
  330. package/dist/core/update-checker.js.map +0 -1
  331. package/dist/core/usage-manager.d.ts +0 -57
  332. package/dist/core/usage-manager.d.ts.map +0 -1
  333. package/dist/core/usage-manager.js +0 -386
  334. package/dist/core/usage-manager.js.map +0 -1
  335. package/dist/core/ws-manager.d.ts +0 -46
  336. package/dist/core/ws-manager.d.ts.map +0 -1
  337. package/dist/core/ws-manager.js +0 -170
  338. package/dist/core/ws-manager.js.map +0 -1
  339. package/dist/index.d.ts +0 -8
  340. package/dist/index.d.ts.map +0 -1
  341. package/dist/index.js +0 -370
  342. package/dist/index.js.map +0 -1
  343. package/dist/types.d.ts +0 -1403
  344. package/dist/types.d.ts.map +0 -1
  345. package/dist/types.js +0 -201
  346. package/dist/types.js.map +0 -1
  347. package/dist/utils/encryption.d.ts +0 -30
  348. package/dist/utils/encryption.d.ts.map +0 -1
  349. package/dist/utils/encryption.js +0 -59
  350. package/dist/utils/encryption.js.map +0 -1
  351. package/dist/utils/prerequisite-checker.d.ts +0 -10
  352. package/dist/utils/prerequisite-checker.d.ts.map +0 -1
  353. package/dist/utils/prerequisite-checker.js +0 -61
  354. package/dist/utils/prerequisite-checker.js.map +0 -1
@@ -0,0 +1,72 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ build:
11
+ name: Build and Test
12
+ runs-on: ${{ matrix.os }}
13
+
14
+ strategy:
15
+ matrix:
16
+ node-version: [18.x, 20.x]
17
+ os: [ubuntu-latest, windows-latest, macos-latest]
18
+
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+
22
+ - name: Use Node.js ${{ matrix.node-version }}
23
+ uses: actions/setup-node@v4
24
+ with:
25
+ node-version: ${{ matrix.node-version }}
26
+ cache: 'npm'
27
+
28
+ - name: Install dependencies
29
+ run: npm ci
30
+
31
+ - name: Build TypeScript (main process)
32
+ run: npm run build:electron
33
+
34
+ - name: Build React app (renderer)
35
+ run: npm run build
36
+
37
+ - name: Run tests
38
+ run: npm test
39
+
40
+ package:
41
+ name: Package Electron App
42
+ runs-on: ${{ matrix.os }}
43
+
44
+ strategy:
45
+ matrix:
46
+ os: [ubuntu-latest, windows-latest, macos-latest]
47
+
48
+ steps:
49
+ - uses: actions/checkout@v4
50
+
51
+ - name: Setup Node.js
52
+ uses: actions/setup-node@v4
53
+ with:
54
+ node-version: '20.x'
55
+ cache: 'npm'
56
+
57
+ - name: Install dependencies
58
+ run: npm ci
59
+
60
+ - name: Package app
61
+ run: npm run package -- --publish never
62
+
63
+ - name: Upload build artifacts
64
+ uses: actions/upload-artifact@v4
65
+ with:
66
+ name: claudedesk-${{ matrix.os }}
67
+ path: |
68
+ release/**/*.exe
69
+ release/**/*.dmg
70
+ release/**/*.AppImage
71
+ release/**/*.deb
72
+ if-no-files-found: warn
@@ -0,0 +1,112 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ jobs:
9
+ build-and-release:
10
+ name: Build and Release
11
+ runs-on: ${{ matrix.os }}
12
+ permissions:
13
+ contents: write
14
+
15
+ strategy:
16
+ matrix:
17
+ include:
18
+ - os: windows-latest
19
+ platform: win
20
+ - os: macos-latest
21
+ platform: mac
22
+ - os: ubuntu-latest
23
+ platform: linux
24
+
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+
28
+ - name: Setup Node.js
29
+ uses: actions/setup-node@v4
30
+ with:
31
+ node-version: '20.x'
32
+ cache: 'npm'
33
+
34
+ - name: Install dependencies
35
+ run: npm ci
36
+
37
+ - name: Build and package Electron app
38
+ run: npm run package:${{ matrix.platform }}
39
+ env:
40
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
41
+
42
+ - name: Upload artifacts
43
+ uses: actions/upload-artifact@v4
44
+ with:
45
+ name: claudedesk-${{ matrix.platform }}
46
+ path: |
47
+ release/*Setup*.exe
48
+ release/*.dmg
49
+ release/*.AppImage
50
+ release/*.deb
51
+ release/*.rpm
52
+ if-no-files-found: warn
53
+
54
+ publish-npm:
55
+ name: Publish to npm
56
+ runs-on: ubuntu-latest
57
+ needs: build-and-release
58
+
59
+ steps:
60
+ - uses: actions/checkout@v4
61
+
62
+ - name: Setup Node.js
63
+ uses: actions/setup-node@v4
64
+ with:
65
+ node-version: '20.x'
66
+ registry-url: 'https://registry.npmjs.org'
67
+
68
+ - name: Install dependencies
69
+ run: npm ci
70
+
71
+ - name: Build
72
+ run: |
73
+ npm run build:electron
74
+ npm run build
75
+
76
+ - name: Publish to npm
77
+ run: npm publish --access public || echo "Version already published, skipping"
78
+ env:
79
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
80
+
81
+ create-release:
82
+ name: Create GitHub Release
83
+ runs-on: ubuntu-latest
84
+ needs: build-and-release
85
+ permissions:
86
+ contents: write
87
+
88
+ steps:
89
+ - uses: actions/checkout@v4
90
+
91
+ - name: Download all artifacts
92
+ uses: actions/download-artifact@v4
93
+ with:
94
+ path: artifacts
95
+
96
+ - name: Display artifact structure
97
+ run: ls -R artifacts/
98
+
99
+ - name: Create Release
100
+ uses: softprops/action-gh-release@v1
101
+ with:
102
+ generate_release_notes: true
103
+ draft: false
104
+ prerelease: false
105
+ files: |
106
+ artifacts/**/*Setup*.exe
107
+ artifacts/**/*.dmg
108
+ artifacts/**/*.AppImage
109
+ artifacts/**/*.deb
110
+ artifacts/**/*.rpm
111
+ env:
112
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
package/CHANGELOG.md ADDED
@@ -0,0 +1,179 @@
1
+ # Changelog
2
+
3
+ All notable changes to ClaudeDesk will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Planned
11
+ - Screenshot capture for README documentation
12
+ - Automated tests with Jest/Vitest
13
+ - Homebrew/Chocolatey packaging for easier installation
14
+ - Development dependency security updates (electron v40+, vite v7+)
15
+
16
+ ---
17
+
18
+ ## [4.1.1] - 2026-02-09
19
+
20
+ ### Changed
21
+ - **IPC Abstraction Layer** - Refactored IPC architecture to define each method once and auto-derive everything else
22
+ - New `ipc-contract.ts` — single source of truth for all IPC channels, args, and return types
23
+ - New `ipc-registry.ts` — typed handler registration with automatic cleanup
24
+ - New `ipc-emitter.ts` — type-safe main→renderer push events
25
+ - Reduced `ipc-handlers.ts` from 602 to ~290 lines
26
+ - Reduced `preload/index.ts` from 367 to ~55 lines (auto-generated bridge)
27
+ - Adding a new IPC method now requires changes to 2 files instead of 5
28
+
29
+ ### Removed
30
+ - **Legacy terminal API** — Removed deprecated `sendTerminalInput`, `onTerminalOutput`, `resizeTerminal`, `terminalReady` methods
31
+ - **Dead IPC channels** — Removed unused `TERMINAL_INPUT`, `TERMINAL_OUTPUT`, `TERMINAL_RESIZE`, `TERMINAL_READY`, `CHECKPOINT_CLEANUP_SESSION` channels
32
+ - **Manual cleanup bugs** — 3 handlers that were missing from `removeIPCHandlers()` are now auto-cleaned by the registry
33
+
34
+ ### Fixed
35
+ - **IPC handler cleanup** — All registered handlers and listeners are now properly removed on window close (previously 3 handlers were leaked)
36
+
37
+ ---
38
+
39
+ ## [4.1.0] - 2026-02-08
40
+
41
+ ### Added
42
+ - **Full 4-pane split view support** - Users can now split panes individually up to 4 total panes
43
+ - Added horizontal split button (⬌) to each pane header - splits pane left/right
44
+ - Added vertical split button (⬍) to each pane header - splits pane top/bottom
45
+ - Split buttons only appear when paneCount < 4
46
+ - Blue hover effect distinguishes split buttons from close button
47
+ - Enables complex layouts: 2x2 grids, 3-pane L-shapes, etc.
48
+
49
+ ### Fixed
50
+ - **Split view limitation** - Previously, the toggle split button only supported switching between 1 and 2 panes. While the backend supported 4 panes, there was no UI to access this. Now users can create 3-4 pane layouts by splitting individual panes.
51
+
52
+ ---
53
+
54
+ ## [4.0.0] - 2026-02-08
55
+
56
+ ### 🚨 BREAKING CHANGES
57
+
58
+ **Complete rewrite**: ClaudeDesk has been rebuilt from the ground up as an Electron desktop application.
59
+
60
+ **Previous versions (v3.x and below)** were a Docker-based web application. Version 4.0.0 is a **completely different product**:
61
+ - **Old (v3.8.6)**: Docker web app running on port 8787
62
+ - **New (v4.0.0)**: Electron desktop application with multi-session terminal
63
+
64
+ **Migration**: There is no migration path. This is a new application. If you need the old Docker version, install `claudedesk@3.8.6`.
65
+
66
+ ### Added - Electron Desktop App
67
+
68
+ #### Core Features
69
+ - **Multi-session management** - Run multiple Claude Code sessions in tabbed interface
70
+ - **Split-view terminal** - Up to 4 terminal panes with flexible layouts
71
+ - **Directory locking** - Sessions locked to their creation directory, prevents accidental `cd` commands
72
+ - **Session persistence** - Automatic save/restore of session state across app restarts
73
+ - **xterm.js integration** - Full-featured terminal emulation with rich text support
74
+
75
+ #### Prompt Templates
76
+ - **Command palette** (Ctrl/Cmd+Shift+P) for quick access to prompt templates
77
+ - **Built-in templates** - Common tasks like code review, debugging, documentation
78
+ - **Custom templates** - Create and edit your own reusable prompts
79
+ - **Variable substitution** - Support for `{{clipboard}}`, `{{currentDir}}`, `{{selection}}`, `{{sessionName}}`
80
+ - **Fuzzy search** - Quick template filtering in command palette
81
+ - **Template editor** - In-app WYSIWYG template management
82
+
83
+ #### Workspace Management
84
+ - **Workspace system** - Save favorite directories for quick session creation
85
+ - **Per-session working directories** - Each session maintains its own cwd
86
+ - **Default permission modes** - Set preferred Claude access level per workspace
87
+
88
+ #### API Quota & Monitoring
89
+ - **Real-time quota display** - Integration with Claude API to show usage
90
+ - **Burn rate tracking** - Monitor spending over time
91
+ - **Budget settings** - Set custom budget limits and alerts
92
+ - **Session-level tracking** - Optional per-session quota monitoring
93
+
94
+ #### Session Features
95
+ - **Named sessions** - Organize sessions with custom names
96
+ - **Session history** - Searchable conversation logs
97
+ - **Session export** - Export conversations to markdown
98
+ - **Checkpoints** - Save and restore session states
99
+ - **Ctrl+C handling** - Graceful termination with confirmation dialog
100
+ - **Permission modes** - Ask, Auto-approve, or Auto-deny per session
101
+
102
+ #### UI/UX
103
+ - **Dark theme** - Tokyo Night inspired color scheme optimized for terminal use
104
+ - **JetBrains Mono font** - Monospace font for optimal code readability
105
+ - **Clickable links** - Automatic URL detection in terminal output
106
+ - **Copy/paste support** - Standard keyboard shortcuts
107
+ - **Terminal search** - Find text in terminal output
108
+ - **Loading indicators** - Clean session initialization with pattern detection
109
+ - **Responsive layout** - Adapts to window resizing
110
+
111
+ #### Settings & Customization
112
+ - **Settings dialog** - Centralized app configuration
113
+ - **Theme customization** - Adjust colors and terminal appearance
114
+ - **Keyboard shortcuts** - Configurable hotkeys
115
+ - **Auto-update settings** - Control update preferences
116
+
117
+ #### Technical
118
+ - **Electron 28** - Modern desktop app framework
119
+ - **React 18 + TypeScript** - Type-safe, maintainable UI code
120
+ - **node-pty** - Cross-platform PTY for shell spawning
121
+ - **IPC buffering** - Optimized terminal output with 16ms batching
122
+ - **State persistence** - Automatic saving of sessions and settings
123
+ - **Context bridge** - Secure renderer-main process communication
124
+
125
+ #### Platform Support
126
+ - **Windows** - PowerShell integration with directory locking
127
+ - **macOS** - Bash/Zsh support with PROMPT_COMMAND hooks
128
+ - **Linux** - Full compatibility with major distributions
129
+
130
+ ### Security
131
+ - **Local-first architecture** - All data stored on user's machine
132
+ - **No telemetry** - Zero usage tracking or data collection
133
+ - **HTTPS-only API calls** - Secure communication with Anthropic API
134
+ - **Credential privacy** - Reads Claude CLI credentials locally, never logs or transmits them
135
+ - **Security policy** - Comprehensive SECURITY.md with vulnerability reporting guidelines
136
+
137
+ ### Documentation
138
+ - **Comprehensive README** - Installation, features, quick start, and usage guide
139
+ - **LICENSE** - MIT license with full text
140
+ - **SECURITY.md** - Security policy and vulnerability reporting
141
+ - **CHANGELOG.md** - This file!
142
+
143
+ ### Known Issues
144
+ - Development dependency vulnerabilities (electron, vite, electron-builder) - affects dev/build only, not distributed app
145
+ - Screenshot placeholders in README - to be added post-release
146
+ - No automated tests yet - planned for v1.1.0
147
+
148
+ ---
149
+
150
+ ## Version History
151
+
152
+ ### Versioning Strategy
153
+
154
+ ClaudeDesk follows [Semantic Versioning](https://semver.org/):
155
+ - **Major (x.0.0)**: Breaking changes, major features, architectural changes
156
+ - **Minor (1.x.0)**: New features, non-breaking improvements
157
+ - **Patch (1.0.x)**: Bug fixes, security patches, minor tweaks
158
+
159
+ ### Release Process
160
+
161
+ 1. Update CHANGELOG.md with changes
162
+ 2. Bump version in package.json
163
+ 3. Create git tag: `git tag -a v1.0.0 -m "Release v1.0.0"`
164
+ 4. Build packages: `npm run package`
165
+ 5. Create GitHub Release with binaries and changelog
166
+ 6. Announce on relevant communities
167
+
168
+ ---
169
+
170
+ ## Contributing
171
+
172
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on suggesting changes and additions to this changelog.
173
+
174
+ ---
175
+
176
+ [Unreleased]: https://github.com/carloluisito/claudedesk/compare/v4.1.1...HEAD
177
+ [4.1.1]: https://github.com/carloluisito/claudedesk/compare/v4.1.0...v4.1.1
178
+ [4.1.0]: https://github.com/carloluisito/claudedesk/compare/v4.0.0...v4.1.0
179
+ [4.0.0]: https://github.com/carloluisito/claudedesk/releases/tag/v4.0.0