@arbidocs/blocks 0.4.54 → 0.4.55
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/agents/index.cjs +218 -230
- package/dist/agents/index.js +2 -2
- package/dist/agents/tasks/NewThreadDialog.d.ts +4 -8
- package/dist/agents/tasks/TaskActivityTimeline.d.ts +2 -8
- package/dist/agents/tasks/TaskInbox.d.ts +1 -1
- package/dist/agents/tasks/TaskRowMenu.d.ts +1 -6
- package/dist/agents/tasks/TaskStartDialog.d.ts +1 -8
- package/dist/agents/tasks/TaskStatusPill.d.ts +2 -2
- package/dist/agents/tasks/TaskTable.d.ts +6 -17
- package/dist/agents/tasks/WorkflowComposer.d.ts +2 -2
- package/dist/agents/tasks/index.d.ts +1 -4
- package/dist/agents/tasks/taskColumns.d.ts +2 -2
- package/dist/agents/tasks/taskComposerTypes.d.ts +2 -15
- package/dist/agents/tasks/taskLabels.d.ts +5 -7
- package/dist/agents/tasks/taskRequest.d.ts +5 -7
- package/dist/agents/tasks/taskRows.d.ts +6 -10
- package/dist/agents/tasks/taskTableLabels.d.ts +2 -6
- package/dist/agents/tasks/workflowRows.d.ts +2 -2
- package/dist/{chunk-2FBNT7Y6.js → chunk-BIAALPXI.js} +45 -611
- package/dist/chunk-BIAALPXI.js.map +1 -0
- package/dist/{chunk-5JEVPE7Y.cjs → chunk-ZSNH4CWE.cjs} +42 -611
- package/dist/chunk-ZSNH4CWE.cjs.map +1 -0
- package/dist/connect/index.cjs +1 -2
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +1 -2
- package/dist/connect/index.js.map +1 -1
- package/dist/index.cjs +219 -231
- package/dist/index.js +2 -2
- package/package.json +4 -4
- package/dist/agents/tasks/TaskReviewActions.d.ts +0 -44
- package/dist/agents/tasks/TaskReviewDialog.d.ts +0 -22
- package/dist/chunk-2FBNT7Y6.js.map +0 -1
- package/dist/chunk-5JEVPE7Y.cjs.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { EmptyState } from './chunk-P6GHJSLR.js';
|
|
3
|
+
import { FoldSection, QuickActionDialogHeader, AddFilesFirst, ScopePicker, StartTiles } from './chunk-LFGJAZ5H.js';
|
|
3
4
|
import { CellHoverIcon } from './chunk-RFXJYIDV.js';
|
|
4
5
|
import { GridView, SelectionBar, SelectionBarAction } from './chunk-BUHKUKKB.js';
|
|
5
|
-
import { FoldSection, QuickActionDialogHeader, AddFilesFirst, ScopePicker, StartTiles } from './chunk-LFGJAZ5H.js';
|
|
6
6
|
import { DocumentPicker, TriStateFilterMenu, MultiSelect } from './chunk-CKB64Z4R.js';
|
|
7
7
|
import { ToneBadge } from './chunk-DPLRHEJZ.js';
|
|
8
8
|
import { FilterInput } from './chunk-YU2KUMGE.js';
|
|
@@ -16,9 +16,9 @@ import { ModalHeader } from './chunk-CPMNAJLF.js';
|
|
|
16
16
|
import { toMessageMentions, extractMentions, MentionMenu } from './chunk-AA3PT6KR.js';
|
|
17
17
|
import { testIdOr, prefixedTestId } from './chunk-7F6CBP3Z.js';
|
|
18
18
|
import { memo, forwardRef, useState, useMemo, useId, useEffect, useRef, useCallback, useLayoutEffect } from 'react';
|
|
19
|
-
import { cn, Label, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Textarea, Input, Switch, Button, Collapsible, CollapsibleTrigger, CollapsibleContent, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Tooltip, TooltipTrigger, TooltipContent, Badge, Slider, UserEntity, getEntityColorStyles, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, Popover, PopoverTrigger, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, CommandItem,
|
|
19
|
+
import { cn, Label, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Textarea, Input, Switch, Button, Collapsible, CollapsibleTrigger, CollapsibleContent, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Tooltip, TooltipTrigger, TooltipContent, Badge, Slider, UserEntity, getEntityColorStyles, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, VisibilityToggle, EntityPill, ThreadVisibilityIcon, DialogClose, Popover, PopoverTrigger, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, CommandItem, DropdownMenuSeparator, badgeVariants, Checkbox } from '@arbidocs/react/ui';
|
|
20
20
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
21
|
-
import { ChevronDown, ChevronRight, Plus, Trash2, Loader2, Play, MessageSquare, Eye, ClipboardList, Pencil, Copy, Bot, Sparkles, Wand2, X, Globe, Download, Lock, ListChecks, AlertTriangle, FileX, SkipForward, Check, FileText, CornerDownRight,
|
|
21
|
+
import { ChevronDown, ChevronRight, Plus, Trash2, Loader2, Play, MessageSquare, Eye, ClipboardList, Pencil, Copy, Bot, Sparkles, Wand2, X, Globe, Download, Lock, ListChecks, AlertTriangle, FileX, SkipForward, Check, FileText, CornerDownRight, AlertCircle, KeyRound, Workflow, ChevronsUpDown, ChevronsDownUp, ListTodo, CheckCheck, MoreHorizontal, CalendarClock, History, ChevronUp, Pause, Activity, Hourglass, MoreVertical, TriangleAlert, CheckSquare, Square, CheckCircle2, SquareArrowOutUpRight, ArrowLeft, LayoutGrid, List, CircleDashed, RotateCcw, ListPlus, Link2, Clock, Bell, MousePointerClick, UserRoundCog, MessageSquareReply, Zap } from 'lucide-react';
|
|
22
22
|
|
|
23
23
|
// src/agents/workflows/types.ts
|
|
24
24
|
var EMPTY_WORKFLOW_SCOPE = { folders: [], labels: [] };
|
|
@@ -3049,21 +3049,13 @@ var TRIGGER_LABELS = {
|
|
|
3049
3049
|
var STATUS_LABELS = {
|
|
3050
3050
|
todo: "To do",
|
|
3051
3051
|
generating: "Generating",
|
|
3052
|
-
ready_for_review: "Ready for review",
|
|
3053
3052
|
done: "Done",
|
|
3054
3053
|
chat: "Chat"
|
|
3055
3054
|
};
|
|
3056
|
-
var STATUS_ORDER = [
|
|
3057
|
-
"ready_for_review",
|
|
3058
|
-
"generating",
|
|
3059
|
-
"todo",
|
|
3060
|
-
"done",
|
|
3061
|
-
"chat"
|
|
3062
|
-
];
|
|
3055
|
+
var STATUS_ORDER = ["generating", "todo", "done", "chat"];
|
|
3063
3056
|
var STATUS_TONE = {
|
|
3064
3057
|
todo: "neutral",
|
|
3065
3058
|
generating: "ai",
|
|
3066
|
-
ready_for_review: "warning",
|
|
3067
3059
|
done: "success",
|
|
3068
3060
|
chat: "neutral"
|
|
3069
3061
|
};
|
|
@@ -3092,21 +3084,6 @@ function PersonPill({ person, size = "sm", testId }) {
|
|
|
3092
3084
|
}
|
|
3093
3085
|
) });
|
|
3094
3086
|
}
|
|
3095
|
-
function PersonAvatar({ person, size = "xs" }) {
|
|
3096
|
-
return /* @__PURE__ */ jsx(
|
|
3097
|
-
UserEntity,
|
|
3098
|
-
{
|
|
3099
|
-
variant: "icon",
|
|
3100
|
-
size,
|
|
3101
|
-
interactive: false,
|
|
3102
|
-
showTooltip: false,
|
|
3103
|
-
initials: initials(person.label),
|
|
3104
|
-
displayName: person.label,
|
|
3105
|
-
avatarStyle: person.id ? getEntityColorStyles(person.id) : void 0,
|
|
3106
|
-
isAgent: person.isAgent
|
|
3107
|
-
}
|
|
3108
|
-
);
|
|
3109
|
-
}
|
|
3110
3087
|
var DEFAULT_TASK_OUTPUTS_CELL_LABELS = {
|
|
3111
3088
|
none: "\u2014",
|
|
3112
3089
|
open: (count) => `${count} ${count === 1 ? "output" : "outputs"}`,
|
|
@@ -3230,192 +3207,6 @@ function TaskMoveDialog({
|
|
|
3230
3207
|
}
|
|
3231
3208
|
);
|
|
3232
3209
|
}
|
|
3233
|
-
var DEFAULT_TASK_REVIEW_ACTIONS_LABELS = {
|
|
3234
|
-
approve: "Approve",
|
|
3235
|
-
requestChanges: "Request changes",
|
|
3236
|
-
feedbackLabel: "What should change?",
|
|
3237
|
-
feedbackPlaceholder: "Tell the agent what to fix. It continues in the same thread.",
|
|
3238
|
-
send: "Send back",
|
|
3239
|
-
cancel: "Cancel",
|
|
3240
|
-
askApproval: "Ask someone to approve",
|
|
3241
|
-
askApprovalPerson: "Who should approve this?",
|
|
3242
|
-
askApprovalSearch: "Search people\u2026",
|
|
3243
|
-
askApprovalEmpty: "No one to ask.",
|
|
3244
|
-
askApprovalNote: "Add a note (optional)",
|
|
3245
|
-
askApprovalSend: "Request approval"
|
|
3246
|
-
};
|
|
3247
|
-
function TaskReviewActions({
|
|
3248
|
-
id,
|
|
3249
|
-
busy = false,
|
|
3250
|
-
canRequestChanges = true,
|
|
3251
|
-
onApprove,
|
|
3252
|
-
onRequestChanges,
|
|
3253
|
-
onRequestApproval,
|
|
3254
|
-
people = [],
|
|
3255
|
-
compact = false,
|
|
3256
|
-
quiet = false,
|
|
3257
|
-
canApprove = true,
|
|
3258
|
-
labels
|
|
3259
|
-
}) {
|
|
3260
|
-
const l = { ...DEFAULT_TASK_REVIEW_ACTIONS_LABELS, ...labels };
|
|
3261
|
-
const [open, setOpen] = useState(false);
|
|
3262
|
-
const [feedback, setFeedback] = useState("");
|
|
3263
|
-
const trimmed = feedback.trim();
|
|
3264
|
-
const [askOpen, setAskOpen] = useState(false);
|
|
3265
|
-
const [person, setPerson] = useState("");
|
|
3266
|
-
const [note, setNote] = useState("");
|
|
3267
|
-
const canAsk = !!onRequestApproval && people.length > 0;
|
|
3268
|
-
const ask = () => {
|
|
3269
|
-
if (!person || !onRequestApproval) return;
|
|
3270
|
-
onRequestApproval(person, note.trim());
|
|
3271
|
-
setPerson("");
|
|
3272
|
-
setNote("");
|
|
3273
|
-
setAskOpen(false);
|
|
3274
|
-
};
|
|
3275
|
-
const send = () => {
|
|
3276
|
-
if (!trimmed) return;
|
|
3277
|
-
onRequestChanges(trimmed);
|
|
3278
|
-
setFeedback("");
|
|
3279
|
-
setOpen(false);
|
|
3280
|
-
};
|
|
3281
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", "data-slot": "task-review-actions", children: [
|
|
3282
|
-
canApprove && /* @__PURE__ */ jsxs(
|
|
3283
|
-
Button,
|
|
3284
|
-
{
|
|
3285
|
-
size: "sm",
|
|
3286
|
-
variant: quiet ? "outline" : "default",
|
|
3287
|
-
className: "h-8 gap-1.5 pointer-coarse:h-11",
|
|
3288
|
-
disabled: busy,
|
|
3289
|
-
onClick: onApprove,
|
|
3290
|
-
"data-testid": testIdOr(void 0, { testId: `task-approve-${id}` }),
|
|
3291
|
-
children: [
|
|
3292
|
-
/* @__PURE__ */ jsx(Check, { className: "size-3.5", "aria-hidden": true }),
|
|
3293
|
-
l.approve
|
|
3294
|
-
]
|
|
3295
|
-
}
|
|
3296
|
-
),
|
|
3297
|
-
canRequestChanges && /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
|
|
3298
|
-
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
3299
|
-
Button,
|
|
3300
|
-
{
|
|
3301
|
-
size: "sm",
|
|
3302
|
-
variant: "outline",
|
|
3303
|
-
className: cn(
|
|
3304
|
-
"h-8 gap-1.5 pointer-coarse:h-11",
|
|
3305
|
-
compact && "w-8 px-0 pointer-coarse:w-11"
|
|
3306
|
-
),
|
|
3307
|
-
disabled: busy,
|
|
3308
|
-
"aria-label": compact ? l.requestChanges : void 0,
|
|
3309
|
-
title: compact ? l.requestChanges : void 0,
|
|
3310
|
-
"data-testid": `task-request-changes-${id}`,
|
|
3311
|
-
children: [
|
|
3312
|
-
/* @__PURE__ */ jsx(MessageSquareReply, { className: "size-3.5", "aria-hidden": true }),
|
|
3313
|
-
!compact && l.requestChanges
|
|
3314
|
-
]
|
|
3315
|
-
}
|
|
3316
|
-
) }),
|
|
3317
|
-
/* @__PURE__ */ jsxs(PopoverContent, { align: "end", className: "w-80 space-y-2", children: [
|
|
3318
|
-
/* @__PURE__ */ jsx("label", { htmlFor: `task-feedback-${id}`, className: "text-sm font-medium", children: l.feedbackLabel }),
|
|
3319
|
-
/* @__PURE__ */ jsx(
|
|
3320
|
-
Textarea,
|
|
3321
|
-
{
|
|
3322
|
-
id: `task-feedback-${id}`,
|
|
3323
|
-
value: feedback,
|
|
3324
|
-
rows: 3,
|
|
3325
|
-
placeholder: l.feedbackPlaceholder,
|
|
3326
|
-
onChange: (e) => setFeedback(e.target.value),
|
|
3327
|
-
"data-testid": `task-feedback-${id}`
|
|
3328
|
-
}
|
|
3329
|
-
),
|
|
3330
|
-
/* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
|
|
3331
|
-
/* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: () => setOpen(false), children: l.cancel }),
|
|
3332
|
-
/* @__PURE__ */ jsx(
|
|
3333
|
-
Button,
|
|
3334
|
-
{
|
|
3335
|
-
size: "sm",
|
|
3336
|
-
disabled: !trimmed || busy,
|
|
3337
|
-
onClick: send,
|
|
3338
|
-
"data-testid": `task-send-changes-${id}`,
|
|
3339
|
-
children: l.send
|
|
3340
|
-
}
|
|
3341
|
-
)
|
|
3342
|
-
] })
|
|
3343
|
-
] })
|
|
3344
|
-
] }),
|
|
3345
|
-
canAsk && /* @__PURE__ */ jsxs(Popover, { open: askOpen, onOpenChange: setAskOpen, children: [
|
|
3346
|
-
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
3347
|
-
Button,
|
|
3348
|
-
{
|
|
3349
|
-
size: "sm",
|
|
3350
|
-
variant: "outline",
|
|
3351
|
-
className: cn(
|
|
3352
|
-
"h-8 gap-1.5 pointer-coarse:h-11",
|
|
3353
|
-
compact && "w-8 px-0 pointer-coarse:w-11"
|
|
3354
|
-
),
|
|
3355
|
-
disabled: busy,
|
|
3356
|
-
"aria-label": compact ? l.askApproval : void 0,
|
|
3357
|
-
title: compact ? l.askApproval : void 0,
|
|
3358
|
-
"data-testid": `task-ask-approval-${id}`,
|
|
3359
|
-
children: [
|
|
3360
|
-
/* @__PURE__ */ jsx(UserCheck, { className: "size-3.5", "aria-hidden": true }),
|
|
3361
|
-
!compact && l.askApproval
|
|
3362
|
-
]
|
|
3363
|
-
}
|
|
3364
|
-
) }),
|
|
3365
|
-
/* @__PURE__ */ jsxs(PopoverContent, { align: "end", className: "w-72 space-y-2 p-2", children: [
|
|
3366
|
-
/* @__PURE__ */ jsx("p", { className: "px-1 text-sm font-medium", children: l.askApprovalPerson }),
|
|
3367
|
-
/* @__PURE__ */ jsxs(Command, { className: "rounded-md border", children: [
|
|
3368
|
-
/* @__PURE__ */ jsx(
|
|
3369
|
-
CommandInput,
|
|
3370
|
-
{
|
|
3371
|
-
placeholder: l.askApprovalSearch,
|
|
3372
|
-
"data-testid": `task-ask-approval-search-${id}`
|
|
3373
|
-
}
|
|
3374
|
-
),
|
|
3375
|
-
/* @__PURE__ */ jsxs(CommandList, { className: "max-h-40", children: [
|
|
3376
|
-
/* @__PURE__ */ jsx(CommandEmpty, { children: l.askApprovalEmpty }),
|
|
3377
|
-
people.map((p) => /* @__PURE__ */ jsxs(
|
|
3378
|
-
CommandItem,
|
|
3379
|
-
{
|
|
3380
|
-
value: p.label,
|
|
3381
|
-
onSelect: () => setPerson(p.id),
|
|
3382
|
-
"data-testid": `task-ask-approval-person-${id}-${p.id}`,
|
|
3383
|
-
children: [
|
|
3384
|
-
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: p.label }),
|
|
3385
|
-
p.id === person && /* @__PURE__ */ jsx(Check, { className: "ml-2 size-4 shrink-0", "aria-hidden": true })
|
|
3386
|
-
]
|
|
3387
|
-
},
|
|
3388
|
-
p.id
|
|
3389
|
-
))
|
|
3390
|
-
] })
|
|
3391
|
-
] }),
|
|
3392
|
-
/* @__PURE__ */ jsx(
|
|
3393
|
-
Textarea,
|
|
3394
|
-
{
|
|
3395
|
-
value: note,
|
|
3396
|
-
rows: 2,
|
|
3397
|
-
placeholder: l.askApprovalNote,
|
|
3398
|
-
onChange: (e) => setNote(e.target.value),
|
|
3399
|
-
"data-testid": `task-ask-approval-note-${id}`
|
|
3400
|
-
}
|
|
3401
|
-
),
|
|
3402
|
-
/* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
|
|
3403
|
-
/* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: () => setAskOpen(false), children: l.cancel }),
|
|
3404
|
-
/* @__PURE__ */ jsx(
|
|
3405
|
-
Button,
|
|
3406
|
-
{
|
|
3407
|
-
size: "sm",
|
|
3408
|
-
disabled: !person || busy,
|
|
3409
|
-
onClick: ask,
|
|
3410
|
-
"data-testid": `task-send-approval-${id}`,
|
|
3411
|
-
children: l.askApprovalSend
|
|
3412
|
-
}
|
|
3413
|
-
)
|
|
3414
|
-
] })
|
|
3415
|
-
] })
|
|
3416
|
-
] })
|
|
3417
|
-
] });
|
|
3418
|
-
}
|
|
3419
3210
|
function TaskRowMenu({
|
|
3420
3211
|
task,
|
|
3421
3212
|
status,
|
|
@@ -3434,11 +3225,9 @@ function TaskRowMenu({
|
|
|
3434
3225
|
onEdit,
|
|
3435
3226
|
onDelete,
|
|
3436
3227
|
onMoveTo,
|
|
3437
|
-
onChangeOwner,
|
|
3438
3228
|
onOpenActivity,
|
|
3439
3229
|
onToggleShared,
|
|
3440
|
-
onGrantAccess
|
|
3441
|
-
reviewActions
|
|
3230
|
+
onGrantAccess
|
|
3442
3231
|
}) {
|
|
3443
3232
|
const [open, setOpen] = useState(false);
|
|
3444
3233
|
const id = task.external_id;
|
|
@@ -3458,7 +3247,6 @@ function TaskRowMenu({
|
|
|
3458
3247
|
) }),
|
|
3459
3248
|
/* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", children: [
|
|
3460
3249
|
onToggleSelected && /* @__PURE__ */ jsx(DropdownMenuItem, { onSelect: onToggleSelected, "data-testid": `task-select-${id}`, children: selected ? "Deselect task" : "Select task" }),
|
|
3461
|
-
reviewActions && /* @__PURE__ */ jsx("div", { className: "px-2 py-1.5", children: typeof reviewActions === "function" ? reviewActions(() => setOpen(false)) : reviewActions }),
|
|
3462
3250
|
isOwner && onGrantAccess && task.pending_auth_request_id && /* @__PURE__ */ jsxs(
|
|
3463
3251
|
DropdownMenuItem,
|
|
3464
3252
|
{
|
|
@@ -3503,10 +3291,6 @@ function TaskRowMenu({
|
|
|
3503
3291
|
/* @__PURE__ */ jsx(ListPlus, { className: "mr-2 size-4", "aria-hidden": true }),
|
|
3504
3292
|
labels.addSubtask
|
|
3505
3293
|
] }),
|
|
3506
|
-
canEdit && !isChat && onChangeOwner && /* @__PURE__ */ jsxs(DropdownMenuItem, { onSelect: onChangeOwner, "data-testid": `task-change-owner-${id}`, children: [
|
|
3507
|
-
/* @__PURE__ */ jsx(UserRoundCog, { className: "mr-2 size-4", "aria-hidden": true }),
|
|
3508
|
-
labels.changeOwner
|
|
3509
|
-
] }),
|
|
3510
3294
|
canEdit && onMoveTo && /* @__PURE__ */ jsxs(DropdownMenuItem, { onSelect: onMoveTo, "data-testid": `task-move-${id}`, children: [
|
|
3511
3295
|
/* @__PURE__ */ jsx(CornerDownRight, { className: "mr-2 size-4", "aria-hidden": true }),
|
|
3512
3296
|
labels.moveTo
|
|
@@ -3545,8 +3329,6 @@ function StatusIcon({ status }) {
|
|
|
3545
3329
|
switch (status) {
|
|
3546
3330
|
case "generating":
|
|
3547
3331
|
return /* @__PURE__ */ jsx(Loader2, { className: `${ICON} animate-spin`, "aria-hidden": true });
|
|
3548
|
-
case "ready_for_review":
|
|
3549
|
-
return /* @__PURE__ */ jsx(Eye, { className: ICON, "aria-hidden": true });
|
|
3550
3332
|
case "done":
|
|
3551
3333
|
return /* @__PURE__ */ jsx(Check, { className: ICON, "aria-hidden": true });
|
|
3552
3334
|
case "chat":
|
|
@@ -3621,7 +3403,7 @@ function TaskStatusPill({
|
|
|
3621
3403
|
}
|
|
3622
3404
|
|
|
3623
3405
|
// src/agents/tasks/taskColumns.tsx
|
|
3624
|
-
var ACTIONS_WIDTH =
|
|
3406
|
+
var ACTIONS_WIDTH = 160;
|
|
3625
3407
|
var NARROW_ACTIONS_WIDTH = 56;
|
|
3626
3408
|
var TASK_COLUMN_ORDER = [
|
|
3627
3409
|
"name",
|
|
@@ -3710,7 +3492,7 @@ function createTaskColumns(o) {
|
|
|
3710
3492
|
colId: "status",
|
|
3711
3493
|
...sortable,
|
|
3712
3494
|
headerName: l.colStatus,
|
|
3713
|
-
// Wide enough for "
|
|
3495
|
+
// Wide enough for "Generating" and "Waiting for access" in full, with the elapsed time.
|
|
3714
3496
|
flex: 1.3,
|
|
3715
3497
|
minWidth: 170,
|
|
3716
3498
|
valueGetter: (p) => p.data?.task.status ?? "",
|
|
@@ -3740,7 +3522,7 @@ function applyColumnWidthRules(api, gridWidth, rules) {
|
|
|
3740
3522
|
|
|
3741
3523
|
// src/agents/tasks/taskRows.ts
|
|
3742
3524
|
var MAX_TASK_DEPTH = 5;
|
|
3743
|
-
var ownerExtId = (task) => task.
|
|
3525
|
+
var ownerExtId = (task) => task.owner_ext_id || task.created_by_ext_id || null;
|
|
3744
3526
|
var isPlainTodo = (task) => !task.agent_ext_id && !task.has_agent_action && !task.skill_ref;
|
|
3745
3527
|
function indexTasks(tasks) {
|
|
3746
3528
|
const byId = new Map(tasks.map((t) => [t.external_id, t]));
|
|
@@ -3880,18 +3662,15 @@ function buildTaskRows(tasks, filter, collapsed, compare, options = {}) {
|
|
|
3880
3662
|
var DEFAULT_TASK_LIST_LABELS = {
|
|
3881
3663
|
filterAll: "All",
|
|
3882
3664
|
emptyTitle: "No tasks yet",
|
|
3883
|
-
emptyMessage: "Use New to add one: just type what you need, or
|
|
3665
|
+
emptyMessage: "Use New to add one: just type what you need, or add a due date. Automations that create tasks live on the Workflows page. You always decide when a task is done.",
|
|
3884
3666
|
noMatches: "No tasks match.",
|
|
3885
3667
|
due: (when) => when,
|
|
3886
3668
|
overdue: (when) => `${when} \xB7 overdue`,
|
|
3887
3669
|
agent: "Agent",
|
|
3888
3670
|
colTask: "Task",
|
|
3889
3671
|
colOwner: "Owner",
|
|
3890
|
-
ownerHint: "Who
|
|
3672
|
+
ownerHint: "Who created the task. They are notified when its run finishes.",
|
|
3891
3673
|
colOutputs: "Outputs",
|
|
3892
|
-
changeOwner: "Change owner\u2026",
|
|
3893
|
-
changeOwnerTitle: (name) => `Who has the next step on \u201C${name}\u201D?`,
|
|
3894
|
-
changeOwnerMe: "Me",
|
|
3895
3674
|
preparedBy: (agent) => `Prepared by ${agent}`,
|
|
3896
3675
|
colDue: "Due",
|
|
3897
3676
|
colStatus: "Status",
|
|
@@ -3911,9 +3690,8 @@ var DEFAULT_TASK_LIST_LABELS = {
|
|
|
3911
3690
|
markDone: "Mark done",
|
|
3912
3691
|
reopen: "Reopen",
|
|
3913
3692
|
markDoneMany: "Mark done",
|
|
3914
|
-
markDoneManyHint: "Marks
|
|
3693
|
+
markDoneManyHint: "Marks the selected tasks done.",
|
|
3915
3694
|
deleteMany: "Delete",
|
|
3916
|
-
approve: "Approve",
|
|
3917
3695
|
moveTo: "Move to\u2026",
|
|
3918
3696
|
untitled: "Untitled task",
|
|
3919
3697
|
fromWorkflow: (name) => `From \u201C${name}\u201D`,
|
|
@@ -3935,7 +3713,7 @@ var DEFAULT_TASK_LIST_LABELS = {
|
|
|
3935
3713
|
allowAccess: "Allow access",
|
|
3936
3714
|
moreActions: "More actions",
|
|
3937
3715
|
activity: "Activity",
|
|
3938
|
-
statusHint: (status, ago
|
|
3716
|
+
statusHint: (status, ago) => `${status} \xB7 ${ago}`,
|
|
3939
3717
|
status: {}
|
|
3940
3718
|
};
|
|
3941
3719
|
var ROW_HEIGHT = 56;
|
|
@@ -3951,16 +3729,12 @@ var WIDTH_RULES = [
|
|
|
3951
3729
|
{ colId: "status", minWidth: NARROW_GRID }
|
|
3952
3730
|
];
|
|
3953
3731
|
function statusHint(task, ctx) {
|
|
3954
|
-
const { props: p, l
|
|
3732
|
+
const { props: p, l } = ctx;
|
|
3955
3733
|
if (!p.formatRelative || !task.updated_at) return void 0;
|
|
3956
3734
|
const key = asTaskStatus(task.status);
|
|
3957
3735
|
const pill = { ...DEFAULT_TASK_STATUS_PILL_LABELS, ...p.statusPillLabels };
|
|
3958
3736
|
const label = task.pending_auth_request_id ? pill.waitingForAccess : STATUS_LABELS[key];
|
|
3959
|
-
return l.statusHint(
|
|
3960
|
-
label,
|
|
3961
|
-
p.formatRelative(task.updated_at),
|
|
3962
|
-
key === "ready_for_review" ? owner(task).label : void 0
|
|
3963
|
-
);
|
|
3737
|
+
return l.statusHint(label, p.formatRelative(task.updated_at));
|
|
3964
3738
|
}
|
|
3965
3739
|
function TaskTable(props) {
|
|
3966
3740
|
const { tasks: allTasks, isLoading, busyId, header, testId } = props;
|
|
@@ -3975,7 +3749,6 @@ function TaskTable(props) {
|
|
|
3975
3749
|
const [selectedIds, setSelectedIds] = useState(/* @__PURE__ */ new Set());
|
|
3976
3750
|
const [sort, setSort] = useState(null);
|
|
3977
3751
|
const [moving, setMoving] = useState(null);
|
|
3978
|
-
const [handingOff, setHandingOff] = useState(null);
|
|
3979
3752
|
const tasks = allTasks;
|
|
3980
3753
|
const apiRef = useRef(null);
|
|
3981
3754
|
const [narrow, setNarrow] = useState(false);
|
|
@@ -3988,7 +3761,7 @@ function TaskTable(props) {
|
|
|
3988
3761
|
const nameOf = (task) => task.title?.trim() || task.workflow_ext_id && props.workflowNames?.[task.workflow_ext_id] || l.untitled;
|
|
3989
3762
|
const owner = (task) => {
|
|
3990
3763
|
const id = ownerExtId(task);
|
|
3991
|
-
const mine = task.
|
|
3764
|
+
const mine = task.is_owner !== false;
|
|
3992
3765
|
return {
|
|
3993
3766
|
id,
|
|
3994
3767
|
label: mine ? l.me : (id && peopleNames.get(id)) ?? l.someone,
|
|
@@ -4295,51 +4068,7 @@ function TaskTable(props) {
|
|
|
4295
4068
|
const isOwner = task.is_owner !== false;
|
|
4296
4069
|
const canEdit = isOwner || Boolean(p.canEditShared);
|
|
4297
4070
|
const canAdmin = isOwner || Boolean(p.isWorkspaceOwner);
|
|
4298
|
-
const canAskReview = status !== "done" && status !== "chat" && canEdit && Boolean(p.onRequestApproval && p.people?.length);
|
|
4299
|
-
const reviewActions = (closeMenu) => status === "ready_for_review" ? /* @__PURE__ */ jsx(
|
|
4300
|
-
TaskReviewActions,
|
|
4301
|
-
{
|
|
4302
|
-
id,
|
|
4303
|
-
busy,
|
|
4304
|
-
quiet: true,
|
|
4305
|
-
canApprove: task.signoff_ext_id ? Boolean(task.can_signoff) : isOwner,
|
|
4306
|
-
canRequestChanges: Boolean(task.agent_ext_id || task.has_agent_action || task.skill_ref) && canEdit,
|
|
4307
|
-
onApprove: () => {
|
|
4308
|
-
p.onApprove(task);
|
|
4309
|
-
closeMenu?.();
|
|
4310
|
-
},
|
|
4311
|
-
onRequestChanges: (feedback) => {
|
|
4312
|
-
p.onRequestChanges(task, feedback);
|
|
4313
|
-
closeMenu?.();
|
|
4314
|
-
},
|
|
4315
|
-
onRequestApproval: p.onRequestApproval ? (userId, note) => {
|
|
4316
|
-
p.onRequestApproval?.(task, userId, note);
|
|
4317
|
-
closeMenu?.();
|
|
4318
|
-
} : void 0,
|
|
4319
|
-
people: p.people,
|
|
4320
|
-
compact: true,
|
|
4321
|
-
labels: p.reviewLabels
|
|
4322
|
-
}
|
|
4323
|
-
) : canAskReview ? /* @__PURE__ */ jsx(
|
|
4324
|
-
TaskReviewActions,
|
|
4325
|
-
{
|
|
4326
|
-
id,
|
|
4327
|
-
busy,
|
|
4328
|
-
canApprove: false,
|
|
4329
|
-
canRequestChanges: false,
|
|
4330
|
-
onApprove: () => void 0,
|
|
4331
|
-
onRequestChanges: () => void 0,
|
|
4332
|
-
onRequestApproval: (userId, note) => {
|
|
4333
|
-
p.onRequestApproval?.(task, userId, note);
|
|
4334
|
-
closeMenu?.();
|
|
4335
|
-
},
|
|
4336
|
-
people: p.people,
|
|
4337
|
-
compact: true,
|
|
4338
|
-
labels: p.reviewLabels
|
|
4339
|
-
}
|
|
4340
|
-
) : null;
|
|
4341
4071
|
return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-2", children: [
|
|
4342
|
-
!latest.current.narrow && reviewActions(),
|
|
4343
4072
|
!latest.current.narrow && isOwner && task.pending_auth_request_id && p.onGrantAccess && /* @__PURE__ */ jsxs(
|
|
4344
4073
|
Button,
|
|
4345
4074
|
{
|
|
@@ -4356,7 +4085,6 @@ function TaskTable(props) {
|
|
|
4356
4085
|
/* @__PURE__ */ jsx(
|
|
4357
4086
|
TaskRowMenu,
|
|
4358
4087
|
{
|
|
4359
|
-
reviewActions: latest.current.narrow && (status === "ready_for_review" || canAskReview) ? reviewActions : void 0,
|
|
4360
4088
|
task,
|
|
4361
4089
|
status,
|
|
4362
4090
|
busy,
|
|
@@ -4368,7 +4096,6 @@ function TaskTable(props) {
|
|
|
4368
4096
|
onReopen: () => p.onReopen(task),
|
|
4369
4097
|
onAddSubtask: p.onAddSubtask ? () => p.onAddSubtask?.(task) : void 0,
|
|
4370
4098
|
onMoveTo: p.onMove ? () => setMoving(task) : void 0,
|
|
4371
|
-
onChangeOwner: p.onChangeOwner && p.people?.length ? () => setHandingOff(task) : void 0,
|
|
4372
4099
|
onEdit: () => p.onEdit(task),
|
|
4373
4100
|
onDelete: () => p.onDelete(task),
|
|
4374
4101
|
onOpenActivity: p.onOpenActivity ? () => p.onOpenActivity?.(task) : void 0,
|
|
@@ -4607,24 +4334,6 @@ function TaskTable(props) {
|
|
|
4607
4334
|
] })
|
|
4608
4335
|
}
|
|
4609
4336
|
),
|
|
4610
|
-
handingOff && props.onChangeOwner && /* @__PURE__ */ jsx(
|
|
4611
|
-
TaskMoveDialog,
|
|
4612
|
-
{
|
|
4613
|
-
open: true,
|
|
4614
|
-
onOpenChange: (open) => !open && setHandingOff(null),
|
|
4615
|
-
options: (props.people ?? []).map((p) => ({ id: p.id, label: p.label })),
|
|
4616
|
-
currentParentId: handingOff.signoff_ext_id,
|
|
4617
|
-
onPick: (userId) => props.onChangeOwner?.(handingOff, userId),
|
|
4618
|
-
labels: {
|
|
4619
|
-
title: l.changeOwnerTitle(nameOf(handingOff)),
|
|
4620
|
-
none: l.changeOwnerMe,
|
|
4621
|
-
search: l.moveToSearch,
|
|
4622
|
-
empty: l.moveToEmpty,
|
|
4623
|
-
cancel: l.moveToCancel
|
|
4624
|
-
},
|
|
4625
|
-
testId: "task-owner"
|
|
4626
|
-
}
|
|
4627
|
-
),
|
|
4628
4337
|
moving && props.onMove && /* @__PURE__ */ jsx(
|
|
4629
4338
|
TaskMoveDialog,
|
|
4630
4339
|
{
|
|
@@ -4656,7 +4365,6 @@ function TaskInbox(p) {
|
|
|
4656
4365
|
const [selected, setSelected] = useState(/* @__PURE__ */ new Set());
|
|
4657
4366
|
const [collapsed, setCollapsed] = useState(/* @__PURE__ */ new Set());
|
|
4658
4367
|
const [moving, setMoving] = useState(null);
|
|
4659
|
-
const [handingOff, setHandingOff] = useState(null);
|
|
4660
4368
|
const l = { ...DEFAULT_TASK_LIST_LABELS, ...p.labels };
|
|
4661
4369
|
const nameOf = (t) => t.title?.trim() || t.workflow_ext_id && p.workflowNames?.[t.workflow_ext_id] || l.untitled;
|
|
4662
4370
|
const all = p.tasks.filter((t) => t.status != null);
|
|
@@ -4705,7 +4413,7 @@ function TaskInbox(p) {
|
|
|
4705
4413
|
});
|
|
4706
4414
|
const workflowIds = new Set(workflows.map((w) => w.external_id));
|
|
4707
4415
|
const order = (a, b) => {
|
|
4708
|
-
const weight = (t) => t.pending_auth_request_id || t.last_error ? 0 : t.status === "
|
|
4416
|
+
const weight = (t) => t.pending_auth_request_id || t.last_error ? 0 : t.status === "todo" ? 1 : t.status === "generating" ? 2 : 3;
|
|
4709
4417
|
return weight(a) - weight(b) || (b.updated_at ?? "").localeCompare(a.updated_at ?? "");
|
|
4710
4418
|
};
|
|
4711
4419
|
const renderTask = (task, depth = 0) => {
|
|
@@ -4756,7 +4464,7 @@ function TaskInbox(p) {
|
|
|
4756
4464
|
}
|
|
4757
4465
|
),
|
|
4758
4466
|
/* @__PURE__ */ jsxs("div", { className: "mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground", children: [
|
|
4759
|
-
status !== "todo" &&
|
|
4467
|
+
status !== "todo" && /* @__PURE__ */ jsx(
|
|
4760
4468
|
TaskStatusPill,
|
|
4761
4469
|
{
|
|
4762
4470
|
id,
|
|
@@ -4805,21 +4513,6 @@ function TaskInbox(p) {
|
|
|
4805
4513
|
children: "Allow access"
|
|
4806
4514
|
}
|
|
4807
4515
|
),
|
|
4808
|
-
p.onRequestApproval && status !== "done" && canEdit(task) && /* @__PURE__ */ jsx(
|
|
4809
|
-
TaskReviewActions,
|
|
4810
|
-
{
|
|
4811
|
-
id,
|
|
4812
|
-
busy,
|
|
4813
|
-
compact: true,
|
|
4814
|
-
canApprove: false,
|
|
4815
|
-
canRequestChanges: false,
|
|
4816
|
-
onApprove: () => void 0,
|
|
4817
|
-
onRequestChanges: () => void 0,
|
|
4818
|
-
onRequestApproval: (userId, note) => p.onRequestApproval?.(task, userId, note),
|
|
4819
|
-
people: p.people,
|
|
4820
|
-
labels: p.reviewLabels
|
|
4821
|
-
}
|
|
4822
|
-
),
|
|
4823
4516
|
/* @__PURE__ */ jsx(
|
|
4824
4517
|
TaskRowMenu,
|
|
4825
4518
|
{
|
|
@@ -4840,7 +4533,6 @@ function TaskInbox(p) {
|
|
|
4840
4533
|
onEdit: () => p.onEdit(task),
|
|
4841
4534
|
onAddSubtask: p.onAddSubtask ? () => p.onAddSubtask?.(task) : void 0,
|
|
4842
4535
|
onMoveTo: p.onMove ? () => setMoving(task) : void 0,
|
|
4843
|
-
onChangeOwner: status !== "ready_for_review" && p.onChangeOwner && p.people?.length ? () => setHandingOff(task) : void 0,
|
|
4844
4536
|
onOpenActivity: p.onOpenActivity ? () => p.onOpenActivity?.(task) : void 0,
|
|
4845
4537
|
onToggleShared: p.onToggleShared ? () => p.onToggleShared?.(task, !task.is_shared) : void 0
|
|
4846
4538
|
}
|
|
@@ -4905,20 +4597,13 @@ function TaskInbox(p) {
|
|
|
4905
4597
|
label: "Generating",
|
|
4906
4598
|
count: all.filter((t) => t.status === "generating").length
|
|
4907
4599
|
},
|
|
4908
|
-
{
|
|
4909
|
-
id: "ready_for_review",
|
|
4910
|
-
label: "Ready for review",
|
|
4911
|
-
count: all.filter((t) => t.status === "ready_for_review").length
|
|
4912
|
-
},
|
|
4913
4600
|
{
|
|
4914
4601
|
id: "done",
|
|
4915
4602
|
label: "Completed",
|
|
4916
4603
|
count: all.filter((t) => t.status === "done").length
|
|
4917
4604
|
}
|
|
4918
4605
|
],
|
|
4919
|
-
groups: [
|
|
4920
|
-
{ label: "Status", options: ["todo", "generating", "ready_for_review", "done"] }
|
|
4921
|
-
],
|
|
4606
|
+
groups: [{ label: "Status", options: ["todo", "generating", "done"] }],
|
|
4922
4607
|
triggerClassName: "flex h-5 items-center gap-0.5 rounded px-1 text-muted-foreground hover:text-foreground pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center",
|
|
4923
4608
|
renderChevron: true,
|
|
4924
4609
|
disableHoverOpen: true
|
|
@@ -4943,7 +4628,7 @@ function TaskInbox(p) {
|
|
|
4943
4628
|
EmptyState,
|
|
4944
4629
|
{
|
|
4945
4630
|
title: q ? "No matches" : all.length ? "You\u2019re all caught up" : "No work here yet",
|
|
4946
|
-
description: "Create a task from a prompt or a saved workflow. Keep its drafts
|
|
4631
|
+
description: "Create a task from a prompt or a saved workflow. Keep its drafts and outputs together."
|
|
4947
4632
|
}
|
|
4948
4633
|
) : /* @__PURE__ */ jsxs("ul", { children: [
|
|
4949
4634
|
workflows.map((w) => {
|
|
@@ -5057,24 +4742,6 @@ function TaskInbox(p) {
|
|
|
5057
4742
|
cancel: l.moveToCancel
|
|
5058
4743
|
}
|
|
5059
4744
|
}
|
|
5060
|
-
),
|
|
5061
|
-
handingOff && p.onChangeOwner && /* @__PURE__ */ jsx(
|
|
5062
|
-
TaskMoveDialog,
|
|
5063
|
-
{
|
|
5064
|
-
open: true,
|
|
5065
|
-
onOpenChange: (open) => !open && setHandingOff(null),
|
|
5066
|
-
options: p.people ?? [],
|
|
5067
|
-
currentParentId: handingOff.signoff_ext_id,
|
|
5068
|
-
onPick: (id) => p.onChangeOwner?.(handingOff, id),
|
|
5069
|
-
labels: {
|
|
5070
|
-
title: l.changeOwnerTitle(nameOf(handingOff)),
|
|
5071
|
-
none: l.changeOwnerMe,
|
|
5072
|
-
search: l.moveToSearch,
|
|
5073
|
-
empty: l.moveToEmpty,
|
|
5074
|
-
cancel: l.moveToCancel
|
|
5075
|
-
},
|
|
5076
|
-
testId: "task-owner"
|
|
5077
|
-
}
|
|
5078
4745
|
)
|
|
5079
4746
|
] });
|
|
5080
4747
|
}
|
|
@@ -5336,13 +5003,11 @@ function ConversationListView(p) {
|
|
|
5336
5003
|
] });
|
|
5337
5004
|
}
|
|
5338
5005
|
var NO_PEOPLE = [];
|
|
5339
|
-
var NO_ASSIGNEES = [];
|
|
5340
5006
|
function TaskStartDialog({
|
|
5341
5007
|
open,
|
|
5342
5008
|
onOpenChange,
|
|
5343
5009
|
workflows,
|
|
5344
5010
|
people = NO_PEOPLE,
|
|
5345
|
-
assignees = NO_ASSIGNEES,
|
|
5346
5011
|
isPending,
|
|
5347
5012
|
error,
|
|
5348
5013
|
startLabel,
|
|
@@ -5353,14 +5018,12 @@ function TaskStartDialog({
|
|
|
5353
5018
|
const [choice, setChoice] = useState("prompt");
|
|
5354
5019
|
const [shared, setShared] = useState(false);
|
|
5355
5020
|
const [sourceOpen, setSourceOpen] = useState(false);
|
|
5356
|
-
const [assignee, setAssignee] = useState("");
|
|
5357
5021
|
useEffect(() => {
|
|
5358
5022
|
if (open) return;
|
|
5359
5023
|
setPrompt("");
|
|
5360
5024
|
setChoice("prompt");
|
|
5361
5025
|
setShared(false);
|
|
5362
5026
|
setSourceOpen(false);
|
|
5363
|
-
setAssignee("");
|
|
5364
5027
|
}, [open]);
|
|
5365
5028
|
const textareaRef = useRef(null);
|
|
5366
5029
|
const mention = useMentionAutocomplete({
|
|
@@ -5372,16 +5035,13 @@ function TaskStartDialog({
|
|
|
5372
5035
|
const todo = choice === "todo";
|
|
5373
5036
|
const promptHint = todo ? "What needs doing?" : "What should ARBI do?";
|
|
5374
5037
|
const workflowId = choice === "prompt" || todo ? null : choice;
|
|
5375
|
-
const assigneeId = todo ? assignee : "";
|
|
5376
|
-
const sharedNow = shared || assigneeId !== "";
|
|
5377
5038
|
const valid = workflowId ? workflows.some((w) => w.external_id === workflowId) : Boolean(prompt.trim());
|
|
5378
5039
|
const values = {
|
|
5379
5040
|
prompt: prompt.trim(),
|
|
5380
5041
|
workflowId,
|
|
5381
5042
|
todo,
|
|
5382
|
-
shared
|
|
5383
|
-
mentions: toMessageMentions(extractMentions(prompt, people))
|
|
5384
|
-
...assigneeId ? { assigneeId } : {}
|
|
5043
|
+
shared,
|
|
5044
|
+
mentions: toMessageMentions(extractMentions(prompt, people))
|
|
5385
5045
|
};
|
|
5386
5046
|
return /* @__PURE__ */ jsx(Dialog, { modal: false, open, onOpenChange: (next) => !isPending && onOpenChange(next), children: /* @__PURE__ */ jsxs(
|
|
5387
5047
|
DialogContent,
|
|
@@ -5463,39 +5123,12 @@ function TaskStartDialog({
|
|
|
5463
5123
|
),
|
|
5464
5124
|
/* @__PURE__ */ jsxs(SelectContent, { children: [
|
|
5465
5125
|
/* @__PURE__ */ jsx(SelectItem, { value: "prompt", children: "With ARBI" }),
|
|
5466
|
-
/* @__PURE__ */ jsx(SelectItem, { value: "todo", children: "
|
|
5126
|
+
/* @__PURE__ */ jsx(SelectItem, { value: "todo", children: "To-do" }),
|
|
5467
5127
|
workflows.map((workflow) => /* @__PURE__ */ jsx(SelectItem, { value: workflow.external_id, children: workflow.name }, workflow.external_id))
|
|
5468
5128
|
] })
|
|
5469
5129
|
]
|
|
5470
5130
|
}
|
|
5471
5131
|
),
|
|
5472
|
-
todo && /* @__PURE__ */ jsxs("div", { className: "mt-2 flex items-center gap-2 text-xs text-muted-foreground", children: [
|
|
5473
|
-
/* @__PURE__ */ jsx("span", { children: "Assigned to" }),
|
|
5474
|
-
/* @__PURE__ */ jsxs(
|
|
5475
|
-
Select,
|
|
5476
|
-
{
|
|
5477
|
-
value: assigneeId || "me",
|
|
5478
|
-
onValueChange: (next) => setAssignee(next === "me" ? "" : next),
|
|
5479
|
-
disabled: isPending,
|
|
5480
|
-
children: [
|
|
5481
|
-
/* @__PURE__ */ jsx(
|
|
5482
|
-
SelectTrigger,
|
|
5483
|
-
{
|
|
5484
|
-
id: "task-start-assignee",
|
|
5485
|
-
"aria-label": "Assigned to",
|
|
5486
|
-
className: "h-7 w-auto max-w-full border-0 bg-transparent px-1 text-xs font-normal text-foreground shadow-none hover:bg-muted",
|
|
5487
|
-
children: /* @__PURE__ */ jsx(SelectValue, {})
|
|
5488
|
-
}
|
|
5489
|
-
),
|
|
5490
|
-
/* @__PURE__ */ jsxs(SelectContent, { children: [
|
|
5491
|
-
/* @__PURE__ */ jsx(SelectItem, { value: "me", children: "Me" }),
|
|
5492
|
-
assignees.map((person) => /* @__PURE__ */ jsx(SelectItem, { value: person.id, children: person.label }, person.id))
|
|
5493
|
-
] })
|
|
5494
|
-
]
|
|
5495
|
-
}
|
|
5496
|
-
)
|
|
5497
|
-
] }),
|
|
5498
|
-
todo && assignees.length === 0 && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: "Invite a workspace collaborator to assign this to them." }),
|
|
5499
5132
|
error && /* @__PURE__ */ jsx("p", { role: "alert", className: "mt-3 text-sm text-destructive", children: error })
|
|
5500
5133
|
] }),
|
|
5501
5134
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2 border-t px-3 py-2", children: [
|
|
@@ -5514,10 +5147,10 @@ function TaskStartDialog({
|
|
|
5514
5147
|
/* @__PURE__ */ jsx(
|
|
5515
5148
|
VisibilityToggle,
|
|
5516
5149
|
{
|
|
5517
|
-
items: { shared
|
|
5150
|
+
items: { shared },
|
|
5518
5151
|
onToggle: setShared,
|
|
5519
|
-
label:
|
|
5520
|
-
disabled: isPending
|
|
5152
|
+
label: shared ? "Workspace" : "Only Me",
|
|
5153
|
+
disabled: isPending,
|
|
5521
5154
|
"data-testid": "task-start-visibility"
|
|
5522
5155
|
}
|
|
5523
5156
|
),
|
|
@@ -5533,7 +5166,7 @@ function TaskStartDialog({
|
|
|
5533
5166
|
} catch {
|
|
5534
5167
|
}
|
|
5535
5168
|
},
|
|
5536
|
-
children: isPending ? "Starting\u2026" : startLabel ? startLabel : todo ?
|
|
5169
|
+
children: isPending ? "Starting\u2026" : startLabel ? startLabel : todo ? "Create task" : "Start now"
|
|
5537
5170
|
}
|
|
5538
5171
|
)
|
|
5539
5172
|
] })
|
|
@@ -5772,7 +5405,6 @@ function composerToWorkRequest({ workflow, values, plan, documentTitles }, works
|
|
|
5772
5405
|
description: values.description.trim(),
|
|
5773
5406
|
due_at: values.dueAt ? localInputToIso(values.dueAt) : null,
|
|
5774
5407
|
parent_conversation_ext_id: values.parentTaskId || null,
|
|
5775
|
-
signoff_user_ext_id: values.signoffUserId || null,
|
|
5776
5408
|
shared: values.shared
|
|
5777
5409
|
};
|
|
5778
5410
|
if (values.assignee === "me") {
|
|
@@ -5815,7 +5447,6 @@ function composerToTaskQuery({ workflow, values, plan, documentTitles }, workspa
|
|
|
5815
5447
|
title: fields.name,
|
|
5816
5448
|
description: values.description.trim(),
|
|
5817
5449
|
due_at: values.dueAt ? localInputToIso(values.dueAt) : null,
|
|
5818
|
-
signoff_user_ext_id: values.signoffUserId || null,
|
|
5819
5450
|
parent_conversation_ext_id: values.parentTaskId || null,
|
|
5820
5451
|
shared: values.shared,
|
|
5821
5452
|
...fields.skill_ref === null && fields.prompt && plan ? { plan } : {}
|
|
@@ -5851,7 +5482,6 @@ function composerToWorkflowRequest({ workflow, values, plan, documentTitles }, w
|
|
|
5851
5482
|
skill_inputs: fields.skill_inputs,
|
|
5852
5483
|
agent_ext_id: values.agentId || null,
|
|
5853
5484
|
auth_mode: authModeFor(values),
|
|
5854
|
-
signoff_user_ext_id: values.signoffUserId || null,
|
|
5855
5485
|
workspace_ext_id: workspaceId,
|
|
5856
5486
|
// The plan grades every run of a free-instruction workflow (a skill's run is not a goal run).
|
|
5857
5487
|
...fields.skill_ref === null && fields.prompt && plan ? { plan } : {}
|
|
@@ -5872,7 +5502,6 @@ function taskComposerToUpdateRequest({
|
|
|
5872
5502
|
description: values.description.trim(),
|
|
5873
5503
|
due_at: values.dueAt ? localInputToIso(values.dueAt) : null,
|
|
5874
5504
|
shared: values.shared,
|
|
5875
|
-
...values.signoffUserId ? { signoff_user_ext_id: values.signoffUserId } : {},
|
|
5876
5505
|
parent_conversation_ext_id: values.parentTaskId || null,
|
|
5877
5506
|
...plan !== void 0 ? { plan } : {}
|
|
5878
5507
|
};
|
|
@@ -5896,7 +5525,6 @@ function composerToWorkflowUpdate({
|
|
|
5896
5525
|
skill_inputs: fields.skill_inputs,
|
|
5897
5526
|
agent_ext_id: values.agentId || null,
|
|
5898
5527
|
auth_mode: authModeFor(values),
|
|
5899
|
-
signoff_user_ext_id: values.signoffUserId || null,
|
|
5900
5528
|
// Omission preserves the plan; explicit null removes a stored free-instruction plan.
|
|
5901
5529
|
...fields.skill_ref === null && fields.prompt && plan !== void 0 ? { plan } : {}
|
|
5902
5530
|
};
|
|
@@ -5910,7 +5538,6 @@ function taskToComposerValues(task, workflows) {
|
|
|
5910
5538
|
inputs: {},
|
|
5911
5539
|
when: "now",
|
|
5912
5540
|
parentTaskId: task.parent_conversation_ext_id ?? "",
|
|
5913
|
-
signoffUserId: task.signoff_ext_id && task.signoff_ext_id !== task.owner_ext_id ? task.signoff_ext_id : "",
|
|
5914
5541
|
shared: task.is_shared ?? true,
|
|
5915
5542
|
description: task.description ?? "",
|
|
5916
5543
|
dueAt: isoToLocalInput(task.due_at),
|
|
@@ -5937,7 +5564,6 @@ function workflowToComposerValues(workflow, workflows) {
|
|
|
5937
5564
|
eventKind: workflow.event_kind ?? "user_message",
|
|
5938
5565
|
eventFilter: workflow.event_filter ?? null,
|
|
5939
5566
|
afterTaskId: workflow.after_conversation_ext_id ?? "",
|
|
5940
|
-
signoffUserId: workflow.signoff_ext_id && workflow.signoff_ext_id !== workflow.owner_ext_id ? workflow.signoff_ext_id : "",
|
|
5941
5567
|
shared: workflow.shared,
|
|
5942
5568
|
description: workflow.description ?? "",
|
|
5943
5569
|
agentId: workflow.agent_ext_id ?? "",
|
|
@@ -5987,12 +5613,11 @@ var EMPTY_NEW_THREAD = {
|
|
|
5987
5613
|
prompt: "",
|
|
5988
5614
|
title: "",
|
|
5989
5615
|
shared: false,
|
|
5990
|
-
ownerId: "",
|
|
5991
5616
|
dueAt: "",
|
|
5992
5617
|
parentId: "",
|
|
5993
5618
|
assistant: true
|
|
5994
5619
|
};
|
|
5995
|
-
var hasTaskFields = (v) => Boolean(v.
|
|
5620
|
+
var hasTaskFields = (v) => Boolean(v.dueAt || v.parentId);
|
|
5996
5621
|
function titleFromPrompt(prompt, max = 80) {
|
|
5997
5622
|
const first = prompt.trim().split("\n")[0].trim();
|
|
5998
5623
|
return first.length > max ? `${first.slice(0, max - 1).trimEnd()}\u2026` : first;
|
|
@@ -6003,7 +5628,6 @@ function newThreadToRequest(values) {
|
|
|
6003
5628
|
const task = {
|
|
6004
5629
|
...title ? { title } : {},
|
|
6005
5630
|
due_at: values.dueAt ? localInputToIso(values.dueAt) : null,
|
|
6006
|
-
signoff_user_ext_id: values.ownerId || null,
|
|
6007
5631
|
parent_conversation_ext_id: values.parentId || null,
|
|
6008
5632
|
shared: values.shared
|
|
6009
5633
|
};
|
|
@@ -6021,7 +5645,7 @@ function newThreadToRequest(values) {
|
|
|
6021
5645
|
}
|
|
6022
5646
|
var DEFAULT_NEW_THREAD_DIALOG_LABELS = {
|
|
6023
5647
|
title: "New",
|
|
6024
|
-
description: "Ask for anything, like a normal chat: the assistant gets on it. Add
|
|
5648
|
+
description: "Ask for anything, like a normal chat: the assistant gets on it. Add a due date if it matters.",
|
|
6025
5649
|
promptLabel: "What do you want to ask or get done?",
|
|
6026
5650
|
promptPlaceholder: "Ask a question, or describe what needs doing\u2026",
|
|
6027
5651
|
titleLabel: "Title",
|
|
@@ -6030,8 +5654,6 @@ var DEFAULT_NEW_THREAD_DIALOG_LABELS = {
|
|
|
6030
5654
|
taskDetails: "Task details",
|
|
6031
5655
|
files: (count) => count === 0 ? "No files in this workspace yet: answers come from general knowledge." : `Can use the ${count} file${count === 1 ? "" : "s"} in this workspace.`,
|
|
6032
5656
|
taskDetailsHint: "Optional.",
|
|
6033
|
-
owner: "Owner",
|
|
6034
|
-
ownerMe: "Me",
|
|
6035
5657
|
due: "Due",
|
|
6036
5658
|
dueNone: "No date",
|
|
6037
5659
|
dueClear: "Clear date",
|
|
@@ -6061,7 +5683,6 @@ function formatDue(local) {
|
|
|
6061
5683
|
function NewThreadDialog({
|
|
6062
5684
|
open,
|
|
6063
5685
|
onOpenChange,
|
|
6064
|
-
people,
|
|
6065
5686
|
tasks = [],
|
|
6066
5687
|
initialValues,
|
|
6067
5688
|
fileCount,
|
|
@@ -6084,12 +5705,6 @@ function NewThreadDialog({
|
|
|
6084
5705
|
const set = (key, value) => setValues((v) => ({ ...v, [key]: value }));
|
|
6085
5706
|
const canSubmit = values.prompt.trim() !== "" && !isPending;
|
|
6086
5707
|
const pillLabels = { search: l.search, empty: l.empty };
|
|
6087
|
-
const personOptions = (people ?? []).map((p) => ({
|
|
6088
|
-
id: p.id,
|
|
6089
|
-
label: p.label,
|
|
6090
|
-
description: p.description,
|
|
6091
|
-
icon: /* @__PURE__ */ jsx(PersonAvatar, { person: { id: p.id, label: p.label } })
|
|
6092
|
-
}));
|
|
6093
5708
|
const taskOptions = tasks.map((t) => ({
|
|
6094
5709
|
id: t.id,
|
|
6095
5710
|
label: t.name,
|
|
@@ -6193,20 +5808,6 @@ function NewThreadDialog({
|
|
|
6193
5808
|
detailsOpen && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", "data-testid": `${id}-details`, children: [
|
|
6194
5809
|
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: l.taskDetailsHint }),
|
|
6195
5810
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
6196
|
-
people !== void 0 && /* @__PURE__ */ jsx(
|
|
6197
|
-
PillSelect,
|
|
6198
|
-
{
|
|
6199
|
-
icon: /* @__PURE__ */ jsx(UserCheck, { className: GLYPH, "aria-hidden": true }),
|
|
6200
|
-
prefix: l.owner,
|
|
6201
|
-
value: values.ownerId,
|
|
6202
|
-
options: personOptions,
|
|
6203
|
-
noneOption: { id: "", label: l.ownerMe },
|
|
6204
|
-
onChange: (v) => set("ownerId", v),
|
|
6205
|
-
searchable: personOptions.length > 6,
|
|
6206
|
-
labels: pillLabels,
|
|
6207
|
-
testId: `${id}-owner`
|
|
6208
|
-
}
|
|
6209
|
-
),
|
|
6210
5811
|
/* @__PURE__ */ jsxs(Popover, { children: [
|
|
6211
5812
|
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
6212
5813
|
EntityPill,
|
|
@@ -6360,14 +5961,11 @@ function workflowRunStatusLabel(status) {
|
|
|
6360
5961
|
success: "Success",
|
|
6361
5962
|
failed: "Failed",
|
|
6362
5963
|
running: "In progress",
|
|
6363
|
-
awaiting_review: "Waiting for review",
|
|
6364
5964
|
awaiting_authorization: "Awaiting access"
|
|
6365
5965
|
};
|
|
6366
5966
|
return labels[status] ?? status.replaceAll("_", " ");
|
|
6367
5967
|
}
|
|
6368
5968
|
function listedRunStatus(status, threadStatus) {
|
|
6369
|
-
if (threadStatus === "ready_for_review" && (status === "running" || status === "completed"))
|
|
6370
|
-
return "awaiting_review";
|
|
6371
5969
|
if (threadStatus === "done" && status === "running") return "completed";
|
|
6372
5970
|
return status;
|
|
6373
5971
|
}
|
|
@@ -6974,14 +6572,9 @@ var DEFAULT_TASK_ACTIVITY_LABELS = {
|
|
|
6974
6572
|
runStartedBy: (agent) => `Run started by ${agent}`,
|
|
6975
6573
|
awaitingAccess: "Waiting for access",
|
|
6976
6574
|
accessGranted: "Access granted",
|
|
6977
|
-
readyForReview: "Ready for review",
|
|
6978
|
-
handedOff: "Handed off",
|
|
6979
|
-
changesRequested: "Asked for changes",
|
|
6980
6575
|
done: "Marked done",
|
|
6981
6576
|
reopened: "Reopened",
|
|
6982
6577
|
failed: "Run failed",
|
|
6983
|
-
handedOverNote: (note) => `Handed over: \u201C${note}\u201D`,
|
|
6984
|
-
sentBackNote: (note) => `Asked: \u201C${note}\u201D`,
|
|
6985
6578
|
failureLine: (error) => error,
|
|
6986
6579
|
system: "System"
|
|
6987
6580
|
};
|
|
@@ -6990,10 +6583,6 @@ var ICONS = {
|
|
|
6990
6583
|
run_started: /* @__PURE__ */ jsx(Play, { className: "size-3.5", "aria-hidden": true }),
|
|
6991
6584
|
awaiting_access: /* @__PURE__ */ jsx(Lock, { className: "size-3.5", "aria-hidden": true }),
|
|
6992
6585
|
access_granted: /* @__PURE__ */ jsx(KeyRound, { className: "size-3.5", "aria-hidden": true }),
|
|
6993
|
-
ready_for_review: /* @__PURE__ */ jsx(CircleDot, { className: "size-3.5", "aria-hidden": true }),
|
|
6994
|
-
reviewed: /* @__PURE__ */ jsx(CheckCircle2, { className: "size-3.5", "aria-hidden": true }),
|
|
6995
|
-
handed_off: /* @__PURE__ */ jsx(UserRoundCog, { className: "size-3.5", "aria-hidden": true }),
|
|
6996
|
-
changes_requested: /* @__PURE__ */ jsx(MessageSquareReply, { className: "size-3.5", "aria-hidden": true }),
|
|
6997
6586
|
done: /* @__PURE__ */ jsx(CheckCircle2, { className: "size-3.5", "aria-hidden": true }),
|
|
6998
6587
|
reopened: /* @__PURE__ */ jsx(RotateCcw, { className: "size-3.5", "aria-hidden": true }),
|
|
6999
6588
|
failed: /* @__PURE__ */ jsx(AlertTriangle, { className: "size-3.5", "aria-hidden": true }),
|
|
@@ -7024,7 +6613,6 @@ function TaskActivityTimeline({
|
|
|
7024
6613
|
const base = testIdOr(testId, { testId: "task-activity" });
|
|
7025
6614
|
const describe = (e) => {
|
|
7026
6615
|
const detail = e.detail ?? {};
|
|
7027
|
-
const note = asString(e.note);
|
|
7028
6616
|
const agentId = asString(detail.agent_ext_id);
|
|
7029
6617
|
const agent = agentId ? agentName?.(agentId) : void 0;
|
|
7030
6618
|
switch (e.kind) {
|
|
@@ -7052,22 +6640,8 @@ function TaskActivityTimeline({
|
|
|
7052
6640
|
return { headline: l.awaitingAccess };
|
|
7053
6641
|
case "access_granted":
|
|
7054
6642
|
return { headline: l.accessGranted };
|
|
7055
|
-
case "ready_for_review":
|
|
7056
|
-
return { headline: l.readyForReview };
|
|
7057
|
-
case "reviewed":
|
|
7058
|
-
return { headline: "Approved this review stage" };
|
|
7059
|
-
case "handed_off":
|
|
7060
|
-
return {
|
|
7061
|
-
headline: l.handedOff,
|
|
7062
|
-
extra: note ? /* @__PURE__ */ jsx(Quote, { text: l.handedOverNote(note) }) : void 0
|
|
7063
|
-
};
|
|
7064
|
-
case "changes_requested":
|
|
7065
|
-
return {
|
|
7066
|
-
headline: l.changesRequested,
|
|
7067
|
-
extra: note ? /* @__PURE__ */ jsx(Quote, { text: l.sentBackNote(note) }) : void 0
|
|
7068
|
-
};
|
|
7069
6643
|
case "done":
|
|
7070
|
-
return { headline: l.done
|
|
6644
|
+
return { headline: l.done };
|
|
7071
6645
|
case "reopened":
|
|
7072
6646
|
return { headline: l.reopened };
|
|
7073
6647
|
case "failed": {
|
|
@@ -7105,17 +6679,6 @@ function TaskActivityTimeline({
|
|
|
7105
6679
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-x-2 gap-y-1 text-sm", children: [
|
|
7106
6680
|
e.actor_ext_id ? /* @__PURE__ */ jsx("span", { className: "inline-flex", "data-testid": `${base}-actor-${e.external_id}`, children: renderPerson(e.actor_ext_id) }) : /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: l.system }),
|
|
7107
6681
|
/* @__PURE__ */ jsx("span", { className: "font-medium", children: headline }),
|
|
7108
|
-
e.kind === "handed_off" && e.to_ext_id && /* @__PURE__ */ jsxs(
|
|
7109
|
-
"span",
|
|
7110
|
-
{
|
|
7111
|
-
className: "inline-flex items-center gap-1",
|
|
7112
|
-
"data-testid": `${base}-to-${e.external_id}`,
|
|
7113
|
-
children: [
|
|
7114
|
-
/* @__PURE__ */ jsx(ArrowRight, { className: "size-3.5 text-muted-foreground", "aria-hidden": true }),
|
|
7115
|
-
renderPerson(e.to_ext_id)
|
|
7116
|
-
]
|
|
7117
|
-
}
|
|
7118
|
-
),
|
|
7119
6682
|
/* @__PURE__ */ jsx(
|
|
7120
6683
|
"time",
|
|
7121
6684
|
{
|
|
@@ -7135,9 +6698,6 @@ function TaskActivityTimeline({
|
|
|
7135
6698
|
);
|
|
7136
6699
|
}) });
|
|
7137
6700
|
}
|
|
7138
|
-
function Quote({ text }) {
|
|
7139
|
-
return /* @__PURE__ */ jsx("blockquote", { className: "border-l-2 pl-2 text-xs text-muted-foreground whitespace-pre-wrap", children: text });
|
|
7140
|
-
}
|
|
7141
6701
|
function TaskActivityDialog({
|
|
7142
6702
|
open,
|
|
7143
6703
|
onOpenChange,
|
|
@@ -7278,7 +6838,7 @@ function compactThreadActivity(events) {
|
|
|
7278
6838
|
const batches = /* @__PURE__ */ new Map();
|
|
7279
6839
|
for (const event of events) {
|
|
7280
6840
|
if (event.kind === "notified") {
|
|
7281
|
-
if (["
|
|
6841
|
+
if (["conversation_ready", "conversation_done"].includes(
|
|
7282
6842
|
String(event.detail?.notification_type)
|
|
7283
6843
|
))
|
|
7284
6844
|
continue;
|
|
@@ -7624,8 +7184,6 @@ var DEFAULT_TASK_COMPOSER_LABELS = {
|
|
|
7624
7184
|
titlePlaceholder: "What needs doing?",
|
|
7625
7185
|
descriptionLabel: "Description",
|
|
7626
7186
|
descriptionPlaceholder: "Add details (optional)",
|
|
7627
|
-
signoff: "Owner",
|
|
7628
|
-
signoffMe: "Me",
|
|
7629
7187
|
due: "Due",
|
|
7630
7188
|
dueNone: "No date",
|
|
7631
7189
|
dueClear: "Clear date",
|
|
@@ -7636,14 +7194,14 @@ var DEFAULT_TASK_COMPOSER_LABELS = {
|
|
|
7636
7194
|
visibilityPrivate: "Only me",
|
|
7637
7195
|
assistant: "Task Assistant",
|
|
7638
7196
|
assistantStandby: "On standby. It replies when you @mention it in the task\u2019s thread.",
|
|
7639
|
-
assistantPreparing: (when) => `Will
|
|
7197
|
+
assistantPreparing: (when) => `Will work on this task ${when}. You mark it done when it is.`,
|
|
7640
7198
|
configure: "Configure",
|
|
7641
7199
|
configureClose: "Done",
|
|
7642
7200
|
what: "What should it do?",
|
|
7643
7201
|
template: "Skill",
|
|
7644
7202
|
whatPlaceholder: "Choose\u2026",
|
|
7645
7203
|
plan: "Plan",
|
|
7646
|
-
planHint: "The checklist it is held to. You see how it did when
|
|
7204
|
+
planHint: "The checklist it is held to. You see how it did when it finishes.",
|
|
7647
7205
|
start: "Start",
|
|
7648
7206
|
whenOptions: {
|
|
7649
7207
|
manual: "When asked",
|
|
@@ -7700,7 +7258,6 @@ function defaultTaskComposerValues(workflows, initial) {
|
|
|
7700
7258
|
eventKind: "user_message",
|
|
7701
7259
|
afterTaskId: "",
|
|
7702
7260
|
parentTaskId: "",
|
|
7703
|
-
signoffUserId: "",
|
|
7704
7261
|
shared: false,
|
|
7705
7262
|
description: "",
|
|
7706
7263
|
dueAt: "",
|
|
@@ -7728,7 +7285,6 @@ function WorkflowComposer({
|
|
|
7728
7285
|
hideRunLater = false,
|
|
7729
7286
|
workflows,
|
|
7730
7287
|
agents,
|
|
7731
|
-
people,
|
|
7732
7288
|
tasks = [],
|
|
7733
7289
|
values: valuesProp,
|
|
7734
7290
|
initialValues,
|
|
@@ -7854,12 +7410,6 @@ function WorkflowComposer({
|
|
|
7854
7410
|
else onSubmit(submitted);
|
|
7855
7411
|
};
|
|
7856
7412
|
const pillLabels = { search: l.search, empty: l.empty };
|
|
7857
|
-
const personOptions = (people ?? []).map((p) => ({
|
|
7858
|
-
id: p.id,
|
|
7859
|
-
label: p.label,
|
|
7860
|
-
description: p.description,
|
|
7861
|
-
icon: /* @__PURE__ */ jsx(PersonAvatar, { person: { id: p.id, label: p.label } })
|
|
7862
|
-
}));
|
|
7863
7413
|
const taskOptions = tasks.map((t) => ({
|
|
7864
7414
|
id: t.id,
|
|
7865
7415
|
label: t.name,
|
|
@@ -8269,36 +7819,20 @@ function WorkflowComposer({
|
|
|
8269
7819
|
}
|
|
8270
7820
|
)
|
|
8271
7821
|
] }),
|
|
8272
|
-
/* @__PURE__ */
|
|
7822
|
+
/* @__PURE__ */ jsx(
|
|
8273
7823
|
"div",
|
|
8274
7824
|
{
|
|
8275
7825
|
className: "flex flex-wrap items-center gap-2",
|
|
8276
7826
|
"data-testid": `${id}-properties`,
|
|
8277
|
-
children:
|
|
8278
|
-
|
|
8279
|
-
|
|
8280
|
-
{
|
|
8281
|
-
|
|
8282
|
-
|
|
8283
|
-
|
|
8284
|
-
|
|
8285
|
-
|
|
8286
|
-
onChange: (v) => set("signoffUserId", v),
|
|
8287
|
-
searchable: personOptions.length > 6,
|
|
8288
|
-
labels: pillLabels,
|
|
8289
|
-
testId: `${id}-signoff`
|
|
8290
|
-
}
|
|
8291
|
-
),
|
|
8292
|
-
/* @__PURE__ */ jsx(
|
|
8293
|
-
VisibilityToggle,
|
|
8294
|
-
{
|
|
8295
|
-
items: { shared: values.shared },
|
|
8296
|
-
onToggle: (share) => set("shared", share),
|
|
8297
|
-
label: l.visibility,
|
|
8298
|
-
"data-testid": `${id}-visibility`
|
|
8299
|
-
}
|
|
8300
|
-
)
|
|
8301
|
-
]
|
|
7827
|
+
children: /* @__PURE__ */ jsx(
|
|
7828
|
+
VisibilityToggle,
|
|
7829
|
+
{
|
|
7830
|
+
items: { shared: values.shared },
|
|
7831
|
+
onToggle: (share) => set("shared", share),
|
|
7832
|
+
label: l.visibility,
|
|
7833
|
+
"data-testid": `${id}-visibility`
|
|
7834
|
+
}
|
|
7835
|
+
)
|
|
8302
7836
|
}
|
|
8303
7837
|
)
|
|
8304
7838
|
] })
|
|
@@ -8369,7 +7903,6 @@ function WorkTaskComposer({
|
|
|
8369
7903
|
isEdit = false,
|
|
8370
7904
|
workflows,
|
|
8371
7905
|
agents,
|
|
8372
|
-
people,
|
|
8373
7906
|
tasks = [],
|
|
8374
7907
|
values: valuesProp,
|
|
8375
7908
|
initialValues,
|
|
@@ -8442,12 +7975,6 @@ function WorkTaskComposer({
|
|
|
8442
7975
|
});
|
|
8443
7976
|
const id = testIdOr(testId, { testId: "task-composer" });
|
|
8444
7977
|
const submitText = isPending ? l.saving : isEdit ? l.save : !hasWork ? l.addTask : values.when === "now" ? l.addAndStart : l.addAndSchedule;
|
|
8445
|
-
const personOptions = (people ?? []).map((p) => ({
|
|
8446
|
-
id: p.id,
|
|
8447
|
-
label: p.label,
|
|
8448
|
-
description: p.description,
|
|
8449
|
-
icon: /* @__PURE__ */ jsx(PersonAvatar, { person: { id: p.id, label: p.label } })
|
|
8450
|
-
}));
|
|
8451
7978
|
const taskOptions = tasks.map((t) => ({
|
|
8452
7979
|
id: t.id,
|
|
8453
7980
|
label: t.name,
|
|
@@ -8508,20 +8035,6 @@ function WorkTaskComposer({
|
|
|
8508
8035
|
)
|
|
8509
8036
|
] }),
|
|
8510
8037
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", "data-testid": `${id}-properties`, children: [
|
|
8511
|
-
people !== void 0 && /* @__PURE__ */ jsx(
|
|
8512
|
-
PillSelect,
|
|
8513
|
-
{
|
|
8514
|
-
icon: /* @__PURE__ */ jsx(UserCheck, { className: GLYPH3, "aria-hidden": true }),
|
|
8515
|
-
prefix: l.signoff,
|
|
8516
|
-
value: values.signoffUserId,
|
|
8517
|
-
options: personOptions,
|
|
8518
|
-
noneOption: { id: "", label: l.signoffMe },
|
|
8519
|
-
onChange: (v) => set("signoffUserId", v),
|
|
8520
|
-
searchable: personOptions.length > 6,
|
|
8521
|
-
labels: pillLabels,
|
|
8522
|
-
testId: `${id}-signoff`
|
|
8523
|
-
}
|
|
8524
|
-
),
|
|
8525
8038
|
/* @__PURE__ */ jsxs(Popover, { children: [
|
|
8526
8039
|
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
8527
8040
|
EntityPill,
|
|
@@ -8819,85 +8332,6 @@ function WorkTaskComposer({
|
|
|
8819
8332
|
function TaskComposer(props) {
|
|
8820
8333
|
return props.kind === "workflow" ? /* @__PURE__ */ jsx(WorkflowComposer, { ...props }) : /* @__PURE__ */ jsx(WorkTaskComposer, { ...props });
|
|
8821
8334
|
}
|
|
8822
|
-
function TaskReviewDialog(p) {
|
|
8823
|
-
const [action, setAction] = useState("forward");
|
|
8824
|
-
const [userId, setUserId] = useState("");
|
|
8825
|
-
const [note, setNote] = useState("");
|
|
8826
|
-
useEffect(() => {
|
|
8827
|
-
if (p.open) {
|
|
8828
|
-
setAction(p.people.length ? "forward" : p.canApprove ? "finish" : "revise");
|
|
8829
|
-
setUserId("");
|
|
8830
|
-
setNote("");
|
|
8831
|
-
}
|
|
8832
|
-
}, [p.open]);
|
|
8833
|
-
const valid = action === "forward" ? p.people.some((person) => person.id === userId) : action === "revise" ? p.canRevise && Boolean(note.trim()) : p.canApprove;
|
|
8834
|
-
return /* @__PURE__ */ jsx(Dialog, { open: p.open, onOpenChange: (next) => !p.isPending && p.onOpenChange(next), children: /* @__PURE__ */ jsxs(DialogContent, { "data-testid": "task-review-dialog", className: "sm:max-w-lg", children: [
|
|
8835
|
-
/* @__PURE__ */ jsxs(DialogTitle, { children: [
|
|
8836
|
-
"Review: ",
|
|
8837
|
-
p.taskName
|
|
8838
|
-
] }),
|
|
8839
|
-
/* @__PURE__ */ jsx(DialogDescription, { children: p.canApprove ? "Approve your review and send it on, request changes, or finish the task." : "Choose who should review this work next, or ask ARBI for changes." }),
|
|
8840
|
-
/* @__PURE__ */ jsxs("div", { className: "space-y-4 py-2", children: [
|
|
8841
|
-
/* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
8842
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "review-next-step", children: "Next step" }),
|
|
8843
|
-
/* @__PURE__ */ jsxs(
|
|
8844
|
-
Select,
|
|
8845
|
-
{
|
|
8846
|
-
value: action,
|
|
8847
|
-
onValueChange: (value) => setAction(value),
|
|
8848
|
-
disabled: p.isPending,
|
|
8849
|
-
children: [
|
|
8850
|
-
/* @__PURE__ */ jsx(SelectTrigger, { id: "review-next-step", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
|
|
8851
|
-
/* @__PURE__ */ jsxs(SelectContent, { children: [
|
|
8852
|
-
p.people.length > 0 && /* @__PURE__ */ jsx(SelectItem, { value: "forward", children: p.canApprove ? "Approve and send for review" : "Send for review" }),
|
|
8853
|
-
p.canRevise && /* @__PURE__ */ jsx(SelectItem, { value: "revise", children: "Ask ARBI for changes" }),
|
|
8854
|
-
p.canApprove && /* @__PURE__ */ jsx(SelectItem, { value: "finish", children: "Approve and finish task" })
|
|
8855
|
-
] })
|
|
8856
|
-
]
|
|
8857
|
-
}
|
|
8858
|
-
)
|
|
8859
|
-
] }),
|
|
8860
|
-
action === "forward" && /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
8861
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "review-recipient", children: "Next reviewer" }),
|
|
8862
|
-
/* @__PURE__ */ jsxs(Select, { value: userId, onValueChange: setUserId, disabled: p.isPending, children: [
|
|
8863
|
-
/* @__PURE__ */ jsx(SelectTrigger, { id: "review-recipient", children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Choose a person" }) }),
|
|
8864
|
-
/* @__PURE__ */ jsx(SelectContent, { children: p.people.map((person) => /* @__PURE__ */ jsx(SelectItem, { value: person.id, children: person.label }, person.id)) })
|
|
8865
|
-
] })
|
|
8866
|
-
] }),
|
|
8867
|
-
/* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
8868
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "review-note", children: action === "revise" ? "What should ARBI change?" : "Review note (optional)" }),
|
|
8869
|
-
/* @__PURE__ */ jsx(
|
|
8870
|
-
Textarea,
|
|
8871
|
-
{
|
|
8872
|
-
id: "review-note",
|
|
8873
|
-
value: note,
|
|
8874
|
-
onChange: (e) => setNote(e.target.value),
|
|
8875
|
-
disabled: p.isPending,
|
|
8876
|
-
placeholder: action === "revise" ? "Explain what needs changing in the same draft\u2026" : "Explain what you checked and what the next reviewer should focus on\u2026"
|
|
8877
|
-
}
|
|
8878
|
-
)
|
|
8879
|
-
] }),
|
|
8880
|
-
p.error && /* @__PURE__ */ jsx("p", { role: "alert", className: "text-sm text-destructive", children: p.error })
|
|
8881
|
-
] }),
|
|
8882
|
-
/* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
|
|
8883
|
-
/* @__PURE__ */ jsx(Button, { variant: "outline", onClick: () => p.onOpenChange(false), disabled: p.isPending, children: "Cancel" }),
|
|
8884
|
-
/* @__PURE__ */ jsx(
|
|
8885
|
-
Button,
|
|
8886
|
-
{
|
|
8887
|
-
"data-testid": "task-review-submit",
|
|
8888
|
-
disabled: !valid || p.isPending,
|
|
8889
|
-
onClick: () => p.onSubmit({
|
|
8890
|
-
action,
|
|
8891
|
-
userId,
|
|
8892
|
-
note: note.trim(),
|
|
8893
|
-
approveCurrent: p.canApprove && action === "forward"
|
|
8894
|
-
}),
|
|
8895
|
-
children: p.isPending ? "Saving\u2026" : action === "forward" ? p.canApprove ? "Approve and send" : "Send for review" : action === "revise" ? "Send to ARBI" : "Finish task"
|
|
8896
|
-
}
|
|
8897
|
-
)
|
|
8898
|
-
] })
|
|
8899
|
-
] }) });
|
|
8900
|
-
}
|
|
8901
8335
|
function ThreadNotifyDialog({
|
|
8902
8336
|
open,
|
|
8903
8337
|
onOpenChange,
|
|
@@ -10683,6 +10117,6 @@ function AgentCreateView({
|
|
|
10683
10117
|
] });
|
|
10684
10118
|
}
|
|
10685
10119
|
|
|
10686
|
-
export { AgentAvatarField, AgentBar, AgentBarIconButton, AgentBarMenu, AgentBarNotes, AgentBarProbeAnswer, AgentBarQueuedNote, AgentBarStatus, AgentCard, AgentCreateView, AgentCreatedView, AgentCreator, AgentEditView, AgentGallery, AgentMainView, AgentSelect, AgentTypeSelector, CapabilityGrid, CapabilityTile, ConfigField, ConfigForm, ConsentActions, ConsentBulletList, ConsentCard, ConsentFootnote, ConsentHeader, ConsentMessage, ConsentNotice, ConsentPage, ConsentPermissionList, ConsentSection, ConsentStrong, ConsentText, ConversationListView, ConversationTurnSpeaker, CopyableUrl, DEFAULT_AGENT_AVATAR_FIELD_LABELS, DEFAULT_AGENT_BAR_LABELS, DEFAULT_AGENT_CARD_LABELS, DEFAULT_AGENT_CREATOR_LABELS, DEFAULT_AGENT_GALLERY_LABELS, DEFAULT_AGENT_SELECT_LABELS, DEFAULT_AGENT_STEPS_LABELS, DEFAULT_AGENT_TYPE_SELECTOR_LABELS, DEFAULT_AUTHORIZE_AGENT_LABELS, DEFAULT_CONFIG_FIELD_LABELS, DEFAULT_CONFIG_FORM_LABELS, DEFAULT_CONSENT_ACTIONS_LABELS, DEFAULT_COPYABLE_URL_LABELS, DEFAULT_NEW_THREAD_DIALOG_LABELS, DEFAULT_PILL_SELECT_LABELS, DEFAULT_RECURRENCE, DEFAULT_RECURRENCE_BUILDER_LABELS, DEFAULT_SCHEMA_FORM_LABELS, DEFAULT_SKILL_CARD_LABELS, DEFAULT_SKILL_EDIT_FORM_LABELS, DEFAULT_SKILL_GENERATE_FORM_LABELS, DEFAULT_SKILL_GLOBAL_BADGE_LABELS, DEFAULT_SKILL_ROW_LABELS, DEFAULT_SKILL_VIEW_TOGGLE_LABELS, DEFAULT_SUBAGENT_ROSTER_LABELS, DEFAULT_TASKS_CHROME_LABELS, DEFAULT_TASK_ACTIVITY_LABELS, DEFAULT_TASK_COMPOSER_LABELS, DEFAULT_TASK_LIST_LABELS, DEFAULT_TASK_OUTPUTS_CELL_LABELS, DEFAULT_TASK_PLAN_LABELS,
|
|
10687
|
-
//# sourceMappingURL=chunk-
|
|
10688
|
-
//# sourceMappingURL=chunk-
|
|
10120
|
+
export { AgentAvatarField, AgentBar, AgentBarIconButton, AgentBarMenu, AgentBarNotes, AgentBarProbeAnswer, AgentBarQueuedNote, AgentBarStatus, AgentCard, AgentCreateView, AgentCreatedView, AgentCreator, AgentEditView, AgentGallery, AgentMainView, AgentSelect, AgentTypeSelector, CapabilityGrid, CapabilityTile, ConfigField, ConfigForm, ConsentActions, ConsentBulletList, ConsentCard, ConsentFootnote, ConsentHeader, ConsentMessage, ConsentNotice, ConsentPage, ConsentPermissionList, ConsentSection, ConsentStrong, ConsentText, ConversationListView, ConversationTurnSpeaker, CopyableUrl, DEFAULT_AGENT_AVATAR_FIELD_LABELS, DEFAULT_AGENT_BAR_LABELS, DEFAULT_AGENT_CARD_LABELS, DEFAULT_AGENT_CREATOR_LABELS, DEFAULT_AGENT_GALLERY_LABELS, DEFAULT_AGENT_SELECT_LABELS, DEFAULT_AGENT_STEPS_LABELS, DEFAULT_AGENT_TYPE_SELECTOR_LABELS, DEFAULT_AUTHORIZE_AGENT_LABELS, DEFAULT_CONFIG_FIELD_LABELS, DEFAULT_CONFIG_FORM_LABELS, DEFAULT_CONSENT_ACTIONS_LABELS, DEFAULT_COPYABLE_URL_LABELS, DEFAULT_NEW_THREAD_DIALOG_LABELS, DEFAULT_PILL_SELECT_LABELS, DEFAULT_RECURRENCE, DEFAULT_RECURRENCE_BUILDER_LABELS, DEFAULT_SCHEMA_FORM_LABELS, DEFAULT_SKILL_CARD_LABELS, DEFAULT_SKILL_EDIT_FORM_LABELS, DEFAULT_SKILL_GENERATE_FORM_LABELS, DEFAULT_SKILL_GLOBAL_BADGE_LABELS, DEFAULT_SKILL_ROW_LABELS, DEFAULT_SKILL_VIEW_TOGGLE_LABELS, DEFAULT_SUBAGENT_ROSTER_LABELS, DEFAULT_TASKS_CHROME_LABELS, DEFAULT_TASK_ACTIVITY_LABELS, DEFAULT_TASK_COMPOSER_LABELS, DEFAULT_TASK_LIST_LABELS, DEFAULT_TASK_OUTPUTS_CELL_LABELS, DEFAULT_TASK_PLAN_LABELS, DEFAULT_TASK_RUNS_DIALOG_LABELS, DEFAULT_TASK_STATUS_PILL_LABELS, DEFAULT_TASK_THREAD_CHIP_LABELS, DEFAULT_TASK_TRIGGER_CHIP_LABELS, DEFAULT_TUPLE_ARRAY_FIELD_LABELS, DEFAULT_UPLOAD_TASK_ITEM_LABELS, DEFAULT_UPLOAD_TASK_LIST_LABELS, DEFAULT_WORKFLOWS_CHROME_LABELS, DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS, DEFAULT_WORKFLOW_LIST_LABELS, DERIVED_NAME_WORDS, EMPTY_NEW_THREAD, EMPTY_WORKFLOW_SCOPE, EntityChip, GoalCriteria, MAX_TASK_DEPTH, NewThreadDialog, PersonPill, PillSelect, RecurrenceBuilder, SKILL_PROMPT_FALLBACK_PLACEHOLDER, SKILL_PROMPT_LABEL, STATUS_LABELS, STATUS_ORDER, STATUS_TONE, SchemaForm, SkillActionButton, SkillCard, SkillDetail, SkillDetailSection, SkillEditForm, SkillFilterChips, SkillGenerateForm, SkillGlobalBadge, SkillRow, SkillTile, SkillTypeBadge, SkillViewToggle, StepDetail, StepNarration, StepOutcome, StepParams, StepRow, StepSummary, StepTrace, StepTraceSummary, SubAgentLane, SubStepGroup, SubagentRoster, TASK_COLUMN_ORDER, TRIGGER_LABELS, TaskActivityDialog, TaskActivityTimeline, TaskComposer, TaskFlow, TaskInbox, TaskMoveDialog, TaskOutputsCell, TaskPlan, TaskRunsDialog, TaskStartDialog, TaskStatusPill, TaskTable, TaskThreadChip, TaskTriggerChip, TasksToolbar, ThreadActivity, ThreadNotifyDialog, TupleArrayField, UploadTaskItem, UploadTaskList, WEEKDAYS, WORKFLOW_COLUMN_ORDER, WorkflowConfigDialog, WorkflowDocumentsField, WorkflowLauncher, WorkflowsTable, WorkflowsToolbar, agentConfigSectionToValues, agentCreatorToConfigSection, asTaskStatus, authModeFor, buildLaunch, buildRRule, buildTaskRows, buildWorkflowScopeSource, compactThreadActivity, composePersona, composeWorkflowPrompt, composerToTaskQuery, composerToWorkRequest, composerToWorkflowRequest, composerToWorkflowUpdate, createTaskColumns, createWorkflowColumns, createsWork, defaultInputs, defaultScopeRenderer, defaultTaskComposerValues, deriveAgentName, deriveWorkflowName, descendantIds, describeRRule, filterConversationRows, firstWords, formatElapsed, goalProgress, hasTaskFields, hasTrigger, humanizeSection, indexTasks, inferType, inputDocumentIds, inputsFromContext, isAgenticWorkflow, isEmptyWorkflowScope, isOutOfBounds, isPlainTodo, isSkillRow, isValidAgentName, isWorkflowScope, isoToLocalInput, localInputToIso, matchWorkflowScope, moveTargets, newThreadToRequest, nextCriterionId, ownerExtId, parseRRule, prettifyKey, promptFieldName, resolveScopeInputs, skillToWorkflow, stripPersonaPreamble, summarizeAgent, summarizeCapabilities, taskComposerToCreateRequest, taskComposerToUpdateRequest, taskNeedsAccess, taskToComposerValues, validateInputs, workflowAccepts, workflowFromFrontmatter, workflowStatus, workflowTaskFields, workflowToComposerValues, workflowTriggerType, workflowWhen, workflowsAccepting, workflowsForHost };
|
|
10121
|
+
//# sourceMappingURL=chunk-BIAALPXI.js.map
|
|
10122
|
+
//# sourceMappingURL=chunk-BIAALPXI.js.map
|