Compare commits
28 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f11ff3475b | |||
| e74cc15d71 | |||
| 8cc68989dd | |||
| 68be4dcf57 | |||
| eb4d2a6c7b | |||
| bf6cb764ec | |||
| a2a265423f | |||
| 5f39e314b6 | |||
| b7e87b4af8 | |||
| b34b2f3d7b | |||
| 5b6bf42576 | |||
| a72ca7868e | |||
| a0f43c90c4 | |||
| 41b85052f0 | |||
| 4120031e0d | |||
| a499fa19fb | |||
| 6867dabf09 | |||
| d09223c362 | |||
| fb5ae96a44 | |||
| dbe62e82e1 | |||
| e5c72ac13e | |||
| dc143e7cb5 | |||
| 80443892f3 | |||
| 70e89c8f20 | |||
| d5581b1bb4 | |||
| 6d4253dff9 | |||
| 4618e81d20 | |||
| 7fa971cbcd |
Generated
+1
-1
@@ -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",
|
||||
|
||||
+1
-1
@@ -178,7 +178,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",
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"nameShort": "Void",
|
||||
"nameLong": "Void",
|
||||
"voidVersion": "1.0.2",
|
||||
"voidVersion": "1.0.3",
|
||||
"applicationName": "void",
|
||||
"dataFolderName": ".void-editor",
|
||||
"win32MutexName": "voideditor",
|
||||
|
||||
+1231
-1039
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
Before Width: | Height: | Size: 173 KiB After Width: | Height: | Size: 200 KiB |
@@ -56,7 +56,7 @@ export type ExtensionVirtualWorkspaceSupport = {
|
||||
|
||||
export interface IProductConfiguration {
|
||||
readonly version: string;
|
||||
readonly voidVersion?: string; // Void added this
|
||||
readonly voidVersion: string; // Void added this
|
||||
readonly release: string; // VSCodium added this
|
||||
readonly date?: string;
|
||||
readonly quality?: string;
|
||||
|
||||
@@ -105,7 +105,9 @@ export class DarwinUpdateService extends AbstractUpdateService implements IRelau
|
||||
}
|
||||
|
||||
const fetchedVersion = update.productVersion.replace(/(\d+\.\d+\.\d+)(?:\.(\d+))(\-\w+)?/, '$1$3+$2');
|
||||
const currentVersion = `${this.productService.version}+${this.productService.release}`;
|
||||
const currentVersion = `${this.productService.voidVersion}+${this.productService.release}`;
|
||||
// Void compares voidVersion, not VSCode version
|
||||
// const currentVersion = `${this.productService.version}+${this.productService.release}`;
|
||||
|
||||
if (semver.compareBuild(currentVersion, fetchedVersion) >= 0) {
|
||||
this.setState(State.Idle(UpdateType.Setup));
|
||||
|
||||
@@ -144,7 +144,9 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
|
||||
}
|
||||
|
||||
const fetchedVersion = update.productVersion.replace(/(\d+\.\d+\.\d+)(?:\.(\d+))(\-\w+)?/, '$1$3+$2');
|
||||
const currentVersion = `${this.productService.version}+${this.productService.release}`;
|
||||
const currentVersion = `${this.productService.voidVersion}+${this.productService.release}`;
|
||||
// Void compares voidVersion, not VSCode version
|
||||
// const currentVersion = `${this.productService.version}+${this.productService.release}`;
|
||||
|
||||
if (semver.compareBuild(currentVersion, fetchedVersion) >= 0) {
|
||||
this.setState(State.Idle(updateType));
|
||||
|
||||
@@ -11,6 +11,7 @@ import * as dom from '../../../../base/browser/dom.js';
|
||||
import { IMetricsService } from '../common/metricsService.js';
|
||||
|
||||
|
||||
|
||||
export interface IMetricsPollService {
|
||||
readonly _serviceBrand: undefined;
|
||||
}
|
||||
|
||||
@@ -412,17 +412,20 @@ export const ButtonStop = ({ className, ...props }: ButtonHTMLAttributes<HTMLBut
|
||||
}
|
||||
|
||||
|
||||
|
||||
const scrollToBottom = (divRef: { current: HTMLElement | null }) => {
|
||||
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<HTMLDivElement | null> }) => {
|
||||
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 (
|
||||
@@ -735,6 +738,8 @@ const ToolHeaderWrapper = ({
|
||||
|
||||
{/* right */}
|
||||
<div className="flex items-center gap-x-2 flex-shrink-0">
|
||||
{isError && <AlertTriangle className='text-void-warning opacity-90 flex-shrink-0' size={14} />}
|
||||
{isRejected && <Ban className='text-void-fg-4 opacity-90 flex-shrink-0' size={14} />}
|
||||
{desc2 && <span className="text-void-fg-4 text-xs">
|
||||
{desc2}
|
||||
</span>}
|
||||
@@ -743,8 +748,6 @@ const ToolHeaderWrapper = ({
|
||||
{`${numResults}${hasNextPage ? '+' : ''} result${numResults !== 1 ? 's' : ''}`}
|
||||
</span>
|
||||
)}
|
||||
{isError && <AlertTriangle className='text-void-warning opacity-90 flex-shrink-0' size={14} />}
|
||||
{isRejected && <Ban className='text-void-fg-4 opacity-90 flex-shrink-0' size={14} />}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
</VoidButton>
|
||||
</div>
|
||||
<div className='my-4'>
|
||||
<VoidButton onClick={() => { nativeHostService.showItemInFolder(environmentService.logsHome.fsPath) }}>
|
||||
Open Logs
|
||||
</VoidButton>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user