@myrialabs/clopen 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +5 -5
- package/.github/workflows/{release.yml → ci.yml} +86 -60
- package/CONTRIBUTING.md +499 -499
- package/LICENSE +21 -21
- package/README.md +209 -209
- package/backend/index.ts +168 -156
- package/backend/lib/chat/helpers.ts +42 -42
- package/backend/lib/chat/index.ts +1 -1
- package/backend/lib/chat/stream-manager.ts +1126 -1126
- package/backend/lib/database/README.md +76 -76
- package/backend/lib/database/index.ts +118 -118
- package/backend/lib/database/migrations/001_create_projects_table.ts +30 -30
- package/backend/lib/database/migrations/002_create_chat_sessions_table.ts +32 -32
- package/backend/lib/database/migrations/003_create_messages_table.ts +31 -31
- package/backend/lib/database/migrations/004_create_prompt_templates_table.ts +34 -34
- package/backend/lib/database/migrations/005_create_settings_table.ts +23 -23
- package/backend/lib/database/migrations/006_add_user_to_messages.ts +57 -57
- package/backend/lib/database/migrations/007_create_stream_states_table.ts +40 -40
- package/backend/lib/database/migrations/008_create_message_snapshots_table.ts +61 -61
- package/backend/lib/database/migrations/009_add_delta_snapshot_fields.ts +41 -41
- package/backend/lib/database/migrations/010_add_soft_delete_and_branch_support.ts +70 -70
- package/backend/lib/database/migrations/011_git_like_commit_graph.ts +156 -156
- package/backend/lib/database/migrations/012_add_file_change_statistics.ts +41 -41
- package/backend/lib/database/migrations/013_checkpoint_tree_state.ts +118 -118
- package/backend/lib/database/migrations/014_add_engine_to_sessions.ts +18 -18
- package/backend/lib/database/migrations/015_add_model_to_sessions.ts +18 -18
- package/backend/lib/database/migrations/016_create_user_projects_table.ts +34 -34
- package/backend/lib/database/migrations/017_add_current_session_to_user_projects.ts +32 -32
- package/backend/lib/database/migrations/018_create_claude_accounts_table.ts +24 -24
- package/backend/lib/database/migrations/019_add_claude_account_to_sessions.ts +18 -18
- package/backend/lib/database/migrations/020_add_snapshot_tree_hash.ts +32 -32
- package/backend/lib/database/migrations/021_drop_prompt_templates_table.ts +33 -33
- package/backend/lib/database/migrations/index.ts +153 -153
- package/backend/lib/database/queries/checkpoint-queries.ts +87 -87
- package/backend/lib/database/queries/engine-queries.ts +75 -75
- package/backend/lib/database/queries/index.ts +8 -8
- package/backend/lib/database/queries/message-queries.ts +471 -471
- package/backend/lib/database/queries/project-queries.ts +117 -117
- package/backend/lib/database/queries/session-queries.ts +270 -270
- package/backend/lib/database/queries/settings-queries.ts +33 -33
- package/backend/lib/database/queries/snapshot-queries.ts +325 -325
- package/backend/lib/database/queries/utils-queries.ts +58 -58
- package/backend/lib/database/seeders/index.ts +12 -12
- package/backend/lib/database/seeders/settings_seeder.ts +83 -83
- package/backend/lib/database/utils/connection.ts +173 -173
- package/backend/lib/database/utils/index.ts +3 -3
- package/backend/lib/database/utils/migration-runner.ts +117 -117
- package/backend/lib/database/utils/seeder-runner.ts +120 -120
- package/backend/lib/engine/adapters/claude/environment.ts +160 -164
- package/backend/lib/engine/adapters/claude/error-handler.ts +60 -60
- package/backend/lib/engine/adapters/claude/index.ts +1 -1
- package/backend/lib/engine/adapters/claude/path-utils.ts +38 -38
- package/backend/lib/engine/adapters/claude/stream.ts +177 -177
- package/backend/lib/engine/adapters/opencode/index.ts +2 -2
- package/backend/lib/engine/adapters/opencode/message-converter.ts +862 -862
- package/backend/lib/engine/adapters/opencode/server.ts +104 -104
- package/backend/lib/engine/adapters/opencode/stream.ts +755 -755
- package/backend/lib/engine/index.ts +196 -196
- package/backend/lib/engine/types.ts +58 -58
- package/backend/lib/files/file-operations.ts +478 -478
- package/backend/lib/files/file-reading.ts +308 -308
- package/backend/lib/files/file-watcher.ts +383 -383
- package/backend/lib/files/path-browsing.ts +382 -382
- package/backend/lib/git/git-executor.ts +89 -88
- package/backend/lib/git/git-parser.ts +411 -411
- package/backend/lib/git/git-service.ts +505 -505
- package/backend/lib/mcp/README.md +1144 -1144
- package/backend/lib/mcp/config.ts +317 -316
- package/backend/lib/mcp/index.ts +35 -35
- package/backend/lib/mcp/project-context.ts +236 -236
- package/backend/lib/mcp/servers/browser-automation/actions.ts +156 -156
- package/backend/lib/mcp/servers/browser-automation/browser.ts +419 -419
- package/backend/lib/mcp/servers/browser-automation/index.ts +791 -791
- package/backend/lib/mcp/servers/browser-automation/inspection.ts +501 -501
- package/backend/lib/mcp/servers/helper.ts +143 -143
- package/backend/lib/mcp/servers/index.ts +44 -44
- package/backend/lib/mcp/servers/weather/get-temperature.ts +56 -56
- package/backend/lib/mcp/servers/weather/index.ts +31 -31
- package/backend/lib/mcp/stdio-server.ts +103 -103
- package/backend/lib/mcp/types.ts +65 -65
- package/backend/lib/preview/browser/browser-audio-capture.ts +86 -86
- package/backend/lib/preview/browser/browser-console-manager.ts +262 -262
- package/backend/lib/preview/browser/browser-dialog-handler.ts +222 -222
- package/backend/lib/preview/browser/browser-interaction-handler.ts +421 -421
- package/backend/lib/preview/browser/browser-mcp-control.ts +415 -415
- package/backend/lib/preview/browser/browser-native-ui-handler.ts +512 -512
- package/backend/lib/preview/browser/browser-navigation-tracker.ts +103 -103
- package/backend/lib/preview/browser/browser-pool.ts +357 -357
- package/backend/lib/preview/browser/browser-preview-service.ts +882 -882
- package/backend/lib/preview/browser/browser-tab-manager.ts +935 -935
- package/backend/lib/preview/browser/browser-video-capture.ts +695 -695
- package/backend/lib/preview/browser/scripts/audio-stream.ts +292 -292
- package/backend/lib/preview/browser/scripts/cursor-tracking.ts +85 -85
- package/backend/lib/preview/browser/scripts/video-stream.ts +438 -438
- package/backend/lib/preview/browser/types.ts +359 -359
- package/backend/lib/preview/index.ts +23 -23
- package/backend/lib/project/index.ts +1 -1
- package/backend/lib/project/status-manager.ts +181 -181
- package/backend/lib/shared/env.ts +117 -0
- package/backend/lib/shared/index.ts +5 -2
- package/backend/lib/shared/port-utils.ts +25 -25
- package/backend/lib/shared/process-manager.ts +280 -280
- package/backend/lib/snapshot/blob-store.ts +227 -227
- package/backend/lib/snapshot/gitignore.ts +307 -307
- package/backend/lib/snapshot/helpers.ts +397 -397
- package/backend/lib/snapshot/snapshot-service.ts +483 -483
- package/backend/lib/terminal/helpers.ts +14 -14
- package/backend/lib/terminal/index.ts +7 -7
- package/backend/lib/terminal/pty-manager.ts +3 -3
- package/backend/lib/terminal/pty-session-manager.ts +370 -387
- package/backend/lib/terminal/shell-utils.ts +315 -312
- package/backend/lib/terminal/stream-manager.ts +292 -292
- package/backend/lib/tunnel/global-tunnel-manager.ts +266 -243
- package/backend/lib/tunnel/project-tunnel-manager.ts +311 -311
- package/backend/lib/user/helpers.ts +87 -87
- package/backend/lib/utils/ws.ts +944 -944
- package/backend/lib/vite-dev.ts +295 -295
- package/backend/middleware/cors.ts +16 -15
- package/backend/middleware/error-handler.ts +50 -49
- package/backend/middleware/logger.ts +9 -9
- package/backend/types/api.ts +24 -24
- package/backend/ws/README.md +1505 -1505
- package/backend/ws/chat/background.ts +198 -198
- package/backend/ws/chat/index.ts +21 -21
- package/backend/ws/chat/stream.ts +707 -707
- package/backend/ws/engine/claude/accounts.ts +399 -401
- package/backend/ws/engine/claude/index.ts +13 -13
- package/backend/ws/engine/claude/status.ts +43 -43
- package/backend/ws/engine/index.ts +14 -14
- package/backend/ws/engine/opencode/index.ts +11 -11
- package/backend/ws/engine/opencode/status.ts +30 -30
- package/backend/ws/engine/utils.ts +36 -36
- package/backend/ws/files/index.ts +30 -30
- package/backend/ws/files/read.ts +189 -189
- package/backend/ws/files/search.ts +453 -453
- package/backend/ws/files/watch.ts +124 -124
- package/backend/ws/files/write.ts +143 -143
- package/backend/ws/git/branch.ts +106 -106
- package/backend/ws/git/commit.ts +39 -39
- package/backend/ws/git/conflict.ts +68 -68
- package/backend/ws/git/diff.ts +69 -69
- package/backend/ws/git/index.ts +24 -24
- package/backend/ws/git/log.ts +41 -41
- package/backend/ws/git/remote.ts +214 -214
- package/backend/ws/git/staging.ts +84 -84
- package/backend/ws/git/status.ts +90 -90
- package/backend/ws/index.ts +69 -69
- package/backend/ws/mcp/index.ts +61 -61
- package/backend/ws/messages/crud.ts +74 -74
- package/backend/ws/messages/index.ts +14 -14
- package/backend/ws/preview/browser/cleanup.ts +129 -129
- package/backend/ws/preview/browser/console.ts +114 -114
- package/backend/ws/preview/browser/interact.ts +513 -513
- package/backend/ws/preview/browser/mcp.ts +129 -129
- package/backend/ws/preview/browser/native-ui.ts +235 -235
- package/backend/ws/preview/browser/stats.ts +55 -55
- package/backend/ws/preview/browser/tab-info.ts +126 -126
- package/backend/ws/preview/browser/tab.ts +166 -166
- package/backend/ws/preview/browser/webcodecs.ts +293 -293
- package/backend/ws/preview/index.ts +146 -146
- package/backend/ws/projects/crud.ts +113 -113
- package/backend/ws/projects/index.ts +25 -25
- package/backend/ws/projects/presence.ts +46 -46
- package/backend/ws/projects/status.ts +116 -116
- package/backend/ws/sessions/crud.ts +327 -327
- package/backend/ws/sessions/index.ts +33 -33
- package/backend/ws/settings/crud.ts +112 -112
- package/backend/ws/settings/index.ts +14 -14
- package/backend/ws/snapshot/index.ts +17 -17
- package/backend/ws/snapshot/restore.ts +173 -173
- package/backend/ws/snapshot/timeline.ts +141 -141
- package/backend/ws/system/index.ts +14 -14
- package/backend/ws/system/operations.ts +49 -49
- package/backend/ws/terminal/index.ts +40 -40
- package/backend/ws/terminal/persistence.ts +153 -153
- package/backend/ws/terminal/session.ts +382 -382
- package/backend/ws/terminal/stream.ts +79 -79
- package/backend/ws/tunnel/index.ts +14 -14
- package/backend/ws/tunnel/operations.ts +91 -91
- package/backend/ws/types.ts +20 -20
- package/backend/ws/user/crud.ts +156 -156
- package/backend/ws/user/index.ts +14 -14
- package/bin/clopen.ts +307 -307
- package/bun.lock +1353 -1352
- package/frontend/App.svelte +38 -34
- package/frontend/app.css +313 -313
- package/frontend/lib/app-environment.ts +10 -10
- package/frontend/lib/components/chat/ChatInterface.svelte +406 -406
- package/frontend/lib/components/chat/formatters/ErrorMessage.svelte +56 -56
- package/frontend/lib/components/chat/formatters/MessageFormatter.svelte +223 -223
- package/frontend/lib/components/chat/formatters/TextMessage.svelte +394 -394
- package/frontend/lib/components/chat/formatters/Tools.svelte +69 -69
- package/frontend/lib/components/chat/formatters/index.ts +2 -2
- package/frontend/lib/components/chat/input/ChatInput.svelte +421 -421
- package/frontend/lib/components/chat/input/components/ChatInputActions.svelte +78 -78
- package/frontend/lib/components/chat/input/components/DragDropOverlay.svelte +30 -30
- package/frontend/lib/components/chat/input/components/EditModeIndicator.svelte +33 -33
- package/frontend/lib/components/chat/input/components/EngineModelPicker.svelte +619 -619
- package/frontend/lib/components/chat/input/components/FileAttachmentPreview.svelte +48 -48
- package/frontend/lib/components/chat/input/components/LoadingIndicator.svelte +31 -31
- package/frontend/lib/components/chat/input/composables/use-animations.svelte.ts +201 -201
- package/frontend/lib/components/chat/input/composables/use-chat-actions.svelte.ts +148 -148
- package/frontend/lib/components/chat/input/composables/use-file-handling.svelte.ts +216 -216
- package/frontend/lib/components/chat/input/composables/use-input-state.svelte.ts +357 -357
- package/frontend/lib/components/chat/input/composables/use-textarea-resize.svelte.ts +57 -57
- package/frontend/lib/components/chat/message/ChatMessage.svelte +478 -478
- package/frontend/lib/components/chat/message/ChatMessages.svelte +541 -541
- package/frontend/lib/components/chat/message/DateSeparator.svelte +86 -86
- package/frontend/lib/components/chat/message/MessageBubble.svelte +86 -86
- package/frontend/lib/components/chat/message/MessageHeader.svelte +157 -157
- package/frontend/lib/components/chat/modal/DebugModal.svelte +59 -59
- package/frontend/lib/components/chat/modal/TokenUsageModal.svelte +124 -124
- package/frontend/lib/components/chat/shared/index.ts +1 -1
- package/frontend/lib/components/chat/shared/utils.ts +115 -115
- package/frontend/lib/components/chat/tools/BashOutputTool.svelte +35 -35
- package/frontend/lib/components/chat/tools/BashTool.svelte +45 -45
- package/frontend/lib/components/chat/tools/CustomMcpTool.svelte +139 -139
- package/frontend/lib/components/chat/tools/EditTool.svelte +47 -47
- package/frontend/lib/components/chat/tools/ExitPlanModeTool.svelte +31 -31
- package/frontend/lib/components/chat/tools/GlobTool.svelte +50 -50
- package/frontend/lib/components/chat/tools/GrepTool.svelte +89 -89
- package/frontend/lib/components/chat/tools/KillShellTool.svelte +25 -25
- package/frontend/lib/components/chat/tools/ListMcpResourcesTool.svelte +30 -30
- package/frontend/lib/components/chat/tools/NotebookEditTool.svelte +37 -37
- package/frontend/lib/components/chat/tools/ReadMcpResourceTool.svelte +33 -33
- package/frontend/lib/components/chat/tools/ReadTool.svelte +40 -40
- package/frontend/lib/components/chat/tools/TaskTool.svelte +63 -63
- package/frontend/lib/components/chat/tools/TodoWriteTool.svelte +74 -74
- package/frontend/lib/components/chat/tools/WebFetchTool.svelte +34 -34
- package/frontend/lib/components/chat/tools/WebSearchTool.svelte +83 -83
- package/frontend/lib/components/chat/tools/WriteTool.svelte +32 -32
- package/frontend/lib/components/chat/tools/components/CodeBlock.svelte +78 -78
- package/frontend/lib/components/chat/tools/components/DiffBlock.svelte +407 -407
- package/frontend/lib/components/chat/tools/components/FileHeader.svelte +45 -45
- package/frontend/lib/components/chat/tools/components/InfoLine.svelte +18 -18
- package/frontend/lib/components/chat/tools/components/StatsBadges.svelte +26 -26
- package/frontend/lib/components/chat/tools/components/TerminalCommand.svelte +53 -53
- package/frontend/lib/components/chat/tools/components/index.ts +7 -7
- package/frontend/lib/components/chat/tools/index.ts +25 -25
- package/frontend/lib/components/chat/widgets/FloatingTodoList.svelte +248 -248
- package/frontend/lib/components/chat/widgets/TokenUsage.svelte +78 -78
- package/frontend/lib/components/checkpoint/TimelineModal.svelte +391 -391
- package/frontend/lib/components/checkpoint/timeline/TimelineEdge.svelte +26 -26
- package/frontend/lib/components/checkpoint/timeline/TimelineGraph.svelte +86 -86
- package/frontend/lib/components/checkpoint/timeline/TimelineNode.svelte +108 -108
- package/frontend/lib/components/checkpoint/timeline/TimelineVersionGroup.svelte +59 -59
- package/frontend/lib/components/checkpoint/timeline/animation.ts +168 -168
- package/frontend/lib/components/checkpoint/timeline/config.ts +44 -44
- package/frontend/lib/components/checkpoint/timeline/graph-builder.ts +304 -304
- package/frontend/lib/components/checkpoint/timeline/types.ts +65 -65
- package/frontend/lib/components/checkpoint/timeline/utils.ts +53 -53
- package/frontend/lib/components/common/Alert.svelte +138 -138
- package/frontend/lib/components/common/AvatarBubble.svelte +55 -55
- package/frontend/lib/components/common/Button.svelte +71 -71
- package/frontend/lib/components/common/Card.svelte +102 -102
- package/frontend/lib/components/common/Checkbox.svelte +48 -48
- package/frontend/lib/components/common/Dialog.svelte +248 -248
- package/frontend/lib/components/common/FolderBrowser.svelte +842 -842
- package/frontend/lib/components/common/Icon.svelte +57 -57
- package/frontend/lib/components/common/Input.svelte +72 -72
- package/frontend/lib/components/common/Lightbox.svelte +232 -232
- package/frontend/lib/components/common/LoadingScreen.svelte +52 -52
- package/frontend/lib/components/common/LoadingSpinner.svelte +48 -48
- package/frontend/lib/components/common/Modal.svelte +177 -177
- package/frontend/lib/components/common/ModalProvider.svelte +27 -27
- package/frontend/lib/components/common/ModelSelector.svelte +110 -110
- package/frontend/lib/components/common/MonacoEditor.svelte +568 -568
- package/frontend/lib/components/common/NotificationToast.svelte +113 -113
- package/frontend/lib/components/common/PageTemplate.svelte +75 -75
- package/frontend/lib/components/common/ProjectUserAvatars.svelte +79 -79
- package/frontend/lib/components/common/Select.svelte +97 -97
- package/frontend/lib/components/common/Textarea.svelte +79 -79
- package/frontend/lib/components/common/ThemeToggle.svelte +44 -44
- package/frontend/lib/components/common/lucide-icons.ts +1642 -1642
- package/frontend/lib/components/common/material-icons.ts +1082 -1082
- package/frontend/lib/components/common/xterm/XTerm.svelte +809 -795
- package/frontend/lib/components/common/xterm/index.ts +15 -15
- package/frontend/lib/components/common/xterm/terminal-config.ts +67 -67
- package/frontend/lib/components/common/xterm/types.ts +30 -30
- package/frontend/lib/components/common/xterm/xterm-service.ts +379 -353
- package/frontend/lib/components/files/FileNode.svelte +383 -383
- package/frontend/lib/components/files/FileTree.svelte +681 -681
- package/frontend/lib/components/files/FileViewer.svelte +728 -728
- package/frontend/lib/components/files/SearchResults.svelte +303 -303
- package/frontend/lib/components/git/BranchManager.svelte +458 -458
- package/frontend/lib/components/git/ChangesSection.svelte +107 -107
- package/frontend/lib/components/git/CommitForm.svelte +76 -76
- package/frontend/lib/components/git/ConflictResolver.svelte +158 -158
- package/frontend/lib/components/git/DiffViewer.svelte +364 -364
- package/frontend/lib/components/git/FileChangeItem.svelte +97 -97
- package/frontend/lib/components/git/GitButton.svelte +33 -33
- package/frontend/lib/components/git/GitLog.svelte +361 -361
- package/frontend/lib/components/git/GitModal.svelte +80 -80
- package/frontend/lib/components/history/HistoryModal.svelte +563 -563
- package/frontend/lib/components/history/HistoryView.svelte +614 -614
- package/frontend/lib/components/index.ts +34 -34
- package/frontend/lib/components/preview/browser/BrowserPreview.svelte +549 -549
- package/frontend/lib/components/preview/browser/components/Canvas.svelte +1058 -1058
- package/frontend/lib/components/preview/browser/components/ConsolePanel.svelte +756 -756
- package/frontend/lib/components/preview/browser/components/Container.svelte +450 -450
- package/frontend/lib/components/preview/browser/components/ContextMenu.svelte +236 -236
- package/frontend/lib/components/preview/browser/components/SelectDropdown.svelte +224 -224
- package/frontend/lib/components/preview/browser/components/Toolbar.svelte +338 -338
- package/frontend/lib/components/preview/browser/components/VirtualCursor.svelte +35 -35
- package/frontend/lib/components/preview/browser/core/cleanup.svelte.ts +155 -155
- package/frontend/lib/components/preview/browser/core/coordinator.svelte.ts +837 -837
- package/frontend/lib/components/preview/browser/core/interactions.svelte.ts +113 -113
- package/frontend/lib/components/preview/browser/core/mcp-handlers.svelte.ts +296 -296
- package/frontend/lib/components/preview/browser/core/native-ui-handlers.svelte.ts +391 -391
- package/frontend/lib/components/preview/browser/core/stream-handler.svelte.ts +231 -231
- package/frontend/lib/components/preview/browser/core/tab-manager.svelte.ts +210 -210
- package/frontend/lib/components/preview/browser/core/tab-operations.svelte.ts +239 -239
- package/frontend/lib/components/preview/index.ts +1 -1
- package/frontend/lib/components/settings/SettingsModal.svelte +235 -235
- package/frontend/lib/components/settings/SettingsView.svelte +36 -36
- package/frontend/lib/components/settings/appearance/AppearanceSettings.svelte +51 -51
- package/frontend/lib/components/settings/appearance/LayoutPresetSettings.svelte +160 -160
- package/frontend/lib/components/settings/appearance/LayoutPreview.svelte +76 -76
- package/frontend/lib/components/settings/engines/AIEnginesSettings.svelte +917 -917
- package/frontend/lib/components/settings/general/AdvancedSettings.svelte +187 -187
- package/frontend/lib/components/settings/general/DataManagementSettings.svelte +203 -203
- package/frontend/lib/components/settings/general/GeneralSettings.svelte +10 -10
- package/frontend/lib/components/settings/model/ModelSettings.svelte +357 -357
- package/frontend/lib/components/settings/notifications/NotificationSettings.svelte +205 -205
- package/frontend/lib/components/settings/user/UserSettings.svelte +197 -197
- package/frontend/lib/components/terminal/Terminal.svelte +367 -367
- package/frontend/lib/components/terminal/TerminalTabs.svelte +87 -87
- package/frontend/lib/components/terminal/TerminalView.svelte +54 -54
- package/frontend/lib/components/tunnel/TunnelActive.svelte +157 -142
- package/frontend/lib/components/tunnel/TunnelButton.svelte +60 -54
- package/frontend/lib/components/tunnel/TunnelInactive.svelte +285 -284
- package/frontend/lib/components/tunnel/TunnelModal.svelte +48 -47
- package/frontend/lib/components/tunnel/TunnelQRCode.svelte +49 -49
- package/frontend/lib/components/workspace/DesktopNavigator.svelte +382 -382
- package/frontend/lib/components/workspace/MobileNavigator.svelte +394 -403
- package/frontend/lib/components/workspace/PanelContainer.svelte +100 -100
- package/frontend/lib/components/workspace/PanelHeader.svelte +505 -505
- package/frontend/lib/components/workspace/ViewMenu.svelte +162 -162
- package/frontend/lib/components/workspace/WorkspaceLayout.svelte +169 -169
- package/frontend/lib/components/workspace/layout/DesktopLayout.svelte +15 -15
- package/frontend/lib/components/workspace/layout/MobileLayout.svelte +17 -17
- package/frontend/lib/components/workspace/layout/split-pane/Container.svelte +42 -42
- package/frontend/lib/components/workspace/layout/split-pane/Handle.svelte +84 -84
- package/frontend/lib/components/workspace/layout/split-pane/Layout.svelte +37 -37
- package/frontend/lib/components/workspace/panels/ChatPanel.svelte +274 -274
- package/frontend/lib/components/workspace/panels/FilesPanel.svelte +1261 -1261
- package/frontend/lib/components/workspace/panels/GitPanel.svelte +1560 -1560
- package/frontend/lib/components/workspace/panels/PreviewPanel.svelte +150 -150
- package/frontend/lib/components/workspace/panels/TerminalPanel.svelte +73 -73
- package/frontend/lib/constants/preview.ts +44 -44
- package/frontend/lib/services/chat/chat.service.ts +704 -704
- package/frontend/lib/services/chat/index.ts +6 -6
- package/frontend/lib/services/notification/global-stream-monitor.ts +86 -86
- package/frontend/lib/services/notification/index.ts +7 -7
- package/frontend/lib/services/notification/push.service.ts +143 -143
- package/frontend/lib/services/notification/sound.service.ts +126 -126
- package/frontend/lib/services/preview/browser/browser-console.service.ts +61 -61
- package/frontend/lib/services/preview/browser/browser-webcodecs.service.ts +1499 -1499
- package/frontend/lib/services/preview/browser/mcp-integration.svelte.ts +67 -67
- package/frontend/lib/services/preview/index.ts +22 -22
- package/frontend/lib/services/project/index.ts +7 -7
- package/frontend/lib/services/project/status.service.ts +159 -159
- package/frontend/lib/services/snapshot/snapshot.service.ts +47 -47
- package/frontend/lib/services/terminal/background/index.ts +129 -129
- package/frontend/lib/services/terminal/background/session-restore.ts +273 -273
- package/frontend/lib/services/terminal/background/stream-manager.ts +285 -285
- package/frontend/lib/services/terminal/index.ts +13 -13
- package/frontend/lib/services/terminal/persistence.service.ts +260 -260
- package/frontend/lib/services/terminal/project.service.ts +952 -952
- package/frontend/lib/services/terminal/session.service.ts +363 -363
- package/frontend/lib/services/terminal/terminal.service.ts +369 -369
- package/frontend/lib/stores/core/app.svelte.ts +117 -117
- package/frontend/lib/stores/core/files.svelte.ts +72 -72
- package/frontend/lib/stores/core/presence.svelte.ts +48 -48
- package/frontend/lib/stores/core/projects.svelte.ts +317 -317
- package/frontend/lib/stores/core/sessions.svelte.ts +383 -383
- package/frontend/lib/stores/features/claude-accounts.svelte.ts +58 -58
- package/frontend/lib/stores/features/models.svelte.ts +89 -89
- package/frontend/lib/stores/features/settings.svelte.ts +87 -87
- package/frontend/lib/stores/features/terminal.svelte.ts +700 -700
- package/frontend/lib/stores/features/tunnel.svelte.ts +163 -161
- package/frontend/lib/stores/features/user.svelte.ts +95 -95
- package/frontend/lib/stores/ui/chat-input.svelte.ts +56 -56
- package/frontend/lib/stores/ui/chat-model.svelte.ts +61 -61
- package/frontend/lib/stores/ui/dialog.svelte.ts +58 -58
- package/frontend/lib/stores/ui/edit-mode.svelte.ts +214 -214
- package/frontend/lib/stores/ui/notification.svelte.ts +166 -166
- package/frontend/lib/stores/ui/settings-modal.svelte.ts +88 -88
- package/frontend/lib/stores/ui/theme.svelte.ts +179 -179
- package/frontend/lib/stores/ui/workspace.svelte.ts +754 -754
- package/frontend/lib/types/native-ui.ts +73 -73
- package/frontend/lib/utils/chat/date-separator.ts +38 -38
- package/frontend/lib/utils/chat/message-grouper.ts +218 -218
- package/frontend/lib/utils/chat/message-processor.ts +134 -134
- package/frontend/lib/utils/chat/tool-handler.ts +160 -160
- package/frontend/lib/utils/chat/virtual-scroll.svelte.ts +142 -142
- package/frontend/lib/utils/click-outside.ts +20 -20
- package/frontend/lib/utils/context-manager.ts +256 -256
- package/frontend/lib/utils/file-icon-mappings.ts +768 -768
- package/frontend/lib/utils/folder-icon-mappings.ts +1029 -1029
- package/frontend/lib/utils/git-status.ts +68 -68
- package/frontend/lib/utils/platform.ts +112 -112
- package/frontend/lib/utils/port-check.ts +64 -64
- package/frontend/lib/utils/terminalFormatter.ts +206 -206
- package/frontend/lib/utils/theme.ts +6 -6
- package/frontend/lib/utils/tree-visualizer.ts +320 -320
- package/frontend/lib/utils/ws.ts +44 -44
- package/frontend/main.ts +13 -13
- package/index.html +70 -70
- package/package.json +111 -111
- package/scripts/generate-icons.ts +86 -86
- package/scripts/pre-publish-check.sh +142 -142
- package/scripts/setup-hooks.sh +134 -134
- package/scripts/validate-branch-name.sh +47 -47
- package/scripts/validate-commit-msg.sh +42 -42
- package/shared/constants/engines.ts +134 -134
- package/shared/types/database/connection.ts +15 -15
- package/shared/types/database/index.ts +5 -5
- package/shared/types/database/schema.ts +140 -140
- package/shared/types/engine/index.ts +45 -45
- package/shared/types/filesystem/index.ts +21 -21
- package/shared/types/git.ts +171 -171
- package/shared/types/messaging/index.ts +238 -238
- package/shared/types/messaging/tool.ts +525 -525
- package/shared/types/network/api.ts +17 -17
- package/shared/types/network/index.ts +4 -4
- package/shared/types/stores/app.ts +22 -22
- package/shared/types/stores/dialog.ts +20 -20
- package/shared/types/stores/index.ts +2 -2
- package/shared/types/stores/settings.ts +15 -15
- package/shared/types/terminal/index.ts +43 -43
- package/shared/types/ui/components.ts +60 -60
- package/shared/types/ui/icons.ts +22 -22
- package/shared/types/ui/index.ts +21 -21
- package/shared/types/ui/notifications.ts +13 -13
- package/shared/types/ui/theme.ts +11 -11
- package/shared/types/websocket/index.ts +43 -43
- package/shared/types/window.d.ts +12 -12
- package/shared/utils/anonymous-user.ts +167 -167
- package/shared/utils/async.ts +10 -10
- package/shared/utils/diff-calculator.ts +184 -184
- package/shared/utils/file-type-detection.ts +165 -165
- package/shared/utils/logger.ts +144 -158
- package/shared/utils/message-formatter.ts +79 -79
- package/shared/utils/path.ts +47 -47
- package/shared/utils/ws-client.ts +768 -768
- package/shared/utils/ws-server.ts +660 -660
- package/static/favicon.svg +7 -7
- package/static/fonts/dm-sans.css +96 -96
- package/svelte.config.js +20 -20
- package/tsconfig.json +41 -41
- package/vite.config.ts +33 -33
- package/.github/workflows/test.yml +0 -40
|
@@ -1,359 +1,359 @@
|
|
|
1
|
-
import type { Browser, BrowserContext, Page } from 'puppeteer';
|
|
2
|
-
import type { DeviceSize, Rotation } from '$frontend/lib/constants/preview.js';
|
|
3
|
-
|
|
4
|
-
// Re-export types from preview config
|
|
5
|
-
export type { DeviceSize, Rotation };
|
|
6
|
-
|
|
7
|
-
export interface BrowserConsoleMessage {
|
|
8
|
-
id: string;
|
|
9
|
-
type: 'log' | 'info' | 'warn' | 'error' | 'debug' | 'trace' | 'clear';
|
|
10
|
-
text: string;
|
|
11
|
-
args?: unknown[];
|
|
12
|
-
location?: {
|
|
13
|
-
url: string;
|
|
14
|
-
lineNumber: number;
|
|
15
|
-
columnNumber: number;
|
|
16
|
-
};
|
|
17
|
-
stackTrace?: string;
|
|
18
|
-
timestamp: number;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Browser Tab Interface
|
|
23
|
-
*
|
|
24
|
-
* Tab-centric architecture where each tab represents a complete browser instance
|
|
25
|
-
* (context + page) from the browser pool. No separate "session" concept.
|
|
26
|
-
*/
|
|
27
|
-
export interface BrowserTab {
|
|
28
|
-
// Identity
|
|
29
|
-
id: string;
|
|
30
|
-
url: string;
|
|
31
|
-
title: string;
|
|
32
|
-
favicon?: string;
|
|
33
|
-
isActive: boolean;
|
|
34
|
-
|
|
35
|
-
// Browser instances (from pool)
|
|
36
|
-
browser: Browser; // Shared browser reference
|
|
37
|
-
context: BrowserContext; // Isolated context (cookies, localStorage, etc.)
|
|
38
|
-
page: Page;
|
|
39
|
-
|
|
40
|
-
// Streaming
|
|
41
|
-
isStreaming: boolean;
|
|
42
|
-
quality: 'perfect' | 'good';
|
|
43
|
-
screenshotInterval?: NodeJS.Timeout;
|
|
44
|
-
streamingInterval?: NodeJS.Timeout;
|
|
45
|
-
isCapturing?: boolean;
|
|
46
|
-
|
|
47
|
-
// Device
|
|
48
|
-
deviceSize: DeviceSize;
|
|
49
|
-
rotation: Rotation;
|
|
50
|
-
|
|
51
|
-
// Console
|
|
52
|
-
consoleLogs: BrowserConsoleMessage[];
|
|
53
|
-
consoleEnabled: boolean;
|
|
54
|
-
|
|
55
|
-
// Navigation
|
|
56
|
-
isLoading: boolean;
|
|
57
|
-
canGoBack: boolean;
|
|
58
|
-
canGoForward: boolean;
|
|
59
|
-
lastNavigationTime?: number;
|
|
60
|
-
currentUrl?: string;
|
|
61
|
-
|
|
62
|
-
// Streaming internals
|
|
63
|
-
lastFrameHash?: string;
|
|
64
|
-
duplicateFrameCount?: number;
|
|
65
|
-
lastUniqueFrameTime?: number;
|
|
66
|
-
stableFrameStartTime?: number;
|
|
67
|
-
lastCursorInfo?: { x: number; y: number; cursor: string };
|
|
68
|
-
scale?: number; // Frontend canvas scale factor (for bandwidth optimization)
|
|
69
|
-
|
|
70
|
-
// Interaction tracking
|
|
71
|
-
lastInteractionTime?: number;
|
|
72
|
-
lastInteractionLogTime?: number;
|
|
73
|
-
|
|
74
|
-
// Timestamps
|
|
75
|
-
createdAt: number;
|
|
76
|
-
lastAccessedAt: number;
|
|
77
|
-
|
|
78
|
-
// Internal
|
|
79
|
-
isDestroyed?: boolean;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Tab Events
|
|
84
|
-
*/
|
|
85
|
-
export interface TabCreatedEvent {
|
|
86
|
-
tabId: string;
|
|
87
|
-
url: string;
|
|
88
|
-
title: string;
|
|
89
|
-
isActive: boolean;
|
|
90
|
-
timestamp: number;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export interface TabClosedEvent {
|
|
94
|
-
tabId: string;
|
|
95
|
-
newActiveTabId?: string;
|
|
96
|
-
timestamp: number;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export interface TabSwitchedEvent {
|
|
100
|
-
previousTabId: string;
|
|
101
|
-
newTabId: string;
|
|
102
|
-
timestamp: number;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
export interface TabNavigatedEvent {
|
|
106
|
-
tabId: string;
|
|
107
|
-
url: string;
|
|
108
|
-
title: string;
|
|
109
|
-
timestamp: number;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
export interface BrowserTabInfo {
|
|
113
|
-
id: string;
|
|
114
|
-
url: string;
|
|
115
|
-
title: string;
|
|
116
|
-
quality: 'perfect' | 'good';
|
|
117
|
-
isStreaming: boolean;
|
|
118
|
-
deviceSize: DeviceSize;
|
|
119
|
-
rotation: Rotation;
|
|
120
|
-
isActive: boolean;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
export interface BrowserAutonomousAction {
|
|
124
|
-
/**
|
|
125
|
-
* Action types (minimal, native-only, no DOM):
|
|
126
|
-
* - 'click': Mouse click at coordinates (x, y)
|
|
127
|
-
* - 'type': Keyboard input - type text OR press single key
|
|
128
|
-
* - 'move': Move mouse to coordinates (x, y)
|
|
129
|
-
* - 'scroll': Scroll by delta amount, optionally at target area (x, y)
|
|
130
|
-
* - 'wait': Wait for specified delay
|
|
131
|
-
* - 'extract_data': Extract data from DOM element using CSS selector
|
|
132
|
-
*
|
|
133
|
-
* All interactions use native browser input (no DOM manipulation except extract_data)
|
|
134
|
-
*/
|
|
135
|
-
type: 'click' | 'type' | 'move' | 'scroll' | 'wait' | 'extract_data';
|
|
136
|
-
|
|
137
|
-
// Coordinates for click/move, or target area for scroll
|
|
138
|
-
x?: number;
|
|
139
|
-
y?: number;
|
|
140
|
-
|
|
141
|
-
// For scroll action - scroll delta amounts
|
|
142
|
-
deltaX?: number;
|
|
143
|
-
deltaY?: number;
|
|
144
|
-
|
|
145
|
-
// For click action
|
|
146
|
-
click?: 'left' | 'right' | 'middle'; // Mouse button (default: 'left')
|
|
147
|
-
|
|
148
|
-
// For type action - either text OR key, not both
|
|
149
|
-
text?: string; // Type a string of text
|
|
150
|
-
key?: string; // Press a single key (Enter, Tab, Escape, ArrowUp, etc.)
|
|
151
|
-
clearFirst?: boolean; // Clear existing input before typing (default: true for MCP, false for user)
|
|
152
|
-
|
|
153
|
-
// For extract_data action
|
|
154
|
-
selector?: string; // Element identifier - tool automatically tries all selector patterns and attributes
|
|
155
|
-
|
|
156
|
-
// Timing options
|
|
157
|
-
delay?: number;
|
|
158
|
-
steps?: number; // For mouse movement interpolation
|
|
159
|
-
|
|
160
|
-
// Behavior options
|
|
161
|
-
humanLike?: boolean; // Simulate human-like movement/typing
|
|
162
|
-
smooth?: boolean; // For smooth scrolling
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
export interface BrowserNavigationEvent {
|
|
166
|
-
tabId: string;
|
|
167
|
-
type: 'navigation';
|
|
168
|
-
url: string;
|
|
169
|
-
timestamp: number;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
export interface BrowserNavigationLoadingEvent {
|
|
173
|
-
tabId: string;
|
|
174
|
-
type: 'navigation-loading';
|
|
175
|
-
url: string;
|
|
176
|
-
timestamp: number;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
export interface BrowserCursorPosition {
|
|
180
|
-
tabId: string;
|
|
181
|
-
x: number;
|
|
182
|
-
y: number;
|
|
183
|
-
timestamp: number;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
export interface BrowserConsoleEvent {
|
|
187
|
-
tabId: string;
|
|
188
|
-
message: BrowserConsoleMessage;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
export interface BrowserScreenshotFrame {
|
|
192
|
-
tabId: string;
|
|
193
|
-
frame: number;
|
|
194
|
-
timestamp: number;
|
|
195
|
-
data: string;
|
|
196
|
-
cursorInfo: any;
|
|
197
|
-
duplicatesSkipped: number;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
* Unified Streaming Configuration
|
|
202
|
-
*
|
|
203
|
-
* Central configuration for WebCodecs streaming (video + audio).
|
|
204
|
-
* Used across audio capture, video capture, and session management.
|
|
205
|
-
*
|
|
206
|
-
* Single source of truth for all codec settings.
|
|
207
|
-
*/
|
|
208
|
-
export interface StreamingConfig {
|
|
209
|
-
video: {
|
|
210
|
-
codec: string;
|
|
211
|
-
width: number;
|
|
212
|
-
height: number;
|
|
213
|
-
framerate: number;
|
|
214
|
-
bitrate: number;
|
|
215
|
-
keyframeInterval: number;
|
|
216
|
-
screenshotQuality: number;
|
|
217
|
-
hardwareAcceleration: 'no-preference' | 'prefer-hardware' | 'prefer-software';
|
|
218
|
-
latencyMode: 'quality' | 'realtime';
|
|
219
|
-
};
|
|
220
|
-
audio: {
|
|
221
|
-
codec: string
|
|
222
|
-
sampleRate: number;
|
|
223
|
-
bitrate: number;
|
|
224
|
-
numberOfChannels: number;
|
|
225
|
-
bufferSize: number;
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* Default streaming configuration
|
|
231
|
-
*
|
|
232
|
-
* Optimized for low-end servers without GPU:
|
|
233
|
-
* - Software encoding only (hardwareAcceleration: 'no-preference')
|
|
234
|
-
* - Lower bitrate for bandwidth efficiency
|
|
235
|
-
* - VP8 for video (good software encoder performance)
|
|
236
|
-
* - Opus for audio (efficient and widely supported)
|
|
237
|
-
*/
|
|
238
|
-
export const DEFAULT_STREAMING_CONFIG: StreamingConfig = {
|
|
239
|
-
video: {
|
|
240
|
-
codec: 'vp8',
|
|
241
|
-
width: 0,
|
|
242
|
-
height: 0,
|
|
243
|
-
framerate: 24,
|
|
244
|
-
bitrate: 600_000,
|
|
245
|
-
keyframeInterval: 2,
|
|
246
|
-
screenshotQuality: 35,
|
|
247
|
-
hardwareAcceleration: 'no-preference',
|
|
248
|
-
latencyMode: 'realtime'
|
|
249
|
-
},
|
|
250
|
-
audio: {
|
|
251
|
-
codec: 'opus',
|
|
252
|
-
sampleRate: 48_000,
|
|
253
|
-
bitrate: 128_000,
|
|
254
|
-
numberOfChannels: 2,
|
|
255
|
-
bufferSize: 4096
|
|
256
|
-
}
|
|
257
|
-
};
|
|
258
|
-
|
|
259
|
-
/**
|
|
260
|
-
* Native UI Dialog Types
|
|
261
|
-
* Intercepted from headless browser and re-rendered as native dialogs
|
|
262
|
-
*/
|
|
263
|
-
export interface BrowserDialogEvent {
|
|
264
|
-
tabId: string;
|
|
265
|
-
dialogId: string;
|
|
266
|
-
type: 'alert' | 'confirm' | 'prompt' | 'beforeunload';
|
|
267
|
-
message: string;
|
|
268
|
-
defaultValue?: string; // For prompt dialogs
|
|
269
|
-
timestamp: number;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
export interface BrowserDialogResponse {
|
|
273
|
-
tabId: string;
|
|
274
|
-
dialogId: string;
|
|
275
|
-
accept: boolean; // true = OK/Yes, false = Cancel/No
|
|
276
|
-
promptText?: string; // For prompt dialogs
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
/**
|
|
280
|
-
* Print Request Event
|
|
281
|
-
* Intercepted from window.print() calls
|
|
282
|
-
*/
|
|
283
|
-
export interface BrowserPrintEvent {
|
|
284
|
-
tabId: string;
|
|
285
|
-
timestamp: number;
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
/**
|
|
289
|
-
* Select Dropdown Types
|
|
290
|
-
* For rendering native select dropdowns over canvas
|
|
291
|
-
*/
|
|
292
|
-
export interface BrowserSelectOption {
|
|
293
|
-
index: number;
|
|
294
|
-
value: string;
|
|
295
|
-
text: string;
|
|
296
|
-
selected: boolean;
|
|
297
|
-
disabled?: boolean;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
export interface BrowserSelectInfo {
|
|
301
|
-
tabId: string;
|
|
302
|
-
selectId: string;
|
|
303
|
-
x: number; // Click coordinates
|
|
304
|
-
y: number;
|
|
305
|
-
boundingBox: {
|
|
306
|
-
x: number;
|
|
307
|
-
y: number;
|
|
308
|
-
width: number;
|
|
309
|
-
height: number;
|
|
310
|
-
};
|
|
311
|
-
options: BrowserSelectOption[];
|
|
312
|
-
selectedIndex: number;
|
|
313
|
-
timestamp: number;
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
export interface BrowserSelectResponse {
|
|
317
|
-
tabId: string;
|
|
318
|
-
selectId: string;
|
|
319
|
-
selectedIndex: number;
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
/**
|
|
323
|
-
* Context Menu Types
|
|
324
|
-
* For rendering native context menus over canvas
|
|
325
|
-
*/
|
|
326
|
-
export interface BrowserContextMenuItem {
|
|
327
|
-
id: string;
|
|
328
|
-
label: string;
|
|
329
|
-
enabled: boolean;
|
|
330
|
-
type?: 'normal' | 'separator' | 'submenu';
|
|
331
|
-
icon?: string;
|
|
332
|
-
submenu?: BrowserContextMenuItem[];
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
export interface BrowserContextMenuInfo {
|
|
336
|
-
tabId: string;
|
|
337
|
-
menuId: string;
|
|
338
|
-
x: number; // Click coordinates
|
|
339
|
-
y: number;
|
|
340
|
-
items: BrowserContextMenuItem[];
|
|
341
|
-
elementInfo: {
|
|
342
|
-
tagName: string;
|
|
343
|
-
isLink: boolean;
|
|
344
|
-
isImage: boolean;
|
|
345
|
-
isInput: boolean;
|
|
346
|
-
isTextSelected: boolean;
|
|
347
|
-
linkUrl?: string;
|
|
348
|
-
imageUrl?: string;
|
|
349
|
-
inputType?: string;
|
|
350
|
-
};
|
|
351
|
-
timestamp: number;
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
export interface BrowserContextMenuResponse {
|
|
355
|
-
tabId: string;
|
|
356
|
-
menuId: string;
|
|
357
|
-
itemId: string; // Selected menu item ID
|
|
358
|
-
}
|
|
359
|
-
|
|
1
|
+
import type { Browser, BrowserContext, Page } from 'puppeteer';
|
|
2
|
+
import type { DeviceSize, Rotation } from '$frontend/lib/constants/preview.js';
|
|
3
|
+
|
|
4
|
+
// Re-export types from preview config
|
|
5
|
+
export type { DeviceSize, Rotation };
|
|
6
|
+
|
|
7
|
+
export interface BrowserConsoleMessage {
|
|
8
|
+
id: string;
|
|
9
|
+
type: 'log' | 'info' | 'warn' | 'error' | 'debug' | 'trace' | 'clear';
|
|
10
|
+
text: string;
|
|
11
|
+
args?: unknown[];
|
|
12
|
+
location?: {
|
|
13
|
+
url: string;
|
|
14
|
+
lineNumber: number;
|
|
15
|
+
columnNumber: number;
|
|
16
|
+
};
|
|
17
|
+
stackTrace?: string;
|
|
18
|
+
timestamp: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Browser Tab Interface
|
|
23
|
+
*
|
|
24
|
+
* Tab-centric architecture where each tab represents a complete browser instance
|
|
25
|
+
* (context + page) from the browser pool. No separate "session" concept.
|
|
26
|
+
*/
|
|
27
|
+
export interface BrowserTab {
|
|
28
|
+
// Identity
|
|
29
|
+
id: string;
|
|
30
|
+
url: string;
|
|
31
|
+
title: string;
|
|
32
|
+
favicon?: string;
|
|
33
|
+
isActive: boolean;
|
|
34
|
+
|
|
35
|
+
// Browser instances (from pool)
|
|
36
|
+
browser: Browser; // Shared browser reference
|
|
37
|
+
context: BrowserContext; // Isolated context (cookies, localStorage, etc.)
|
|
38
|
+
page: Page;
|
|
39
|
+
|
|
40
|
+
// Streaming
|
|
41
|
+
isStreaming: boolean;
|
|
42
|
+
quality: 'perfect' | 'good';
|
|
43
|
+
screenshotInterval?: NodeJS.Timeout;
|
|
44
|
+
streamingInterval?: NodeJS.Timeout;
|
|
45
|
+
isCapturing?: boolean;
|
|
46
|
+
|
|
47
|
+
// Device
|
|
48
|
+
deviceSize: DeviceSize;
|
|
49
|
+
rotation: Rotation;
|
|
50
|
+
|
|
51
|
+
// Console
|
|
52
|
+
consoleLogs: BrowserConsoleMessage[];
|
|
53
|
+
consoleEnabled: boolean;
|
|
54
|
+
|
|
55
|
+
// Navigation
|
|
56
|
+
isLoading: boolean;
|
|
57
|
+
canGoBack: boolean;
|
|
58
|
+
canGoForward: boolean;
|
|
59
|
+
lastNavigationTime?: number;
|
|
60
|
+
currentUrl?: string;
|
|
61
|
+
|
|
62
|
+
// Streaming internals
|
|
63
|
+
lastFrameHash?: string;
|
|
64
|
+
duplicateFrameCount?: number;
|
|
65
|
+
lastUniqueFrameTime?: number;
|
|
66
|
+
stableFrameStartTime?: number;
|
|
67
|
+
lastCursorInfo?: { x: number; y: number; cursor: string };
|
|
68
|
+
scale?: number; // Frontend canvas scale factor (for bandwidth optimization)
|
|
69
|
+
|
|
70
|
+
// Interaction tracking
|
|
71
|
+
lastInteractionTime?: number;
|
|
72
|
+
lastInteractionLogTime?: number;
|
|
73
|
+
|
|
74
|
+
// Timestamps
|
|
75
|
+
createdAt: number;
|
|
76
|
+
lastAccessedAt: number;
|
|
77
|
+
|
|
78
|
+
// Internal
|
|
79
|
+
isDestroyed?: boolean;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Tab Events
|
|
84
|
+
*/
|
|
85
|
+
export interface TabCreatedEvent {
|
|
86
|
+
tabId: string;
|
|
87
|
+
url: string;
|
|
88
|
+
title: string;
|
|
89
|
+
isActive: boolean;
|
|
90
|
+
timestamp: number;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export interface TabClosedEvent {
|
|
94
|
+
tabId: string;
|
|
95
|
+
newActiveTabId?: string;
|
|
96
|
+
timestamp: number;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export interface TabSwitchedEvent {
|
|
100
|
+
previousTabId: string;
|
|
101
|
+
newTabId: string;
|
|
102
|
+
timestamp: number;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export interface TabNavigatedEvent {
|
|
106
|
+
tabId: string;
|
|
107
|
+
url: string;
|
|
108
|
+
title: string;
|
|
109
|
+
timestamp: number;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export interface BrowserTabInfo {
|
|
113
|
+
id: string;
|
|
114
|
+
url: string;
|
|
115
|
+
title: string;
|
|
116
|
+
quality: 'perfect' | 'good';
|
|
117
|
+
isStreaming: boolean;
|
|
118
|
+
deviceSize: DeviceSize;
|
|
119
|
+
rotation: Rotation;
|
|
120
|
+
isActive: boolean;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export interface BrowserAutonomousAction {
|
|
124
|
+
/**
|
|
125
|
+
* Action types (minimal, native-only, no DOM):
|
|
126
|
+
* - 'click': Mouse click at coordinates (x, y)
|
|
127
|
+
* - 'type': Keyboard input - type text OR press single key
|
|
128
|
+
* - 'move': Move mouse to coordinates (x, y)
|
|
129
|
+
* - 'scroll': Scroll by delta amount, optionally at target area (x, y)
|
|
130
|
+
* - 'wait': Wait for specified delay
|
|
131
|
+
* - 'extract_data': Extract data from DOM element using CSS selector
|
|
132
|
+
*
|
|
133
|
+
* All interactions use native browser input (no DOM manipulation except extract_data)
|
|
134
|
+
*/
|
|
135
|
+
type: 'click' | 'type' | 'move' | 'scroll' | 'wait' | 'extract_data';
|
|
136
|
+
|
|
137
|
+
// Coordinates for click/move, or target area for scroll
|
|
138
|
+
x?: number;
|
|
139
|
+
y?: number;
|
|
140
|
+
|
|
141
|
+
// For scroll action - scroll delta amounts
|
|
142
|
+
deltaX?: number;
|
|
143
|
+
deltaY?: number;
|
|
144
|
+
|
|
145
|
+
// For click action
|
|
146
|
+
click?: 'left' | 'right' | 'middle'; // Mouse button (default: 'left')
|
|
147
|
+
|
|
148
|
+
// For type action - either text OR key, not both
|
|
149
|
+
text?: string; // Type a string of text
|
|
150
|
+
key?: string; // Press a single key (Enter, Tab, Escape, ArrowUp, etc.)
|
|
151
|
+
clearFirst?: boolean; // Clear existing input before typing (default: true for MCP, false for user)
|
|
152
|
+
|
|
153
|
+
// For extract_data action
|
|
154
|
+
selector?: string; // Element identifier - tool automatically tries all selector patterns and attributes
|
|
155
|
+
|
|
156
|
+
// Timing options
|
|
157
|
+
delay?: number;
|
|
158
|
+
steps?: number; // For mouse movement interpolation
|
|
159
|
+
|
|
160
|
+
// Behavior options
|
|
161
|
+
humanLike?: boolean; // Simulate human-like movement/typing
|
|
162
|
+
smooth?: boolean; // For smooth scrolling
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export interface BrowserNavigationEvent {
|
|
166
|
+
tabId: string;
|
|
167
|
+
type: 'navigation';
|
|
168
|
+
url: string;
|
|
169
|
+
timestamp: number;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export interface BrowserNavigationLoadingEvent {
|
|
173
|
+
tabId: string;
|
|
174
|
+
type: 'navigation-loading';
|
|
175
|
+
url: string;
|
|
176
|
+
timestamp: number;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export interface BrowserCursorPosition {
|
|
180
|
+
tabId: string;
|
|
181
|
+
x: number;
|
|
182
|
+
y: number;
|
|
183
|
+
timestamp: number;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export interface BrowserConsoleEvent {
|
|
187
|
+
tabId: string;
|
|
188
|
+
message: BrowserConsoleMessage;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export interface BrowserScreenshotFrame {
|
|
192
|
+
tabId: string;
|
|
193
|
+
frame: number;
|
|
194
|
+
timestamp: number;
|
|
195
|
+
data: string;
|
|
196
|
+
cursorInfo: any;
|
|
197
|
+
duplicatesSkipped: number;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Unified Streaming Configuration
|
|
202
|
+
*
|
|
203
|
+
* Central configuration for WebCodecs streaming (video + audio).
|
|
204
|
+
* Used across audio capture, video capture, and session management.
|
|
205
|
+
*
|
|
206
|
+
* Single source of truth for all codec settings.
|
|
207
|
+
*/
|
|
208
|
+
export interface StreamingConfig {
|
|
209
|
+
video: {
|
|
210
|
+
codec: string;
|
|
211
|
+
width: number;
|
|
212
|
+
height: number;
|
|
213
|
+
framerate: number;
|
|
214
|
+
bitrate: number;
|
|
215
|
+
keyframeInterval: number;
|
|
216
|
+
screenshotQuality: number;
|
|
217
|
+
hardwareAcceleration: 'no-preference' | 'prefer-hardware' | 'prefer-software';
|
|
218
|
+
latencyMode: 'quality' | 'realtime';
|
|
219
|
+
};
|
|
220
|
+
audio: {
|
|
221
|
+
codec: string
|
|
222
|
+
sampleRate: number;
|
|
223
|
+
bitrate: number;
|
|
224
|
+
numberOfChannels: number;
|
|
225
|
+
bufferSize: number;
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Default streaming configuration
|
|
231
|
+
*
|
|
232
|
+
* Optimized for low-end servers without GPU:
|
|
233
|
+
* - Software encoding only (hardwareAcceleration: 'no-preference')
|
|
234
|
+
* - Lower bitrate for bandwidth efficiency
|
|
235
|
+
* - VP8 for video (good software encoder performance)
|
|
236
|
+
* - Opus for audio (efficient and widely supported)
|
|
237
|
+
*/
|
|
238
|
+
export const DEFAULT_STREAMING_CONFIG: StreamingConfig = {
|
|
239
|
+
video: {
|
|
240
|
+
codec: 'vp8',
|
|
241
|
+
width: 0,
|
|
242
|
+
height: 0,
|
|
243
|
+
framerate: 24,
|
|
244
|
+
bitrate: 600_000,
|
|
245
|
+
keyframeInterval: 2,
|
|
246
|
+
screenshotQuality: 35,
|
|
247
|
+
hardwareAcceleration: 'no-preference',
|
|
248
|
+
latencyMode: 'realtime'
|
|
249
|
+
},
|
|
250
|
+
audio: {
|
|
251
|
+
codec: 'opus',
|
|
252
|
+
sampleRate: 48_000,
|
|
253
|
+
bitrate: 128_000,
|
|
254
|
+
numberOfChannels: 2,
|
|
255
|
+
bufferSize: 4096
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Native UI Dialog Types
|
|
261
|
+
* Intercepted from headless browser and re-rendered as native dialogs
|
|
262
|
+
*/
|
|
263
|
+
export interface BrowserDialogEvent {
|
|
264
|
+
tabId: string;
|
|
265
|
+
dialogId: string;
|
|
266
|
+
type: 'alert' | 'confirm' | 'prompt' | 'beforeunload';
|
|
267
|
+
message: string;
|
|
268
|
+
defaultValue?: string; // For prompt dialogs
|
|
269
|
+
timestamp: number;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
export interface BrowserDialogResponse {
|
|
273
|
+
tabId: string;
|
|
274
|
+
dialogId: string;
|
|
275
|
+
accept: boolean; // true = OK/Yes, false = Cancel/No
|
|
276
|
+
promptText?: string; // For prompt dialogs
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Print Request Event
|
|
281
|
+
* Intercepted from window.print() calls
|
|
282
|
+
*/
|
|
283
|
+
export interface BrowserPrintEvent {
|
|
284
|
+
tabId: string;
|
|
285
|
+
timestamp: number;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Select Dropdown Types
|
|
290
|
+
* For rendering native select dropdowns over canvas
|
|
291
|
+
*/
|
|
292
|
+
export interface BrowserSelectOption {
|
|
293
|
+
index: number;
|
|
294
|
+
value: string;
|
|
295
|
+
text: string;
|
|
296
|
+
selected: boolean;
|
|
297
|
+
disabled?: boolean;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export interface BrowserSelectInfo {
|
|
301
|
+
tabId: string;
|
|
302
|
+
selectId: string;
|
|
303
|
+
x: number; // Click coordinates
|
|
304
|
+
y: number;
|
|
305
|
+
boundingBox: {
|
|
306
|
+
x: number;
|
|
307
|
+
y: number;
|
|
308
|
+
width: number;
|
|
309
|
+
height: number;
|
|
310
|
+
};
|
|
311
|
+
options: BrowserSelectOption[];
|
|
312
|
+
selectedIndex: number;
|
|
313
|
+
timestamp: number;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
export interface BrowserSelectResponse {
|
|
317
|
+
tabId: string;
|
|
318
|
+
selectId: string;
|
|
319
|
+
selectedIndex: number;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Context Menu Types
|
|
324
|
+
* For rendering native context menus over canvas
|
|
325
|
+
*/
|
|
326
|
+
export interface BrowserContextMenuItem {
|
|
327
|
+
id: string;
|
|
328
|
+
label: string;
|
|
329
|
+
enabled: boolean;
|
|
330
|
+
type?: 'normal' | 'separator' | 'submenu';
|
|
331
|
+
icon?: string;
|
|
332
|
+
submenu?: BrowserContextMenuItem[];
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
export interface BrowserContextMenuInfo {
|
|
336
|
+
tabId: string;
|
|
337
|
+
menuId: string;
|
|
338
|
+
x: number; // Click coordinates
|
|
339
|
+
y: number;
|
|
340
|
+
items: BrowserContextMenuItem[];
|
|
341
|
+
elementInfo: {
|
|
342
|
+
tagName: string;
|
|
343
|
+
isLink: boolean;
|
|
344
|
+
isImage: boolean;
|
|
345
|
+
isInput: boolean;
|
|
346
|
+
isTextSelected: boolean;
|
|
347
|
+
linkUrl?: string;
|
|
348
|
+
imageUrl?: string;
|
|
349
|
+
inputType?: string;
|
|
350
|
+
};
|
|
351
|
+
timestamp: number;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
export interface BrowserContextMenuResponse {
|
|
355
|
+
tabId: string;
|
|
356
|
+
menuId: string;
|
|
357
|
+
itemId: string; // Selected menu item ID
|
|
358
|
+
}
|
|
359
|
+
|