codex-linux 1.0.0 → 1.0.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/.github/workflows/ci.yml +0 -27
- package/README.md +40 -39
- package/abyss-teal-design-system.html +1449 -0
- package/dist/renderer/assets/main-AJwWHWV7.js +304 -0
- package/dist/renderer/assets/main-ua9RiJ9-.css +1 -0
- package/dist/renderer/index.html +2 -2
- package/package.json +4 -3
- package/scripts/install.sh +1 -1
- package/src/renderer/App.tsx +45 -15
- package/src/renderer/components/AgentPanel.tsx +94 -125
- package/src/renderer/components/AutomationPanel.tsx +39 -34
- package/src/renderer/components/ChatInterface.tsx +81 -123
- package/src/renderer/components/Header.tsx +24 -38
- package/src/renderer/components/SettingsPanel.tsx +89 -96
- package/src/renderer/components/Sidebar.tsx +33 -51
- package/src/renderer/components/SkillsPanel.tsx +54 -56
- package/src/renderer/components/WelcomeChat.tsx +199 -0
- package/src/renderer/components/WorktreePanel.tsx +32 -27
- package/src/renderer/components/ui/Button.tsx +17 -19
- package/src/renderer/components/ui/Card.tsx +14 -15
- package/src/renderer/components/ui/Input.tsx +12 -13
- package/src/renderer/index.css +37 -59
- package/src/renderer/styles/abyss-teal.css +405 -0
- package/dist/renderer/assets/main-DJlZQBCA.js +0 -304
- package/dist/renderer/assets/main-N33ZXEr8.css +0 -1
|
@@ -1,31 +1,29 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import { cva, type VariantProps } from 'class-variance-authority';
|
|
3
3
|
import { Loader2 } from 'lucide-react';
|
|
4
|
-
import { cn } from '@/lib/utils';
|
|
5
4
|
|
|
6
5
|
const buttonVariants = cva(
|
|
7
|
-
'inline-flex items-center justify-center whitespace-nowrap rounded-
|
|
6
|
+
'inline-flex items-center justify-center gap-1.5 whitespace-nowrap rounded-[var(--radius-sm)] font-medium transition-all duration-[180ms] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--teal-400)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--bg-void)] disabled:pointer-events-none disabled:opacity-50 cursor-pointer border-none',
|
|
8
7
|
{
|
|
9
8
|
variants: {
|
|
10
9
|
variant: {
|
|
11
|
-
|
|
12
|
-
secondary: 'bg-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
danger: 'bg-red-50 text-red-600 hover:bg-red-100',
|
|
10
|
+
primary: 'bg-[var(--teal-500)] text-[var(--bg-void)] hover:bg-[var(--teal-400)] active:scale-[0.98] font-medium',
|
|
11
|
+
secondary: 'bg-transparent text-[var(--teal-400)] border border-[var(--border-accent)] hover:bg-[rgba(0,200,168,0.06)] active:scale-[0.98]',
|
|
12
|
+
ghost: 'bg-transparent text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)] active:scale-[0.98]',
|
|
13
|
+
danger: 'bg-[rgba(232,90,106,0.1)] text-[var(--error)] border border-[rgba(232,90,106,0.2)] hover:bg-[rgba(232,90,106,0.15)]',
|
|
14
|
+
outline: 'bg-transparent text-[var(--text-secondary)] border border-[var(--border-default)] hover:border-[var(--border-accent)] hover:text-[var(--teal-400)]',
|
|
15
|
+
icon: 'bg-[var(--bg-elevated)] text-[var(--text-secondary)] border border-[var(--border-subtle)] hover:bg-[var(--bg-hover)] hover:text-[var(--teal-400)]',
|
|
18
16
|
},
|
|
19
17
|
size: {
|
|
20
|
-
default: 'h-10 px-4 py-2',
|
|
21
|
-
sm: 'h-8 px-3 text-
|
|
22
|
-
lg: 'h-12 px-6',
|
|
23
|
-
icon: 'h-10 w-10',
|
|
24
|
-
'icon-sm': 'h-8 w-8',
|
|
18
|
+
default: 'h-10 px-4.5 py-2 text-[13px]',
|
|
19
|
+
sm: 'h-8 px-3 text-[11px] rounded-[var(--radius-sm)]',
|
|
20
|
+
lg: 'h-12 px-6 text-[14px]',
|
|
21
|
+
icon: 'h-10 w-10 p-2',
|
|
22
|
+
'icon-sm': 'h-8 w-8 p-2',
|
|
25
23
|
},
|
|
26
24
|
},
|
|
27
25
|
defaultVariants: {
|
|
28
|
-
variant: '
|
|
26
|
+
variant: 'primary',
|
|
29
27
|
size: 'default',
|
|
30
28
|
},
|
|
31
29
|
}
|
|
@@ -46,7 +44,7 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
|
|
46
44
|
({ className, variant, size, loading, children, disabled, ariaLabel, ariaDescribedBy, ariaExpanded, ariaPressed, ...props }, ref) => {
|
|
47
45
|
return (
|
|
48
46
|
<button
|
|
49
|
-
className={
|
|
47
|
+
className={buttonVariants({ variant, size, className })}
|
|
50
48
|
ref={ref}
|
|
51
49
|
disabled={disabled || loading}
|
|
52
50
|
aria-label={ariaLabel}
|
|
@@ -56,7 +54,7 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
|
|
56
54
|
{...props}
|
|
57
55
|
>
|
|
58
56
|
{loading && (
|
|
59
|
-
<Loader2 className="
|
|
57
|
+
<Loader2 className="w-4 h-4 animate-spin" aria-hidden="true" />
|
|
60
58
|
)}
|
|
61
59
|
{children}
|
|
62
60
|
</button>
|
|
@@ -65,4 +63,4 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
|
|
65
63
|
);
|
|
66
64
|
Button.displayName = 'Button';
|
|
67
65
|
|
|
68
|
-
export { Button, buttonVariants };
|
|
66
|
+
export { Button, buttonVariants };
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { cva, type VariantProps } from 'class-variance-authority';
|
|
3
|
-
import { cn } from '@/lib/utils';
|
|
4
3
|
|
|
5
4
|
const cardVariants = cva(
|
|
6
|
-
'rounded-
|
|
5
|
+
'rounded-[var(--radius-lg)] bg-[var(--bg-card)] border transition-all duration-[200ms]',
|
|
7
6
|
{
|
|
8
7
|
variants: {
|
|
9
8
|
variant: {
|
|
10
|
-
default: 'hover:
|
|
11
|
-
ghost: 'border-transparent shadow-none hover:bg-
|
|
12
|
-
elevated: 'shadow-md hover:shadow-lg hover
|
|
13
|
-
interactive: 'cursor-pointer hover:
|
|
9
|
+
default: 'border-[var(--border-subtle)] hover:border-[var(--border-accent)] hover:translate-y-[-2px]',
|
|
10
|
+
ghost: 'border-transparent shadow-none hover:bg-[var(--bg-hover)]',
|
|
11
|
+
elevated: 'border-[var(--border-subtle)] shadow-[var(--shadow-md)] hover:shadow-[var(--shadow-lg)] hover:translate-y-[-2px]',
|
|
12
|
+
interactive: 'border-[var(--border-subtle)] cursor-pointer hover:border-[var(--border-accent)] hover:translate-y-[-2px] active:scale-[0.99]',
|
|
14
13
|
},
|
|
15
14
|
padding: {
|
|
16
15
|
none: '',
|
|
17
16
|
sm: 'p-4',
|
|
18
|
-
default: 'p-
|
|
19
|
-
lg: 'p-
|
|
17
|
+
default: 'p-5',
|
|
18
|
+
lg: 'p-7',
|
|
20
19
|
},
|
|
21
20
|
},
|
|
22
21
|
defaultVariants: {
|
|
@@ -35,7 +34,7 @@ const Card = React.forwardRef<HTMLDivElement, CardProps>(
|
|
|
35
34
|
return (
|
|
36
35
|
<div
|
|
37
36
|
ref={ref}
|
|
38
|
-
className={
|
|
37
|
+
className={cardVariants({ variant, padding, className })}
|
|
39
38
|
{...props}
|
|
40
39
|
/>
|
|
41
40
|
);
|
|
@@ -49,7 +48,7 @@ const CardHeader = React.forwardRef<
|
|
|
49
48
|
>(({ className, ...props }, ref) => (
|
|
50
49
|
<div
|
|
51
50
|
ref={ref}
|
|
52
|
-
className={
|
|
51
|
+
className={`flex flex-col space-y-1.5 pb-4 ${className || ''}`}
|
|
53
52
|
{...props}
|
|
54
53
|
/>
|
|
55
54
|
));
|
|
@@ -61,7 +60,7 @@ const CardTitle = React.forwardRef<
|
|
|
61
60
|
>(({ className, ...props }, ref) => (
|
|
62
61
|
<h3
|
|
63
62
|
ref={ref}
|
|
64
|
-
className={
|
|
63
|
+
className={`font-medium leading-none tracking-tight text-[var(--text-primary)] text-[13px] ${className || ''}`}
|
|
65
64
|
{...props}
|
|
66
65
|
/>
|
|
67
66
|
));
|
|
@@ -73,7 +72,7 @@ const CardDescription = React.forwardRef<
|
|
|
73
72
|
>(({ className, ...props }, ref) => (
|
|
74
73
|
<p
|
|
75
74
|
ref={ref}
|
|
76
|
-
className={
|
|
75
|
+
className={`text-[11px] text-[var(--text-muted)] ${className || ''}`}
|
|
77
76
|
{...props}
|
|
78
77
|
/>
|
|
79
78
|
));
|
|
@@ -83,7 +82,7 @@ const CardContent = React.forwardRef<
|
|
|
83
82
|
HTMLDivElement,
|
|
84
83
|
React.HTMLAttributes<HTMLDivElement>
|
|
85
84
|
>(({ className, ...props }, ref) => (
|
|
86
|
-
<div ref={ref} className={
|
|
85
|
+
<div ref={ref} className={className || ''} {...props} />
|
|
87
86
|
));
|
|
88
87
|
CardContent.displayName = 'CardContent';
|
|
89
88
|
|
|
@@ -93,10 +92,10 @@ const CardFooter = React.forwardRef<
|
|
|
93
92
|
>(({ className, ...props }, ref) => (
|
|
94
93
|
<div
|
|
95
94
|
ref={ref}
|
|
96
|
-
className={
|
|
95
|
+
className={`flex items-center pt-4 mt-4 border-t border-[var(--border-faint)] ${className || ''}`}
|
|
97
96
|
{...props}
|
|
98
97
|
/>
|
|
99
98
|
));
|
|
100
99
|
CardFooter.displayName = 'CardFooter';
|
|
101
100
|
|
|
102
|
-
export { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter };
|
|
101
|
+
export { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter };
|
|
@@ -1,38 +1,37 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { cva, type VariantProps } from 'class-variance-authority';
|
|
3
|
-
import { cn } from '@/lib/utils';
|
|
4
3
|
|
|
5
4
|
const inputVariants = cva(
|
|
6
|
-
'flex w-full rounded-
|
|
5
|
+
'flex w-full rounded-[var(--radius-md)] border bg-[var(--bg-elevated)] px-3.5 py-2.5 text-[13px] font-[var(--font-body)] text-[var(--text-primary)] placeholder:text-[var(--text-disabled)] focus-visible:outline-none focus-visible:border-[var(--teal-500)] focus-visible:shadow-[0_0_0_3px_rgba(0,158,136,0.15)] disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-[150ms]',
|
|
7
6
|
{
|
|
8
7
|
variants: {
|
|
9
8
|
variant: {
|
|
10
|
-
default: '
|
|
11
|
-
error: 'border-
|
|
12
|
-
success: 'border-
|
|
9
|
+
default: 'border-[var(--border-subtle)]',
|
|
10
|
+
error: 'border-[rgba(232,90,106,0.3)] focus:border-[var(--error)] focus-visible:shadow-[0_0_0_3px_rgba(232,90,106,0.15)]',
|
|
11
|
+
success: 'border-[rgba(60,200,120,0.3)] focus:border-[var(--success)] focus-visible:shadow-[0_0_0_3px_rgba(60,200,120,0.15)]',
|
|
13
12
|
},
|
|
14
|
-
|
|
13
|
+
inputSize: {
|
|
15
14
|
default: 'h-10',
|
|
16
|
-
sm: 'h-8 text-
|
|
17
|
-
lg: 'h-12 text-
|
|
15
|
+
sm: 'h-8 text-[11px] px-3',
|
|
16
|
+
lg: 'h-12 text-[14px] px-4',
|
|
18
17
|
},
|
|
19
18
|
},
|
|
20
19
|
defaultVariants: {
|
|
21
20
|
variant: 'default',
|
|
22
|
-
|
|
21
|
+
inputSize: 'default',
|
|
23
22
|
},
|
|
24
23
|
}
|
|
25
24
|
);
|
|
26
25
|
|
|
27
26
|
export interface InputProps
|
|
28
|
-
extends React.InputHTMLAttributes<HTMLInputElement>,
|
|
27
|
+
extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,
|
|
29
28
|
VariantProps<typeof inputVariants> {}
|
|
30
29
|
|
|
31
30
|
const Input = React.forwardRef<HTMLInputElement, InputProps>(
|
|
32
|
-
({ className, variant,
|
|
31
|
+
({ className, variant, inputSize, ...props }, ref) => {
|
|
33
32
|
return (
|
|
34
33
|
<input
|
|
35
|
-
className={
|
|
34
|
+
className={inputVariants({ variant, inputSize, className })}
|
|
36
35
|
ref={ref}
|
|
37
36
|
{...props}
|
|
38
37
|
/>
|
|
@@ -41,4 +40,4 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>(
|
|
|
41
40
|
);
|
|
42
41
|
Input.displayName = 'Input';
|
|
43
42
|
|
|
44
|
-
export { Input };
|
|
43
|
+
export { Input };
|
package/src/renderer/index.css
CHANGED
|
@@ -4,62 +4,40 @@
|
|
|
4
4
|
|
|
5
5
|
@layer base {
|
|
6
6
|
:root {
|
|
7
|
-
--background:
|
|
8
|
-
--foreground:
|
|
9
|
-
--card:
|
|
10
|
-
--card-foreground:
|
|
11
|
-
--popover:
|
|
12
|
-
--popover-foreground:
|
|
13
|
-
--primary:
|
|
14
|
-
--primary-foreground:
|
|
15
|
-
--secondary:
|
|
16
|
-
--secondary-foreground:
|
|
17
|
-
--muted:
|
|
18
|
-
--muted-foreground:
|
|
19
|
-
--accent:
|
|
20
|
-
--accent-foreground:
|
|
21
|
-
--destructive: 0
|
|
22
|
-
--destructive-foreground:
|
|
23
|
-
--border:
|
|
24
|
-
--input:
|
|
25
|
-
--ring:
|
|
26
|
-
--radius: 0.
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
.dark {
|
|
30
|
-
--background: 240 10% 3.9%;
|
|
31
|
-
--foreground: 0 0% 98%;
|
|
32
|
-
--card: 240 10% 3.9%;
|
|
33
|
-
--card-foreground: 0 0% 98%;
|
|
34
|
-
--popover: 240 10% 3.9%;
|
|
35
|
-
--popover-foreground: 0 0% 98%;
|
|
36
|
-
--primary: 0 0% 98%;
|
|
37
|
-
--primary-foreground: 240 5.9% 10%;
|
|
38
|
-
--secondary: 240 3.7% 15.9%;
|
|
39
|
-
--secondary-foreground: 0 0% 98%;
|
|
40
|
-
--muted: 240 3.7% 15.9%;
|
|
41
|
-
--muted-foreground: 240 5% 64.9%;
|
|
42
|
-
--accent: 240 3.7% 15.9%;
|
|
43
|
-
--accent-foreground: 0 0% 98%;
|
|
44
|
-
--destructive: 0 62.8% 30.6%;
|
|
45
|
-
--destructive-foreground: 0 0% 98%;
|
|
46
|
-
--border: 240 3.7% 15.9%;
|
|
47
|
-
--input: 240 3.7% 15.9%;
|
|
48
|
-
--ring: 240 4.9% 83.9%;
|
|
7
|
+
--background: 210 50% 3%;
|
|
8
|
+
--foreground: 160 30% 85%;
|
|
9
|
+
--card: 200 35% 6%;
|
|
10
|
+
--card-foreground: 160 30% 85%;
|
|
11
|
+
--popover: 200 35% 6%;
|
|
12
|
+
--popover-foreground: 160 30% 85%;
|
|
13
|
+
--primary: 165 100% 39%;
|
|
14
|
+
--primary-foreground: 210 50% 3%;
|
|
15
|
+
--secondary: 200 30% 10%;
|
|
16
|
+
--secondary-foreground: 160 30% 85%;
|
|
17
|
+
--muted: 200 30% 10%;
|
|
18
|
+
--muted-foreground: 165 30% 35%;
|
|
19
|
+
--accent: 165 100% 39%;
|
|
20
|
+
--accent-foreground: 210 50% 3%;
|
|
21
|
+
--destructive: 0 70% 55%;
|
|
22
|
+
--destructive-foreground: 160 30% 85%;
|
|
23
|
+
--border: 200 30% 10%;
|
|
24
|
+
--input: 200 30% 10%;
|
|
25
|
+
--ring: 165 100% 39%;
|
|
26
|
+
--radius: 0.625rem;
|
|
49
27
|
}
|
|
50
28
|
}
|
|
51
29
|
|
|
52
30
|
@layer base {
|
|
53
31
|
* {
|
|
54
|
-
|
|
32
|
+
border-color: var(--border-faint, rgba(0,200,168,0.06));
|
|
55
33
|
}
|
|
56
34
|
body {
|
|
57
|
-
|
|
35
|
+
background-color: var(--bg-void, #030709);
|
|
36
|
+
color: var(--text-primary, #D8EEE8);
|
|
58
37
|
font-feature-settings: "rlig" 1, "calt" 1;
|
|
59
38
|
}
|
|
60
39
|
}
|
|
61
40
|
|
|
62
|
-
/* Custom scrollbar */
|
|
63
41
|
::-webkit-scrollbar {
|
|
64
42
|
width: 8px;
|
|
65
43
|
height: 8px;
|
|
@@ -70,49 +48,49 @@
|
|
|
70
48
|
}
|
|
71
49
|
|
|
72
50
|
::-webkit-scrollbar-thumb {
|
|
73
|
-
background:
|
|
51
|
+
background: var(--border-default, #1B3040);
|
|
74
52
|
border-radius: 4px;
|
|
75
53
|
}
|
|
76
54
|
|
|
77
55
|
::-webkit-scrollbar-thumb:hover {
|
|
78
|
-
background:
|
|
56
|
+
background: var(--teal-700, #005C4E);
|
|
79
57
|
}
|
|
80
58
|
|
|
81
|
-
/* Code blocks */
|
|
82
59
|
pre {
|
|
83
|
-
background:
|
|
84
|
-
border-radius: var(--radius);
|
|
60
|
+
background: var(--bg-card, #0A1318);
|
|
61
|
+
border-radius: var(--radius-md, 10px);
|
|
85
62
|
padding: 1rem;
|
|
86
63
|
overflow-x: auto;
|
|
64
|
+
border: 1px solid var(--border-subtle, #102028);
|
|
87
65
|
}
|
|
88
66
|
|
|
89
67
|
code {
|
|
90
|
-
font-family: var(--font-mono,
|
|
68
|
+
font-family: var(--font-mono, 'JetBrains Mono', monospace);
|
|
91
69
|
font-size: 0.875em;
|
|
70
|
+
color: var(--teal-300, #00DFC0);
|
|
92
71
|
}
|
|
93
72
|
|
|
94
|
-
/* Agent status indicators */
|
|
95
73
|
.agent-status-idle {
|
|
96
|
-
|
|
74
|
+
color: var(--warning, #E6B94A);
|
|
97
75
|
}
|
|
98
76
|
|
|
99
77
|
.agent-status-running {
|
|
100
|
-
|
|
78
|
+
color: var(--success, #3CC878);
|
|
79
|
+
animation: pulse 2s ease-in-out infinite;
|
|
101
80
|
}
|
|
102
81
|
|
|
103
82
|
.agent-status-paused {
|
|
104
|
-
|
|
83
|
+
color: var(--warning, #E6B94A);
|
|
105
84
|
}
|
|
106
85
|
|
|
107
86
|
.agent-status-error {
|
|
108
|
-
|
|
87
|
+
color: var(--error, #E85A6A);
|
|
109
88
|
}
|
|
110
89
|
|
|
111
90
|
.agent-status-completed {
|
|
112
|
-
|
|
91
|
+
color: var(--info, #6890F4);
|
|
113
92
|
}
|
|
114
93
|
|
|
115
|
-
/* Animations */
|
|
116
94
|
@keyframes slideIn {
|
|
117
95
|
from {
|
|
118
96
|
opacity: 0;
|
|
@@ -126,4 +104,4 @@ code {
|
|
|
126
104
|
|
|
127
105
|
.animate-slide-in {
|
|
128
106
|
animation: slideIn 0.3s ease-out;
|
|
129
|
-
}
|
|
107
|
+
}
|