@inf-monkeys-tech/monkeys-design 1.0.11 → 1.0.12

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 (58) hide show
  1. package/dist/components/agent-workbench/index.d.mts +57 -2
  2. package/dist/components/agent-workbench/index.d.ts +57 -2
  3. package/dist/components/agent-workbench/index.js +669 -43
  4. package/dist/components/agent-workbench/index.js.map +1 -1
  5. package/dist/components/agent-workbench/index.mjs +636 -39
  6. package/dist/components/agent-workbench/index.mjs.map +1 -1
  7. package/dist/components/base/index.js +32 -0
  8. package/dist/components/base/index.js.map +1 -1
  9. package/dist/components/base/index.mjs +32 -0
  10. package/dist/components/base/index.mjs.map +1 -1
  11. package/dist/components/data-explorer/index.js +32 -0
  12. package/dist/components/data-explorer/index.js.map +1 -1
  13. package/dist/components/data-explorer/index.mjs +32 -0
  14. package/dist/components/data-explorer/index.mjs.map +1 -1
  15. package/dist/components/layout/index.js +32 -0
  16. package/dist/components/layout/index.js.map +1 -1
  17. package/dist/components/layout/index.mjs +32 -0
  18. package/dist/components/layout/index.mjs.map +1 -1
  19. package/dist/components/runtime/index.js +32 -0
  20. package/dist/components/runtime/index.js.map +1 -1
  21. package/dist/components/runtime/index.mjs +32 -0
  22. package/dist/components/runtime/index.mjs.map +1 -1
  23. package/dist/components/toast/index.d.mts +1 -1
  24. package/dist/components/toast/index.d.ts +1 -1
  25. package/dist/components/toast/index.js +32 -0
  26. package/dist/components/toast/index.js.map +1 -1
  27. package/dist/components/toast/index.mjs +32 -0
  28. package/dist/components/toast/index.mjs.map +1 -1
  29. package/dist/components/toolbar/index.js +32 -0
  30. package/dist/components/toolbar/index.js.map +1 -1
  31. package/dist/components/toolbar/index.mjs +32 -0
  32. package/dist/components/toolbar/index.mjs.map +1 -1
  33. package/dist/components/workbench/index.js +32 -0
  34. package/dist/components/workbench/index.js.map +1 -1
  35. package/dist/components/workbench/index.mjs +32 -0
  36. package/dist/components/workbench/index.mjs.map +1 -1
  37. package/dist/index.d.mts +2 -2
  38. package/dist/index.d.ts +2 -2
  39. package/dist/index.js +1021 -386
  40. package/dist/index.js.map +1 -1
  41. package/dist/index.mjs +645 -17
  42. package/dist/index.mjs.map +1 -1
  43. package/dist/locale/index.d.mts +70 -2
  44. package/dist/locale/index.d.ts +70 -2
  45. package/dist/locale/index.js +68 -0
  46. package/dist/locale/index.js.map +1 -1
  47. package/dist/locale/index.mjs +68 -0
  48. package/dist/locale/index.mjs.map +1 -1
  49. package/dist/provider/index.d.mts +2 -2
  50. package/dist/provider/index.d.ts +2 -2
  51. package/dist/provider/index.js +68 -0
  52. package/dist/provider/index.js.map +1 -1
  53. package/dist/provider/index.mjs +68 -0
  54. package/dist/provider/index.mjs.map +1 -1
  55. package/dist/styles.css +1 -1
  56. package/dist/{types-3d3e043f0ccb.d.mts → types-37967a434f7c.d.mts} +35 -0
  57. package/dist/{types-3d3e043f0ccb.d.ts → types-37967a434f7c.d.ts} +35 -0
  58. package/package.json +3 -3
@@ -1,11 +1,51 @@
1
1
  'use strict';
2
2
 
3
3
  var lucideReact = require('lucide-react');
4
- var react = require('react');
5
- require('@radix-ui/react-dropdown-menu');
4
+ var React2 = require('react');
5
+ var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
6
+ var tailwindMerge = require('tailwind-merge');
6
7
  var jsxRuntime = require('react/jsx-runtime');
8
+ var AccordionPrimitive = require('@radix-ui/react-accordion');
9
+ var CheckboxPrimitive = require('@radix-ui/react-checkbox');
10
+ var PopoverPrimitive = require('@radix-ui/react-popover');
11
+ var ScrollAreaPrimitive = require('@radix-ui/react-scroll-area');
12
+ var reactSlot = require('@radix-ui/react-slot');
13
+ var SwitchPrimitive = require('@radix-ui/react-switch');
14
+ var TabsPrimitive = require('@radix-ui/react-tabs');
15
+ var TooltipPrimitive = require('@radix-ui/react-tooltip');
16
+ var classVarianceAuthority = require('class-variance-authority');
17
+ var SelectPrimitive = require('@radix-ui/react-select');
7
18
 
8
- // src/components/agent-workbench/AgentWorkbenchActivity.tsx
19
+ function _interopNamespace(e) {
20
+ if (e && e.__esModule) return e;
21
+ var n = Object.create(null);
22
+ if (e) {
23
+ Object.keys(e).forEach(function (k) {
24
+ if (k !== 'default') {
25
+ var d = Object.getOwnPropertyDescriptor(e, k);
26
+ Object.defineProperty(n, k, d.get ? d : {
27
+ enumerable: true,
28
+ get: function () { return e[k]; }
29
+ });
30
+ }
31
+ });
32
+ }
33
+ n.default = e;
34
+ return Object.freeze(n);
35
+ }
36
+
37
+ var React2__namespace = /*#__PURE__*/_interopNamespace(React2);
38
+ var DropdownMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(DropdownMenuPrimitive);
39
+ var AccordionPrimitive__namespace = /*#__PURE__*/_interopNamespace(AccordionPrimitive);
40
+ var CheckboxPrimitive__namespace = /*#__PURE__*/_interopNamespace(CheckboxPrimitive);
41
+ var PopoverPrimitive__namespace = /*#__PURE__*/_interopNamespace(PopoverPrimitive);
42
+ var ScrollAreaPrimitive__namespace = /*#__PURE__*/_interopNamespace(ScrollAreaPrimitive);
43
+ var SwitchPrimitive__namespace = /*#__PURE__*/_interopNamespace(SwitchPrimitive);
44
+ var TabsPrimitive__namespace = /*#__PURE__*/_interopNamespace(TabsPrimitive);
45
+ var TooltipPrimitive__namespace = /*#__PURE__*/_interopNamespace(TooltipPrimitive);
46
+ var SelectPrimitive__namespace = /*#__PURE__*/_interopNamespace(SelectPrimitive);
47
+
48
+ // src/components/agent-workbench/AgentWorkbenchSidebar.tsx
9
49
 
10
50
  // src/locale/en-US.ts
11
51
  var enUS = {
@@ -137,6 +177,38 @@ var enUS = {
137
177
  label: "Context usage",
138
178
  context: ({ used, total }) => `${used} / ${total} tokens`
139
179
  },
180
+ navigation: {
181
+ search: "Search agents and sessions",
182
+ searchShortcut: "Focus search",
183
+ clearSearch: "Clear search",
184
+ tabsLabel: "Agent workbench navigation",
185
+ agents: "Agents",
186
+ sessions: "Sessions",
187
+ newAgent: "New Agent",
188
+ newSession: "New Session",
189
+ capabilities: "Capabilities & Extensions",
190
+ settings: "Agent Settings",
191
+ allAgents: "All Agents",
192
+ recentSessions: "Recent Sessions",
193
+ builtIn: "Built-in",
194
+ noDescription: "No description",
195
+ loading: "Loading...",
196
+ emptyAgents: "No agents yet",
197
+ emptySessions: "No sessions yet",
198
+ noResults: "No matching results",
199
+ retry: "Retry",
200
+ pin: "Pin",
201
+ unpin: "Unpin",
202
+ rename: "Rename",
203
+ delete: "Delete",
204
+ actions: "Actions",
205
+ save: "Save",
206
+ cancel: "Cancel",
207
+ running: "Running",
208
+ completed: "Completed",
209
+ failed: "Failed",
210
+ contextUsage: ({ percent }) => `${percent}% context used`
211
+ },
140
212
  details: {
141
213
  title: "Task details",
142
214
  description: "Summary and workspace activity",
@@ -205,17 +277,17 @@ var MONKEYS_PROVIDER_CONTEXTS_KEY = /* @__PURE__ */ Symbol.for(
205
277
  );
206
278
  function createMonkeysProviderContexts() {
207
279
  return Object.freeze({
208
- locale: react.createContext({
280
+ locale: React2.createContext({
209
281
  ...defaultMonkeysLocale,
210
282
  provided: false
211
283
  }),
212
- theme: react.createContext({
284
+ theme: React2.createContext({
213
285
  provided: false
214
286
  }),
215
- direction: react.createContext({
287
+ direction: React2.createContext({
216
288
  provided: false
217
289
  }),
218
- environment: react.createContext({
290
+ environment: React2.createContext({
219
291
  provided: false,
220
292
  environment: EMPTY_ENVIRONMENT,
221
293
  portal: EMPTY_PORTAL
@@ -241,14 +313,567 @@ providerContexts.theme;
241
313
  providerContexts.direction;
242
314
  providerContexts.environment;
243
315
  function useMonkeysLocale() {
244
- return react.useContext(MonkeysLocaleContext);
316
+ return React2.useContext(MonkeysLocaleContext);
245
317
  }
246
318
  function useMonkeysLocaleMessages() {
247
- return react.useContext(MonkeysLocaleContext).messages;
319
+ return React2.useContext(MonkeysLocaleContext).messages;
248
320
  }
249
- function cn(...inputs) {
321
+ function cn(...parts) {
322
+ return tailwindMerge.twMerge(parts.filter(Boolean).join(" "));
323
+ }
324
+ function cn2(...inputs) {
250
325
  return inputs.filter(Boolean).join(" ");
251
326
  }
327
+ var AccordionItem = React2__namespace.forwardRef(({ className, style, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
328
+ AccordionPrimitive__namespace.Item,
329
+ {
330
+ ref,
331
+ className: cn("border-b", className),
332
+ style: {
333
+ borderColor: "var(--monkeys-component-accordion-item-border-color, hsl(var(--border)))",
334
+ ...style
335
+ },
336
+ ...props
337
+ }
338
+ ));
339
+ AccordionItem.displayName = "AccordionItem";
340
+ var AccordionTrigger = React2__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Header, { className: "flex", children: /* @__PURE__ */ jsxRuntime.jsxs(
341
+ AccordionPrimitive__namespace.Trigger,
342
+ {
343
+ ref,
344
+ className: cn(
345
+ "flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
346
+ className
347
+ ),
348
+ ...props,
349
+ children: [
350
+ children,
351
+ /* @__PURE__ */ jsxRuntime.jsx(
352
+ lucideReact.ChevronDown,
353
+ {
354
+ "aria-hidden": "true",
355
+ className: "h-4 w-4 shrink-0 transition-transform duration-200"
356
+ }
357
+ )
358
+ ]
359
+ }
360
+ ) }));
361
+ AccordionTrigger.displayName = "AccordionTrigger";
362
+ var AccordionContent = React2__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
363
+ AccordionPrimitive__namespace.Content,
364
+ {
365
+ ref,
366
+ className: "overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
367
+ ...props,
368
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("pb-4 pt-0", className), children })
369
+ }
370
+ ));
371
+ AccordionContent.displayName = "AccordionContent";
372
+ var Checkbox = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
373
+ CheckboxPrimitive__namespace.Root,
374
+ {
375
+ ref,
376
+ className: cn(
377
+ "peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",
378
+ className
379
+ ),
380
+ ...props,
381
+ children: /* @__PURE__ */ jsxRuntime.jsx(CheckboxPrimitive__namespace.Indicator, { className: "flex items-center justify-center text-current", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { "aria-hidden": "true", className: "h-4 w-4" }) })
382
+ }
383
+ ));
384
+ Checkbox.displayName = "Checkbox";
385
+ var buttonVariants = classVarianceAuthority.cva(
386
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
387
+ {
388
+ variants: {
389
+ variant: {
390
+ default: "bg-primary text-primary-foreground shadow-sm hover:bg-primary/90",
391
+ destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
392
+ outline: "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
393
+ secondary: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
394
+ ghost: "hover:bg-accent hover:text-accent-foreground",
395
+ link: "text-primary underline-offset-4 hover:underline"
396
+ },
397
+ size: {
398
+ default: "h-10 px-4 py-2",
399
+ sm: "h-9 rounded-sm px-3",
400
+ lg: "h-11 rounded-md px-8",
401
+ icon: "h-10 w-10"
402
+ }
403
+ },
404
+ defaultVariants: { variant: "default", size: "default" }
405
+ }
406
+ );
407
+ var Button = React2__namespace.forwardRef(
408
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
409
+ const Component = asChild ? reactSlot.Slot : "button";
410
+ return /* @__PURE__ */ jsxRuntime.jsx(
411
+ Component,
412
+ {
413
+ ref,
414
+ className: buttonVariants({ variant, size, className }),
415
+ ...props
416
+ }
417
+ );
418
+ }
419
+ );
420
+ Button.displayName = "Button";
421
+ var PopoverContent = React2__namespace.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
422
+ PopoverPrimitive__namespace.Content,
423
+ {
424
+ ref,
425
+ align,
426
+ sideOffset,
427
+ className: cn(
428
+ "z-50 w-72 rounded-lg border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
429
+ className
430
+ ),
431
+ ...props
432
+ }
433
+ ) }));
434
+ PopoverContent.displayName = "PopoverContent";
435
+ var ScrollArea = React2__namespace.forwardRef(
436
+ ({
437
+ className,
438
+ children,
439
+ viewportClassName,
440
+ viewportRef,
441
+ onViewportScroll,
442
+ scrollbar = true,
443
+ scrollbarOrientation = "vertical",
444
+ scrollBarDisabled = false,
445
+ ...props
446
+ }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
447
+ ScrollAreaPrimitive__namespace.Root,
448
+ {
449
+ ref,
450
+ className: cn(
451
+ "group relative overflow-hidden",
452
+ scrollBarDisabled && "no-scrollbar",
453
+ className
454
+ ),
455
+ ...props,
456
+ children: [
457
+ /* @__PURE__ */ jsxRuntime.jsx(
458
+ ScrollAreaPrimitive__namespace.Viewport,
459
+ {
460
+ ref: viewportRef,
461
+ onScroll: onViewportScroll,
462
+ className: cn("h-full w-full rounded-[inherit]", viewportClassName),
463
+ children
464
+ }
465
+ ),
466
+ scrollbar ? /* @__PURE__ */ jsxRuntime.jsx(
467
+ ScrollBar,
468
+ {
469
+ orientation: scrollbarOrientation,
470
+ className: cn(scrollBarDisabled && "size-0 p-0")
471
+ }
472
+ ) : null,
473
+ /* @__PURE__ */ jsxRuntime.jsx(ScrollAreaPrimitive__namespace.Corner, {})
474
+ ]
475
+ }
476
+ )
477
+ );
478
+ ScrollArea.displayName = "ScrollArea";
479
+ var ScrollBar = React2__namespace.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
480
+ ScrollAreaPrimitive__namespace.ScrollAreaScrollbar,
481
+ {
482
+ ref,
483
+ orientation,
484
+ className: cn(
485
+ "flex touch-none select-none opacity-0 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100 data-[state=visible]:opacity-100",
486
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-px",
487
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-px",
488
+ className
489
+ ),
490
+ ...props,
491
+ children: /* @__PURE__ */ jsxRuntime.jsx(ScrollAreaPrimitive__namespace.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
492
+ }
493
+ ));
494
+ ScrollBar.displayName = "ScrollBar";
495
+ var Switch = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
496
+ SwitchPrimitive__namespace.Root,
497
+ {
498
+ ref,
499
+ className: cn(
500
+ "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
501
+ className
502
+ ),
503
+ ...props,
504
+ children: /* @__PURE__ */ jsxRuntime.jsx(SwitchPrimitive__namespace.Thumb, { className: "pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0" })
505
+ }
506
+ ));
507
+ Switch.displayName = "Switch";
508
+ var Tabs = React2__namespace.forwardRef(({ variant = "default", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(TabsPrimitive__namespace.Root, { ref, "data-variant": variant, ...props }));
509
+ Tabs.displayName = "Tabs";
510
+ var TabsList = React2__namespace.forwardRef(({ className, gap, style, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
511
+ TabsPrimitive__namespace.List,
512
+ {
513
+ ref,
514
+ className: cn(
515
+ "inline-flex h-10 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",
516
+ className
517
+ ),
518
+ style: { gap, ...style },
519
+ ...props
520
+ }
521
+ ));
522
+ TabsList.displayName = "TabsList";
523
+ var TabsTrigger = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
524
+ TabsPrimitive__namespace.Trigger,
525
+ {
526
+ ref,
527
+ className: cn(
528
+ "inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",
529
+ className
530
+ ),
531
+ ...props
532
+ }
533
+ ));
534
+ TabsTrigger.displayName = "TabsTrigger";
535
+ var TabsContent = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
536
+ TabsPrimitive__namespace.Content,
537
+ {
538
+ ref,
539
+ className: cn(
540
+ "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
541
+ className
542
+ ),
543
+ ...props
544
+ }
545
+ ));
546
+ TabsContent.displayName = "TabsContent";
547
+ var TooltipContent = React2__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
548
+ TooltipPrimitive__namespace.Content,
549
+ {
550
+ ref,
551
+ sideOffset,
552
+ className: cn(
553
+ "z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-xs text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
554
+ className
555
+ ),
556
+ ...props
557
+ }
558
+ ) }));
559
+ TooltipContent.displayName = "TooltipContent";
560
+ var menuItemClassName = "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0";
561
+ var menuContentClassName = "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2";
562
+ var DropdownMenu2 = DropdownMenuPrimitive__namespace.Root;
563
+ var DropdownMenuTrigger = DropdownMenuPrimitive__namespace.Trigger;
564
+ var DropdownMenuSubTrigger = React2__namespace.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(DropdownMenuPrimitive__namespace.SubTrigger, { ref, className: cn(menuItemClassName, "data-[state=open]:bg-accent", inset && "pl-8", className), ...props, children: [
565
+ children,
566
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { "aria-hidden": "true", className: "ml-auto" })
567
+ ] }));
568
+ DropdownMenuSubTrigger.displayName = "DropdownMenuSubTrigger";
569
+ var DropdownMenuSubContent = React2__namespace.forwardRef(
570
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.SubContent, { ref, className: cn(menuContentClassName, className), ...props })
571
+ );
572
+ DropdownMenuSubContent.displayName = "DropdownMenuSubContent";
573
+ var DropdownMenuContent = React2__namespace.forwardRef(
574
+ ({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Content, { ref, sideOffset, className: cn(menuContentClassName, className), ...props }) })
575
+ );
576
+ DropdownMenuContent.displayName = "DropdownMenuContent";
577
+ var DropdownMenuItem = React2__namespace.forwardRef(
578
+ ({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Item, { ref, className: cn(menuItemClassName, inset && "pl-8", className), ...props })
579
+ );
580
+ DropdownMenuItem.displayName = "DropdownMenuItem";
581
+ var DropdownMenuCheckboxItem = React2__namespace.forwardRef(
582
+ ({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(DropdownMenuPrimitive__namespace.CheckboxItem, { ref, className: cn(menuItemClassName, "pl-8", className), checked, ...props, children: [
583
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { "aria-hidden": "true", className: "h-4 w-4" }) }) }),
584
+ children
585
+ ] })
586
+ );
587
+ DropdownMenuCheckboxItem.displayName = "DropdownMenuCheckboxItem";
588
+ var DropdownMenuRadioItem = React2__namespace.forwardRef(
589
+ ({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(DropdownMenuPrimitive__namespace.RadioItem, { ref, className: cn(menuItemClassName, "pl-8", className), ...props, children: [
590
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { "aria-hidden": "true", className: "h-2 w-2 fill-current" }) }) }),
591
+ children
592
+ ] })
593
+ );
594
+ DropdownMenuRadioItem.displayName = "DropdownMenuRadioItem";
595
+ var DropdownMenuLabel = React2__namespace.forwardRef(
596
+ ({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Label, { ref, className: cn("px-2 py-1.5 text-sm font-semibold", inset && "pl-8", className), ...props })
597
+ );
598
+ DropdownMenuLabel.displayName = "DropdownMenuLabel";
599
+ var DropdownMenuSeparator = React2__namespace.forwardRef(
600
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props })
601
+ );
602
+ DropdownMenuSeparator.displayName = "DropdownMenuSeparator";
603
+ var SelectTrigger = React2__namespace.forwardRef(
604
+ ({ className, children, iconClassName, size = "default", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(SelectPrimitive__namespace.Trigger, { ref, className: cn("flex h-10 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-background px-3 py-2 text-left text-sm shadow-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 [&>span]:min-w-0 [&>span]:flex-1 [&>span]:text-left", size === "sm" && "h-8 px-2 py-1 text-xs", className), ...props, children: [
605
+ children,
606
+ /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Icon, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { "aria-hidden": "true", className: cn("h-4 w-4 opacity-50", iconClassName) }) })
607
+ ] })
608
+ );
609
+ SelectTrigger.displayName = "SelectTrigger";
610
+ var SelectScrollUpButton = React2__namespace.forwardRef(
611
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ScrollUpButton, { ref, className: cn("flex cursor-default items-center justify-center py-1", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUp, { "aria-hidden": "true", className: "h-4 w-4" }) })
612
+ );
613
+ SelectScrollUpButton.displayName = "SelectScrollUpButton";
614
+ var SelectScrollDownButton = React2__namespace.forwardRef(
615
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ScrollDownButton, { ref, className: cn("flex cursor-default items-center justify-center py-1", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { "aria-hidden": "true", className: "h-4 w-4" }) })
616
+ );
617
+ SelectScrollDownButton.displayName = "SelectScrollDownButton";
618
+ var SelectContent = React2__namespace.forwardRef(
619
+ ({ className, children, position = "popper", viewportClassName, disableTriggerViewportSizing = false, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(SelectPrimitive__namespace.Content, { ref, position, className: cn(menuContentClassName, "relative max-h-[var(--radix-select-content-available-height)] overflow-y-auto overflow-x-hidden", position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", className), ...props, children: [
620
+ /* @__PURE__ */ jsxRuntime.jsx(SelectScrollUpButton, {}),
621
+ /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Viewport, { className: cn("p-1", position === "popper" && "w-full min-w-[var(--radix-select-trigger-width)]", position === "popper" && !disableTriggerViewportSizing && "h-[var(--radix-select-trigger-height)]", viewportClassName), children }),
622
+ /* @__PURE__ */ jsxRuntime.jsx(SelectScrollDownButton, {})
623
+ ] }) })
624
+ );
625
+ SelectContent.displayName = "SelectContent";
626
+ var SelectLabel = React2__namespace.forwardRef(
627
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Label, { ref, className: cn("px-2 py-1.5 text-sm font-semibold", className), ...props })
628
+ );
629
+ SelectLabel.displayName = "SelectLabel";
630
+ var SelectItem = React2__namespace.forwardRef(
631
+ ({ className, children, indicatorClassName, itemText, hideIndicator = false, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(SelectPrimitive__namespace.Item, { ref, className: cn(menuItemClassName, "w-full", hideIndicator ? "px-2" : "pl-8 pr-2", className), ...props, children: [
632
+ !hideIndicator ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("absolute left-2 flex h-3.5 w-3.5 items-center justify-center", indicatorClassName), children: /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { "aria-hidden": "true", className: "h-4 w-4" }) }) }) : null,
633
+ itemText ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
634
+ /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemText, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: itemText }) }),
635
+ children
636
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemText, { children })
637
+ ] })
638
+ );
639
+ SelectItem.displayName = "SelectItem";
640
+ var SelectSeparator = React2__namespace.forwardRef(
641
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props })
642
+ );
643
+ SelectSeparator.displayName = "SelectSeparator";
644
+ function ItemAvatar({ item }) {
645
+ const [failed, setFailed] = React2.useState(false);
646
+ if (item.iconUrl && !failed) {
647
+ return /* @__PURE__ */ jsxRuntime.jsx("img", { src: item.iconUrl, alt: "", className: "size-full object-cover", onError: () => setFailed(true) });
648
+ }
649
+ const initial = item.name.trim().charAt(0).toLocaleUpperCase();
650
+ return initial ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-semibold", children: initial }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bot, { className: "size-4" });
651
+ }
652
+ function SessionAvatar({ item }) {
653
+ const [failed, setFailed] = React2.useState(false);
654
+ if (item.thumbnailUrl && !failed) {
655
+ return /* @__PURE__ */ jsxRuntime.jsx(
656
+ "img",
657
+ {
658
+ src: item.thumbnailUrl,
659
+ alt: "",
660
+ className: "size-full object-cover",
661
+ loading: "lazy",
662
+ onError: () => setFailed(true)
663
+ }
664
+ );
665
+ }
666
+ return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Image, { className: "size-5", "aria-hidden": "true" });
667
+ }
668
+ function CollectionState({
669
+ status,
670
+ empty,
671
+ noResults,
672
+ hasItems,
673
+ query,
674
+ error,
675
+ onRetry
676
+ }) {
677
+ const messages = useMonkeysLocaleMessages().agentWorkbench.navigation;
678
+ if (status === "loading" && !hasItems) {
679
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-3 py-8 text-center text-sm text-muted-foreground", children: messages.loading });
680
+ }
681
+ if (status === "error") {
682
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-3 px-3 py-8 text-center", children: [
683
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", role: "alert", children: error }),
684
+ /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary", onClick: onRetry, children: [
685
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "size-3.5", "aria-hidden": "true" }),
686
+ messages.retry
687
+ ] })
688
+ ] });
689
+ }
690
+ if (!hasItems) {
691
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-3 py-8 text-center text-sm text-muted-foreground", children: query ? noResults : empty });
692
+ }
693
+ return null;
694
+ }
695
+ function StatusIndicator({ status }) {
696
+ const messages = useMonkeysLocaleMessages().agentWorkbench.navigation;
697
+ if (status === "running") {
698
+ return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-4 animate-spin text-primary", "aria-label": messages.running });
699
+ }
700
+ if (status === "completed") {
701
+ return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle2, { className: "size-4 text-primary", "aria-label": messages.completed });
702
+ }
703
+ if (status === "error") {
704
+ return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "size-4 text-destructive-text", "aria-label": messages.failed });
705
+ }
706
+ return null;
707
+ }
708
+ function SessionActions({
709
+ item,
710
+ capabilities,
711
+ onIntent
712
+ }) {
713
+ const messages = useMonkeysLocaleMessages().agentWorkbench.navigation;
714
+ if (!capabilities.renameSessions && !capabilities.deleteSessions) return null;
715
+ return /* @__PURE__ */ jsxRuntime.jsxs(DropdownMenu2, { children: [
716
+ /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "flex size-8 items-center justify-center rounded-md hover:bg-muted", "aria-label": messages.actions, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Ellipsis, { className: "size-4", "aria-hidden": "true" }) }) }),
717
+ /* @__PURE__ */ jsxRuntime.jsxs(DropdownMenuContent, { align: "end", children: [
718
+ capabilities.renameSessions ? /* @__PURE__ */ jsxRuntime.jsxs(DropdownMenuItem, { onSelect: () => onIntent?.({ type: "rename-session", sessionId: item.id, title: item.title }), children: [
719
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { className: "mr-2 size-4", "aria-hidden": "true" }),
720
+ messages.rename
721
+ ] }) : null,
722
+ capabilities.deleteSessions ? /* @__PURE__ */ jsxRuntime.jsxs(DropdownMenuItem, { className: "text-destructive-text", onSelect: () => onIntent?.({ type: "delete-session", sessionId: item.id }), children: [
723
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "mr-2 size-4", "aria-hidden": "true" }),
724
+ messages.delete
725
+ ] }) : null
726
+ ] })
727
+ ] });
728
+ }
729
+ function AgentWorkbenchSidebar({ viewModel, className, classNames, onIntent }) {
730
+ const { locale } = useMonkeysLocale();
731
+ const messages = useMonkeysLocaleMessages().agentWorkbench.navigation;
732
+ const searchRef = React2.useRef(null);
733
+ const query = viewModel.searchQuery.trim().toLocaleLowerCase();
734
+ const agents = React2.useMemo(
735
+ () => viewModel.agents.items.filter((item) => !query || `${item.name} ${item.description ?? ""}`.toLocaleLowerCase().includes(query)),
736
+ [query, viewModel.agents.items]
737
+ );
738
+ const sessions = React2.useMemo(
739
+ () => viewModel.sessions.items.filter((item) => !query || item.title.toLocaleLowerCase().includes(query)),
740
+ [query, viewModel.sessions.items]
741
+ );
742
+ React2.useEffect(() => {
743
+ const handleShortcut = (event) => {
744
+ if (!(event.ctrlKey || event.metaKey) || event.key.toLocaleLowerCase() !== "k") return;
745
+ event.preventDefault();
746
+ searchRef.current?.focus();
747
+ searchRef.current?.select();
748
+ };
749
+ window.addEventListener("keydown", handleShortcut);
750
+ return () => window.removeEventListener("keydown", handleShortcut);
751
+ }, []);
752
+ return /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": messages.tabsLabel, className: cn2("h-full min-h-0", classNames?.root, className), children: /* @__PURE__ */ jsxRuntime.jsxs(
753
+ Tabs,
754
+ {
755
+ value: viewModel.activeTab,
756
+ onValueChange: (value) => {
757
+ if (value === "agents" || value === "sessions") onIntent?.({ type: "change-tab", tab: value });
758
+ },
759
+ className: "flex h-full min-h-0 flex-col bg-background text-foreground",
760
+ children: [
761
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "shrink-0 space-y-3 p-4 pb-2", children: [
762
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn2("flex h-10 items-center gap-2 rounded-lg border border-border bg-card px-3 focus-within:ring-2 focus-within:ring-ring", classNames?.search), children: [
763
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": "true" }),
764
+ /* @__PURE__ */ jsxRuntime.jsx(
765
+ "input",
766
+ {
767
+ ref: searchRef,
768
+ type: "search",
769
+ value: viewModel.searchQuery,
770
+ "aria-label": messages.search,
771
+ placeholder: messages.search,
772
+ className: "min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground [&::-webkit-search-cancel-button]:hidden",
773
+ onChange: (event) => onIntent?.({ type: "change-search", query: event.target.value }),
774
+ onKeyDown: (event) => {
775
+ if (event.key !== "Escape") return;
776
+ onIntent?.({ type: "change-search", query: "" });
777
+ event.currentTarget.blur();
778
+ }
779
+ }
780
+ ),
781
+ viewModel.searchQuery ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "flex size-6 items-center justify-center rounded-md hover:bg-muted", "aria-label": messages.clearSearch, onClick: () => onIntent?.({ type: "change-search", query: "" }), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-3.5", "aria-hidden": "true" }) }) : /* @__PURE__ */ jsxRuntime.jsx("kbd", { className: "rounded border border-border px-1.5 py-0.5 text-[10px] text-muted-foreground", children: "Ctrl K" })
782
+ ] }),
783
+ /* @__PURE__ */ jsxRuntime.jsxs(TabsList, { className: cn2("grid w-full grid-cols-2 text-foreground", classNames?.tabs), "aria-label": messages.tabsLabel, children: [
784
+ /* @__PURE__ */ jsxRuntime.jsx(TabsTrigger, { value: "agents", children: messages.agents }),
785
+ /* @__PURE__ */ jsxRuntime.jsx(TabsTrigger, { value: "sessions", children: messages.sessions })
786
+ ] })
787
+ ] }),
788
+ /* @__PURE__ */ jsxRuntime.jsxs(TabsContent, { value: "agents", className: cn2("mt-0 min-h-0 flex-1 overflow-y-auto px-4 pb-4", classNames?.body), children: [
789
+ viewModel.capabilities.createAgent ? /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: "mb-3 flex h-9 w-full items-center gap-2 rounded-md px-3 text-left text-sm font-medium hover:bg-muted", onClick: () => onIntent?.({ type: "create-agent" }), children: [
790
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "size-4", "aria-hidden": "true" }),
791
+ messages.newAgent
792
+ ] }) : null,
793
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-2 px-3 text-xs font-medium text-muted-foreground", children: messages.allAgents }),
794
+ /* @__PURE__ */ jsxRuntime.jsx(CollectionState, { status: viewModel.agents.status, empty: messages.emptyAgents, noResults: messages.noResults, hasItems: agents.length > 0, query, error: viewModel.agents.error, onRetry: () => onIntent?.({ type: "retry-agents" }) }),
795
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1", children: agents.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(
796
+ "div",
797
+ {
798
+ "aria-current": item.id === viewModel.selectedAgentItem ? "page" : void 0,
799
+ className: cn2("group flex w-full items-center gap-3 rounded-lg border border-transparent px-3 py-2 text-left hover:bg-muted aria-[current=page]:border-primary aria-[current=page]:bg-muted", classNames?.item),
800
+ children: [
801
+ /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: "flex min-w-0 flex-1 items-center gap-3 text-left", onClick: () => onIntent?.({ type: "select-agent", itemId: item.id }), children: [
802
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsxRuntime.jsx(ItemAvatar, { item }) }),
803
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "min-w-0 flex-1", children: [
804
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block truncate text-sm font-medium", children: item.name }),
805
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block truncate text-xs text-foreground/80", children: item.description || messages.noDescription })
806
+ ] })
807
+ ] }),
808
+ item.builtIn ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-muted px-1.5 py-1 text-[10px] text-foreground", children: messages.builtIn }) : null,
809
+ viewModel.capabilities.pinAgents ? /* @__PURE__ */ jsxRuntime.jsx(
810
+ "button",
811
+ {
812
+ type: "button",
813
+ "aria-label": item.pinned ? messages.unpin : messages.pin,
814
+ className: cn2("flex size-8 items-center justify-center rounded-md text-muted-foreground opacity-0 hover:bg-muted group-hover:opacity-100", item.pinned && "text-primary opacity-100"),
815
+ onClick: (event) => {
816
+ event.stopPropagation();
817
+ onIntent?.({ type: "toggle-agent-pin", itemId: item.id, pinned: !item.pinned });
818
+ },
819
+ onKeyDown: (event) => {
820
+ if (event.key === "Enter" || event.key === " ") {
821
+ event.preventDefault();
822
+ event.stopPropagation();
823
+ onIntent?.({ type: "toggle-agent-pin", itemId: item.id, pinned: !item.pinned });
824
+ }
825
+ },
826
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pin, { className: cn2("size-4", item.pinned && "fill-current", item.pinPending && "animate-pulse") })
827
+ }
828
+ ) : null
829
+ ]
830
+ },
831
+ item.id
832
+ )) })
833
+ ] }),
834
+ /* @__PURE__ */ jsxRuntime.jsxs(TabsContent, { value: "sessions", className: cn2("mt-0 min-h-0 flex-1 overflow-y-auto px-4 pb-4", classNames?.body), children: [
835
+ viewModel.capabilities.createSession ? /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: "flex h-9 w-full items-center gap-2 rounded-md px-3 text-left text-sm font-medium hover:bg-muted", onClick: () => onIntent?.({ type: "create-session" }), children: [
836
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SquarePen, { className: "size-4", "aria-hidden": "true" }),
837
+ messages.newSession
838
+ ] }) : null,
839
+ viewModel.capabilities.manageCapabilities ? /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: "mb-3 flex h-9 w-full items-center gap-2 rounded-md px-3 text-left text-sm font-medium hover:bg-muted", onClick: () => onIntent?.({ type: "open-capabilities" }), children: [
840
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Blocks, { className: "size-4", "aria-hidden": "true" }),
841
+ messages.capabilities
842
+ ] }) : null,
843
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-2 px-3 text-xs font-medium text-muted-foreground", children: messages.recentSessions }),
844
+ /* @__PURE__ */ jsxRuntime.jsx(CollectionState, { status: viewModel.sessions.status, empty: messages.emptySessions, noResults: messages.noResults, hasItems: sessions.length > 0, query, error: viewModel.sessions.error, onRetry: () => onIntent?.({ type: "retry-sessions" }) }),
845
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1", children: sessions.map((item) => {
846
+ const percent = item.contextUsage ? Math.min(100, Math.round(item.contextUsage.usedTokens / item.contextUsage.maxTokens * 100)) : void 0;
847
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { "aria-current": item.id === viewModel.selectedSessionItem ? "page" : void 0, className: cn2("group flex w-full items-center gap-3 rounded-lg border border-transparent px-3 py-2 text-left hover:bg-muted aria-[current=page]:border-primary aria-[current=page]:bg-muted", classNames?.item), children: [
848
+ /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: "flex min-w-0 flex-1 items-center gap-3 text-left", onClick: () => onIntent?.({ type: "select-session", sessionId: item.id }), children: [
849
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsxRuntime.jsx(SessionAvatar, { item }) }),
850
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "min-w-0 flex-1", children: [
851
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block truncate text-sm font-medium", children: item.title }),
852
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block truncate text-xs text-foreground/80", children: new Intl.DateTimeFormat(locale, { dateStyle: "medium", timeStyle: "short" }).format(new Date(item.updatedAt)) })
853
+ ] })
854
+ ] }),
855
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1", children: [
856
+ percent !== void 0 && item.status === "idle" ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-foreground", "aria-label": messages.contextUsage({ percent }), children: [
857
+ percent,
858
+ "%"
859
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(StatusIndicator, { status: item.status }),
860
+ viewModel.capabilities.pinSessions ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", "aria-label": item.pinned ? messages.unpin : messages.pin, className: cn2("flex size-8 items-center justify-center rounded-md text-muted-foreground opacity-0 hover:bg-muted group-hover:opacity-100", item.pinned && "text-primary opacity-100"), onClick: (event) => {
861
+ event.stopPropagation();
862
+ onIntent?.({ type: "toggle-session-pin", sessionId: item.id, pinned: !item.pinned });
863
+ }, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pin, { className: cn2("size-4", item.pinned && "fill-current") }) }) : null,
864
+ /* @__PURE__ */ jsxRuntime.jsx("span", { onClick: (event) => event.stopPropagation(), onKeyDown: (event) => event.stopPropagation(), children: /* @__PURE__ */ jsxRuntime.jsx(SessionActions, { item, capabilities: viewModel.capabilities, onIntent }) })
865
+ ] })
866
+ ] }, item.id);
867
+ }) })
868
+ ] }),
869
+ viewModel.capabilities.manageAgentSettings ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn2("shrink-0 border-t border-border p-4", classNames?.footer), children: /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: "flex h-10 w-full items-center gap-2 rounded-md px-3 text-left text-sm font-medium hover:bg-muted", onClick: () => onIntent?.({ type: "open-agent-settings" }), children: [
870
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Settings, { className: "size-4", "aria-hidden": "true" }),
871
+ messages.settings
872
+ ] }) }) : null
873
+ ]
874
+ }
875
+ ) });
876
+ }
252
877
 
253
878
  // src/components/agent-workbench/activity-model.ts
254
879
  var EVENT_CAPABILITIES = {
@@ -347,7 +972,7 @@ function JsonValue({ value, className }) {
347
972
  return /* @__PURE__ */ jsxRuntime.jsx(
348
973
  "pre",
349
974
  {
350
- className: cn(
975
+ className: cn2(
351
976
  "max-h-64 overflow-auto whitespace-pre-wrap break-words rounded-md bg-muted p-3 font-mono text-xs text-foreground",
352
977
  className
353
978
  ),
@@ -362,12 +987,12 @@ function ToolStatus({ status }) {
362
987
  return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock3, { className: commonClassName, "aria-hidden": "true" });
363
988
  }
364
989
  if (status === "running") {
365
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: cn(commonClassName, "animate-spin"), "aria-hidden": "true" });
990
+ return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: cn2(commonClassName, "animate-spin"), "aria-hidden": "true" });
366
991
  }
367
992
  if (status === "completed") {
368
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle2, { className: cn(commonClassName, "text-primary"), "aria-hidden": "true" });
993
+ return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle2, { className: cn2(commonClassName, "text-primary"), "aria-hidden": "true" });
369
994
  }
370
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XCircle, { className: cn(commonClassName, "text-destructive-text"), "aria-hidden": "true" });
995
+ return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XCircle, { className: cn2(commonClassName, "text-destructive-text"), "aria-hidden": "true" });
371
996
  }
372
997
  function AgentWorkbenchTool({
373
998
  event,
@@ -378,7 +1003,7 @@ function AgentWorkbenchTool({
378
1003
  onExpandedChange
379
1004
  }) {
380
1005
  const messages = useMonkeysLocaleMessages().agentWorkbench.tool;
381
- const [uncontrolledExpanded, setUncontrolledExpanded] = react.useState(defaultExpanded);
1006
+ const [uncontrolledExpanded, setUncontrolledExpanded] = React2.useState(defaultExpanded);
382
1007
  const isControlled = expanded !== void 0;
383
1008
  const isExpanded = expanded ?? uncontrolledExpanded;
384
1009
  const status = event.payload.status;
@@ -390,7 +1015,7 @@ function AgentWorkbenchTool({
390
1015
  "details",
391
1016
  {
392
1017
  open: isExpanded,
393
- className: cn(
1018
+ className: cn2(
394
1019
  "group rounded-lg border border-border bg-card text-card-foreground",
395
1020
  classNames?.root,
396
1021
  className
@@ -400,7 +1025,7 @@ function AgentWorkbenchTool({
400
1025
  /* @__PURE__ */ jsxRuntime.jsxs(
401
1026
  "summary",
402
1027
  {
403
- className: cn(
1028
+ className: cn2(
404
1029
  "flex cursor-pointer list-none items-center gap-2 px-3 py-2.5 text-sm outline-none focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-details-marker]:hidden",
405
1030
  classNames?.trigger
406
1031
  ),
@@ -411,7 +1036,7 @@ function AgentWorkbenchTool({
411
1036
  children: [
412
1037
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.TerminalSquare, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": "true" }),
413
1038
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate font-medium", children: event.payload.toolName }),
414
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex shrink-0 items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-xs text-muted-foreground", children: [
1039
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex shrink-0 items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-xs text-foreground", children: [
415
1040
  /* @__PURE__ */ jsxRuntime.jsx(ToolStatus, { status }),
416
1041
  messages.status[status]
417
1042
  ] }),
@@ -425,7 +1050,7 @@ function AgentWorkbenchTool({
425
1050
  ]
426
1051
  }
427
1052
  ),
428
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("space-y-3 border-t border-border px-3 py-3 text-sm", classNames?.content), children: [
1053
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn2("space-y-3 border-t border-border px-3 py-3 text-sm", classNames?.content), children: [
429
1054
  event.payload.input !== void 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
430
1055
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs font-medium text-muted-foreground", children: messages.input }),
431
1056
  /* @__PURE__ */ jsxRuntime.jsx(JsonValue, { value: event.payload.input, className: classNames?.input })
@@ -441,7 +1066,7 @@ function AgentWorkbenchTool({
441
1066
  );
442
1067
  }
443
1068
  function ActivityDetails({
444
- icon: Icon,
1069
+ icon: Icon2,
445
1070
  title,
446
1071
  open,
447
1072
  streaming,
@@ -453,7 +1078,7 @@ function ActivityDetails({
453
1078
  return /* @__PURE__ */ jsxRuntime.jsxs(
454
1079
  "details",
455
1080
  {
456
- className: cn(
1081
+ className: cn2(
457
1082
  "group rounded-lg border border-border bg-card text-card-foreground",
458
1083
  className
459
1084
  ),
@@ -462,12 +1087,12 @@ function ActivityDetails({
462
1087
  /* @__PURE__ */ jsxRuntime.jsxs(
463
1088
  "summary",
464
1089
  {
465
- className: cn(
1090
+ className: cn2(
466
1091
  "flex cursor-pointer list-none items-center gap-2 px-3 py-2.5 text-sm font-medium outline-none focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-details-marker]:hidden",
467
1092
  triggerClassName
468
1093
  ),
469
1094
  children: [
470
- streaming ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-4 shrink-0 animate-spin", "aria-hidden": "true" }) : /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": "true" }),
1095
+ streaming ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-4 shrink-0 animate-spin", "aria-hidden": "true" }) : /* @__PURE__ */ jsxRuntime.jsx(Icon2, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": "true" }),
471
1096
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate", children: title }),
472
1097
  /* @__PURE__ */ jsxRuntime.jsx(
473
1098
  lucideReact.ChevronDown,
@@ -482,7 +1107,7 @@ function ActivityDetails({
482
1107
  /* @__PURE__ */ jsxRuntime.jsx(
483
1108
  "div",
484
1109
  {
485
- className: cn(
1110
+ className: cn2(
486
1111
  "border-t border-border px-3 py-3 text-sm",
487
1112
  contentClassName
488
1113
  ),
@@ -567,7 +1192,7 @@ function AgentWorkbenchActivity({
567
1192
  return /* @__PURE__ */ jsxRuntime.jsxs(
568
1193
  "section",
569
1194
  {
570
- className: cn("space-y-3", classNames?.root, className),
1195
+ className: cn2("space-y-3", classNames?.root, className),
571
1196
  "aria-label": messages.label,
572
1197
  "data-agent-workbench-mode": activity.mode,
573
1198
  "data-agent-workbench-status": activity.status,
@@ -639,7 +1264,7 @@ function AgentWorkbenchActivity({
639
1264
  return /* @__PURE__ */ jsxRuntime.jsx(
640
1265
  "article",
641
1266
  {
642
- className: cn(
1267
+ className: cn2(
643
1268
  "rounded-lg border border-border bg-card p-3 text-card-foreground",
644
1269
  classNames?.approval
645
1270
  ),
@@ -688,7 +1313,7 @@ function AgentWorkbenchActivity({
688
1313
  return /* @__PURE__ */ jsxRuntime.jsxs(
689
1314
  "article",
690
1315
  {
691
- className: cn(
1316
+ className: cn2(
692
1317
  "flex items-center gap-3 rounded-lg border border-border bg-card p-3 text-card-foreground",
693
1318
  classNames?.artifact
694
1319
  ),
@@ -727,9 +1352,9 @@ function AgentWorkbenchActivity({
727
1352
  usage && contextWindow !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(
728
1353
  "div",
729
1354
  {
730
- className: cn("flex justify-end", classNames?.usage),
1355
+ className: cn2("flex justify-end", classNames?.usage),
731
1356
  "aria-label": messages.usage.label,
732
- children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full border border-border bg-muted px-2.5 py-1 text-xs text-muted-foreground", children: messages.usage.context({
1357
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full border border-border bg-muted px-2.5 py-1 text-xs text-foreground", children: messages.usage.context({
733
1358
  used: usage.contextTokens ?? usage.totalTokens ?? 0,
734
1359
  total: contextWindow
735
1360
  }) })
@@ -846,12 +1471,12 @@ function formatDate(value, locale) {
846
1471
  }).format(date);
847
1472
  }
848
1473
  function Count({ value }) {
849
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-muted px-1.5 py-0.5 text-[10px] font-semibold text-muted-foreground", children: value });
1474
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-muted px-1.5 py-0.5 text-[10px] font-semibold text-foreground", children: value });
850
1475
  }
851
1476
  function DetailsSection({
852
1477
  title,
853
1478
  count,
854
- icon: Icon,
1479
+ icon: Icon2,
855
1480
  className,
856
1481
  children
857
1482
  }) {
@@ -859,14 +1484,14 @@ function DetailsSection({
859
1484
  return /* @__PURE__ */ jsxRuntime.jsxs(
860
1485
  "details",
861
1486
  {
862
- className: cn(
1487
+ className: cn2(
863
1488
  "group rounded-lg border border-border bg-card text-card-foreground",
864
1489
  className
865
1490
  ),
866
1491
  open: true,
867
1492
  children: [
868
1493
  /* @__PURE__ */ jsxRuntime.jsxs("summary", { className: "flex cursor-pointer list-none items-center gap-2 px-3 py-2.5 text-sm font-medium outline-none focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-details-marker]:hidden", children: [
869
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "size-4 text-muted-foreground", "aria-hidden": "true" }),
1494
+ /* @__PURE__ */ jsxRuntime.jsx(Icon2, { className: "size-4 text-muted-foreground", "aria-hidden": "true" }),
870
1495
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate", children: title }),
871
1496
  /* @__PURE__ */ jsxRuntime.jsx(Count, { value: count }),
872
1497
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1033,7 +1658,7 @@ function WorkspacePanel({
1033
1658
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate font-medium", children: event.payload.path }),
1034
1659
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 text-muted-foreground", children: messages.diffStatus[event.payload.status] })
1035
1660
  ] }),
1036
- event.payload.patch ? /* @__PURE__ */ jsxRuntime.jsx("pre", { className: cn("mt-2 max-h-72 overflow-auto whitespace-pre-wrap rounded-md bg-muted p-3 font-mono text-xs", codeClassName), children: event.payload.patch }) : null
1661
+ event.payload.patch ? /* @__PURE__ */ jsxRuntime.jsx("pre", { className: cn2("mt-2 max-h-72 overflow-auto whitespace-pre-wrap rounded-md bg-muted p-3 font-mono text-xs", codeClassName), children: event.payload.patch }) : null
1037
1662
  ] }, event.payload.path)) })
1038
1663
  }
1039
1664
  ),
@@ -1063,7 +1688,7 @@ function WorkspacePanel({
1063
1688
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: terminal.terminalId }),
1064
1689
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: terminal.exitCode === void 0 ? terminal.status : messages.exitCode({ code: terminal.exitCode }) })
1065
1690
  ] }),
1066
- /* @__PURE__ */ jsxRuntime.jsx("pre", { className: cn("mt-2 max-h-72 overflow-auto whitespace-pre-wrap rounded-md bg-muted p-3 font-mono text-xs", codeClassName), children: [terminal.stdin, terminal.stdout, terminal.stderr].filter(Boolean).join("\n") })
1691
+ /* @__PURE__ */ jsxRuntime.jsx("pre", { className: cn2("mt-2 max-h-72 overflow-auto whitespace-pre-wrap rounded-md bg-muted p-3 font-mono text-xs", codeClassName), children: [terminal.stdin, terminal.stdout, terminal.stderr].filter(Boolean).join("\n") })
1067
1692
  ] }, terminal.terminalId)) })
1068
1693
  }
1069
1694
  ),
@@ -1080,7 +1705,7 @@ function WorkspacePanel({
1080
1705
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate", children: event.payload.name }),
1081
1706
  event.payload.durationMs === void 0 ? null : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: formatDuration2(event.payload.durationMs) })
1082
1707
  ] }),
1083
- event.payload.output ? /* @__PURE__ */ jsxRuntime.jsx("pre", { className: cn("mt-2 max-h-48 overflow-auto whitespace-pre-wrap rounded-md bg-muted p-3 font-mono text-xs", codeClassName), children: event.payload.output }) : null
1708
+ event.payload.output ? /* @__PURE__ */ jsxRuntime.jsx("pre", { className: cn2("mt-2 max-h-48 overflow-auto whitespace-pre-wrap rounded-md bg-muted p-3 font-mono text-xs", codeClassName), children: event.payload.output }) : null
1084
1709
  ] }, event.payload.testId)) })
1085
1710
  }
1086
1711
  ),
@@ -1111,10 +1736,10 @@ function AgentWorkbenchTaskDetails({
1111
1736
  }) {
1112
1737
  const messages = useMonkeysLocaleMessages().agentWorkbench.details;
1113
1738
  if (state !== "ready") {
1114
- return /* @__PURE__ */ jsxRuntime.jsx("aside", { className: cn("flex h-full min-h-0 flex-col border-l border-border bg-background", classNames?.root, className), children: /* @__PURE__ */ jsxRuntime.jsx(StateContent, { state }) });
1739
+ return /* @__PURE__ */ jsxRuntime.jsx("aside", { className: cn2("flex h-full min-h-0 flex-col border-l border-border bg-background", classNames?.root, className), children: /* @__PURE__ */ jsxRuntime.jsx(StateContent, { state }) });
1115
1740
  }
1116
1741
  if (!viewModel) {
1117
- return /* @__PURE__ */ jsxRuntime.jsx("aside", { className: cn("flex h-full min-h-0 flex-col border-l border-border bg-background", classNames?.root, className), children: /* @__PURE__ */ jsxRuntime.jsx(StateContent, { state: "empty" }) });
1742
+ return /* @__PURE__ */ jsxRuntime.jsx("aside", { className: cn2("flex h-full min-h-0 flex-col border-l border-border bg-background", classNames?.root, className), children: /* @__PURE__ */ jsxRuntime.jsx(StateContent, { state: "empty" }) });
1118
1743
  }
1119
1744
  const model = createAgentWorkbenchDetailsModel(viewModel);
1120
1745
  const workspaceCount = Object.values(model.workspace).reduce(
@@ -1140,14 +1765,14 @@ function AgentWorkbenchTaskDetails({
1140
1765
  return /* @__PURE__ */ jsxRuntime.jsxs(
1141
1766
  "aside",
1142
1767
  {
1143
- className: cn(
1768
+ className: cn2(
1144
1769
  "flex h-full min-h-0 min-w-0 flex-col border-l border-border bg-background text-foreground",
1145
1770
  classNames?.root,
1146
1771
  className
1147
1772
  ),
1148
1773
  "data-agent-workbench-mode": model.mode,
1149
1774
  children: [
1150
- /* @__PURE__ */ jsxRuntime.jsxs("header", { className: cn("flex shrink-0 items-center gap-2 border-b border-border px-4 py-3", classNames?.header), children: [
1775
+ /* @__PURE__ */ jsxRuntime.jsxs("header", { className: cn2("flex shrink-0 items-center gap-2 border-b border-border px-4 py-3", classNames?.header), children: [
1151
1776
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
1152
1777
  /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "truncate text-sm font-semibold", children: messages.title }),
1153
1778
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 truncate text-xs text-muted-foreground", children: messages.description })
@@ -1163,7 +1788,7 @@ function AgentWorkbenchTaskDetails({
1163
1788
  }
1164
1789
  ) : null
1165
1790
  ] }),
1166
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex shrink-0 gap-1 border-b border-border px-3 py-2", classNames?.tabs), role: "tablist", "aria-label": messages.tabs.label, children: tabs.map((tab, index) => /* @__PURE__ */ jsxRuntime.jsxs(
1791
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn2("flex shrink-0 gap-1 border-b border-border px-3 py-2", classNames?.tabs), role: "tablist", "aria-label": messages.tabs.label, children: tabs.map((tab, index) => /* @__PURE__ */ jsxRuntime.jsxs(
1167
1792
  "button",
1168
1793
  {
1169
1794
  id: tabId(tab.id),
@@ -1172,7 +1797,7 @@ function AgentWorkbenchTaskDetails({
1172
1797
  "aria-selected": resolvedTab === tab.id,
1173
1798
  "aria-controls": `${tabId(tab.id)}-panel`,
1174
1799
  tabIndex: resolvedTab === tab.id ? 0 : -1,
1175
- className: cn(
1800
+ className: cn2(
1176
1801
  "inline-flex min-w-0 flex-1 items-center justify-center gap-1 rounded-md px-2 py-1.5 text-xs font-medium outline-none focus-visible:ring-2 focus-visible:ring-ring",
1177
1802
  resolvedTab === tab.id ? "bg-primary/10 text-primary" : "text-muted-foreground hover:bg-muted hover:text-foreground"
1178
1803
  ),
@@ -1192,7 +1817,7 @@ function AgentWorkbenchTaskDetails({
1192
1817
  role: "tabpanel",
1193
1818
  "aria-labelledby": tabId(resolvedTab),
1194
1819
  tabIndex: 0,
1195
- className: cn("min-h-0 flex-1 overflow-y-auto p-3 outline-none", classNames?.body),
1820
+ className: cn2("min-h-0 flex-1 overflow-y-auto p-3 outline-none", classNames?.body),
1196
1821
  children: resolvedTab === "summary" ? /* @__PURE__ */ jsxRuntime.jsx(SummaryPanel, { model, onIntent }) : /* @__PURE__ */ jsxRuntime.jsx(
1197
1822
  WorkspacePanel,
1198
1823
  {
@@ -1209,6 +1834,7 @@ function AgentWorkbenchTaskDetails({
1209
1834
  }
1210
1835
 
1211
1836
  exports.AgentWorkbenchActivity = AgentWorkbenchActivity;
1837
+ exports.AgentWorkbenchSidebar = AgentWorkbenchSidebar;
1212
1838
  exports.AgentWorkbenchTaskDetails = AgentWorkbenchTaskDetails;
1213
1839
  exports.AgentWorkbenchTool = AgentWorkbenchTool;
1214
1840
  exports.createAgentWorkbenchActivityModel = createAgentWorkbenchActivityModel;