@myrialabs/clopen 0.0.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 (456) hide show
  1. package/.env.example +6 -0
  2. package/.github/workflows/release.yml +60 -0
  3. package/.github/workflows/test.yml +40 -0
  4. package/CONTRIBUTING.md +499 -0
  5. package/LICENSE +21 -0
  6. package/README.md +209 -0
  7. package/backend/index.ts +156 -0
  8. package/backend/lib/chat/helpers.ts +42 -0
  9. package/backend/lib/chat/index.ts +2 -0
  10. package/backend/lib/chat/stream-manager.ts +1126 -0
  11. package/backend/lib/database/README.md +77 -0
  12. package/backend/lib/database/index.ts +119 -0
  13. package/backend/lib/database/migrations/001_create_projects_table.ts +31 -0
  14. package/backend/lib/database/migrations/002_create_chat_sessions_table.ts +33 -0
  15. package/backend/lib/database/migrations/003_create_messages_table.ts +32 -0
  16. package/backend/lib/database/migrations/004_create_prompt_templates_table.ts +34 -0
  17. package/backend/lib/database/migrations/005_create_settings_table.ts +24 -0
  18. package/backend/lib/database/migrations/006_add_user_to_messages.ts +58 -0
  19. package/backend/lib/database/migrations/007_create_stream_states_table.ts +41 -0
  20. package/backend/lib/database/migrations/008_create_message_snapshots_table.ts +62 -0
  21. package/backend/lib/database/migrations/009_add_delta_snapshot_fields.ts +41 -0
  22. package/backend/lib/database/migrations/010_add_soft_delete_and_branch_support.ts +70 -0
  23. package/backend/lib/database/migrations/011_git_like_commit_graph.ts +156 -0
  24. package/backend/lib/database/migrations/012_add_file_change_statistics.ts +41 -0
  25. package/backend/lib/database/migrations/013_checkpoint_tree_state.ts +118 -0
  26. package/backend/lib/database/migrations/014_add_engine_to_sessions.ts +18 -0
  27. package/backend/lib/database/migrations/015_add_model_to_sessions.ts +18 -0
  28. package/backend/lib/database/migrations/016_create_user_projects_table.ts +34 -0
  29. package/backend/lib/database/migrations/017_add_current_session_to_user_projects.ts +32 -0
  30. package/backend/lib/database/migrations/018_create_claude_accounts_table.ts +24 -0
  31. package/backend/lib/database/migrations/019_add_claude_account_to_sessions.ts +18 -0
  32. package/backend/lib/database/migrations/020_add_snapshot_tree_hash.ts +32 -0
  33. package/backend/lib/database/migrations/021_drop_prompt_templates_table.ts +33 -0
  34. package/backend/lib/database/migrations/index.ts +154 -0
  35. package/backend/lib/database/queries/checkpoint-queries.ts +87 -0
  36. package/backend/lib/database/queries/engine-queries.ts +75 -0
  37. package/backend/lib/database/queries/index.ts +9 -0
  38. package/backend/lib/database/queries/message-queries.ts +472 -0
  39. package/backend/lib/database/queries/project-queries.ts +117 -0
  40. package/backend/lib/database/queries/session-queries.ts +271 -0
  41. package/backend/lib/database/queries/settings-queries.ts +34 -0
  42. package/backend/lib/database/queries/snapshot-queries.ts +326 -0
  43. package/backend/lib/database/queries/utils-queries.ts +59 -0
  44. package/backend/lib/database/seeders/index.ts +13 -0
  45. package/backend/lib/database/seeders/settings_seeder.ts +84 -0
  46. package/backend/lib/database/utils/connection.ts +174 -0
  47. package/backend/lib/database/utils/index.ts +4 -0
  48. package/backend/lib/database/utils/migration-runner.ts +118 -0
  49. package/backend/lib/database/utils/seeder-runner.ts +121 -0
  50. package/backend/lib/engine/adapters/claude/environment.ts +164 -0
  51. package/backend/lib/engine/adapters/claude/error-handler.ts +60 -0
  52. package/backend/lib/engine/adapters/claude/index.ts +1 -0
  53. package/backend/lib/engine/adapters/claude/path-utils.ts +38 -0
  54. package/backend/lib/engine/adapters/claude/stream.ts +177 -0
  55. package/backend/lib/engine/adapters/opencode/index.ts +2 -0
  56. package/backend/lib/engine/adapters/opencode/message-converter.ts +862 -0
  57. package/backend/lib/engine/adapters/opencode/server.ts +104 -0
  58. package/backend/lib/engine/adapters/opencode/stream.ts +755 -0
  59. package/backend/lib/engine/index.ts +196 -0
  60. package/backend/lib/engine/types.ts +58 -0
  61. package/backend/lib/files/file-operations.ts +478 -0
  62. package/backend/lib/files/file-reading.ts +308 -0
  63. package/backend/lib/files/file-watcher.ts +383 -0
  64. package/backend/lib/files/path-browsing.ts +382 -0
  65. package/backend/lib/git/git-executor.ts +88 -0
  66. package/backend/lib/git/git-parser.ts +411 -0
  67. package/backend/lib/git/git-service.ts +505 -0
  68. package/backend/lib/mcp/README.md +1144 -0
  69. package/backend/lib/mcp/config.ts +316 -0
  70. package/backend/lib/mcp/index.ts +35 -0
  71. package/backend/lib/mcp/project-context.ts +236 -0
  72. package/backend/lib/mcp/servers/browser-automation/actions.ts +156 -0
  73. package/backend/lib/mcp/servers/browser-automation/browser.ts +419 -0
  74. package/backend/lib/mcp/servers/browser-automation/index.ts +791 -0
  75. package/backend/lib/mcp/servers/browser-automation/inspection.ts +501 -0
  76. package/backend/lib/mcp/servers/helper.ts +143 -0
  77. package/backend/lib/mcp/servers/index.ts +45 -0
  78. package/backend/lib/mcp/servers/weather/get-temperature.ts +56 -0
  79. package/backend/lib/mcp/servers/weather/index.ts +31 -0
  80. package/backend/lib/mcp/stdio-server.ts +103 -0
  81. package/backend/lib/mcp/types.ts +65 -0
  82. package/backend/lib/preview/browser/browser-audio-capture.ts +86 -0
  83. package/backend/lib/preview/browser/browser-console-manager.ts +263 -0
  84. package/backend/lib/preview/browser/browser-dialog-handler.ts +222 -0
  85. package/backend/lib/preview/browser/browser-interaction-handler.ts +421 -0
  86. package/backend/lib/preview/browser/browser-mcp-control.ts +415 -0
  87. package/backend/lib/preview/browser/browser-native-ui-handler.ts +512 -0
  88. package/backend/lib/preview/browser/browser-navigation-tracker.ts +104 -0
  89. package/backend/lib/preview/browser/browser-pool.ts +357 -0
  90. package/backend/lib/preview/browser/browser-preview-service.ts +882 -0
  91. package/backend/lib/preview/browser/browser-tab-manager.ts +935 -0
  92. package/backend/lib/preview/browser/browser-video-capture.ts +695 -0
  93. package/backend/lib/preview/browser/scripts/audio-stream.ts +292 -0
  94. package/backend/lib/preview/browser/scripts/cursor-tracking.ts +85 -0
  95. package/backend/lib/preview/browser/scripts/video-stream.ts +438 -0
  96. package/backend/lib/preview/browser/types.ts +359 -0
  97. package/backend/lib/preview/index.ts +24 -0
  98. package/backend/lib/project/index.ts +2 -0
  99. package/backend/lib/project/status-manager.ts +182 -0
  100. package/backend/lib/shared/index.ts +2 -0
  101. package/backend/lib/shared/port-utils.ts +25 -0
  102. package/backend/lib/shared/process-manager.ts +281 -0
  103. package/backend/lib/snapshot/blob-store.ts +227 -0
  104. package/backend/lib/snapshot/gitignore.ts +307 -0
  105. package/backend/lib/snapshot/helpers.ts +397 -0
  106. package/backend/lib/snapshot/snapshot-service.ts +483 -0
  107. package/backend/lib/terminal/helpers.ts +14 -0
  108. package/backend/lib/terminal/index.ts +8 -0
  109. package/backend/lib/terminal/pty-manager.ts +4 -0
  110. package/backend/lib/terminal/pty-session-manager.ts +387 -0
  111. package/backend/lib/terminal/shell-utils.ts +313 -0
  112. package/backend/lib/terminal/stream-manager.ts +293 -0
  113. package/backend/lib/tunnel/global-tunnel-manager.ts +243 -0
  114. package/backend/lib/tunnel/project-tunnel-manager.ts +311 -0
  115. package/backend/lib/user/helpers.ts +87 -0
  116. package/backend/lib/utils/ws.ts +944 -0
  117. package/backend/lib/vite-dev.ts +353 -0
  118. package/backend/middleware/cors.ts +15 -0
  119. package/backend/middleware/error-handler.ts +49 -0
  120. package/backend/middleware/logger.ts +9 -0
  121. package/backend/types/api.ts +24 -0
  122. package/backend/ws/README.md +1505 -0
  123. package/backend/ws/chat/background.ts +198 -0
  124. package/backend/ws/chat/index.ts +21 -0
  125. package/backend/ws/chat/stream.ts +707 -0
  126. package/backend/ws/engine/claude/accounts.ts +401 -0
  127. package/backend/ws/engine/claude/index.ts +13 -0
  128. package/backend/ws/engine/claude/status.ts +43 -0
  129. package/backend/ws/engine/index.ts +14 -0
  130. package/backend/ws/engine/opencode/index.ts +11 -0
  131. package/backend/ws/engine/opencode/status.ts +30 -0
  132. package/backend/ws/engine/utils.ts +36 -0
  133. package/backend/ws/files/index.ts +30 -0
  134. package/backend/ws/files/read.ts +189 -0
  135. package/backend/ws/files/search.ts +453 -0
  136. package/backend/ws/files/watch.ts +124 -0
  137. package/backend/ws/files/write.ts +143 -0
  138. package/backend/ws/git/branch.ts +106 -0
  139. package/backend/ws/git/commit.ts +39 -0
  140. package/backend/ws/git/conflict.ts +68 -0
  141. package/backend/ws/git/diff.ts +69 -0
  142. package/backend/ws/git/index.ts +24 -0
  143. package/backend/ws/git/log.ts +41 -0
  144. package/backend/ws/git/remote.ts +214 -0
  145. package/backend/ws/git/staging.ts +84 -0
  146. package/backend/ws/git/status.ts +90 -0
  147. package/backend/ws/index.ts +69 -0
  148. package/backend/ws/mcp/index.ts +61 -0
  149. package/backend/ws/messages/crud.ts +74 -0
  150. package/backend/ws/messages/index.ts +14 -0
  151. package/backend/ws/preview/browser/cleanup.ts +129 -0
  152. package/backend/ws/preview/browser/console.ts +114 -0
  153. package/backend/ws/preview/browser/interact.ts +513 -0
  154. package/backend/ws/preview/browser/mcp.ts +129 -0
  155. package/backend/ws/preview/browser/native-ui.ts +235 -0
  156. package/backend/ws/preview/browser/stats.ts +55 -0
  157. package/backend/ws/preview/browser/tab-info.ts +126 -0
  158. package/backend/ws/preview/browser/tab.ts +166 -0
  159. package/backend/ws/preview/browser/webcodecs.ts +293 -0
  160. package/backend/ws/preview/index.ts +146 -0
  161. package/backend/ws/projects/crud.ts +113 -0
  162. package/backend/ws/projects/index.ts +25 -0
  163. package/backend/ws/projects/presence.ts +46 -0
  164. package/backend/ws/projects/status.ts +116 -0
  165. package/backend/ws/sessions/crud.ts +327 -0
  166. package/backend/ws/sessions/index.ts +33 -0
  167. package/backend/ws/settings/crud.ts +112 -0
  168. package/backend/ws/settings/index.ts +14 -0
  169. package/backend/ws/snapshot/index.ts +17 -0
  170. package/backend/ws/snapshot/restore.ts +173 -0
  171. package/backend/ws/snapshot/timeline.ts +141 -0
  172. package/backend/ws/system/index.ts +14 -0
  173. package/backend/ws/system/operations.ts +49 -0
  174. package/backend/ws/terminal/index.ts +40 -0
  175. package/backend/ws/terminal/persistence.ts +153 -0
  176. package/backend/ws/terminal/session.ts +382 -0
  177. package/backend/ws/terminal/stream.ts +79 -0
  178. package/backend/ws/tunnel/index.ts +14 -0
  179. package/backend/ws/tunnel/operations.ts +91 -0
  180. package/backend/ws/types.ts +20 -0
  181. package/backend/ws/user/crud.ts +156 -0
  182. package/backend/ws/user/index.ts +14 -0
  183. package/bin/clopen.ts +307 -0
  184. package/bun.lock +1352 -0
  185. package/frontend/App.svelte +34 -0
  186. package/frontend/app.css +313 -0
  187. package/frontend/lib/app-environment.ts +10 -0
  188. package/frontend/lib/components/chat/ChatInterface.svelte +407 -0
  189. package/frontend/lib/components/chat/formatters/ErrorMessage.svelte +57 -0
  190. package/frontend/lib/components/chat/formatters/MessageFormatter.svelte +224 -0
  191. package/frontend/lib/components/chat/formatters/TextMessage.svelte +395 -0
  192. package/frontend/lib/components/chat/formatters/Tools.svelte +70 -0
  193. package/frontend/lib/components/chat/formatters/index.ts +3 -0
  194. package/frontend/lib/components/chat/input/ChatInput.svelte +421 -0
  195. package/frontend/lib/components/chat/input/components/ChatInputActions.svelte +78 -0
  196. package/frontend/lib/components/chat/input/components/DragDropOverlay.svelte +30 -0
  197. package/frontend/lib/components/chat/input/components/EditModeIndicator.svelte +33 -0
  198. package/frontend/lib/components/chat/input/components/EngineModelPicker.svelte +619 -0
  199. package/frontend/lib/components/chat/input/components/FileAttachmentPreview.svelte +48 -0
  200. package/frontend/lib/components/chat/input/components/LoadingIndicator.svelte +31 -0
  201. package/frontend/lib/components/chat/input/composables/use-animations.svelte.ts +201 -0
  202. package/frontend/lib/components/chat/input/composables/use-chat-actions.svelte.ts +148 -0
  203. package/frontend/lib/components/chat/input/composables/use-file-handling.svelte.ts +216 -0
  204. package/frontend/lib/components/chat/input/composables/use-input-state.svelte.ts +357 -0
  205. package/frontend/lib/components/chat/input/composables/use-textarea-resize.svelte.ts +57 -0
  206. package/frontend/lib/components/chat/message/ChatMessage.svelte +478 -0
  207. package/frontend/lib/components/chat/message/ChatMessages.svelte +541 -0
  208. package/frontend/lib/components/chat/message/DateSeparator.svelte +86 -0
  209. package/frontend/lib/components/chat/message/MessageBubble.svelte +86 -0
  210. package/frontend/lib/components/chat/message/MessageHeader.svelte +157 -0
  211. package/frontend/lib/components/chat/modal/DebugModal.svelte +59 -0
  212. package/frontend/lib/components/chat/modal/TokenUsageModal.svelte +124 -0
  213. package/frontend/lib/components/chat/shared/index.ts +2 -0
  214. package/frontend/lib/components/chat/shared/utils.ts +116 -0
  215. package/frontend/lib/components/chat/tools/BashOutputTool.svelte +35 -0
  216. package/frontend/lib/components/chat/tools/BashTool.svelte +46 -0
  217. package/frontend/lib/components/chat/tools/CustomMcpTool.svelte +139 -0
  218. package/frontend/lib/components/chat/tools/EditTool.svelte +48 -0
  219. package/frontend/lib/components/chat/tools/ExitPlanModeTool.svelte +32 -0
  220. package/frontend/lib/components/chat/tools/GlobTool.svelte +51 -0
  221. package/frontend/lib/components/chat/tools/GrepTool.svelte +90 -0
  222. package/frontend/lib/components/chat/tools/KillShellTool.svelte +26 -0
  223. package/frontend/lib/components/chat/tools/ListMcpResourcesTool.svelte +31 -0
  224. package/frontend/lib/components/chat/tools/NotebookEditTool.svelte +38 -0
  225. package/frontend/lib/components/chat/tools/ReadMcpResourceTool.svelte +34 -0
  226. package/frontend/lib/components/chat/tools/ReadTool.svelte +41 -0
  227. package/frontend/lib/components/chat/tools/TaskTool.svelte +64 -0
  228. package/frontend/lib/components/chat/tools/TodoWriteTool.svelte +75 -0
  229. package/frontend/lib/components/chat/tools/WebFetchTool.svelte +35 -0
  230. package/frontend/lib/components/chat/tools/WebSearchTool.svelte +84 -0
  231. package/frontend/lib/components/chat/tools/WriteTool.svelte +33 -0
  232. package/frontend/lib/components/chat/tools/components/CodeBlock.svelte +79 -0
  233. package/frontend/lib/components/chat/tools/components/DiffBlock.svelte +408 -0
  234. package/frontend/lib/components/chat/tools/components/FileHeader.svelte +45 -0
  235. package/frontend/lib/components/chat/tools/components/InfoLine.svelte +19 -0
  236. package/frontend/lib/components/chat/tools/components/StatsBadges.svelte +27 -0
  237. package/frontend/lib/components/chat/tools/components/TerminalCommand.svelte +54 -0
  238. package/frontend/lib/components/chat/tools/components/index.ts +7 -0
  239. package/frontend/lib/components/chat/tools/index.ts +26 -0
  240. package/frontend/lib/components/chat/widgets/FloatingTodoList.svelte +249 -0
  241. package/frontend/lib/components/chat/widgets/TokenUsage.svelte +78 -0
  242. package/frontend/lib/components/checkpoint/TimelineModal.svelte +391 -0
  243. package/frontend/lib/components/checkpoint/timeline/TimelineEdge.svelte +26 -0
  244. package/frontend/lib/components/checkpoint/timeline/TimelineGraph.svelte +87 -0
  245. package/frontend/lib/components/checkpoint/timeline/TimelineNode.svelte +108 -0
  246. package/frontend/lib/components/checkpoint/timeline/TimelineVersionGroup.svelte +59 -0
  247. package/frontend/lib/components/checkpoint/timeline/animation.ts +168 -0
  248. package/frontend/lib/components/checkpoint/timeline/config.ts +44 -0
  249. package/frontend/lib/components/checkpoint/timeline/graph-builder.ts +304 -0
  250. package/frontend/lib/components/checkpoint/timeline/types.ts +65 -0
  251. package/frontend/lib/components/checkpoint/timeline/utils.ts +53 -0
  252. package/frontend/lib/components/common/Alert.svelte +139 -0
  253. package/frontend/lib/components/common/AvatarBubble.svelte +56 -0
  254. package/frontend/lib/components/common/Button.svelte +71 -0
  255. package/frontend/lib/components/common/Card.svelte +102 -0
  256. package/frontend/lib/components/common/Checkbox.svelte +48 -0
  257. package/frontend/lib/components/common/Dialog.svelte +249 -0
  258. package/frontend/lib/components/common/FolderBrowser.svelte +843 -0
  259. package/frontend/lib/components/common/Icon.svelte +58 -0
  260. package/frontend/lib/components/common/Input.svelte +72 -0
  261. package/frontend/lib/components/common/Lightbox.svelte +233 -0
  262. package/frontend/lib/components/common/LoadingScreen.svelte +52 -0
  263. package/frontend/lib/components/common/LoadingSpinner.svelte +48 -0
  264. package/frontend/lib/components/common/Modal.svelte +177 -0
  265. package/frontend/lib/components/common/ModalProvider.svelte +28 -0
  266. package/frontend/lib/components/common/ModelSelector.svelte +110 -0
  267. package/frontend/lib/components/common/MonacoEditor.svelte +569 -0
  268. package/frontend/lib/components/common/NotificationToast.svelte +113 -0
  269. package/frontend/lib/components/common/PageTemplate.svelte +76 -0
  270. package/frontend/lib/components/common/ProjectUserAvatars.svelte +79 -0
  271. package/frontend/lib/components/common/Select.svelte +98 -0
  272. package/frontend/lib/components/common/Textarea.svelte +80 -0
  273. package/frontend/lib/components/common/ThemeToggle.svelte +44 -0
  274. package/frontend/lib/components/common/lucide-icons.ts +1642 -0
  275. package/frontend/lib/components/common/material-icons.ts +1082 -0
  276. package/frontend/lib/components/common/xterm/XTerm.svelte +796 -0
  277. package/frontend/lib/components/common/xterm/index.ts +16 -0
  278. package/frontend/lib/components/common/xterm/terminal-config.ts +68 -0
  279. package/frontend/lib/components/common/xterm/types.ts +31 -0
  280. package/frontend/lib/components/common/xterm/xterm-service.ts +353 -0
  281. package/frontend/lib/components/files/FileNode.svelte +384 -0
  282. package/frontend/lib/components/files/FileTree.svelte +681 -0
  283. package/frontend/lib/components/files/FileViewer.svelte +728 -0
  284. package/frontend/lib/components/files/SearchResults.svelte +303 -0
  285. package/frontend/lib/components/git/BranchManager.svelte +458 -0
  286. package/frontend/lib/components/git/ChangesSection.svelte +107 -0
  287. package/frontend/lib/components/git/CommitForm.svelte +76 -0
  288. package/frontend/lib/components/git/ConflictResolver.svelte +158 -0
  289. package/frontend/lib/components/git/DiffViewer.svelte +364 -0
  290. package/frontend/lib/components/git/FileChangeItem.svelte +97 -0
  291. package/frontend/lib/components/git/GitButton.svelte +33 -0
  292. package/frontend/lib/components/git/GitLog.svelte +361 -0
  293. package/frontend/lib/components/git/GitModal.svelte +80 -0
  294. package/frontend/lib/components/history/HistoryModal.svelte +563 -0
  295. package/frontend/lib/components/history/HistoryView.svelte +615 -0
  296. package/frontend/lib/components/index.ts +34 -0
  297. package/frontend/lib/components/preview/browser/BrowserPreview.svelte +549 -0
  298. package/frontend/lib/components/preview/browser/components/Canvas.svelte +1058 -0
  299. package/frontend/lib/components/preview/browser/components/ConsolePanel.svelte +757 -0
  300. package/frontend/lib/components/preview/browser/components/Container.svelte +450 -0
  301. package/frontend/lib/components/preview/browser/components/ContextMenu.svelte +236 -0
  302. package/frontend/lib/components/preview/browser/components/SelectDropdown.svelte +224 -0
  303. package/frontend/lib/components/preview/browser/components/Toolbar.svelte +339 -0
  304. package/frontend/lib/components/preview/browser/components/VirtualCursor.svelte +36 -0
  305. package/frontend/lib/components/preview/browser/core/cleanup.svelte.ts +155 -0
  306. package/frontend/lib/components/preview/browser/core/coordinator.svelte.ts +837 -0
  307. package/frontend/lib/components/preview/browser/core/interactions.svelte.ts +113 -0
  308. package/frontend/lib/components/preview/browser/core/mcp-handlers.svelte.ts +296 -0
  309. package/frontend/lib/components/preview/browser/core/native-ui-handlers.svelte.ts +391 -0
  310. package/frontend/lib/components/preview/browser/core/stream-handler.svelte.ts +231 -0
  311. package/frontend/lib/components/preview/browser/core/tab-manager.svelte.ts +210 -0
  312. package/frontend/lib/components/preview/browser/core/tab-operations.svelte.ts +239 -0
  313. package/frontend/lib/components/preview/index.ts +2 -0
  314. package/frontend/lib/components/settings/SettingsModal.svelte +235 -0
  315. package/frontend/lib/components/settings/SettingsView.svelte +36 -0
  316. package/frontend/lib/components/settings/appearance/AppearanceSettings.svelte +51 -0
  317. package/frontend/lib/components/settings/appearance/LayoutPresetSettings.svelte +160 -0
  318. package/frontend/lib/components/settings/appearance/LayoutPreview.svelte +76 -0
  319. package/frontend/lib/components/settings/engines/AIEnginesSettings.svelte +917 -0
  320. package/frontend/lib/components/settings/general/AdvancedSettings.svelte +187 -0
  321. package/frontend/lib/components/settings/general/DataManagementSettings.svelte +203 -0
  322. package/frontend/lib/components/settings/general/GeneralSettings.svelte +10 -0
  323. package/frontend/lib/components/settings/model/ModelSettings.svelte +357 -0
  324. package/frontend/lib/components/settings/notifications/NotificationSettings.svelte +205 -0
  325. package/frontend/lib/components/settings/user/UserSettings.svelte +197 -0
  326. package/frontend/lib/components/terminal/Terminal.svelte +368 -0
  327. package/frontend/lib/components/terminal/TerminalTabs.svelte +87 -0
  328. package/frontend/lib/components/terminal/TerminalView.svelte +55 -0
  329. package/frontend/lib/components/tunnel/TunnelActive.svelte +142 -0
  330. package/frontend/lib/components/tunnel/TunnelButton.svelte +54 -0
  331. package/frontend/lib/components/tunnel/TunnelInactive.svelte +284 -0
  332. package/frontend/lib/components/tunnel/TunnelModal.svelte +47 -0
  333. package/frontend/lib/components/tunnel/TunnelQRCode.svelte +49 -0
  334. package/frontend/lib/components/workspace/DesktopNavigator.svelte +382 -0
  335. package/frontend/lib/components/workspace/MobileNavigator.svelte +403 -0
  336. package/frontend/lib/components/workspace/PanelContainer.svelte +100 -0
  337. package/frontend/lib/components/workspace/PanelHeader.svelte +505 -0
  338. package/frontend/lib/components/workspace/ViewMenu.svelte +162 -0
  339. package/frontend/lib/components/workspace/WorkspaceLayout.svelte +169 -0
  340. package/frontend/lib/components/workspace/layout/DesktopLayout.svelte +15 -0
  341. package/frontend/lib/components/workspace/layout/MobileLayout.svelte +17 -0
  342. package/frontend/lib/components/workspace/layout/split-pane/Container.svelte +42 -0
  343. package/frontend/lib/components/workspace/layout/split-pane/Handle.svelte +85 -0
  344. package/frontend/lib/components/workspace/layout/split-pane/Layout.svelte +37 -0
  345. package/frontend/lib/components/workspace/panels/ChatPanel.svelte +274 -0
  346. package/frontend/lib/components/workspace/panels/FilesPanel.svelte +1261 -0
  347. package/frontend/lib/components/workspace/panels/GitPanel.svelte +1560 -0
  348. package/frontend/lib/components/workspace/panels/PreviewPanel.svelte +150 -0
  349. package/frontend/lib/components/workspace/panels/TerminalPanel.svelte +73 -0
  350. package/frontend/lib/constants/preview.ts +45 -0
  351. package/frontend/lib/services/chat/chat.service.ts +704 -0
  352. package/frontend/lib/services/chat/index.ts +7 -0
  353. package/frontend/lib/services/notification/global-stream-monitor.ts +86 -0
  354. package/frontend/lib/services/notification/index.ts +8 -0
  355. package/frontend/lib/services/notification/push.service.ts +144 -0
  356. package/frontend/lib/services/notification/sound.service.ts +127 -0
  357. package/frontend/lib/services/preview/browser/browser-console.service.ts +61 -0
  358. package/frontend/lib/services/preview/browser/browser-webcodecs.service.ts +1499 -0
  359. package/frontend/lib/services/preview/browser/mcp-integration.svelte.ts +67 -0
  360. package/frontend/lib/services/preview/index.ts +23 -0
  361. package/frontend/lib/services/project/index.ts +8 -0
  362. package/frontend/lib/services/project/status.service.ts +159 -0
  363. package/frontend/lib/services/snapshot/snapshot.service.ts +47 -0
  364. package/frontend/lib/services/terminal/background/index.ts +130 -0
  365. package/frontend/lib/services/terminal/background/session-restore.ts +274 -0
  366. package/frontend/lib/services/terminal/background/stream-manager.ts +286 -0
  367. package/frontend/lib/services/terminal/index.ts +14 -0
  368. package/frontend/lib/services/terminal/persistence.service.ts +260 -0
  369. package/frontend/lib/services/terminal/project.service.ts +953 -0
  370. package/frontend/lib/services/terminal/session.service.ts +364 -0
  371. package/frontend/lib/services/terminal/terminal.service.ts +369 -0
  372. package/frontend/lib/stores/core/app.svelte.ts +117 -0
  373. package/frontend/lib/stores/core/files.svelte.ts +73 -0
  374. package/frontend/lib/stores/core/presence.svelte.ts +48 -0
  375. package/frontend/lib/stores/core/projects.svelte.ts +317 -0
  376. package/frontend/lib/stores/core/sessions.svelte.ts +383 -0
  377. package/frontend/lib/stores/features/claude-accounts.svelte.ts +58 -0
  378. package/frontend/lib/stores/features/models.svelte.ts +89 -0
  379. package/frontend/lib/stores/features/settings.svelte.ts +87 -0
  380. package/frontend/lib/stores/features/terminal.svelte.ts +701 -0
  381. package/frontend/lib/stores/features/tunnel.svelte.ts +161 -0
  382. package/frontend/lib/stores/features/user.svelte.ts +96 -0
  383. package/frontend/lib/stores/ui/chat-input.svelte.ts +57 -0
  384. package/frontend/lib/stores/ui/chat-model.svelte.ts +61 -0
  385. package/frontend/lib/stores/ui/dialog.svelte.ts +59 -0
  386. package/frontend/lib/stores/ui/edit-mode.svelte.ts +214 -0
  387. package/frontend/lib/stores/ui/notification.svelte.ts +166 -0
  388. package/frontend/lib/stores/ui/settings-modal.svelte.ts +88 -0
  389. package/frontend/lib/stores/ui/theme.svelte.ts +179 -0
  390. package/frontend/lib/stores/ui/workspace.svelte.ts +754 -0
  391. package/frontend/lib/types/native-ui.ts +73 -0
  392. package/frontend/lib/utils/chat/date-separator.ts +39 -0
  393. package/frontend/lib/utils/chat/message-grouper.ts +219 -0
  394. package/frontend/lib/utils/chat/message-processor.ts +135 -0
  395. package/frontend/lib/utils/chat/tool-handler.ts +161 -0
  396. package/frontend/lib/utils/chat/virtual-scroll.svelte.ts +142 -0
  397. package/frontend/lib/utils/click-outside.ts +20 -0
  398. package/frontend/lib/utils/context-manager.ts +257 -0
  399. package/frontend/lib/utils/file-icon-mappings.ts +769 -0
  400. package/frontend/lib/utils/folder-icon-mappings.ts +1030 -0
  401. package/frontend/lib/utils/git-status.ts +68 -0
  402. package/frontend/lib/utils/platform.ts +113 -0
  403. package/frontend/lib/utils/port-check.ts +65 -0
  404. package/frontend/lib/utils/terminalFormatter.ts +207 -0
  405. package/frontend/lib/utils/theme.ts +6 -0
  406. package/frontend/lib/utils/tree-visualizer.ts +320 -0
  407. package/frontend/lib/utils/ws.ts +44 -0
  408. package/frontend/main.ts +13 -0
  409. package/index.html +70 -0
  410. package/package.json +111 -0
  411. package/scripts/generate-icons.ts +87 -0
  412. package/scripts/pre-publish-check.sh +142 -0
  413. package/scripts/setup-hooks.sh +134 -0
  414. package/scripts/validate-branch-name.sh +47 -0
  415. package/scripts/validate-commit-msg.sh +42 -0
  416. package/shared/constants/engines.ts +134 -0
  417. package/shared/types/database/connection.ts +16 -0
  418. package/shared/types/database/index.ts +6 -0
  419. package/shared/types/database/schema.ts +141 -0
  420. package/shared/types/engine/index.ts +45 -0
  421. package/shared/types/filesystem/index.ts +22 -0
  422. package/shared/types/git.ts +171 -0
  423. package/shared/types/messaging/index.ts +239 -0
  424. package/shared/types/messaging/tool.ts +526 -0
  425. package/shared/types/network/api.ts +18 -0
  426. package/shared/types/network/index.ts +5 -0
  427. package/shared/types/stores/app.ts +23 -0
  428. package/shared/types/stores/dialog.ts +21 -0
  429. package/shared/types/stores/index.ts +3 -0
  430. package/shared/types/stores/settings.ts +15 -0
  431. package/shared/types/terminal/index.ts +44 -0
  432. package/shared/types/ui/components.ts +61 -0
  433. package/shared/types/ui/icons.ts +23 -0
  434. package/shared/types/ui/index.ts +22 -0
  435. package/shared/types/ui/notifications.ts +14 -0
  436. package/shared/types/ui/theme.ts +12 -0
  437. package/shared/types/websocket/index.ts +43 -0
  438. package/shared/types/window.d.ts +13 -0
  439. package/shared/utils/anonymous-user.ts +168 -0
  440. package/shared/utils/async.ts +10 -0
  441. package/shared/utils/diff-calculator.ts +184 -0
  442. package/shared/utils/file-type-detection.ts +166 -0
  443. package/shared/utils/logger.ts +158 -0
  444. package/shared/utils/message-formatter.ts +79 -0
  445. package/shared/utils/path.ts +47 -0
  446. package/shared/utils/ws-client.ts +768 -0
  447. package/shared/utils/ws-server.ts +660 -0
  448. package/static/audio/notification.ogg +0 -0
  449. package/static/favicon.svg +8 -0
  450. package/static/fonts/dm-sans/dm-sans-italic-latin-ext.woff2 +0 -0
  451. package/static/fonts/dm-sans/dm-sans-italic-latin.woff2 +0 -0
  452. package/static/fonts/dm-sans/dm-sans-normal-latin-ext.woff2 +0 -0
  453. package/static/fonts/dm-sans/dm-sans-normal-latin.woff2 +0 -0
  454. package/static/fonts/dm-sans.css +96 -0
  455. package/svelte.config.js +20 -0
  456. package/vite.config.ts +33 -0
@@ -0,0 +1,1030 @@
1
+ import type { IconName } from '$shared/types/ui/icons';
2
+
3
+ /**
4
+ * Comprehensive folder icon mapping - using Material Icons with open/closed states
5
+ * This file contains mappings for common folder names to their specific icons
6
+ * Uses material:folder and material:folder-open for consistency and availability
7
+ */
8
+ export const folderIcons: Record<string, { closed: IconName; opened: IconName }> = {
9
+ // === DEVELOPMENT FRAMEWORKS ===
10
+ 'android': {
11
+ closed: 'material:folder-android',
12
+ opened: 'material:folder-android-open'
13
+ },
14
+ 'ios': {
15
+ closed: 'material:folder-ios',
16
+ opened: 'material:folder-ios-open'
17
+ },
18
+ 'expo': {
19
+ closed: 'material:folder-expo',
20
+ opened: 'material:folder-expo-open'
21
+ },
22
+ 'electron': {
23
+ closed: 'material:folder-app',
24
+ opened: 'material:folder-app-open'
25
+ },
26
+ 'tauri': {
27
+ closed: 'material:folder-src-tauri',
28
+ opened: 'material:folder-src-tauri-open'
29
+ },
30
+ 'next': {
31
+ closed: 'material:folder-next',
32
+ opened: 'material:folder-next-open'
33
+ },
34
+ 'nuxt': {
35
+ closed: 'material:folder-nuxt',
36
+ opened: 'material:folder-nuxt-open'
37
+ },
38
+ 'svelte': {
39
+ closed: 'material:folder-svelte',
40
+ opened: 'material:folder-svelte-open'
41
+ },
42
+ 'aurelia': {
43
+ closed: 'material:folder-aurelia',
44
+ opened: 'material:folder-aurelia-open'
45
+ },
46
+ 'meteor': {
47
+ closed: 'material:folder-meta',
48
+ opened: 'material:folder-meta-open'
49
+ },
50
+ 'vue': {
51
+ closed: 'material:folder-vue',
52
+ opened: 'material:folder-vue-open'
53
+ },
54
+ 'react': {
55
+ closed: 'material:folder-react-components',
56
+ opened: 'material:folder-react-components-open'
57
+ },
58
+ 'angular': {
59
+ closed: 'material:folder-angular',
60
+ opened: 'material:folder-angular-open'
61
+ },
62
+ 'ember': {
63
+ closed: 'material:folder-app',
64
+ opened: 'material:folder-app-open'
65
+ },
66
+ 'gatsby': {
67
+ closed: 'material:folder-app',
68
+ opened: 'material:folder-app-open'
69
+ },
70
+ 'gridsome': {
71
+ closed: 'material:folder-app',
72
+ opened: 'material:folder-app-open'
73
+ },
74
+ 'astro': {
75
+ closed: 'material:folder-astro',
76
+ opened: 'material:folder-astro-open'
77
+ },
78
+ 'remix': {
79
+ closed: 'material:folder-app',
80
+ opened: 'material:folder-app-open'
81
+ },
82
+ 'qwik': {
83
+ closed: 'material:folder-app',
84
+ opened: 'material:folder-app-open'
85
+ },
86
+
87
+ // === PROGRAMMING LANGUAGES ===
88
+ 'js': {
89
+ closed: 'material:folder-javascript',
90
+ opened: 'material:folder-javascript-open'
91
+ },
92
+ 'javascript': {
93
+ closed: 'material:folder-javascript',
94
+ opened: 'material:folder-javascript-open'
95
+ },
96
+ 'typescript': {
97
+ closed: 'material:folder-typescript',
98
+ opened: 'material:folder-typescript-open'
99
+ },
100
+ 'ts': {
101
+ closed: 'material:folder-typescript',
102
+ opened: 'material:folder-typescript-open'
103
+ },
104
+ 'python': {
105
+ closed: 'material:folder-python',
106
+ opened: 'material:folder-python-open'
107
+ },
108
+ 'py': {
109
+ closed: 'material:folder-python',
110
+ opened: 'material:folder-python-open'
111
+ },
112
+ 'php': {
113
+ closed: 'material:folder-php',
114
+ opened: 'material:folder-php-open'
115
+ },
116
+ 'node': {
117
+ closed: 'material:folder-node',
118
+ opened: 'material:folder-node-open'
119
+ },
120
+ 'nodejs': {
121
+ closed: 'material:folder-node',
122
+ opened: 'material:folder-node-open'
123
+ },
124
+ 'dart': {
125
+ closed: 'material:folder-dart',
126
+ opened: 'material:folder-dart-open'
127
+ },
128
+ 'flutter': {
129
+ closed: 'material:folder-flutter',
130
+ opened: 'material:folder-flutter-open'
131
+ },
132
+ 'java': {
133
+ closed: 'material:folder-java',
134
+ opened: 'material:folder-java-open'
135
+ },
136
+ 'rust': {
137
+ closed: 'material:folder-rust',
138
+ opened: 'material:folder-rust-open'
139
+ },
140
+ 'go': {
141
+ closed: 'material:folder-app',
142
+ opened: 'material:folder-app-open'
143
+ },
144
+ 'golang': {
145
+ closed: 'material:folder-app',
146
+ opened: 'material:folder-app-open'
147
+ },
148
+ 'scala': {
149
+ closed: 'material:folder-scala',
150
+ opened: 'material:folder-scala-open'
151
+ },
152
+ 'lua': {
153
+ closed: 'material:folder-lua',
154
+ opened: 'material:folder-lua-open'
155
+ },
156
+ 'luau': {
157
+ closed: 'material:folder-luau',
158
+ opened: 'material:folder-luau-open'
159
+ },
160
+
161
+ // === COMMON PROJECT STRUCTURE ===
162
+ 'src': {
163
+ closed: 'material:folder-src',
164
+ opened: 'material:folder-src-open'
165
+ },
166
+ 'source': {
167
+ closed: 'material:folder-src',
168
+ opened: 'material:folder-src-open'
169
+ },
170
+ 'lib': {
171
+ closed: 'material:folder-lib',
172
+ opened: 'material:folder-lib-open'
173
+ },
174
+ 'library': {
175
+ closed: 'material:folder-lib',
176
+ opened: 'material:folder-lib-open'
177
+ },
178
+ 'dist': {
179
+ closed: 'material:folder-dist',
180
+ opened: 'material:folder-dist-open'
181
+ },
182
+ 'build': {
183
+ closed: 'material:folder-dist',
184
+ opened: 'material:folder-dist-open'
185
+ },
186
+ 'public': {
187
+ closed: 'material:folder-public',
188
+ opened: 'material:folder-public-open'
189
+ },
190
+ 'static': {
191
+ closed: 'material:folder-public',
192
+ opened: 'material:folder-public-open'
193
+ },
194
+ 'assets': {
195
+ closed: 'material:folder-base',
196
+ opened: 'material:folder-base-open'
197
+ },
198
+ 'private': {
199
+ closed: 'material:folder-admin',
200
+ opened: 'material:folder-admin-open'
201
+ },
202
+
203
+ // === TESTING ===
204
+ 'test': {
205
+ closed: 'material:folder-test',
206
+ opened: 'material:folder-test-open'
207
+ },
208
+ 'tests': {
209
+ closed: 'material:folder-test',
210
+ opened: 'material:folder-test-open'
211
+ },
212
+ '__tests__': {
213
+ closed: 'material:folder-test',
214
+ opened: 'material:folder-test-open'
215
+ },
216
+ 'spec': {
217
+ closed: 'material:folder-test',
218
+ opened: 'material:folder-test-open'
219
+ },
220
+ 'specs': {
221
+ closed: 'material:folder-test',
222
+ opened: 'material:folder-test-open'
223
+ },
224
+ 'e2e': {
225
+ closed: 'material:folder-test',
226
+ opened: 'material:folder-test-open'
227
+ },
228
+ 'cypress': {
229
+ closed: 'material:folder-cypress',
230
+ opened: 'material:folder-cypress-open'
231
+ },
232
+ 'coverage': {
233
+ closed: 'material:folder-coverage',
234
+ opened: 'material:folder-coverage-open'
235
+ },
236
+
237
+ // === STYLING ===
238
+ 'css': {
239
+ closed: 'material:folder-css',
240
+ opened: 'material:folder-css-open'
241
+ },
242
+ 'styles': {
243
+ closed: 'material:folder-css',
244
+ opened: 'material:folder-css-open'
245
+ },
246
+ 'style': {
247
+ closed: 'material:folder-css',
248
+ opened: 'material:folder-css-open'
249
+ },
250
+ 'sass': {
251
+ closed: 'material:folder-sass',
252
+ opened: 'material:folder-sass-open'
253
+ },
254
+ 'scss': {
255
+ closed: 'material:folder-sass',
256
+ opened: 'material:folder-sass-open'
257
+ },
258
+ 'less': {
259
+ closed: 'material:folder-less',
260
+ opened: 'material:folder-less-open'
261
+ },
262
+
263
+ // === CONFIGURATION ===
264
+ 'config': {
265
+ closed: 'material:folder-config',
266
+ opened: 'material:folder-config-open'
267
+ },
268
+ 'configuration': {
269
+ closed: 'material:folder-config',
270
+ opened: 'material:folder-config-open'
271
+ },
272
+ 'settings': {
273
+ closed: 'material:folder-config',
274
+ opened: 'material:folder-config-open'
275
+ },
276
+ '.vscode': {
277
+ closed: 'material:folder-vscode',
278
+ opened: 'material:folder-vscode-open'
279
+ },
280
+
281
+ // === DOCUMENTATION ===
282
+ 'docs': {
283
+ closed: 'material:folder-docs',
284
+ opened: 'material:folder-docs-open'
285
+ },
286
+ 'doc': {
287
+ closed: 'material:folder-docs',
288
+ opened: 'material:folder-docs-open'
289
+ },
290
+ 'documentation': {
291
+ closed: 'material:folder-docs',
292
+ opened: 'material:folder-docs-open'
293
+ },
294
+
295
+ // === MEDIA ===
296
+ 'images': {
297
+ closed: 'material:folder-images',
298
+ opened: 'material:folder-images-open'
299
+ },
300
+ 'img': {
301
+ closed: 'material:folder-images',
302
+ opened: 'material:folder-images-open'
303
+ },
304
+ 'pictures': {
305
+ closed: 'material:folder-images',
306
+ opened: 'material:folder-images-open'
307
+ },
308
+ 'pics': {
309
+ closed: 'material:folder-images',
310
+ opened: 'material:folder-images-open'
311
+ },
312
+ 'fonts': {
313
+ closed: 'material:folder-font',
314
+ opened: 'material:folder-font-open'
315
+ },
316
+ 'audio': {
317
+ closed: 'material:folder-audio',
318
+ opened: 'material:folder-audio-open'
319
+ },
320
+ 'video': {
321
+ closed: 'material:folder-video',
322
+ opened: 'material:folder-video-open'
323
+ },
324
+ 'videos': {
325
+ closed: 'material:folder-video',
326
+ opened: 'material:folder-video-open'
327
+ },
328
+ 'favicon': {
329
+ closed: 'material:folder-favicon',
330
+ opened: 'material:folder-favicon-open'
331
+ },
332
+ 'svg': {
333
+ closed: 'material:folder-svg',
334
+ opened: 'material:folder-svg-open'
335
+ },
336
+ 'icons': {
337
+ closed: 'material:folder-images',
338
+ opened: 'material:folder-images-open'
339
+ },
340
+
341
+ // === ARCHITECTURE PATTERNS ===
342
+ 'components': {
343
+ closed: 'material:folder-components',
344
+ opened: 'material:folder-components-open'
345
+ },
346
+ 'component': {
347
+ closed: 'material:folder-components',
348
+ opened: 'material:folder-components-open'
349
+ },
350
+ 'controllers': {
351
+ closed: 'material:folder-controller',
352
+ opened: 'material:folder-controller-open'
353
+ },
354
+ 'controller': {
355
+ closed: 'material:folder-controller',
356
+ opened: 'material:folder-controller-open'
357
+ },
358
+ 'models': {
359
+ closed: 'material:folder-base',
360
+ opened: 'material:folder-base-open'
361
+ },
362
+ 'model': {
363
+ closed: 'material:folder-base',
364
+ opened: 'material:folder-base-open'
365
+ },
366
+ 'views': {
367
+ closed: 'material:folder-views',
368
+ opened: 'material:folder-views-open'
369
+ },
370
+ 'view': {
371
+ closed: 'material:folder-views',
372
+ opened: 'material:folder-views-open'
373
+ },
374
+ 'services': {
375
+ closed: 'material:folder-base',
376
+ opened: 'material:folder-base-open'
377
+ },
378
+ 'service': {
379
+ closed: 'material:folder-base',
380
+ opened: 'material:folder-base-open'
381
+ },
382
+ 'middleware': {
383
+ closed: 'material:folder-middleware',
384
+ opened: 'material:folder-middleware-open'
385
+ },
386
+ 'routes': {
387
+ closed: 'material:folder-routes',
388
+ opened: 'material:folder-routes-open'
389
+ },
390
+ 'route': {
391
+ closed: 'material:folder-routes',
392
+ opened: 'material:folder-routes-open'
393
+ },
394
+ 'api': {
395
+ closed: 'material:folder-api',
396
+ opened: 'material:folder-api-open'
397
+ },
398
+ 'apis': {
399
+ closed: 'material:folder-api',
400
+ opened: 'material:folder-api-open'
401
+ },
402
+
403
+ // === TOOLS & BUILD SYSTEMS ===
404
+ 'tools': {
405
+ closed: 'material:folder-tools',
406
+ opened: 'material:folder-tools-open'
407
+ },
408
+ 'scripts': {
409
+ closed: 'material:folder-scripts',
410
+ opened: 'material:folder-scripts-open'
411
+ },
412
+ 'script': {
413
+ closed: 'material:folder-scripts',
414
+ opened: 'material:folder-scripts-open'
415
+ },
416
+ 'webpack': {
417
+ closed: 'material:folder-webpack',
418
+ opened: 'material:folder-webpack-open'
419
+ },
420
+ 'gulp': {
421
+ closed: 'material:folder-gulp',
422
+ opened: 'material:folder-gulp-open'
423
+ },
424
+ 'grunt': {
425
+ closed: 'material:folder-tools',
426
+ opened: 'material:folder-tools-open'
427
+ },
428
+ 'gradle': {
429
+ closed: 'material:folder-gradle',
430
+ opened: 'material:folder-gradle-open'
431
+ },
432
+ 'maven': {
433
+ closed: 'material:folder-tools',
434
+ opened: 'material:folder-tools-open'
435
+ },
436
+
437
+ // === PACKAGE MANAGERS ===
438
+ 'node_modules': {
439
+ closed: 'material:folder-node',
440
+ opened: 'material:folder-node-open'
441
+ },
442
+ 'packages': {
443
+ closed: 'material:folder-packages',
444
+ opened: 'material:folder-packages-open'
445
+ },
446
+ 'package': {
447
+ closed: 'material:folder-packages',
448
+ opened: 'material:folder-packages-open'
449
+ },
450
+ 'bower_components': {
451
+ closed: 'material:folder-bower',
452
+ opened: 'material:folder-bower-open'
453
+ },
454
+ 'yarn': {
455
+ closed: 'material:folder-yarn',
456
+ opened: 'material:folder-yarn-open'
457
+ },
458
+ 'composer': {
459
+ closed: 'material:folder-php',
460
+ opened: 'material:folder-php-open'
461
+ },
462
+ 'vendor': {
463
+ closed: 'material:folder-lib',
464
+ opened: 'material:folder-lib-open'
465
+ },
466
+ 'nuget': {
467
+ closed: 'material:folder-packages',
468
+ opened: 'material:folder-packages-open'
469
+ },
470
+ 'paket': {
471
+ closed: 'material:folder-packages',
472
+ opened: 'material:folder-packages-open'
473
+ },
474
+
475
+ // === VERSION CONTROL ===
476
+ '.git': {
477
+ closed: 'material:folder-git',
478
+ opened: 'material:folder-git-open'
479
+ },
480
+ '.github': {
481
+ closed: 'material:folder-github',
482
+ opened: 'material:folder-github-open'
483
+ },
484
+ '.gitlab': {
485
+ closed: 'material:folder-gitlab',
486
+ opened: 'material:folder-gitlab-open'
487
+ },
488
+
489
+ // === CONTAINERIZATION & DEPLOYMENT ===
490
+ 'docker': {
491
+ closed: 'material:folder-docker',
492
+ opened: 'material:folder-docker-open'
493
+ },
494
+ '.docker': {
495
+ closed: 'material:folder-docker',
496
+ opened: 'material:folder-docker-open'
497
+ },
498
+ 'kubernetes': {
499
+ closed: 'material:folder-kubernetes',
500
+ opened: 'material:folder-kubernetes-open'
501
+ },
502
+ 'k8s': {
503
+ closed: 'material:folder-kubernetes',
504
+ opened: 'material:folder-kubernetes-open'
505
+ },
506
+ 'vagrant': {
507
+ closed: 'material:folder-admin',
508
+ opened: 'material:folder-admin-open'
509
+ },
510
+ '.devcontainer': {
511
+ closed: 'material:folder-admin',
512
+ opened: 'material:folder-admin-open'
513
+ },
514
+
515
+ // === CI/CD ===
516
+ '.circleci': {
517
+ closed: 'material:folder-admin',
518
+ opened: 'material:folder-admin-open'
519
+ },
520
+ '.travis': {
521
+ closed: 'material:folder-admin',
522
+ opened: 'material:folder-admin-open'
523
+ },
524
+ '.buildkite': {
525
+ closed: 'material:folder-admin',
526
+ opened: 'material:folder-admin-open'
527
+ },
528
+ 'workflows': {
529
+ closed: 'material:folder-admin',
530
+ opened: 'material:folder-admin-open'
531
+ },
532
+
533
+ // === CLOUD PLATFORMS ===
534
+ 'aws': {
535
+ closed: 'material:folder-admin',
536
+ opened: 'material:folder-admin-open'
537
+ },
538
+ 'azure': {
539
+ closed: 'material:folder-admin',
540
+ opened: 'material:folder-admin-open'
541
+ },
542
+ 'gcp': {
543
+ closed: 'material:folder-admin',
544
+ opened: 'material:folder-admin-open'
545
+ },
546
+ 'google': {
547
+ closed: 'material:folder-admin',
548
+ opened: 'material:folder-admin-open'
549
+ },
550
+ '.elasticbeanstalk': {
551
+ closed: 'material:folder-admin',
552
+ opened: 'material:folder-admin-open'
553
+ },
554
+
555
+ // === DATABASES ===
556
+ 'db': {
557
+ closed: 'material:folder-database',
558
+ opened: 'material:folder-database-open'
559
+ },
560
+ 'database': {
561
+ closed: 'material:folder-database',
562
+ opened: 'material:folder-database-open'
563
+ },
564
+ 'mysql': {
565
+ closed: 'material:folder-admin',
566
+ opened: 'material:folder-admin-open'
567
+ },
568
+ 'mongodb': {
569
+ closed: 'material:folder-admin',
570
+ opened: 'material:folder-admin-open'
571
+ },
572
+ 'mongo': {
573
+ closed: 'material:folder-admin',
574
+ opened: 'material:folder-admin-open'
575
+ },
576
+ 'redis': {
577
+ closed: 'material:folder-admin',
578
+ opened: 'material:folder-admin-open'
579
+ },
580
+ 'mariadb': {
581
+ closed: 'material:folder-admin',
582
+ opened: 'material:folder-admin-open'
583
+ },
584
+ 'arangodb': {
585
+ closed: 'material:folder-admin',
586
+ opened: 'material:folder-admin-open'
587
+ },
588
+ 'ravendb': {
589
+ closed: 'material:folder-admin',
590
+ opened: 'material:folder-admin-open'
591
+ },
592
+ 'memcached': {
593
+ closed: 'material:folder-admin',
594
+ opened: 'material:folder-admin-open'
595
+ },
596
+ 'prisma': {
597
+ closed: 'material:folder-prisma',
598
+ opened: 'material:folder-prisma-open'
599
+ },
600
+ 'drizzle': {
601
+ closed: 'material:folder-drizzle',
602
+ opened: 'material:folder-drizzle-open'
603
+ },
604
+
605
+ // === STATE MANAGEMENT ===
606
+ 'redux': {
607
+ closed: 'material:folder-redux-reducer',
608
+ opened: 'material:folder-redux-reducer-open'
609
+ },
610
+ 'store': {
611
+ closed: 'material:folder-store',
612
+ opened: 'material:folder-store-open'
613
+ },
614
+ 'stores': {
615
+ closed: 'material:folder-store',
616
+ opened: 'material:folder-store-open'
617
+ },
618
+ 'bloc': {
619
+ closed: 'material:folder-bloc',
620
+ opened: 'material:folder-bloc-open'
621
+ },
622
+ 'cubit': {
623
+ closed: 'material:folder-bloc',
624
+ opened: 'material:folder-bloc-open'
625
+ },
626
+ 'ngrx': {
627
+ closed: 'material:folder-ngrx-store',
628
+ opened: 'material:folder-ngrx-store-open'
629
+ },
630
+ 'vuex': {
631
+ closed: 'material:folder-vuex-store',
632
+ opened: 'material:folder-vuex-store-open'
633
+ },
634
+
635
+ // === OTHER COMMON FOLDERS ===
636
+ 'temp': {
637
+ closed: 'material:folder-temp',
638
+ opened: 'material:folder-temp-open'
639
+ },
640
+ 'tmp': {
641
+ closed: 'material:folder-temp',
642
+ opened: 'material:folder-temp-open'
643
+ },
644
+ 'templates': {
645
+ closed: 'material:folder-template',
646
+ opened: 'material:folder-template-open'
647
+ },
648
+ 'template': {
649
+ closed: 'material:folder-template',
650
+ opened: 'material:folder-template-open'
651
+ },
652
+ 'themes': {
653
+ closed: 'material:folder-theme',
654
+ opened: 'material:folder-theme-open'
655
+ },
656
+ 'theme': {
657
+ closed: 'material:folder-theme',
658
+ opened: 'material:folder-theme-open'
659
+ },
660
+ 'shared': {
661
+ closed: 'material:folder-shared',
662
+ opened: 'material:folder-shared-open'
663
+ },
664
+ 'common': {
665
+ closed: 'material:folder-shared',
666
+ opened: 'material:folder-shared-open'
667
+ },
668
+ 'utils': {
669
+ closed: 'material:folder-utils',
670
+ opened: 'material:folder-utils-open'
671
+ },
672
+ 'utilities': {
673
+ closed: 'material:folder-utils',
674
+ opened: 'material:folder-utils-open'
675
+ },
676
+ 'helpers': {
677
+ closed: 'material:folder-helper',
678
+ opened: 'material:folder-helper-open'
679
+ },
680
+ 'helper': {
681
+ closed: 'material:folder-helper',
682
+ opened: 'material:folder-helper-open'
683
+ },
684
+ 'modules': {
685
+ closed: 'material:folder-admin',
686
+ opened: 'material:folder-admin-open'
687
+ },
688
+ 'module': {
689
+ closed: 'material:folder-admin',
690
+ opened: 'material:folder-admin-open'
691
+ },
692
+ 'plugins': {
693
+ closed: 'material:folder-admin',
694
+ opened: 'material:folder-admin-open'
695
+ },
696
+ 'plugin': {
697
+ closed: 'material:folder-admin',
698
+ opened: 'material:folder-admin-open'
699
+ },
700
+ 'extensions': {
701
+ closed: 'material:folder-admin',
702
+ opened: 'material:folder-admin-open'
703
+ },
704
+ 'logs': {
705
+ closed: 'material:folder-admin',
706
+ opened: 'material:folder-admin-open'
707
+ },
708
+ 'log': {
709
+ closed: 'material:folder-admin',
710
+ opened: 'material:folder-admin-open'
711
+ },
712
+ 'locale': {
713
+ closed: 'material:folder-admin',
714
+ opened: 'material:folder-admin-open'
715
+ },
716
+ 'locales': {
717
+ closed: 'material:folder-admin',
718
+ opened: 'material:folder-admin-open'
719
+ },
720
+ 'i18n': {
721
+ closed: 'material:folder-admin',
722
+ opened: 'material:folder-admin-open'
723
+ },
724
+ 'includes': {
725
+ closed: 'material:folder-admin',
726
+ opened: 'material:folder-admin-open'
727
+ },
728
+ 'include': {
729
+ closed: 'material:folder-admin',
730
+ opened: 'material:folder-admin-open'
731
+ },
732
+ 'interfaces': {
733
+ closed: 'material:folder-admin',
734
+ opened: 'material:folder-admin-open'
735
+ },
736
+ 'interface': {
737
+ closed: 'material:folder-admin',
738
+ opened: 'material:folder-admin-open'
739
+ },
740
+ 'typings': {
741
+ closed: 'material:folder-admin',
742
+ opened: 'material:folder-admin-open'
743
+ },
744
+ 'types': {
745
+ closed: 'material:folder-admin',
746
+ opened: 'material:folder-admin-open'
747
+ },
748
+ '@types': {
749
+ closed: 'material:folder-admin',
750
+ opened: 'material:folder-admin-open'
751
+ },
752
+ 'json': {
753
+ closed: 'material:folder-admin',
754
+ opened: 'material:folder-admin-open'
755
+ },
756
+ 'binary': {
757
+ closed: 'material:folder-admin',
758
+ opened: 'material:folder-admin-open'
759
+ },
760
+ 'bin': {
761
+ closed: 'material:folder-admin',
762
+ opened: 'material:folder-admin-open'
763
+ },
764
+ 'certificates': {
765
+ closed: 'material:folder-admin',
766
+ opened: 'material:folder-admin-open'
767
+ },
768
+ 'cert': {
769
+ closed: 'material:folder-admin',
770
+ opened: 'material:folder-admin-open'
771
+ },
772
+ 'certs': {
773
+ closed: 'material:folder-admin',
774
+ opened: 'material:folder-admin-open'
775
+ },
776
+ 'hooks': {
777
+ closed: 'material:folder-admin',
778
+ opened: 'material:folder-admin-open'
779
+ },
780
+ 'hook': {
781
+ closed: 'material:folder-admin',
782
+ opened: 'material:folder-admin-open'
783
+ },
784
+ '.husky': {
785
+ closed: 'material:folder-admin',
786
+ opened: 'material:folder-admin-open'
787
+ },
788
+ 'server': {
789
+ closed: 'material:folder-admin',
790
+ opened: 'material:folder-admin-open'
791
+ },
792
+ 'servers': {
793
+ closed: 'material:folder-admin',
794
+ opened: 'material:folder-admin-open'
795
+ },
796
+ 'client': {
797
+ closed: 'material:folder-admin',
798
+ opened: 'material:folder-admin-open'
799
+ },
800
+ 'clients': {
801
+ closed: 'material:folder-admin',
802
+ opened: 'material:folder-admin-open'
803
+ },
804
+ 'www': {
805
+ closed: 'material:folder-admin',
806
+ opened: 'material:folder-admin-open'
807
+ },
808
+ 'web': {
809
+ closed: 'material:folder-admin',
810
+ opened: 'material:folder-admin-open'
811
+ },
812
+ 'cli': {
813
+ closed: 'material:folder-admin',
814
+ opened: 'material:folder-admin-open'
815
+ },
816
+ 'app': {
817
+ closed: 'material:folder-admin',
818
+ opened: 'material:folder-admin-open'
819
+ },
820
+ 'apps': {
821
+ closed: 'material:folder-admin',
822
+ opened: 'material:folder-admin-open'
823
+ },
824
+ 'mocks': {
825
+ closed: 'material:folder-admin',
826
+ opened: 'material:folder-admin-open'
827
+ },
828
+ 'mock': {
829
+ closed: 'material:folder-admin',
830
+ opened: 'material:folder-admin-open'
831
+ },
832
+ 'notebooks': {
833
+ closed: 'material:folder-admin',
834
+ opened: 'material:folder-admin-open'
835
+ },
836
+ 'stories': {
837
+ closed: 'material:folder-admin',
838
+ opened: 'material:folder-admin-open'
839
+ },
840
+ 'story': {
841
+ closed: 'material:folder-admin',
842
+ opened: 'material:folder-admin-open'
843
+ },
844
+ 'storybook': {
845
+ closed: 'material:folder-storybook',
846
+ opened: 'material:folder-storybook-open'
847
+ },
848
+
849
+ // === SPECIFIC TECHNOLOGY FOLDERS ===
850
+ 'flow': {
851
+ closed: 'material:folder-admin',
852
+ opened: 'material:folder-admin-open'
853
+ },
854
+ 'mjml': {
855
+ closed: 'material:folder-admin',
856
+ opened: 'material:folder-admin-open'
857
+ },
858
+ 'nginx': {
859
+ closed: 'material:folder-admin',
860
+ opened: 'material:folder-admin-open'
861
+ },
862
+ 'platformio': {
863
+ closed: 'material:folder-admin',
864
+ opened: 'material:folder-admin-open'
865
+ },
866
+ 'snaplet': {
867
+ closed: 'material:folder-admin',
868
+ opened: 'material:folder-admin-open'
869
+ },
870
+ 'spin': {
871
+ closed: 'material:folder-admin',
872
+ opened: 'material:folder-admin-open'
873
+ },
874
+ 'sso': {
875
+ closed: 'material:folder-admin',
876
+ opened: 'material:folder-admin-open'
877
+ },
878
+ 'trunk': {
879
+ closed: 'material:folder-admin',
880
+ opened: 'material:folder-admin-open'
881
+ },
882
+ 'nix': {
883
+ closed: 'material:folder-admin',
884
+ opened: 'material:folder-admin-open'
885
+ },
886
+ 'mojo': {
887
+ closed: 'material:folder-admin',
888
+ opened: 'material:folder-admin-open'
889
+ },
890
+ 'minikube': {
891
+ closed: 'material:folder-admin',
892
+ opened: 'material:folder-admin-open'
893
+ },
894
+ 'macos': {
895
+ closed: 'material:folder-admin',
896
+ opened: 'material:folder-admin-open'
897
+ },
898
+ 'windows': {
899
+ closed: 'material:folder-admin',
900
+ opened: 'material:folder-admin-open'
901
+ },
902
+ 'linux': {
903
+ closed: 'material:folder-admin',
904
+ opened: 'material:folder-admin-open'
905
+ },
906
+ 'debian': {
907
+ closed: 'material:folder-admin',
908
+ opened: 'material:folder-admin-open'
909
+ },
910
+ 'vs': {
911
+ closed: 'material:folder-admin',
912
+ opened: 'material:folder-admin-open'
913
+ },
914
+ 'idea': {
915
+ closed: 'material:folder-admin',
916
+ opened: 'material:folder-admin-open'
917
+ },
918
+ '.idea': {
919
+ closed: 'material:folder-admin',
920
+ opened: 'material:folder-admin-open'
921
+ },
922
+ 'chef': {
923
+ closed: 'material:folder-admin',
924
+ opened: 'material:folder-admin-open'
925
+ },
926
+ 'cake': {
927
+ closed: 'material:folder-admin',
928
+ opened: 'material:folder-admin-open'
929
+ },
930
+ 'blueprint': {
931
+ closed: 'material:folder-admin',
932
+ opened: 'material:folder-admin-open'
933
+ },
934
+ 'bot': {
935
+ closed: 'material:folder-admin',
936
+ opened: 'material:folder-admin-open'
937
+ },
938
+ 'bots': {
939
+ closed: 'material:folder-admin',
940
+ opened: 'material:folder-admin-open'
941
+ },
942
+ 'notifications': {
943
+ closed: 'material:folder-admin',
944
+ opened: 'material:folder-admin-open'
945
+ },
946
+ 'notification': {
947
+ closed: 'material:folder-admin',
948
+ opened: 'material:folder-admin-open'
949
+ },
950
+ 'dapr': {
951
+ closed: 'material:folder-admin',
952
+ opened: 'material:folder-admin-open'
953
+ },
954
+ 'datadog': {
955
+ closed: 'material:folder-admin',
956
+ opened: 'material:folder-admin-open'
957
+ },
958
+ 'dependabot': {
959
+ closed: 'material:folder-admin',
960
+ opened: 'material:folder-admin-open'
961
+ },
962
+ '.dependabot': {
963
+ closed: 'material:folder-admin',
964
+ opened: 'material:folder-admin-open'
965
+ },
966
+ 'cmake': {
967
+ closed: 'material:folder-admin',
968
+ opened: 'material:folder-admin-open'
969
+ },
970
+ 'haxelib': {
971
+ closed: 'material:folder-admin',
972
+ opened: 'material:folder-admin-open'
973
+ },
974
+ '.changesets': {
975
+ closed: 'material:folder-changesets',
976
+ opened: 'material:folder-changesets-open'
977
+ },
978
+
979
+ // === ADDITIONAL MODERN FRAMEWORKS ===
980
+ 'turborepo': {
981
+ closed: 'material:folder-turborepo',
982
+ opened: 'material:folder-turborepo-open'
983
+ },
984
+ 'turbo': {
985
+ closed: 'material:folder-turborepo',
986
+ opened: 'material:folder-turborepo-open'
987
+ },
988
+ 'nx': {
989
+ closed: 'material:folder-app',
990
+ opened: 'material:folder-app-open'
991
+ },
992
+ 'graphql': {
993
+ closed: 'material:folder-graphql',
994
+ opened: 'material:folder-graphql-open'
995
+ },
996
+ 'gql': {
997
+ closed: 'material:folder-graphql',
998
+ opened: 'material:folder-graphql-open'
999
+ },
1000
+ 'firebase': {
1001
+ closed: 'material:folder-firebase',
1002
+ opened: 'material:folder-firebase-open'
1003
+ },
1004
+ 'supabase': {
1005
+ closed: 'material:folder-supabase',
1006
+ opened: 'material:folder-supabase-open'
1007
+ },
1008
+ 'vercel': {
1009
+ closed: 'material:folder-vercel',
1010
+ opened: 'material:folder-vercel-open'
1011
+ },
1012
+ 'netlify': {
1013
+ closed: 'material:folder-netlify',
1014
+ opened: 'material:folder-netlify-open'
1015
+ }
1016
+ };
1017
+
1018
+ /**
1019
+ * Get the appropriate folder icon based on folder name and open state
1020
+ */
1021
+ export function getFolderIcon(folderName: string, isOpen: boolean): IconName {
1022
+ const folderMapping = folderIcons[folderName.toLowerCase()];
1023
+
1024
+ if (folderMapping) {
1025
+ return isOpen ? folderMapping.opened : folderMapping.closed;
1026
+ }
1027
+
1028
+ // Fallback to default folder icons
1029
+ return isOpen ? 'material:folder-base-open' : 'material:folder-base';
1030
+ }