@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.
Files changed (146) hide show
  1. package/cloud-runtime/standalone/.next/BUILD_ID +1 -1
  2. package/cloud-runtime/standalone/.next/build-manifest.json +2 -2
  3. package/cloud-runtime/standalone/.next/prerender-manifest.json +3 -3
  4. package/cloud-runtime/standalone/.next/server/app/_global-error.html +2 -2
  5. package/cloud-runtime/standalone/.next/server/app/_global-error.rsc +1 -1
  6. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/cloud-runtime/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  12. package/cloud-runtime/standalone/.next/server/app/_not-found.html +2 -2
  13. package/cloud-runtime/standalone/.next/server/app/_not-found.rsc +2 -2
  14. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  15. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  16. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  17. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  18. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  19. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  20. package/cloud-runtime/standalone/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  21. package/cloud-runtime/standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  22. package/cloud-runtime/standalone/.next/server/app/agents.html +2 -2
  23. package/cloud-runtime/standalone/.next/server/app/agents.rsc +2 -2
  24. package/cloud-runtime/standalone/.next/server/app/agents.segments/_full.segment.rsc +2 -2
  25. package/cloud-runtime/standalone/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  26. package/cloud-runtime/standalone/.next/server/app/agents.segments/_index.segment.rsc +2 -2
  27. package/cloud-runtime/standalone/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
  28. package/cloud-runtime/standalone/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +1 -1
  29. package/cloud-runtime/standalone/.next/server/app/agents.segments/agents.segment.rsc +1 -1
  30. package/cloud-runtime/standalone/.next/server/app/api/file-search/route.js.nft.json +1 -1
  31. package/cloud-runtime/standalone/.next/server/app/automations/page_client-reference-manifest.js +1 -1
  32. package/cloud-runtime/standalone/.next/server/app/automations.html +2 -2
  33. package/cloud-runtime/standalone/.next/server/app/automations.rsc +3 -3
  34. package/cloud-runtime/standalone/.next/server/app/automations.segments/_full.segment.rsc +3 -3
  35. package/cloud-runtime/standalone/.next/server/app/automations.segments/_head.segment.rsc +1 -1
  36. package/cloud-runtime/standalone/.next/server/app/automations.segments/_index.segment.rsc +2 -2
  37. package/cloud-runtime/standalone/.next/server/app/automations.segments/_tree.segment.rsc +3 -3
  38. package/cloud-runtime/standalone/.next/server/app/automations.segments/automations/__PAGE__.segment.rsc +2 -2
  39. package/cloud-runtime/standalone/.next/server/app/automations.segments/automations.segment.rsc +1 -1
  40. package/cloud-runtime/standalone/.next/server/app/board/page_client-reference-manifest.js +1 -1
  41. package/cloud-runtime/standalone/.next/server/app/board.html +2 -2
  42. package/cloud-runtime/standalone/.next/server/app/board.rsc +2 -2
  43. package/cloud-runtime/standalone/.next/server/app/board.segments/_full.segment.rsc +2 -2
  44. package/cloud-runtime/standalone/.next/server/app/board.segments/_head.segment.rsc +1 -1
  45. package/cloud-runtime/standalone/.next/server/app/board.segments/_index.segment.rsc +2 -2
  46. package/cloud-runtime/standalone/.next/server/app/board.segments/_tree.segment.rsc +2 -2
  47. package/cloud-runtime/standalone/.next/server/app/board.segments/board/__PAGE__.segment.rsc +1 -1
  48. package/cloud-runtime/standalone/.next/server/app/board.segments/board.segment.rsc +1 -1
  49. package/cloud-runtime/standalone/.next/server/app/execution-graph/page_client-reference-manifest.js +1 -1
  50. package/cloud-runtime/standalone/.next/server/app/execution-graph.html +2 -2
  51. package/cloud-runtime/standalone/.next/server/app/execution-graph.rsc +2 -2
  52. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_full.segment.rsc +2 -2
  53. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_head.segment.rsc +1 -1
  54. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_index.segment.rsc +2 -2
  55. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_tree.segment.rsc +2 -2
  56. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph/__PAGE__.segment.rsc +1 -1
  57. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph.segment.rsc +1 -1
  58. package/cloud-runtime/standalone/.next/server/app/index.html +2 -2
  59. package/cloud-runtime/standalone/.next/server/app/index.rsc +4 -4
  60. package/cloud-runtime/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  61. package/cloud-runtime/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  62. package/cloud-runtime/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  63. package/cloud-runtime/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  64. package/cloud-runtime/standalone/.next/server/app/index.segments/_tree.segment.rsc +3 -3
  65. package/cloud-runtime/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  66. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
  67. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  68. package/cloud-runtime/standalone/.next/server/app/projects/orphans/page_client-reference-manifest.js +1 -1
  69. package/cloud-runtime/standalone/.next/server/app/projects/orphans.html +2 -2
  70. package/cloud-runtime/standalone/.next/server/app/projects/orphans.rsc +3 -3
  71. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_full.segment.rsc +3 -3
  72. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_head.segment.rsc +1 -1
  73. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_index.segment.rsc +2 -2
  74. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_tree.segment.rsc +2 -2
  75. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans/__PAGE__.segment.rsc +2 -2
  76. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans.segment.rsc +1 -1
  77. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects.segment.rsc +1 -1
  78. package/cloud-runtime/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  79. package/cloud-runtime/standalone/.next/server/app/projects.html +2 -2
  80. package/cloud-runtime/standalone/.next/server/app/projects.rsc +3 -3
  81. package/cloud-runtime/standalone/.next/server/app/projects.segments/_full.segment.rsc +3 -3
  82. package/cloud-runtime/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  83. package/cloud-runtime/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  84. package/cloud-runtime/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  85. package/cloud-runtime/standalone/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
  86. package/cloud-runtime/standalone/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  87. package/cloud-runtime/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  88. package/cloud-runtime/standalone/.next/server/app/settings.html +2 -2
  89. package/cloud-runtime/standalone/.next/server/app/settings.rsc +2 -2
  90. package/cloud-runtime/standalone/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  91. package/cloud-runtime/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  92. package/cloud-runtime/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  93. package/cloud-runtime/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  94. package/cloud-runtime/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
  95. package/cloud-runtime/standalone/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  96. package/cloud-runtime/standalone/.next/server/app/status/page_client-reference-manifest.js +1 -1
  97. package/cloud-runtime/standalone/.next/server/app/status.html +2 -2
  98. package/cloud-runtime/standalone/.next/server/app/status.rsc +2 -2
  99. package/cloud-runtime/standalone/.next/server/app/status.segments/_full.segment.rsc +2 -2
  100. package/cloud-runtime/standalone/.next/server/app/status.segments/_head.segment.rsc +1 -1
  101. package/cloud-runtime/standalone/.next/server/app/status.segments/_index.segment.rsc +2 -2
  102. package/cloud-runtime/standalone/.next/server/app/status.segments/_tree.segment.rsc +2 -2
  103. package/cloud-runtime/standalone/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
  104. package/cloud-runtime/standalone/.next/server/app/status.segments/status.segment.rsc +1 -1
  105. package/cloud-runtime/standalone/.next/server/app/thread/[id]/page_client-reference-manifest.js +1 -1
  106. package/cloud-runtime/standalone/.next/server/app/welcome/page_client-reference-manifest.js +1 -1
  107. package/cloud-runtime/standalone/.next/server/app/welcome.html +2 -2
  108. package/cloud-runtime/standalone/.next/server/app/welcome.rsc +2 -2
  109. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_full.segment.rsc +2 -2
  110. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_head.segment.rsc +1 -1
  111. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_index.segment.rsc +2 -2
  112. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_tree.segment.rsc +2 -2
  113. package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome/__PAGE__.segment.rsc +1 -1
  114. package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome.segment.rsc +1 -1
  115. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__ffbc2e98._.js +2 -2
  116. package/cloud-runtime/standalone/.next/server/chunks/ssr/_0ff7c687._.js +2 -4
  117. package/cloud-runtime/standalone/.next/server/chunks/ssr/_e1769638._.js +2 -4
  118. package/cloud-runtime/standalone/.next/server/chunks/ssr/components_chat-ui_bfeda794._.js +3 -3
  119. package/cloud-runtime/standalone/.next/server/middleware-manifest.json +5 -5
  120. package/cloud-runtime/standalone/.next/server/pages/404.html +2 -2
  121. package/cloud-runtime/standalone/.next/server/pages/500.html +2 -2
  122. package/cloud-runtime/standalone/.next/server/server-reference-manifest.js +1 -1
  123. package/cloud-runtime/standalone/.next/server/server-reference-manifest.json +1 -1
  124. package/cloud-runtime/standalone/.next/static/chunks/10b0642440302e99.css +2 -0
  125. package/cloud-runtime/standalone/.next/static/chunks/4c01a5f19f9e775e.js +8 -0
  126. package/cloud-runtime/standalone/.next/static/chunks/{da434b1ad885d636.js → 651c7c97d3bd77e0.js} +2 -4
  127. package/cloud-runtime/standalone/.next/static/chunks/661090206d8bae9b.css +1 -0
  128. package/cloud-runtime/standalone/.next/static/chunks/{2acd153dc5252e88.js → 99174504a201d23e.js} +2 -4
  129. package/cloud-runtime/standalone/.next/static/chunks/{64f812259cf8c243.js → b5bd2eb6e0c7f71a.js} +4 -6
  130. package/cloud-runtime/standalone/app/globals.css +25 -22
  131. package/cloud-runtime/standalone/components/ActionToolbar.tsx +25 -0
  132. package/cloud-runtime/standalone/components/IconButton.tsx +35 -0
  133. package/cloud-runtime/standalone/components/ProjectCard.tsx +2 -2
  134. package/cloud-runtime/standalone/components/TaskCard.tsx +2 -4
  135. package/cloud-runtime/standalone/components/chat-ui/Composer.tsx +4 -5
  136. package/cloud-runtime/standalone/components/chat-ui/FileMentionPopoverItem.tsx +2 -2
  137. package/cloud-runtime/standalone/components/chat-ui/MessageList.tsx +46 -43
  138. package/cloud-runtime/standalone/styles/workspaceSidebar.css +2 -0
  139. package/cloud-runtime/standalone/tsconfig.tsbuildinfo +1 -1
  140. package/package.json +1 -1
  141. package/cloud-runtime/standalone/.next/static/chunks/9d50c2514f72d926.css +0 -1
  142. package/cloud-runtime/standalone/.next/static/chunks/bd6c5b5b4fbd6413.css +0 -2
  143. package/cloud-runtime/standalone/.next/static/chunks/eab1c7d0246592f8.js +0 -8
  144. /package/cloud-runtime/standalone/.next/static/{HOfhTqGoYN6GjsW9CCf3t → AB08MY3MKLsqeJYL8OZ2g}/_buildManifest.js +0 -0
  145. /package/cloud-runtime/standalone/.next/static/{HOfhTqGoYN6GjsW9CCf3t → AB08MY3MKLsqeJYL8OZ2g}/_clientMiddlewareManifest.json +0 -0
  146. /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: 10px;
195
- height: 10px;
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: rgba(15, 23, 42, 0.14);
204
- border-radius: 999px;
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: rgba(15, 23, 42, 0.24);
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: 8px;
212
+ width: 4px;
213
+ height: 4px;
218
214
  }
219
215
 
220
216
  .scrollbar-thin::-webkit-scrollbar-thumb {
221
- background: rgba(15, 23, 42, 0.14);
222
- border-radius: 999px;
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: rgba(15, 23, 42, 0.24);
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: rgba(255, 255, 255, 0.1);
226
+ background: #374151; /* gray-700 */
235
227
  }
236
228
 
237
229
  .dark ::-webkit-scrollbar-thumb:hover {
238
- background: rgba(255, 255, 255, 0.2);
230
+ background: #4b5563; /* gray-600 */
239
231
  }
240
232
 
241
233
  .dark .scrollbar-thin::-webkit-scrollbar-thumb {
242
- background: rgba(255, 255, 255, 0.1);
234
+ background: #374151;
243
235
  }
244
236
 
245
237
  .dark .scrollbar-thin::-webkit-scrollbar-thumb:hover {
246
- background: rgba(255, 255, 255, 0.2);
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 rounded-2xl border border-[var(--card-border)] bg-[var(--card-bg)] shadow-sm space-y-4 transition-all
31
- ${onClick ? "cursor-pointer hover:border-[var(--primary)] hover:shadow-md active:scale-[0.99]" : ""}`}
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 rounded-lg
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
- 'border-[var(--card-border)] hover:shadow-md hover:border-[var(--primary-muted)] hover:ring-1 hover:ring-[var(--primary-muted)]'
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={`bg-[var(--app-shell-elevated)] rounded-2xl border border-[var(--app-shell-border)] shadow-[0_8px_30px_rgb(0,0,0,0.12)] dark:shadow-[0_8px_30px_rgb(0,0,0,0.5)] transition-all duration-300`}>
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-[var(--app-shell-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 focus-within:ring-4 focus-within:ring-[var(--app-shell-border-strong)] transition-all">
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-[var(--app-shell-border)] mt-1">
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 bg-[var(--card-bg)] rounded-2xl border border-[var(--card-border)] shadow-sm mb-6 group transition-all hover:border-[var(--card-hover-border)] relative ${statusMenuMessageId === msg.id ? 'z-50' : ''}`}>
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
- <div
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
- <button
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
- </button>
348
+ </IconButton>
348
349
  )}
349
- <button
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
- </button>
358
+ </IconButton>
357
359
  {onCopyThread && (
358
- <button
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
- </button>
368
+ </IconButton>
366
369
  )}
367
370
  {onDeleteThreadRoot && (
368
- <button
369
- type="button"
370
- onClick={() => onDeleteThreadRoot(msg.id)}
371
- disabled={isDeletingRoot}
372
- className="p-1.5 text-[var(--app-shell-muted)] hover:bg-[var(--destructive-muted)] hover:text-[var(--destructive)] rounded-md transition-colors disabled:opacity-50 disabled:cursor-not-allowed"
373
- title="Delete this thread"
374
- >
375
- {isDeletingRoot ? <Loader2 className="w-3.5 h-3.5 animate-spin" /> : <Trash2 className="w-3.5 h-3.5" />}
376
- </button>
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
- </div>
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(--card-bg)] border border-[var(--card-border)] rounded-full text-xs font-bold text-[var(--muted-foreground)] hover:bg-[var(--app-shell-subtle)] transition-colors shadow-sm disabled:opacity-50"
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(--app-shell-muted)]" />
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(--app-shell-muted)]" />
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(--card-bg)] border border-[var(--card-border)] rounded-full text-xs font-bold text-[var(--muted-foreground)] hover:bg-[var(--app-shell-subtle)] transition-colors shadow-sm disabled:opacity-50"
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(--app-shell-muted)]" />
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(--app-shell-muted)]" />
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
- <button
533
- type="button"
534
- onClick={() => onOpenThread(msg.id)}
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-4 h-4 rounded-full bg-[var(--app-shell-subtle)] flex items-center justify-center ring-1 ring-[var(--card-bg)]">
542
- <User className="w-2.5 h-2.5 text-[var(--app-shell-muted)]" />
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, 16, tp.color)}
554
+ src={agentAvatarUrl(pid, 24, tp.color)}
551
555
  alt={tp.name}
552
- className="w-4 h-4 rounded-full ring-1 ring-[var(--card-bg)]"
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-4 h-4 rounded-full bg-[var(--app-shell-subtle)] ring-1 ring-[var(--card-bg)]" />
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
- <span>{threadData.replyCount} replies</span>
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;