diff --git a/extensions/open-remote-ssh/src/serverConfig.ts b/extensions/open-remote-ssh/src/serverConfig.ts index 3f2758fa..2478df5d 100644 --- a/extensions/open-remote-ssh/src/serverConfig.ts +++ b/extensions/open-remote-ssh/src/serverConfig.ts @@ -32,12 +32,14 @@ export async function getVSCodeServerConfig(): Promise { const customServerBinaryName = vscode.workspace.getConfiguration('remote.SSH.experimental').get('serverBinaryName', ''); return { - version: vscode.version.replace('-insider', ''), + // version: vscode.version.replace('-insider', ''), commit: productJson.commit, quality: productJson.quality, release: productJson.release, serverApplicationName: customServerBinaryName || productJson.serverApplicationName, serverDataFolderName: productJson.serverDataFolderName, - serverDownloadUrlTemplate: productJson.serverDownloadUrlTemplate + serverDownloadUrlTemplate: productJson.serverDownloadUrlTemplate, + // Void changed this + version: productJson.voidVersion }; } diff --git a/package-lock.json b/package-lock.json index ec62a09d..0e6f871e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -117,7 +117,7 @@ "cssnano": "^6.0.3", "debounce": "^1.0.0", "deemon": "^1.8.0", - "electron": "^34.3.2", + "electron": "34.3.2", "eslint": "^9.11.1", "eslint-formatter-compact": "^8.40.0", "eslint-plugin-header": "3.1.1", diff --git a/product.json b/product.json index 501bef45..ff65f91f 100644 --- a/product.json +++ b/product.json @@ -1,7 +1,7 @@ { "nameShort": "Void", "nameLong": "Void", - "voidVersion": "1.0.4", + "voidVersion": "1.0.3", "applicationName": "void", "dataFolderName": ".void-editor", "win32MutexName": "voideditor", diff --git a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx index 961b7f92..00b26d15 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx @@ -412,17 +412,20 @@ export const ButtonStop = ({ className, ...props }: ButtonHTMLAttributes { + if (divRef.current) { + divRef.current.scrollTop = divRef.current.scrollHeight; + } +}; + + + const ScrollToBottomContainer = ({ children, className, style, scrollContainerRef }: { children: React.ReactNode, className?: string, style?: React.CSSProperties, scrollContainerRef: React.MutableRefObject }) => { const [isAtBottom, setIsAtBottom] = useState(true); // Start at bottom const divRef = scrollContainerRef - const scrollToBottom = () => { - if (divRef.current) { - divRef.current.scrollTop = divRef.current.scrollHeight; - } - }; - const onScroll = () => { const div = divRef.current; if (!div) return; @@ -437,13 +440,13 @@ const ScrollToBottomContainer = ({ children, className, style, scrollContainerRe // When children change (new messages added) useEffect(() => { if (isAtBottom) { - scrollToBottom(); + scrollToBottom(divRef); } }, [children, isAtBottom]); // Dependency on children to detect new messages // Initial scroll to bottom useEffect(() => { - scrollToBottom(); + scrollToBottom(divRef); }, []); return ( @@ -806,7 +809,7 @@ const SimplifiedToolHeader = ({ -const UserMessageComponent = ({ chatMessage, messageIdx, isCommitted }: { chatMessage: ChatMessage & { role: 'user' }, messageIdx: number, isCommitted: boolean, }) => { +const UserMessageComponent = ({ chatMessage, messageIdx, isCommitted, _scrollToBottom }: { chatMessage: ChatMessage & { role: 'user' }, messageIdx: number, isCommitted: boolean, _scrollToBottom: (() => void) | null }) => { const accessor = useAccessor() const chatThreadsService = accessor.get('IChatThreadService') @@ -907,6 +910,7 @@ const UserMessageComponent = ({ chatMessage, messageIdx, isCommitted }: { chatMe console.error('Error while editing message:', e) } sidebarStateService.fireFocusChat() + requestAnimationFrame(() => _scrollToBottom?.()) } const onAbort = () => { @@ -1816,9 +1820,10 @@ type ChatBubbleProps = { chatIsRunning: IsRunningType, threadId: string, isToolBeingWritten: boolean, + _scrollToBottom: (() => void) | null, } -const ChatBubble = ({ chatMessage, isCommitted, messageIdx, isLast, chatIsRunning, threadId, isToolBeingWritten }: ChatBubbleProps) => { +const ChatBubble = ({ chatMessage, isCommitted, messageIdx, isLast, chatIsRunning, threadId, isToolBeingWritten, _scrollToBottom }: ChatBubbleProps) => { const role = chatMessage.role if (role === 'user') { @@ -1826,6 +1831,7 @@ const ChatBubble = ({ chatMessage, isCommitted, messageIdx, isLast, chatIsRunnin chatMessage={chatMessage} messageIdx={messageIdx} isCommitted={isCommitted} + _scrollToBottom={_scrollToBottom} /> } else if (role === 'assistant') { @@ -1999,6 +2005,7 @@ export const SidebarChat = () => { isLast={isLast} threadId={threadId} isToolBeingWritten={toolIsLoading} + _scrollToBottom={() => scrollToBottom(scrollContainerRef)} /> }) }, [previousMessages, isRunning, currentThread, numMessages]) @@ -2019,6 +2026,7 @@ export const SidebarChat = () => { isLast={true} threadId={threadId} isToolBeingWritten={toolIsLoading} + _scrollToBottom={null} /> : null diff --git a/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx b/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx index 95060cb2..493b87bb 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx @@ -46,6 +46,7 @@ import { ILanguageService } from '../../../../../../../editor/common/languages/l import { IVoidModelService } from '../../../../common/voidModelService.js' import { IWorkspaceContextService } from '../../../../../../../platform/workspace/common/workspace.js' import { IVoidCommandBarService } from '../../../voidCommandBarService.js' +import { INativeHostService } from '../../../../../../../platform/native/common/native.js'; // normally to do this you'd use a useEffect that calls .onDidChangeState(), but useEffect mounts too late and misses initial state changes @@ -213,6 +214,7 @@ const getReactAccessor = (accessor: ServicesAccessor) => { IWorkspaceContextService: accessor.get(IWorkspaceContextService), IVoidCommandBarService: accessor.get(IVoidCommandBarService), + INativeHostService: accessor.get(INativeHostService), } as const return reactAccessor diff --git a/src/vs/workbench/contrib/void/browser/react/src/void-settings-tsx/Settings.tsx b/src/vs/workbench/contrib/void/browser/react/src/void-settings-tsx/Settings.tsx index 3b97463a..80ccd6e7 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/void-settings-tsx/Settings.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/void-settings-tsx/Settings.tsx @@ -665,6 +665,8 @@ const OneClickSwitchButton = () => { const GeneralTab = () => { const accessor = useAccessor() const commandService = accessor.get('ICommandService') + const environmentService = accessor.get('IEnvironmentService') + const nativeHostService = accessor.get('INativeHostService') return <> @@ -696,6 +698,11 @@ const GeneralTab = () => { Theme Settings +
+ { nativeHostService.showItemInFolder(environmentService.logsHome.fsPath) }}> + Open Logs + +