@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.
- package/dist/components/agent-workbench/index.d.mts +57 -2
- package/dist/components/agent-workbench/index.d.ts +57 -2
- package/dist/components/agent-workbench/index.js +669 -43
- package/dist/components/agent-workbench/index.js.map +1 -1
- package/dist/components/agent-workbench/index.mjs +636 -39
- package/dist/components/agent-workbench/index.mjs.map +1 -1
- package/dist/components/base/index.js +32 -0
- package/dist/components/base/index.js.map +1 -1
- package/dist/components/base/index.mjs +32 -0
- package/dist/components/base/index.mjs.map +1 -1
- package/dist/components/data-explorer/index.js +32 -0
- package/dist/components/data-explorer/index.js.map +1 -1
- package/dist/components/data-explorer/index.mjs +32 -0
- package/dist/components/data-explorer/index.mjs.map +1 -1
- package/dist/components/layout/index.js +32 -0
- package/dist/components/layout/index.js.map +1 -1
- package/dist/components/layout/index.mjs +32 -0
- package/dist/components/layout/index.mjs.map +1 -1
- package/dist/components/runtime/index.js +32 -0
- package/dist/components/runtime/index.js.map +1 -1
- package/dist/components/runtime/index.mjs +32 -0
- package/dist/components/runtime/index.mjs.map +1 -1
- package/dist/components/toast/index.d.mts +1 -1
- package/dist/components/toast/index.d.ts +1 -1
- package/dist/components/toast/index.js +32 -0
- package/dist/components/toast/index.js.map +1 -1
- package/dist/components/toast/index.mjs +32 -0
- package/dist/components/toast/index.mjs.map +1 -1
- package/dist/components/toolbar/index.js +32 -0
- package/dist/components/toolbar/index.js.map +1 -1
- package/dist/components/toolbar/index.mjs +32 -0
- package/dist/components/toolbar/index.mjs.map +1 -1
- package/dist/components/workbench/index.js +32 -0
- package/dist/components/workbench/index.js.map +1 -1
- package/dist/components/workbench/index.mjs +32 -0
- package/dist/components/workbench/index.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1021 -386
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +645 -17
- package/dist/index.mjs.map +1 -1
- package/dist/locale/index.d.mts +70 -2
- package/dist/locale/index.d.ts +70 -2
- package/dist/locale/index.js +68 -0
- package/dist/locale/index.js.map +1 -1
- package/dist/locale/index.mjs +68 -0
- package/dist/locale/index.mjs.map +1 -1
- package/dist/provider/index.d.mts +2 -2
- package/dist/provider/index.d.ts +2 -2
- package/dist/provider/index.js +68 -0
- package/dist/provider/index.js.map +1 -1
- package/dist/provider/index.mjs +68 -0
- package/dist/provider/index.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/{types-3d3e043f0ccb.d.mts → types-37967a434f7c.d.mts} +35 -0
- package/dist/{types-3d3e043f0ccb.d.ts → types-37967a434f7c.d.ts} +35 -0
- package/package.json +3 -3
|
@@ -1,11 +1,51 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var lucideReact = require('lucide-react');
|
|
4
|
-
var
|
|
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
|
-
|
|
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:
|
|
280
|
+
locale: React2.createContext({
|
|
209
281
|
...defaultMonkeysLocale,
|
|
210
282
|
provided: false
|
|
211
283
|
}),
|
|
212
|
-
theme:
|
|
284
|
+
theme: React2.createContext({
|
|
213
285
|
provided: false
|
|
214
286
|
}),
|
|
215
|
-
direction:
|
|
287
|
+
direction: React2.createContext({
|
|
216
288
|
provided: false
|
|
217
289
|
}),
|
|
218
|
-
environment:
|
|
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
|
|
316
|
+
return React2.useContext(MonkeysLocaleContext);
|
|
245
317
|
}
|
|
246
318
|
function useMonkeysLocaleMessages() {
|
|
247
|
-
return
|
|
319
|
+
return React2.useContext(MonkeysLocaleContext).messages;
|
|
248
320
|
}
|
|
249
|
-
function cn(...
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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] =
|
|
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:
|
|
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:
|
|
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-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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(
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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-
|
|
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-
|
|
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:
|
|
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:
|
|
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(
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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;
|