@mndrk/agx 2.0.25 → 2.0.26
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/cloud-runtime/standalone/.next/BUILD_ID +1 -1
- package/cloud-runtime/standalone/.next/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/prerender-manifest.json +3 -3
- package/cloud-runtime/standalone/.next/server/app/_global-error.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/_global-error.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/_not-found.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/agents.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/agents.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/agents.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents.segments/agents.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/file-search/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/automations/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/automations.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/automations.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/automations.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/automations.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/automations.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/automations.segments/_tree.segment.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/automations.segments/automations/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/automations.segments/automations.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/board/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/board.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/board.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/board.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/board.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/board.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/board.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/board.segments/board/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/board.segments/board.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/execution-graph/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/execution-graph.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/execution-graph.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/index.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/index.rsc +4 -4
- package/cloud-runtime/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/cloud-runtime/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/index.segments/_tree.segment.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/projects.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/settings.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/settings.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/status.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/status.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/status.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/status.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/status.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/status.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/status.segments/status.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/thread/[id]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/welcome/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/welcome.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/welcome.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__ffbc2e98._.js +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_0ff7c687._.js +2 -4
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_e1769638._.js +2 -4
- package/cloud-runtime/standalone/.next/server/chunks/ssr/components_chat-ui_bfeda794._.js +3 -3
- package/cloud-runtime/standalone/.next/server/middleware-manifest.json +5 -5
- package/cloud-runtime/standalone/.next/server/pages/404.html +2 -2
- package/cloud-runtime/standalone/.next/server/pages/500.html +2 -2
- package/cloud-runtime/standalone/.next/server/server-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/server-reference-manifest.json +1 -1
- package/cloud-runtime/standalone/.next/static/chunks/10b0642440302e99.css +2 -0
- package/cloud-runtime/standalone/.next/static/chunks/4c01a5f19f9e775e.js +8 -0
- package/cloud-runtime/standalone/.next/static/chunks/{da434b1ad885d636.js → 651c7c97d3bd77e0.js} +2 -4
- package/cloud-runtime/standalone/.next/static/chunks/661090206d8bae9b.css +1 -0
- package/cloud-runtime/standalone/.next/static/chunks/{2acd153dc5252e88.js → 99174504a201d23e.js} +2 -4
- package/cloud-runtime/standalone/.next/static/chunks/{64f812259cf8c243.js → b5bd2eb6e0c7f71a.js} +4 -6
- package/cloud-runtime/standalone/app/globals.css +25 -22
- package/cloud-runtime/standalone/components/ActionToolbar.tsx +25 -0
- package/cloud-runtime/standalone/components/IconButton.tsx +35 -0
- package/cloud-runtime/standalone/components/ProjectCard.tsx +2 -2
- package/cloud-runtime/standalone/components/TaskCard.tsx +2 -4
- package/cloud-runtime/standalone/components/chat-ui/Composer.tsx +4 -5
- package/cloud-runtime/standalone/components/chat-ui/FileMentionPopoverItem.tsx +2 -2
- package/cloud-runtime/standalone/components/chat-ui/MessageList.tsx +46 -43
- package/cloud-runtime/standalone/styles/workspaceSidebar.css +2 -0
- package/cloud-runtime/standalone/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/cloud-runtime/standalone/.next/static/chunks/9d50c2514f72d926.css +0 -1
- package/cloud-runtime/standalone/.next/static/chunks/bd6c5b5b4fbd6413.css +0 -2
- package/cloud-runtime/standalone/.next/static/chunks/eab1c7d0246592f8.js +0 -8
- /package/cloud-runtime/standalone/.next/static/{HOfhTqGoYN6GjsW9CCf3t → AB08MY3MKLsqeJYL8OZ2g}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/.next/static/{HOfhTqGoYN6GjsW9CCf3t → AB08MY3MKLsqeJYL8OZ2g}/_clientMiddlewareManifest.json +0 -0
- /package/cloud-runtime/standalone/.next/static/{HOfhTqGoYN6GjsW9CCf3t → AB08MY3MKLsqeJYL8OZ2g}/_ssgManifest.js +0 -0
|
@@ -191,8 +191,8 @@ body {
|
|
|
191
191
|
Scrollbar Styling
|
|
192
192
|
======================================== */
|
|
193
193
|
::-webkit-scrollbar {
|
|
194
|
-
width:
|
|
195
|
-
height:
|
|
194
|
+
width: 6px;
|
|
195
|
+
height: 6px;
|
|
196
196
|
}
|
|
197
197
|
|
|
198
198
|
::-webkit-scrollbar-track {
|
|
@@ -200,50 +200,42 @@ body {
|
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
::-webkit-scrollbar-thumb {
|
|
203
|
-
background:
|
|
204
|
-
border-radius:
|
|
205
|
-
border: 3px solid transparent;
|
|
206
|
-
background-clip: content-box;
|
|
207
|
-
transition: background var(--transition-fast);
|
|
203
|
+
background: #cbd5e1; /* slate-300 */
|
|
204
|
+
border-radius: 4px;
|
|
208
205
|
}
|
|
209
206
|
|
|
210
207
|
::-webkit-scrollbar-thumb:hover {
|
|
211
|
-
background:
|
|
212
|
-
border: 3px solid transparent;
|
|
213
|
-
background-clip: content-box;
|
|
208
|
+
background: #94a3b8; /* slate-400 */
|
|
214
209
|
}
|
|
215
210
|
|
|
216
211
|
.scrollbar-thin::-webkit-scrollbar {
|
|
217
|
-
width:
|
|
212
|
+
width: 4px;
|
|
213
|
+
height: 4px;
|
|
218
214
|
}
|
|
219
215
|
|
|
220
216
|
.scrollbar-thin::-webkit-scrollbar-thumb {
|
|
221
|
-
background:
|
|
222
|
-
border-radius:
|
|
223
|
-
border: 2px solid transparent;
|
|
224
|
-
background-clip: content-box;
|
|
217
|
+
background: #cbd5e1;
|
|
218
|
+
border-radius: 4px;
|
|
225
219
|
}
|
|
226
220
|
|
|
227
221
|
.scrollbar-thin::-webkit-scrollbar-thumb:hover {
|
|
228
|
-
background:
|
|
229
|
-
border: 2px solid transparent;
|
|
230
|
-
background-clip: content-box;
|
|
222
|
+
background: #94a3b8;
|
|
231
223
|
}
|
|
232
224
|
|
|
233
225
|
.dark ::-webkit-scrollbar-thumb {
|
|
234
|
-
background:
|
|
226
|
+
background: #374151; /* gray-700 */
|
|
235
227
|
}
|
|
236
228
|
|
|
237
229
|
.dark ::-webkit-scrollbar-thumb:hover {
|
|
238
|
-
background:
|
|
230
|
+
background: #4b5563; /* gray-600 */
|
|
239
231
|
}
|
|
240
232
|
|
|
241
233
|
.dark .scrollbar-thin::-webkit-scrollbar-thumb {
|
|
242
|
-
background:
|
|
234
|
+
background: #374151;
|
|
243
235
|
}
|
|
244
236
|
|
|
245
237
|
.dark .scrollbar-thin::-webkit-scrollbar-thumb:hover {
|
|
246
|
-
background:
|
|
238
|
+
background: #4b5563;
|
|
247
239
|
}
|
|
248
240
|
|
|
249
241
|
.scrollbar-hide {
|
|
@@ -394,6 +386,10 @@ select:focus-visible {
|
|
|
394
386
|
/* ========================================
|
|
395
387
|
Card Styles
|
|
396
388
|
======================================== */
|
|
389
|
+
.surface-card {
|
|
390
|
+
@apply bg-white border border-gray-200 hover:bg-gray-50 hover:border-gray-300 hover:shadow-sm dark:shadow-none dark:bg-gray-900/40 dark:border-gray-800 rounded-2xl dark:hover:bg-gray-900/60 dark:hover:border-gray-700 transition-all duration-200;
|
|
391
|
+
}
|
|
392
|
+
|
|
397
393
|
.card {
|
|
398
394
|
background: var(--card-bg);
|
|
399
395
|
border: 1px solid var(--card-border);
|
|
@@ -2752,3 +2748,10 @@ select:focus-visible {
|
|
|
2752
2748
|
font-size: 0.6875rem;
|
|
2753
2749
|
color: var(--text-muted);
|
|
2754
2750
|
}
|
|
2751
|
+
|
|
2752
|
+
/* ========================================
|
|
2753
|
+
Surface Card (Prototype Style)
|
|
2754
|
+
======================================== */
|
|
2755
|
+
.surface-card {
|
|
2756
|
+
@apply relative bg-white border border-gray-200 hover:bg-gray-50 hover:border-gray-300 shadow-sm dark:shadow-none dark:bg-gray-900/40 dark:border-gray-800 rounded-2xl dark:hover:bg-gray-900/60 dark:hover:border-gray-700 transition-all duration-200;
|
|
2757
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface ActionToolbarProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
// A wrapper for group-hover revealed actions
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export const ActionToolbar = forwardRef<HTMLDivElement, ActionToolbarProps>(
|
|
8
|
+
({ children, className = '', ...props }, ref) => {
|
|
9
|
+
const baseClasses = "absolute top-4 right-4 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity duration-200 bg-white border border-gray-200 shadow-md dark:shadow-lg dark:bg-gray-900 dark:border-gray-800 rounded-lg p-1";
|
|
10
|
+
|
|
11
|
+
const classes = `${baseClasses} ${className}`.trim();
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<div ref={ref} className={classes} {...props}>
|
|
15
|
+
{children}
|
|
16
|
+
</div>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
ActionToolbar.displayName = 'ActionToolbar';
|
|
22
|
+
|
|
23
|
+
export const ActionToolbarDivider = () => (
|
|
24
|
+
<div className="w-px h-4 bg-gray-200 dark:bg-gray-800 mx-1" />
|
|
25
|
+
);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface IconButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
4
|
+
variant?: 'neutral' | 'primary' | 'destructive' | 'ghost';
|
|
5
|
+
size?: 'sm' | 'md' | 'lg';
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(
|
|
9
|
+
({ className = '', variant = 'neutral', size = 'md', children, ...props }, ref) => {
|
|
10
|
+
const baseClasses = "inline-flex items-center justify-center rounded-md transition-colors duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:opacity-50 disabled:pointer-events-none";
|
|
11
|
+
|
|
12
|
+
const sizeClasses = {
|
|
13
|
+
sm: "p-1 w-6 h-6",
|
|
14
|
+
md: "p-1.5 w-8 h-8",
|
|
15
|
+
lg: "p-2 w-10 h-10"
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const variantClasses = {
|
|
19
|
+
neutral: "text-gray-500 hover:text-gray-900 hover:bg-gray-100 dark:text-gray-400 dark:hover:text-white dark:hover:bg-gray-800",
|
|
20
|
+
ghost: "text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:bg-[var(--muted)]",
|
|
21
|
+
primary: "text-[var(--primary)] hover:text-[var(--primary-foreground)] hover:bg-[var(--primary-hover)]",
|
|
22
|
+
destructive: "text-gray-500 hover:text-red-600 hover:bg-red-50 dark:text-gray-400 dark:hover:text-red-400 dark:hover:bg-red-400/10"
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const classes = `${baseClasses} ${sizeClasses[size]} ${variantClasses[variant]} ${className}`.trim();
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<button ref={ref} className={classes} {...props}>
|
|
29
|
+
{children}
|
|
30
|
+
</button>
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
IconButton.displayName = 'IconButton';
|
|
@@ -27,8 +27,8 @@ export default function ProjectCard({ project, onEdit, onDelete, onClick, onMana
|
|
|
27
27
|
return (
|
|
28
28
|
<div
|
|
29
29
|
onClick={() => onClick?.(project)}
|
|
30
|
-
className={`p-5
|
|
31
|
-
${onClick ? "cursor-pointer hover:border-
|
|
30
|
+
className={`p-5 surface-card space-y-4
|
|
31
|
+
${onClick ? "cursor-pointer hover:border-gray-300 dark:hover:border-gray-700 hover:shadow-md active:scale-[0.99]" : ""}`}
|
|
32
32
|
>
|
|
33
33
|
<div className="flex items-start justify-between gap-4">
|
|
34
34
|
<div>
|
|
@@ -129,15 +129,13 @@ export default function TaskCard({ task, onClick, compact = false, onStatusChang
|
|
|
129
129
|
role="button"
|
|
130
130
|
tabIndex={0}
|
|
131
131
|
onKeyDown={(e) => e.key === 'Enter' && onClick?.()}
|
|
132
|
-
className={`group relative flex flex-col gap-1.5 sm:gap-2 p-2 sm:p-3
|
|
133
|
-
bg-[var(--card-bg)] border shadow-sm
|
|
134
|
-
transition-all duration-200 cursor-grab active:cursor-grabbing
|
|
132
|
+
className={`group relative flex flex-col gap-1.5 sm:gap-2 p-2 sm:p-3 surface-card cursor-grab active:cursor-grabbing
|
|
135
133
|
focus-visible:outline-2 focus-visible:outline-[var(--ring)] focus-visible:outline-offset-2
|
|
136
134
|
${relationship === 'active' ? 'border-primary ring-2 ring-primary/20 z-40' :
|
|
137
135
|
relationship === 'blocking' ? 'border-[var(--status-blocked)] bg-rose-50/30 dark:bg-rose-950/20 z-20' :
|
|
138
136
|
relationship === 'dependent' ? 'border-[var(--status-in-progress)] bg-blue-50/30 dark:bg-blue-950/20 z-20' :
|
|
139
137
|
relationship === 'dimmed' ? 'opacity-40 grayscale scale-[0.98]' :
|
|
140
|
-
'
|
|
138
|
+
''
|
|
141
139
|
}
|
|
142
140
|
${task.status === 'failed' && relationship === 'none' ? 'border-red-200 bg-red-50/30 dark:bg-red-950/20' : ''}
|
|
143
141
|
${task.status === 'completed' && relationship === 'none' ? 'opacity-75 bg-[var(--secondary)]' : ''}
|
|
@@ -485,7 +485,6 @@ export function Composer({
|
|
|
485
485
|
onSend(messageText, maxRounds, ids, metas, pinnedParticipantId ?? undefined);
|
|
486
486
|
|
|
487
487
|
editor.commands.clearContent();
|
|
488
|
-
setPinnedParticipantId(null);
|
|
489
488
|
setThreadRefs([]);
|
|
490
489
|
attachments.clear();
|
|
491
490
|
fileAttachments.clearFilePaths();
|
|
@@ -516,10 +515,10 @@ export function Composer({
|
|
|
516
515
|
<div className="pb-6">
|
|
517
516
|
<div className="max-w-3xl mx-auto">
|
|
518
517
|
<ComposerDropZone onDrop={attachments.stageFiles}>
|
|
519
|
-
<div className=
|
|
518
|
+
<div className="bg-white border border-gray-200 shadow-sm focus-within:border-gray-300 focus-within:ring-1 focus-within:ring-gray-300 dark:bg-gray-900 dark:border-gray-800 dark:shadow-lg dark:focus-within:border-gray-600 dark:focus-within:ring-gray-600 transition-all flex flex-col rounded-2xl">
|
|
520
519
|
{/* Ship Mode header */}
|
|
521
520
|
{onAutoModeChange && (
|
|
522
|
-
<div className={`relative overflow-hidden border-b transition-all duration-500 ${autoMode ? "border-orange-200/50 dark:border-orange-500/30" : "border-
|
|
521
|
+
<div className={`relative overflow-hidden border-b transition-all duration-500 ${autoMode ? "border-orange-200/50 dark:border-orange-500/30" : "border-gray-100 dark:border-gray-800/60"}`}>
|
|
523
522
|
{/* Animated gradient background when active */}
|
|
524
523
|
<div
|
|
525
524
|
className={`absolute inset-0 transition-opacity duration-700 ${autoMode ? "opacity-100" : "opacity-0"}`}
|
|
@@ -576,7 +575,7 @@ export function Composer({
|
|
|
576
575
|
</div>
|
|
577
576
|
</div>
|
|
578
577
|
)}
|
|
579
|
-
<div className="p-1.5
|
|
578
|
+
<div className="p-1.5 transition-all">
|
|
580
579
|
|
|
581
580
|
{attachments.staged.length > 0 && (
|
|
582
581
|
<div className="mx-2 mt-2 mb-1">
|
|
@@ -678,7 +677,7 @@ export function Composer({
|
|
|
678
677
|
</div>
|
|
679
678
|
|
|
680
679
|
{/* Meta Footer */}
|
|
681
|
-
<div className="px-4 pb-2.5 pt-1 flex items-center justify-between border-t border-
|
|
680
|
+
<div className="px-4 pb-2.5 pt-1 flex items-center justify-between border-t border-gray-100 dark:border-gray-800/60 mt-1 transition-colors">
|
|
682
681
|
<div className="flex items-center gap-4">
|
|
683
682
|
{/* Turn Limit — progress bar + selector */}
|
|
684
683
|
<div className="flex items-center gap-2">
|
|
@@ -47,7 +47,7 @@ export function FileMentionPopoverItem({
|
|
|
47
47
|
|
|
48
48
|
return (
|
|
49
49
|
<div
|
|
50
|
-
className={`flex items-center gap-2 px-3 py-2 text-sm transition-colors ${
|
|
50
|
+
className={`flex items-center gap-2 px-3 py-2 text-sm transition-colors duration-200 ${
|
|
51
51
|
isActive ? "bg-[var(--primary-muted)]" : "hover:bg-[var(--app-shell-subtle)]"
|
|
52
52
|
}`}
|
|
53
53
|
>
|
|
@@ -109,7 +109,7 @@ export function FileMentionPopoverItem({
|
|
|
109
109
|
{isFolder && !isContentsMode && (
|
|
110
110
|
<button
|
|
111
111
|
type="button"
|
|
112
|
-
className="shrink-0 rounded px-1.5 py-0.5 text-xs text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)] transition-colors"
|
|
112
|
+
className="shrink-0 rounded px-1.5 py-0.5 text-xs text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)] transition-colors duration-200"
|
|
113
113
|
title="Attach full directory contents instead of manifest"
|
|
114
114
|
aria-label={`Attach full contents of ${displayPath}`}
|
|
115
115
|
onMouseDown={(e) => e.preventDefault()}
|
|
@@ -12,6 +12,8 @@ import { Markdown } from "./Markdown";
|
|
|
12
12
|
import { MessageAttachments } from "./MessageAttachments";
|
|
13
13
|
import { TaskDraftCard } from "./TaskDraftCard";
|
|
14
14
|
import { TaskStatusCard } from "./TaskStatusCard";
|
|
15
|
+
import { ActionToolbar, ActionToolbarDivider } from "../ActionToolbar";
|
|
16
|
+
import { IconButton } from "../IconButton";
|
|
15
17
|
import { MessageSquare, Copy, Hash, Loader2, Trash2, User, Clock, Zap, ListTodo, CheckCircle2, Circle, Link, AtSign, Rocket } from "lucide-react";
|
|
16
18
|
import { agentAvatarUrl } from "./ParticipantBar";
|
|
17
19
|
import { stripMarkers } from "@/lib/chat-utils";
|
|
@@ -331,51 +333,56 @@ export function MessageList({
|
|
|
331
333
|
}
|
|
332
334
|
|
|
333
335
|
return (
|
|
334
|
-
<div key={msg.id} className={`max-w-2xl mx-auto
|
|
336
|
+
<div key={msg.id} className={`max-w-2xl mx-auto surface-card mb-6 group relative ${statusMenuMessageId === msg.id ? 'z-50' : ''}`}>
|
|
335
337
|
{(onCopyThread || onAddToChat || onDeleteThreadRoot) && (
|
|
336
|
-
<
|
|
337
|
-
className="absolute top-4 right-4 z-10 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity"
|
|
338
|
-
>
|
|
338
|
+
<ActionToolbar className="z-10">
|
|
339
339
|
{onAddToChat && (
|
|
340
|
-
<
|
|
340
|
+
<IconButton
|
|
341
341
|
type="button"
|
|
342
|
+
variant="primary"
|
|
343
|
+
size="sm"
|
|
342
344
|
onClick={() => onAddToChat(msg.id)}
|
|
343
|
-
className="p-1.5 text-[var(--app-shell-muted)] hover:bg-[var(--primary-muted)] hover:text-[var(--primary)] rounded-md transition-colors"
|
|
344
345
|
title="Mention in chat"
|
|
345
346
|
>
|
|
346
347
|
<AtSign className="w-3.5 h-3.5" />
|
|
347
|
-
</
|
|
348
|
+
</IconButton>
|
|
348
349
|
)}
|
|
349
|
-
<
|
|
350
|
+
<IconButton
|
|
350
351
|
type="button"
|
|
352
|
+
variant="neutral"
|
|
353
|
+
size="sm"
|
|
351
354
|
onClick={() => { navigator.clipboard.writeText(msg.id); }}
|
|
352
|
-
className="p-1.5 text-[var(--app-shell-muted)] hover:bg-[var(--app-shell-subtle)] rounded-md transition-colors"
|
|
353
355
|
title="Copy message ID"
|
|
354
356
|
>
|
|
355
357
|
<Link className="w-3.5 h-3.5" />
|
|
356
|
-
</
|
|
358
|
+
</IconButton>
|
|
357
359
|
{onCopyThread && (
|
|
358
|
-
<
|
|
360
|
+
<IconButton
|
|
359
361
|
type="button"
|
|
362
|
+
variant="neutral"
|
|
363
|
+
size="sm"
|
|
360
364
|
onClick={() => onCopyThread(msg.id)}
|
|
361
|
-
className="p-1.5 text-[var(--app-shell-muted)] hover:bg-[var(--app-shell-subtle)] rounded-md transition-colors"
|
|
362
365
|
title="Copy thread as markdown"
|
|
363
366
|
>
|
|
364
367
|
<Copy className="w-3.5 h-3.5" />
|
|
365
|
-
</
|
|
368
|
+
</IconButton>
|
|
366
369
|
)}
|
|
367
370
|
{onDeleteThreadRoot && (
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
371
|
+
<>
|
|
372
|
+
<ActionToolbarDivider />
|
|
373
|
+
<IconButton
|
|
374
|
+
type="button"
|
|
375
|
+
variant="destructive"
|
|
376
|
+
size="sm"
|
|
377
|
+
onClick={() => onDeleteThreadRoot(msg.id)}
|
|
378
|
+
disabled={isDeletingRoot}
|
|
379
|
+
title="Delete this thread"
|
|
380
|
+
>
|
|
381
|
+
{isDeletingRoot ? <Loader2 className="w-3.5 h-3.5 animate-spin" /> : <Trash2 className="w-3.5 h-3.5" />}
|
|
382
|
+
</IconButton>
|
|
383
|
+
</>
|
|
377
384
|
)}
|
|
378
|
-
</
|
|
385
|
+
</ActionToolbar>
|
|
379
386
|
)}
|
|
380
387
|
<div className="flex flex-col">
|
|
381
388
|
<div className="p-5">
|
|
@@ -495,18 +502,18 @@ export function MessageList({
|
|
|
495
502
|
)}
|
|
496
503
|
|
|
497
504
|
{/* Action Pills */}
|
|
498
|
-
<div className="flex flex-wrap items-center gap-2 mt-2">
|
|
505
|
+
<div className="flex flex-wrap items-center gap-2 pt-2 mt-2 border-t border-[var(--card-border)]">
|
|
499
506
|
{onSummarize && threadData && threadData.replyCount > 0 && (
|
|
500
507
|
<button
|
|
501
508
|
type="button"
|
|
502
509
|
onClick={() => onSummarize(msg.id)}
|
|
503
510
|
disabled={summarizingThreads?.has(msg.id)}
|
|
504
|
-
className="flex items-center gap-1.5 px-3 py-1.5 bg-[var(--
|
|
511
|
+
className="flex items-center gap-1.5 px-3 py-1.5 bg-[var(--app-shell-subtle)] hover:bg-[var(--item-hover-bg)] text-[var(--foreground)] border border-[var(--card-border)] text-xs font-medium rounded-lg transition-colors disabled:opacity-50"
|
|
505
512
|
>
|
|
506
513
|
{summarizingThreads?.has(msg.id) ? (
|
|
507
|
-
<Loader2 className="w-3.5 h-3.5 animate-spin text-[var(--
|
|
514
|
+
<Loader2 className="w-3.5 h-3.5 animate-spin text-[var(--muted-foreground)]" />
|
|
508
515
|
) : (
|
|
509
|
-
<Clock className="w-3.5 h-3.5 text-[var(--
|
|
516
|
+
<Clock className="w-3.5 h-3.5 text-[var(--muted-foreground)]" />
|
|
510
517
|
)}
|
|
511
518
|
{summarizingThreads?.has(msg.id) ? "Summarizing\u2026" : "Summarize"}
|
|
512
519
|
</button>
|
|
@@ -517,29 +524,26 @@ export function MessageList({
|
|
|
517
524
|
type="button"
|
|
518
525
|
onClick={() => onCreateTasks(msg.id)}
|
|
519
526
|
disabled={extractingTasks?.has(msg.id)}
|
|
520
|
-
className="flex items-center gap-1.5 px-3 py-1.5 bg-[var(--
|
|
527
|
+
className="flex items-center gap-1.5 px-3 py-1.5 bg-[var(--app-shell-subtle)] hover:bg-[var(--item-hover-bg)] text-[var(--foreground)] border border-[var(--card-border)] text-xs font-medium rounded-lg transition-colors disabled:opacity-50"
|
|
521
528
|
>
|
|
522
529
|
{extractingTasks?.has(msg.id) ? (
|
|
523
|
-
<Loader2 className="w-3.5 h-3.5 animate-spin text-[var(--
|
|
530
|
+
<Loader2 className="w-3.5 h-3.5 animate-spin text-[var(--muted-foreground)]" />
|
|
524
531
|
) : (
|
|
525
|
-
<ListTodo className="w-3.5 h-3.5 text-[var(--
|
|
532
|
+
<ListTodo className="w-3.5 h-3.5 text-[var(--muted-foreground)]" />
|
|
526
533
|
)}
|
|
527
534
|
{extractingTasks?.has(msg.id) ? "Extracting…" : taskDrafts?.[msg.id] ? "Re-extract tasks" : "Create tasks"}
|
|
528
535
|
</button>
|
|
529
536
|
)}
|
|
530
537
|
|
|
531
538
|
{threadData && threadData.replyCount > 0 && onOpenThread && (
|
|
532
|
-
<
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
className="flex items-center gap-2 px-3 py-1.5 bg-[var(--app-shell-subtle)] border border-[var(--app-shell-border)] rounded-full text-xs font-bold text-[var(--app-shell-muted)] hover:bg-[var(--item-hover-bg)] transition-colors"
|
|
536
|
-
>
|
|
537
|
-
<div className="flex -space-x-1.5">
|
|
539
|
+
<div className="ml-auto flex items-center gap-2 cursor-pointer hover:opacity-80 transition-opacity" onClick={() => onOpenThread(msg.id)}>
|
|
540
|
+
<span className="text-xs text-[var(--muted-foreground)] font-medium">{threadData.replyCount} replies</span>
|
|
541
|
+
<div className="flex -space-x-2">
|
|
538
542
|
{threadData.participants.slice(0, 3).map((pid) => {
|
|
539
543
|
if (pid === 'user') {
|
|
540
544
|
return (
|
|
541
|
-
<div key="user" className="w-
|
|
542
|
-
<User className="w-
|
|
545
|
+
<div key="user" className="w-6 h-6 rounded-full bg-[var(--app-shell-subtle)] border-2 border-[var(--card-bg)] flex items-center justify-center z-10">
|
|
546
|
+
<User className="w-3 h-3 text-[var(--muted-foreground)]" />
|
|
543
547
|
</div>
|
|
544
548
|
);
|
|
545
549
|
}
|
|
@@ -547,17 +551,16 @@ export function MessageList({
|
|
|
547
551
|
return tp ? (
|
|
548
552
|
<img
|
|
549
553
|
key={pid}
|
|
550
|
-
src={agentAvatarUrl(pid,
|
|
554
|
+
src={agentAvatarUrl(pid, 24, tp.color)}
|
|
551
555
|
alt={tp.name}
|
|
552
|
-
className="w-
|
|
556
|
+
className="w-6 h-6 rounded-full border-2 border-[var(--card-bg)] object-cover z-10"
|
|
553
557
|
/>
|
|
554
558
|
) : (
|
|
555
|
-
<div key={pid} className="w-
|
|
559
|
+
<div key={pid} className="w-6 h-6 rounded-full bg-[var(--app-shell-subtle)] border-2 border-[var(--card-bg)] z-10" />
|
|
556
560
|
);
|
|
557
561
|
})}
|
|
558
562
|
</div>
|
|
559
|
-
|
|
560
|
-
</button>
|
|
563
|
+
</div>
|
|
561
564
|
)}
|
|
562
565
|
</div>
|
|
563
566
|
|
|
@@ -39,6 +39,8 @@
|
|
|
39
39
|
────────────────────────────────────────────── */
|
|
40
40
|
.workspace-sidebar__brand {
|
|
41
41
|
padding: 0.875rem 0.75rem;
|
|
42
|
+
min-height: 3.5625rem;
|
|
43
|
+
box-sizing: border-box;
|
|
42
44
|
border-bottom: 1px solid var(--app-shell-border);
|
|
43
45
|
display: flex;
|
|
44
46
|
align-items: center;
|