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,6 +1,6 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
2
|
import { Automation, Agent, Skill } from '../../shared/types';
|
|
3
|
-
import { Clock, Plus, Play, Pause,
|
|
3
|
+
import { Clock, Plus, Play, Pause, Trash2, Calendar, Zap } from 'lucide-react';
|
|
4
4
|
|
|
5
5
|
interface AutomationPanelProps {
|
|
6
6
|
automations: Automation[];
|
|
@@ -50,14 +50,19 @@ export const AutomationPanel: React.FC<AutomationPanelProps> = ({
|
|
|
50
50
|
|
|
51
51
|
return (
|
|
52
52
|
<div className="h-full flex flex-col">
|
|
53
|
-
<div className="p-4 border-b border-border flex items-center justify-between">
|
|
53
|
+
<div className="p-4 border-b border-[var(--border-subtle)] flex items-center justify-between">
|
|
54
54
|
<div>
|
|
55
|
-
<h2
|
|
56
|
-
|
|
55
|
+
<h2
|
|
56
|
+
className="text-[18px] font-medium text-[var(--text-primary)]"
|
|
57
|
+
style={{ fontFamily: 'var(--font-display)', fontStyle: 'italic', fontWeight: 300 }}
|
|
58
|
+
>
|
|
59
|
+
Automations
|
|
60
|
+
</h2>
|
|
61
|
+
<p className="text-[12px] text-[var(--text-muted)]">Schedule and automate agent tasks</p>
|
|
57
62
|
</div>
|
|
58
63
|
<button
|
|
59
64
|
onClick={() => setShowCreateModal(true)}
|
|
60
|
-
className="flex items-center gap-2 px-4 py-2 bg-
|
|
65
|
+
className="flex items-center gap-2 px-4 py-2 bg-[var(--teal-500)] text-[var(--bg-void)] rounded-[var(--radius-sm)] hover:bg-[var(--teal-400)] text-[13px] font-medium transition-colors"
|
|
61
66
|
>
|
|
62
67
|
<Plus className="w-4 h-4" />
|
|
63
68
|
New Automation
|
|
@@ -69,35 +74,35 @@ export const AutomationPanel: React.FC<AutomationPanelProps> = ({
|
|
|
69
74
|
{automations.map(automation => (
|
|
70
75
|
<div
|
|
71
76
|
key={automation.id}
|
|
72
|
-
className="p-4 bg-card border border-border rounded-lg"
|
|
77
|
+
className="p-4 bg-[var(--bg-card)] border border-[var(--border-subtle)] rounded-[var(--radius-lg)] hover:border-[var(--border-accent)] transition-colors"
|
|
73
78
|
>
|
|
74
79
|
<div className="flex items-start justify-between mb-3">
|
|
75
80
|
<div className="flex items-center gap-2">
|
|
76
|
-
<Clock className="w-5 h-5 text-muted
|
|
77
|
-
<span className="font-medium">{automation.name}</span>
|
|
81
|
+
<Clock className="w-5 h-5 text-[var(--text-muted)]" />
|
|
82
|
+
<span className="font-medium text-[13px] text-[var(--text-primary)]">{automation.name}</span>
|
|
78
83
|
</div>
|
|
79
84
|
<div className="flex items-center gap-2">
|
|
80
85
|
<button
|
|
81
86
|
onClick={() => handleToggle(automation.id, !automation.enabled)}
|
|
82
|
-
className={`p-1.5 rounded-
|
|
87
|
+
className={`p-1.5 rounded-[var(--radius-sm)] transition-colors ${
|
|
83
88
|
automation.enabled
|
|
84
|
-
? 'text-
|
|
85
|
-
: 'text-muted
|
|
89
|
+
? 'text-[var(--success)] hover:bg-[rgba(60,200,120,0.1)]'
|
|
90
|
+
: 'text-[var(--text-muted)] hover:bg-[var(--bg-hover)]'
|
|
86
91
|
}`}
|
|
87
92
|
>
|
|
88
93
|
{automation.enabled ? <Pause className="w-4 h-4" /> : <Play className="w-4 h-4" />}
|
|
89
94
|
</button>
|
|
90
|
-
<button className="p-1.5 text-
|
|
95
|
+
<button className="p-1.5 text-[var(--error)] hover:bg-[rgba(232,90,106,0.1)] rounded-[var(--radius-sm)] transition-colors">
|
|
91
96
|
<Trash2 className="w-4 h-4" />
|
|
92
97
|
</button>
|
|
93
98
|
</div>
|
|
94
99
|
</div>
|
|
95
100
|
|
|
96
|
-
<p className="text-
|
|
101
|
+
<p className="text-[12px] text-[var(--text-muted)] mb-3">
|
|
97
102
|
{automation.description}
|
|
98
103
|
</p>
|
|
99
104
|
|
|
100
|
-
<div className="flex items-center gap-4 text-
|
|
105
|
+
<div className="flex items-center gap-4 text-[11px] text-[var(--text-muted)]">
|
|
101
106
|
<div className="flex items-center gap-1">
|
|
102
107
|
<Calendar className="w-3 h-3" />
|
|
103
108
|
<span className="capitalize">{automation.trigger.type}</span>
|
|
@@ -114,8 +119,8 @@ export const AutomationPanel: React.FC<AutomationPanelProps> = ({
|
|
|
114
119
|
</div>
|
|
115
120
|
|
|
116
121
|
{automation.enabled && (
|
|
117
|
-
<div className="mt-3 flex items-center gap-2 text-
|
|
118
|
-
<div className="w-2 h-2 bg-
|
|
122
|
+
<div className="mt-3 flex items-center gap-2 text-[11px] text-[var(--success)]">
|
|
123
|
+
<div className="w-2 h-2 bg-[var(--success)] rounded-full animate-pulse" />
|
|
119
124
|
Active
|
|
120
125
|
</div>
|
|
121
126
|
)}
|
|
@@ -123,44 +128,44 @@ export const AutomationPanel: React.FC<AutomationPanelProps> = ({
|
|
|
123
128
|
))}
|
|
124
129
|
|
|
125
130
|
{automations.length === 0 && (
|
|
126
|
-
<div className="col-span-full flex flex-col items-center justify-center py-12 text-muted
|
|
131
|
+
<div className="col-span-full flex flex-col items-center justify-center py-12 text-[var(--text-muted)]">
|
|
127
132
|
<Clock className="w-16 h-16 mb-4 opacity-30" />
|
|
128
|
-
<p className="text-
|
|
129
|
-
<p className="text-
|
|
133
|
+
<p className="text-[15px] font-medium text-[var(--text-primary)]">No automations yet</p>
|
|
134
|
+
<p className="text-[12px]">Create an automation to schedule agent tasks</p>
|
|
130
135
|
</div>
|
|
131
136
|
)}
|
|
132
137
|
</div>
|
|
133
138
|
</div>
|
|
134
139
|
|
|
135
140
|
{showCreateModal && (
|
|
136
|
-
<div className="fixed inset-0 bg-
|
|
137
|
-
<div className="bg-card border border-border rounded-lg p-6 w-[600px]">
|
|
138
|
-
<h2 className="text-
|
|
141
|
+
<div className="fixed inset-0 bg-[rgba(3,7,9,0.8)] flex items-center justify-center z-50">
|
|
142
|
+
<div className="bg-[var(--bg-card)] border border-[var(--border-subtle)] rounded-[var(--radius-lg)] p-6 w-[600px]">
|
|
143
|
+
<h2 className="text-[16px] font-medium text-[var(--text-primary)] mb-4">Create New Automation</h2>
|
|
139
144
|
|
|
140
145
|
<div className="space-y-4">
|
|
141
146
|
<div>
|
|
142
|
-
<label className="block text-
|
|
147
|
+
<label className="block text-[11px] font-medium mb-1 text-[var(--text-secondary)]">Name</label>
|
|
143
148
|
<input
|
|
144
149
|
type="text"
|
|
145
150
|
value={newAutomation.name}
|
|
146
151
|
onChange={e => setNewAutomation({ ...newAutomation, name: e.target.value })}
|
|
147
|
-
className="w-full px-3 py-2 bg-
|
|
152
|
+
className="w-full px-3 py-2 bg-[var(--bg-elevated)] border border-[var(--border-subtle)] rounded-[var(--radius-md)] text-[13px] text-[var(--text-primary)] placeholder:text-[var(--text-disabled)] focus:outline-none focus:border-[var(--teal-500)]"
|
|
148
153
|
placeholder="Daily Code Review"
|
|
149
154
|
/>
|
|
150
155
|
</div>
|
|
151
156
|
|
|
152
157
|
<div>
|
|
153
|
-
<label className="block text-
|
|
158
|
+
<label className="block text-[11px] font-medium mb-1 text-[var(--text-secondary)]">Description</label>
|
|
154
159
|
<textarea
|
|
155
160
|
value={newAutomation.description}
|
|
156
161
|
onChange={e => setNewAutomation({ ...newAutomation, description: e.target.value })}
|
|
157
|
-
className="w-full px-3 py-2 bg-
|
|
162
|
+
className="w-full px-3 py-2 bg-[var(--bg-elevated)] border border-[var(--border-subtle)] rounded-[var(--radius-md)] h-20 resize-none text-[13px] text-[var(--text-primary)] placeholder:text-[var(--text-disabled)] focus:outline-none focus:border-[var(--teal-500)]"
|
|
158
163
|
placeholder="What does this automation do?"
|
|
159
164
|
/>
|
|
160
165
|
</div>
|
|
161
166
|
|
|
162
167
|
<div>
|
|
163
|
-
<label className="block text-
|
|
168
|
+
<label className="block text-[11px] font-medium mb-1 text-[var(--text-secondary)]">Trigger Type</label>
|
|
164
169
|
<select
|
|
165
170
|
value={newAutomation.triggerType}
|
|
166
171
|
onChange={e => setNewAutomation({
|
|
@@ -168,7 +173,7 @@ export const AutomationPanel: React.FC<AutomationPanelProps> = ({
|
|
|
168
173
|
triggerType: e.target.value as any,
|
|
169
174
|
triggerConfig: e.target.value === 'schedule' ? { cron: '0 9 * * *' } : {}
|
|
170
175
|
})}
|
|
171
|
-
className="w-full px-3 py-2 bg-
|
|
176
|
+
className="w-full px-3 py-2 bg-[var(--bg-elevated)] border border-[var(--border-subtle)] rounded-[var(--radius-md)] text-[13px] text-[var(--text-primary)]"
|
|
172
177
|
>
|
|
173
178
|
<option value="schedule">Schedule (Cron)</option>
|
|
174
179
|
<option value="event">Event</option>
|
|
@@ -179,7 +184,7 @@ export const AutomationPanel: React.FC<AutomationPanelProps> = ({
|
|
|
179
184
|
|
|
180
185
|
{newAutomation.triggerType === 'schedule' && (
|
|
181
186
|
<div>
|
|
182
|
-
<label className="block text-
|
|
187
|
+
<label className="block text-[11px] font-medium mb-1 text-[var(--text-secondary)]">Cron Expression</label>
|
|
183
188
|
<input
|
|
184
189
|
type="text"
|
|
185
190
|
value={newAutomation.triggerConfig.cron}
|
|
@@ -187,10 +192,10 @@ export const AutomationPanel: React.FC<AutomationPanelProps> = ({
|
|
|
187
192
|
...newAutomation,
|
|
188
193
|
triggerConfig: { cron: e.target.value }
|
|
189
194
|
})}
|
|
190
|
-
className="w-full px-3 py-2 bg-
|
|
195
|
+
className="w-full px-3 py-2 bg-[var(--bg-elevated)] border border-[var(--border-subtle)] rounded-[var(--radius-md)] text-[13px] text-[var(--teal-300)] font-[var(--font-mono)] placeholder:text-[var(--text-disabled)] focus:outline-none focus:border-[var(--teal-500)]"
|
|
191
196
|
placeholder="0 9 * * *"
|
|
192
197
|
/>
|
|
193
|
-
<p className="text-
|
|
198
|
+
<p className="text-[10px] text-[var(--text-muted)] mt-1">
|
|
194
199
|
Example: 0 9 * * * (every day at 9 AM)
|
|
195
200
|
</p>
|
|
196
201
|
</div>
|
|
@@ -200,14 +205,14 @@ export const AutomationPanel: React.FC<AutomationPanelProps> = ({
|
|
|
200
205
|
<div className="flex justify-end gap-2 mt-6">
|
|
201
206
|
<button
|
|
202
207
|
onClick={() => setShowCreateModal(false)}
|
|
203
|
-
className="px-4 py-2 text-muted-
|
|
208
|
+
className="px-4 py-2 text-[var(--text-muted)] hover:text-[var(--text-primary)] text-[13px] transition-colors"
|
|
204
209
|
>
|
|
205
210
|
Cancel
|
|
206
211
|
</button>
|
|
207
212
|
<button
|
|
208
213
|
onClick={handleCreate}
|
|
209
214
|
disabled={!newAutomation.name}
|
|
210
|
-
className="px-4 py-2 bg-
|
|
215
|
+
className="px-4 py-2 bg-[var(--teal-500)] text-[var(--bg-void)] rounded-[var(--radius-sm)] disabled:opacity-50 text-[13px] font-medium transition-colors hover:bg-[var(--teal-400)]"
|
|
211
216
|
>
|
|
212
217
|
Create Automation
|
|
213
218
|
</button>
|
|
@@ -217,4 +222,4 @@ export const AutomationPanel: React.FC<AutomationPanelProps> = ({
|
|
|
217
222
|
)}
|
|
218
223
|
</div>
|
|
219
224
|
);
|
|
220
|
-
};
|
|
225
|
+
};
|