@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.
- package/.env.example +6 -0
- package/.github/workflows/release.yml +60 -0
- package/.github/workflows/test.yml +40 -0
- package/CONTRIBUTING.md +499 -0
- package/LICENSE +21 -0
- package/README.md +209 -0
- package/backend/index.ts +156 -0
- package/backend/lib/chat/helpers.ts +42 -0
- package/backend/lib/chat/index.ts +2 -0
- package/backend/lib/chat/stream-manager.ts +1126 -0
- package/backend/lib/database/README.md +77 -0
- package/backend/lib/database/index.ts +119 -0
- package/backend/lib/database/migrations/001_create_projects_table.ts +31 -0
- package/backend/lib/database/migrations/002_create_chat_sessions_table.ts +33 -0
- package/backend/lib/database/migrations/003_create_messages_table.ts +32 -0
- package/backend/lib/database/migrations/004_create_prompt_templates_table.ts +34 -0
- package/backend/lib/database/migrations/005_create_settings_table.ts +24 -0
- package/backend/lib/database/migrations/006_add_user_to_messages.ts +58 -0
- package/backend/lib/database/migrations/007_create_stream_states_table.ts +41 -0
- package/backend/lib/database/migrations/008_create_message_snapshots_table.ts +62 -0
- package/backend/lib/database/migrations/009_add_delta_snapshot_fields.ts +41 -0
- package/backend/lib/database/migrations/010_add_soft_delete_and_branch_support.ts +70 -0
- package/backend/lib/database/migrations/011_git_like_commit_graph.ts +156 -0
- package/backend/lib/database/migrations/012_add_file_change_statistics.ts +41 -0
- package/backend/lib/database/migrations/013_checkpoint_tree_state.ts +118 -0
- package/backend/lib/database/migrations/014_add_engine_to_sessions.ts +18 -0
- package/backend/lib/database/migrations/015_add_model_to_sessions.ts +18 -0
- package/backend/lib/database/migrations/016_create_user_projects_table.ts +34 -0
- package/backend/lib/database/migrations/017_add_current_session_to_user_projects.ts +32 -0
- package/backend/lib/database/migrations/018_create_claude_accounts_table.ts +24 -0
- package/backend/lib/database/migrations/019_add_claude_account_to_sessions.ts +18 -0
- package/backend/lib/database/migrations/020_add_snapshot_tree_hash.ts +32 -0
- package/backend/lib/database/migrations/021_drop_prompt_templates_table.ts +33 -0
- package/backend/lib/database/migrations/index.ts +154 -0
- package/backend/lib/database/queries/checkpoint-queries.ts +87 -0
- package/backend/lib/database/queries/engine-queries.ts +75 -0
- package/backend/lib/database/queries/index.ts +9 -0
- package/backend/lib/database/queries/message-queries.ts +472 -0
- package/backend/lib/database/queries/project-queries.ts +117 -0
- package/backend/lib/database/queries/session-queries.ts +271 -0
- package/backend/lib/database/queries/settings-queries.ts +34 -0
- package/backend/lib/database/queries/snapshot-queries.ts +326 -0
- package/backend/lib/database/queries/utils-queries.ts +59 -0
- package/backend/lib/database/seeders/index.ts +13 -0
- package/backend/lib/database/seeders/settings_seeder.ts +84 -0
- package/backend/lib/database/utils/connection.ts +174 -0
- package/backend/lib/database/utils/index.ts +4 -0
- package/backend/lib/database/utils/migration-runner.ts +118 -0
- package/backend/lib/database/utils/seeder-runner.ts +121 -0
- package/backend/lib/engine/adapters/claude/environment.ts +164 -0
- package/backend/lib/engine/adapters/claude/error-handler.ts +60 -0
- package/backend/lib/engine/adapters/claude/index.ts +1 -0
- package/backend/lib/engine/adapters/claude/path-utils.ts +38 -0
- package/backend/lib/engine/adapters/claude/stream.ts +177 -0
- package/backend/lib/engine/adapters/opencode/index.ts +2 -0
- package/backend/lib/engine/adapters/opencode/message-converter.ts +862 -0
- package/backend/lib/engine/adapters/opencode/server.ts +104 -0
- package/backend/lib/engine/adapters/opencode/stream.ts +755 -0
- package/backend/lib/engine/index.ts +196 -0
- package/backend/lib/engine/types.ts +58 -0
- package/backend/lib/files/file-operations.ts +478 -0
- package/backend/lib/files/file-reading.ts +308 -0
- package/backend/lib/files/file-watcher.ts +383 -0
- package/backend/lib/files/path-browsing.ts +382 -0
- package/backend/lib/git/git-executor.ts +88 -0
- package/backend/lib/git/git-parser.ts +411 -0
- package/backend/lib/git/git-service.ts +505 -0
- package/backend/lib/mcp/README.md +1144 -0
- package/backend/lib/mcp/config.ts +316 -0
- package/backend/lib/mcp/index.ts +35 -0
- package/backend/lib/mcp/project-context.ts +236 -0
- package/backend/lib/mcp/servers/browser-automation/actions.ts +156 -0
- package/backend/lib/mcp/servers/browser-automation/browser.ts +419 -0
- package/backend/lib/mcp/servers/browser-automation/index.ts +791 -0
- package/backend/lib/mcp/servers/browser-automation/inspection.ts +501 -0
- package/backend/lib/mcp/servers/helper.ts +143 -0
- package/backend/lib/mcp/servers/index.ts +45 -0
- package/backend/lib/mcp/servers/weather/get-temperature.ts +56 -0
- package/backend/lib/mcp/servers/weather/index.ts +31 -0
- package/backend/lib/mcp/stdio-server.ts +103 -0
- package/backend/lib/mcp/types.ts +65 -0
- package/backend/lib/preview/browser/browser-audio-capture.ts +86 -0
- package/backend/lib/preview/browser/browser-console-manager.ts +263 -0
- package/backend/lib/preview/browser/browser-dialog-handler.ts +222 -0
- package/backend/lib/preview/browser/browser-interaction-handler.ts +421 -0
- package/backend/lib/preview/browser/browser-mcp-control.ts +415 -0
- package/backend/lib/preview/browser/browser-native-ui-handler.ts +512 -0
- package/backend/lib/preview/browser/browser-navigation-tracker.ts +104 -0
- package/backend/lib/preview/browser/browser-pool.ts +357 -0
- package/backend/lib/preview/browser/browser-preview-service.ts +882 -0
- package/backend/lib/preview/browser/browser-tab-manager.ts +935 -0
- package/backend/lib/preview/browser/browser-video-capture.ts +695 -0
- package/backend/lib/preview/browser/scripts/audio-stream.ts +292 -0
- package/backend/lib/preview/browser/scripts/cursor-tracking.ts +85 -0
- package/backend/lib/preview/browser/scripts/video-stream.ts +438 -0
- package/backend/lib/preview/browser/types.ts +359 -0
- package/backend/lib/preview/index.ts +24 -0
- package/backend/lib/project/index.ts +2 -0
- package/backend/lib/project/status-manager.ts +182 -0
- package/backend/lib/shared/index.ts +2 -0
- package/backend/lib/shared/port-utils.ts +25 -0
- package/backend/lib/shared/process-manager.ts +281 -0
- package/backend/lib/snapshot/blob-store.ts +227 -0
- package/backend/lib/snapshot/gitignore.ts +307 -0
- package/backend/lib/snapshot/helpers.ts +397 -0
- package/backend/lib/snapshot/snapshot-service.ts +483 -0
- package/backend/lib/terminal/helpers.ts +14 -0
- package/backend/lib/terminal/index.ts +8 -0
- package/backend/lib/terminal/pty-manager.ts +4 -0
- package/backend/lib/terminal/pty-session-manager.ts +387 -0
- package/backend/lib/terminal/shell-utils.ts +313 -0
- package/backend/lib/terminal/stream-manager.ts +293 -0
- package/backend/lib/tunnel/global-tunnel-manager.ts +243 -0
- package/backend/lib/tunnel/project-tunnel-manager.ts +311 -0
- package/backend/lib/user/helpers.ts +87 -0
- package/backend/lib/utils/ws.ts +944 -0
- package/backend/lib/vite-dev.ts +353 -0
- package/backend/middleware/cors.ts +15 -0
- package/backend/middleware/error-handler.ts +49 -0
- package/backend/middleware/logger.ts +9 -0
- package/backend/types/api.ts +24 -0
- package/backend/ws/README.md +1505 -0
- package/backend/ws/chat/background.ts +198 -0
- package/backend/ws/chat/index.ts +21 -0
- package/backend/ws/chat/stream.ts +707 -0
- package/backend/ws/engine/claude/accounts.ts +401 -0
- package/backend/ws/engine/claude/index.ts +13 -0
- package/backend/ws/engine/claude/status.ts +43 -0
- package/backend/ws/engine/index.ts +14 -0
- package/backend/ws/engine/opencode/index.ts +11 -0
- package/backend/ws/engine/opencode/status.ts +30 -0
- package/backend/ws/engine/utils.ts +36 -0
- package/backend/ws/files/index.ts +30 -0
- package/backend/ws/files/read.ts +189 -0
- package/backend/ws/files/search.ts +453 -0
- package/backend/ws/files/watch.ts +124 -0
- package/backend/ws/files/write.ts +143 -0
- package/backend/ws/git/branch.ts +106 -0
- package/backend/ws/git/commit.ts +39 -0
- package/backend/ws/git/conflict.ts +68 -0
- package/backend/ws/git/diff.ts +69 -0
- package/backend/ws/git/index.ts +24 -0
- package/backend/ws/git/log.ts +41 -0
- package/backend/ws/git/remote.ts +214 -0
- package/backend/ws/git/staging.ts +84 -0
- package/backend/ws/git/status.ts +90 -0
- package/backend/ws/index.ts +69 -0
- package/backend/ws/mcp/index.ts +61 -0
- package/backend/ws/messages/crud.ts +74 -0
- package/backend/ws/messages/index.ts +14 -0
- package/backend/ws/preview/browser/cleanup.ts +129 -0
- package/backend/ws/preview/browser/console.ts +114 -0
- package/backend/ws/preview/browser/interact.ts +513 -0
- package/backend/ws/preview/browser/mcp.ts +129 -0
- package/backend/ws/preview/browser/native-ui.ts +235 -0
- package/backend/ws/preview/browser/stats.ts +55 -0
- package/backend/ws/preview/browser/tab-info.ts +126 -0
- package/backend/ws/preview/browser/tab.ts +166 -0
- package/backend/ws/preview/browser/webcodecs.ts +293 -0
- package/backend/ws/preview/index.ts +146 -0
- package/backend/ws/projects/crud.ts +113 -0
- package/backend/ws/projects/index.ts +25 -0
- package/backend/ws/projects/presence.ts +46 -0
- package/backend/ws/projects/status.ts +116 -0
- package/backend/ws/sessions/crud.ts +327 -0
- package/backend/ws/sessions/index.ts +33 -0
- package/backend/ws/settings/crud.ts +112 -0
- package/backend/ws/settings/index.ts +14 -0
- package/backend/ws/snapshot/index.ts +17 -0
- package/backend/ws/snapshot/restore.ts +173 -0
- package/backend/ws/snapshot/timeline.ts +141 -0
- package/backend/ws/system/index.ts +14 -0
- package/backend/ws/system/operations.ts +49 -0
- package/backend/ws/terminal/index.ts +40 -0
- package/backend/ws/terminal/persistence.ts +153 -0
- package/backend/ws/terminal/session.ts +382 -0
- package/backend/ws/terminal/stream.ts +79 -0
- package/backend/ws/tunnel/index.ts +14 -0
- package/backend/ws/tunnel/operations.ts +91 -0
- package/backend/ws/types.ts +20 -0
- package/backend/ws/user/crud.ts +156 -0
- package/backend/ws/user/index.ts +14 -0
- package/bin/clopen.ts +307 -0
- package/bun.lock +1352 -0
- package/frontend/App.svelte +34 -0
- package/frontend/app.css +313 -0
- package/frontend/lib/app-environment.ts +10 -0
- package/frontend/lib/components/chat/ChatInterface.svelte +407 -0
- package/frontend/lib/components/chat/formatters/ErrorMessage.svelte +57 -0
- package/frontend/lib/components/chat/formatters/MessageFormatter.svelte +224 -0
- package/frontend/lib/components/chat/formatters/TextMessage.svelte +395 -0
- package/frontend/lib/components/chat/formatters/Tools.svelte +70 -0
- package/frontend/lib/components/chat/formatters/index.ts +3 -0
- package/frontend/lib/components/chat/input/ChatInput.svelte +421 -0
- package/frontend/lib/components/chat/input/components/ChatInputActions.svelte +78 -0
- package/frontend/lib/components/chat/input/components/DragDropOverlay.svelte +30 -0
- package/frontend/lib/components/chat/input/components/EditModeIndicator.svelte +33 -0
- package/frontend/lib/components/chat/input/components/EngineModelPicker.svelte +619 -0
- package/frontend/lib/components/chat/input/components/FileAttachmentPreview.svelte +48 -0
- package/frontend/lib/components/chat/input/components/LoadingIndicator.svelte +31 -0
- package/frontend/lib/components/chat/input/composables/use-animations.svelte.ts +201 -0
- package/frontend/lib/components/chat/input/composables/use-chat-actions.svelte.ts +148 -0
- package/frontend/lib/components/chat/input/composables/use-file-handling.svelte.ts +216 -0
- package/frontend/lib/components/chat/input/composables/use-input-state.svelte.ts +357 -0
- package/frontend/lib/components/chat/input/composables/use-textarea-resize.svelte.ts +57 -0
- package/frontend/lib/components/chat/message/ChatMessage.svelte +478 -0
- package/frontend/lib/components/chat/message/ChatMessages.svelte +541 -0
- package/frontend/lib/components/chat/message/DateSeparator.svelte +86 -0
- package/frontend/lib/components/chat/message/MessageBubble.svelte +86 -0
- package/frontend/lib/components/chat/message/MessageHeader.svelte +157 -0
- package/frontend/lib/components/chat/modal/DebugModal.svelte +59 -0
- package/frontend/lib/components/chat/modal/TokenUsageModal.svelte +124 -0
- package/frontend/lib/components/chat/shared/index.ts +2 -0
- package/frontend/lib/components/chat/shared/utils.ts +116 -0
- package/frontend/lib/components/chat/tools/BashOutputTool.svelte +35 -0
- package/frontend/lib/components/chat/tools/BashTool.svelte +46 -0
- package/frontend/lib/components/chat/tools/CustomMcpTool.svelte +139 -0
- package/frontend/lib/components/chat/tools/EditTool.svelte +48 -0
- package/frontend/lib/components/chat/tools/ExitPlanModeTool.svelte +32 -0
- package/frontend/lib/components/chat/tools/GlobTool.svelte +51 -0
- package/frontend/lib/components/chat/tools/GrepTool.svelte +90 -0
- package/frontend/lib/components/chat/tools/KillShellTool.svelte +26 -0
- package/frontend/lib/components/chat/tools/ListMcpResourcesTool.svelte +31 -0
- package/frontend/lib/components/chat/tools/NotebookEditTool.svelte +38 -0
- package/frontend/lib/components/chat/tools/ReadMcpResourceTool.svelte +34 -0
- package/frontend/lib/components/chat/tools/ReadTool.svelte +41 -0
- package/frontend/lib/components/chat/tools/TaskTool.svelte +64 -0
- package/frontend/lib/components/chat/tools/TodoWriteTool.svelte +75 -0
- package/frontend/lib/components/chat/tools/WebFetchTool.svelte +35 -0
- package/frontend/lib/components/chat/tools/WebSearchTool.svelte +84 -0
- package/frontend/lib/components/chat/tools/WriteTool.svelte +33 -0
- package/frontend/lib/components/chat/tools/components/CodeBlock.svelte +79 -0
- package/frontend/lib/components/chat/tools/components/DiffBlock.svelte +408 -0
- package/frontend/lib/components/chat/tools/components/FileHeader.svelte +45 -0
- package/frontend/lib/components/chat/tools/components/InfoLine.svelte +19 -0
- package/frontend/lib/components/chat/tools/components/StatsBadges.svelte +27 -0
- package/frontend/lib/components/chat/tools/components/TerminalCommand.svelte +54 -0
- package/frontend/lib/components/chat/tools/components/index.ts +7 -0
- package/frontend/lib/components/chat/tools/index.ts +26 -0
- package/frontend/lib/components/chat/widgets/FloatingTodoList.svelte +249 -0
- package/frontend/lib/components/chat/widgets/TokenUsage.svelte +78 -0
- package/frontend/lib/components/checkpoint/TimelineModal.svelte +391 -0
- package/frontend/lib/components/checkpoint/timeline/TimelineEdge.svelte +26 -0
- package/frontend/lib/components/checkpoint/timeline/TimelineGraph.svelte +87 -0
- package/frontend/lib/components/checkpoint/timeline/TimelineNode.svelte +108 -0
- package/frontend/lib/components/checkpoint/timeline/TimelineVersionGroup.svelte +59 -0
- package/frontend/lib/components/checkpoint/timeline/animation.ts +168 -0
- package/frontend/lib/components/checkpoint/timeline/config.ts +44 -0
- package/frontend/lib/components/checkpoint/timeline/graph-builder.ts +304 -0
- package/frontend/lib/components/checkpoint/timeline/types.ts +65 -0
- package/frontend/lib/components/checkpoint/timeline/utils.ts +53 -0
- package/frontend/lib/components/common/Alert.svelte +139 -0
- package/frontend/lib/components/common/AvatarBubble.svelte +56 -0
- package/frontend/lib/components/common/Button.svelte +71 -0
- package/frontend/lib/components/common/Card.svelte +102 -0
- package/frontend/lib/components/common/Checkbox.svelte +48 -0
- package/frontend/lib/components/common/Dialog.svelte +249 -0
- package/frontend/lib/components/common/FolderBrowser.svelte +843 -0
- package/frontend/lib/components/common/Icon.svelte +58 -0
- package/frontend/lib/components/common/Input.svelte +72 -0
- package/frontend/lib/components/common/Lightbox.svelte +233 -0
- package/frontend/lib/components/common/LoadingScreen.svelte +52 -0
- package/frontend/lib/components/common/LoadingSpinner.svelte +48 -0
- package/frontend/lib/components/common/Modal.svelte +177 -0
- package/frontend/lib/components/common/ModalProvider.svelte +28 -0
- package/frontend/lib/components/common/ModelSelector.svelte +110 -0
- package/frontend/lib/components/common/MonacoEditor.svelte +569 -0
- package/frontend/lib/components/common/NotificationToast.svelte +113 -0
- package/frontend/lib/components/common/PageTemplate.svelte +76 -0
- package/frontend/lib/components/common/ProjectUserAvatars.svelte +79 -0
- package/frontend/lib/components/common/Select.svelte +98 -0
- package/frontend/lib/components/common/Textarea.svelte +80 -0
- package/frontend/lib/components/common/ThemeToggle.svelte +44 -0
- package/frontend/lib/components/common/lucide-icons.ts +1642 -0
- package/frontend/lib/components/common/material-icons.ts +1082 -0
- package/frontend/lib/components/common/xterm/XTerm.svelte +796 -0
- package/frontend/lib/components/common/xterm/index.ts +16 -0
- package/frontend/lib/components/common/xterm/terminal-config.ts +68 -0
- package/frontend/lib/components/common/xterm/types.ts +31 -0
- package/frontend/lib/components/common/xterm/xterm-service.ts +353 -0
- package/frontend/lib/components/files/FileNode.svelte +384 -0
- package/frontend/lib/components/files/FileTree.svelte +681 -0
- package/frontend/lib/components/files/FileViewer.svelte +728 -0
- package/frontend/lib/components/files/SearchResults.svelte +303 -0
- package/frontend/lib/components/git/BranchManager.svelte +458 -0
- package/frontend/lib/components/git/ChangesSection.svelte +107 -0
- package/frontend/lib/components/git/CommitForm.svelte +76 -0
- package/frontend/lib/components/git/ConflictResolver.svelte +158 -0
- package/frontend/lib/components/git/DiffViewer.svelte +364 -0
- package/frontend/lib/components/git/FileChangeItem.svelte +97 -0
- package/frontend/lib/components/git/GitButton.svelte +33 -0
- package/frontend/lib/components/git/GitLog.svelte +361 -0
- package/frontend/lib/components/git/GitModal.svelte +80 -0
- package/frontend/lib/components/history/HistoryModal.svelte +563 -0
- package/frontend/lib/components/history/HistoryView.svelte +615 -0
- package/frontend/lib/components/index.ts +34 -0
- package/frontend/lib/components/preview/browser/BrowserPreview.svelte +549 -0
- package/frontend/lib/components/preview/browser/components/Canvas.svelte +1058 -0
- package/frontend/lib/components/preview/browser/components/ConsolePanel.svelte +757 -0
- package/frontend/lib/components/preview/browser/components/Container.svelte +450 -0
- package/frontend/lib/components/preview/browser/components/ContextMenu.svelte +236 -0
- package/frontend/lib/components/preview/browser/components/SelectDropdown.svelte +224 -0
- package/frontend/lib/components/preview/browser/components/Toolbar.svelte +339 -0
- package/frontend/lib/components/preview/browser/components/VirtualCursor.svelte +36 -0
- package/frontend/lib/components/preview/browser/core/cleanup.svelte.ts +155 -0
- package/frontend/lib/components/preview/browser/core/coordinator.svelte.ts +837 -0
- package/frontend/lib/components/preview/browser/core/interactions.svelte.ts +113 -0
- package/frontend/lib/components/preview/browser/core/mcp-handlers.svelte.ts +296 -0
- package/frontend/lib/components/preview/browser/core/native-ui-handlers.svelte.ts +391 -0
- package/frontend/lib/components/preview/browser/core/stream-handler.svelte.ts +231 -0
- package/frontend/lib/components/preview/browser/core/tab-manager.svelte.ts +210 -0
- package/frontend/lib/components/preview/browser/core/tab-operations.svelte.ts +239 -0
- package/frontend/lib/components/preview/index.ts +2 -0
- package/frontend/lib/components/settings/SettingsModal.svelte +235 -0
- package/frontend/lib/components/settings/SettingsView.svelte +36 -0
- package/frontend/lib/components/settings/appearance/AppearanceSettings.svelte +51 -0
- package/frontend/lib/components/settings/appearance/LayoutPresetSettings.svelte +160 -0
- package/frontend/lib/components/settings/appearance/LayoutPreview.svelte +76 -0
- package/frontend/lib/components/settings/engines/AIEnginesSettings.svelte +917 -0
- package/frontend/lib/components/settings/general/AdvancedSettings.svelte +187 -0
- package/frontend/lib/components/settings/general/DataManagementSettings.svelte +203 -0
- package/frontend/lib/components/settings/general/GeneralSettings.svelte +10 -0
- package/frontend/lib/components/settings/model/ModelSettings.svelte +357 -0
- package/frontend/lib/components/settings/notifications/NotificationSettings.svelte +205 -0
- package/frontend/lib/components/settings/user/UserSettings.svelte +197 -0
- package/frontend/lib/components/terminal/Terminal.svelte +368 -0
- package/frontend/lib/components/terminal/TerminalTabs.svelte +87 -0
- package/frontend/lib/components/terminal/TerminalView.svelte +55 -0
- package/frontend/lib/components/tunnel/TunnelActive.svelte +142 -0
- package/frontend/lib/components/tunnel/TunnelButton.svelte +54 -0
- package/frontend/lib/components/tunnel/TunnelInactive.svelte +284 -0
- package/frontend/lib/components/tunnel/TunnelModal.svelte +47 -0
- package/frontend/lib/components/tunnel/TunnelQRCode.svelte +49 -0
- package/frontend/lib/components/workspace/DesktopNavigator.svelte +382 -0
- package/frontend/lib/components/workspace/MobileNavigator.svelte +403 -0
- package/frontend/lib/components/workspace/PanelContainer.svelte +100 -0
- package/frontend/lib/components/workspace/PanelHeader.svelte +505 -0
- package/frontend/lib/components/workspace/ViewMenu.svelte +162 -0
- package/frontend/lib/components/workspace/WorkspaceLayout.svelte +169 -0
- package/frontend/lib/components/workspace/layout/DesktopLayout.svelte +15 -0
- package/frontend/lib/components/workspace/layout/MobileLayout.svelte +17 -0
- package/frontend/lib/components/workspace/layout/split-pane/Container.svelte +42 -0
- package/frontend/lib/components/workspace/layout/split-pane/Handle.svelte +85 -0
- package/frontend/lib/components/workspace/layout/split-pane/Layout.svelte +37 -0
- package/frontend/lib/components/workspace/panels/ChatPanel.svelte +274 -0
- package/frontend/lib/components/workspace/panels/FilesPanel.svelte +1261 -0
- package/frontend/lib/components/workspace/panels/GitPanel.svelte +1560 -0
- package/frontend/lib/components/workspace/panels/PreviewPanel.svelte +150 -0
- package/frontend/lib/components/workspace/panels/TerminalPanel.svelte +73 -0
- package/frontend/lib/constants/preview.ts +45 -0
- package/frontend/lib/services/chat/chat.service.ts +704 -0
- package/frontend/lib/services/chat/index.ts +7 -0
- package/frontend/lib/services/notification/global-stream-monitor.ts +86 -0
- package/frontend/lib/services/notification/index.ts +8 -0
- package/frontend/lib/services/notification/push.service.ts +144 -0
- package/frontend/lib/services/notification/sound.service.ts +127 -0
- package/frontend/lib/services/preview/browser/browser-console.service.ts +61 -0
- package/frontend/lib/services/preview/browser/browser-webcodecs.service.ts +1499 -0
- package/frontend/lib/services/preview/browser/mcp-integration.svelte.ts +67 -0
- package/frontend/lib/services/preview/index.ts +23 -0
- package/frontend/lib/services/project/index.ts +8 -0
- package/frontend/lib/services/project/status.service.ts +159 -0
- package/frontend/lib/services/snapshot/snapshot.service.ts +47 -0
- package/frontend/lib/services/terminal/background/index.ts +130 -0
- package/frontend/lib/services/terminal/background/session-restore.ts +274 -0
- package/frontend/lib/services/terminal/background/stream-manager.ts +286 -0
- package/frontend/lib/services/terminal/index.ts +14 -0
- package/frontend/lib/services/terminal/persistence.service.ts +260 -0
- package/frontend/lib/services/terminal/project.service.ts +953 -0
- package/frontend/lib/services/terminal/session.service.ts +364 -0
- package/frontend/lib/services/terminal/terminal.service.ts +369 -0
- package/frontend/lib/stores/core/app.svelte.ts +117 -0
- package/frontend/lib/stores/core/files.svelte.ts +73 -0
- package/frontend/lib/stores/core/presence.svelte.ts +48 -0
- package/frontend/lib/stores/core/projects.svelte.ts +317 -0
- package/frontend/lib/stores/core/sessions.svelte.ts +383 -0
- package/frontend/lib/stores/features/claude-accounts.svelte.ts +58 -0
- package/frontend/lib/stores/features/models.svelte.ts +89 -0
- package/frontend/lib/stores/features/settings.svelte.ts +87 -0
- package/frontend/lib/stores/features/terminal.svelte.ts +701 -0
- package/frontend/lib/stores/features/tunnel.svelte.ts +161 -0
- package/frontend/lib/stores/features/user.svelte.ts +96 -0
- package/frontend/lib/stores/ui/chat-input.svelte.ts +57 -0
- package/frontend/lib/stores/ui/chat-model.svelte.ts +61 -0
- package/frontend/lib/stores/ui/dialog.svelte.ts +59 -0
- package/frontend/lib/stores/ui/edit-mode.svelte.ts +214 -0
- package/frontend/lib/stores/ui/notification.svelte.ts +166 -0
- package/frontend/lib/stores/ui/settings-modal.svelte.ts +88 -0
- package/frontend/lib/stores/ui/theme.svelte.ts +179 -0
- package/frontend/lib/stores/ui/workspace.svelte.ts +754 -0
- package/frontend/lib/types/native-ui.ts +73 -0
- package/frontend/lib/utils/chat/date-separator.ts +39 -0
- package/frontend/lib/utils/chat/message-grouper.ts +219 -0
- package/frontend/lib/utils/chat/message-processor.ts +135 -0
- package/frontend/lib/utils/chat/tool-handler.ts +161 -0
- package/frontend/lib/utils/chat/virtual-scroll.svelte.ts +142 -0
- package/frontend/lib/utils/click-outside.ts +20 -0
- package/frontend/lib/utils/context-manager.ts +257 -0
- package/frontend/lib/utils/file-icon-mappings.ts +769 -0
- package/frontend/lib/utils/folder-icon-mappings.ts +1030 -0
- package/frontend/lib/utils/git-status.ts +68 -0
- package/frontend/lib/utils/platform.ts +113 -0
- package/frontend/lib/utils/port-check.ts +65 -0
- package/frontend/lib/utils/terminalFormatter.ts +207 -0
- package/frontend/lib/utils/theme.ts +6 -0
- package/frontend/lib/utils/tree-visualizer.ts +320 -0
- package/frontend/lib/utils/ws.ts +44 -0
- package/frontend/main.ts +13 -0
- package/index.html +70 -0
- package/package.json +111 -0
- package/scripts/generate-icons.ts +87 -0
- package/scripts/pre-publish-check.sh +142 -0
- package/scripts/setup-hooks.sh +134 -0
- package/scripts/validate-branch-name.sh +47 -0
- package/scripts/validate-commit-msg.sh +42 -0
- package/shared/constants/engines.ts +134 -0
- package/shared/types/database/connection.ts +16 -0
- package/shared/types/database/index.ts +6 -0
- package/shared/types/database/schema.ts +141 -0
- package/shared/types/engine/index.ts +45 -0
- package/shared/types/filesystem/index.ts +22 -0
- package/shared/types/git.ts +171 -0
- package/shared/types/messaging/index.ts +239 -0
- package/shared/types/messaging/tool.ts +526 -0
- package/shared/types/network/api.ts +18 -0
- package/shared/types/network/index.ts +5 -0
- package/shared/types/stores/app.ts +23 -0
- package/shared/types/stores/dialog.ts +21 -0
- package/shared/types/stores/index.ts +3 -0
- package/shared/types/stores/settings.ts +15 -0
- package/shared/types/terminal/index.ts +44 -0
- package/shared/types/ui/components.ts +61 -0
- package/shared/types/ui/icons.ts +23 -0
- package/shared/types/ui/index.ts +22 -0
- package/shared/types/ui/notifications.ts +14 -0
- package/shared/types/ui/theme.ts +12 -0
- package/shared/types/websocket/index.ts +43 -0
- package/shared/types/window.d.ts +13 -0
- package/shared/utils/anonymous-user.ts +168 -0
- package/shared/utils/async.ts +10 -0
- package/shared/utils/diff-calculator.ts +184 -0
- package/shared/utils/file-type-detection.ts +166 -0
- package/shared/utils/logger.ts +158 -0
- package/shared/utils/message-formatter.ts +79 -0
- package/shared/utils/path.ts +47 -0
- package/shared/utils/ws-client.ts +768 -0
- package/shared/utils/ws-server.ts +660 -0
- package/static/audio/notification.ogg +0 -0
- package/static/favicon.svg +8 -0
- package/static/fonts/dm-sans/dm-sans-italic-latin-ext.woff2 +0 -0
- package/static/fonts/dm-sans/dm-sans-italic-latin.woff2 +0 -0
- package/static/fonts/dm-sans/dm-sans-normal-latin-ext.woff2 +0 -0
- package/static/fonts/dm-sans/dm-sans-normal-latin.woff2 +0 -0
- package/static/fonts/dm-sans.css +96 -0
- package/svelte.config.js +20 -0
- package/vite.config.ts +33 -0
package/.env.example
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
name: Release & Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*.*.*'
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
release:
|
|
10
|
+
name: Release Package
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
permissions:
|
|
13
|
+
contents: write
|
|
14
|
+
id-token: write
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- name: Checkout
|
|
18
|
+
uses: actions/checkout@v4
|
|
19
|
+
|
|
20
|
+
- name: Setup Bun
|
|
21
|
+
uses: oven-sh/setup-bun@v1
|
|
22
|
+
with:
|
|
23
|
+
bun-version: latest
|
|
24
|
+
|
|
25
|
+
- name: Setup Node.js
|
|
26
|
+
uses: actions/setup-node@v4
|
|
27
|
+
with:
|
|
28
|
+
node-version: '22'
|
|
29
|
+
registry-url: 'https://registry.npmjs.org'
|
|
30
|
+
|
|
31
|
+
- name: Install
|
|
32
|
+
run: bun install
|
|
33
|
+
|
|
34
|
+
- name: Type check
|
|
35
|
+
run: bun run check
|
|
36
|
+
|
|
37
|
+
- name: Lint
|
|
38
|
+
run: bun run lint
|
|
39
|
+
|
|
40
|
+
- name: Build
|
|
41
|
+
run: bun run build
|
|
42
|
+
|
|
43
|
+
- name: Verify build
|
|
44
|
+
run: |
|
|
45
|
+
if [ ! -d "dist" ]; then
|
|
46
|
+
echo "Build failed - dist directory not found"
|
|
47
|
+
exit 1
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
- name: Publish to npm
|
|
51
|
+
run: npm publish --provenance --access public
|
|
52
|
+
|
|
53
|
+
- name: Create GitHub release
|
|
54
|
+
uses: softprops/action-gh-release@v2
|
|
55
|
+
with:
|
|
56
|
+
generate_release_notes: true
|
|
57
|
+
draft: false
|
|
58
|
+
prerelease: false
|
|
59
|
+
env:
|
|
60
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: Test & Build
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, dev]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
name: Run Tests
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
|
|
14
|
+
steps:
|
|
15
|
+
- name: Checkout
|
|
16
|
+
uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Setup Bun
|
|
19
|
+
uses: oven-sh/setup-bun@v1
|
|
20
|
+
with:
|
|
21
|
+
bun-version: latest
|
|
22
|
+
|
|
23
|
+
- name: Install
|
|
24
|
+
run: bun install
|
|
25
|
+
|
|
26
|
+
- name: Type check
|
|
27
|
+
run: bun run check
|
|
28
|
+
|
|
29
|
+
- name: Lint
|
|
30
|
+
run: bun run lint
|
|
31
|
+
|
|
32
|
+
- name: Build
|
|
33
|
+
run: bun run build
|
|
34
|
+
|
|
35
|
+
- name: Verify build
|
|
36
|
+
run: |
|
|
37
|
+
if [ ! -d "dist" ]; then
|
|
38
|
+
echo "Build failed - dist directory not found"
|
|
39
|
+
exit 1
|
|
40
|
+
fi
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,499 @@
|
|
|
1
|
+
# Contributing Guide
|
|
2
|
+
|
|
3
|
+
Contributing guide for Clopen. For maintainer instructions, see [MAINTAINER.md](logs/MAINTAINER.md).
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Getting Started
|
|
8
|
+
|
|
9
|
+
### Prerequisites
|
|
10
|
+
|
|
11
|
+
- [Bun](https://bun.sh/) v1.2.12+
|
|
12
|
+
- [Git](https://git-scm.com/)
|
|
13
|
+
- [Claude Code](https://github.com/anthropics/claude-code)
|
|
14
|
+
|
|
15
|
+
### Setup
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Fork via GitHub UI, then:
|
|
19
|
+
git clone https://github.com/YOUR_USERNAME/clopen.git
|
|
20
|
+
cd clopen
|
|
21
|
+
git remote add upstream https://github.com/myrialabs/clopen.git
|
|
22
|
+
|
|
23
|
+
bun install
|
|
24
|
+
cp .env.example .env
|
|
25
|
+
|
|
26
|
+
# Verify
|
|
27
|
+
bun run check
|
|
28
|
+
bun run lint
|
|
29
|
+
bun run build
|
|
30
|
+
|
|
31
|
+
# Test
|
|
32
|
+
bun link
|
|
33
|
+
clopen
|
|
34
|
+
bun unlink
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Keep Updated
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
git fetch upstream
|
|
41
|
+
git checkout main
|
|
42
|
+
git merge upstream/main
|
|
43
|
+
git push origin main
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Branch Naming
|
|
49
|
+
|
|
50
|
+
Format: `<type>/<description>`
|
|
51
|
+
|
|
52
|
+
| Type | Use |
|
|
53
|
+
|------|-----|
|
|
54
|
+
| `feature/` | New feature |
|
|
55
|
+
| `fix/` | Bug fix |
|
|
56
|
+
| `docs/` | Documentation |
|
|
57
|
+
| `chore/` | Other changes |
|
|
58
|
+
|
|
59
|
+
Rules:
|
|
60
|
+
- Lowercase only
|
|
61
|
+
- Use hyphens
|
|
62
|
+
- Short and descriptive
|
|
63
|
+
|
|
64
|
+
Examples:
|
|
65
|
+
```bash
|
|
66
|
+
feature/database-management
|
|
67
|
+
fix/websocket-connection
|
|
68
|
+
docs/update-readme
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Commit Messages
|
|
74
|
+
|
|
75
|
+
Format: `<type>(<scope>): <subject>`
|
|
76
|
+
|
|
77
|
+
### Types
|
|
78
|
+
|
|
79
|
+
| Type | Use |
|
|
80
|
+
|------|-----|
|
|
81
|
+
| `feat` | New feature |
|
|
82
|
+
| `fix` | Bug fix |
|
|
83
|
+
| `docs` | Documentation |
|
|
84
|
+
| `chore` | Other (refactor, test, build, perf) |
|
|
85
|
+
| `release` | Version release |
|
|
86
|
+
|
|
87
|
+
### Scopes
|
|
88
|
+
|
|
89
|
+
Common: `chat`, `terminal`, `preview`, `files`, `db`, `api`, `ui`, `deps`
|
|
90
|
+
|
|
91
|
+
### Rules
|
|
92
|
+
|
|
93
|
+
- Imperative mood ("add" not "added")
|
|
94
|
+
- No capital first letter
|
|
95
|
+
- No period at end
|
|
96
|
+
- Max 72 characters
|
|
97
|
+
|
|
98
|
+
### Examples
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
feat: add database management UI
|
|
102
|
+
feat(chat): add message export
|
|
103
|
+
fix(terminal): resolve memory leak
|
|
104
|
+
docs: update installation guide
|
|
105
|
+
chore: update dependencies
|
|
106
|
+
chore(preview): optimize streaming
|
|
107
|
+
release: v0.1.0
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Development Workflow
|
|
113
|
+
|
|
114
|
+
### Step 1: Sync
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
git checkout main
|
|
118
|
+
git pull upstream main
|
|
119
|
+
git push origin main
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Step 2: Branch
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
git checkout -b feature/your-feature
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Step 3: Develop
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Make changes, then:
|
|
132
|
+
bun run check
|
|
133
|
+
bun run lint
|
|
134
|
+
bun run build
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Step 4: Commit
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
git add .
|
|
141
|
+
git commit -m "feat(scope): description"
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Step 5: Push
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
git push origin feature/your-feature
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Step 6: PR
|
|
151
|
+
|
|
152
|
+
Via GitHub UI:
|
|
153
|
+
1. Go to https://github.com/myrialabs/clopen/pulls
|
|
154
|
+
2. "New Pull Request" → "compare across forks"
|
|
155
|
+
3. base: `myrialabs/clopen` → `dev`
|
|
156
|
+
4. head: `YOUR_USERNAME/clopen` → `feature/your-feature`
|
|
157
|
+
5. Fill template & create
|
|
158
|
+
|
|
159
|
+
Via CLI:
|
|
160
|
+
```bash
|
|
161
|
+
gh pr create --base dev --title "feat: your feature"
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Step 7: Address Feedback
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
# Make changes
|
|
168
|
+
git add .
|
|
169
|
+
git commit -m "fix: address feedback"
|
|
170
|
+
git push
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Step 8: After Merge
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
git checkout main
|
|
177
|
+
git branch -D feature/your-feature
|
|
178
|
+
git pull upstream main
|
|
179
|
+
git push origin main
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Pre-commit Checklist
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
bun run check
|
|
188
|
+
bun run lint
|
|
189
|
+
bun run build
|
|
190
|
+
bun link && clopen
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Verify:
|
|
194
|
+
- [ ] Code follows conventions
|
|
195
|
+
- [ ] Commit message follows format
|
|
196
|
+
- [ ] Branch name follows format
|
|
197
|
+
- [ ] No sensitive data
|
|
198
|
+
- [ ] No `console.*` (use `debug` module)
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Pull Request Guidelines
|
|
203
|
+
|
|
204
|
+
### Title Format
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
feat(scope): description
|
|
208
|
+
fix(scope): description
|
|
209
|
+
docs(scope): description
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Examples:
|
|
213
|
+
- `feat(chat): add message export`
|
|
214
|
+
- `fix(terminal): resolve memory leak`
|
|
215
|
+
|
|
216
|
+
### PR Template
|
|
217
|
+
|
|
218
|
+
```markdown
|
|
219
|
+
## Summary
|
|
220
|
+
Brief description
|
|
221
|
+
|
|
222
|
+
## Type
|
|
223
|
+
- [ ] Bug fix
|
|
224
|
+
- [ ] Feature
|
|
225
|
+
- [ ] Breaking change
|
|
226
|
+
- [ ] Docs
|
|
227
|
+
|
|
228
|
+
## Changes
|
|
229
|
+
- Added/Fixed/Updated...
|
|
230
|
+
|
|
231
|
+
## Testing
|
|
232
|
+
- [ ] `bun run check` passes
|
|
233
|
+
- [ ] `bun run lint` passes
|
|
234
|
+
- [ ] `bun run build` works
|
|
235
|
+
- [ ] Tested locally
|
|
236
|
+
|
|
237
|
+
## Related
|
|
238
|
+
Closes #123
|
|
239
|
+
|
|
240
|
+
## Checklist
|
|
241
|
+
- [ ] Follows style
|
|
242
|
+
- [ ] Self-reviewed
|
|
243
|
+
- [ ] No `console.*`
|
|
244
|
+
- [ ] Updated with `dev`
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Best Practices
|
|
248
|
+
|
|
249
|
+
Do:
|
|
250
|
+
- Keep PRs small (< 500 lines)
|
|
251
|
+
- One feature per PR
|
|
252
|
+
- Clear description
|
|
253
|
+
- Respond to feedback quickly
|
|
254
|
+
|
|
255
|
+
Don't:
|
|
256
|
+
- Mix features in one PR
|
|
257
|
+
- Force push after review
|
|
258
|
+
- Ignore feedback
|
|
259
|
+
- Commit to `main`/`dev` directly
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Code Style
|
|
264
|
+
|
|
265
|
+
### TypeScript
|
|
266
|
+
|
|
267
|
+
- Proper type annotations where useful
|
|
268
|
+
- `any` is allowed for Elysia/WS patterns (ESLint `no-explicit-any` is off)
|
|
269
|
+
- Use `const` by default, `let` only when reassignment is needed
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
// const for values that don't change
|
|
273
|
+
const userName = 'John';
|
|
274
|
+
const config = { port: 9141 };
|
|
275
|
+
|
|
276
|
+
// let only when the value will be reassigned
|
|
277
|
+
let retryCount = 0;
|
|
278
|
+
retryCount++;
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Svelte 5
|
|
282
|
+
|
|
283
|
+
Use runes. In `.svelte` files, `let` is only needed for mutable state:
|
|
284
|
+
|
|
285
|
+
```svelte
|
|
286
|
+
<script lang="ts">
|
|
287
|
+
// let — required for $state (mutable) and $bindable (two-way binding)
|
|
288
|
+
let count = $state(0);
|
|
289
|
+
let { value = $bindable('') }: Props = $props();
|
|
290
|
+
|
|
291
|
+
// const — for $derived (read-only), $props (no bindable), functions, static values
|
|
292
|
+
const doubled = $derived(count * 2);
|
|
293
|
+
const { label, disabled }: Props = $props();
|
|
294
|
+
const MAX_ITEMS = 100;
|
|
295
|
+
const handleClick = () => count++;
|
|
296
|
+
</script>
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Naming
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
// camelCase: variables, functions
|
|
303
|
+
const userName = 'John';
|
|
304
|
+
|
|
305
|
+
// PascalCase: classes, types
|
|
306
|
+
class UserManager {}
|
|
307
|
+
|
|
308
|
+
// UPPER_SNAKE_CASE: constants
|
|
309
|
+
const MAX_RETRIES = 3;
|
|
310
|
+
|
|
311
|
+
// kebab-case: files
|
|
312
|
+
// user-manager.ts
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### Logging
|
|
316
|
+
|
|
317
|
+
Use `debug` module:
|
|
318
|
+
|
|
319
|
+
```typescript
|
|
320
|
+
import { debug } from './utils/debug';
|
|
321
|
+
debug.log('User logged in', { userId });
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### Comments
|
|
325
|
+
|
|
326
|
+
Explain WHY, not WHAT:
|
|
327
|
+
|
|
328
|
+
```typescript
|
|
329
|
+
// Good
|
|
330
|
+
// Retry 3 times because API is unreliable
|
|
331
|
+
const maxRetries = 3;
|
|
332
|
+
|
|
333
|
+
// Bad
|
|
334
|
+
// Set retries to 3
|
|
335
|
+
const maxRetries = 3;
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### Formatting
|
|
339
|
+
|
|
340
|
+
- Tabs for indentation
|
|
341
|
+
- Single quotes
|
|
342
|
+
- Semicolons
|
|
343
|
+
- No prettier — formatting is not enforced by tooling
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## Found a Bug?
|
|
348
|
+
|
|
349
|
+
### Report
|
|
350
|
+
|
|
351
|
+
1. Search existing issues
|
|
352
|
+
2. Create new issue with template:
|
|
353
|
+
|
|
354
|
+
```markdown
|
|
355
|
+
## Description
|
|
356
|
+
What's wrong?
|
|
357
|
+
|
|
358
|
+
## Steps
|
|
359
|
+
1. Step 1
|
|
360
|
+
2. Step 2
|
|
361
|
+
3. Error
|
|
362
|
+
|
|
363
|
+
## Expected vs Actual
|
|
364
|
+
Expected: ...
|
|
365
|
+
Actual: ...
|
|
366
|
+
|
|
367
|
+
## Environment
|
|
368
|
+
- Clopen: `clopen --version`
|
|
369
|
+
- Bun: `bun --version`
|
|
370
|
+
- OS: Windows/Mac/Linux
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### Fix
|
|
374
|
+
|
|
375
|
+
```bash
|
|
376
|
+
git checkout -b fix/descriptive-name
|
|
377
|
+
# Fix & test
|
|
378
|
+
bun run check && bun run lint && bun run build
|
|
379
|
+
git commit -m "fix: resolve issue #123"
|
|
380
|
+
git push origin fix/descriptive-name
|
|
381
|
+
# Create PR with "Fixes #123"
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
## Suggest Feature?
|
|
387
|
+
|
|
388
|
+
### Request
|
|
389
|
+
|
|
390
|
+
1. Check existing issues & roadmap
|
|
391
|
+
2. Create issue:
|
|
392
|
+
|
|
393
|
+
```markdown
|
|
394
|
+
## Feature
|
|
395
|
+
What do you want?
|
|
396
|
+
|
|
397
|
+
## Problem
|
|
398
|
+
What problem does this solve?
|
|
399
|
+
|
|
400
|
+
## Solution
|
|
401
|
+
How should it work?
|
|
402
|
+
|
|
403
|
+
## Alternatives
|
|
404
|
+
Other approaches?
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### Implement
|
|
408
|
+
|
|
409
|
+
```bash
|
|
410
|
+
# Get approval first, then:
|
|
411
|
+
git checkout -b feature/descriptive-name
|
|
412
|
+
# Implement & test
|
|
413
|
+
bun run check && bun run lint && bun run build
|
|
414
|
+
git commit -m "feat(scope): add feature"
|
|
415
|
+
git push origin feature/descriptive-name
|
|
416
|
+
# Create PR with "Closes #123"
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
---
|
|
420
|
+
|
|
421
|
+
## Commands
|
|
422
|
+
|
|
423
|
+
```bash
|
|
424
|
+
bun run dev # Dev server
|
|
425
|
+
bun run check # Type check (svelte-check)
|
|
426
|
+
bun run lint # Lint (ESLint)
|
|
427
|
+
bun run lint:fix # Auto-fix lint issues
|
|
428
|
+
bun run build # Build
|
|
429
|
+
bun run start # Production server
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## Troubleshooting
|
|
435
|
+
|
|
436
|
+
### Type Errors
|
|
437
|
+
|
|
438
|
+
```bash
|
|
439
|
+
rm -rf node_modules bun.lockb
|
|
440
|
+
bun install
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
### Lint Errors
|
|
444
|
+
|
|
445
|
+
```bash
|
|
446
|
+
bun run lint:fix
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### Git Conflicts
|
|
450
|
+
|
|
451
|
+
```bash
|
|
452
|
+
git fetch upstream
|
|
453
|
+
git rebase upstream/main
|
|
454
|
+
# Resolve conflicts
|
|
455
|
+
git add .
|
|
456
|
+
git rebase --continue
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
### Port in Use
|
|
460
|
+
|
|
461
|
+
```bash
|
|
462
|
+
# Unix/Mac
|
|
463
|
+
lsof -ti:9141 | xargs kill -9
|
|
464
|
+
|
|
465
|
+
# Windows
|
|
466
|
+
netstat -ano | findstr :9141
|
|
467
|
+
taskkill /PID <PID> /F
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
|
|
472
|
+
## Resources
|
|
473
|
+
|
|
474
|
+
- [TypeScript](https://www.typescriptlang.org/docs/)
|
|
475
|
+
- [Svelte 5](https://svelte.dev/docs/svelte/overview)
|
|
476
|
+
- [Bun](https://bun.sh/docs)
|
|
477
|
+
- [Elysia](https://elysiajs.com/)
|
|
478
|
+
- [Conventional Commits](https://www.conventionalcommits.org/)
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
## Code of Conduct
|
|
483
|
+
|
|
484
|
+
- Be respectful
|
|
485
|
+
- Welcome newcomers
|
|
486
|
+
- Focus on code, not person
|
|
487
|
+
- Assume good intentions
|
|
488
|
+
- Help others learn
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## Questions?
|
|
493
|
+
|
|
494
|
+
- [Issues](https://github.com/myrialabs/clopen/issues)
|
|
495
|
+
- [Discussions](https://github.com/myrialabs/clopen/discussions)
|
|
496
|
+
|
|
497
|
+
---
|
|
498
|
+
|
|
499
|
+
**Thank you for contributing!**
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Myria Labs
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|