@myrialabs/clopen 0.0.4 → 0.0.6

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 (453) hide show
  1. package/.env.example +5 -5
  2. package/.github/workflows/{release.yml → ci.yml} +86 -60
  3. package/CONTRIBUTING.md +499 -499
  4. package/LICENSE +21 -21
  5. package/README.md +209 -209
  6. package/backend/index.ts +168 -156
  7. package/backend/lib/chat/helpers.ts +42 -42
  8. package/backend/lib/chat/index.ts +1 -1
  9. package/backend/lib/chat/stream-manager.ts +1126 -1126
  10. package/backend/lib/database/README.md +76 -76
  11. package/backend/lib/database/index.ts +118 -118
  12. package/backend/lib/database/migrations/001_create_projects_table.ts +30 -30
  13. package/backend/lib/database/migrations/002_create_chat_sessions_table.ts +32 -32
  14. package/backend/lib/database/migrations/003_create_messages_table.ts +31 -31
  15. package/backend/lib/database/migrations/004_create_prompt_templates_table.ts +34 -34
  16. package/backend/lib/database/migrations/005_create_settings_table.ts +23 -23
  17. package/backend/lib/database/migrations/006_add_user_to_messages.ts +57 -57
  18. package/backend/lib/database/migrations/007_create_stream_states_table.ts +40 -40
  19. package/backend/lib/database/migrations/008_create_message_snapshots_table.ts +61 -61
  20. package/backend/lib/database/migrations/009_add_delta_snapshot_fields.ts +41 -41
  21. package/backend/lib/database/migrations/010_add_soft_delete_and_branch_support.ts +70 -70
  22. package/backend/lib/database/migrations/011_git_like_commit_graph.ts +156 -156
  23. package/backend/lib/database/migrations/012_add_file_change_statistics.ts +41 -41
  24. package/backend/lib/database/migrations/013_checkpoint_tree_state.ts +118 -118
  25. package/backend/lib/database/migrations/014_add_engine_to_sessions.ts +18 -18
  26. package/backend/lib/database/migrations/015_add_model_to_sessions.ts +18 -18
  27. package/backend/lib/database/migrations/016_create_user_projects_table.ts +34 -34
  28. package/backend/lib/database/migrations/017_add_current_session_to_user_projects.ts +32 -32
  29. package/backend/lib/database/migrations/018_create_claude_accounts_table.ts +24 -24
  30. package/backend/lib/database/migrations/019_add_claude_account_to_sessions.ts +18 -18
  31. package/backend/lib/database/migrations/020_add_snapshot_tree_hash.ts +32 -32
  32. package/backend/lib/database/migrations/021_drop_prompt_templates_table.ts +33 -33
  33. package/backend/lib/database/migrations/index.ts +153 -153
  34. package/backend/lib/database/queries/checkpoint-queries.ts +87 -87
  35. package/backend/lib/database/queries/engine-queries.ts +75 -75
  36. package/backend/lib/database/queries/index.ts +8 -8
  37. package/backend/lib/database/queries/message-queries.ts +471 -471
  38. package/backend/lib/database/queries/project-queries.ts +117 -117
  39. package/backend/lib/database/queries/session-queries.ts +270 -270
  40. package/backend/lib/database/queries/settings-queries.ts +33 -33
  41. package/backend/lib/database/queries/snapshot-queries.ts +325 -325
  42. package/backend/lib/database/queries/utils-queries.ts +58 -58
  43. package/backend/lib/database/seeders/index.ts +12 -12
  44. package/backend/lib/database/seeders/settings_seeder.ts +83 -83
  45. package/backend/lib/database/utils/connection.ts +173 -173
  46. package/backend/lib/database/utils/index.ts +3 -3
  47. package/backend/lib/database/utils/migration-runner.ts +117 -117
  48. package/backend/lib/database/utils/seeder-runner.ts +120 -120
  49. package/backend/lib/engine/adapters/claude/environment.ts +160 -164
  50. package/backend/lib/engine/adapters/claude/error-handler.ts +60 -60
  51. package/backend/lib/engine/adapters/claude/index.ts +1 -1
  52. package/backend/lib/engine/adapters/claude/path-utils.ts +38 -38
  53. package/backend/lib/engine/adapters/claude/stream.ts +177 -177
  54. package/backend/lib/engine/adapters/opencode/index.ts +2 -2
  55. package/backend/lib/engine/adapters/opencode/message-converter.ts +862 -862
  56. package/backend/lib/engine/adapters/opencode/server.ts +104 -104
  57. package/backend/lib/engine/adapters/opencode/stream.ts +755 -755
  58. package/backend/lib/engine/index.ts +196 -196
  59. package/backend/lib/engine/types.ts +58 -58
  60. package/backend/lib/files/file-operations.ts +478 -478
  61. package/backend/lib/files/file-reading.ts +308 -308
  62. package/backend/lib/files/file-watcher.ts +383 -383
  63. package/backend/lib/files/path-browsing.ts +382 -382
  64. package/backend/lib/git/git-executor.ts +89 -88
  65. package/backend/lib/git/git-parser.ts +411 -411
  66. package/backend/lib/git/git-service.ts +505 -505
  67. package/backend/lib/mcp/README.md +1144 -1144
  68. package/backend/lib/mcp/config.ts +317 -316
  69. package/backend/lib/mcp/index.ts +35 -35
  70. package/backend/lib/mcp/project-context.ts +236 -236
  71. package/backend/lib/mcp/servers/browser-automation/actions.ts +156 -156
  72. package/backend/lib/mcp/servers/browser-automation/browser.ts +419 -419
  73. package/backend/lib/mcp/servers/browser-automation/index.ts +791 -791
  74. package/backend/lib/mcp/servers/browser-automation/inspection.ts +501 -501
  75. package/backend/lib/mcp/servers/helper.ts +143 -143
  76. package/backend/lib/mcp/servers/index.ts +44 -44
  77. package/backend/lib/mcp/servers/weather/get-temperature.ts +56 -56
  78. package/backend/lib/mcp/servers/weather/index.ts +31 -31
  79. package/backend/lib/mcp/stdio-server.ts +103 -103
  80. package/backend/lib/mcp/types.ts +65 -65
  81. package/backend/lib/preview/browser/browser-audio-capture.ts +86 -86
  82. package/backend/lib/preview/browser/browser-console-manager.ts +262 -262
  83. package/backend/lib/preview/browser/browser-dialog-handler.ts +222 -222
  84. package/backend/lib/preview/browser/browser-interaction-handler.ts +421 -421
  85. package/backend/lib/preview/browser/browser-mcp-control.ts +415 -415
  86. package/backend/lib/preview/browser/browser-native-ui-handler.ts +512 -512
  87. package/backend/lib/preview/browser/browser-navigation-tracker.ts +103 -103
  88. package/backend/lib/preview/browser/browser-pool.ts +357 -357
  89. package/backend/lib/preview/browser/browser-preview-service.ts +882 -882
  90. package/backend/lib/preview/browser/browser-tab-manager.ts +935 -935
  91. package/backend/lib/preview/browser/browser-video-capture.ts +695 -695
  92. package/backend/lib/preview/browser/scripts/audio-stream.ts +292 -292
  93. package/backend/lib/preview/browser/scripts/cursor-tracking.ts +85 -85
  94. package/backend/lib/preview/browser/scripts/video-stream.ts +438 -438
  95. package/backend/lib/preview/browser/types.ts +359 -359
  96. package/backend/lib/preview/index.ts +23 -23
  97. package/backend/lib/project/index.ts +1 -1
  98. package/backend/lib/project/status-manager.ts +181 -181
  99. package/backend/lib/shared/env.ts +117 -0
  100. package/backend/lib/shared/index.ts +5 -2
  101. package/backend/lib/shared/port-utils.ts +25 -25
  102. package/backend/lib/shared/process-manager.ts +280 -280
  103. package/backend/lib/snapshot/blob-store.ts +227 -227
  104. package/backend/lib/snapshot/gitignore.ts +307 -307
  105. package/backend/lib/snapshot/helpers.ts +397 -397
  106. package/backend/lib/snapshot/snapshot-service.ts +483 -483
  107. package/backend/lib/terminal/helpers.ts +14 -14
  108. package/backend/lib/terminal/index.ts +7 -7
  109. package/backend/lib/terminal/pty-manager.ts +3 -3
  110. package/backend/lib/terminal/pty-session-manager.ts +370 -387
  111. package/backend/lib/terminal/shell-utils.ts +315 -312
  112. package/backend/lib/terminal/stream-manager.ts +292 -292
  113. package/backend/lib/tunnel/global-tunnel-manager.ts +266 -243
  114. package/backend/lib/tunnel/project-tunnel-manager.ts +311 -311
  115. package/backend/lib/user/helpers.ts +87 -87
  116. package/backend/lib/utils/ws.ts +944 -944
  117. package/backend/lib/vite-dev.ts +295 -295
  118. package/backend/middleware/cors.ts +16 -15
  119. package/backend/middleware/error-handler.ts +50 -49
  120. package/backend/middleware/logger.ts +9 -9
  121. package/backend/types/api.ts +24 -24
  122. package/backend/ws/README.md +1505 -1505
  123. package/backend/ws/chat/background.ts +198 -198
  124. package/backend/ws/chat/index.ts +21 -21
  125. package/backend/ws/chat/stream.ts +707 -707
  126. package/backend/ws/engine/claude/accounts.ts +399 -401
  127. package/backend/ws/engine/claude/index.ts +13 -13
  128. package/backend/ws/engine/claude/status.ts +43 -43
  129. package/backend/ws/engine/index.ts +14 -14
  130. package/backend/ws/engine/opencode/index.ts +11 -11
  131. package/backend/ws/engine/opencode/status.ts +30 -30
  132. package/backend/ws/engine/utils.ts +36 -36
  133. package/backend/ws/files/index.ts +30 -30
  134. package/backend/ws/files/read.ts +189 -189
  135. package/backend/ws/files/search.ts +453 -453
  136. package/backend/ws/files/watch.ts +124 -124
  137. package/backend/ws/files/write.ts +143 -143
  138. package/backend/ws/git/branch.ts +106 -106
  139. package/backend/ws/git/commit.ts +39 -39
  140. package/backend/ws/git/conflict.ts +68 -68
  141. package/backend/ws/git/diff.ts +69 -69
  142. package/backend/ws/git/index.ts +24 -24
  143. package/backend/ws/git/log.ts +41 -41
  144. package/backend/ws/git/remote.ts +214 -214
  145. package/backend/ws/git/staging.ts +84 -84
  146. package/backend/ws/git/status.ts +90 -90
  147. package/backend/ws/index.ts +69 -69
  148. package/backend/ws/mcp/index.ts +61 -61
  149. package/backend/ws/messages/crud.ts +74 -74
  150. package/backend/ws/messages/index.ts +14 -14
  151. package/backend/ws/preview/browser/cleanup.ts +129 -129
  152. package/backend/ws/preview/browser/console.ts +114 -114
  153. package/backend/ws/preview/browser/interact.ts +513 -513
  154. package/backend/ws/preview/browser/mcp.ts +129 -129
  155. package/backend/ws/preview/browser/native-ui.ts +235 -235
  156. package/backend/ws/preview/browser/stats.ts +55 -55
  157. package/backend/ws/preview/browser/tab-info.ts +126 -126
  158. package/backend/ws/preview/browser/tab.ts +166 -166
  159. package/backend/ws/preview/browser/webcodecs.ts +293 -293
  160. package/backend/ws/preview/index.ts +146 -146
  161. package/backend/ws/projects/crud.ts +113 -113
  162. package/backend/ws/projects/index.ts +25 -25
  163. package/backend/ws/projects/presence.ts +46 -46
  164. package/backend/ws/projects/status.ts +116 -116
  165. package/backend/ws/sessions/crud.ts +327 -327
  166. package/backend/ws/sessions/index.ts +33 -33
  167. package/backend/ws/settings/crud.ts +112 -112
  168. package/backend/ws/settings/index.ts +14 -14
  169. package/backend/ws/snapshot/index.ts +17 -17
  170. package/backend/ws/snapshot/restore.ts +173 -173
  171. package/backend/ws/snapshot/timeline.ts +141 -141
  172. package/backend/ws/system/index.ts +14 -14
  173. package/backend/ws/system/operations.ts +49 -49
  174. package/backend/ws/terminal/index.ts +40 -40
  175. package/backend/ws/terminal/persistence.ts +153 -153
  176. package/backend/ws/terminal/session.ts +382 -382
  177. package/backend/ws/terminal/stream.ts +79 -79
  178. package/backend/ws/tunnel/index.ts +14 -14
  179. package/backend/ws/tunnel/operations.ts +91 -91
  180. package/backend/ws/types.ts +20 -20
  181. package/backend/ws/user/crud.ts +156 -156
  182. package/backend/ws/user/index.ts +14 -14
  183. package/bin/clopen.ts +307 -307
  184. package/bun.lock +1353 -1352
  185. package/frontend/App.svelte +38 -34
  186. package/frontend/app.css +313 -313
  187. package/frontend/lib/app-environment.ts +10 -10
  188. package/frontend/lib/components/chat/ChatInterface.svelte +406 -406
  189. package/frontend/lib/components/chat/formatters/ErrorMessage.svelte +56 -56
  190. package/frontend/lib/components/chat/formatters/MessageFormatter.svelte +223 -223
  191. package/frontend/lib/components/chat/formatters/TextMessage.svelte +394 -394
  192. package/frontend/lib/components/chat/formatters/Tools.svelte +69 -69
  193. package/frontend/lib/components/chat/formatters/index.ts +2 -2
  194. package/frontend/lib/components/chat/input/ChatInput.svelte +421 -421
  195. package/frontend/lib/components/chat/input/components/ChatInputActions.svelte +78 -78
  196. package/frontend/lib/components/chat/input/components/DragDropOverlay.svelte +30 -30
  197. package/frontend/lib/components/chat/input/components/EditModeIndicator.svelte +33 -33
  198. package/frontend/lib/components/chat/input/components/EngineModelPicker.svelte +619 -619
  199. package/frontend/lib/components/chat/input/components/FileAttachmentPreview.svelte +48 -48
  200. package/frontend/lib/components/chat/input/components/LoadingIndicator.svelte +31 -31
  201. package/frontend/lib/components/chat/input/composables/use-animations.svelte.ts +201 -201
  202. package/frontend/lib/components/chat/input/composables/use-chat-actions.svelte.ts +148 -148
  203. package/frontend/lib/components/chat/input/composables/use-file-handling.svelte.ts +216 -216
  204. package/frontend/lib/components/chat/input/composables/use-input-state.svelte.ts +357 -357
  205. package/frontend/lib/components/chat/input/composables/use-textarea-resize.svelte.ts +57 -57
  206. package/frontend/lib/components/chat/message/ChatMessage.svelte +478 -478
  207. package/frontend/lib/components/chat/message/ChatMessages.svelte +541 -541
  208. package/frontend/lib/components/chat/message/DateSeparator.svelte +86 -86
  209. package/frontend/lib/components/chat/message/MessageBubble.svelte +86 -86
  210. package/frontend/lib/components/chat/message/MessageHeader.svelte +157 -157
  211. package/frontend/lib/components/chat/modal/DebugModal.svelte +59 -59
  212. package/frontend/lib/components/chat/modal/TokenUsageModal.svelte +124 -124
  213. package/frontend/lib/components/chat/shared/index.ts +1 -1
  214. package/frontend/lib/components/chat/shared/utils.ts +115 -115
  215. package/frontend/lib/components/chat/tools/BashOutputTool.svelte +35 -35
  216. package/frontend/lib/components/chat/tools/BashTool.svelte +45 -45
  217. package/frontend/lib/components/chat/tools/CustomMcpTool.svelte +139 -139
  218. package/frontend/lib/components/chat/tools/EditTool.svelte +47 -47
  219. package/frontend/lib/components/chat/tools/ExitPlanModeTool.svelte +31 -31
  220. package/frontend/lib/components/chat/tools/GlobTool.svelte +50 -50
  221. package/frontend/lib/components/chat/tools/GrepTool.svelte +89 -89
  222. package/frontend/lib/components/chat/tools/KillShellTool.svelte +25 -25
  223. package/frontend/lib/components/chat/tools/ListMcpResourcesTool.svelte +30 -30
  224. package/frontend/lib/components/chat/tools/NotebookEditTool.svelte +37 -37
  225. package/frontend/lib/components/chat/tools/ReadMcpResourceTool.svelte +33 -33
  226. package/frontend/lib/components/chat/tools/ReadTool.svelte +40 -40
  227. package/frontend/lib/components/chat/tools/TaskTool.svelte +63 -63
  228. package/frontend/lib/components/chat/tools/TodoWriteTool.svelte +74 -74
  229. package/frontend/lib/components/chat/tools/WebFetchTool.svelte +34 -34
  230. package/frontend/lib/components/chat/tools/WebSearchTool.svelte +83 -83
  231. package/frontend/lib/components/chat/tools/WriteTool.svelte +32 -32
  232. package/frontend/lib/components/chat/tools/components/CodeBlock.svelte +78 -78
  233. package/frontend/lib/components/chat/tools/components/DiffBlock.svelte +407 -407
  234. package/frontend/lib/components/chat/tools/components/FileHeader.svelte +45 -45
  235. package/frontend/lib/components/chat/tools/components/InfoLine.svelte +18 -18
  236. package/frontend/lib/components/chat/tools/components/StatsBadges.svelte +26 -26
  237. package/frontend/lib/components/chat/tools/components/TerminalCommand.svelte +53 -53
  238. package/frontend/lib/components/chat/tools/components/index.ts +7 -7
  239. package/frontend/lib/components/chat/tools/index.ts +25 -25
  240. package/frontend/lib/components/chat/widgets/FloatingTodoList.svelte +248 -248
  241. package/frontend/lib/components/chat/widgets/TokenUsage.svelte +78 -78
  242. package/frontend/lib/components/checkpoint/TimelineModal.svelte +391 -391
  243. package/frontend/lib/components/checkpoint/timeline/TimelineEdge.svelte +26 -26
  244. package/frontend/lib/components/checkpoint/timeline/TimelineGraph.svelte +86 -86
  245. package/frontend/lib/components/checkpoint/timeline/TimelineNode.svelte +108 -108
  246. package/frontend/lib/components/checkpoint/timeline/TimelineVersionGroup.svelte +59 -59
  247. package/frontend/lib/components/checkpoint/timeline/animation.ts +168 -168
  248. package/frontend/lib/components/checkpoint/timeline/config.ts +44 -44
  249. package/frontend/lib/components/checkpoint/timeline/graph-builder.ts +304 -304
  250. package/frontend/lib/components/checkpoint/timeline/types.ts +65 -65
  251. package/frontend/lib/components/checkpoint/timeline/utils.ts +53 -53
  252. package/frontend/lib/components/common/Alert.svelte +138 -138
  253. package/frontend/lib/components/common/AvatarBubble.svelte +55 -55
  254. package/frontend/lib/components/common/Button.svelte +71 -71
  255. package/frontend/lib/components/common/Card.svelte +102 -102
  256. package/frontend/lib/components/common/Checkbox.svelte +48 -48
  257. package/frontend/lib/components/common/Dialog.svelte +248 -248
  258. package/frontend/lib/components/common/FolderBrowser.svelte +842 -842
  259. package/frontend/lib/components/common/Icon.svelte +57 -57
  260. package/frontend/lib/components/common/Input.svelte +72 -72
  261. package/frontend/lib/components/common/Lightbox.svelte +232 -232
  262. package/frontend/lib/components/common/LoadingScreen.svelte +52 -52
  263. package/frontend/lib/components/common/LoadingSpinner.svelte +48 -48
  264. package/frontend/lib/components/common/Modal.svelte +177 -177
  265. package/frontend/lib/components/common/ModalProvider.svelte +27 -27
  266. package/frontend/lib/components/common/ModelSelector.svelte +110 -110
  267. package/frontend/lib/components/common/MonacoEditor.svelte +568 -568
  268. package/frontend/lib/components/common/NotificationToast.svelte +113 -113
  269. package/frontend/lib/components/common/PageTemplate.svelte +75 -75
  270. package/frontend/lib/components/common/ProjectUserAvatars.svelte +79 -79
  271. package/frontend/lib/components/common/Select.svelte +97 -97
  272. package/frontend/lib/components/common/Textarea.svelte +79 -79
  273. package/frontend/lib/components/common/ThemeToggle.svelte +44 -44
  274. package/frontend/lib/components/common/lucide-icons.ts +1642 -1642
  275. package/frontend/lib/components/common/material-icons.ts +1082 -1082
  276. package/frontend/lib/components/common/xterm/XTerm.svelte +809 -795
  277. package/frontend/lib/components/common/xterm/index.ts +15 -15
  278. package/frontend/lib/components/common/xterm/terminal-config.ts +67 -67
  279. package/frontend/lib/components/common/xterm/types.ts +30 -30
  280. package/frontend/lib/components/common/xterm/xterm-service.ts +379 -353
  281. package/frontend/lib/components/files/FileNode.svelte +383 -383
  282. package/frontend/lib/components/files/FileTree.svelte +681 -681
  283. package/frontend/lib/components/files/FileViewer.svelte +728 -728
  284. package/frontend/lib/components/files/SearchResults.svelte +303 -303
  285. package/frontend/lib/components/git/BranchManager.svelte +458 -458
  286. package/frontend/lib/components/git/ChangesSection.svelte +107 -107
  287. package/frontend/lib/components/git/CommitForm.svelte +76 -76
  288. package/frontend/lib/components/git/ConflictResolver.svelte +158 -158
  289. package/frontend/lib/components/git/DiffViewer.svelte +364 -364
  290. package/frontend/lib/components/git/FileChangeItem.svelte +97 -97
  291. package/frontend/lib/components/git/GitButton.svelte +33 -33
  292. package/frontend/lib/components/git/GitLog.svelte +361 -361
  293. package/frontend/lib/components/git/GitModal.svelte +80 -80
  294. package/frontend/lib/components/history/HistoryModal.svelte +563 -563
  295. package/frontend/lib/components/history/HistoryView.svelte +614 -614
  296. package/frontend/lib/components/index.ts +34 -34
  297. package/frontend/lib/components/preview/browser/BrowserPreview.svelte +549 -549
  298. package/frontend/lib/components/preview/browser/components/Canvas.svelte +1058 -1058
  299. package/frontend/lib/components/preview/browser/components/ConsolePanel.svelte +756 -756
  300. package/frontend/lib/components/preview/browser/components/Container.svelte +450 -450
  301. package/frontend/lib/components/preview/browser/components/ContextMenu.svelte +236 -236
  302. package/frontend/lib/components/preview/browser/components/SelectDropdown.svelte +224 -224
  303. package/frontend/lib/components/preview/browser/components/Toolbar.svelte +338 -338
  304. package/frontend/lib/components/preview/browser/components/VirtualCursor.svelte +35 -35
  305. package/frontend/lib/components/preview/browser/core/cleanup.svelte.ts +155 -155
  306. package/frontend/lib/components/preview/browser/core/coordinator.svelte.ts +837 -837
  307. package/frontend/lib/components/preview/browser/core/interactions.svelte.ts +113 -113
  308. package/frontend/lib/components/preview/browser/core/mcp-handlers.svelte.ts +296 -296
  309. package/frontend/lib/components/preview/browser/core/native-ui-handlers.svelte.ts +391 -391
  310. package/frontend/lib/components/preview/browser/core/stream-handler.svelte.ts +231 -231
  311. package/frontend/lib/components/preview/browser/core/tab-manager.svelte.ts +210 -210
  312. package/frontend/lib/components/preview/browser/core/tab-operations.svelte.ts +239 -239
  313. package/frontend/lib/components/preview/index.ts +1 -1
  314. package/frontend/lib/components/settings/SettingsModal.svelte +235 -235
  315. package/frontend/lib/components/settings/SettingsView.svelte +36 -36
  316. package/frontend/lib/components/settings/appearance/AppearanceSettings.svelte +51 -51
  317. package/frontend/lib/components/settings/appearance/LayoutPresetSettings.svelte +160 -160
  318. package/frontend/lib/components/settings/appearance/LayoutPreview.svelte +76 -76
  319. package/frontend/lib/components/settings/engines/AIEnginesSettings.svelte +917 -917
  320. package/frontend/lib/components/settings/general/AdvancedSettings.svelte +187 -187
  321. package/frontend/lib/components/settings/general/DataManagementSettings.svelte +203 -203
  322. package/frontend/lib/components/settings/general/GeneralSettings.svelte +10 -10
  323. package/frontend/lib/components/settings/model/ModelSettings.svelte +357 -357
  324. package/frontend/lib/components/settings/notifications/NotificationSettings.svelte +205 -205
  325. package/frontend/lib/components/settings/user/UserSettings.svelte +197 -197
  326. package/frontend/lib/components/terminal/Terminal.svelte +367 -367
  327. package/frontend/lib/components/terminal/TerminalTabs.svelte +87 -87
  328. package/frontend/lib/components/terminal/TerminalView.svelte +54 -54
  329. package/frontend/lib/components/tunnel/TunnelActive.svelte +157 -142
  330. package/frontend/lib/components/tunnel/TunnelButton.svelte +60 -54
  331. package/frontend/lib/components/tunnel/TunnelInactive.svelte +285 -284
  332. package/frontend/lib/components/tunnel/TunnelModal.svelte +48 -47
  333. package/frontend/lib/components/tunnel/TunnelQRCode.svelte +49 -49
  334. package/frontend/lib/components/workspace/DesktopNavigator.svelte +382 -382
  335. package/frontend/lib/components/workspace/MobileNavigator.svelte +394 -403
  336. package/frontend/lib/components/workspace/PanelContainer.svelte +100 -100
  337. package/frontend/lib/components/workspace/PanelHeader.svelte +505 -505
  338. package/frontend/lib/components/workspace/ViewMenu.svelte +162 -162
  339. package/frontend/lib/components/workspace/WorkspaceLayout.svelte +169 -169
  340. package/frontend/lib/components/workspace/layout/DesktopLayout.svelte +15 -15
  341. package/frontend/lib/components/workspace/layout/MobileLayout.svelte +17 -17
  342. package/frontend/lib/components/workspace/layout/split-pane/Container.svelte +42 -42
  343. package/frontend/lib/components/workspace/layout/split-pane/Handle.svelte +84 -84
  344. package/frontend/lib/components/workspace/layout/split-pane/Layout.svelte +37 -37
  345. package/frontend/lib/components/workspace/panels/ChatPanel.svelte +274 -274
  346. package/frontend/lib/components/workspace/panels/FilesPanel.svelte +1261 -1261
  347. package/frontend/lib/components/workspace/panels/GitPanel.svelte +1560 -1560
  348. package/frontend/lib/components/workspace/panels/PreviewPanel.svelte +150 -150
  349. package/frontend/lib/components/workspace/panels/TerminalPanel.svelte +73 -73
  350. package/frontend/lib/constants/preview.ts +44 -44
  351. package/frontend/lib/services/chat/chat.service.ts +704 -704
  352. package/frontend/lib/services/chat/index.ts +6 -6
  353. package/frontend/lib/services/notification/global-stream-monitor.ts +86 -86
  354. package/frontend/lib/services/notification/index.ts +7 -7
  355. package/frontend/lib/services/notification/push.service.ts +143 -143
  356. package/frontend/lib/services/notification/sound.service.ts +126 -126
  357. package/frontend/lib/services/preview/browser/browser-console.service.ts +61 -61
  358. package/frontend/lib/services/preview/browser/browser-webcodecs.service.ts +1499 -1499
  359. package/frontend/lib/services/preview/browser/mcp-integration.svelte.ts +67 -67
  360. package/frontend/lib/services/preview/index.ts +22 -22
  361. package/frontend/lib/services/project/index.ts +7 -7
  362. package/frontend/lib/services/project/status.service.ts +159 -159
  363. package/frontend/lib/services/snapshot/snapshot.service.ts +47 -47
  364. package/frontend/lib/services/terminal/background/index.ts +129 -129
  365. package/frontend/lib/services/terminal/background/session-restore.ts +273 -273
  366. package/frontend/lib/services/terminal/background/stream-manager.ts +285 -285
  367. package/frontend/lib/services/terminal/index.ts +13 -13
  368. package/frontend/lib/services/terminal/persistence.service.ts +260 -260
  369. package/frontend/lib/services/terminal/project.service.ts +952 -952
  370. package/frontend/lib/services/terminal/session.service.ts +363 -363
  371. package/frontend/lib/services/terminal/terminal.service.ts +369 -369
  372. package/frontend/lib/stores/core/app.svelte.ts +117 -117
  373. package/frontend/lib/stores/core/files.svelte.ts +72 -72
  374. package/frontend/lib/stores/core/presence.svelte.ts +48 -48
  375. package/frontend/lib/stores/core/projects.svelte.ts +317 -317
  376. package/frontend/lib/stores/core/sessions.svelte.ts +383 -383
  377. package/frontend/lib/stores/features/claude-accounts.svelte.ts +58 -58
  378. package/frontend/lib/stores/features/models.svelte.ts +89 -89
  379. package/frontend/lib/stores/features/settings.svelte.ts +87 -87
  380. package/frontend/lib/stores/features/terminal.svelte.ts +700 -700
  381. package/frontend/lib/stores/features/tunnel.svelte.ts +163 -161
  382. package/frontend/lib/stores/features/user.svelte.ts +95 -95
  383. package/frontend/lib/stores/ui/chat-input.svelte.ts +56 -56
  384. package/frontend/lib/stores/ui/chat-model.svelte.ts +61 -61
  385. package/frontend/lib/stores/ui/dialog.svelte.ts +58 -58
  386. package/frontend/lib/stores/ui/edit-mode.svelte.ts +214 -214
  387. package/frontend/lib/stores/ui/notification.svelte.ts +166 -166
  388. package/frontend/lib/stores/ui/settings-modal.svelte.ts +88 -88
  389. package/frontend/lib/stores/ui/theme.svelte.ts +179 -179
  390. package/frontend/lib/stores/ui/workspace.svelte.ts +754 -754
  391. package/frontend/lib/types/native-ui.ts +73 -73
  392. package/frontend/lib/utils/chat/date-separator.ts +38 -38
  393. package/frontend/lib/utils/chat/message-grouper.ts +218 -218
  394. package/frontend/lib/utils/chat/message-processor.ts +134 -134
  395. package/frontend/lib/utils/chat/tool-handler.ts +160 -160
  396. package/frontend/lib/utils/chat/virtual-scroll.svelte.ts +142 -142
  397. package/frontend/lib/utils/click-outside.ts +20 -20
  398. package/frontend/lib/utils/context-manager.ts +256 -256
  399. package/frontend/lib/utils/file-icon-mappings.ts +768 -768
  400. package/frontend/lib/utils/folder-icon-mappings.ts +1029 -1029
  401. package/frontend/lib/utils/git-status.ts +68 -68
  402. package/frontend/lib/utils/platform.ts +112 -112
  403. package/frontend/lib/utils/port-check.ts +64 -64
  404. package/frontend/lib/utils/terminalFormatter.ts +206 -206
  405. package/frontend/lib/utils/theme.ts +6 -6
  406. package/frontend/lib/utils/tree-visualizer.ts +320 -320
  407. package/frontend/lib/utils/ws.ts +44 -44
  408. package/frontend/main.ts +13 -13
  409. package/index.html +70 -70
  410. package/package.json +111 -111
  411. package/scripts/generate-icons.ts +86 -86
  412. package/scripts/pre-publish-check.sh +142 -142
  413. package/scripts/setup-hooks.sh +134 -134
  414. package/scripts/validate-branch-name.sh +47 -47
  415. package/scripts/validate-commit-msg.sh +42 -42
  416. package/shared/constants/engines.ts +134 -134
  417. package/shared/types/database/connection.ts +15 -15
  418. package/shared/types/database/index.ts +5 -5
  419. package/shared/types/database/schema.ts +140 -140
  420. package/shared/types/engine/index.ts +45 -45
  421. package/shared/types/filesystem/index.ts +21 -21
  422. package/shared/types/git.ts +171 -171
  423. package/shared/types/messaging/index.ts +238 -238
  424. package/shared/types/messaging/tool.ts +525 -525
  425. package/shared/types/network/api.ts +17 -17
  426. package/shared/types/network/index.ts +4 -4
  427. package/shared/types/stores/app.ts +22 -22
  428. package/shared/types/stores/dialog.ts +20 -20
  429. package/shared/types/stores/index.ts +2 -2
  430. package/shared/types/stores/settings.ts +15 -15
  431. package/shared/types/terminal/index.ts +43 -43
  432. package/shared/types/ui/components.ts +60 -60
  433. package/shared/types/ui/icons.ts +22 -22
  434. package/shared/types/ui/index.ts +21 -21
  435. package/shared/types/ui/notifications.ts +13 -13
  436. package/shared/types/ui/theme.ts +11 -11
  437. package/shared/types/websocket/index.ts +43 -43
  438. package/shared/types/window.d.ts +12 -12
  439. package/shared/utils/anonymous-user.ts +167 -167
  440. package/shared/utils/async.ts +10 -10
  441. package/shared/utils/diff-calculator.ts +184 -184
  442. package/shared/utils/file-type-detection.ts +165 -165
  443. package/shared/utils/logger.ts +144 -158
  444. package/shared/utils/message-formatter.ts +79 -79
  445. package/shared/utils/path.ts +47 -47
  446. package/shared/utils/ws-client.ts +768 -768
  447. package/shared/utils/ws-server.ts +660 -660
  448. package/static/favicon.svg +7 -7
  449. package/static/fonts/dm-sans.css +96 -96
  450. package/svelte.config.js +20 -20
  451. package/tsconfig.json +41 -41
  452. package/vite.config.ts +33 -33
  453. package/.github/workflows/test.yml +0 -40
@@ -1,24 +1,24 @@
1
- import type { DatabaseConnection } from '$shared/types/database/connection';
2
-
3
- import { debug } from '$shared/utils/logger';
4
- export const description = 'Create settings table for storing application configuration';
5
-
6
- export const up = (db: DatabaseConnection): void => {
7
- debug.log('migration', '📋 Creating settings table...');
8
-
9
- db.exec(`
10
- CREATE TABLE settings (
11
- key TEXT PRIMARY KEY,
12
- value TEXT NOT NULL,
13
- updated_at TEXT NOT NULL
14
- )
15
- `);
16
-
17
- debug.log('migration', '✅ Settings table created');
18
- };
19
-
20
- export const down = (db: DatabaseConnection): void => {
21
- debug.log('migration', '🗑️ Dropping settings table...');
22
- db.exec('DROP TABLE IF EXISTS settings');
23
- debug.log('migration', '✅ Settings table dropped');
1
+ import type { DatabaseConnection } from '$shared/types/database/connection';
2
+
3
+ import { debug } from '$shared/utils/logger';
4
+ export const description = 'Create settings table for storing application configuration';
5
+
6
+ export const up = (db: DatabaseConnection): void => {
7
+ debug.log('migration', '📋 Creating settings table...');
8
+
9
+ db.exec(`
10
+ CREATE TABLE settings (
11
+ key TEXT PRIMARY KEY,
12
+ value TEXT NOT NULL,
13
+ updated_at TEXT NOT NULL
14
+ )
15
+ `);
16
+
17
+ debug.log('migration', '✅ Settings table created');
18
+ };
19
+
20
+ export const down = (db: DatabaseConnection): void => {
21
+ debug.log('migration', '🗑️ Dropping settings table...');
22
+ db.exec('DROP TABLE IF EXISTS settings');
23
+ debug.log('migration', '✅ Settings table dropped');
24
24
  };
@@ -1,58 +1,58 @@
1
- import type { DatabaseConnection } from '$shared/types/database/connection';
2
-
3
- import { debug } from '$shared/utils/logger';
4
- export const description = 'Add user identification fields to messages table for shared chat';
5
-
6
- export const up = (db: DatabaseConnection): void => {
7
- debug.log('migration', '📋 Adding user fields to messages table...');
8
-
9
- // Add sender_id and sender_name columns to messages table
10
- db.exec(`
11
- ALTER TABLE messages
12
- ADD COLUMN sender_id TEXT;
13
- `);
14
-
15
- db.exec(`
16
- ALTER TABLE messages
17
- ADD COLUMN sender_name TEXT;
18
- `);
19
-
20
- // Create index for sender_id for performance
21
- db.exec(`
22
- CREATE INDEX idx_messages_sender_id ON messages(sender_id);
23
- `);
24
-
25
- debug.log('migration', '✅ User fields added to messages table');
26
- };
27
-
28
- export const down = (db: DatabaseConnection): void => {
29
- debug.log('migration', '🗑️ Removing user fields from messages table...');
30
-
31
- // SQLite doesn't support dropping columns directly, need to recreate table
32
- db.exec(`
33
- -- Create temporary table without user fields
34
- CREATE TABLE messages_temp (
35
- id TEXT PRIMARY KEY,
36
- session_id TEXT NOT NULL,
37
- timestamp TEXT NOT NULL,
38
- sdk_message TEXT NOT NULL,
39
- FOREIGN KEY (session_id) REFERENCES chat_sessions(id)
40
- );
41
-
42
- -- Copy data
43
- INSERT INTO messages_temp (id, session_id, timestamp, sdk_message)
44
- SELECT id, session_id, timestamp, sdk_message FROM messages;
45
-
46
- -- Drop original table
47
- DROP TABLE messages;
48
-
49
- -- Rename temp table
50
- ALTER TABLE messages_temp RENAME TO messages;
51
-
52
- -- Recreate indexes
53
- CREATE INDEX idx_messages_session_id ON messages(session_id);
54
- CREATE INDEX idx_messages_timestamp ON messages(timestamp);
55
- `);
56
-
57
- debug.log('migration', '✅ User fields removed from messages table');
1
+ import type { DatabaseConnection } from '$shared/types/database/connection';
2
+
3
+ import { debug } from '$shared/utils/logger';
4
+ export const description = 'Add user identification fields to messages table for shared chat';
5
+
6
+ export const up = (db: DatabaseConnection): void => {
7
+ debug.log('migration', '📋 Adding user fields to messages table...');
8
+
9
+ // Add sender_id and sender_name columns to messages table
10
+ db.exec(`
11
+ ALTER TABLE messages
12
+ ADD COLUMN sender_id TEXT;
13
+ `);
14
+
15
+ db.exec(`
16
+ ALTER TABLE messages
17
+ ADD COLUMN sender_name TEXT;
18
+ `);
19
+
20
+ // Create index for sender_id for performance
21
+ db.exec(`
22
+ CREATE INDEX idx_messages_sender_id ON messages(sender_id);
23
+ `);
24
+
25
+ debug.log('migration', '✅ User fields added to messages table');
26
+ };
27
+
28
+ export const down = (db: DatabaseConnection): void => {
29
+ debug.log('migration', '🗑️ Removing user fields from messages table...');
30
+
31
+ // SQLite doesn't support dropping columns directly, need to recreate table
32
+ db.exec(`
33
+ -- Create temporary table without user fields
34
+ CREATE TABLE messages_temp (
35
+ id TEXT PRIMARY KEY,
36
+ session_id TEXT NOT NULL,
37
+ timestamp TEXT NOT NULL,
38
+ sdk_message TEXT NOT NULL,
39
+ FOREIGN KEY (session_id) REFERENCES chat_sessions(id)
40
+ );
41
+
42
+ -- Copy data
43
+ INSERT INTO messages_temp (id, session_id, timestamp, sdk_message)
44
+ SELECT id, session_id, timestamp, sdk_message FROM messages;
45
+
46
+ -- Drop original table
47
+ DROP TABLE messages;
48
+
49
+ -- Rename temp table
50
+ ALTER TABLE messages_temp RENAME TO messages;
51
+
52
+ -- Recreate indexes
53
+ CREATE INDEX idx_messages_session_id ON messages(session_id);
54
+ CREATE INDEX idx_messages_timestamp ON messages(timestamp);
55
+ `);
56
+
57
+ debug.log('migration', '✅ User fields removed from messages table');
58
58
  };
@@ -1,41 +1,41 @@
1
- import type { DatabaseConnection } from '$shared/types/database/connection';
2
-
3
- import { debug } from '$shared/utils/logger';
4
- export const description = 'Create stream states table for persistent background streaming';
5
-
6
- export const up = (db: DatabaseConnection): void => {
7
- debug.log('migration', '📋 Creating stream_states table...');
8
-
9
- db.exec(`
10
- CREATE TABLE IF NOT EXISTS stream_states (
11
- stream_id TEXT PRIMARY KEY,
12
- chat_session_id TEXT NOT NULL,
13
- project_id TEXT,
14
- process_id TEXT NOT NULL,
15
- status TEXT NOT NULL CHECK(status IN ('active', 'completed', 'error', 'cancelled')),
16
- started_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
17
- completed_at DATETIME,
18
- last_message_index INTEGER NOT NULL DEFAULT 0,
19
- error TEXT,
20
- created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
21
- updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
22
- FOREIGN KEY (chat_session_id) REFERENCES chat_sessions (id) ON DELETE CASCADE
23
- )
24
- `);
25
-
26
- db.exec(`
27
- CREATE INDEX idx_stream_states_session ON stream_states(chat_session_id)
28
- `);
29
-
30
- db.exec(`
31
- CREATE INDEX idx_stream_states_status ON stream_states(status)
32
- `);
33
-
34
- debug.log('migration', '✅ stream_states table created successfully');
35
- };
36
-
37
- export const down = (db: DatabaseConnection): void => {
38
- debug.log('migration', '🗑️ Dropping stream_states table...');
39
- db.exec(`DROP TABLE IF EXISTS stream_states`);
40
- debug.log('migration', '✅ stream_states table dropped');
1
+ import type { DatabaseConnection } from '$shared/types/database/connection';
2
+
3
+ import { debug } from '$shared/utils/logger';
4
+ export const description = 'Create stream states table for persistent background streaming';
5
+
6
+ export const up = (db: DatabaseConnection): void => {
7
+ debug.log('migration', '📋 Creating stream_states table...');
8
+
9
+ db.exec(`
10
+ CREATE TABLE IF NOT EXISTS stream_states (
11
+ stream_id TEXT PRIMARY KEY,
12
+ chat_session_id TEXT NOT NULL,
13
+ project_id TEXT,
14
+ process_id TEXT NOT NULL,
15
+ status TEXT NOT NULL CHECK(status IN ('active', 'completed', 'error', 'cancelled')),
16
+ started_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
17
+ completed_at DATETIME,
18
+ last_message_index INTEGER NOT NULL DEFAULT 0,
19
+ error TEXT,
20
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
21
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
22
+ FOREIGN KEY (chat_session_id) REFERENCES chat_sessions (id) ON DELETE CASCADE
23
+ )
24
+ `);
25
+
26
+ db.exec(`
27
+ CREATE INDEX idx_stream_states_session ON stream_states(chat_session_id)
28
+ `);
29
+
30
+ db.exec(`
31
+ CREATE INDEX idx_stream_states_status ON stream_states(status)
32
+ `);
33
+
34
+ debug.log('migration', '✅ stream_states table created successfully');
35
+ };
36
+
37
+ export const down = (db: DatabaseConnection): void => {
38
+ debug.log('migration', '🗑️ Dropping stream_states table...');
39
+ db.exec(`DROP TABLE IF EXISTS stream_states`);
40
+ debug.log('migration', '✅ stream_states table dropped');
41
41
  };
@@ -1,62 +1,62 @@
1
- /**
2
- * Migration: Create message snapshots table for time travel feature
3
- * Purpose: Store file snapshots for each user message to enable restoration
4
- */
5
-
6
- export const description = 'Create message snapshots table';
7
-
8
- export function up(db: any): void {
9
- // Create message_snapshots table for storing project state at each message
10
- db.prepare(`
11
- CREATE TABLE IF NOT EXISTS message_snapshots (
12
- id TEXT PRIMARY KEY,
13
- message_id TEXT NOT NULL,
14
- session_id TEXT NOT NULL,
15
- project_id TEXT NOT NULL,
16
- files_snapshot TEXT NOT NULL, -- JSON object with file paths and contents
17
- project_metadata TEXT, -- JSON object with project info (name, path, etc)
18
- created_at TEXT NOT NULL,
19
- FOREIGN KEY (message_id) REFERENCES messages (id) ON DELETE CASCADE,
20
- FOREIGN KEY (session_id) REFERENCES chat_sessions (id) ON DELETE CASCADE,
21
- FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE
22
- )
23
- `).run();
24
-
25
- // Create indexes for efficient queries
26
- db.prepare('CREATE INDEX IF NOT EXISTS idx_message_snapshots_message_id ON message_snapshots (message_id)').run();
27
- db.prepare('CREATE INDEX IF NOT EXISTS idx_message_snapshots_session_id ON message_snapshots (session_id)').run();
28
- db.prepare('CREATE INDEX IF NOT EXISTS idx_message_snapshots_project_id ON message_snapshots (project_id)').run();
29
- db.prepare('CREATE INDEX IF NOT EXISTS idx_message_snapshots_created_at ON message_snapshots (created_at)').run();
30
-
31
- // Create session_relationships table for tracking parent-child relationships
32
- db.prepare(`
33
- CREATE TABLE IF NOT EXISTS session_relationships (
34
- id TEXT PRIMARY KEY,
35
- parent_session_id TEXT NOT NULL,
36
- child_session_id TEXT NOT NULL,
37
- branched_from_message_id TEXT,
38
- created_at TEXT NOT NULL,
39
- FOREIGN KEY (parent_session_id) REFERENCES chat_sessions (id) ON DELETE CASCADE,
40
- FOREIGN KEY (child_session_id) REFERENCES chat_sessions (id) ON DELETE CASCADE,
41
- FOREIGN KEY (branched_from_message_id) REFERENCES messages (id) ON DELETE SET NULL
42
- )
43
- `).run();
44
-
45
- // Create indexes for session relationships
46
- db.prepare('CREATE INDEX IF NOT EXISTS idx_session_relationships_parent ON session_relationships (parent_session_id)').run();
47
- db.prepare('CREATE INDEX IF NOT EXISTS idx_session_relationships_child ON session_relationships (child_session_id)').run();
48
- }
49
-
50
- export function down(db: any): void {
51
- // Drop indexes
52
- db.prepare('DROP INDEX IF EXISTS idx_session_relationships_child').run();
53
- db.prepare('DROP INDEX IF EXISTS idx_session_relationships_parent').run();
54
- db.prepare('DROP INDEX IF EXISTS idx_message_snapshots_created_at').run();
55
- db.prepare('DROP INDEX IF EXISTS idx_message_snapshots_project_id').run();
56
- db.prepare('DROP INDEX IF EXISTS idx_message_snapshots_session_id').run();
57
- db.prepare('DROP INDEX IF EXISTS idx_message_snapshots_message_id').run();
58
-
59
- // Drop tables
60
- db.prepare('DROP TABLE IF EXISTS session_relationships').run();
61
- db.prepare('DROP TABLE IF EXISTS message_snapshots').run();
1
+ /**
2
+ * Migration: Create message snapshots table for time travel feature
3
+ * Purpose: Store file snapshots for each user message to enable restoration
4
+ */
5
+
6
+ export const description = 'Create message snapshots table';
7
+
8
+ export function up(db: any): void {
9
+ // Create message_snapshots table for storing project state at each message
10
+ db.prepare(`
11
+ CREATE TABLE IF NOT EXISTS message_snapshots (
12
+ id TEXT PRIMARY KEY,
13
+ message_id TEXT NOT NULL,
14
+ session_id TEXT NOT NULL,
15
+ project_id TEXT NOT NULL,
16
+ files_snapshot TEXT NOT NULL, -- JSON object with file paths and contents
17
+ project_metadata TEXT, -- JSON object with project info (name, path, etc)
18
+ created_at TEXT NOT NULL,
19
+ FOREIGN KEY (message_id) REFERENCES messages (id) ON DELETE CASCADE,
20
+ FOREIGN KEY (session_id) REFERENCES chat_sessions (id) ON DELETE CASCADE,
21
+ FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE
22
+ )
23
+ `).run();
24
+
25
+ // Create indexes for efficient queries
26
+ db.prepare('CREATE INDEX IF NOT EXISTS idx_message_snapshots_message_id ON message_snapshots (message_id)').run();
27
+ db.prepare('CREATE INDEX IF NOT EXISTS idx_message_snapshots_session_id ON message_snapshots (session_id)').run();
28
+ db.prepare('CREATE INDEX IF NOT EXISTS idx_message_snapshots_project_id ON message_snapshots (project_id)').run();
29
+ db.prepare('CREATE INDEX IF NOT EXISTS idx_message_snapshots_created_at ON message_snapshots (created_at)').run();
30
+
31
+ // Create session_relationships table for tracking parent-child relationships
32
+ db.prepare(`
33
+ CREATE TABLE IF NOT EXISTS session_relationships (
34
+ id TEXT PRIMARY KEY,
35
+ parent_session_id TEXT NOT NULL,
36
+ child_session_id TEXT NOT NULL,
37
+ branched_from_message_id TEXT,
38
+ created_at TEXT NOT NULL,
39
+ FOREIGN KEY (parent_session_id) REFERENCES chat_sessions (id) ON DELETE CASCADE,
40
+ FOREIGN KEY (child_session_id) REFERENCES chat_sessions (id) ON DELETE CASCADE,
41
+ FOREIGN KEY (branched_from_message_id) REFERENCES messages (id) ON DELETE SET NULL
42
+ )
43
+ `).run();
44
+
45
+ // Create indexes for session relationships
46
+ db.prepare('CREATE INDEX IF NOT EXISTS idx_session_relationships_parent ON session_relationships (parent_session_id)').run();
47
+ db.prepare('CREATE INDEX IF NOT EXISTS idx_session_relationships_child ON session_relationships (child_session_id)').run();
48
+ }
49
+
50
+ export function down(db: any): void {
51
+ // Drop indexes
52
+ db.prepare('DROP INDEX IF EXISTS idx_session_relationships_child').run();
53
+ db.prepare('DROP INDEX IF EXISTS idx_session_relationships_parent').run();
54
+ db.prepare('DROP INDEX IF EXISTS idx_message_snapshots_created_at').run();
55
+ db.prepare('DROP INDEX IF EXISTS idx_message_snapshots_project_id').run();
56
+ db.prepare('DROP INDEX IF EXISTS idx_message_snapshots_session_id').run();
57
+ db.prepare('DROP INDEX IF EXISTS idx_message_snapshots_message_id').run();
58
+
59
+ // Drop tables
60
+ db.prepare('DROP TABLE IF EXISTS session_relationships').run();
61
+ db.prepare('DROP TABLE IF EXISTS message_snapshots').run();
62
62
  }
@@ -1,41 +1,41 @@
1
- import type { DatabaseConnection } from '$shared/types/database/connection';
2
-
3
- import { debug } from '$shared/utils/logger';
4
- export const description = 'Add delta snapshot support for efficient storage';
5
-
6
- export const up = (db: DatabaseConnection): void => {
7
- debug.log('migration', '📋 Adding delta snapshot fields...');
8
-
9
- // Add new columns for delta snapshots
10
- db.exec(`
11
- ALTER TABLE message_snapshots
12
- ADD COLUMN snapshot_type TEXT DEFAULT 'full' CHECK(snapshot_type IN ('full', 'delta'))
13
- `);
14
-
15
- db.exec(`
16
- ALTER TABLE message_snapshots
17
- ADD COLUMN parent_snapshot_id TEXT
18
- `);
19
-
20
- db.exec(`
21
- ALTER TABLE message_snapshots
22
- ADD COLUMN delta_changes TEXT
23
- `);
24
-
25
- // Create index for parent lookup
26
- db.exec(`
27
- CREATE INDEX idx_message_snapshots_parent ON message_snapshots(parent_snapshot_id)
28
- `);
29
-
30
- debug.log('migration', '✅ Delta snapshot fields added');
31
- };
32
-
33
- export const down = (db: DatabaseConnection): void => {
34
- debug.log('migration', '🗑️ Removing delta snapshot fields...');
35
-
36
- // SQLite doesn't support DROP COLUMN easily, so we'd need to recreate table
37
- // For now, this is a forward-only migration
38
- debug.warn('migration', '⚠️ Rollback not implemented for delta snapshot fields');
39
-
40
- debug.log('migration', '✅ Delta snapshot fields rollback skipped');
41
- };
1
+ import type { DatabaseConnection } from '$shared/types/database/connection';
2
+
3
+ import { debug } from '$shared/utils/logger';
4
+ export const description = 'Add delta snapshot support for efficient storage';
5
+
6
+ export const up = (db: DatabaseConnection): void => {
7
+ debug.log('migration', '📋 Adding delta snapshot fields...');
8
+
9
+ // Add new columns for delta snapshots
10
+ db.exec(`
11
+ ALTER TABLE message_snapshots
12
+ ADD COLUMN snapshot_type TEXT DEFAULT 'full' CHECK(snapshot_type IN ('full', 'delta'))
13
+ `);
14
+
15
+ db.exec(`
16
+ ALTER TABLE message_snapshots
17
+ ADD COLUMN parent_snapshot_id TEXT
18
+ `);
19
+
20
+ db.exec(`
21
+ ALTER TABLE message_snapshots
22
+ ADD COLUMN delta_changes TEXT
23
+ `);
24
+
25
+ // Create index for parent lookup
26
+ db.exec(`
27
+ CREATE INDEX idx_message_snapshots_parent ON message_snapshots(parent_snapshot_id)
28
+ `);
29
+
30
+ debug.log('migration', '✅ Delta snapshot fields added');
31
+ };
32
+
33
+ export const down = (db: DatabaseConnection): void => {
34
+ debug.log('migration', '🗑️ Removing delta snapshot fields...');
35
+
36
+ // SQLite doesn't support DROP COLUMN easily, so we'd need to recreate table
37
+ // For now, this is a forward-only migration
38
+ debug.warn('migration', '⚠️ Rollback not implemented for delta snapshot fields');
39
+
40
+ debug.log('migration', '✅ Delta snapshot fields rollback skipped');
41
+ };
@@ -1,70 +1,70 @@
1
- /**
2
- * Migration: Add soft delete and branch support for undo/redo feature
3
- * Purpose: Enable multi-branch redo functionality with soft deletes
4
- */
5
-
6
- import type { DatabaseConnection } from '$shared/types/database/connection';
7
-
8
- import { debug } from '$shared/utils/logger';
9
- export const description = 'Add soft delete and branch support for multi-branch redo';
10
-
11
- export const up = (db: DatabaseConnection): void => {
12
- debug.log('migration', '📋 Adding soft delete and branch support...');
13
-
14
- // Add columns to messages table
15
- db.exec(`
16
- ALTER TABLE messages
17
- ADD COLUMN is_deleted INTEGER DEFAULT 0 CHECK(is_deleted IN (0, 1))
18
- `);
19
-
20
- db.exec(`
21
- ALTER TABLE messages
22
- ADD COLUMN branch_id TEXT
23
- `);
24
-
25
- // Add columns to message_snapshots table
26
- db.exec(`
27
- ALTER TABLE message_snapshots
28
- ADD COLUMN is_deleted INTEGER DEFAULT 0 CHECK(is_deleted IN (0, 1))
29
- `);
30
-
31
- db.exec(`
32
- ALTER TABLE message_snapshots
33
- ADD COLUMN branch_id TEXT
34
- `);
35
-
36
- // Create indexes for efficient queries
37
- db.exec(`
38
- CREATE INDEX idx_messages_is_deleted ON messages(is_deleted)
39
- `);
40
-
41
- db.exec(`
42
- CREATE INDEX idx_messages_branch_id ON messages(branch_id)
43
- `);
44
-
45
- db.exec(`
46
- CREATE INDEX idx_message_snapshots_is_deleted ON message_snapshots(is_deleted)
47
- `);
48
-
49
- db.exec(`
50
- CREATE INDEX idx_message_snapshots_branch_id ON message_snapshots(branch_id)
51
- `);
52
-
53
- debug.log('migration', '✅ Soft delete and branch support added');
54
- };
55
-
56
- export const down = (db: DatabaseConnection): void => {
57
- debug.log('migration', '🗑️ Removing soft delete and branch support...');
58
-
59
- // Drop indexes
60
- db.exec('DROP INDEX IF EXISTS idx_message_snapshots_branch_id');
61
- db.exec('DROP INDEX IF EXISTS idx_message_snapshots_is_deleted');
62
- db.exec('DROP INDEX IF EXISTS idx_messages_branch_id');
63
- db.exec('DROP INDEX IF EXISTS idx_messages_is_deleted');
64
-
65
- // SQLite doesn't support DROP COLUMN easily without recreating table
66
- // For rollback, we'd need to recreate tables without these columns
67
- debug.warn('migration', '⚠️ Full rollback not implemented - columns remain but unused');
68
-
69
- debug.log('migration', '✅ Soft delete and branch support rollback completed');
70
- };
1
+ /**
2
+ * Migration: Add soft delete and branch support for undo/redo feature
3
+ * Purpose: Enable multi-branch redo functionality with soft deletes
4
+ */
5
+
6
+ import type { DatabaseConnection } from '$shared/types/database/connection';
7
+
8
+ import { debug } from '$shared/utils/logger';
9
+ export const description = 'Add soft delete and branch support for multi-branch redo';
10
+
11
+ export const up = (db: DatabaseConnection): void => {
12
+ debug.log('migration', '📋 Adding soft delete and branch support...');
13
+
14
+ // Add columns to messages table
15
+ db.exec(`
16
+ ALTER TABLE messages
17
+ ADD COLUMN is_deleted INTEGER DEFAULT 0 CHECK(is_deleted IN (0, 1))
18
+ `);
19
+
20
+ db.exec(`
21
+ ALTER TABLE messages
22
+ ADD COLUMN branch_id TEXT
23
+ `);
24
+
25
+ // Add columns to message_snapshots table
26
+ db.exec(`
27
+ ALTER TABLE message_snapshots
28
+ ADD COLUMN is_deleted INTEGER DEFAULT 0 CHECK(is_deleted IN (0, 1))
29
+ `);
30
+
31
+ db.exec(`
32
+ ALTER TABLE message_snapshots
33
+ ADD COLUMN branch_id TEXT
34
+ `);
35
+
36
+ // Create indexes for efficient queries
37
+ db.exec(`
38
+ CREATE INDEX idx_messages_is_deleted ON messages(is_deleted)
39
+ `);
40
+
41
+ db.exec(`
42
+ CREATE INDEX idx_messages_branch_id ON messages(branch_id)
43
+ `);
44
+
45
+ db.exec(`
46
+ CREATE INDEX idx_message_snapshots_is_deleted ON message_snapshots(is_deleted)
47
+ `);
48
+
49
+ db.exec(`
50
+ CREATE INDEX idx_message_snapshots_branch_id ON message_snapshots(branch_id)
51
+ `);
52
+
53
+ debug.log('migration', '✅ Soft delete and branch support added');
54
+ };
55
+
56
+ export const down = (db: DatabaseConnection): void => {
57
+ debug.log('migration', '🗑️ Removing soft delete and branch support...');
58
+
59
+ // Drop indexes
60
+ db.exec('DROP INDEX IF EXISTS idx_message_snapshots_branch_id');
61
+ db.exec('DROP INDEX IF EXISTS idx_message_snapshots_is_deleted');
62
+ db.exec('DROP INDEX IF EXISTS idx_messages_branch_id');
63
+ db.exec('DROP INDEX IF EXISTS idx_messages_is_deleted');
64
+
65
+ // SQLite doesn't support DROP COLUMN easily without recreating table
66
+ // For rollback, we'd need to recreate tables without these columns
67
+ debug.warn('migration', '⚠️ Full rollback not implemented - columns remain but unused');
68
+
69
+ debug.log('migration', '✅ Soft delete and branch support rollback completed');
70
+ };