@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,196 +1,196 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Engine Registry & Factory
|
|
3
|
-
*
|
|
4
|
-
* Central management of AI engine instances.
|
|
5
|
-
*
|
|
6
|
-
* Two tiers:
|
|
7
|
-
* - Global singletons (getEngine / initializeEngine):
|
|
8
|
-
* Used for non-streaming operations like models:list, settings, etc.
|
|
9
|
-
*
|
|
10
|
-
* - Per-project instances (getProjectEngine / initializeProjectEngine):
|
|
11
|
-
* Used by stream-manager for chat streaming.
|
|
12
|
-
* Each project gets its own engine instance so abort controllers,
|
|
13
|
-
* active queries, and session IDs are fully isolated.
|
|
14
|
-
* Cancelling Project A's stream never affects Project B.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import type { AIEngine, EngineType } from './types';
|
|
18
|
-
import { ClaudeCodeEngine } from './adapters/claude';
|
|
19
|
-
import { OpenCodeEngine, disposeOpenCodeClient } from './adapters/opencode';
|
|
20
|
-
import { debug } from '$shared/utils/logger';
|
|
21
|
-
|
|
22
|
-
// ============================================================================
|
|
23
|
-
// Helpers
|
|
24
|
-
// ============================================================================
|
|
25
|
-
|
|
26
|
-
function createEngine(type: EngineType): AIEngine {
|
|
27
|
-
switch (type) {
|
|
28
|
-
case 'claude-code':
|
|
29
|
-
return new ClaudeCodeEngine();
|
|
30
|
-
case 'opencode':
|
|
31
|
-
return new OpenCodeEngine();
|
|
32
|
-
default:
|
|
33
|
-
throw new Error(`Unknown engine type: ${type}`);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// ============================================================================
|
|
38
|
-
// Global Singletons — for non-streaming operations (models, settings, etc.)
|
|
39
|
-
// ============================================================================
|
|
40
|
-
|
|
41
|
-
const engines = new Map<EngineType, AIEngine>();
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Get (or create) a global singleton engine instance by type.
|
|
45
|
-
* Use for non-streaming operations only (e.g. models:list).
|
|
46
|
-
*/
|
|
47
|
-
export function getEngine(type: EngineType): AIEngine {
|
|
48
|
-
let engine = engines.get(type);
|
|
49
|
-
|
|
50
|
-
if (!engine) {
|
|
51
|
-
engine = createEngine(type);
|
|
52
|
-
engines.set(type, engine);
|
|
53
|
-
debug.log('engine', `Global engine instance created: ${type}`);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return engine;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Initialize a global engine (call this before streaming if you want eager init).
|
|
61
|
-
*/
|
|
62
|
-
export async function initializeEngine(type: EngineType): Promise<AIEngine> {
|
|
63
|
-
const engine = getEngine(type);
|
|
64
|
-
if (!engine.isInitialized) {
|
|
65
|
-
await engine.initialize();
|
|
66
|
-
}
|
|
67
|
-
return engine;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Dispose a specific global engine and release its resources.
|
|
72
|
-
*/
|
|
73
|
-
export async function disposeEngine(type: EngineType): Promise<void> {
|
|
74
|
-
const engine = engines.get(type);
|
|
75
|
-
if (engine) {
|
|
76
|
-
await engine.dispose();
|
|
77
|
-
engines.delete(type);
|
|
78
|
-
debug.log('engine', `Global engine disposed: ${type}`);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Dispose all global engines (used on server shutdown).
|
|
84
|
-
*/
|
|
85
|
-
export async function disposeAllEngines(): Promise<void> {
|
|
86
|
-
for (const [type, engine] of engines) {
|
|
87
|
-
try {
|
|
88
|
-
await engine.dispose();
|
|
89
|
-
debug.log('engine', `Global engine disposed: ${type}`);
|
|
90
|
-
} catch (error) {
|
|
91
|
-
debug.error('engine', `Error disposing global engine ${type}:`, error);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
engines.clear();
|
|
95
|
-
|
|
96
|
-
// Also dispose all project engines
|
|
97
|
-
await disposeAllProjectEngines();
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// ============================================================================
|
|
101
|
-
// Per-Project Instances — for streaming (fully isolated per project)
|
|
102
|
-
// ============================================================================
|
|
103
|
-
|
|
104
|
-
/** projectId → (engineType → AIEngine) */
|
|
105
|
-
const projectEngines = new Map<string, Map<EngineType, AIEngine>>();
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Get (or create) an engine instance scoped to a specific project.
|
|
109
|
-
* Each project gets its own engine with independent state (abort controllers,
|
|
110
|
-
* active queries, session IDs), ensuring complete stream isolation.
|
|
111
|
-
*/
|
|
112
|
-
export function getProjectEngine(projectId: string, type: EngineType): AIEngine {
|
|
113
|
-
if (!projectEngines.has(projectId)) {
|
|
114
|
-
projectEngines.set(projectId, new Map());
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
const engines = projectEngines.get(projectId)!;
|
|
118
|
-
let engine = engines.get(type);
|
|
119
|
-
|
|
120
|
-
if (!engine) {
|
|
121
|
-
engine = createEngine(type);
|
|
122
|
-
engines.set(type, engine);
|
|
123
|
-
debug.log('engine', `Project engine created: ${type} for project ${projectId.slice(0, 8)}`);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
return engine;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Initialize a project-scoped engine.
|
|
131
|
-
*/
|
|
132
|
-
export async function initializeProjectEngine(projectId: string, type: EngineType): Promise<AIEngine> {
|
|
133
|
-
const engine = getProjectEngine(projectId, type);
|
|
134
|
-
if (!engine.isInitialized) {
|
|
135
|
-
await engine.initialize();
|
|
136
|
-
}
|
|
137
|
-
return engine;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Dispose a specific project engine.
|
|
142
|
-
*/
|
|
143
|
-
export async function disposeProjectEngine(projectId: string, type: EngineType): Promise<void> {
|
|
144
|
-
const engines = projectEngines.get(projectId);
|
|
145
|
-
if (engines) {
|
|
146
|
-
const engine = engines.get(type);
|
|
147
|
-
if (engine) {
|
|
148
|
-
await engine.dispose();
|
|
149
|
-
engines.delete(type);
|
|
150
|
-
debug.log('engine', `Project engine disposed: ${type} for project ${projectId.slice(0, 8)}`);
|
|
151
|
-
}
|
|
152
|
-
if (engines.size === 0) {
|
|
153
|
-
projectEngines.delete(projectId);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Dispose all engines for a specific project.
|
|
160
|
-
*/
|
|
161
|
-
export async function disposeProjectEngines(projectId: string): Promise<void> {
|
|
162
|
-
const engines = projectEngines.get(projectId);
|
|
163
|
-
if (engines) {
|
|
164
|
-
for (const [type, engine] of engines) {
|
|
165
|
-
try {
|
|
166
|
-
await engine.dispose();
|
|
167
|
-
debug.log('engine', `Project engine disposed: ${type} for project ${projectId.slice(0, 8)}`);
|
|
168
|
-
} catch (error) {
|
|
169
|
-
debug.error('engine', `Error disposing project engine ${type}:`, error);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
projectEngines.delete(projectId);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* Dispose all project engines (used on server shutdown).
|
|
178
|
-
*/
|
|
179
|
-
async function disposeAllProjectEngines(): Promise<void> {
|
|
180
|
-
for (const [projectId, engines] of projectEngines) {
|
|
181
|
-
for (const [type, engine] of engines) {
|
|
182
|
-
try {
|
|
183
|
-
await engine.dispose();
|
|
184
|
-
} catch (error) {
|
|
185
|
-
debug.error('engine', `Error disposing project engine ${type} for ${projectId.slice(0, 8)}:`, error);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
projectEngines.clear();
|
|
190
|
-
|
|
191
|
-
// Dispose the OpenCode client/server (module-level singleton)
|
|
192
|
-
await disposeOpenCodeClient();
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
// Re-export types
|
|
196
|
-
export type { AIEngine, EngineType, EngineQueryOptions } from './types';
|
|
1
|
+
/**
|
|
2
|
+
* Engine Registry & Factory
|
|
3
|
+
*
|
|
4
|
+
* Central management of AI engine instances.
|
|
5
|
+
*
|
|
6
|
+
* Two tiers:
|
|
7
|
+
* - Global singletons (getEngine / initializeEngine):
|
|
8
|
+
* Used for non-streaming operations like models:list, settings, etc.
|
|
9
|
+
*
|
|
10
|
+
* - Per-project instances (getProjectEngine / initializeProjectEngine):
|
|
11
|
+
* Used by stream-manager for chat streaming.
|
|
12
|
+
* Each project gets its own engine instance so abort controllers,
|
|
13
|
+
* active queries, and session IDs are fully isolated.
|
|
14
|
+
* Cancelling Project A's stream never affects Project B.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import type { AIEngine, EngineType } from './types';
|
|
18
|
+
import { ClaudeCodeEngine } from './adapters/claude';
|
|
19
|
+
import { OpenCodeEngine, disposeOpenCodeClient } from './adapters/opencode';
|
|
20
|
+
import { debug } from '$shared/utils/logger';
|
|
21
|
+
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// Helpers
|
|
24
|
+
// ============================================================================
|
|
25
|
+
|
|
26
|
+
function createEngine(type: EngineType): AIEngine {
|
|
27
|
+
switch (type) {
|
|
28
|
+
case 'claude-code':
|
|
29
|
+
return new ClaudeCodeEngine();
|
|
30
|
+
case 'opencode':
|
|
31
|
+
return new OpenCodeEngine();
|
|
32
|
+
default:
|
|
33
|
+
throw new Error(`Unknown engine type: ${type}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// ============================================================================
|
|
38
|
+
// Global Singletons — for non-streaming operations (models, settings, etc.)
|
|
39
|
+
// ============================================================================
|
|
40
|
+
|
|
41
|
+
const engines = new Map<EngineType, AIEngine>();
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Get (or create) a global singleton engine instance by type.
|
|
45
|
+
* Use for non-streaming operations only (e.g. models:list).
|
|
46
|
+
*/
|
|
47
|
+
export function getEngine(type: EngineType): AIEngine {
|
|
48
|
+
let engine = engines.get(type);
|
|
49
|
+
|
|
50
|
+
if (!engine) {
|
|
51
|
+
engine = createEngine(type);
|
|
52
|
+
engines.set(type, engine);
|
|
53
|
+
debug.log('engine', `Global engine instance created: ${type}`);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return engine;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Initialize a global engine (call this before streaming if you want eager init).
|
|
61
|
+
*/
|
|
62
|
+
export async function initializeEngine(type: EngineType): Promise<AIEngine> {
|
|
63
|
+
const engine = getEngine(type);
|
|
64
|
+
if (!engine.isInitialized) {
|
|
65
|
+
await engine.initialize();
|
|
66
|
+
}
|
|
67
|
+
return engine;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Dispose a specific global engine and release its resources.
|
|
72
|
+
*/
|
|
73
|
+
export async function disposeEngine(type: EngineType): Promise<void> {
|
|
74
|
+
const engine = engines.get(type);
|
|
75
|
+
if (engine) {
|
|
76
|
+
await engine.dispose();
|
|
77
|
+
engines.delete(type);
|
|
78
|
+
debug.log('engine', `Global engine disposed: ${type}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Dispose all global engines (used on server shutdown).
|
|
84
|
+
*/
|
|
85
|
+
export async function disposeAllEngines(): Promise<void> {
|
|
86
|
+
for (const [type, engine] of engines) {
|
|
87
|
+
try {
|
|
88
|
+
await engine.dispose();
|
|
89
|
+
debug.log('engine', `Global engine disposed: ${type}`);
|
|
90
|
+
} catch (error) {
|
|
91
|
+
debug.error('engine', `Error disposing global engine ${type}:`, error);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
engines.clear();
|
|
95
|
+
|
|
96
|
+
// Also dispose all project engines
|
|
97
|
+
await disposeAllProjectEngines();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// ============================================================================
|
|
101
|
+
// Per-Project Instances — for streaming (fully isolated per project)
|
|
102
|
+
// ============================================================================
|
|
103
|
+
|
|
104
|
+
/** projectId → (engineType → AIEngine) */
|
|
105
|
+
const projectEngines = new Map<string, Map<EngineType, AIEngine>>();
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Get (or create) an engine instance scoped to a specific project.
|
|
109
|
+
* Each project gets its own engine with independent state (abort controllers,
|
|
110
|
+
* active queries, session IDs), ensuring complete stream isolation.
|
|
111
|
+
*/
|
|
112
|
+
export function getProjectEngine(projectId: string, type: EngineType): AIEngine {
|
|
113
|
+
if (!projectEngines.has(projectId)) {
|
|
114
|
+
projectEngines.set(projectId, new Map());
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const engines = projectEngines.get(projectId)!;
|
|
118
|
+
let engine = engines.get(type);
|
|
119
|
+
|
|
120
|
+
if (!engine) {
|
|
121
|
+
engine = createEngine(type);
|
|
122
|
+
engines.set(type, engine);
|
|
123
|
+
debug.log('engine', `Project engine created: ${type} for project ${projectId.slice(0, 8)}`);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return engine;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Initialize a project-scoped engine.
|
|
131
|
+
*/
|
|
132
|
+
export async function initializeProjectEngine(projectId: string, type: EngineType): Promise<AIEngine> {
|
|
133
|
+
const engine = getProjectEngine(projectId, type);
|
|
134
|
+
if (!engine.isInitialized) {
|
|
135
|
+
await engine.initialize();
|
|
136
|
+
}
|
|
137
|
+
return engine;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Dispose a specific project engine.
|
|
142
|
+
*/
|
|
143
|
+
export async function disposeProjectEngine(projectId: string, type: EngineType): Promise<void> {
|
|
144
|
+
const engines = projectEngines.get(projectId);
|
|
145
|
+
if (engines) {
|
|
146
|
+
const engine = engines.get(type);
|
|
147
|
+
if (engine) {
|
|
148
|
+
await engine.dispose();
|
|
149
|
+
engines.delete(type);
|
|
150
|
+
debug.log('engine', `Project engine disposed: ${type} for project ${projectId.slice(0, 8)}`);
|
|
151
|
+
}
|
|
152
|
+
if (engines.size === 0) {
|
|
153
|
+
projectEngines.delete(projectId);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Dispose all engines for a specific project.
|
|
160
|
+
*/
|
|
161
|
+
export async function disposeProjectEngines(projectId: string): Promise<void> {
|
|
162
|
+
const engines = projectEngines.get(projectId);
|
|
163
|
+
if (engines) {
|
|
164
|
+
for (const [type, engine] of engines) {
|
|
165
|
+
try {
|
|
166
|
+
await engine.dispose();
|
|
167
|
+
debug.log('engine', `Project engine disposed: ${type} for project ${projectId.slice(0, 8)}`);
|
|
168
|
+
} catch (error) {
|
|
169
|
+
debug.error('engine', `Error disposing project engine ${type}:`, error);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
projectEngines.delete(projectId);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Dispose all project engines (used on server shutdown).
|
|
178
|
+
*/
|
|
179
|
+
async function disposeAllProjectEngines(): Promise<void> {
|
|
180
|
+
for (const [projectId, engines] of projectEngines) {
|
|
181
|
+
for (const [type, engine] of engines) {
|
|
182
|
+
try {
|
|
183
|
+
await engine.dispose();
|
|
184
|
+
} catch (error) {
|
|
185
|
+
debug.error('engine', `Error disposing project engine ${type} for ${projectId.slice(0, 8)}:`, error);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
projectEngines.clear();
|
|
190
|
+
|
|
191
|
+
// Dispose the OpenCode client/server (module-level singleton)
|
|
192
|
+
await disposeOpenCodeClient();
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Re-export types
|
|
196
|
+
export type { AIEngine, EngineType, EngineQueryOptions } from './types';
|
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Engine Types (Backend)
|
|
3
|
-
*
|
|
4
|
-
* Defines the AIEngine interface that all engine adapters must implement.
|
|
5
|
-
* Every adapter normalizes its output to Claude SDK format (SDKMessage)
|
|
6
|
-
* so stream-manager and frontend remain engine-agnostic.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import type { SDKMessage, SDKUserMessage, EngineSDKMessage } from '$shared/types/messaging';
|
|
10
|
-
import type { EngineType, EngineModel } from '$shared/types/engine';
|
|
11
|
-
|
|
12
|
-
export type { EngineType, EngineModel };
|
|
13
|
-
|
|
14
|
-
/** Options passed to engine.streamQuery() */
|
|
15
|
-
export interface EngineQueryOptions {
|
|
16
|
-
projectPath: string;
|
|
17
|
-
prompt: SDKUserMessage;
|
|
18
|
-
resume?: string;
|
|
19
|
-
forkSession?: boolean;
|
|
20
|
-
maxTurns?: number;
|
|
21
|
-
model?: string;
|
|
22
|
-
includePartialMessages?: boolean;
|
|
23
|
-
abortController?: AbortController;
|
|
24
|
-
claudeAccountId?: number;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/** The contract every engine adapter must fulfil */
|
|
28
|
-
export interface AIEngine {
|
|
29
|
-
/** Engine identifier */
|
|
30
|
-
readonly name: EngineType;
|
|
31
|
-
|
|
32
|
-
/** Whether the engine has been initialized */
|
|
33
|
-
readonly isInitialized: boolean;
|
|
34
|
-
|
|
35
|
-
/** Lazy initialization (start server, load config, etc.) */
|
|
36
|
-
initialize(): Promise<void>;
|
|
37
|
-
|
|
38
|
-
/** Cleanup resources */
|
|
39
|
-
dispose(): Promise<void>;
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Stream a query.
|
|
43
|
-
* MUST yield messages in Claude SDK format (SDKMessage).
|
|
44
|
-
*/
|
|
45
|
-
streamQuery(options: EngineQueryOptions): AsyncGenerator<EngineSDKMessage, void, unknown>;
|
|
46
|
-
|
|
47
|
-
/** Cancel the active query */
|
|
48
|
-
cancel(): Promise<void>;
|
|
49
|
-
|
|
50
|
-
/** Interrupt the active query (soft stop) */
|
|
51
|
-
interrupt(): Promise<void>;
|
|
52
|
-
|
|
53
|
-
/** Check if a query is currently active */
|
|
54
|
-
readonly isActive: boolean;
|
|
55
|
-
|
|
56
|
-
/** Return the list of models this engine supports */
|
|
57
|
-
getAvailableModels(): Promise<EngineModel[]>;
|
|
58
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Engine Types (Backend)
|
|
3
|
+
*
|
|
4
|
+
* Defines the AIEngine interface that all engine adapters must implement.
|
|
5
|
+
* Every adapter normalizes its output to Claude SDK format (SDKMessage)
|
|
6
|
+
* so stream-manager and frontend remain engine-agnostic.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { SDKMessage, SDKUserMessage, EngineSDKMessage } from '$shared/types/messaging';
|
|
10
|
+
import type { EngineType, EngineModel } from '$shared/types/engine';
|
|
11
|
+
|
|
12
|
+
export type { EngineType, EngineModel };
|
|
13
|
+
|
|
14
|
+
/** Options passed to engine.streamQuery() */
|
|
15
|
+
export interface EngineQueryOptions {
|
|
16
|
+
projectPath: string;
|
|
17
|
+
prompt: SDKUserMessage;
|
|
18
|
+
resume?: string;
|
|
19
|
+
forkSession?: boolean;
|
|
20
|
+
maxTurns?: number;
|
|
21
|
+
model?: string;
|
|
22
|
+
includePartialMessages?: boolean;
|
|
23
|
+
abortController?: AbortController;
|
|
24
|
+
claudeAccountId?: number;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** The contract every engine adapter must fulfil */
|
|
28
|
+
export interface AIEngine {
|
|
29
|
+
/** Engine identifier */
|
|
30
|
+
readonly name: EngineType;
|
|
31
|
+
|
|
32
|
+
/** Whether the engine has been initialized */
|
|
33
|
+
readonly isInitialized: boolean;
|
|
34
|
+
|
|
35
|
+
/** Lazy initialization (start server, load config, etc.) */
|
|
36
|
+
initialize(): Promise<void>;
|
|
37
|
+
|
|
38
|
+
/** Cleanup resources */
|
|
39
|
+
dispose(): Promise<void>;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Stream a query.
|
|
43
|
+
* MUST yield messages in Claude SDK format (SDKMessage).
|
|
44
|
+
*/
|
|
45
|
+
streamQuery(options: EngineQueryOptions): AsyncGenerator<EngineSDKMessage, void, unknown>;
|
|
46
|
+
|
|
47
|
+
/** Cancel the active query */
|
|
48
|
+
cancel(): Promise<void>;
|
|
49
|
+
|
|
50
|
+
/** Interrupt the active query (soft stop) */
|
|
51
|
+
interrupt(): Promise<void>;
|
|
52
|
+
|
|
53
|
+
/** Check if a query is currently active */
|
|
54
|
+
readonly isActive: boolean;
|
|
55
|
+
|
|
56
|
+
/** Return the list of models this engine supports */
|
|
57
|
+
getAvailableModels(): Promise<EngineModel[]>;
|
|
58
|
+
}
|