Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "codeg",
|
"name": "codeg",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.6.11",
|
"version": "0.6.12",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev --turbopack",
|
"dev": "next dev --turbopack",
|
||||||
"build": "next build",
|
"build": "next build",
|
||||||
|
|||||||
10
pnpm-lock.yaml
generated
10
pnpm-lock.yaml
generated
@@ -4555,10 +4555,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
|
resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
|
||||||
engines: {node: '>=4.0'}
|
engines: {node: '>=4.0'}
|
||||||
|
|
||||||
katex@0.16.40:
|
|
||||||
resolution: {integrity: sha512-1DJcK/L05k1Y9Gf7wMcyuqFOL6BiY3vY0CFcAM/LPRN04NALxcl6u7lOWNsp3f/bCHWxigzQl6FbR95XJ4R84Q==}
|
|
||||||
hasBin: true
|
|
||||||
|
|
||||||
katex@0.16.45:
|
katex@0.16.45:
|
||||||
resolution: {integrity: sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==}
|
resolution: {integrity: sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
@@ -7340,7 +7336,7 @@ snapshots:
|
|||||||
es-toolkit: 1.45.1
|
es-toolkit: 1.45.1
|
||||||
fast-deep-equal: 3.1.3
|
fast-deep-equal: 3.1.3
|
||||||
immer: 11.1.4
|
immer: 11.1.4
|
||||||
katex: 0.16.40
|
katex: 0.16.45
|
||||||
leva: 0.10.1(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
leva: 0.10.1(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
||||||
lucide-react: 0.563.0(react@19.2.4)
|
lucide-react: 0.563.0(react@19.2.4)
|
||||||
marked: 17.0.5
|
marked: 17.0.5
|
||||||
@@ -11402,10 +11398,6 @@ snapshots:
|
|||||||
object.assign: 4.1.7
|
object.assign: 4.1.7
|
||||||
object.values: 1.2.1
|
object.values: 1.2.1
|
||||||
|
|
||||||
katex@0.16.40:
|
|
||||||
dependencies:
|
|
||||||
commander: 8.3.0
|
|
||||||
|
|
||||||
katex@0.16.45:
|
katex@0.16.45:
|
||||||
dependencies:
|
dependencies:
|
||||||
commander: 8.3.0
|
commander: 8.3.0
|
||||||
|
|||||||
2
src-tauri/Cargo.lock
generated
2
src-tauri/Cargo.lock
generated
@@ -853,7 +853,7 @@ checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "codeg"
|
name = "codeg"
|
||||||
version = "0.6.11"
|
version = "0.6.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"agent-client-protocol-schema",
|
"agent-client-protocol-schema",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "codeg"
|
name = "codeg"
|
||||||
version = "0.6.11"
|
version = "0.6.12"
|
||||||
description = "Agent Code Generation App"
|
description = "Agent Code Generation App"
|
||||||
authors = ["feitao"]
|
authors = ["feitao"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://schema.tauri.app/config/2",
|
"$schema": "https://schema.tauri.app/config/2",
|
||||||
"productName": "codeg",
|
"productName": "codeg",
|
||||||
"version": "0.6.11",
|
"version": "0.6.12",
|
||||||
"identifier": "app.codeg",
|
"identifier": "app.codeg",
|
||||||
"build": {
|
"build": {
|
||||||
"beforeDevCommand": "pnpm dev",
|
"beforeDevCommand": "pnpm dev",
|
||||||
|
|||||||
@@ -174,6 +174,22 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Unified scrollbar style for scrollable containers.
|
||||||
|
Matches StickToBottom's internal scrollbar-gutter so all scroll areas
|
||||||
|
behave the same: symmetric gutter, no layout shift. */
|
||||||
|
.scrollbar-thin {
|
||||||
|
scrollbar-width: thin;
|
||||||
|
scrollbar-color: var(--border) transparent;
|
||||||
|
scrollbar-gutter: stable both-edges;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Single-edge variant: only reserves space on the scrollbar side */
|
||||||
|
.scrollbar-thin-edge {
|
||||||
|
scrollbar-width: thin;
|
||||||
|
scrollbar-color: var(--border) transparent;
|
||||||
|
scrollbar-gutter: stable;
|
||||||
|
}
|
||||||
|
|
||||||
/* Streamdown code blocks: dark mode via shiki dual-theme CSS variables */
|
/* Streamdown code blocks: dark mode via shiki dual-theme CSS variables */
|
||||||
.dark [data-streamdown="code-block-body"] {
|
.dark [data-streamdown="code-block-body"] {
|
||||||
background-color: var(--shiki-dark-bg, var(--sdm-bg, transparent)) !important;
|
background-color: var(--shiki-dark-bg, var(--sdm-bg, transparent)) !important;
|
||||||
|
|||||||
@@ -482,11 +482,8 @@ export function SidebarConversationList({
|
|||||||
<div
|
<div
|
||||||
ref={scrollContainerRef}
|
ref={scrollContainerRef}
|
||||||
className={cn(
|
className={cn(
|
||||||
"flex-1 min-h-0 overflow-y-auto px-1.5",
|
"flex-1 min-h-0 overflow-y-auto scrollbar-thin",
|
||||||
"[overflow-anchor:none]",
|
"[overflow-anchor:none]"
|
||||||
"[&::-webkit-scrollbar]:w-1.5",
|
|
||||||
"[&::-webkit-scrollbar-thumb]:rounded-full",
|
|
||||||
"[&::-webkit-scrollbar-thumb]:bg-border"
|
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<Virtualizer ref={virtualizerRef} itemSize={CARD_HEIGHT}>
|
<Virtualizer ref={virtualizerRef} itemSize={CARD_HEIGHT}>
|
||||||
|
|||||||
@@ -546,7 +546,7 @@ export function UnifiedDiffPreview({
|
|||||||
|
|
||||||
if (files.length === 0) {
|
if (files.length === 0) {
|
||||||
return (
|
return (
|
||||||
<div className={cn("h-full overflow-auto", className)}>
|
<div className={cn("h-full overflow-auto scrollbar-thin", className)}>
|
||||||
<pre className="font-mono text-[11px] leading-5 whitespace-pre-wrap text-muted-foreground p-3">
|
<pre className="font-mono text-[11px] leading-5 whitespace-pre-wrap text-muted-foreground p-3">
|
||||||
{diffText}
|
{diffText}
|
||||||
</pre>
|
</pre>
|
||||||
@@ -555,7 +555,7 @@ export function UnifiedDiffPreview({
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={cn("h-full overflow-auto", className)}>
|
<div className={cn("h-full overflow-auto scrollbar-thin", className)}>
|
||||||
<div className="space-y-3">
|
<div className="space-y-3">
|
||||||
{files.map((file) => {
|
{files.map((file) => {
|
||||||
const newFile = isNewFileOnly(file)
|
const newFile = isNewFileOnly(file)
|
||||||
@@ -586,7 +586,7 @@ export function UnifiedDiffPreview({
|
|||||||
)}
|
)}
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div className="overflow-auto">
|
<div className="overflow-auto scrollbar-thin">
|
||||||
<div className="inline-block min-w-full">
|
<div className="inline-block min-w-full">
|
||||||
{newFile
|
{newFile
|
||||||
? file.hunks.map((hunk) => (
|
? file.hunks.map((hunk) => (
|
||||||
|
|||||||
@@ -693,7 +693,7 @@ function DiffFileList({
|
|||||||
</p>
|
</p>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="flex-1 min-h-0 overflow-y-auto">
|
<div className="flex-1 min-h-0 overflow-y-auto scrollbar-thin">
|
||||||
<div className="py-1">
|
<div className="py-1">
|
||||||
{diffOutline.files.map((file) => (
|
{diffOutline.files.map((file) => (
|
||||||
<ContextMenu key={file.key}>
|
<ContextMenu key={file.key}>
|
||||||
|
|||||||
@@ -2167,7 +2167,7 @@ export function FileTreeTab() {
|
|||||||
<div className="flex flex-col h-full">
|
<div className="flex flex-col h-full">
|
||||||
<ContextMenu>
|
<ContextMenu>
|
||||||
<ContextMenuTrigger asChild>
|
<ContextMenuTrigger asChild>
|
||||||
<div className="flex-1 min-h-0 overflow-auto pb-1 [scrollbar-gutter:stable] [&::-webkit-scrollbar]:h-1.5 [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-border">
|
<div className="flex-1 min-h-0 overflow-auto pb-1 scrollbar-thin-edge">
|
||||||
<FileTree
|
<FileTree
|
||||||
key={folder?.path ?? "file-tree-empty"}
|
key={folder?.path ?? "file-tree-empty"}
|
||||||
className="border-0 rounded-none bg-transparent w-max min-w-full"
|
className="border-0 rounded-none bg-transparent w-max min-w-full"
|
||||||
|
|||||||
@@ -1287,7 +1287,7 @@ export function GitChangesTab() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="h-full min-h-0 overflow-y-auto">
|
<div className="h-full min-h-0 overflow-y-auto scrollbar-thin-edge">
|
||||||
{trackedChanges.length === 0 && untrackedChanges.length === 0 ? (
|
{trackedChanges.length === 0 && untrackedChanges.length === 0 ? (
|
||||||
<div className="flex items-center justify-center h-full p-4">
|
<div className="flex items-center justify-center h-full p-4">
|
||||||
<p className="text-xs text-muted-foreground text-center">
|
<p className="text-xs text-muted-foreground text-center">
|
||||||
|
|||||||
@@ -903,7 +903,7 @@ export function GitLogTab() {
|
|||||||
|
|
||||||
if (loading) {
|
if (loading) {
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col h-full overflow-y-auto p-2">
|
<div className="flex flex-col h-full overflow-y-auto scrollbar-thin px-1 py-3">
|
||||||
{hasBranches && (
|
{hasBranches && (
|
||||||
<BranchSelector
|
<BranchSelector
|
||||||
branchList={branchList}
|
branchList={branchList}
|
||||||
@@ -929,7 +929,7 @@ export function GitLogTab() {
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col h-full overflow-y-auto p-2">
|
<div className="flex flex-col h-full overflow-y-auto scrollbar-thin px-1 py-3">
|
||||||
{hasBranches && (
|
{hasBranches && (
|
||||||
<BranchSelector
|
<BranchSelector
|
||||||
branchList={branchList}
|
branchList={branchList}
|
||||||
@@ -959,7 +959,7 @@ export function GitLogTab() {
|
|||||||
|
|
||||||
if (entries.length === 0) {
|
if (entries.length === 0) {
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col h-full overflow-y-auto p-2">
|
<div className="flex flex-col h-full overflow-y-auto scrollbar-thin px-1 py-3">
|
||||||
{hasBranches && (
|
{hasBranches && (
|
||||||
<BranchSelector
|
<BranchSelector
|
||||||
branchList={branchList}
|
branchList={branchList}
|
||||||
@@ -985,7 +985,7 @@ export function GitLogTab() {
|
|||||||
<ContextMenuTrigger asChild>
|
<ContextMenuTrigger asChild>
|
||||||
<div
|
<div
|
||||||
onScroll={handleScroll}
|
onScroll={handleScroll}
|
||||||
className="flex-1 min-h-0 overflow-y-auto p-2 space-y-2"
|
className="flex-1 min-h-0 overflow-y-auto scrollbar-thin px-1 py-3 space-y-3"
|
||||||
>
|
>
|
||||||
{hasBranches && (
|
{hasBranches && (
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ function SessionFilesContent({ conversationId }: { conversationId: number }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="space-y-3 p-3">
|
<div className="space-y-3 px-1 py-3">
|
||||||
{groups.map((group, groupIndex) => {
|
{groups.map((group, groupIndex) => {
|
||||||
const groupKey = `${group.userTurnId}-${group.timestamp}-${groupIndex}`
|
const groupKey = `${group.userTurnId}-${group.timestamp}-${groupIndex}`
|
||||||
const isOpen = openGroups[groupKey] ?? false
|
const isOpen = openGroups[groupKey] ?? false
|
||||||
@@ -290,7 +290,7 @@ export function SessionFilesTab() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col h-full">
|
<div className="flex flex-col h-full">
|
||||||
<div className="flex-1 min-h-0 overflow-y-auto">
|
<div className="flex-1 min-h-0 overflow-y-auto scrollbar-thin">
|
||||||
<SessionFilesContent conversationId={conversationId} />
|
<SessionFilesContent conversationId={conversationId} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1196,7 +1196,7 @@ export function CommitWorkspace({
|
|||||||
placeholder={t("commitMessagePlaceholder")}
|
placeholder={t("commitMessagePlaceholder")}
|
||||||
defaultValue=""
|
defaultValue=""
|
||||||
onChange={handleMessageChange}
|
onChange={handleMessageChange}
|
||||||
className="min-h-[90px] resize-y"
|
className="min-h-[90px] max-h-[200px] resize-y"
|
||||||
/>
|
/>
|
||||||
<div className="mt-3 flex items-center justify-end gap-2">
|
<div className="mt-3 flex items-center justify-end gap-2">
|
||||||
<Button variant="outline" onClick={onCancel}>
|
<Button variant="outline" onClick={onCancel}>
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ export function Sidebar() {
|
|||||||
|
|
||||||
{/* On mobile, clicking a conversation card auto-closes the Sheet */}
|
{/* On mobile, clicking a conversation card auto-closes the Sheet */}
|
||||||
<div
|
<div
|
||||||
className="flex-1 min-h-0 overflow-hidden"
|
className="flex flex-col flex-1 min-h-0 overflow-hidden"
|
||||||
onClick={
|
onClick={
|
||||||
isMobile
|
isMobile
|
||||||
? (e) => {
|
? (e) => {
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ export function VirtualizedMessageThread<T>({
|
|||||||
return (
|
return (
|
||||||
<MessageThreadContent
|
<MessageThreadContent
|
||||||
className={cn("mx-0 max-w-none p-0", contentClassName)}
|
className={cn("mx-0 max-w-none p-0", contentClassName)}
|
||||||
scrollClassName="[overflow-anchor:none]"
|
scrollClassName="scrollbar-thin [overflow-anchor:none]"
|
||||||
{...contentProps}
|
{...contentProps}
|
||||||
>
|
>
|
||||||
{items.length === 0 ? (
|
{items.length === 0 ? (
|
||||||
@@ -88,7 +88,7 @@ export function VirtualizedMessageThread<T>({
|
|||||||
key={getItemKey(item, index)}
|
key={getItemKey(item, index)}
|
||||||
style={itemStyle(index, items.length)}
|
style={itemStyle(index, items.length)}
|
||||||
>
|
>
|
||||||
<div className={cn("mx-auto max-w-3xl px-4", className)}>
|
<div className={cn("mx-auto max-w-3xl px-2", className)}>
|
||||||
{renderItem(item, index)}
|
{renderItem(item, index)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user