@myrialabs/clopen 0.2.1 → 0.2.2
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/backend/{lib/auth → auth}/auth-service.ts +2 -2
- package/backend/{lib/chat → chat}/stream-manager.ts +1 -1
- package/backend/{lib/engine → engine}/adapters/claude/environment.ts +1 -1
- package/backend/{lib/engine → engine}/adapters/opencode/message-converter.ts +1 -1
- package/backend/{lib/files → files}/file-watcher.ts +1 -1
- package/backend/{lib/git → git}/git-executor.ts +1 -1
- package/backend/index.ts +7 -7
- package/backend/{lib/mcp → mcp}/README.md +68 -79
- package/backend/{lib/mcp → mcp}/config.ts +1 -1
- package/backend/{lib/mcp → mcp}/servers/browser-automation/actions.ts +4 -4
- package/backend/{lib/mcp → mcp}/servers/browser-automation/browser.ts +3 -3
- package/backend/{lib/mcp → mcp}/servers/browser-automation/inspection.ts +3 -3
- package/backend/middleware/cors.ts +1 -1
- package/backend/middleware/error-handler.ts +1 -1
- package/backend/{lib/preview → preview}/browser/browser-preview-service.ts +1 -1
- package/backend/{lib/preview → preview}/browser/browser-tab-manager.ts +1 -1
- package/backend/{lib/preview → preview}/browser/types.ts +1 -1
- package/backend/{lib/project → project}/status-manager.ts +223 -223
- package/backend/{lib/terminal → terminal}/shell-utils.ts +1 -1
- package/backend/{lib/utils → utils}/ws.ts +2 -2
- package/backend/ws/README.md +9 -9
- package/backend/ws/auth/invites.ts +2 -2
- package/backend/ws/auth/login.ts +9 -9
- package/backend/ws/auth/status.ts +2 -2
- package/backend/ws/auth/users.ts +1 -1
- package/backend/ws/chat/background.ts +2 -2
- package/backend/ws/chat/stream.ts +3 -3
- package/backend/ws/engine/claude/accounts.ts +4 -4
- package/backend/ws/engine/claude/status.ts +1 -1
- package/backend/ws/files/read.ts +2 -2
- package/backend/ws/files/watch.ts +2 -2
- package/backend/ws/files/write.ts +1 -1
- package/backend/ws/git/branch.ts +2 -2
- package/backend/ws/git/commit.ts +2 -2
- package/backend/ws/git/conflict.ts +2 -2
- package/backend/ws/git/diff.ts +2 -2
- package/backend/ws/git/log.ts +2 -2
- package/backend/ws/git/remote.ts +2 -2
- package/backend/ws/git/staging.ts +2 -2
- package/backend/ws/git/status.ts +3 -3
- package/backend/ws/messages/crud.ts +1 -1
- package/backend/ws/preview/browser/cleanup.ts +2 -2
- package/backend/ws/preview/browser/console.ts +2 -2
- package/backend/ws/preview/browser/interact.ts +2 -2
- package/backend/ws/preview/browser/mcp.ts +1 -1
- package/backend/ws/preview/browser/native-ui.ts +2 -2
- package/backend/ws/preview/browser/stats.ts +2 -2
- package/backend/ws/preview/browser/tab-info.ts +2 -2
- package/backend/ws/preview/browser/tab.ts +2 -2
- package/backend/ws/preview/browser/webcodecs.ts +2 -2
- package/backend/ws/projects/crud.ts +3 -3
- package/backend/ws/projects/presence.ts +3 -3
- package/backend/ws/projects/status.ts +3 -3
- package/backend/ws/sessions/crud.ts +2 -2
- package/backend/ws/settings/crud.ts +2 -2
- package/backend/ws/snapshot/restore.ts +5 -5
- package/backend/ws/snapshot/timeline.ts +3 -3
- package/backend/ws/system/operations.ts +1 -1
- package/backend/ws/terminal/persistence.ts +3 -3
- package/backend/ws/terminal/session.ts +6 -6
- package/backend/ws/terminal/stream.ts +2 -2
- package/backend/ws/tunnel/operations.ts +1 -1
- package/backend/ws/user/crud.ts +4 -4
- package/frontend/App.svelte +13 -13
- package/frontend/{lib/components → components}/auth/InvitePage.svelte +2 -2
- package/frontend/{lib/components → components}/auth/LoginPage.svelte +1 -1
- package/frontend/{lib/components → components}/auth/SetupPage.svelte +6 -6
- package/frontend/{lib/components → components}/chat/ChatInterface.svelte +14 -14
- package/frontend/{lib/components → components}/chat/formatters/ErrorMessage.svelte +1 -1
- package/frontend/{lib/components → components}/chat/formatters/MessageFormatter.svelte +4 -4
- package/frontend/{lib/components → components}/chat/formatters/TextMessage.svelte +1 -1
- package/frontend/{lib/components → components}/chat/formatters/Tools.svelte +1 -1
- package/frontend/{lib/components → components}/chat/input/ChatInput.svelte +12 -12
- package/frontend/{lib/components → components}/chat/input/components/ChatInputActions.svelte +1 -1
- package/frontend/{lib/components → components}/chat/input/components/EditModeIndicator.svelte +2 -2
- package/frontend/{lib/components → components}/chat/input/components/EngineModelPicker.svelte +9 -9
- package/frontend/{lib/components → components}/chat/input/components/FileAttachmentPreview.svelte +1 -1
- package/frontend/{lib/components → components}/chat/input/components/LoadingIndicator.svelte +2 -2
- package/frontend/{lib/components → components}/chat/input/composables/use-chat-actions.svelte.ts +8 -8
- package/frontend/{lib/components → components}/chat/input/composables/use-file-handling.svelte.ts +1 -1
- package/frontend/{lib/components → components}/chat/input/composables/use-input-state.svelte.ts +6 -6
- package/frontend/{lib/components → components}/chat/message/ChatMessage.svelte +8 -8
- package/frontend/{lib/components → components}/chat/message/ChatMessages.svelte +7 -7
- package/frontend/{lib/components → components}/chat/message/MessageBubble.svelte +1 -1
- package/frontend/{lib/components → components}/chat/message/MessageHeader.svelte +2 -2
- package/frontend/{lib/components → components}/chat/modal/DebugModal.svelte +2 -2
- package/frontend/{lib/components → components}/chat/modal/TokenUsageModal.svelte +2 -2
- package/frontend/{lib/components → components}/chat/tools/AskUserQuestionTool.svelte +4 -4
- package/frontend/{lib/components → components}/chat/tools/CustomMcpTool.svelte +1 -1
- package/frontend/{lib/components → components}/chat/tools/EditTool.svelte +1 -1
- package/frontend/{lib/components → components}/chat/tools/TodoWriteTool.svelte +1 -1
- package/frontend/{lib/components → components}/chat/tools/components/CodeBlock.svelte +2 -2
- package/frontend/{lib/components → components}/chat/tools/components/DiffBlock.svelte +1 -1
- package/frontend/{lib/components → components}/chat/tools/components/FileHeader.svelte +2 -2
- package/frontend/{lib/components → components}/chat/tools/components/InfoLine.svelte +1 -1
- package/frontend/{lib/components → components}/chat/widgets/FloatingTodoList.svelte +3 -3
- package/frontend/{lib/components → components}/chat/widgets/TokenUsage.svelte +4 -4
- package/frontend/{lib/components → components}/checkpoint/TimelineModal.svelte +10 -10
- package/frontend/{lib/components → components}/checkpoint/timeline/TimelineNode.svelte +1 -1
- package/frontend/{lib/components/common → components/common/display}/Icon.svelte +2 -2
- package/frontend/{lib/components/common → components/common/display}/PageTemplate.svelte +1 -1
- package/frontend/{lib/components/common → components/common/display}/ProjectUserAvatars.svelte +1 -1
- package/frontend/{lib/components/common → components/common/display}/ThemeToggle.svelte +1 -1
- package/frontend/{lib/components/common → components/common/editor}/MonacoEditor.svelte +2 -2
- package/frontend/{lib/components/common → components/common/feedback}/Alert.svelte +1 -1
- package/frontend/{lib/components/common → components/common/feedback}/ConnectionBanner.svelte +3 -3
- package/frontend/{lib/components/common → components/common/feedback}/LoadingScreen.svelte +1 -1
- package/frontend/{lib/components/common → components/common/feedback}/NotificationToast.svelte +2 -2
- package/frontend/{lib/components/common → components/common/feedback}/UpdateBanner.svelte +3 -3
- package/frontend/{lib/components/common → components/common/form}/Checkbox.svelte +1 -1
- package/frontend/{lib/components/common → components/common/form}/FolderBrowser.svelte +6 -6
- package/frontend/{lib/components/common → components/common/form}/Input.svelte +1 -1
- package/frontend/{lib/components/common → components/common/form}/ModelSelector.svelte +3 -3
- package/frontend/{lib/components/common → components/common/form}/Select.svelte +1 -1
- package/frontend/{lib/components/common → components/common/form}/Textarea.svelte +1 -1
- package/frontend/{lib/components/common → components/common/overlay}/Dialog.svelte +1 -1
- package/frontend/{lib/components/common → components/common/overlay}/Lightbox.svelte +3 -3
- package/frontend/{lib/components/common → components/common/overlay}/ModalProvider.svelte +2 -2
- package/frontend/{lib/components → components}/common/xterm/XTerm.svelte +5 -5
- package/frontend/{lib/components → components}/common/xterm/xterm-service.ts +2 -2
- package/frontend/{lib/components → components}/files/FileNode.svelte +3 -3
- package/frontend/{lib/components → components}/files/FileTree.svelte +5 -5
- package/frontend/{lib/components → components}/files/FileViewer.svelte +7 -7
- package/frontend/{lib/components → components}/files/SearchResults.svelte +3 -3
- package/frontend/{lib/components → components}/git/BranchManager.svelte +6 -6
- package/frontend/{lib/components → components}/git/ChangesSection.svelte +1 -1
- package/frontend/{lib/components → components}/git/CommitForm.svelte +1 -1
- package/frontend/{lib/components → components}/git/ConflictResolver.svelte +1 -1
- package/frontend/{lib/components → components}/git/DiffViewer.svelte +7 -7
- package/frontend/{lib/components → components}/git/FileChangeItem.svelte +3 -3
- package/frontend/{lib/components → components}/git/GitButton.svelte +1 -1
- package/frontend/{lib/components → components}/git/GitLog.svelte +2 -2
- package/frontend/{lib/components → components}/git/GitModal.svelte +3 -3
- package/frontend/{lib/components → components}/history/HistoryModal.svelte +11 -11
- package/frontend/{lib/components → components}/history/HistoryView.svelte +12 -12
- package/frontend/{lib/components → components}/index.ts +9 -9
- package/frontend/{lib/components → components}/preview/browser/BrowserPreview.svelte +3 -3
- package/frontend/{lib/components → components}/preview/browser/components/Canvas.svelte +2 -2
- package/frontend/{lib/components → components}/preview/browser/components/ConsolePanel.svelte +1 -1
- package/frontend/{lib/components → components}/preview/browser/components/Container.svelte +2 -2
- package/frontend/{lib/components → components}/preview/browser/components/ContextMenu.svelte +1 -1
- package/frontend/{lib/components → components}/preview/browser/components/SelectDropdown.svelte +1 -1
- package/frontend/{lib/components → components}/preview/browser/components/Toolbar.svelte +2 -2
- package/frontend/{lib/components → components}/preview/browser/core/cleanup.svelte.ts +1 -1
- package/frontend/{lib/components → components}/preview/browser/core/coordinator.svelte.ts +4 -4
- package/frontend/{lib/components → components}/preview/browser/core/interactions.svelte.ts +3 -3
- package/frontend/{lib/components → components}/preview/browser/core/mcp-handlers.svelte.ts +2 -2
- package/frontend/{lib/components → components}/preview/browser/core/native-ui-handlers.svelte.ts +2 -2
- package/frontend/{lib/components → components}/preview/browser/core/tab-manager.svelte.ts +1 -1
- package/frontend/{lib/components → components}/preview/browser/core/tab-operations.svelte.ts +3 -3
- package/frontend/{lib/components → components}/settings/SettingsModal.svelte +4 -4
- package/frontend/{lib/components → components}/settings/SettingsView.svelte +2 -2
- package/frontend/{lib/components → components}/settings/admin/InviteManagement.svelte +5 -5
- package/frontend/{lib/components → components}/settings/admin/UserManagement.svelte +5 -5
- package/frontend/{lib/components → components}/settings/appearance/AppearanceSettings.svelte +3 -3
- package/frontend/{lib/components → components}/settings/appearance/LayoutPresetSettings.svelte +3 -3
- package/frontend/{lib/components → components}/settings/appearance/LayoutPreview.svelte +1 -1
- package/frontend/{lib/components → components}/settings/engines/AIEnginesSettings.svelte +6 -6
- package/frontend/{lib/components → components}/settings/general/AdvancedSettings.svelte +5 -5
- package/frontend/{lib/components → components}/settings/general/AuthModeSettings.svelte +5 -5
- package/frontend/{lib/components → components}/settings/general/DataManagementSettings.svelte +9 -9
- package/frontend/{lib/components → components}/settings/general/UpdateSettings.svelte +3 -3
- package/frontend/{lib/components → components}/settings/model/ModelSettings.svelte +2 -2
- package/frontend/{lib/components → components}/settings/notifications/NotificationSettings.svelte +4 -4
- package/frontend/{lib/components → components}/settings/user/UserSettings.svelte +5 -5
- package/frontend/{lib/components → components}/terminal/Terminal.svelte +9 -9
- package/frontend/{lib/components → components}/terminal/TerminalTabs.svelte +1 -1
- package/frontend/{lib/components → components}/terminal/TerminalView.svelte +5 -5
- package/frontend/{lib/components → components}/tunnel/TunnelActive.svelte +3 -3
- package/frontend/{lib/components → components}/tunnel/TunnelButton.svelte +2 -2
- package/frontend/{lib/components → components}/tunnel/TunnelInactive.svelte +4 -4
- package/frontend/{lib/components → components}/tunnel/TunnelModal.svelte +2 -2
- package/frontend/{lib/components → components}/workspace/DesktopNavigator.svelte +372 -372
- package/frontend/{lib/components → components}/workspace/MobileNavigator.svelte +380 -380
- package/frontend/{lib/components → components}/workspace/PanelContainer.svelte +3 -3
- package/frontend/{lib/components → components}/workspace/PanelHeader.svelte +10 -10
- package/frontend/{lib/components → components}/workspace/ViewMenu.svelte +4 -4
- package/frontend/{lib/components → components}/workspace/WorkspaceLayout.svelte +17 -17
- package/frontend/{lib/components → components}/workspace/layout/DesktopLayout.svelte +1 -1
- package/frontend/{lib/components → components}/workspace/layout/MobileLayout.svelte +1 -1
- package/frontend/{lib/components → components}/workspace/layout/split-pane/Container.svelte +1 -1
- package/frontend/{lib/components → components}/workspace/layout/split-pane/Handle.svelte +2 -2
- package/frontend/{lib/components → components}/workspace/layout/split-pane/Layout.svelte +2 -2
- package/frontend/{lib/components → components}/workspace/panels/ChatPanel.svelte +14 -14
- package/frontend/{lib/components → components}/workspace/panels/FilesPanel.svelte +10 -10
- package/frontend/{lib/components → components}/workspace/panels/GitPanel.svelte +14 -14
- package/frontend/{lib/components → components}/workspace/panels/PreviewPanel.svelte +5 -5
- package/frontend/{lib/components → components}/workspace/panels/TerminalPanel.svelte +6 -6
- package/frontend/{lib/services → services}/chat/chat.service.ts +8 -8
- package/frontend/{lib/services → services}/notification/global-stream-monitor.ts +117 -117
- package/frontend/{lib/services → services}/notification/push.service.ts +1 -1
- package/frontend/{lib/services → services}/notification/sound.service.ts +1 -1
- package/frontend/{lib/services → services}/preview/browser/browser-console.service.ts +1 -1
- package/frontend/{lib/services → services}/preview/browser/browser-webcodecs.service.ts +1 -1
- package/frontend/{lib/services → services}/preview/browser/mcp-integration.svelte.ts +2 -2
- package/frontend/{lib/services → services}/project/status.service.ts +160 -160
- package/frontend/{lib/services → services}/snapshot/snapshot.service.ts +2 -2
- package/frontend/{lib/services → services}/terminal/background/index.ts +1 -1
- package/frontend/{lib/services → services}/terminal/background/session-restore.ts +1 -1
- package/frontend/{lib/services → services}/terminal/background/stream-manager.ts +1 -1
- package/frontend/{lib/services → services}/terminal/project.service.ts +2 -2
- package/frontend/{lib/services → services}/terminal/terminal.service.ts +2 -2
- package/frontend/{lib/stores → stores}/core/app.svelte.ts +1 -1
- package/frontend/{lib/stores → stores}/core/presence.svelte.ts +4 -4
- package/frontend/{lib/stores → stores}/core/projects.svelte.ts +5 -5
- package/frontend/{lib/stores → stores}/core/sessions.svelte.ts +3 -3
- package/frontend/{lib/stores → stores}/features/auth.svelte.ts +2 -2
- package/frontend/{lib/stores → stores}/features/claude-accounts.svelte.ts +1 -1
- package/frontend/{lib/stores → stores}/features/models.svelte.ts +1 -1
- package/frontend/{lib/stores → stores}/features/settings.svelte.ts +2 -2
- package/frontend/{lib/stores → stores}/features/terminal.svelte.ts +4 -4
- package/frontend/{lib/stores → stores}/features/tunnel.svelte.ts +1 -1
- package/frontend/{lib/stores → stores}/features/user.svelte.ts +1 -1
- package/frontend/{lib/stores → stores}/ui/edit-mode.svelte.ts +3 -3
- package/frontend/{lib/stores → stores}/ui/update.svelte.ts +2 -2
- package/frontend/{lib/utils → utils}/theme.ts +1 -1
- package/frontend/{lib/utils → utils}/ws.ts +1 -1
- package/package.json +1 -1
- package/scripts/dev.ts +1 -1
- package/scripts/generate-icons.ts +2 -2
- package/shared/types/ui/icons.ts +4 -4
- package/shared/utils/anonymous-user.ts +1 -1
- package/shared/utils/ws-server.ts +3 -3
- /package/backend/{lib/auth → auth}/index.ts +0 -0
- /package/backend/{lib/auth → auth}/permissions.ts +0 -0
- /package/backend/{lib/auth → auth}/rate-limiter.ts +0 -0
- /package/backend/{lib/auth → auth}/tokens.ts +0 -0
- /package/backend/{lib/chat → chat}/helpers.ts +0 -0
- /package/backend/{lib/chat → chat}/index.ts +0 -0
- /package/backend/{lib/database → database}/README.md +0 -0
- /package/backend/{lib/database → database}/index.ts +0 -0
- /package/backend/{lib/database → database}/migrations/001_create_projects_table.ts +0 -0
- /package/backend/{lib/database → database}/migrations/002_create_chat_sessions_table.ts +0 -0
- /package/backend/{lib/database → database}/migrations/003_create_messages_table.ts +0 -0
- /package/backend/{lib/database → database}/migrations/004_create_prompt_templates_table.ts +0 -0
- /package/backend/{lib/database → database}/migrations/005_create_settings_table.ts +0 -0
- /package/backend/{lib/database → database}/migrations/006_add_user_to_messages.ts +0 -0
- /package/backend/{lib/database → database}/migrations/007_create_stream_states_table.ts +0 -0
- /package/backend/{lib/database → database}/migrations/008_create_message_snapshots_table.ts +0 -0
- /package/backend/{lib/database → database}/migrations/009_add_delta_snapshot_fields.ts +0 -0
- /package/backend/{lib/database → database}/migrations/010_add_soft_delete_and_branch_support.ts +0 -0
- /package/backend/{lib/database → database}/migrations/011_git_like_commit_graph.ts +0 -0
- /package/backend/{lib/database → database}/migrations/012_add_file_change_statistics.ts +0 -0
- /package/backend/{lib/database → database}/migrations/013_checkpoint_tree_state.ts +0 -0
- /package/backend/{lib/database → database}/migrations/014_add_engine_to_sessions.ts +0 -0
- /package/backend/{lib/database → database}/migrations/015_add_model_to_sessions.ts +0 -0
- /package/backend/{lib/database → database}/migrations/016_create_user_projects_table.ts +0 -0
- /package/backend/{lib/database → database}/migrations/017_add_current_session_to_user_projects.ts +0 -0
- /package/backend/{lib/database → database}/migrations/018_create_claude_accounts_table.ts +0 -0
- /package/backend/{lib/database → database}/migrations/019_add_claude_account_to_sessions.ts +0 -0
- /package/backend/{lib/database → database}/migrations/020_add_snapshot_tree_hash.ts +0 -0
- /package/backend/{lib/database → database}/migrations/021_drop_prompt_templates_table.ts +0 -0
- /package/backend/{lib/database → database}/migrations/022_add_snapshot_changes_column.ts +0 -0
- /package/backend/{lib/database → database}/migrations/023_create_user_unread_sessions_table.ts +0 -0
- /package/backend/{lib/database → database}/migrations/024_create_users_table.ts +0 -0
- /package/backend/{lib/database → database}/migrations/025_create_auth_sessions_table.ts +0 -0
- /package/backend/{lib/database → database}/migrations/026_create_invite_tokens_table.ts +0 -0
- /package/backend/{lib/database → database}/migrations/index.ts +0 -0
- /package/backend/{lib/database → database}/queries/auth-queries.ts +0 -0
- /package/backend/{lib/database → database}/queries/checkpoint-queries.ts +0 -0
- /package/backend/{lib/database → database}/queries/engine-queries.ts +0 -0
- /package/backend/{lib/database → database}/queries/index.ts +0 -0
- /package/backend/{lib/database → database}/queries/message-queries.ts +0 -0
- /package/backend/{lib/database → database}/queries/project-queries.ts +0 -0
- /package/backend/{lib/database → database}/queries/session-queries.ts +0 -0
- /package/backend/{lib/database → database}/queries/settings-queries.ts +0 -0
- /package/backend/{lib/database → database}/queries/snapshot-queries.ts +0 -0
- /package/backend/{lib/database → database}/queries/utils-queries.ts +0 -0
- /package/backend/{lib/database → database}/seeders/index.ts +0 -0
- /package/backend/{lib/database → database}/seeders/settings_seeder.ts +0 -0
- /package/backend/{lib/database → database}/utils/connection.ts +0 -0
- /package/backend/{lib/database → database}/utils/index.ts +0 -0
- /package/backend/{lib/database → database}/utils/migration-runner.ts +0 -0
- /package/backend/{lib/database → database}/utils/seeder-runner.ts +0 -0
- /package/backend/{lib/engine → engine}/adapters/claude/error-handler.ts +0 -0
- /package/backend/{lib/engine → engine}/adapters/claude/index.ts +0 -0
- /package/backend/{lib/engine → engine}/adapters/claude/path-utils.ts +0 -0
- /package/backend/{lib/engine → engine}/adapters/claude/stream.ts +0 -0
- /package/backend/{lib/engine → engine}/adapters/opencode/index.ts +0 -0
- /package/backend/{lib/engine → engine}/adapters/opencode/server.ts +0 -0
- /package/backend/{lib/engine → engine}/adapters/opencode/stream.ts +0 -0
- /package/backend/{lib/engine → engine}/index.ts +0 -0
- /package/backend/{lib/engine → engine}/types.ts +0 -0
- /package/backend/{lib/files → files}/file-operations.ts +0 -0
- /package/backend/{lib/files → files}/file-reading.ts +0 -0
- /package/backend/{lib/files → files}/path-browsing.ts +0 -0
- /package/backend/{lib/git → git}/git-parser.ts +0 -0
- /package/backend/{lib/git → git}/git-service.ts +0 -0
- /package/backend/{lib/mcp → mcp}/index.ts +0 -0
- /package/backend/{lib/mcp → mcp}/project-context.ts +0 -0
- /package/backend/{lib/mcp → mcp}/remote-server.ts +0 -0
- /package/backend/{lib/mcp → mcp}/servers/browser-automation/index.ts +0 -0
- /package/backend/{lib/mcp → mcp}/servers/helper.ts +0 -0
- /package/backend/{lib/mcp → mcp}/servers/index.ts +0 -0
- /package/backend/{lib/mcp → mcp}/servers/weather/get-temperature.ts +0 -0
- /package/backend/{lib/mcp → mcp}/servers/weather/index.ts +0 -0
- /package/backend/{lib/mcp → mcp}/types.ts +0 -0
- /package/backend/{lib/preview → preview}/browser/browser-audio-capture.ts +0 -0
- /package/backend/{lib/preview → preview}/browser/browser-console-manager.ts +0 -0
- /package/backend/{lib/preview → preview}/browser/browser-dialog-handler.ts +0 -0
- /package/backend/{lib/preview → preview}/browser/browser-interaction-handler.ts +0 -0
- /package/backend/{lib/preview → preview}/browser/browser-mcp-control.ts +0 -0
- /package/backend/{lib/preview → preview}/browser/browser-native-ui-handler.ts +0 -0
- /package/backend/{lib/preview → preview}/browser/browser-navigation-tracker.ts +0 -0
- /package/backend/{lib/preview → preview}/browser/browser-pool.ts +0 -0
- /package/backend/{lib/preview → preview}/browser/browser-video-capture.ts +0 -0
- /package/backend/{lib/preview → preview}/browser/scripts/audio-stream.ts +0 -0
- /package/backend/{lib/preview → preview}/browser/scripts/cursor-tracking.ts +0 -0
- /package/backend/{lib/preview → preview}/browser/scripts/video-stream.ts +0 -0
- /package/backend/{lib/preview → preview}/index.ts +0 -0
- /package/backend/{lib/project → project}/index.ts +0 -0
- /package/backend/{lib/snapshot → snapshot}/blob-store.ts +0 -0
- /package/backend/{lib/snapshot → snapshot}/gitignore.ts +0 -0
- /package/backend/{lib/snapshot → snapshot}/helpers.ts +0 -0
- /package/backend/{lib/snapshot → snapshot}/snapshot-service.ts +0 -0
- /package/backend/{lib/terminal → terminal}/helpers.ts +0 -0
- /package/backend/{lib/terminal → terminal}/index.ts +0 -0
- /package/backend/{lib/terminal → terminal}/pty-manager.ts +0 -0
- /package/backend/{lib/terminal → terminal}/pty-session-manager.ts +0 -0
- /package/backend/{lib/terminal → terminal}/stream-manager.ts +0 -0
- /package/backend/{lib/tunnel → tunnel}/global-tunnel-manager.ts +0 -0
- /package/backend/{lib/tunnel → tunnel}/project-tunnel-manager.ts +0 -0
- /package/backend/{lib/shared → utils}/env.ts +0 -0
- /package/backend/{lib/shared → utils}/index.ts +0 -0
- /package/backend/{lib/shared → utils}/port-utils.ts +0 -0
- /package/backend/{lib/shared → utils}/process-manager.ts +0 -0
- /package/backend/{lib/user/helpers.ts → utils/user-helpers.ts} +0 -0
- /package/frontend/{lib/app-environment.ts → app-environment.ts} +0 -0
- /package/frontend/{lib/components → components}/chat/formatters/index.ts +0 -0
- /package/frontend/{lib/components → components}/chat/input/components/DragDropOverlay.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/input/composables/use-animations.svelte.ts +0 -0
- /package/frontend/{lib/components → components}/chat/input/composables/use-textarea-resize.svelte.ts +0 -0
- /package/frontend/{lib/components → components}/chat/message/DateSeparator.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/shared/index.ts +0 -0
- /package/frontend/{lib/components → components}/chat/shared/utils.ts +0 -0
- /package/frontend/{lib/components → components}/chat/tools/AgentTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/BashOutputTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/BashTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/EnterPlanModeTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/ExitPlanModeTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/GlobTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/GrepTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/ListMcpResourcesTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/NotebookEditTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/ReadMcpResourceTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/ReadTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/TaskStopTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/TaskTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/WebFetchTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/WebSearchTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/WriteTool.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/components/StatsBadges.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/components/TerminalCommand.svelte +0 -0
- /package/frontend/{lib/components → components}/chat/tools/components/index.ts +0 -0
- /package/frontend/{lib/components → components}/chat/tools/index.ts +0 -0
- /package/frontend/{lib/components → components}/checkpoint/timeline/TimelineEdge.svelte +0 -0
- /package/frontend/{lib/components → components}/checkpoint/timeline/TimelineGraph.svelte +0 -0
- /package/frontend/{lib/components → components}/checkpoint/timeline/TimelineVersionGroup.svelte +0 -0
- /package/frontend/{lib/components → components}/checkpoint/timeline/animation.ts +0 -0
- /package/frontend/{lib/components → components}/checkpoint/timeline/config.ts +0 -0
- /package/frontend/{lib/components → components}/checkpoint/timeline/graph-builder.ts +0 -0
- /package/frontend/{lib/components → components}/checkpoint/timeline/types.ts +0 -0
- /package/frontend/{lib/components → components}/checkpoint/timeline/utils.ts +0 -0
- /package/frontend/{lib/components/common → components/common/display}/AvatarBubble.svelte +0 -0
- /package/frontend/{lib/components/common → components/common/display}/Button.svelte +0 -0
- /package/frontend/{lib/components/common → components/common/display}/Card.svelte +0 -0
- /package/frontend/{lib/components/common → components/common/feedback}/LoadingSpinner.svelte +0 -0
- /package/frontend/{lib/components → components}/common/lucide-icons.ts +0 -0
- /package/frontend/{lib/components → components}/common/material-icons.ts +0 -0
- /package/frontend/{lib/components/common → components/common/overlay}/Modal.svelte +0 -0
- /package/frontend/{lib/components → components}/common/xterm/index.ts +0 -0
- /package/frontend/{lib/components → components}/common/xterm/terminal-config.ts +0 -0
- /package/frontend/{lib/components → components}/common/xterm/types.ts +0 -0
- /package/frontend/{lib/components → components}/preview/browser/components/VirtualCursor.svelte +0 -0
- /package/frontend/{lib/components → components}/preview/browser/core/stream-handler.svelte.ts +0 -0
- /package/frontend/{lib/components → components}/preview/index.ts +0 -0
- /package/frontend/{lib/components → components}/settings/account/AccountSettings.svelte +0 -0
- /package/frontend/{lib/components → components}/settings/general/GeneralSettings.svelte +0 -0
- /package/frontend/{lib/components → components}/settings/security/SecuritySettings.svelte +0 -0
- /package/frontend/{lib/components → components}/settings/system/SystemSettings.svelte +0 -0
- /package/frontend/{lib/components → components}/tunnel/TunnelQRCode.svelte +0 -0
- /package/frontend/{lib/services → services}/chat/index.ts +0 -0
- /package/frontend/{lib/services → services}/notification/index.ts +0 -0
- /package/frontend/{lib/services → services}/preview/index.ts +0 -0
- /package/frontend/{lib/services → services}/project/index.ts +0 -0
- /package/frontend/{lib/services → services}/terminal/index.ts +0 -0
- /package/frontend/{lib/services → services}/terminal/persistence.service.ts +0 -0
- /package/frontend/{lib/services → services}/terminal/session.service.ts +0 -0
- /package/frontend/{lib/stores → stores}/core/files.svelte.ts +0 -0
- /package/frontend/{lib/stores → stores}/ui/chat-input.svelte.ts +0 -0
- /package/frontend/{lib/stores → stores}/ui/chat-model.svelte.ts +0 -0
- /package/frontend/{lib/stores → stores}/ui/connection.svelte.ts +0 -0
- /package/frontend/{lib/stores → stores}/ui/dialog.svelte.ts +0 -0
- /package/frontend/{lib/stores → stores}/ui/notification.svelte.ts +0 -0
- /package/frontend/{lib/stores → stores}/ui/settings-modal.svelte.ts +0 -0
- /package/frontend/{lib/stores → stores}/ui/theme.svelte.ts +0 -0
- /package/frontend/{lib/stores → stores}/ui/workspace.svelte.ts +0 -0
- /package/frontend/{lib/utils → utils}/chat/date-separator.ts +0 -0
- /package/frontend/{lib/utils → utils}/chat/message-grouper.ts +0 -0
- /package/frontend/{lib/utils → utils}/chat/message-processor.ts +0 -0
- /package/frontend/{lib/utils → utils}/chat/tool-handler.ts +0 -0
- /package/frontend/{lib/utils → utils}/chat/virtual-scroll.svelte.ts +0 -0
- /package/frontend/{lib/utils → utils}/click-outside.ts +0 -0
- /package/frontend/{lib/utils → utils}/context-manager.ts +0 -0
- /package/frontend/{lib/utils → utils}/file-icon-mappings.ts +0 -0
- /package/frontend/{lib/utils → utils}/folder-icon-mappings.ts +0 -0
- /package/frontend/{lib/utils → utils}/git-status.ts +0 -0
- /package/frontend/{lib/types → utils}/native-ui.ts +0 -0
- /package/frontend/{lib/utils → utils}/platform.ts +0 -0
- /package/frontend/{lib/utils → utils}/port-check.ts +0 -0
- /package/frontend/{lib/constants/preview.ts → utils/preview-constants.ts} +0 -0
- /package/frontend/{lib/utils/terminalFormatter.ts → utils/terminal-formatter.ts} +0 -0
- /package/frontend/{lib/utils → utils}/tree-visualizer.ts +0 -0
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* Core authentication logic: user creation, session management, invite handling.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { authQueries, settingsQueries } from '$backend/
|
|
7
|
+
import { authQueries, settingsQueries } from '$backend/database/queries';
|
|
8
8
|
import { generateSessionToken, generatePAT, generateInviteToken, hashToken, getTokenType } from './tokens';
|
|
9
|
-
import { generateColorFromString, getInitials } from '$backend/
|
|
9
|
+
import { generateColorFromString, getInitials } from '$backend/utils/user-helpers';
|
|
10
10
|
import { debug } from '$shared/utils/logger';
|
|
11
11
|
|
|
12
12
|
/** Default session lifetime in days */
|
|
@@ -1097,7 +1097,7 @@ class StreamManager extends EventEmitter {
|
|
|
1097
1097
|
// Update checkpoint_tree_state when saving a new checkpoint (real user message)
|
|
1098
1098
|
if (message.type === 'user') {
|
|
1099
1099
|
try {
|
|
1100
|
-
const { isCheckpointMessage, buildCheckpointTree, getCheckpointPathToRoot } = await import('
|
|
1100
|
+
const { isCheckpointMessage, buildCheckpointTree, getCheckpointPathToRoot } = await import('../snapshot/helpers');
|
|
1101
1101
|
const { checkpointQueries } = await import('../database/queries');
|
|
1102
1102
|
|
|
1103
1103
|
// Check if this new message is a checkpoint
|
|
@@ -12,7 +12,7 @@ import { join } from 'path';
|
|
|
12
12
|
import { isWindows, findGitBash } from '../../../terminal/shell-utils.js';
|
|
13
13
|
import { engineQueries } from '../../../database/queries';
|
|
14
14
|
import { debug } from '$shared/utils/logger';
|
|
15
|
-
import { getCleanSpawnEnv } from '../../../
|
|
15
|
+
import { getCleanSpawnEnv } from '../../../utils/env';
|
|
16
16
|
|
|
17
17
|
let _ready = false;
|
|
18
18
|
let _initPromise: Promise<void> | null = null;
|
|
@@ -141,7 +141,7 @@ const TOOL_NAME_MAP: Record<string, string> = {
|
|
|
141
141
|
|
|
142
142
|
/** Map Open Code tool name to Claude Code tool name for UI rendering */
|
|
143
143
|
export function mapToolName(openCodeToolName: string): string {
|
|
144
|
-
// Check if this is a custom MCP tool (resolves via single source in backend/
|
|
144
|
+
// Check if this is a custom MCP tool (resolves via single source in backend/mcp)
|
|
145
145
|
const mcpName = resolveOpenCodeToolName(openCodeToolName);
|
|
146
146
|
if (mcpName) return mcpName;
|
|
147
147
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
import { watch, type FSWatcher, existsSync } from 'node:fs';
|
|
13
13
|
import { stat } from 'node:fs/promises';
|
|
14
14
|
import { join, relative, normalize, sep } from 'node:path';
|
|
15
|
-
import { ws } from '$backend/
|
|
15
|
+
import { ws } from '$backend/utils/ws';
|
|
16
16
|
import { debug } from '$shared/utils/logger';
|
|
17
17
|
import type { FileChange } from '$shared/types/filesystem';
|
|
18
18
|
|
package/backend/index.ts
CHANGED
|
@@ -9,7 +9,7 @@ if (typeof globalThis.Bun === 'undefined') {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
// MUST be first import — cleans process.env before any other module reads it
|
|
12
|
-
import { SERVER_ENV } from './
|
|
12
|
+
import { SERVER_ENV } from './utils/env';
|
|
13
13
|
|
|
14
14
|
import { Elysia } from 'elysia';
|
|
15
15
|
import { corsMiddleware } from './middleware/cors';
|
|
@@ -17,10 +17,10 @@ import { errorHandlerMiddleware } from './middleware/error-handler';
|
|
|
17
17
|
import { loggerMiddleware } from './middleware/logger';
|
|
18
18
|
|
|
19
19
|
// Database initialization
|
|
20
|
-
import { initializeDatabase, closeDatabase } from './
|
|
21
|
-
import { disposeAllEngines } from './
|
|
20
|
+
import { initializeDatabase, closeDatabase } from './database';
|
|
21
|
+
import { disposeAllEngines } from './engine';
|
|
22
22
|
import { debug } from '$shared/utils/logger';
|
|
23
|
-
import { findAvailablePort } from './
|
|
23
|
+
import { findAvailablePort } from './utils/port-utils';
|
|
24
24
|
import { networkInterfaces } from 'os';
|
|
25
25
|
import { resolve } from 'node:path';
|
|
26
26
|
import { statSync } from 'node:fs';
|
|
@@ -29,11 +29,11 @@ import { statSync } from 'node:fs';
|
|
|
29
29
|
import { wsRouter } from './ws';
|
|
30
30
|
|
|
31
31
|
// MCP remote server for Open Code custom tools
|
|
32
|
-
import { handleMcpRequest, closeMcpServer } from './
|
|
32
|
+
import { handleMcpRequest, closeMcpServer } from './mcp/remote-server';
|
|
33
33
|
|
|
34
34
|
// Auth middleware
|
|
35
|
-
import { checkRouteAccess } from './
|
|
36
|
-
import { ws as wsServer } from './
|
|
35
|
+
import { checkRouteAccess } from './auth/permissions';
|
|
36
|
+
import { ws as wsServer } from './utils/ws';
|
|
37
37
|
|
|
38
38
|
// Register auth gate on WebSocket router — blocks unauthenticated/unauthorized access
|
|
39
39
|
wsRouter.setAuthMiddleware(async (conn, action) => {
|
|
@@ -19,13 +19,13 @@ Custom MCP (Model Context Protocol) tools for adding specialized functionality t
|
|
|
19
19
|
## Overview
|
|
20
20
|
|
|
21
21
|
**What is Custom MCP Tools?**
|
|
22
|
-
System for adding custom tools to AI engines with type-safe TypeScript definitions. Tools are defined once using `defineServer()` and automatically available to both Claude Code (in-process) and Open Code (
|
|
22
|
+
System for adding custom tools to AI engines with type-safe TypeScript definitions. Tools are defined once using `defineServer()` and automatically available to both Claude Code (in-process) and Open Code (remote HTTP MCP server).
|
|
23
23
|
|
|
24
24
|
**Features:**
|
|
25
25
|
- Single source of truth — define tools once, use in both engines
|
|
26
26
|
- In-process execution for Claude Code via `createSdkMcpServer`
|
|
27
|
-
-
|
|
28
|
-
-
|
|
27
|
+
- Remote HTTP MCP server for Open Code via `createRemoteMcpServer`
|
|
28
|
+
- Both engines execute handlers in-process (no subprocess, no bridge)
|
|
29
29
|
- Type-safe with TypeScript
|
|
30
30
|
- Auto metadata extraction and registration
|
|
31
31
|
- Configuration-based enable/disable
|
|
@@ -91,7 +91,7 @@ import weather from './weather';
|
|
|
91
91
|
import calculator from './calculator';
|
|
92
92
|
import { buildServerRegistries } from './helper';
|
|
93
93
|
|
|
94
|
-
const allServers = [
|
|
94
|
+
export const allServers = [
|
|
95
95
|
weather,
|
|
96
96
|
calculator, // Simply add your server here!
|
|
97
97
|
// Add more servers...
|
|
@@ -131,27 +131,25 @@ Tool available to Claude as: `mcp__calculator__calculate`
|
|
|
131
131
|
## Architecture
|
|
132
132
|
|
|
133
133
|
```
|
|
134
|
-
backend/
|
|
135
|
-
├── types.ts
|
|
136
|
-
├── config.ts
|
|
137
|
-
│
|
|
138
|
-
├── index.ts
|
|
139
|
-
├──
|
|
140
|
-
├──
|
|
141
|
-
|
|
142
|
-
│ ├──
|
|
143
|
-
│ ├──
|
|
144
|
-
│
|
|
134
|
+
backend/mcp/
|
|
135
|
+
├── types.ts # TypeScript type definitions (auto-inferred from metadata)
|
|
136
|
+
├── config.ts # User configuration (enabled, tools) + auto-merge with registry
|
|
137
|
+
│ # + resolveOpenCodeToolName() & getOpenCodeMcpConfig()
|
|
138
|
+
├── index.ts # Main export point
|
|
139
|
+
├── remote-server.ts # Remote HTTP MCP server for Open Code (Streamable HTTP transport)
|
|
140
|
+
├── project-context.ts # Project context service for MCP tool handlers
|
|
141
|
+
├── servers/ # Server implementations (single source of truth)
|
|
142
|
+
│ ├── index.ts # Auto-build registries from server array + export allServers
|
|
143
|
+
│ ├── helper.ts # defineServer, buildServerRegistries & createRemoteMcpServer
|
|
144
|
+
│ ├── weather/ # Example: Weather service
|
|
145
|
+
│ │ ├── index.ts # Server definition using defineServer
|
|
145
146
|
│ │ └── get-temperature.ts # Tool handler implementation
|
|
146
147
|
│ └── browser-automation/ # Example: Browser automation service
|
|
147
|
-
│ ├── index.ts
|
|
148
|
-
│ ├──
|
|
149
|
-
│ ├──
|
|
150
|
-
│ └──
|
|
151
|
-
└── README.md
|
|
152
|
-
|
|
153
|
-
backend/ws/mcp/ # WebSocket bridge route (lives in ws/ per convention)
|
|
154
|
-
└── index.ts # WS .http() route for stdio server → main server
|
|
148
|
+
│ ├── index.ts # Server definition
|
|
149
|
+
│ ├── actions.ts # Browser action handlers
|
|
150
|
+
│ ├── browser.ts # Browser instance management
|
|
151
|
+
│ └── inspection.ts # Page inspection handlers
|
|
152
|
+
└── README.md # This file
|
|
155
153
|
```
|
|
156
154
|
|
|
157
155
|
### Server Organization
|
|
@@ -205,29 +203,27 @@ servers/browser-automation/
|
|
|
205
203
|
6. UI displays result (CustomMcpTool.svelte)
|
|
206
204
|
```
|
|
207
205
|
|
|
208
|
-
**Open Code (
|
|
206
|
+
**Open Code (remote HTTP MCP server):**
|
|
209
207
|
```
|
|
210
208
|
1. Server Definition (servers/weather/index.ts)
|
|
211
209
|
└─> Same defineServer() — single source of truth
|
|
212
210
|
↓
|
|
213
|
-
2.
|
|
214
|
-
└─>
|
|
211
|
+
2. Remote MCP server (remote-server.ts)
|
|
212
|
+
└─> createRemoteMcpServer() registers tools from allServers
|
|
213
|
+
└─> Mounted at /mcp on the main Elysia server
|
|
215
214
|
↓
|
|
216
|
-
3.
|
|
217
|
-
└─>
|
|
218
|
-
└─> Registers tools via @modelcontextprotocol/sdk
|
|
215
|
+
3. Open Code engine (opencode/stream.ts)
|
|
216
|
+
└─> Uses getOpenCodeMcpConfig() → { type: 'remote', url: '/mcp' }
|
|
219
217
|
↓
|
|
220
|
-
4. Open Code
|
|
218
|
+
4. Open Code connects via Streamable HTTP transport
|
|
219
|
+
└─> Sends JSON-RPC tool calls to /mcp endpoint
|
|
221
220
|
↓
|
|
222
|
-
5.
|
|
223
|
-
↓
|
|
224
|
-
6. WS bridge route (backend/ws/mcp/)
|
|
225
|
-
└─> Looks up handler from serverMetadata.toolDefs
|
|
221
|
+
5. remote-server.ts handles the request
|
|
226
222
|
└─> Executes handler in-process (same context as main server)
|
|
227
223
|
↓
|
|
228
|
-
|
|
224
|
+
6. Response flows back: HTTP → Open Code
|
|
229
225
|
↓
|
|
230
|
-
|
|
226
|
+
7. UI displays result (CustomMcpTool.svelte)
|
|
231
227
|
```
|
|
232
228
|
|
|
233
229
|
### Key Components
|
|
@@ -235,23 +231,25 @@ servers/browser-automation/
|
|
|
235
231
|
**`defineServer`**
|
|
236
232
|
Helper function to define MCP server with automatic metadata extraction.
|
|
237
233
|
Stores both Claude SDK server instance AND raw tool definitions (`toolDefs`)
|
|
238
|
-
for reuse by
|
|
234
|
+
for reuse by both engines.
|
|
239
235
|
|
|
240
236
|
**`buildServerRegistries`**
|
|
241
237
|
Function to build server registries from server array.
|
|
242
238
|
|
|
239
|
+
**`createRemoteMcpServer`**
|
|
240
|
+
Creates a `McpServer` instance (from `@modelcontextprotocol/sdk`) with tools
|
|
241
|
+
registered from the same `RawToolDef` definitions used by Claude Code.
|
|
242
|
+
Handlers execute directly in-process — no subprocess, no bridge.
|
|
243
|
+
|
|
243
244
|
**`mcpServers`**
|
|
244
245
|
Final configuration combining user config with server instances.
|
|
245
246
|
|
|
246
|
-
**`
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
via `
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
WebSocket `.http()` route that receives tool calls from the stdio server
|
|
253
|
-
and executes handlers in-process. Lives in `backend/ws/` per the WS
|
|
254
|
-
module convention (see `backend/ws/README.md`).
|
|
247
|
+
**`remote-server.ts`**
|
|
248
|
+
Remote HTTP MCP server mounted at `/mcp` on the main Elysia server.
|
|
249
|
+
Uses `WebStandardStreamableHTTPServerTransport` for the MCP protocol.
|
|
250
|
+
Open Code connects to it via `type: 'remote'` config. Each session gets
|
|
251
|
+
its own transport and `McpServer` instance. Handles session lifecycle
|
|
252
|
+
(create, route, close) and graceful shutdown.
|
|
255
253
|
|
|
256
254
|
---
|
|
257
255
|
|
|
@@ -449,14 +447,14 @@ import type {
|
|
|
449
447
|
McpServerConfigWithInstance, // Config + instance structure
|
|
450
448
|
ParsedMcpToolName, // Parsed tool name components
|
|
451
449
|
McpServerStatus // Server status from SDK
|
|
452
|
-
} from '$backend/
|
|
450
|
+
} from '$backend/mcp';
|
|
453
451
|
```
|
|
454
452
|
|
|
455
453
|
#### Main Configuration
|
|
456
454
|
|
|
457
455
|
**`mcpServers`** - Final merged configuration:
|
|
458
456
|
```typescript
|
|
459
|
-
import { mcpServers } from '$backend/
|
|
457
|
+
import { mcpServers } from '$backend/mcp';
|
|
460
458
|
|
|
461
459
|
// Access server configuration
|
|
462
460
|
const weatherConfig = mcpServers["weather-service"];
|
|
@@ -471,7 +469,7 @@ const weatherConfig = mcpServers["weather-service"];
|
|
|
471
469
|
|
|
472
470
|
**`serverMetadata`** - Metadata for type inference:
|
|
473
471
|
```typescript
|
|
474
|
-
import { serverMetadata } from '$backend/
|
|
472
|
+
import { serverMetadata } from '$backend/mcp/servers';
|
|
475
473
|
|
|
476
474
|
// Access metadata
|
|
477
475
|
const weatherMeta = serverMetadata["weather-service"];
|
|
@@ -480,7 +478,7 @@ const weatherMeta = serverMetadata["weather-service"];
|
|
|
480
478
|
|
|
481
479
|
**`serverRegistry`** - Server instances:
|
|
482
480
|
```typescript
|
|
483
|
-
import { serverRegistry } from '$backend/
|
|
481
|
+
import { serverRegistry } from '$backend/mcp/servers';
|
|
484
482
|
|
|
485
483
|
// Access server instance
|
|
486
484
|
const weatherServer = serverRegistry["weather-service"];
|
|
@@ -492,7 +490,7 @@ const weatherServer = serverRegistry["weather-service"];
|
|
|
492
490
|
Returns all enabled MCP servers for use with Claude SDK.
|
|
493
491
|
|
|
494
492
|
```typescript
|
|
495
|
-
import { getEnabledMcpServers } from '$backend/
|
|
493
|
+
import { getEnabledMcpServers } from '$backend/mcp';
|
|
496
494
|
|
|
497
495
|
const servers = getEnabledMcpServers();
|
|
498
496
|
// Returns: Record<string, McpServerConfig>
|
|
@@ -502,7 +500,7 @@ const servers = getEnabledMcpServers();
|
|
|
502
500
|
Returns array of allowed tool names (formatted for Claude SDK).
|
|
503
501
|
|
|
504
502
|
```typescript
|
|
505
|
-
import { getAllowedMcpTools } from '$backend/
|
|
503
|
+
import { getAllowedMcpTools } from '$backend/mcp';
|
|
506
504
|
|
|
507
505
|
const tools = getAllowedMcpTools();
|
|
508
506
|
// Returns: ["mcp__weather-service__get_temperature", ...]
|
|
@@ -512,7 +510,7 @@ const tools = getAllowedMcpTools();
|
|
|
512
510
|
Parse MCP tool name into components.
|
|
513
511
|
|
|
514
512
|
```typescript
|
|
515
|
-
import { parseMcpToolName } from '$backend/
|
|
513
|
+
import { parseMcpToolName } from '$backend/mcp';
|
|
516
514
|
|
|
517
515
|
const parsed = parseMcpToolName("mcp__weather-service__get_temperature");
|
|
518
516
|
// Returns: { server: "weather-service", tool: "get_temperature", fullName: "..." }
|
|
@@ -522,27 +520,27 @@ const parsed = parseMcpToolName("mcp__weather-service__get_temperature");
|
|
|
522
520
|
Check if a tool name is a custom MCP tool.
|
|
523
521
|
|
|
524
522
|
```typescript
|
|
525
|
-
import { isMcpTool } from '$backend/
|
|
523
|
+
import { isMcpTool } from '$backend/mcp';
|
|
526
524
|
|
|
527
525
|
isMcpTool("mcp__weather-service__get_temperature"); // true
|
|
528
526
|
isMcpTool("Bash"); // false
|
|
529
527
|
```
|
|
530
528
|
|
|
531
529
|
#### `getOpenCodeMcpConfig()`
|
|
532
|
-
Returns MCP configuration for Open Code engine (
|
|
530
|
+
Returns MCP configuration for Open Code engine (remote HTTP MCP server).
|
|
533
531
|
|
|
534
532
|
```typescript
|
|
535
|
-
import { getOpenCodeMcpConfig } from '$backend/
|
|
533
|
+
import { getOpenCodeMcpConfig } from '$backend/mcp';
|
|
536
534
|
|
|
537
535
|
const mcpConfig = getOpenCodeMcpConfig();
|
|
538
|
-
// Returns: { 'clopen-mcp': { type: '
|
|
536
|
+
// Returns: { 'clopen-mcp': { type: 'remote', url: 'http://localhost:9151/mcp', ... } }
|
|
539
537
|
```
|
|
540
538
|
|
|
541
539
|
#### `resolveOpenCodeToolName(toolName)`
|
|
542
540
|
Resolve an Open Code tool name to `mcp__server__tool` format (single source of truth).
|
|
543
541
|
|
|
544
542
|
```typescript
|
|
545
|
-
import { resolveOpenCodeToolName } from '$backend/
|
|
543
|
+
import { resolveOpenCodeToolName } from '$backend/mcp';
|
|
546
544
|
|
|
547
545
|
resolveOpenCodeToolName("clopen-mcp_get_temperature");
|
|
548
546
|
// Returns: "mcp__weather-service__get_temperature"
|
|
@@ -565,7 +563,7 @@ import {
|
|
|
565
563
|
getEnabledServerNames,
|
|
566
564
|
getEnabledToolsForServer,
|
|
567
565
|
getMcpStats
|
|
568
|
-
} from '$backend/
|
|
566
|
+
} from '$backend/mcp';
|
|
569
567
|
|
|
570
568
|
// Get server configuration (includes instance)
|
|
571
569
|
const config = getServerConfig("weather-service");
|
|
@@ -1084,38 +1082,30 @@ schema: {
|
|
|
1084
1082
|
|
|
1085
1083
|
### How It Works
|
|
1086
1084
|
|
|
1087
|
-
Open Code
|
|
1088
|
-
|
|
1089
|
-
1. **`stdio-server.ts`** — Standalone Bun subprocess that Open Code spawns. It registers tools from `serverMetadata` using `@modelcontextprotocol/sdk` and communicates with Open Code via stdin/stdout (JSON-RPC 2.0).
|
|
1090
|
-
|
|
1091
|
-
2. **`WSClient` bridge** — The stdio server uses `WSClient` from `shared/utils/ws-client.ts` to connect to the main Clopen server via WebSocket. Tool calls are proxied using the standard `.http()` request-response pattern.
|
|
1092
|
-
|
|
1093
|
-
3. **`backend/ws/mcp-bridge/`** — WS `.http()` route that receives bridge requests and executes tool handlers in-process. This is necessary because handlers like browser-automation need access to Puppeteer instances managed by the main server.
|
|
1085
|
+
Open Code connects to a **remote HTTP MCP server** running in the main Clopen process. Tool handlers execute directly in-process — no subprocess, no bridge. This is architecturally identical to how Claude Code uses in-process MCP servers.
|
|
1094
1086
|
|
|
1095
|
-
|
|
1087
|
+
1. **`remote-server.ts`** — HTTP MCP server mounted at `/mcp` on the main Elysia server. Uses `WebStandardStreamableHTTPServerTransport` from `@modelcontextprotocol/sdk` for the Streamable HTTP transport protocol.
|
|
1096
1088
|
|
|
1097
|
-
|
|
1089
|
+
2. **`createRemoteMcpServer()`** — Factory in `servers/helper.ts` that creates a `McpServer` instance with tools registered from the same `RawToolDef` definitions used by Claude Code. Each MCP session gets its own server instance.
|
|
1098
1090
|
|
|
1099
|
-
|
|
1100
|
-
- Proxying tool **execution** to the main server where handlers run in-process
|
|
1101
|
-
- Using the standard WSClient protocol (same as frontend), not custom WebSocket code
|
|
1091
|
+
3. **`getOpenCodeMcpConfig()`** — Returns `{ type: 'remote', url: 'http://localhost:<port>/mcp' }` so Open Code connects directly to the main server.
|
|
1102
1092
|
|
|
1103
1093
|
### Adding Open Code Support to New Tools
|
|
1104
1094
|
|
|
1105
1095
|
No extra work needed! When you add a new tool via `defineServer()`, it's automatically available to both engines:
|
|
1106
1096
|
|
|
1107
1097
|
- **Claude Code**: Uses the in-process `createSdkMcpServer` instance
|
|
1108
|
-
- **Open Code**: `
|
|
1098
|
+
- **Open Code**: `remote-server.ts` uses `createRemoteMcpServer()` with the same `allServers` and `mcpServersConfig`
|
|
1109
1099
|
|
|
1110
1100
|
### File Locations
|
|
1111
1101
|
|
|
1112
1102
|
| File | Location | Purpose |
|
|
1113
1103
|
|------|----------|---------|
|
|
1114
|
-
| Tool definitions | `backend/
|
|
1115
|
-
|
|
|
1116
|
-
|
|
|
1117
|
-
| Open Code config | `backend/
|
|
1118
|
-
| Tool name resolver | `backend/
|
|
1104
|
+
| Tool definitions | `backend/mcp/servers/` | Single source of truth |
|
|
1105
|
+
| Remote MCP server | `backend/mcp/remote-server.ts` | HTTP server for Open Code |
|
|
1106
|
+
| Server factory | `backend/mcp/servers/helper.ts` | `createRemoteMcpServer()` |
|
|
1107
|
+
| Open Code config | `backend/mcp/config.ts` | `getOpenCodeMcpConfig()` |
|
|
1108
|
+
| Tool name resolver | `backend/mcp/config.ts` | `resolveOpenCodeToolName()` |
|
|
1119
1109
|
|
|
1120
1110
|
---
|
|
1121
1111
|
|
|
@@ -1125,7 +1115,7 @@ No extra work needed! When you add a new tool via `defineServer()`, it's automat
|
|
|
1125
1115
|
- [Custom Tools](https://platform.claude.com/docs/en/agent-sdk/custom-tools.md)
|
|
1126
1116
|
- [MCP in the SDK](https://platform.claude.com/docs/en/agent-sdk/mcp.md)
|
|
1127
1117
|
- [MCP SDK (@modelcontextprotocol/sdk)](https://github.com/modelcontextprotocol/typescript-sdk)
|
|
1128
|
-
- [WebSocket API Documentation](
|
|
1118
|
+
- [WebSocket API Documentation](../ws/README.md)
|
|
1129
1119
|
- [Zod Documentation](https://zod.dev/)
|
|
1130
1120
|
|
|
1131
1121
|
---
|
|
@@ -1137,7 +1127,6 @@ For questions or issues:
|
|
|
1137
1127
|
2. Review example implementations in `./servers/`
|
|
1138
1128
|
3. Check console logs for error messages
|
|
1139
1129
|
4. Review Claude Agent SDK documentation
|
|
1140
|
-
5. For WS bridge issues, see `backend/ws/README.md`
|
|
1141
1130
|
|
|
1142
1131
|
---
|
|
1143
1132
|
|
|
@@ -10,7 +10,7 @@ import type { McpRemoteConfig } from '@opencode-ai/sdk';
|
|
|
10
10
|
import type { ServerConfig, ParsedMcpToolName, ServerName } from './types';
|
|
11
11
|
import { serverRegistry, serverFactories } from './servers';
|
|
12
12
|
import { debug } from '$shared/utils/logger';
|
|
13
|
-
import { SERVER_ENV } from '../
|
|
13
|
+
import { SERVER_ENV } from '../utils/env';
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* User-defined MCP Servers Configuration
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Browser Action Handlers
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { browserPreviewServiceManager, type BrowserPreviewService } from "$backend/
|
|
6
|
-
import type { BrowserAutonomousAction } from "$backend/
|
|
7
|
-
import { browserMcpControl } from "$backend/
|
|
8
|
-
import { projectContextService } from "$backend/
|
|
5
|
+
import { browserPreviewServiceManager, type BrowserPreviewService } from "$backend/preview";
|
|
6
|
+
import type { BrowserAutonomousAction } from "$backend/preview/browser/types";
|
|
7
|
+
import { browserMcpControl } from "$backend/preview";
|
|
8
|
+
import { projectContextService } from "$backend/mcp/project-context";
|
|
9
9
|
import { getActiveTabSession } from "./browser";
|
|
10
10
|
import { debug } from "$shared/utils/logger";
|
|
11
11
|
|
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
* All operations work on the active tab automatically.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import { ws } from "$backend/
|
|
13
|
+
import { ws } from "$backend/utils/ws";
|
|
14
14
|
import { debug } from "$shared/utils/logger";
|
|
15
|
-
import { browserMcpControl, browserPreviewServiceManager, type BrowserPreviewService } from "$backend/
|
|
16
|
-
import { projectContextService } from "$backend/
|
|
15
|
+
import { browserMcpControl, browserPreviewServiceManager, type BrowserPreviewService } from "$backend/preview";
|
|
16
|
+
import { projectContextService } from "$backend/mcp/project-context";
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Get BrowserPreviewService for current MCP execution context
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Page Inspection Handlers
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { browserPreviewServiceManager, type BrowserPreviewService } from "$backend/
|
|
6
|
-
import { browserMcpControl } from "$backend/
|
|
7
|
-
import { projectContextService } from "$backend/
|
|
5
|
+
import { browserPreviewServiceManager, type BrowserPreviewService } from "$backend/preview";
|
|
6
|
+
import { browserMcpControl } from "$backend/preview";
|
|
7
|
+
import { projectContextService } from "$backend/mcp/project-context";
|
|
8
8
|
import { getActiveTabSession } from "./browser";
|
|
9
9
|
import { debug } from "$shared/utils/logger";
|
|
10
10
|
|
|
@@ -8,7 +8,7 @@ import { BrowserVideoCapture } from './browser-video-capture.js';
|
|
|
8
8
|
import { BrowserDialogHandler } from './browser-dialog-handler.js';
|
|
9
9
|
import { BrowserNativeUIHandler } from './browser-native-ui-handler.js';
|
|
10
10
|
import { browserMcpControl } from './browser-mcp-control.js';
|
|
11
|
-
import { ws } from '$backend/
|
|
11
|
+
import { ws } from '$backend/utils/ws';
|
|
12
12
|
import { debug } from '$shared/utils/logger';
|
|
13
13
|
import type {
|
|
14
14
|
BrowserTab,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Browser, BrowserContext, Page } from 'puppeteer';
|
|
2
2
|
import { EventEmitter } from 'events';
|
|
3
|
-
import { getViewportDimensions } from '$frontend/
|
|
3
|
+
import { getViewportDimensions } from '$frontend/utils/preview-constants.js';
|
|
4
4
|
import type { BrowserTab, BrowserTabInfo, DeviceSize, Rotation } from './types';
|
|
5
5
|
import { DEFAULT_STREAMING_CONFIG } from './types';
|
|
6
6
|
import { browserPool } from './browser-pool';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Browser, BrowserContext, Page } from 'puppeteer';
|
|
2
|
-
import type { DeviceSize, Rotation } from '$frontend/
|
|
2
|
+
import type { DeviceSize, Rotation } from '$frontend/utils/preview-constants.js';
|
|
3
3
|
|
|
4
4
|
// Re-export types from preview config
|
|
5
5
|
export type { DeviceSize, Rotation };
|