@flamingo-stack/openframe-frontend-core 0.0.850 → 0.0.851
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/chat-protocol/events.d.ts +4 -1
- package/dist/chat-protocol/events.d.ts.map +1 -1
- package/dist/chat-protocol/index.cjs +90 -40
- package/dist/chat-protocol/nats-decoder.d.ts.map +1 -1
- package/dist/chat-protocol/nats-decoder.js +5 -1
- package/dist/chat-protocol/policy-review.d.ts +18 -0
- package/dist/chat-protocol/policy-review.d.ts.map +1 -0
- package/dist/chat-protocol/policy-review.js +55 -0
- package/dist/{chunk-ZDSC3GFX.cjs → chunk-2NGW73T2.cjs} +3 -3
- package/dist/{chunk-2QZUTNL3.cjs → chunk-2WZHNMQY.cjs} +67 -67
- package/dist/{chunk-R5JPZ6TY.cjs → chunk-5SEJEBAB.cjs} +8 -8
- package/dist/{chunk-TX4NTH22.cjs → chunk-B6D4WWKD.cjs} +36 -36
- package/dist/{chunk-FXLROQUT.cjs → chunk-CDW6JTAQ.cjs} +442 -459
- package/dist/{chunk-5PIR77V5.cjs → chunk-DN227KZH.cjs} +4 -4
- package/dist/{chunk-QJER2ZNA.cjs → chunk-FGSN5UNY.cjs} +3 -3
- package/dist/{chunk-ZGEWT3SF.cjs → chunk-HXURNKXI.cjs} +3 -3
- package/dist/{chunk-FRG724DU.cjs → chunk-KRTTH3ET.cjs} +4 -4
- package/dist/{chunk-YJZ7R3W5.cjs → chunk-KXFIYO4O.cjs} +8 -8
- package/dist/{chunk-4YBS4HIO.cjs → chunk-LM7EL3UQ.cjs} +444 -27
- package/dist/{chunk-LGYPCUHO.cjs → chunk-NQEPLUUW.cjs} +21 -21
- package/dist/{chunk-OHHDX3Z4.cjs → chunk-ODMZSAIY.cjs} +36 -36
- package/dist/{chunk-VRWBJL7B.cjs → chunk-OUP7L3U5.cjs} +50 -50
- package/dist/{chunk-5CBI2ZYV.cjs → chunk-PJNEBSP5.cjs} +5 -5
- package/dist/{chunk-6AJYGXXS.cjs → chunk-PPCRLSVR.cjs} +11 -11
- package/dist/{chunk-SA2NNWIJ.cjs → chunk-QCSA7GIX.cjs} +17 -62
- package/dist/{chunk-JWIITCVB.cjs → chunk-SPKAXETT.cjs} +42 -42
- package/dist/{chunk-CAGNWDVJ.cjs → chunk-U4RTWH5D.cjs} +42 -42
- package/dist/{chunk-IHY7E4EX.cjs → chunk-UFGPLXH6.cjs} +4 -4
- package/dist/{chunk-7ICHJVAT.cjs → chunk-UQK6J3ZS.cjs} +13 -13
- package/dist/{chunk-S3QXLD4X.cjs → chunk-VCFQHPOO.cjs} +37 -3
- package/dist/{chunk-IPGGSFR7.cjs → chunk-VU6N3NZS.cjs} +6 -6
- package/dist/{chunk-GAYLAA3L.cjs → chunk-VXIZCUNZ.cjs} +61 -61
- package/dist/{chunk-3W4ASAXN.cjs → chunk-WYROOMUZ.cjs} +2 -2
- package/dist/{chunk-XKOL5CNU.cjs → chunk-ZEPEFKHA.cjs} +811 -932
- package/dist/{cloud-tenants-TVB3DT3J.cjs → cloud-tenants-XH6GV4EI.cjs} +12 -13
- package/dist/components/case-studies/index.cjs +24 -25
- package/dist/components/chat/approval-batch-message.d.ts +5 -0
- package/dist/components/chat/approval-batch-message.d.ts.map +1 -1
- package/dist/components/chat/approval-batch-message.js +36 -10
- package/dist/components/chat/index.cjs +8 -9
- package/dist/components/chat/policy-review.d.ts +27 -0
- package/dist/components/chat/policy-review.d.ts.map +1 -0
- package/dist/components/chat/policy-review.js +67 -0
- package/dist/components/chat/stream/message-mutations.d.ts.map +1 -1
- package/dist/components/chat/stream/message-mutations.js +4 -1
- package/dist/components/chat/tool-execution-display.d.ts.map +1 -1
- package/dist/components/chat/tool-execution-display.js +16 -5
- package/dist/components/chat/types/message.types.d.ts +40 -2
- package/dist/components/chat/types/message.types.d.ts.map +1 -1
- package/dist/components/chat/utils/extract-incomplete-message-state.d.ts.map +1 -1
- package/dist/components/chat/utils/extract-incomplete-message-state.js +2 -0
- package/dist/components/chat/utils/message-segment-accumulator.d.ts.map +1 -1
- package/dist/components/chat/utils/message-segment-accumulator.js +3 -0
- package/dist/components/chat/utils/process-historical-messages.d.ts +2 -2
- package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
- package/dist/components/chat/utils/process-historical-messages.js +7 -1
- package/dist/components/contact/index.cjs +13 -14
- package/dist/components/docs/index.cjs +16 -17
- package/dist/components/embeds/index.cjs +13 -14
- package/dist/components/faq/index.cjs +14 -15
- package/dist/components/features/approval-level.d.ts +6 -12
- package/dist/components/features/approval-level.d.ts.map +1 -1
- package/dist/components/features/approval-level.js +45 -55
- package/dist/components/features/index.cjs +16 -16
- package/dist/components/features/notifications/approval-request-notification-tile.d.ts.map +1 -1
- package/dist/components/features/notifications/approval-request-notification-tile.js +71 -48
- package/dist/components/features/notifications/types.d.ts +2 -0
- package/dist/components/features/notifications/types.d.ts.map +1 -1
- package/dist/components/features/notifications/types.js +3 -1
- package/dist/components/features/policy-configuration-panel.d.ts.map +1 -1
- package/dist/components/features/policy-configuration-panel.js +75 -64
- package/dist/components/help-center-pages/index.cjs +78 -79
- package/dist/components/index.cjs +57 -59
- package/dist/components/meeting-scheduler/index.cjs +61 -61
- package/dist/components/navigation/index.cjs +15 -16
- package/dist/components/onboarding-guides/index.cjs +14 -15
- package/dist/components/product-demo/index.cjs +23 -24
- package/dist/components/tickets/index.cjs +17 -18
- package/dist/components/ui/file-manager/index.cjs +8 -9
- package/dist/components/ui/index.cjs +16 -18
- package/dist/components/ui/radio-group.d.ts.map +1 -1
- package/dist/components/ui/radio-group.js +8 -2
- package/dist/components/ui/tab-selector.d.ts +7 -1
- package/dist/components/ui/tab-selector.d.ts.map +1 -1
- package/dist/components/ui/tab-selector.js +22 -3
- package/dist/{devices-NGCTSXIU.cjs → devices-7PT6MPJI.cjs} +13 -14
- package/dist/{embeddable-chat-322NDFP5.cjs → embeddable-chat-5NY76K7K.cjs} +84 -85
- package/dist/index.cjs +23 -25
- package/dist/{knowledge-75PO5DYS.cjs → knowledge-J6N7IEVI.cjs} +13 -14
- package/dist/{logs-PZESOAIG.cjs → logs-D6KQP2BX.cjs} +19 -20
- package/dist/{policies-6XNMBFWO.cjs → policies-J7MCOL3C.cjs} +16 -17
- package/dist/{remote-session-Q2FIBCGT.cjs → remote-session-PXHA5KFK.cjs} +8 -9
- package/dist/{scripts-B3JW6TPF.cjs → scripts-VURXIHVS.cjs} +19 -20
- package/dist/{software-update-NWP542J7.cjs → software-update-6SHUBDIE.cjs} +16 -17
- package/dist/{tickets-board-7FLGQEHF.cjs → tickets-board-NLCN7WNX.cjs} +9 -9
- package/package.json +1 -1
- package/src/chat-protocol/events.ts +4 -1
- package/src/chat-protocol/nats-decoder.ts +4 -0
- package/src/chat-protocol/policy-review.ts +71 -0
- package/src/components/chat/approval-batch-message.tsx +47 -10
- package/src/components/chat/policy-review.tsx +90 -0
- package/src/components/chat/stream/message-mutations.ts +4 -0
- package/src/components/chat/tool-execution-display.tsx +23 -4
- package/src/components/chat/types/message.types.ts +42 -2
- package/src/components/chat/utils/extract-incomplete-message-state.ts +2 -0
- package/src/components/chat/utils/message-segment-accumulator.ts +3 -0
- package/src/components/chat/utils/process-historical-messages.ts +14 -3
- package/src/components/features/approval-level.tsx +74 -78
- package/src/components/features/notifications/approval-request-notification-tile.tsx +75 -50
- package/src/components/features/notifications/types.ts +4 -0
- package/src/components/features/policy-configuration-panel.tsx +100 -83
- package/src/components/ui/radio-group.tsx +20 -2
- package/src/components/ui/tab-selector.tsx +26 -3
- package/dist/chunk-N3MBQRCQ.cjs +0 -41
|
@@ -5,7 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
var _chunkKXFIYO4Ocjs = require('./chunk-KXFIYO4O.cjs');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunk4MGDY2AAcjs = require('./chunk-4MGDY2AA.cjs');
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
var _chunkOBGYDNT6cjs = require('./chunk-OBGYDNT6.cjs');
|
|
9
16
|
|
|
10
17
|
|
|
11
18
|
var _chunkOEP5KAT6cjs = require('./chunk-OEP5KAT6.cjs');
|
|
@@ -14,6 +21,15 @@ var _chunkOEP5KAT6cjs = require('./chunk-OEP5KAT6.cjs');
|
|
|
14
21
|
var _chunkHFNBMV5Mcjs = require('./chunk-HFNBMV5M.cjs');
|
|
15
22
|
|
|
16
23
|
|
|
24
|
+
var _chunkZWXR7MSVcjs = require('./chunk-ZWXR7MSV.cjs');
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
var _chunk7AAW6L5Ucjs = require('./chunk-7AAW6L5U.cjs');
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
var _chunk7WT2C5YYcjs = require('./chunk-7WT2C5YY.cjs');
|
|
31
|
+
|
|
32
|
+
|
|
17
33
|
var _chunkBUEEQD3Gcjs = require('./chunk-BUEEQD3G.cjs');
|
|
18
34
|
|
|
19
35
|
|
|
@@ -44,6 +60,10 @@ var _chunkJQCQCE6Ucjs = require('./chunk-JQCQCE6U.cjs');
|
|
|
44
60
|
var _chunkGG466XFQcjs = require('./chunk-GG466XFQ.cjs');
|
|
45
61
|
|
|
46
62
|
|
|
63
|
+
var _chunkVCFQHPOOcjs = require('./chunk-VCFQHPOO.cjs');
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
47
67
|
|
|
48
68
|
|
|
49
69
|
|
|
@@ -310,15 +330,15 @@ function TicketStatusTag({
|
|
|
310
330
|
);
|
|
311
331
|
if (loading || disabled || !options || options.length === 0 || !onSelect) {
|
|
312
332
|
if (!loading && disabled && disabledReason) {
|
|
313
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
314
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
315
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
333
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkKXFIYO4Ocjs.Tooltip, { children: [
|
|
334
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "w-fit shrink-0 cursor-not-allowed", children: tag }) }),
|
|
335
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipContent, { children: disabledReason })
|
|
316
336
|
] }) });
|
|
317
337
|
}
|
|
318
338
|
return tag;
|
|
319
339
|
}
|
|
320
340
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
321
|
-
|
|
341
|
+
_chunkKXFIYO4Ocjs.ActionsMenuDropdown,
|
|
322
342
|
{
|
|
323
343
|
align: "start",
|
|
324
344
|
groups: [
|
|
@@ -371,6 +391,70 @@ function TicketStatusTag({
|
|
|
371
391
|
);
|
|
372
392
|
}
|
|
373
393
|
|
|
394
|
+
// src/components/ui/alert.tsx
|
|
395
|
+
var _classvarianceauthority = require('class-variance-authority');
|
|
396
|
+
var _react = require('react');
|
|
397
|
+
|
|
398
|
+
var alertVariants = _classvarianceauthority.cva.call(void 0,
|
|
399
|
+
"relative w-full rounded-lg border p-4 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7",
|
|
400
|
+
{
|
|
401
|
+
variants: {
|
|
402
|
+
variant: {
|
|
403
|
+
default: "bg-background text-foreground",
|
|
404
|
+
destructive: "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive",
|
|
405
|
+
warning: "border-transparent bg-ods-warning-secondary text-ods-warning [&>svg]:text-ods-warning",
|
|
406
|
+
error: "border-transparent bg-ods-error-secondary text-ods-error [&>svg]:text-ods-error"
|
|
407
|
+
}
|
|
408
|
+
},
|
|
409
|
+
defaultVariants: {
|
|
410
|
+
variant: "default"
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
);
|
|
414
|
+
var Alert = _react.forwardRef.call(void 0,
|
|
415
|
+
({ className, variant, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref, role: "alert", className: _chunk63A4GZMBcjs.cn.call(void 0, alertVariants({ variant }), className), ...props })
|
|
416
|
+
);
|
|
417
|
+
Alert.displayName = "Alert";
|
|
418
|
+
var AlertTitle = _react.forwardRef.call(void 0,
|
|
419
|
+
({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h5", { ref, className: _chunk63A4GZMBcjs.cn.call(void 0, "mb-1 font-medium leading-none tracking-tight", className), ...props })
|
|
420
|
+
);
|
|
421
|
+
AlertTitle.displayName = "AlertTitle";
|
|
422
|
+
var AlertDescription = _react.forwardRef.call(void 0,
|
|
423
|
+
({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref, className: _chunk63A4GZMBcjs.cn.call(void 0, "text-h6 [&_p]:leading-relaxed", className), ...props })
|
|
424
|
+
);
|
|
425
|
+
AlertDescription.displayName = "AlertDescription";
|
|
426
|
+
|
|
427
|
+
// src/components/ui/layout-hold.tsx
|
|
428
|
+
|
|
429
|
+
var ROUNDED_BAR = `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25' rx='6'/%3E%3C/svg%3E")`;
|
|
430
|
+
var BAR_MASK = `${ROUNDED_BAR} center / 100% min(1em, calc(1lh - 6px)) no-repeat`;
|
|
431
|
+
var BAR_STYLE = { mask: BAR_MASK, WebkitMask: BAR_MASK };
|
|
432
|
+
function TextHold({ children, variant = "bar", className }) {
|
|
433
|
+
const bar = variant === "bar";
|
|
434
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
435
|
+
"span",
|
|
436
|
+
{
|
|
437
|
+
"aria-hidden": true,
|
|
438
|
+
className: _chunk63A4GZMBcjs.cn.call(void 0,
|
|
439
|
+
// `bar`: the words themselves, unseen, on the skeleton's surface. The span stays INLINE, so the
|
|
440
|
+
// browser paints one bar per line the words take, each exactly as wide as that line, and
|
|
441
|
+
// `box-decoration-clone` gives every line its own bar (and its own mask, `BAR_STYLE`). Pure CSS: it
|
|
442
|
+
// is drawn in the server's HTML, before any script runs (a loading state streamed by the server
|
|
443
|
+
// is often replaced before it hydrates).
|
|
444
|
+
bar ? _chunk63A4GZMBcjs.cn.call(void 0, _chunkPMUCEUFQcjs.SKELETON_SURFACE_CLASS, "rounded-md box-decoration-clone text-transparent") : "invisible",
|
|
445
|
+
// A hold is never selectable or clickable, whatever it wraps.
|
|
446
|
+
"pointer-events-none select-none",
|
|
447
|
+
className
|
|
448
|
+
),
|
|
449
|
+
style: bar ? BAR_STYLE : void 0,
|
|
450
|
+
children
|
|
451
|
+
}
|
|
452
|
+
);
|
|
453
|
+
}
|
|
454
|
+
function LayoutHold({ children, className }) {
|
|
455
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "aria-hidden": true, inert: true, className: _chunk63A4GZMBcjs.cn.call(void 0, "invisible", className), children });
|
|
456
|
+
}
|
|
457
|
+
|
|
374
458
|
// src/components/ui/status-line.tsx
|
|
375
459
|
|
|
376
460
|
function StatusLine({ tone, label, className }) {
|
|
@@ -408,7 +492,7 @@ function ExpandChevron({ expanded, className }) {
|
|
|
408
492
|
}
|
|
409
493
|
|
|
410
494
|
// src/components/chat/hooks/use-collapsible.ts
|
|
411
|
-
|
|
495
|
+
|
|
412
496
|
function useCollapsible({
|
|
413
497
|
expanded,
|
|
414
498
|
collapsedHeight = 0,
|
|
@@ -442,6 +526,243 @@ function useCollapsible({
|
|
|
442
526
|
};
|
|
443
527
|
}
|
|
444
528
|
|
|
529
|
+
// src/components/ui/tab-selector.tsx
|
|
530
|
+
|
|
531
|
+
function TabSelector({
|
|
532
|
+
value,
|
|
533
|
+
onValueChange,
|
|
534
|
+
items,
|
|
535
|
+
variant = "primary",
|
|
536
|
+
size = "default",
|
|
537
|
+
label,
|
|
538
|
+
disabled,
|
|
539
|
+
scrollable = false,
|
|
540
|
+
className
|
|
541
|
+
}) {
|
|
542
|
+
const flush = _chunkKXFIYO4Ocjs.useIsInActionsMenuHeader.call(void 0, );
|
|
543
|
+
const compact = size === "compact";
|
|
544
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
545
|
+
"div",
|
|
546
|
+
{
|
|
547
|
+
className: _chunk63A4GZMBcjs.cn.call(void 0, "flex flex-col gap-[var(--spacing-system-xxs)]", disabled && "opacity-50", className),
|
|
548
|
+
"aria-disabled": disabled || void 0,
|
|
549
|
+
children: [
|
|
550
|
+
label && // Label for family/color; 'large' (text-h4) is this component's
|
|
551
|
+
// long-standing label scale — neighbours opt into the same scale via
|
|
552
|
+
// their `labelVariant="large"` when a design puts them side by side.
|
|
553
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVCFQHPOOcjs.Label, { variant: "large", children: label }),
|
|
554
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
555
|
+
"div",
|
|
556
|
+
{
|
|
557
|
+
className: _chunk63A4GZMBcjs.cn.call(void 0,
|
|
558
|
+
"flex gap-[var(--spacing-system-xxs)] bg-ods-bg p-[var(--spacing-system-xxs)]",
|
|
559
|
+
flush ? "h-10 w-full" : _chunk63A4GZMBcjs.cn.call(void 0,
|
|
560
|
+
"rounded-md border border-ods-border",
|
|
561
|
+
compact ? "h-10 content-md:h-11" : "h-11 content-md:h-12",
|
|
562
|
+
scrollable ? "overflow-x-auto" : compact ? "w-auto" : "w-full"
|
|
563
|
+
)
|
|
564
|
+
),
|
|
565
|
+
children: items.map((item) => {
|
|
566
|
+
const isActive = value === item.id;
|
|
567
|
+
const isDisabled = disabled || item.disabled;
|
|
568
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
569
|
+
_chunkFCZAUK4Dcjs.Button,
|
|
570
|
+
{
|
|
571
|
+
variant: "segment",
|
|
572
|
+
type: "button",
|
|
573
|
+
disabled: isDisabled,
|
|
574
|
+
onClick: () => onValueChange(item.id),
|
|
575
|
+
"aria-label": !item.label ? item.ariaLabel : void 0,
|
|
576
|
+
"aria-pressed": isActive,
|
|
577
|
+
"data-state": isActive ? "active" : void 0,
|
|
578
|
+
"data-tone": variant === "primary" ? "accent" : void 0,
|
|
579
|
+
className: _chunk63A4GZMBcjs.cn.call(void 0,
|
|
580
|
+
"h-full",
|
|
581
|
+
compact ? "w-8 flex-none content-md:w-9" : scrollable ? "flex-none shrink-0 basis-auto" : "flex-1"
|
|
582
|
+
),
|
|
583
|
+
children: [
|
|
584
|
+
item.icon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
585
|
+
"span",
|
|
586
|
+
{
|
|
587
|
+
className: _chunk63A4GZMBcjs.cn.call(void 0,
|
|
588
|
+
"flex shrink-0 items-center justify-center",
|
|
589
|
+
// compact: the box sizes the icon, whatever size the caller drew it at.
|
|
590
|
+
compact ? "size-4 content-md:size-5 [&>svg]:size-full" : "size-4 content-md:size-6"
|
|
591
|
+
),
|
|
592
|
+
children: item.icon
|
|
593
|
+
}
|
|
594
|
+
),
|
|
595
|
+
item.label,
|
|
596
|
+
item.badge && item.badge
|
|
597
|
+
]
|
|
598
|
+
},
|
|
599
|
+
item.id
|
|
600
|
+
);
|
|
601
|
+
})
|
|
602
|
+
}
|
|
603
|
+
)
|
|
604
|
+
]
|
|
605
|
+
}
|
|
606
|
+
);
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
// src/components/ui/touch-friendly-tooltip.tsx
|
|
610
|
+
|
|
611
|
+
|
|
612
|
+
var dismissOpenTooltip = null;
|
|
613
|
+
function TouchFriendlyTooltip({ content, side = "left", children }) {
|
|
614
|
+
const [open, setOpen] = _react.useState.call(void 0, false);
|
|
615
|
+
const isTouchRef = _react.useRef.call(void 0, false);
|
|
616
|
+
const close = _react.useCallback.call(void 0, () => setOpen(false), []);
|
|
617
|
+
if (!content) return children;
|
|
618
|
+
const toggleFromTouch = () => {
|
|
619
|
+
setOpen((prev) => {
|
|
620
|
+
const next = !prev;
|
|
621
|
+
if (next) {
|
|
622
|
+
if (dismissOpenTooltip && dismissOpenTooltip !== close) dismissOpenTooltip();
|
|
623
|
+
dismissOpenTooltip = close;
|
|
624
|
+
} else if (dismissOpenTooltip === close) {
|
|
625
|
+
dismissOpenTooltip = null;
|
|
626
|
+
}
|
|
627
|
+
return next;
|
|
628
|
+
});
|
|
629
|
+
};
|
|
630
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipProvider, { delayDuration: 150, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkKXFIYO4Ocjs.Tooltip, { open, onOpenChange: setOpen, children: [
|
|
631
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
632
|
+
_chunkKXFIYO4Ocjs.TooltipTrigger,
|
|
633
|
+
{
|
|
634
|
+
asChild: true,
|
|
635
|
+
onPointerDown: (e) => {
|
|
636
|
+
isTouchRef.current = e.pointerType === "touch";
|
|
637
|
+
if (!isTouchRef.current) return;
|
|
638
|
+
e.preventDefault();
|
|
639
|
+
toggleFromTouch();
|
|
640
|
+
},
|
|
641
|
+
onFocus: (e) => {
|
|
642
|
+
if (isTouchRef.current) e.preventDefault();
|
|
643
|
+
},
|
|
644
|
+
onClick: (e) => {
|
|
645
|
+
if (isTouchRef.current) e.preventDefault();
|
|
646
|
+
},
|
|
647
|
+
children
|
|
648
|
+
}
|
|
649
|
+
),
|
|
650
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKXFIYO4Ocjs.TooltipContent, { side, className: "max-w-xs", children: content })
|
|
651
|
+
] }) });
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
// src/components/features/approval-level.tsx
|
|
655
|
+
|
|
656
|
+
var APPROVAL_LEVELS = ["ALLOW", "ASK_USER", "ASK_TECHNICIAN", "DENY"];
|
|
657
|
+
var APPROVAL_LEVEL_META = {
|
|
658
|
+
ALLOW: {
|
|
659
|
+
label: "Allow",
|
|
660
|
+
hint: "Runs on its own. You get a summary after.",
|
|
661
|
+
Icon: _chunkHFNBMV5Mcjs.CheckCircleIcon,
|
|
662
|
+
toneClassName: "text-ods-success"
|
|
663
|
+
},
|
|
664
|
+
ASK_USER: {
|
|
665
|
+
label: "Ask User",
|
|
666
|
+
hint: "Asks the person at the computer first.",
|
|
667
|
+
Icon: _chunk4MGDY2AAcjs.UserCheckIcon,
|
|
668
|
+
toneClassName: "text-ods-warning"
|
|
669
|
+
},
|
|
670
|
+
ASK_TECHNICIAN: {
|
|
671
|
+
label: "Ask Technician",
|
|
672
|
+
hint: "Asks a technician first. Nothing runs until they approve.",
|
|
673
|
+
Icon: _chunkOBGYDNT6cjs.ShieldCheckIcon,
|
|
674
|
+
toneClassName: "text-ods-warning"
|
|
675
|
+
},
|
|
676
|
+
DENY: { label: "Restrict", hint: "Never runs.", Icon: _chunkZWXR7MSVcjs.BannedIcon, toneClassName: "text-ods-error" }
|
|
677
|
+
};
|
|
678
|
+
var ICON_PX = 24;
|
|
679
|
+
var READ_ONLY_ROW_CLASS = "inline-flex shrink-0 items-center gap-[var(--spacing-system-xxs)]";
|
|
680
|
+
var EDITABLE_ROW_CLASS = "flex shrink-0 items-center gap-[var(--spacing-system-xxs)] content-md:gap-[var(--spacing-system-m)]";
|
|
681
|
+
var EDITABLE_NAME_ORDER_CLASS = "order-last content-md:order-none";
|
|
682
|
+
var READ_ONLY_ICON_BOX_CLASS = "[&>*]:!size-4 content-md:[&>*]:!size-6";
|
|
683
|
+
var READ_ONLY_NAME_CLASS = "whitespace-nowrap text-ods-text-primary text-h4";
|
|
684
|
+
var LEVEL_NAME_CLASS = "whitespace-nowrap text-h6";
|
|
685
|
+
var EDITABLE_ICON_PX = 20;
|
|
686
|
+
var LONGEST_LEVEL_LABEL = APPROVAL_LEVELS.map((level) => APPROVAL_LEVEL_META[level].label).reduce(
|
|
687
|
+
(a, b) => b.length > a.length ? b : a
|
|
688
|
+
);
|
|
689
|
+
function levelItems(inForce) {
|
|
690
|
+
return APPROVAL_LEVELS.map((level) => {
|
|
691
|
+
const { label, Icon } = APPROVAL_LEVEL_META[level];
|
|
692
|
+
const tone = level === inForce ? "text-ods-text-primary" : "text-ods-text-secondary";
|
|
693
|
+
return { id: level, ariaLabel: label, icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Icon, { size: EDITABLE_ICON_PX, className: tone, "aria-hidden": true }) };
|
|
694
|
+
});
|
|
695
|
+
}
|
|
696
|
+
function ApprovalLevelView({
|
|
697
|
+
value,
|
|
698
|
+
editable,
|
|
699
|
+
onChange,
|
|
700
|
+
disabled = false,
|
|
701
|
+
showLabel = true,
|
|
702
|
+
"aria-labelledby": labelledBy,
|
|
703
|
+
loading = false,
|
|
704
|
+
className
|
|
705
|
+
}) {
|
|
706
|
+
const canEdit = _nullishCoalesce(editable, () => ( onChange !== void 0));
|
|
707
|
+
if (_chunk63A4GZMBcjs.useLoadingScope.call(void 0, ) || loading) {
|
|
708
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ApprovalLevelSkeleton, { editable: canEdit, showLabel, className });
|
|
709
|
+
}
|
|
710
|
+
const current = APPROVAL_LEVEL_META[value];
|
|
711
|
+
if (!canEdit) {
|
|
712
|
+
const icon = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: _chunk63A4GZMBcjs.cn.call(void 0, "inline-flex shrink-0", READ_ONLY_ICON_BOX_CLASS, current.toneClassName), children: [
|
|
713
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, current.Icon, { size: ICON_PX, "aria-hidden": true }),
|
|
714
|
+
!showLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "sr-only", children: current.label })
|
|
715
|
+
] });
|
|
716
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: _chunk63A4GZMBcjs.cn.call(void 0, READ_ONLY_ROW_CLASS, className), children: [
|
|
717
|
+
showLabel ? icon : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TouchFriendlyTooltip, { content: `${current.label}: ${current.hint}`, side: "top", children: icon }),
|
|
718
|
+
showLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: READ_ONLY_NAME_CLASS, children: current.label })
|
|
719
|
+
] });
|
|
720
|
+
}
|
|
721
|
+
const name = showLabel ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunk63A4GZMBcjs.cn.call(void 0, LEVEL_NAME_CLASS, EDITABLE_NAME_ORDER_CLASS, current.toneClassName), children: current.label }) : null;
|
|
722
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk63A4GZMBcjs.cn.call(void 0, EDITABLE_ROW_CLASS, className), children: [
|
|
723
|
+
name,
|
|
724
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { role: "group", "aria-labelledby": labelledBy, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
725
|
+
TabSelector,
|
|
726
|
+
{
|
|
727
|
+
variant: "secondary",
|
|
728
|
+
size: "compact",
|
|
729
|
+
value,
|
|
730
|
+
disabled,
|
|
731
|
+
onValueChange: (next) => {
|
|
732
|
+
if (next !== value) _optionalChain([onChange, 'optionalCall', _ => _(next)]);
|
|
733
|
+
},
|
|
734
|
+
items: levelItems(value),
|
|
735
|
+
className: "w-auto"
|
|
736
|
+
}
|
|
737
|
+
) })
|
|
738
|
+
] });
|
|
739
|
+
}
|
|
740
|
+
function ApprovalLevelSkeleton({ editable = false, showLabel = true, className }) {
|
|
741
|
+
if (!editable) {
|
|
742
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { "aria-hidden": true, className: _chunk63A4GZMBcjs.cn.call(void 0, READ_ONLY_ROW_CLASS, className), children: [
|
|
743
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunk63A4GZMBcjs.cn.call(void 0, "inline-flex shrink-0", READ_ONLY_ICON_BOX_CLASS), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPMUCEUFQcjs.UnifiedSkeleton, { as: "span", className: "inline-block shrink-0 rounded-sm", width: ICON_PX, height: ICON_PX }) }),
|
|
744
|
+
showLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: READ_ONLY_NAME_CLASS, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TextHold, { children: LONGEST_LEVEL_LABEL }) })
|
|
745
|
+
] });
|
|
746
|
+
}
|
|
747
|
+
const name = showLabel ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunk63A4GZMBcjs.cn.call(void 0, LEVEL_NAME_CLASS, EDITABLE_NAME_ORDER_CLASS), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TextHold, { children: LONGEST_LEVEL_LABEL }) }) : null;
|
|
748
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { "aria-hidden": true, inert: true, className: _chunk63A4GZMBcjs.cn.call(void 0, EDITABLE_ROW_CLASS, className), children: [
|
|
749
|
+
name,
|
|
750
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
751
|
+
TabSelector,
|
|
752
|
+
{
|
|
753
|
+
variant: "secondary",
|
|
754
|
+
size: "compact",
|
|
755
|
+
value: "",
|
|
756
|
+
disabled: true,
|
|
757
|
+
onValueChange: () => {
|
|
758
|
+
},
|
|
759
|
+
items: levelItems(void 0),
|
|
760
|
+
className: "w-auto"
|
|
761
|
+
}
|
|
762
|
+
)
|
|
763
|
+
] });
|
|
764
|
+
}
|
|
765
|
+
|
|
445
766
|
// src/components/chat/utils/tool-call-helpers.ts
|
|
446
767
|
var COMMAND_BODY_ARG_KEYS = ["command", "query", "script", "scriptContent", "code"];
|
|
447
768
|
function getToolCallTitle(opts) {
|
|
@@ -496,7 +817,7 @@ function expandJson(value, indent) {
|
|
|
496
817
|
function expandedJsonStringify(value) {
|
|
497
818
|
try {
|
|
498
819
|
return expandJson(value, 0);
|
|
499
|
-
} catch (
|
|
820
|
+
} catch (e2) {
|
|
500
821
|
return String(value);
|
|
501
822
|
}
|
|
502
823
|
}
|
|
@@ -510,7 +831,7 @@ function formatToolArgValue(value) {
|
|
|
510
831
|
if (trimmed.startsWith("{") && trimmed.endsWith("}") || trimmed.startsWith("[") && trimmed.endsWith("]")) {
|
|
511
832
|
try {
|
|
512
833
|
return { kind: "block", text: expandedJsonStringify(JSON.parse(trimmed)), language: "json" };
|
|
513
|
-
} catch (
|
|
834
|
+
} catch (e3) {
|
|
514
835
|
}
|
|
515
836
|
}
|
|
516
837
|
if (value.includes("\n") || value.length > INLINE_STRING_MAX) {
|
|
@@ -531,7 +852,7 @@ function formatToolResult(value) {
|
|
|
531
852
|
if (trimmed.startsWith("{") && trimmed.endsWith("}") || trimmed.startsWith("[") && trimmed.endsWith("]")) {
|
|
532
853
|
try {
|
|
533
854
|
return { kind: "block", text: expandedJsonStringify(JSON.parse(trimmed)), language: "json" };
|
|
534
|
-
} catch (
|
|
855
|
+
} catch (e4) {
|
|
535
856
|
}
|
|
536
857
|
}
|
|
537
858
|
if (body.includes("\n") || body.length > INLINE_STRING_MAX) {
|
|
@@ -588,6 +909,63 @@ function CommandBlock({ command, className }) {
|
|
|
588
909
|
var CHAT_BLOCK_FRAME_CLASS = "rounded-lg border border-ods-border bg-ods-bg";
|
|
589
910
|
var CHAT_BLOCK_CLASS = `${CHAT_BLOCK_FRAME_CLASS} flex flex-col gap-[var(--spacing-system-xsf)] p-[var(--spacing-system-sf)]`;
|
|
590
911
|
|
|
912
|
+
// src/components/chat/policy-review.tsx
|
|
913
|
+
|
|
914
|
+
var RULE_DECISIONS = /* @__PURE__ */ new Set(["DENY", "SOFT_DENY", "HARD_DENY"]);
|
|
915
|
+
function isPolicyEscalated(review) {
|
|
916
|
+
if (!review) return false;
|
|
917
|
+
return review.decision ? RULE_DECISIONS.has(review.decision) : review.matchedRules.length > 0;
|
|
918
|
+
}
|
|
919
|
+
function policyLevelText(review) {
|
|
920
|
+
const level = _nullishCoalesce(review.policyLevel, () => ( (isPolicyEscalated(review) ? void 0 : review.approvalLevel)));
|
|
921
|
+
if (!level) return void 0;
|
|
922
|
+
const label = APPROVAL_LEVEL_META[level].label;
|
|
923
|
+
return review.decision === "FALLBACK" ? `${label} (Unmatched Actions)` : label;
|
|
924
|
+
}
|
|
925
|
+
function hasPolicyReviewRows(review) {
|
|
926
|
+
return !!review && (!!policyLevelText(review) || review.operationCodes.length > 0);
|
|
927
|
+
}
|
|
928
|
+
function PolicyReviewRows({ review, className }) {
|
|
929
|
+
const level = policyLevelText(review);
|
|
930
|
+
if (!hasPolicyReviewRows(review)) return null;
|
|
931
|
+
return (
|
|
932
|
+
// A plain block: the rows stack on their own, and a nested flex column costs WebKit a layout pass (WEBVIEW-001).
|
|
933
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk63A4GZMBcjs.cn.call(void 0, "w-full", className), children: [
|
|
934
|
+
level && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ArgRow, { argKey: "Guardrail Policy", value: level }),
|
|
935
|
+
review.operationCodes.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ArgRow, { argKey: "Operations", value: review.operationCodes.join(", ") })
|
|
936
|
+
] })
|
|
937
|
+
);
|
|
938
|
+
}
|
|
939
|
+
function PolicyEscalationAlert({
|
|
940
|
+
review,
|
|
941
|
+
className
|
|
942
|
+
}) {
|
|
943
|
+
if (!review || !isPolicyEscalated(review)) return null;
|
|
944
|
+
const description = _nullishCoalesce(review.reason, () => ( review.matchedRules.map((rule) => rule.label).join(", ")));
|
|
945
|
+
return (
|
|
946
|
+
// A note, not an `alert`: it is part of the thread, read in place, and a live region would interrupt the reader
|
|
947
|
+
// for every escalated call on each replay of the history.
|
|
948
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
949
|
+
Alert,
|
|
950
|
+
{
|
|
951
|
+
role: "note",
|
|
952
|
+
variant: "warning",
|
|
953
|
+
className: _chunk63A4GZMBcjs.cn.call(void 0,
|
|
954
|
+
"flex items-center gap-[var(--spacing-system-m)] rounded-none border-0 p-[var(--spacing-system-m)]",
|
|
955
|
+
className
|
|
956
|
+
),
|
|
957
|
+
children: [
|
|
958
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex shrink-0", "aria-hidden": true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7AAW6L5Ucjs.AlertTriangleIcon, { size: 20 }) }),
|
|
959
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid min-w-0 flex-1 grid-cols-1 gap-[var(--spacing-system-xxs)]", children: [
|
|
960
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "break-words text-h3", children: "Mingo Escalated" }),
|
|
961
|
+
description && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "break-words text-h6", children: description })
|
|
962
|
+
] })
|
|
963
|
+
]
|
|
964
|
+
}
|
|
965
|
+
)
|
|
966
|
+
);
|
|
967
|
+
}
|
|
968
|
+
|
|
591
969
|
// src/components/chat/approval-batch-message.tsx
|
|
592
970
|
|
|
593
971
|
var COMMAND_BODY_KEYS = new Set(COMMAND_BODY_ARG_KEYS);
|
|
@@ -610,21 +988,35 @@ function getArgEntries(call) {
|
|
|
610
988
|
}
|
|
611
989
|
function ExecutionStatusIcon({
|
|
612
990
|
batchStatus,
|
|
613
|
-
execution
|
|
991
|
+
execution,
|
|
992
|
+
escalated
|
|
614
993
|
}) {
|
|
994
|
+
if (batchStatus === "pending" && escalated)
|
|
995
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7WT2C5YYcjs.AlertCircleIcon, { className: "h-4 w-4 text-ods-warning", "aria-hidden": true });
|
|
615
996
|
if (batchStatus !== "approved") return null;
|
|
616
997
|
if (!execution || execution.status === "executing")
|
|
617
998
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOEP5KAT6cjs.DotsLoaderIcon, { size: 16, className: "text-ods-text-secondary" });
|
|
618
999
|
if (execution.success === false) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRUHKTWGBcjs.XmarkCircleIcon, { className: "h-4 w-4 text-ods-error" });
|
|
619
1000
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHFNBMV5Mcjs.CheckCircleIcon, { className: "h-4 w-4 text-ods-success" });
|
|
620
1001
|
}
|
|
621
|
-
function ToolCallRow({
|
|
1002
|
+
function ToolCallRow({
|
|
1003
|
+
call,
|
|
1004
|
+
expanded,
|
|
1005
|
+
onToggle,
|
|
1006
|
+
batchStatus,
|
|
1007
|
+
execution,
|
|
1008
|
+
showExecutionStatus,
|
|
1009
|
+
showEscalationAlert
|
|
1010
|
+
}) {
|
|
622
1011
|
const command = getCommandText(call);
|
|
623
1012
|
const args = getArgEntries(call);
|
|
624
1013
|
const toolType = call.toolType || "OPENFRAME";
|
|
625
1014
|
const { innerRef, containerStyle } = useCollapsible({ expanded });
|
|
626
|
-
const result = _optionalChain([execution, 'optionalAccess',
|
|
627
|
-
const
|
|
1015
|
+
const result = _optionalChain([execution, 'optionalAccess', _2 => _2.status]) === "done" ? execution.result : void 0;
|
|
1016
|
+
const review = call.policyReview;
|
|
1017
|
+
const escalated = isPolicyEscalated(review);
|
|
1018
|
+
const reviewRows = hasPolicyReviewRows(review);
|
|
1019
|
+
const hasExpandableBody = args.length > 0 || reviewRows || typeof result === "string" && result.length > 0;
|
|
628
1020
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col items-start border-b border-ods-border bg-ods-card last:border-b-0", children: [
|
|
629
1021
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkFCZAUK4Dcjs.Button, { variant: "row", type: "button", onClick: onToggle, "aria-expanded": expanded, className: "rounded-none", children: [
|
|
630
1022
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-5 w-5 shrink-0 items-center justify-center text-ods-text-secondary", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBUEEQD3Gcjs.ToolIcon, { toolType, size: 16 }) }),
|
|
@@ -638,19 +1030,27 @@ function ToolCallRow({ call, expanded, onToggle, batchStatus, execution, showExe
|
|
|
638
1030
|
children: command
|
|
639
1031
|
}
|
|
640
1032
|
),
|
|
641
|
-
showExecutionStatus && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-5 w-5 shrink-0 items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ExecutionStatusIcon, { batchStatus, execution }) }),
|
|
1033
|
+
(showExecutionStatus || batchStatus === "pending" && escalated) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-5 w-5 shrink-0 items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ExecutionStatusIcon, { batchStatus, execution, escalated }) }),
|
|
642
1034
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-5 w-5 shrink-0 items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ExpandChevron, { expanded }) })
|
|
643
1035
|
] }),
|
|
644
1036
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", style: containerStyle, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: innerRef, children: hasExpandableBody && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col items-start gap-0 bg-ods-card px-[var(--spacing-system-sf)] pb-[var(--spacing-system-sf)] text-h6", children: [
|
|
645
1037
|
args.map(([key, value]) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ArgRow, { argKey: key, value }, key)),
|
|
1038
|
+
reviewRows && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1039
|
+
PolicyReviewRows,
|
|
1040
|
+
{
|
|
1041
|
+
review,
|
|
1042
|
+
className: args.length > 0 ? "mt-[var(--spacing-system-xsf)]" : void 0
|
|
1043
|
+
}
|
|
1044
|
+
),
|
|
646
1045
|
result && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
647
1046
|
ResultBlock,
|
|
648
1047
|
{
|
|
649
1048
|
result,
|
|
650
|
-
className: args.length > 0 ? "mt-[var(--spacing-system-xsf)]" : void 0
|
|
1049
|
+
className: args.length > 0 || reviewRows ? "mt-[var(--spacing-system-xsf)]" : void 0
|
|
651
1050
|
}
|
|
652
1051
|
)
|
|
653
|
-
] }) }) })
|
|
1052
|
+
] }) }) }),
|
|
1053
|
+
showEscalationAlert && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PolicyEscalationAlert, { review, className: "border-t border-ods-border" })
|
|
654
1054
|
] });
|
|
655
1055
|
}
|
|
656
1056
|
var ApprovalBatchLoading = _react.forwardRef.call(void 0,
|
|
@@ -739,6 +1139,7 @@ var ApprovalBatchMessage = _react.forwardRef.call(void 0,
|
|
|
739
1139
|
assistantType: _assistantType,
|
|
740
1140
|
variant = "admin",
|
|
741
1141
|
showFooterActions = true,
|
|
1142
|
+
showEscalationAlerts = true,
|
|
742
1143
|
...props
|
|
743
1144
|
}, ref) => {
|
|
744
1145
|
const [expandedId, setExpandedId] = _react.useState.call(void 0, null);
|
|
@@ -757,11 +1158,12 @@ var ApprovalBatchMessage = _react.forwardRef.call(void 0,
|
|
|
757
1158
|
}
|
|
758
1159
|
);
|
|
759
1160
|
}
|
|
760
|
-
const explanations = data.toolCalls.map((c) => _optionalChain([c, 'access',
|
|
1161
|
+
const explanations = data.toolCalls.map((c) => _optionalChain([c, 'access', _3 => _3.toolExplanation, 'optionalAccess', _4 => _4.trim, 'call', _5 => _5()])).filter((s) => !!s);
|
|
1162
|
+
const escalated = !isClient && data.toolCalls.some((c) => isPolicyEscalated(c.policyReview));
|
|
761
1163
|
const handleApprove = async () => {
|
|
762
1164
|
setIsProcessing(true);
|
|
763
1165
|
try {
|
|
764
|
-
await _optionalChain([onApprove, 'optionalCall',
|
|
1166
|
+
await _optionalChain([onApprove, 'optionalCall', _6 => _6(data.approvalRequestId)]);
|
|
765
1167
|
} finally {
|
|
766
1168
|
setIsProcessing(false);
|
|
767
1169
|
}
|
|
@@ -769,7 +1171,7 @@ var ApprovalBatchMessage = _react.forwardRef.call(void 0,
|
|
|
769
1171
|
const handleReject = async () => {
|
|
770
1172
|
setIsProcessing(true);
|
|
771
1173
|
try {
|
|
772
|
-
await _optionalChain([onReject, 'optionalCall',
|
|
1174
|
+
await _optionalChain([onReject, 'optionalCall', _7 => _7(data.approvalRequestId)]);
|
|
773
1175
|
} finally {
|
|
774
1176
|
setIsProcessing(false);
|
|
775
1177
|
}
|
|
@@ -779,12 +1181,12 @@ var ApprovalBatchMessage = _react.forwardRef.call(void 0,
|
|
|
779
1181
|
_chunkFCZAUK4Dcjs.Button,
|
|
780
1182
|
{
|
|
781
1183
|
size: "small-legacy",
|
|
782
|
-
variant: "accent",
|
|
1184
|
+
variant: escalated ? "warning" : "accent",
|
|
783
1185
|
onClick: handleApprove,
|
|
784
1186
|
disabled: isProcessing,
|
|
785
1187
|
className: _chunk63A4GZMBcjs.cn.call(void 0,
|
|
786
|
-
"bg-ods-accent hover:bg-ods-accent/90",
|
|
787
|
-
"text-
|
|
1188
|
+
!escalated && "bg-ods-accent text-ods-bg hover:bg-ods-accent/90",
|
|
1189
|
+
"text-h5",
|
|
788
1190
|
"h-8 px-[var(--spacing-system-xsf)]"
|
|
789
1191
|
),
|
|
790
1192
|
children: "Approve"
|
|
@@ -807,7 +1209,7 @@ var ApprovalBatchMessage = _react.forwardRef.call(void 0,
|
|
|
807
1209
|
)
|
|
808
1210
|
] });
|
|
809
1211
|
if (isClient) {
|
|
810
|
-
const titles = data.toolCalls.map((c) => _optionalChain([c, 'access',
|
|
1212
|
+
const titles = data.toolCalls.map((c) => _optionalChain([c, 'access', _8 => _8.toolExplanation, 'optionalAccess', _9 => _9.trim, 'call', _10 => _10()]) || _optionalChain([c, 'access', _11 => _11.toolTitle, 'optionalAccess', _12 => _12.trim, 'call', _13 => _13()])).filter((s) => !!s);
|
|
811
1213
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { ref, className: _chunk63A4GZMBcjs.cn.call(void 0, "mb-[var(--spacing-system-xsf)]", CHAT_BLOCK_CLASS, className), ...props, children: [
|
|
812
1214
|
titles.length > 0 ? titles.map((title, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "w-full whitespace-pre-line break-words text-ods-text-primary text-h4", children: title }, i)) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "w-full text-ods-text-primary text-h4", children: "Approval required" }),
|
|
813
1215
|
showFooterActions && status === "pending" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ApprovalWaitingLine, {}),
|
|
@@ -838,7 +1240,8 @@ var ApprovalBatchMessage = _react.forwardRef.call(void 0,
|
|
|
838
1240
|
expanded: expandedId === call.toolExecutionRequestId,
|
|
839
1241
|
onToggle: () => setExpandedId((prev) => prev === call.toolExecutionRequestId ? null : call.toolExecutionRequestId),
|
|
840
1242
|
batchStatus: status,
|
|
841
|
-
|
|
1243
|
+
showEscalationAlert: showEscalationAlerts,
|
|
1244
|
+
execution: _optionalChain([data, 'access', _14 => _14.executions, 'optionalAccess', _15 => _15[call.toolExecutionRequestId]]),
|
|
842
1245
|
showExecutionStatus
|
|
843
1246
|
},
|
|
844
1247
|
call.toolExecutionRequestId
|
|
@@ -868,10 +1271,10 @@ ApprovalBatchMessage.displayName = "ApprovalBatchMessage";
|
|
|
868
1271
|
|
|
869
1272
|
function AgentMark({ agent, className = "", color = _chunkJBTH3O2Ccjs.AGENT_GLYPH_COLOR }) {
|
|
870
1273
|
const identity = _chunkJBTH3O2Ccjs.useAgentIdentityIcon.call(void 0, agent);
|
|
871
|
-
if (_optionalChain([identity, 'optionalAccess',
|
|
1274
|
+
if (_optionalChain([identity, 'optionalAccess', _16 => _16.url])) {
|
|
872
1275
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "aria-hidden": "true", className: _chunk63A4GZMBcjs.cn.call(void 0, "relative inline-block overflow-hidden rounded-full", className), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGG466XFQcjs.next_image_default, { src: identity.url, alt: "", fill: true, sizes: _chunkJQCQCE6Ucjs.fixedImageSlot.call(void 0, "mark"), className: _chunkJBTH3O2Ccjs.AGENT_PICTURE_CLASS }) });
|
|
873
1276
|
}
|
|
874
|
-
if (_optionalChain([identity, 'optionalAccess',
|
|
1277
|
+
if (_optionalChain([identity, 'optionalAccess', _17 => _17.name])) {
|
|
875
1278
|
return _react.createElement.call(void 0, _chunkJQCQCE6Ucjs.resolveIcon.call(void 0, identity.name), {
|
|
876
1279
|
className,
|
|
877
1280
|
"aria-hidden": true,
|
|
@@ -924,4 +1327,18 @@ function AgentAvatarSkeleton({ size, className }) {
|
|
|
924
1327
|
|
|
925
1328
|
|
|
926
1329
|
|
|
927
|
-
|
|
1330
|
+
|
|
1331
|
+
|
|
1332
|
+
|
|
1333
|
+
|
|
1334
|
+
|
|
1335
|
+
|
|
1336
|
+
|
|
1337
|
+
|
|
1338
|
+
|
|
1339
|
+
|
|
1340
|
+
|
|
1341
|
+
|
|
1342
|
+
|
|
1343
|
+
|
|
1344
|
+
exports.formatTicketRelativeTime = formatTicketRelativeTime; exports.formatTicketFullTimestamp = formatTicketFullTimestamp; exports.formatRelativeTime = formatRelativeTime; exports.formatRelativeTimeFrom = formatRelativeTimeFrom; exports.formatAbsoluteDate = formatAbsoluteDate; exports.formatDateTime = formatDateTime; exports.getDetailedTimeDifference = getDetailedTimeDifference; exports.isToday = isToday; exports.isWithinMinutes = isWithinMinutes; exports.createUTCTimestamp = createUTCTimestamp; exports.ColorSwatch = ColorSwatch; exports.resolveTicketStatus = resolveTicketStatus; exports.getTicketStatusConfig = getTicketStatusConfig; exports.getTicketStatusTag = getTicketStatusTag; exports.kindToCanonicalStatus = kindToCanonicalStatus; exports.usesCanonicalStatusStyle = usesCanonicalStatusStyle; exports.resolveStatusTagProps = resolveStatusTagProps; exports.TicketStatusTag = TicketStatusTag; exports.Alert = Alert; exports.AlertTitle = AlertTitle; exports.AlertDescription = AlertDescription; exports.TextHold = TextHold; exports.LayoutHold = LayoutHold; exports.StatusLine = StatusLine; exports.CHAT_BLOCK_FRAME_CLASS = CHAT_BLOCK_FRAME_CLASS; exports.CHAT_BLOCK_CLASS = CHAT_BLOCK_CLASS; exports.ExpandChevron = ExpandChevron; exports.useCollapsible = useCollapsible; exports.TabSelector = TabSelector; exports.TouchFriendlyTooltip = TouchFriendlyTooltip; exports.APPROVAL_LEVELS = APPROVAL_LEVELS; exports.APPROVAL_LEVEL_META = APPROVAL_LEVEL_META; exports.ApprovalLevelView = ApprovalLevelView; exports.COMMAND_BODY_ARG_KEYS = COMMAND_BODY_ARG_KEYS; exports.getCommandText = getCommandText; exports.ArgRow = ArgRow; exports.ResultBlock = ResultBlock; exports.CommandBlock = CommandBlock; exports.isPolicyEscalated = isPolicyEscalated; exports.hasPolicyReviewRows = hasPolicyReviewRows; exports.PolicyReviewRows = PolicyReviewRows; exports.PolicyEscalationAlert = PolicyEscalationAlert; exports.ApprovalStatusTag = ApprovalStatusTag; exports.ApprovalWaitingLine = ApprovalWaitingLine; exports.ApprovalBatchMessage = ApprovalBatchMessage; exports.AgentMark = AgentMark; exports.AgentAvatar = AgentAvatar;
|