@arbidocs/blocks 0.4.122 → 0.4.123
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/{StreamedArtifactEditor-IZWYNFMM.cjs → StreamedArtifactEditor-DNBDUNP2.cjs} +5 -5
- package/dist/{StreamedArtifactEditor-IZWYNFMM.cjs.map → StreamedArtifactEditor-DNBDUNP2.cjs.map} +1 -1
- package/dist/{StreamedArtifactEditor-HTNPG4NB.js → StreamedArtifactEditor-WDHPTWX7.js} +3 -3
- package/dist/{StreamedArtifactEditor-HTNPG4NB.js.map → StreamedArtifactEditor-WDHPTWX7.js.map} +1 -1
- package/dist/agents/index.cjs +388 -324
- package/dist/agents/index.js +7 -7
- package/dist/agents/tasks/ConversationListView.d.ts +2 -1
- package/dist/agents/tasks/ConversationTurnSpeaker.d.ts +3 -1
- package/dist/agents/tasks/TaskFlow.d.ts +17 -0
- package/dist/agents/tasks/ThreadLauncher.d.ts +51 -0
- package/dist/agents/tasks/ThreadStatusLine.d.ts +33 -0
- package/dist/agents/tasks/WorkflowRunStatus.d.ts +32 -0
- package/dist/agents/tasks/WorkflowThreadStrip.d.ts +29 -3
- package/dist/agents/tasks/compact-thread-activity.d.ts +5 -2
- package/dist/agents/tasks/index.d.ts +3 -0
- package/dist/agents/workflows/StepBarFrame.d.ts +18 -17
- package/dist/agents/workflows/StepChip.d.ts +37 -0
- package/dist/agents/workflows/StepDocuments.d.ts +64 -0
- package/dist/agents/workflows/WorkflowStepBar.d.ts +1 -2
- package/dist/agents/workflows/index.d.ts +2 -0
- package/dist/agents/workflows/stepKinds.d.ts +24 -0
- package/dist/artifacts/VersionTimeline.d.ts +7 -0
- package/dist/artifacts/index.cjs +21 -21
- package/dist/artifacts/index.js +1 -1
- package/dist/chat/ChatPage.d.ts +1 -1
- package/dist/chat/DraftingDocChip.d.ts +22 -0
- package/dist/chat/WorkflowStepChip.d.ts +23 -5
- package/dist/chat/chat-page-types.d.ts +18 -2
- package/dist/chat/flashMessage.d.ts +6 -0
- package/dist/chat/index.cjs +144 -131
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +4 -3
- package/dist/{chunk-UDK553WP.cjs → chunk-4VCKYR4D.cjs} +4 -4
- package/dist/{chunk-UDK553WP.cjs.map → chunk-4VCKYR4D.cjs.map} +1 -1
- package/dist/{chunk-XSUOEJB3.cjs → chunk-7FZWNDPU.cjs} +162 -836
- package/dist/chunk-7FZWNDPU.cjs.map +1 -0
- package/dist/chunk-7HAM7Y5U.js +907 -0
- package/dist/chunk-7HAM7Y5U.js.map +1 -0
- package/dist/{chunk-TCNYKDYE.js → chunk-CXLVI3SB.js} +73 -40
- package/dist/chunk-CXLVI3SB.js.map +1 -0
- package/dist/chunk-HM23LXUP.cjs +976 -0
- package/dist/chunk-HM23LXUP.cjs.map +1 -0
- package/dist/{chunk-WN64RF46.js → chunk-HQH35JWC.js} +3 -3
- package/dist/{chunk-WN64RF46.js.map → chunk-HQH35JWC.js.map} +1 -1
- package/dist/{chunk-AY32GGKU.js → chunk-MD7RVFKA.js} +131 -751
- package/dist/chunk-MD7RVFKA.js.map +1 -0
- package/dist/{chunk-65HZ36MY.js → chunk-OTDGTBAS.js} +20 -3
- package/dist/chunk-OTDGTBAS.js.map +1 -0
- package/dist/{chunk-ZP4IFW2E.js → chunk-RARHNGKM.js} +731 -183
- package/dist/chunk-RARHNGKM.js.map +1 -0
- package/dist/{chunk-XFZ7HNPG.js → chunk-SOZNA52K.js} +3 -3
- package/dist/{chunk-XFZ7HNPG.js.map → chunk-SOZNA52K.js.map} +1 -1
- package/dist/{chunk-US5ASM4G.cjs → chunk-U2F4SSJR.cjs} +5 -5
- package/dist/{chunk-US5ASM4G.cjs.map → chunk-U2F4SSJR.cjs.map} +1 -1
- package/dist/{chunk-Z2NSU7D5.cjs → chunk-V4V2CVNE.cjs} +768 -214
- package/dist/chunk-V4V2CVNE.cjs.map +1 -0
- package/dist/{chunk-CK4C3IQR.cjs → chunk-VMZXFYHK.cjs} +47 -6
- package/dist/chunk-VMZXFYHK.cjs.map +1 -0
- package/dist/{chunk-SVJQWLOF.cjs → chunk-W4GXDARU.cjs} +20 -3
- package/dist/chunk-W4GXDARU.cjs.map +1 -0
- package/dist/{chunk-S2KVJYBD.cjs → chunk-WV4IDVDQ.cjs} +76 -43
- package/dist/chunk-WV4IDVDQ.cjs.map +1 -0
- package/dist/{chunk-2FUJXMGO.js → chunk-Y4X3RBFI.js} +44 -6
- package/dist/{chunk-CK4C3IQR.cjs.map → chunk-Y4X3RBFI.js.map} +1 -1
- package/dist/collaboration/index.cjs +1 -1
- package/dist/collaboration/index.js +1 -1
- package/dist/connect/index.cjs +63 -46
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +33 -16
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/WorkflowRunThread.d.ts +4 -4
- package/dist/connection/ai.d.ts +2 -0
- package/dist/facts/index.cjs +2 -2
- package/dist/facts/index.js +2 -2
- package/dist/files/index.cjs +3 -3
- package/dist/files/index.js +3 -3
- package/dist/home/index.cjs +1 -1
- package/dist/home/index.js +1 -1
- package/dist/index.cjs +840 -764
- package/dist/index.js +14 -14
- package/dist/retrieval/index.cjs +1 -1
- package/dist/retrieval/index.js +1 -1
- package/dist/settings/index.cjs +1 -1
- package/dist/settings/index.js +1 -1
- package/dist/shell/index.cjs +10 -10
- package/dist/shell/index.js +2 -2
- package/dist/studio/index.cjs +6 -5
- package/dist/studio/index.cjs.map +1 -1
- package/dist/studio/index.js +5 -4
- package/dist/studio/index.js.map +1 -1
- package/dist/workflow-canvas/WorkflowCanvas.d.ts +0 -9
- package/dist/workflow-canvas/edit.d.ts +2 -11
- package/dist/workflow-canvas/index.cjs +61 -85
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +12 -36
- package/dist/workflow-canvas/index.js.map +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +4 -4
- package/src/blocks.css +168 -0
- package/src/workflow-canvas/canvas.css +2 -40
- package/dist/chunk-2FUJXMGO.js.map +0 -1
- package/dist/chunk-65HZ36MY.js.map +0 -1
- package/dist/chunk-AY32GGKU.js.map +0 -1
- package/dist/chunk-B4SRYJLM.cjs +0 -107
- package/dist/chunk-B4SRYJLM.cjs.map +0 -1
- package/dist/chunk-HOXKR26S.js +0 -103
- package/dist/chunk-HOXKR26S.js.map +0 -1
- package/dist/chunk-S2KVJYBD.cjs.map +0 -1
- package/dist/chunk-SVJQWLOF.cjs.map +0 -1
- package/dist/chunk-TCNYKDYE.js.map +0 -1
- package/dist/chunk-XSUOEJB3.cjs.map +0 -1
- package/dist/chunk-Z2NSU7D5.cjs.map +0 -1
- package/dist/chunk-ZP4IFW2E.js.map +0 -1
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
var chunkZV3BKLFY_cjs = require('./chunk-ZV3BKLFY.cjs');
|
|
5
5
|
var chunkS5HZBXZA_cjs = require('./chunk-S5HZBXZA.cjs');
|
|
6
6
|
var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
|
|
7
|
-
var
|
|
7
|
+
var chunk7FZWNDPU_cjs = require('./chunk-7FZWNDPU.cjs');
|
|
8
8
|
var chunk7D737FLE_cjs = require('./chunk-7D737FLE.cjs');
|
|
9
9
|
var chunkN26CXGXC_cjs = require('./chunk-N26CXGXC.cjs');
|
|
10
10
|
var chunk3AFWGEDJ_cjs = require('./chunk-3AFWGEDJ.cjs');
|
|
@@ -13,13 +13,13 @@ var chunkOB5F4577_cjs = require('./chunk-OB5F4577.cjs');
|
|
|
13
13
|
var chunkV4ISCZJ7_cjs = require('./chunk-V4ISCZJ7.cjs');
|
|
14
14
|
var chunk2EI7NCUA_cjs = require('./chunk-2EI7NCUA.cjs');
|
|
15
15
|
var chunkC2CWWEHO_cjs = require('./chunk-C2CWWEHO.cjs');
|
|
16
|
-
var chunkB4SRYJLM_cjs = require('./chunk-B4SRYJLM.cjs');
|
|
17
|
-
var chunk7UTB4PHM_cjs = require('./chunk-7UTB4PHM.cjs');
|
|
18
|
-
var chunkFX3K6LNZ_cjs = require('./chunk-FX3K6LNZ.cjs');
|
|
19
16
|
var chunk7RGLTF76_cjs = require('./chunk-7RGLTF76.cjs');
|
|
20
17
|
var chunkULWRNGGE_cjs = require('./chunk-ULWRNGGE.cjs');
|
|
21
|
-
var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
|
|
22
18
|
var chunkC54XEN5T_cjs = require('./chunk-C54XEN5T.cjs');
|
|
19
|
+
var chunkHM23LXUP_cjs = require('./chunk-HM23LXUP.cjs');
|
|
20
|
+
var chunk7UTB4PHM_cjs = require('./chunk-7UTB4PHM.cjs');
|
|
21
|
+
var chunkFX3K6LNZ_cjs = require('./chunk-FX3K6LNZ.cjs');
|
|
22
|
+
var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
|
|
23
23
|
var chunkKDG6FER6_cjs = require('./chunk-KDG6FER6.cjs');
|
|
24
24
|
var react = require('react');
|
|
25
25
|
var ui = require('@arbidocs/react/ui');
|
|
@@ -146,7 +146,7 @@ function WorkflowConfigDialog({
|
|
|
146
146
|
}) {
|
|
147
147
|
const l = { ...DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS, ...labels };
|
|
148
148
|
const initialKey = JSON.stringify(initialInputs ?? {});
|
|
149
|
-
const seedKey = JSON.stringify({ ...
|
|
149
|
+
const seedKey = JSON.stringify({ ...chunkHM23LXUP_cjs.defaultInputs(workflow), ...JSON.parse(initialKey) });
|
|
150
150
|
const seed = react.useMemo(() => JSON.parse(seedKey), [seedKey]);
|
|
151
151
|
const [inputs, setInputs] = useControllableState(inputsProp, seed, onInputsChange);
|
|
152
152
|
const [agentId, setAgentId] = useControllableState(
|
|
@@ -158,7 +158,7 @@ function WorkflowConfigDialog({
|
|
|
158
158
|
if (open && inputsProp === void 0) setInputs(seed);
|
|
159
159
|
}, [open, seed]);
|
|
160
160
|
const setField = (name, value) => setInputs({ ...inputs, [name]: value });
|
|
161
|
-
const errors =
|
|
161
|
+
const errors = chunkHM23LXUP_cjs.validateInputs(workflow, inputs);
|
|
162
162
|
const valid = Object.keys(errors).length === 0;
|
|
163
163
|
const visibleErrors = Object.fromEntries(
|
|
164
164
|
Object.entries(errors).filter(([, e]) => e !== "required")
|
|
@@ -171,7 +171,7 @@ function WorkflowConfigDialog({
|
|
|
171
171
|
const blockedByScope = matchedCount !== null && matchedCount === 0 && Boolean(workflow.requiresFiles);
|
|
172
172
|
const showAgent = workflow.run.kind === "prompt" && workflow.options?.agent !== false && agents !== void 0 && agents.length > 0;
|
|
173
173
|
const launch = (values) => {
|
|
174
|
-
Promise.resolve(onLaunch(
|
|
174
|
+
Promise.resolve(onLaunch(chunkHM23LXUP_cjs.buildLaunch(workflow, values, agentId))).catch(() => {
|
|
175
175
|
});
|
|
176
176
|
};
|
|
177
177
|
const submit = () => {
|
|
@@ -249,7 +249,7 @@ function WorkflowConfigDialog({
|
|
|
249
249
|
}
|
|
250
250
|
) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
251
251
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
252
|
-
|
|
252
|
+
chunk7FZWNDPU_cjs.SchemaForm,
|
|
253
253
|
{
|
|
254
254
|
fields,
|
|
255
255
|
values: inputs,
|
|
@@ -327,7 +327,7 @@ function resolveScopeInputs(workflow, inputs, scopeSource) {
|
|
|
327
327
|
for (const field of workflow.inputs) {
|
|
328
328
|
if (field.type !== "scope") continue;
|
|
329
329
|
const raw = inputs[field.name];
|
|
330
|
-
const scope =
|
|
330
|
+
const scope = chunkHM23LXUP_cjs.isWorkflowScope(raw) ? raw : { folders: [], labels: [] };
|
|
331
331
|
next[field.name] = { ...scope, documents: scopeSource.resolveDocuments(scope) };
|
|
332
332
|
}
|
|
333
333
|
return next;
|
|
@@ -369,9 +369,9 @@ function WorkflowLauncher({
|
|
|
369
369
|
};
|
|
370
370
|
const select = (workflow) => {
|
|
371
371
|
if (workflow.run.kind === "operation" && workflow.inputs.length === 0) {
|
|
372
|
-
const inputs =
|
|
373
|
-
if (Object.keys(
|
|
374
|
-
Promise.resolve(onLaunch(
|
|
372
|
+
const inputs = chunkHM23LXUP_cjs.defaultInputs(workflow);
|
|
373
|
+
if (Object.keys(chunkHM23LXUP_cjs.validateInputs(workflow, inputs)).length === 0) {
|
|
374
|
+
Promise.resolve(onLaunch(chunkHM23LXUP_cjs.buildLaunch(workflow, inputs, void 0))).catch(() => {
|
|
375
375
|
});
|
|
376
376
|
return;
|
|
377
377
|
}
|
|
@@ -521,7 +521,7 @@ function workflowToSkillMarkdown(workflow) {
|
|
|
521
521
|
if (workflow.landing !== "chat") lines.push(`landing: ${workflow.landing}`);
|
|
522
522
|
if (workflow.requiresFiles) lines.push("requires_files: true");
|
|
523
523
|
if (workflow.inputs.length > 0) {
|
|
524
|
-
lines.push(`inputs: ${JSON.stringify(workflow.inputs.map(
|
|
524
|
+
lines.push(`inputs: ${JSON.stringify(workflow.inputs.map(chunkHM23LXUP_cjs.fieldToFrontmatter))}`);
|
|
525
525
|
}
|
|
526
526
|
lines.push("---", "", run.promptTemplate.trim(), "");
|
|
527
527
|
return lines.join("\n");
|
|
@@ -543,11 +543,11 @@ function workflowFromSkillMarkdown(id, text2) {
|
|
|
543
543
|
} else if (value === "true" || value === "false") frontmatter[key] = value === "true";
|
|
544
544
|
else frontmatter[key] = value;
|
|
545
545
|
}
|
|
546
|
-
return
|
|
546
|
+
return chunkHM23LXUP_cjs.workflowFromFrontmatter(id, frontmatter, body);
|
|
547
547
|
}
|
|
548
548
|
function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, resolveWorkflow, compose } = {}) {
|
|
549
|
-
const steps =
|
|
550
|
-
const [inputs, setInputs] = react.useState(() =>
|
|
549
|
+
const steps = chunkHM23LXUP_cjs.workflowSteps(workflow);
|
|
550
|
+
const [inputs, setInputs] = react.useState(() => chunkHM23LXUP_cjs.initialRunInputs(workflow));
|
|
551
551
|
const [states, setStates] = react.useState({});
|
|
552
552
|
const set = (id, state) => setStates((s) => ({ ...s, [id]: state }));
|
|
553
553
|
const timers = react.useRef(/* @__PURE__ */ new Map());
|
|
@@ -569,10 +569,10 @@ function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, reso
|
|
|
569
569
|
react.useEffect(() => {
|
|
570
570
|
if (Object.values(states).some((s) => s.status === "running")) return;
|
|
571
571
|
const next = steps.find(
|
|
572
|
-
(s) => (s.kind === "agent" || s.kind === "action") &&
|
|
572
|
+
(s) => (s.kind === "agent" || s.kind === "action") && chunkHM23LXUP_cjs.stepPhase(steps, states, s.id) === "ready"
|
|
573
573
|
);
|
|
574
574
|
if (!next || next.kind !== "agent" && next.kind !== "action") return;
|
|
575
|
-
const prompt = next.kind === "agent" ?
|
|
575
|
+
const prompt = next.kind === "agent" ? chunkHM23LXUP_cjs.composeStepPrompt(workflow, next, inputs, { resolveWorkflow, compose }) : "";
|
|
576
576
|
set(next.id, { status: "running", startedAt: (/* @__PURE__ */ new Date()).toISOString() });
|
|
577
577
|
timers.current.set(
|
|
578
578
|
next.id,
|
|
@@ -585,7 +585,7 @@ function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, reso
|
|
|
585
585
|
}, delayMs)
|
|
586
586
|
);
|
|
587
587
|
}, [states, steps, workflow]);
|
|
588
|
-
return
|
|
588
|
+
return chunk7FZWNDPU_cjs.useWorkflowView({
|
|
589
589
|
steps,
|
|
590
590
|
states,
|
|
591
591
|
inputs,
|
|
@@ -4366,6 +4366,62 @@ function TaskInbox(p) {
|
|
|
4366
4366
|
)
|
|
4367
4367
|
] });
|
|
4368
4368
|
}
|
|
4369
|
+
var DEFAULT_THREAD_STATE_LABELS = {
|
|
4370
|
+
generating: "Generating",
|
|
4371
|
+
needs: "Needs {name}",
|
|
4372
|
+
next: "Up next",
|
|
4373
|
+
ready: "Ready",
|
|
4374
|
+
todo: "To do",
|
|
4375
|
+
done: "Done",
|
|
4376
|
+
failed: "Failed",
|
|
4377
|
+
queued: "Queued",
|
|
4378
|
+
access: "Needs access"
|
|
4379
|
+
};
|
|
4380
|
+
var LOOK = {
|
|
4381
|
+
generating: {
|
|
4382
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "animate-spin" }),
|
|
4383
|
+
className: "text-amber-700 dark:text-amber-300"
|
|
4384
|
+
},
|
|
4385
|
+
needs: { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Hand, {}), className: "text-orange-700 dark:text-orange-300" },
|
|
4386
|
+
next: { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, {}), className: "text-muted-foreground" },
|
|
4387
|
+
ready: { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CircleCheck, {}), className: "text-emerald-700 dark:text-emerald-400" },
|
|
4388
|
+
todo: { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CircleDashed, {}), className: "text-muted-foreground" },
|
|
4389
|
+
done: { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCheck, {}), className: "text-muted-foreground" },
|
|
4390
|
+
failed: { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, {}), className: "text-red-text" },
|
|
4391
|
+
queued: { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, {}), className: "text-amber-700 dark:text-amber-300" },
|
|
4392
|
+
access: { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.KeyRound, {}), className: "text-red-text" }
|
|
4393
|
+
};
|
|
4394
|
+
function ThreadStatusLine({
|
|
4395
|
+
state,
|
|
4396
|
+
name = "you",
|
|
4397
|
+
detail,
|
|
4398
|
+
extra,
|
|
4399
|
+
labels,
|
|
4400
|
+
className,
|
|
4401
|
+
testId
|
|
4402
|
+
}) {
|
|
4403
|
+
const l = { ...DEFAULT_THREAD_STATE_LABELS, ...labels };
|
|
4404
|
+
const { icon, className: tone } = LOOK[state];
|
|
4405
|
+
const word = l[state].replace("{name}", name);
|
|
4406
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4407
|
+
"span",
|
|
4408
|
+
{
|
|
4409
|
+
className: ui.cn("flex min-w-0 items-center gap-1.5 text-xs leading-tight", className),
|
|
4410
|
+
title: detail ? `${word} \xB7 ${detail}` : word,
|
|
4411
|
+
"data-state": state,
|
|
4412
|
+
"data-testid": testId,
|
|
4413
|
+
children: [
|
|
4414
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: ui.cn("flex shrink-0 [&_svg]:size-3.5", tone), "aria-hidden": true, children: icon }),
|
|
4415
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: ui.cn("shrink-0 font-medium", tone), children: word }),
|
|
4416
|
+
extra,
|
|
4417
|
+
detail && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "min-w-0 truncate text-foreground", children: [
|
|
4418
|
+
"\xB7 ",
|
|
4419
|
+
detail
|
|
4420
|
+
] })
|
|
4421
|
+
]
|
|
4422
|
+
}
|
|
4423
|
+
);
|
|
4424
|
+
}
|
|
4369
4425
|
function EntityChip({
|
|
4370
4426
|
variant = "pill",
|
|
4371
4427
|
icon,
|
|
@@ -4449,13 +4505,14 @@ function ConversationListView(p) {
|
|
|
4449
4505
|
[p.conversations, q, p.labelText, p.doneFilter, p.visibilityFilters, p.meetingFilter]
|
|
4450
4506
|
);
|
|
4451
4507
|
const selectedRows = p.conversations.filter((c) => selected.has(c.external_id));
|
|
4508
|
+
const hasLabels = p.conversations.some((c) => !!p.labelText?.(c));
|
|
4452
4509
|
const columns = react.useMemo(
|
|
4453
4510
|
() => [
|
|
4454
4511
|
{
|
|
4455
4512
|
colId: "name",
|
|
4456
4513
|
headerName: "Thread",
|
|
4457
|
-
flex:
|
|
4458
|
-
minWidth:
|
|
4514
|
+
flex: 2,
|
|
4515
|
+
minWidth: 200,
|
|
4459
4516
|
valueGetter: ({ data }) => data?.title?.trim() || "Untitled thread",
|
|
4460
4517
|
cellRenderer: ({ data }) => data && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "group flex h-full min-w-0 items-center gap-2", children: [
|
|
4461
4518
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: liveProps.current.renderThread ? liveProps.current.renderThread(data) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -4469,6 +4526,18 @@ function ConversationListView(p) {
|
|
|
4469
4526
|
testId: `thread-open-${data.external_id}`
|
|
4470
4527
|
}
|
|
4471
4528
|
) }),
|
|
4529
|
+
(data.message_count ?? 0) > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4530
|
+
"span",
|
|
4531
|
+
{
|
|
4532
|
+
className: "inline-flex h-5 shrink-0 items-center gap-0.5 self-center rounded-full bg-muted px-1.5 text-[10px] font-medium leading-none tabular-nums text-muted-foreground",
|
|
4533
|
+
title: `${data.message_count} ${data.message_count === 1 ? "message" : "messages"}`,
|
|
4534
|
+
"data-testid": `thread-messages-${data.external_id}`,
|
|
4535
|
+
children: [
|
|
4536
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageSquare, { className: "size-3", "aria-hidden": true }),
|
|
4537
|
+
data.message_count
|
|
4538
|
+
]
|
|
4539
|
+
}
|
|
4540
|
+
),
|
|
4472
4541
|
(data.is_owner !== false || liveProps.current.canEditShared) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4473
4542
|
"button",
|
|
4474
4543
|
{
|
|
@@ -4482,72 +4551,51 @@ function ConversationListView(p) {
|
|
|
4482
4551
|
)
|
|
4483
4552
|
] })
|
|
4484
4553
|
},
|
|
4485
|
-
|
|
4554
|
+
// Labels only when a thread has some (an empty column only takes the names' room), and never
|
|
4555
|
+
// on a phone, where the status is what a row must say.
|
|
4556
|
+
...liveProps.current.renderLabels && hasLabels && !isPhone ? [
|
|
4486
4557
|
{
|
|
4487
4558
|
colId: "labels",
|
|
4488
4559
|
headerName: "Labels",
|
|
4489
|
-
|
|
4560
|
+
flex: 0.5,
|
|
4561
|
+
minWidth: 100,
|
|
4490
4562
|
valueGetter: ({ data }) => data ? liveProps.current.labelText?.(data) ?? "" : "",
|
|
4491
4563
|
cellRenderer: ({ data }) => data && liveProps.current.renderLabels?.(data)
|
|
4492
4564
|
}
|
|
4493
4565
|
] : [],
|
|
4494
|
-
...liveProps.current.renderBy || liveProps.current.renderOwner ? [
|
|
4495
|
-
{
|
|
4496
|
-
colId: liveProps.current.renderBy ? "by" : "owner",
|
|
4497
|
-
headerName: liveProps.current.renderBy ? "Last message by" : "Owner",
|
|
4498
|
-
width: 160,
|
|
4499
|
-
hide: isPhone,
|
|
4500
|
-
cellRenderer: ({ data }) => data && (liveProps.current.renderBy || liveProps.current.renderOwner)?.(data)
|
|
4501
|
-
}
|
|
4502
|
-
] : [],
|
|
4503
4566
|
{
|
|
4504
4567
|
colId: "status",
|
|
4505
4568
|
headerName: "Status",
|
|
4506
|
-
width:
|
|
4507
|
-
hide: isPhone,
|
|
4569
|
+
width: isPhone ? 170 : 240,
|
|
4508
4570
|
valueGetter: ({ data }) => data?.status,
|
|
4509
|
-
cellRenderer: ({ data }) => data && (liveProps.current.renderStatus ? liveProps.current.renderStatus(data) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
4510
|
-
|
|
4511
|
-
|
|
4512
|
-
|
|
4513
|
-
|
|
4514
|
-
|
|
4515
|
-
width: 110,
|
|
4516
|
-
hide: isPhone,
|
|
4517
|
-
valueFormatter: ({ value }) => value == null ? "\u2014" : String(value),
|
|
4518
|
-
cellClass: "text-muted-foreground"
|
|
4571
|
+
cellRenderer: ({ data }) => data && (liveProps.current.renderStatus ? liveProps.current.renderStatus(data) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
4572
|
+
ThreadStatusLine,
|
|
4573
|
+
{
|
|
4574
|
+
state: data.status === "done" ? "done" : data.status === "todo" ? "todo" : "ready"
|
|
4575
|
+
}
|
|
4576
|
+
))
|
|
4519
4577
|
},
|
|
4520
|
-
|
|
4578
|
+
// Who spoke last (their face) and when: the two read together, at the row's end.
|
|
4579
|
+
...liveProps.current.renderBy || liveProps.current.renderOwner ? [
|
|
4521
4580
|
{
|
|
4522
|
-
colId: "
|
|
4523
|
-
headerName: "
|
|
4524
|
-
width:
|
|
4581
|
+
colId: liveProps.current.renderBy ? "by" : "owner",
|
|
4582
|
+
headerName: liveProps.current.renderBy ? "By" : "Owner",
|
|
4583
|
+
width: 64,
|
|
4525
4584
|
hide: isPhone,
|
|
4526
|
-
cellClass: "cell-hcenter",
|
|
4527
4585
|
sortable: false,
|
|
4528
4586
|
resizable: false,
|
|
4529
|
-
cellRenderer: ({ data }) => data &&
|
|
4530
|
-
ui.VisibilityToggle,
|
|
4531
|
-
{
|
|
4532
|
-
items: [data],
|
|
4533
|
-
showLabel: true,
|
|
4534
|
-
label: data.is_shared ? "Workspace" : "Only Me",
|
|
4535
|
-
disabled: data.is_owner === false,
|
|
4536
|
-
onToggle: () => liveProps.current.onToggleShared?.(data, !data.is_shared),
|
|
4537
|
-
"data-testid": `thread-shared-${data.external_id}`
|
|
4538
|
-
}
|
|
4539
|
-
)
|
|
4587
|
+
cellRenderer: ({ data }) => data && (liveProps.current.renderBy || liveProps.current.renderOwner)?.(data)
|
|
4540
4588
|
}
|
|
4541
4589
|
] : [],
|
|
4542
4590
|
{
|
|
4543
4591
|
colId: "activity",
|
|
4544
4592
|
initialSort: "desc",
|
|
4545
|
-
headerName: "
|
|
4546
|
-
width:
|
|
4593
|
+
headerName: "Updated",
|
|
4594
|
+
width: 128,
|
|
4547
4595
|
hide: isPhone,
|
|
4548
4596
|
valueGetter: ({ data }) => data?.last_message_updated_at || data?.updated_at || data?.created_at || "",
|
|
4549
4597
|
valueFormatter: ({ value }) => value ? liveProps.current.formatDate(value) : "\u2014",
|
|
4550
|
-
cellClass: "text-muted-foreground"
|
|
4598
|
+
cellClass: "flex items-center text-xs text-muted-foreground/80"
|
|
4551
4599
|
}
|
|
4552
4600
|
],
|
|
4553
4601
|
[
|
|
@@ -4556,10 +4604,14 @@ function ConversationListView(p) {
|
|
|
4556
4604
|
Boolean(p.renderOwner),
|
|
4557
4605
|
Boolean(p.renderBy),
|
|
4558
4606
|
Boolean(p.renderStatus),
|
|
4559
|
-
|
|
4560
|
-
|
|
4607
|
+
isPhone,
|
|
4608
|
+
hasLabels
|
|
4561
4609
|
]
|
|
4562
4610
|
);
|
|
4611
|
+
const centred = react.useMemo(
|
|
4612
|
+
() => columns.map((c) => ({ cellClass: "flex items-center", ...c })),
|
|
4613
|
+
[columns]
|
|
4614
|
+
);
|
|
4563
4615
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-0 flex-1 flex-col", "data-testid": "conversation-list-view", children: [
|
|
4564
4616
|
p.showHeader !== false && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4565
4617
|
chunk7RGLTF76_cjs.TabHeader,
|
|
@@ -4604,7 +4656,7 @@ function ConversationListView(p) {
|
|
|
4604
4656
|
{
|
|
4605
4657
|
testId: "threads-grid",
|
|
4606
4658
|
items: rows,
|
|
4607
|
-
columnDefs:
|
|
4659
|
+
columnDefs: centred,
|
|
4608
4660
|
getItemId: (row) => row.external_id,
|
|
4609
4661
|
getRowTestId: (row) => `thread-row-${row.external_id}`,
|
|
4610
4662
|
onRowClick: p.onOpen,
|
|
@@ -4613,7 +4665,7 @@ function ConversationListView(p) {
|
|
|
4613
4665
|
loadingMessage: "Loading threads\u2026",
|
|
4614
4666
|
emptyState: {
|
|
4615
4667
|
title: q ? "No threads match" : "No conversations yet",
|
|
4616
|
-
message: "Use New Task to ask ARBI, bring in people, or both."
|
|
4668
|
+
message: p.footer ? "Type below to ask ARBI, bring in people, or both." : "Use New Task to ask ARBI, bring in people, or both."
|
|
4617
4669
|
},
|
|
4618
4670
|
selection: p.selectionActions ? {
|
|
4619
4671
|
mode: "multiple",
|
|
@@ -4630,6 +4682,7 @@ function ConversationListView(p) {
|
|
|
4630
4682
|
}
|
|
4631
4683
|
}
|
|
4632
4684
|
) }),
|
|
4685
|
+
p.footer,
|
|
4633
4686
|
p.selectionActions && /* @__PURE__ */ jsxRuntime.jsx(chunkV4ISCZJ7_cjs.SelectionBar, { count: selectedRows.length, onClear: () => setSelected(/* @__PURE__ */ new Set()), children: (compact) => p.selectionActions?.(selectedRows, compact, () => setSelected(/* @__PURE__ */ new Set())) })
|
|
4634
4687
|
] });
|
|
4635
4688
|
}
|
|
@@ -4657,7 +4710,7 @@ function TaskStartDialog({
|
|
|
4657
4710
|
setSourceOpen(false);
|
|
4658
4711
|
}, [open]);
|
|
4659
4712
|
const textareaRef = react.useRef(null);
|
|
4660
|
-
const mention =
|
|
4713
|
+
const mention = chunkHM23LXUP_cjs.useMentionAutocomplete({
|
|
4661
4714
|
value: prompt,
|
|
4662
4715
|
onValueChange: setPrompt,
|
|
4663
4716
|
candidates: people,
|
|
@@ -5008,7 +5061,7 @@ function workflowTaskFields(workflow, inputs, name, context) {
|
|
|
5008
5061
|
}
|
|
5009
5062
|
const typed = name?.trim();
|
|
5010
5063
|
if (workflow.options?.agent === false) {
|
|
5011
|
-
const message =
|
|
5064
|
+
const message = chunkHM23LXUP_cjs.composeWorkflowPrompt(workflow, inputs, context);
|
|
5012
5065
|
return { name: typed || message, prompt: "", skill_ref: null, skill_inputs: null };
|
|
5013
5066
|
}
|
|
5014
5067
|
const derived = typed || deriveWorkflowName(workflow, inputs);
|
|
@@ -5022,7 +5075,7 @@ function workflowTaskFields(workflow, inputs, name, context) {
|
|
|
5022
5075
|
}
|
|
5023
5076
|
return {
|
|
5024
5077
|
name: derived,
|
|
5025
|
-
prompt:
|
|
5078
|
+
prompt: chunkHM23LXUP_cjs.composeWorkflowPrompt(workflow, inputs, context),
|
|
5026
5079
|
skill_ref: null,
|
|
5027
5080
|
// The files a run is bound to travel in the saved inputs, whatever the template: the server binds
|
|
5028
5081
|
// the run to the ids listed under any input's `documents`.
|
|
@@ -6202,7 +6255,7 @@ function TaskActivityDialog({
|
|
|
6202
6255
|
testId,
|
|
6203
6256
|
...timeline
|
|
6204
6257
|
}) {
|
|
6205
|
-
const l = { ...
|
|
6258
|
+
const l = { ...chunk7FZWNDPU_cjs.DEFAULT_TASK_ACTIVITY_LABELS, ...labels };
|
|
6206
6259
|
const id = chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "task-activity" });
|
|
6207
6260
|
const count = events?.length ?? 0;
|
|
6208
6261
|
const scrollToEnd = react.useCallback(
|
|
@@ -6217,7 +6270,7 @@ function TaskActivityDialog({
|
|
|
6217
6270
|
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "truncate", children: taskName })
|
|
6218
6271
|
] }),
|
|
6219
6272
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-h-[55dvh] overflow-y-auto pr-1", "data-testid": `${id}-scroll`, children: [
|
|
6220
|
-
isLoading && !events ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.loading }) : isError && !events ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-destructive", children: l.error }) : count === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.empty }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
6273
|
+
isLoading && !events ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.loading }) : isError && !events ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-destructive", children: l.error }) : count === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.empty }) : /* @__PURE__ */ jsxRuntime.jsx(chunk7FZWNDPU_cjs.TaskActivityTimeline, { events: events ?? [], labels, testId: id, ...timeline }),
|
|
6221
6274
|
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: scrollToEnd })
|
|
6222
6275
|
] })
|
|
6223
6276
|
] }) });
|
|
@@ -6253,24 +6306,28 @@ function TaskFlow({
|
|
|
6253
6306
|
const el = e.currentTarget;
|
|
6254
6307
|
following.current = el.scrollWidth - el.scrollLeft - el.clientWidth < 24;
|
|
6255
6308
|
},
|
|
6256
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "flex w-max min-w-full items-center gap-1", children: items.map((item, i) => {
|
|
6257
|
-
const
|
|
6258
|
-
|
|
6259
|
-
|
|
6260
|
-
|
|
6261
|
-
|
|
6309
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "flex w-max min-w-full items-center gap-1 py-0.5", children: items.map((item, i) => {
|
|
6310
|
+
const chip = (props) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
6311
|
+
chunkHM23LXUP_cjs.StepChip,
|
|
6312
|
+
{
|
|
6313
|
+
kind: "adhoc",
|
|
6314
|
+
phase: "ready",
|
|
6315
|
+
icon: item.avatar,
|
|
6316
|
+
label: item.label,
|
|
6317
|
+
current: item.current,
|
|
6318
|
+
labelClassName: "max-w-32 truncate",
|
|
6319
|
+
title: item.description ?? item.label,
|
|
6320
|
+
className: "shrink-0 [&_.wf-badge]:bg-transparent",
|
|
6321
|
+
...props,
|
|
6322
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6262
6323
|
"span",
|
|
6263
6324
|
{
|
|
6264
|
-
className: "
|
|
6325
|
+
className: "shrink-0 text-[10px] font-normal text-muted-foreground",
|
|
6265
6326
|
title: item.exactTime,
|
|
6266
6327
|
children: item.time
|
|
6267
6328
|
}
|
|
6268
6329
|
)
|
|
6269
|
-
|
|
6270
|
-
] });
|
|
6271
|
-
const cls = ui.cn(
|
|
6272
|
-
"flex shrink-0 items-center gap-1.5 rounded-md px-1 py-0.5",
|
|
6273
|
-
item.current && "bg-accent text-accent-foreground"
|
|
6330
|
+
}
|
|
6274
6331
|
);
|
|
6275
6332
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6276
6333
|
"li",
|
|
@@ -6278,26 +6335,11 @@ function TaskFlow({
|
|
|
6278
6335
|
className: "flex shrink-0 items-center gap-1",
|
|
6279
6336
|
"data-testid": `thread-flow-${item.id}`,
|
|
6280
6337
|
children: [
|
|
6281
|
-
i > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6282
|
-
item.onSelect ? /* @__PURE__ */ jsxRuntime.
|
|
6283
|
-
|
|
6284
|
-
{
|
|
6285
|
-
className: ui.cn(cls, "hover:bg-muted"),
|
|
6286
|
-
onClick: item.onSelect,
|
|
6287
|
-
title: item.description ?? item.label,
|
|
6288
|
-
children: content
|
|
6289
|
-
}
|
|
6290
|
-
) : item.detail ? /* @__PURE__ */ jsxRuntime.jsxs(ui.Popover, { children: [
|
|
6291
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6292
|
-
"button",
|
|
6293
|
-
{
|
|
6294
|
-
className: ui.cn(cls, "hover:bg-muted"),
|
|
6295
|
-
title: item.description ?? item.label,
|
|
6296
|
-
children: content
|
|
6297
|
-
}
|
|
6298
|
-
) }),
|
|
6338
|
+
i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "wf-link wf-kind-adhoc w-3 flex-none", "data-done": true }),
|
|
6339
|
+
item.onSelect ? chip({ onClick: item.onSelect }) : item.detail ? /* @__PURE__ */ jsxRuntime.jsxs(ui.Popover, { children: [
|
|
6340
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.PopoverTrigger, { asChild: true, children: chip({}) }),
|
|
6299
6341
|
/* @__PURE__ */ jsxRuntime.jsx(ui.PopoverContent, { className: "max-h-72 overflow-y-auto text-sm whitespace-pre-wrap", children: item.detail })
|
|
6300
|
-
] }) :
|
|
6342
|
+
] }) : chip({ inert: true })
|
|
6301
6343
|
]
|
|
6302
6344
|
},
|
|
6303
6345
|
item.id
|
|
@@ -6307,6 +6349,54 @@ function TaskFlow({
|
|
|
6307
6349
|
);
|
|
6308
6350
|
}
|
|
6309
6351
|
function ThreadActivity({ item, children }) {
|
|
6352
|
+
if (item.stepChip) {
|
|
6353
|
+
const { kind, phase, icon, document } = item.stepChip;
|
|
6354
|
+
const done = phase === "done" || phase === "skipped";
|
|
6355
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6356
|
+
"div",
|
|
6357
|
+
{
|
|
6358
|
+
className: ui.cn(`wf-kind-${kind}`, "flex flex-col items-center gap-1 px-3 py-2"),
|
|
6359
|
+
"data-testid": `thread-activity-${item.id}`,
|
|
6360
|
+
title: item.description,
|
|
6361
|
+
children: [
|
|
6362
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full max-w-xl items-center gap-2", children: [
|
|
6363
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "wf-link", "data-done": done || void 0 }),
|
|
6364
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6365
|
+
chunkHM23LXUP_cjs.StepChip,
|
|
6366
|
+
{
|
|
6367
|
+
inert: true,
|
|
6368
|
+
kind,
|
|
6369
|
+
phase,
|
|
6370
|
+
icon,
|
|
6371
|
+
label: item.label,
|
|
6372
|
+
className: ui.cn("shrink-0", document && "rounded-r-none"),
|
|
6373
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6374
|
+
"time",
|
|
6375
|
+
{
|
|
6376
|
+
className: "shrink-0 text-[10px] font-normal text-muted-foreground",
|
|
6377
|
+
title: item.exactTime,
|
|
6378
|
+
children: item.time
|
|
6379
|
+
}
|
|
6380
|
+
)
|
|
6381
|
+
}
|
|
6382
|
+
),
|
|
6383
|
+
document && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6384
|
+
chunkHM23LXUP_cjs.StepDocumentButton,
|
|
6385
|
+
{
|
|
6386
|
+
kind,
|
|
6387
|
+
name: document.name,
|
|
6388
|
+
onOpen: document.onOpen,
|
|
6389
|
+
showName: true,
|
|
6390
|
+
testId: `thread-activity-${item.id}-open-document`
|
|
6391
|
+
}
|
|
6392
|
+
),
|
|
6393
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "wf-link", "data-done": done || void 0 })
|
|
6394
|
+
] }),
|
|
6395
|
+
children
|
|
6396
|
+
]
|
|
6397
|
+
}
|
|
6398
|
+
);
|
|
6399
|
+
}
|
|
6310
6400
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center px-3 py-2", "data-testid": `thread-activity-${item.id}`, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6311
6401
|
"div",
|
|
6312
6402
|
{
|
|
@@ -6324,6 +6414,298 @@ function ThreadActivity({ item, children }) {
|
|
|
6324
6414
|
}
|
|
6325
6415
|
) });
|
|
6326
6416
|
}
|
|
6417
|
+
var DEFAULT_THREAD_LAUNCHER_LABELS = {
|
|
6418
|
+
placeholder: "Start a new thread: ask ARBI, or @mention people\u2026",
|
|
6419
|
+
todoPlaceholder: "What needs doing?",
|
|
6420
|
+
withArbi: "With ARBI",
|
|
6421
|
+
todo: "To-do",
|
|
6422
|
+
source: "Who does the work",
|
|
6423
|
+
start: "Start",
|
|
6424
|
+
schedule: "Schedule",
|
|
6425
|
+
started: "Started \u201C{title}\u201D",
|
|
6426
|
+
open: "Open",
|
|
6427
|
+
dismiss: "Dismiss",
|
|
6428
|
+
shared: "Workspace",
|
|
6429
|
+
private: "Only Me"
|
|
6430
|
+
};
|
|
6431
|
+
var NO_PEOPLE2 = [];
|
|
6432
|
+
function ThreadLauncher({
|
|
6433
|
+
workflows,
|
|
6434
|
+
people = NO_PEOPLE2,
|
|
6435
|
+
isPending,
|
|
6436
|
+
error,
|
|
6437
|
+
startLabel,
|
|
6438
|
+
onStart,
|
|
6439
|
+
onLater,
|
|
6440
|
+
onOpen,
|
|
6441
|
+
autoFocus,
|
|
6442
|
+
labels,
|
|
6443
|
+
className
|
|
6444
|
+
}) {
|
|
6445
|
+
const l = { ...DEFAULT_THREAD_LAUNCHER_LABELS, ...labels };
|
|
6446
|
+
const [prompt, setPrompt] = react.useState("");
|
|
6447
|
+
const [choice, setChoice] = react.useState("prompt");
|
|
6448
|
+
const [shared, setShared] = react.useState(false);
|
|
6449
|
+
const [started, setStarted] = react.useState(null);
|
|
6450
|
+
const textareaRef = react.useRef(null);
|
|
6451
|
+
const mention = chunkHM23LXUP_cjs.useMentionAutocomplete({
|
|
6452
|
+
value: prompt,
|
|
6453
|
+
onValueChange: setPrompt,
|
|
6454
|
+
candidates: people,
|
|
6455
|
+
textareaRef
|
|
6456
|
+
});
|
|
6457
|
+
const todo = choice === "todo";
|
|
6458
|
+
const workflowId = choice === "prompt" || todo ? null : choice;
|
|
6459
|
+
const workflow = workflows.find((w) => w.external_id === workflowId);
|
|
6460
|
+
const valid = workflowId ? Boolean(workflow) : Boolean(prompt.trim());
|
|
6461
|
+
const values = {
|
|
6462
|
+
prompt: prompt.trim(),
|
|
6463
|
+
workflowId,
|
|
6464
|
+
todo,
|
|
6465
|
+
shared,
|
|
6466
|
+
mentions: chunk7UTB4PHM_cjs.toMessageMentions(chunk7UTB4PHM_cjs.extractMentions(prompt, people))
|
|
6467
|
+
};
|
|
6468
|
+
const start = async () => {
|
|
6469
|
+
if (!valid || isPending) return;
|
|
6470
|
+
try {
|
|
6471
|
+
const made = await onStart(values);
|
|
6472
|
+
setStarted(made ?? null);
|
|
6473
|
+
setPrompt("");
|
|
6474
|
+
setChoice("prompt");
|
|
6475
|
+
textareaRef.current?.focus();
|
|
6476
|
+
} catch {
|
|
6477
|
+
}
|
|
6478
|
+
};
|
|
6479
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6480
|
+
"div",
|
|
6481
|
+
{
|
|
6482
|
+
className: ui.cn("shrink-0 border-t border-border bg-background px-3 pb-3 pt-2", className),
|
|
6483
|
+
"data-testid": "thread-launcher",
|
|
6484
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto w-full max-w-3xl", children: [
|
|
6485
|
+
started && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6486
|
+
"div",
|
|
6487
|
+
{
|
|
6488
|
+
className: "mb-2 flex min-w-0 items-center gap-2 text-xs",
|
|
6489
|
+
role: "status",
|
|
6490
|
+
"data-testid": "thread-launcher-started",
|
|
6491
|
+
children: [
|
|
6492
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-4 shrink-0 items-center justify-center rounded-full bg-emerald-600 text-white dark:bg-emerald-500", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-3", strokeWidth: 3 }) }),
|
|
6493
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate text-muted-foreground", children: l.started.replace("{title}", started.title) }),
|
|
6494
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
6495
|
+
ui.Button,
|
|
6496
|
+
{
|
|
6497
|
+
variant: "link",
|
|
6498
|
+
size: "sm",
|
|
6499
|
+
className: "h-auto shrink-0 gap-0.5 p-0 text-xs",
|
|
6500
|
+
onClick: () => onOpen(started.id),
|
|
6501
|
+
"data-testid": "thread-launcher-open",
|
|
6502
|
+
children: [
|
|
6503
|
+
l.open,
|
|
6504
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUpRight, { className: "size-3" })
|
|
6505
|
+
]
|
|
6506
|
+
}
|
|
6507
|
+
),
|
|
6508
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6509
|
+
"button",
|
|
6510
|
+
{
|
|
6511
|
+
type: "button",
|
|
6512
|
+
className: "ml-auto shrink-0 rounded p-0.5 text-muted-foreground hover:bg-muted hover:text-foreground",
|
|
6513
|
+
"aria-label": l.dismiss,
|
|
6514
|
+
onClick: () => setStarted(null),
|
|
6515
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-3.5" })
|
|
6516
|
+
}
|
|
6517
|
+
)
|
|
6518
|
+
]
|
|
6519
|
+
}
|
|
6520
|
+
),
|
|
6521
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-border bg-card shadow-sm focus-within:border-ring", children: [
|
|
6522
|
+
workflow ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-3 pt-2.5 text-sm font-medium", "data-testid": "thread-launcher-workflow", children: workflow.name }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
6523
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6524
|
+
ui.Textarea,
|
|
6525
|
+
{
|
|
6526
|
+
ref: textareaRef,
|
|
6527
|
+
value: prompt,
|
|
6528
|
+
rows: 1,
|
|
6529
|
+
autoFocus,
|
|
6530
|
+
onChange: (event) => mention.onValueChange(event.target.value),
|
|
6531
|
+
onKeyDown: (event) => {
|
|
6532
|
+
mention.nav.handleKeyDown(event);
|
|
6533
|
+
if (event.defaultPrevented || mention.isOpen) return;
|
|
6534
|
+
if (event.key === "Enter" && !event.shiftKey && !event.nativeEvent.isComposing) {
|
|
6535
|
+
event.preventDefault();
|
|
6536
|
+
void start();
|
|
6537
|
+
}
|
|
6538
|
+
},
|
|
6539
|
+
...mention.isOpen ? mention.nav.comboboxProps : {},
|
|
6540
|
+
...mention.textareaProps,
|
|
6541
|
+
disabled: isPending,
|
|
6542
|
+
placeholder: todo ? l.todoPlaceholder : l.placeholder,
|
|
6543
|
+
"aria-label": todo ? l.todoPlaceholder : l.placeholder,
|
|
6544
|
+
className: "field-sizing-content max-h-40 min-h-10 resize-none border-0 bg-transparent px-3 pt-2.5 shadow-none focus-visible:ring-0",
|
|
6545
|
+
"data-testid": "thread-launcher-input"
|
|
6546
|
+
}
|
|
6547
|
+
),
|
|
6548
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6549
|
+
chunk7UTB4PHM_cjs.MentionMenu,
|
|
6550
|
+
{
|
|
6551
|
+
open: mention.isOpen,
|
|
6552
|
+
placement: "above",
|
|
6553
|
+
items: mention.items,
|
|
6554
|
+
selectedIndex: mention.nav.selectedIndex,
|
|
6555
|
+
setSelectedIndex: mention.nav.setSelectedIndex,
|
|
6556
|
+
listboxId: mention.nav.listboxId,
|
|
6557
|
+
onSelect: mention.pick
|
|
6558
|
+
}
|
|
6559
|
+
)
|
|
6560
|
+
] }),
|
|
6561
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 px-2 pb-1.5", children: [
|
|
6562
|
+
/* @__PURE__ */ jsxRuntime.jsxs(ui.Select, { value: choice, onValueChange: setChoice, disabled: isPending, children: [
|
|
6563
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6564
|
+
ui.SelectTrigger,
|
|
6565
|
+
{
|
|
6566
|
+
"aria-label": l.source,
|
|
6567
|
+
className: "h-7 w-auto max-w-[45%] border-0 bg-transparent px-1.5 text-xs font-normal text-muted-foreground shadow-none hover:bg-muted",
|
|
6568
|
+
"data-testid": "thread-launcher-source",
|
|
6569
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, {})
|
|
6570
|
+
}
|
|
6571
|
+
),
|
|
6572
|
+
/* @__PURE__ */ jsxRuntime.jsxs(ui.SelectContent, { children: [
|
|
6573
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: "prompt", children: l.withArbi }),
|
|
6574
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: "todo", children: l.todo }),
|
|
6575
|
+
workflows.map((w) => /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: w.external_id, children: w.name }, w.external_id))
|
|
6576
|
+
] })
|
|
6577
|
+
] }),
|
|
6578
|
+
error && /* @__PURE__ */ jsxRuntime.jsx("p", { role: "alert", className: "min-w-0 truncate text-xs text-destructive", title: error, children: error }),
|
|
6579
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-auto flex items-center gap-1.5", children: [
|
|
6580
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6581
|
+
ui.VisibilityToggle,
|
|
6582
|
+
{
|
|
6583
|
+
items: { shared },
|
|
6584
|
+
onToggle: setShared,
|
|
6585
|
+
label: shared ? l.shared : l.private,
|
|
6586
|
+
disabled: isPending,
|
|
6587
|
+
"data-testid": "thread-launcher-visibility"
|
|
6588
|
+
}
|
|
6589
|
+
),
|
|
6590
|
+
onLater && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6591
|
+
ui.Button,
|
|
6592
|
+
{
|
|
6593
|
+
variant: "ghost",
|
|
6594
|
+
size: "icon",
|
|
6595
|
+
className: "size-8 text-muted-foreground",
|
|
6596
|
+
disabled: !valid || isPending,
|
|
6597
|
+
onClick: () => onLater(values),
|
|
6598
|
+
"aria-label": l.schedule,
|
|
6599
|
+
title: l.schedule,
|
|
6600
|
+
"data-testid": "thread-launcher-later",
|
|
6601
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CalendarClock, { className: "size-4" })
|
|
6602
|
+
}
|
|
6603
|
+
),
|
|
6604
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6605
|
+
ui.Button,
|
|
6606
|
+
{
|
|
6607
|
+
size: "icon",
|
|
6608
|
+
className: "size-8",
|
|
6609
|
+
disabled: !valid || isPending,
|
|
6610
|
+
onClick: () => void start(),
|
|
6611
|
+
"aria-label": startLabel ?? l.start,
|
|
6612
|
+
title: startLabel ?? l.start,
|
|
6613
|
+
"data-testid": "thread-launcher-start",
|
|
6614
|
+
children: isPending ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-4 animate-spin" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SendHorizontal, { className: "size-4" })
|
|
6615
|
+
}
|
|
6616
|
+
)
|
|
6617
|
+
] })
|
|
6618
|
+
] })
|
|
6619
|
+
] })
|
|
6620
|
+
] })
|
|
6621
|
+
}
|
|
6622
|
+
);
|
|
6623
|
+
}
|
|
6624
|
+
var DEFAULT_WORKFLOW_RUN_STATUS_LABELS = {
|
|
6625
|
+
allDone: "all {count} steps done"
|
|
6626
|
+
};
|
|
6627
|
+
var SEGMENT = {
|
|
6628
|
+
done: "bg-[hsl(var(--wf-accent))]",
|
|
6629
|
+
running: "bg-[hsl(var(--wf-accent))] animate-pulse",
|
|
6630
|
+
waiting: "bg-[hsl(var(--wf-accent)/0.3)] ring-1 ring-inset ring-[hsl(var(--wf-accent))]",
|
|
6631
|
+
failed: "bg-destructive",
|
|
6632
|
+
skipped: "ring-1 ring-inset ring-muted-foreground/40",
|
|
6633
|
+
ready: "ring-1 ring-inset ring-[hsl(var(--wf-accent)/0.7)]",
|
|
6634
|
+
blocked: "ring-1 ring-inset ring-[hsl(var(--wf-accent)/0.7)]"
|
|
6635
|
+
};
|
|
6636
|
+
function WorkflowRunStatus({
|
|
6637
|
+
steps,
|
|
6638
|
+
states,
|
|
6639
|
+
assigneeOf,
|
|
6640
|
+
labels,
|
|
6641
|
+
isLoading,
|
|
6642
|
+
workStatus,
|
|
6643
|
+
maxSegments = 7,
|
|
6644
|
+
className,
|
|
6645
|
+
testId = "workflow-run-status"
|
|
6646
|
+
}) {
|
|
6647
|
+
const l = { ...DEFAULT_WORKFLOW_RUN_STATUS_LABELS, ...labels };
|
|
6648
|
+
const ordered = chunkHM23LXUP_cjs.stepLevels(steps).flat();
|
|
6649
|
+
const phaseOf = (id) => isLoading ? "blocked" : chunkHM23LXUP_cjs.stepPhase(steps, states, id);
|
|
6650
|
+
const finished = !isLoading && chunkHM23LXUP_cjs.isRunFinished(steps, states);
|
|
6651
|
+
const atId = finished || isLoading ? void 0 : chunk7FZWNDPU_cjs.activeStepId(chunkHM23LXUP_cjs.stepLevels(steps), phaseOf);
|
|
6652
|
+
const at = ordered.find((s) => s.id === atId);
|
|
6653
|
+
const phase = at ? phaseOf(at.id) : "done";
|
|
6654
|
+
const assignee = at && ["ready", "waiting"].includes(phase) ? assigneeOf?.(at) : void 0;
|
|
6655
|
+
const state = finished ? workStatus === "done" ? "done" : "ready" : phase === "running" ? "generating" : phase === "failed" ? "failed" : assignee ? "needs" : "next";
|
|
6656
|
+
const detail = at ? at.title : finished ? (l.allDone ?? "").replace("{count}", String(ordered.length)) : void 0;
|
|
6657
|
+
const n = ordered.length;
|
|
6658
|
+
const size = Math.min(maxSegments, n);
|
|
6659
|
+
const centre = at ? ordered.indexOf(at) : n - 1;
|
|
6660
|
+
const start = Math.max(0, Math.min(n - size, centre - Math.floor(size / 2)));
|
|
6661
|
+
const shown = ordered.slice(start, start + size);
|
|
6662
|
+
const ellipsis = (side) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
6663
|
+
"span",
|
|
6664
|
+
{
|
|
6665
|
+
className: "px-0.5 text-[10px] leading-none text-muted-foreground",
|
|
6666
|
+
"data-testid": `${testId}-more-${side}`,
|
|
6667
|
+
children: "\u2026"
|
|
6668
|
+
}
|
|
6669
|
+
);
|
|
6670
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6671
|
+
"div",
|
|
6672
|
+
{
|
|
6673
|
+
className: ui.cn("flex min-w-0 flex-col justify-center gap-1", className),
|
|
6674
|
+
"data-testid": testId,
|
|
6675
|
+
"data-phase": phase,
|
|
6676
|
+
children: [
|
|
6677
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-0.5", "aria-hidden": true, children: [
|
|
6678
|
+
start > 0 && ellipsis("before"),
|
|
6679
|
+
shown.map((s) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
6680
|
+
"span",
|
|
6681
|
+
{
|
|
6682
|
+
className: ui.cn(
|
|
6683
|
+
`wf-kind-${chunkHM23LXUP_cjs.stepKindOf(s)}`,
|
|
6684
|
+
"h-1.5 w-3 shrink-0 rounded-full",
|
|
6685
|
+
SEGMENT[phaseOf(s.id)],
|
|
6686
|
+
s.id === atId && "w-5"
|
|
6687
|
+
),
|
|
6688
|
+
title: s.title,
|
|
6689
|
+
"data-phase": phaseOf(s.id)
|
|
6690
|
+
},
|
|
6691
|
+
s.id
|
|
6692
|
+
)),
|
|
6693
|
+
start + size < n && ellipsis("after")
|
|
6694
|
+
] }),
|
|
6695
|
+
isLoading ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs leading-tight", children: "\xA0" }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
6696
|
+
ThreadStatusLine,
|
|
6697
|
+
{
|
|
6698
|
+
state,
|
|
6699
|
+
name: assignee,
|
|
6700
|
+
detail,
|
|
6701
|
+
labels,
|
|
6702
|
+
testId: `${testId}-line`
|
|
6703
|
+
}
|
|
6704
|
+
)
|
|
6705
|
+
]
|
|
6706
|
+
}
|
|
6707
|
+
);
|
|
6708
|
+
}
|
|
6327
6709
|
var STEP_KINDS = /* @__PURE__ */ new Set([
|
|
6328
6710
|
"step_started",
|
|
6329
6711
|
"step_waiting",
|
|
@@ -6344,7 +6726,7 @@ function groupThreadActivity(steps, items) {
|
|
|
6344
6726
|
continue;
|
|
6345
6727
|
}
|
|
6346
6728
|
if (current === void 0) out.before.push(item);
|
|
6347
|
-
else if (
|
|
6729
|
+
else if (chunkHM23LXUP_cjs.isRunFinished(steps, states)) out.after.push(item);
|
|
6348
6730
|
else {
|
|
6349
6731
|
const status = states[current]?.status;
|
|
6350
6732
|
const at = status === "done" || status === "skipped" ? steps.find((s) => !["done", "skipped"].includes(states[s.id]?.status ?? ""))?.id ?? current : current;
|
|
@@ -6355,13 +6737,21 @@ function groupThreadActivity(steps, items) {
|
|
|
6355
6737
|
}
|
|
6356
6738
|
var DEFAULT_WORKFLOW_THREAD_STRIP_LABELS = {
|
|
6357
6739
|
happened: "{count} in this step",
|
|
6740
|
+
updates: "{count} updates in this step",
|
|
6358
6741
|
nothingYet: "Nothing here yet.",
|
|
6359
6742
|
skip: "Skip this step",
|
|
6360
6743
|
startedBy: "Started by {step} in {thread}",
|
|
6361
6744
|
signalled: "This step signalled \u201C{signal}\u201D",
|
|
6362
6745
|
linkedRun: "Started on \u201C{signal}\u201D: open its thread",
|
|
6363
6746
|
waitingFor: "Waiting for {name}",
|
|
6364
|
-
sentBack: "Sent back to be done again"
|
|
6747
|
+
sentBack: "Sent back to be done again",
|
|
6748
|
+
started: "Started",
|
|
6749
|
+
after: "After",
|
|
6750
|
+
beforeSteps: "Before the first step",
|
|
6751
|
+
afterSteps: "After the last step",
|
|
6752
|
+
kinds: chunkHM23LXUP_cjs.DEFAULT_STEP_KIND_LABELS,
|
|
6753
|
+
documents: chunkHM23LXUP_cjs.DEFAULT_STEP_DOCUMENT_LABELS,
|
|
6754
|
+
record: chunkHM23LXUP_cjs.DEFAULT_STEP_RECORD_LABELS
|
|
6365
6755
|
};
|
|
6366
6756
|
function WorkflowThreadStartedBy({
|
|
6367
6757
|
origin,
|
|
@@ -6431,7 +6821,7 @@ function Entry({ item }) {
|
|
|
6431
6821
|
)
|
|
6432
6822
|
] })
|
|
6433
6823
|
] });
|
|
6434
|
-
return item.onSelect ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
6824
|
+
return item.onSelect ? /* @__PURE__ */ jsxRuntime.jsx(ui.PopoverClose, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6435
6825
|
"button",
|
|
6436
6826
|
{
|
|
6437
6827
|
type: "button",
|
|
@@ -6440,7 +6830,77 @@ function Entry({ item }) {
|
|
|
6440
6830
|
"data-testid": `thread-flow-${item.id}`,
|
|
6441
6831
|
children: content
|
|
6442
6832
|
}
|
|
6443
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center gap-1.5 px-1 py-0.5", "data-testid": `thread-flow-${item.id}`, children: content });
|
|
6833
|
+
) }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center gap-1.5 px-1 py-0.5", "data-testid": `thread-flow-${item.id}`, children: content });
|
|
6834
|
+
}
|
|
6835
|
+
var BEADS_PX = 32;
|
|
6836
|
+
var DOC_BUTTON_PX = 34;
|
|
6837
|
+
function Beads({ items, label }) {
|
|
6838
|
+
if (!items.length) return null;
|
|
6839
|
+
const faces = /* @__PURE__ */ new Map();
|
|
6840
|
+
for (const item of items) {
|
|
6841
|
+
const key = item.actor ?? item.id;
|
|
6842
|
+
faces.delete(key);
|
|
6843
|
+
faces.set(key, item.avatar);
|
|
6844
|
+
}
|
|
6845
|
+
const shown = [...faces.entries()].slice(-3);
|
|
6846
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6847
|
+
"span",
|
|
6848
|
+
{
|
|
6849
|
+
className: "flex shrink-0 items-center gap-1",
|
|
6850
|
+
title: label.replace("{count}", String(items.length)),
|
|
6851
|
+
children: [
|
|
6852
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "wf-beads [&_svg]:size-4", "aria-hidden": true, children: shown.map(([key, avatar]) => /* @__PURE__ */ jsxRuntime.jsx("span", { children: avatar }, key)) }),
|
|
6853
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-normal tabular-nums text-muted-foreground", "aria-hidden": true, children: items.length }),
|
|
6854
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: label.replace("{count}", String(items.length)) })
|
|
6855
|
+
]
|
|
6856
|
+
}
|
|
6857
|
+
);
|
|
6858
|
+
}
|
|
6859
|
+
function PopoverHeading({
|
|
6860
|
+
kind,
|
|
6861
|
+
icon,
|
|
6862
|
+
overline,
|
|
6863
|
+
title
|
|
6864
|
+
}) {
|
|
6865
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ui.cn(`wf-kind-${kind}`, "flex items-center gap-2 px-1 pb-1"), children: [
|
|
6866
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "wf-badge flex size-7 shrink-0 items-center justify-center rounded-md [&_svg]:size-4", children: icon }),
|
|
6867
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "min-w-0", children: [
|
|
6868
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "wf-kind-text block truncate text-[10px] font-semibold uppercase tracking-wider", children: overline }),
|
|
6869
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "block truncate text-sm font-semibold leading-snug", children: title })
|
|
6870
|
+
] })
|
|
6871
|
+
] });
|
|
6872
|
+
}
|
|
6873
|
+
function EntriesChip({
|
|
6874
|
+
kind,
|
|
6875
|
+
icon,
|
|
6876
|
+
label,
|
|
6877
|
+
items,
|
|
6878
|
+
extra,
|
|
6879
|
+
heading,
|
|
6880
|
+
testId
|
|
6881
|
+
}) {
|
|
6882
|
+
const latest = items.at(-1);
|
|
6883
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(ui.Popover, { children: [
|
|
6884
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6885
|
+
chunkHM23LXUP_cjs.StepChip,
|
|
6886
|
+
{
|
|
6887
|
+
kind,
|
|
6888
|
+
phase: "ready",
|
|
6889
|
+
icon,
|
|
6890
|
+
label,
|
|
6891
|
+
labelClassName: "max-w-40 truncate",
|
|
6892
|
+
title: latest ? `${label} \xB7 ${latest.label} \xB7 ${latest.time}` : label,
|
|
6893
|
+
className: "shrink-0",
|
|
6894
|
+
"data-testid": testId,
|
|
6895
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Beads, { items, label: heading })
|
|
6896
|
+
}
|
|
6897
|
+
) }),
|
|
6898
|
+
/* @__PURE__ */ jsxRuntime.jsxs(ui.PopoverContent, { align: "start", className: "w-72 space-y-1 p-2", "data-testid": `${testId}-menu`, children: [
|
|
6899
|
+
/* @__PURE__ */ jsxRuntime.jsx(PopoverHeading, { kind, icon, overline: heading, title: label }),
|
|
6900
|
+
extra,
|
|
6901
|
+
items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(Entry, { item }, item.id))
|
|
6902
|
+
] })
|
|
6903
|
+
] });
|
|
6444
6904
|
}
|
|
6445
6905
|
function WorkflowThreadStrip({
|
|
6446
6906
|
steps,
|
|
@@ -6452,134 +6912,213 @@ function WorkflowThreadStrip({
|
|
|
6452
6912
|
signals = [],
|
|
6453
6913
|
startedBy,
|
|
6454
6914
|
assigneeOf,
|
|
6915
|
+
nameOfDoc,
|
|
6916
|
+
onOpenDocument,
|
|
6917
|
+
inputs = {},
|
|
6918
|
+
nameOf,
|
|
6455
6919
|
labels,
|
|
6456
6920
|
barLabels,
|
|
6457
6921
|
className
|
|
6458
6922
|
}) {
|
|
6459
6923
|
const l = { ...DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, ...labels };
|
|
6924
|
+
const barL = { ...chunk7FZWNDPU_cjs.DEFAULT_STEP_BAR_LABELS, ...barLabels };
|
|
6460
6925
|
const grouped = groupThreadActivity(steps, items);
|
|
6461
6926
|
const strays = signals.filter((s) => !steps.some((step) => step.id === s.step));
|
|
6462
|
-
const
|
|
6927
|
+
const link = /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "wf-link wf-kind-start max-w-6", "data-done": true });
|
|
6463
6928
|
const [selected, setSelected] = react.useState(null);
|
|
6464
6929
|
const [open, setOpen] = react.useState(null);
|
|
6465
|
-
const phaseOf = (id) =>
|
|
6930
|
+
const phaseOf = (id) => chunkHM23LXUP_cjs.stepPhase(steps, states, id);
|
|
6466
6931
|
const iconOf = (step) => step.icon && renderIcon ? renderIcon(step.icon) : void 0;
|
|
6932
|
+
const glyphOf = (step) => {
|
|
6933
|
+
const KindIcon = chunkHM23LXUP_cjs.STEP_KIND_ICONS[chunkHM23LXUP_cjs.stepKindOf(step)];
|
|
6934
|
+
return iconOf(step) ?? /* @__PURE__ */ jsxRuntime.jsx(KindIcon, {});
|
|
6935
|
+
};
|
|
6467
6936
|
const waitingOf = (id) => {
|
|
6468
6937
|
const step = steps.find((s) => s.id === id);
|
|
6469
6938
|
const phase = phaseOf(id);
|
|
6470
|
-
const documents =
|
|
6471
|
-
if (documents.length) return
|
|
6939
|
+
const documents = chunkHM23LXUP_cjs.waitingDocuments(states[id]);
|
|
6940
|
+
if (documents.length) return chunkHM23LXUP_cjs.waitingForDocumentsText(documents.length);
|
|
6472
6941
|
const name = step && (phase === "ready" || phase === "waiting") ? assigneeOf?.(step) : void 0;
|
|
6473
6942
|
return name ? l.waitingFor.replace("{name}", name) : void 0;
|
|
6474
6943
|
};
|
|
6475
|
-
const pill = (step, isCurrent
|
|
6944
|
+
const pill = (step, isCurrent) => {
|
|
6476
6945
|
const phase = phaseOf(step.id);
|
|
6477
6946
|
const happened = grouped.byStep[step.id] ?? [];
|
|
6478
6947
|
const assignee = phase === "ready" || phase === "waiting" ? assigneeOf?.(step) : void 0;
|
|
6479
6948
|
const waiting = waitingOf(step.id);
|
|
6480
6949
|
const sentBack = states[step.id]?.sentBack;
|
|
6481
|
-
|
|
6482
|
-
|
|
6483
|
-
|
|
6950
|
+
const kind = chunkHM23LXUP_cjs.stepKindOf(step);
|
|
6951
|
+
const documents = chunkHM23LXUP_cjs.stepDocuments(steps, states, step.id);
|
|
6952
|
+
const latestDoc = onOpenDocument ? documents.at(-1) : void 0;
|
|
6953
|
+
const finished = ["done", "skipped", "failed"].includes(phase);
|
|
6954
|
+
const chip = /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6955
|
+
ui.Popover,
|
|
6956
|
+
{
|
|
6957
|
+
open: open === step.id,
|
|
6958
|
+
onOpenChange: (o) => {
|
|
6959
|
+
setOpen(o ? step.id : null);
|
|
6960
|
+
if (o) setSelected(step.id);
|
|
6961
|
+
},
|
|
6962
|
+
children: [
|
|
6963
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6964
|
+
chunkHM23LXUP_cjs.StepChip,
|
|
6965
|
+
{
|
|
6966
|
+
kind,
|
|
6967
|
+
phase,
|
|
6968
|
+
icon: glyphOf(step),
|
|
6969
|
+
label: step.title,
|
|
6970
|
+
current: isCurrent,
|
|
6971
|
+
heading: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
6972
|
+
l.kinds[kind],
|
|
6973
|
+
assignee && /* @__PURE__ */ jsxRuntime.jsxs("span", { "data-testid": `workflow-thread-step-${step.id}-assignee`, children: [
|
|
6974
|
+
" \xB7 ",
|
|
6975
|
+
waiting
|
|
6976
|
+
] })
|
|
6977
|
+
] }),
|
|
6978
|
+
labelClassName: isCurrent ? chunk7FZWNDPU_cjs.STEP_LABEL_CURRENT : ui.cn(chunk7FZWNDPU_cjs.STEP_LABEL, chunk7FZWNDPU_cjs.STEP_LABEL_MAX),
|
|
6979
|
+
className: ui.cn(latestDoc && "rounded-r-none"),
|
|
6980
|
+
title: waiting ? `${step.title} \xB7 ${waiting}` : step.title,
|
|
6981
|
+
"data-testid": `workflow-thread-step-${step.id}`,
|
|
6982
|
+
children: [
|
|
6983
|
+
sentBack && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6984
|
+
lucideReact.CornerUpLeft,
|
|
6985
|
+
{
|
|
6986
|
+
className: "size-3 shrink-0 text-amber-600 dark:text-amber-400",
|
|
6987
|
+
"aria-label": l.sentBack,
|
|
6988
|
+
"data-testid": `workflow-thread-step-${step.id}-sent-back`
|
|
6989
|
+
}
|
|
6990
|
+
),
|
|
6991
|
+
/* @__PURE__ */ jsxRuntime.jsx(Beads, { items: happened, label: l.updates })
|
|
6992
|
+
]
|
|
6993
|
+
}
|
|
6994
|
+
) }),
|
|
6995
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
6996
|
+
ui.PopoverContent,
|
|
6997
|
+
{
|
|
6998
|
+
align: "start",
|
|
6999
|
+
className: "w-80 space-y-1.5 p-2",
|
|
7000
|
+
"data-testid": `workflow-thread-step-${step.id}-menu`,
|
|
7001
|
+
children: [
|
|
7002
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7003
|
+
PopoverHeading,
|
|
7004
|
+
{
|
|
7005
|
+
kind,
|
|
7006
|
+
icon: glyphOf(step),
|
|
7007
|
+
overline: `${l.kinds[kind]} \xB7 ${waiting ?? barL.phases[phase]}`,
|
|
7008
|
+
title: step.title
|
|
7009
|
+
}
|
|
7010
|
+
),
|
|
7011
|
+
sentBack && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-1 text-xs text-amber-700 dark:text-amber-300", children: l.sentBack }),
|
|
7012
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7013
|
+
chunkHM23LXUP_cjs.StepDocumentCards,
|
|
7014
|
+
{
|
|
7015
|
+
refs: documents,
|
|
7016
|
+
heading: step.kind === "review" ? phase === "done" ? l.documents.approved : l.documents.toApprove : l.documents.produced,
|
|
7017
|
+
nameOfDoc,
|
|
7018
|
+
onOpen: onOpenDocument,
|
|
7019
|
+
labels: l.documents,
|
|
7020
|
+
testId: `workflow-thread-step-${step.id}-docs`
|
|
7021
|
+
}
|
|
7022
|
+
),
|
|
7023
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7024
|
+
chunkHM23LXUP_cjs.StepRecord,
|
|
7025
|
+
{
|
|
7026
|
+
step,
|
|
7027
|
+
state: states[step.id],
|
|
7028
|
+
inputs,
|
|
7029
|
+
nameOf,
|
|
7030
|
+
labels: l.record,
|
|
7031
|
+
testId: `workflow-thread-step-${step.id}-record`
|
|
7032
|
+
}
|
|
7033
|
+
),
|
|
7034
|
+
(happened.length > 0 || !finished) && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-1 text-xs font-medium text-muted-foreground", children: happened.length ? l.happened.replace("{count}", String(happened.length)) : l.nothingYet }),
|
|
7035
|
+
happened.map((item) => /* @__PURE__ */ jsxRuntime.jsx(Entry, { item }, item.id)),
|
|
7036
|
+
renderStepAction?.(step, phase),
|
|
7037
|
+
onSkip && ["ready", "blocked", "failed", "waiting"].includes(phase) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7038
|
+
"button",
|
|
7039
|
+
{
|
|
7040
|
+
type: "button",
|
|
7041
|
+
onClick: () => onSkip(step.id),
|
|
7042
|
+
className: "w-full rounded-md px-1 py-1 text-left text-xs text-muted-foreground hover:bg-accent",
|
|
7043
|
+
"data-testid": `workflow-thread-step-${step.id}-skip`,
|
|
7044
|
+
children: l.skip
|
|
7045
|
+
}
|
|
7046
|
+
)
|
|
7047
|
+
]
|
|
7048
|
+
}
|
|
7049
|
+
)
|
|
7050
|
+
]
|
|
7051
|
+
}
|
|
7052
|
+
);
|
|
7053
|
+
return latestDoc ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 items-center", children: [
|
|
7054
|
+
chip,
|
|
7055
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7056
|
+
chunkHM23LXUP_cjs.StepDocumentButton,
|
|
6484
7057
|
{
|
|
6485
|
-
|
|
6486
|
-
|
|
6487
|
-
|
|
6488
|
-
|
|
6489
|
-
"data-phase": phase,
|
|
6490
|
-
"data-testid": `workflow-thread-step-${step.id}`,
|
|
6491
|
-
children: [
|
|
6492
|
-
/* @__PURE__ */ jsxRuntime.jsx(chunkXSUOEJB3_cjs.PhaseMark, { phase, icon: iconOf(step) }),
|
|
6493
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: isCurrent ? chunkXSUOEJB3_cjs.STEP_LABEL_CURRENT : ui.cn(chunkXSUOEJB3_cjs.STEP_LABEL, chunkXSUOEJB3_cjs.STEP_LABEL_MAX), children: step.title }),
|
|
6494
|
-
sentBack && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6495
|
-
lucideReact.CornerUpLeft,
|
|
6496
|
-
{
|
|
6497
|
-
className: "size-3 shrink-0 text-amber-600 dark:text-amber-400",
|
|
6498
|
-
"aria-label": l.sentBack,
|
|
6499
|
-
"data-testid": `workflow-thread-step-${step.id}-sent-back`
|
|
6500
|
-
}
|
|
6501
|
-
),
|
|
6502
|
-
assignee && isCurrent && !narrow && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6503
|
-
"span",
|
|
6504
|
-
{
|
|
6505
|
-
className: ui.cn(chunkXSUOEJB3_cjs.STEP_EXTRA, "flex max-w-[12rem] items-center gap-0.5"),
|
|
6506
|
-
title: waiting,
|
|
6507
|
-
"data-testid": `workflow-thread-step-${step.id}-assignee`,
|
|
6508
|
-
children: [
|
|
6509
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserRound, { className: "size-3 shrink-0" }),
|
|
6510
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: waiting })
|
|
6511
|
-
]
|
|
6512
|
-
}
|
|
6513
|
-
),
|
|
6514
|
-
happened.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 rounded-full bg-muted px-1.5 text-[10px] font-normal text-muted-foreground", children: happened.length })
|
|
6515
|
-
]
|
|
7058
|
+
kind,
|
|
7059
|
+
name: nameOfDoc?.(chunkHM23LXUP_cjs.splitDocRef(latestDoc).id) ?? latestDoc,
|
|
7060
|
+
onOpen: () => onOpenDocument?.(latestDoc),
|
|
7061
|
+
testId: `workflow-thread-step-${step.id}-open-document`
|
|
6516
7062
|
}
|
|
6517
|
-
)
|
|
6518
|
-
|
|
6519
|
-
|
|
7063
|
+
)
|
|
7064
|
+
] }) : chip;
|
|
7065
|
+
};
|
|
7066
|
+
const leading = startedBy || grouped.before.length ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [
|
|
7067
|
+
grouped.before.length ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
7068
|
+
EntriesChip,
|
|
7069
|
+
{
|
|
7070
|
+
kind: "start",
|
|
7071
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Zap, {}),
|
|
7072
|
+
label: l.started,
|
|
7073
|
+
items: grouped.before,
|
|
7074
|
+
heading: l.beforeSteps,
|
|
7075
|
+
extra: startedBy && /* @__PURE__ */ jsxRuntime.jsx(WorkflowThreadStartedBy, { origin: startedBy, labels }),
|
|
7076
|
+
testId: "workflow-thread-start"
|
|
7077
|
+
}
|
|
7078
|
+
) : startedBy && /* @__PURE__ */ jsxRuntime.jsx(WorkflowThreadStartedBy, { origin: startedBy, labels }),
|
|
7079
|
+
link
|
|
7080
|
+
] }) : null;
|
|
7081
|
+
const trailing = grouped.after.length || strays.length ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [
|
|
7082
|
+
grouped.after.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
7083
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "wf-link max-w-6" }),
|
|
7084
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7085
|
+
EntriesChip,
|
|
6520
7086
|
{
|
|
6521
|
-
|
|
6522
|
-
|
|
6523
|
-
|
|
6524
|
-
|
|
6525
|
-
|
|
6526
|
-
|
|
6527
|
-
sentBack && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-1 text-xs text-amber-700 dark:text-amber-300", children: l.sentBack }),
|
|
6528
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-1 text-xs font-medium text-muted-foreground", children: happened.length ? l.happened.replace("{count}", String(happened.length)) : l.nothingYet }),
|
|
6529
|
-
happened.map((item) => /* @__PURE__ */ jsxRuntime.jsx(Entry, { item }, item.id)),
|
|
6530
|
-
renderStepAction?.(step, phase),
|
|
6531
|
-
onSkip && ["ready", "blocked", "failed", "waiting"].includes(phase) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6532
|
-
"button",
|
|
6533
|
-
{
|
|
6534
|
-
type: "button",
|
|
6535
|
-
onClick: () => onSkip(step.id),
|
|
6536
|
-
className: "w-full rounded-md px-1 py-1 text-left text-xs text-muted-foreground hover:bg-accent",
|
|
6537
|
-
"data-testid": `workflow-thread-step-${step.id}-skip`,
|
|
6538
|
-
children: l.skip
|
|
6539
|
-
}
|
|
6540
|
-
)
|
|
6541
|
-
]
|
|
7087
|
+
kind: "adhoc",
|
|
7088
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessagesSquare, {}),
|
|
7089
|
+
label: l.after,
|
|
7090
|
+
items: grouped.after,
|
|
7091
|
+
heading: l.afterSteps,
|
|
7092
|
+
testId: "workflow-thread-after"
|
|
6542
7093
|
}
|
|
6543
7094
|
)
|
|
6544
|
-
] });
|
|
6545
|
-
};
|
|
6546
|
-
const leading = startedBy || grouped.before.length ? /* @__PURE__ */ jsxRuntime.jsxs("ol", { className: "flex shrink-0 items-center gap-1", children: [
|
|
6547
|
-
startedBy && /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex shrink-0 items-center gap-1", children: [
|
|
6548
|
-
/* @__PURE__ */ jsxRuntime.jsx(WorkflowThreadStartedBy, { origin: startedBy, labels }),
|
|
6549
|
-
chevron
|
|
6550
7095
|
] }),
|
|
6551
|
-
|
|
6552
|
-
/* @__PURE__ */ jsxRuntime.jsx(Entry, { item }),
|
|
6553
|
-
chevron
|
|
6554
|
-
] }, item.id))
|
|
6555
|
-
] }) : null;
|
|
6556
|
-
const trailing = grouped.after.length || strays.length ? /* @__PURE__ */ jsxRuntime.jsxs("ol", { className: "flex shrink-0 items-center gap-1", children: [
|
|
6557
|
-
grouped.after.map((item) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex shrink-0 items-center gap-1", children: [
|
|
6558
|
-
chevron,
|
|
6559
|
-
/* @__PURE__ */ jsxRuntime.jsx(Entry, { item })
|
|
6560
|
-
] }, item.id)),
|
|
6561
|
-
strays.map((s) => /* @__PURE__ */ jsxRuntime.jsx("li", { className: "flex shrink-0 items-center gap-1", children: /* @__PURE__ */ jsxRuntime.jsx(SignalPill, { signal: s, l }) }, `${s.step}-${s.signal}`))
|
|
7096
|
+
strays.map((s) => /* @__PURE__ */ jsxRuntime.jsx(SignalPill, { signal: s, l }, `${s.step}-${s.signal}`))
|
|
6562
7097
|
] }) : null;
|
|
7098
|
+
const at = steps.find((s) => s.id === (selected ?? chunk7FZWNDPU_cjs.activeStepId(chunkHM23LXUP_cjs.stepLevels(steps), phaseOf)));
|
|
7099
|
+
const headingPx = (step) => `${l.kinds[chunkHM23LXUP_cjs.stepKindOf(step)]} \xB7 ${waitingOf(step.id) ?? ""}`.length * 5.6 - step.title.length * 6.5;
|
|
7100
|
+
const reserve = {
|
|
7101
|
+
always: (at ? Math.max(0, headingPx(at)) : 0) + steps.filter((s) => grouped.byStep[s.id]?.length).length * BEADS_PX + (onOpenDocument ? steps.filter((s) => chunkHM23LXUP_cjs.stepDocuments(steps, states, s.id).length).length * DOC_BUTTON_PX : 0),
|
|
7102
|
+
leading: leading ? 150 : 0,
|
|
7103
|
+
trailing: trailing ? 120 : 0
|
|
7104
|
+
};
|
|
6563
7105
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("min-w-0 flex-1", className), "data-testid": "workflow-thread-strip", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6564
|
-
|
|
7106
|
+
chunk7FZWNDPU_cjs.StepBarFrame,
|
|
6565
7107
|
{
|
|
6566
|
-
levels:
|
|
7108
|
+
levels: chunkHM23LXUP_cjs.stepLevels(steps),
|
|
6567
7109
|
phaseOf,
|
|
6568
7110
|
current: selected,
|
|
6569
7111
|
onSelect: (id) => {
|
|
6570
7112
|
setSelected(id);
|
|
6571
7113
|
setOpen(id);
|
|
6572
7114
|
},
|
|
6573
|
-
renderStep: (step, _level, win
|
|
6574
|
-
step,
|
|
6575
|
-
step.id === win.levels[win.currentLevel]?.primary.id || step.id === selected,
|
|
6576
|
-
narrow
|
|
6577
|
-
),
|
|
6578
|
-
noteOf: waitingOf,
|
|
7115
|
+
renderStep: (step, _level, win) => pill(step, step.id === win.levels[win.currentLevel]?.primary.id || step.id === selected),
|
|
6579
7116
|
renderAfter: (level) => signals.filter((s) => level.steps.some((step) => step.id === s.step)).map((s) => /* @__PURE__ */ jsxRuntime.jsx(SignalPill, { signal: s, l }, `${s.step}-${s.signal}`)),
|
|
6580
7117
|
leading,
|
|
6581
7118
|
trailing,
|
|
6582
|
-
|
|
7119
|
+
reservePx: reserve,
|
|
7120
|
+
icon: glyphOf,
|
|
7121
|
+
kindOf: chunkHM23LXUP_cjs.stepKindOf,
|
|
6583
7122
|
labels: { waitingFor: l.waitingFor, ...barLabels },
|
|
6584
7123
|
tid: (suffix) => `workflow-thread-${suffix}`
|
|
6585
7124
|
}
|
|
@@ -6626,7 +7165,14 @@ var STEP_LABELS = {
|
|
|
6626
7165
|
step_progress: "Signed",
|
|
6627
7166
|
step_sent_back: "Sent back"
|
|
6628
7167
|
};
|
|
6629
|
-
|
|
7168
|
+
var STEP_VERBS = {
|
|
7169
|
+
step_started: "started",
|
|
7170
|
+
step_done: "done",
|
|
7171
|
+
step_skipped: "skipped",
|
|
7172
|
+
step_failed: "failed",
|
|
7173
|
+
step_sent_back: "sent back"
|
|
7174
|
+
};
|
|
7175
|
+
function compactThreadActivity(events, stepTitleOf) {
|
|
6630
7176
|
const result = [];
|
|
6631
7177
|
const batches = /* @__PURE__ */ new Map();
|
|
6632
7178
|
for (const event of events) {
|
|
@@ -6648,10 +7194,11 @@ function compactThreadActivity(events) {
|
|
|
6648
7194
|
const count = Math.max(1, entry.recipients.length);
|
|
6649
7195
|
entry.label = `Notified ${count} ${count === 1 ? "user" : "users"}`;
|
|
6650
7196
|
} else if (STEP_LABELS[event.kind]) {
|
|
6651
|
-
const documents =
|
|
7197
|
+
const documents = chunkHM23LXUP_cjs.eventWaitingDocuments(event.detail);
|
|
7198
|
+
const title = typeof event.detail?.step === "string" ? stepTitleOf?.(event.detail.step) : void 0;
|
|
6652
7199
|
result.push({
|
|
6653
7200
|
event,
|
|
6654
|
-
label: documents ?
|
|
7201
|
+
label: documents ? chunkHM23LXUP_cjs.waitingForDocumentsText(documents.length) : title && STEP_VERBS[event.kind] ? `${title} ${STEP_VERBS[event.kind]}` : STEP_LABELS[event.kind],
|
|
6655
7202
|
recipients: []
|
|
6656
7203
|
});
|
|
6657
7204
|
} else if (["artifact_created", "artifact_edited", "document_added", "document_removed"].includes(
|
|
@@ -6680,13 +7227,13 @@ function compactThreadActivity(events) {
|
|
|
6680
7227
|
"done"
|
|
6681
7228
|
].includes(event.kind)) {
|
|
6682
7229
|
const labels = {
|
|
6683
|
-
created: "Started
|
|
7230
|
+
created: "Started thread",
|
|
6684
7231
|
participant_joined: "Followed Up",
|
|
6685
7232
|
assistant_responded: "Answered",
|
|
6686
7233
|
// A stopped turn logs its own crumb, so the header no longer reads the previous
|
|
6687
7234
|
// answer's "Answered" as the outcome of the turn that was stopped.
|
|
6688
7235
|
assistant_stopped: "Stopped",
|
|
6689
|
-
done: "Marked
|
|
7236
|
+
done: "Marked done"
|
|
6690
7237
|
};
|
|
6691
7238
|
result.push({
|
|
6692
7239
|
event,
|
|
@@ -7058,7 +7605,7 @@ function defaultTaskComposerValues(workflows, initial) {
|
|
|
7058
7605
|
return {
|
|
7059
7606
|
assignee: "me",
|
|
7060
7607
|
workflowId,
|
|
7061
|
-
inputs: workflow ? { ...
|
|
7608
|
+
inputs: workflow ? { ...chunkHM23LXUP_cjs.defaultInputs(workflow), ...initial?.inputs } : { ...initial?.inputs },
|
|
7062
7609
|
when: "manual",
|
|
7063
7610
|
runAt: "",
|
|
7064
7611
|
rrule: "",
|
|
@@ -7167,7 +7714,7 @@ function WorkflowComposer({
|
|
|
7167
7714
|
return !docs?.length;
|
|
7168
7715
|
})
|
|
7169
7716
|
);
|
|
7170
|
-
const whatMissing = !workflow || Object.keys(
|
|
7717
|
+
const whatMissing = !workflow || Object.keys(chunkHM23LXUP_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs)).length > 0;
|
|
7171
7718
|
const runAtPast = values.when === "once" && values.runAt !== "" && values.runAt !== initialValues?.runAt && new Date(values.runAt).getTime() <= Date.now();
|
|
7172
7719
|
const whenMissing = missingWhen(values, runAtPast);
|
|
7173
7720
|
const scheduled = values.when !== "now" && values.when !== "manual";
|
|
@@ -7179,7 +7726,7 @@ function WorkflowComposer({
|
|
|
7179
7726
|
setValues({
|
|
7180
7727
|
...values,
|
|
7181
7728
|
workflowId: next,
|
|
7182
|
-
inputs: def ?
|
|
7729
|
+
inputs: def ? chunkHM23LXUP_cjs.defaultInputs(def) : {},
|
|
7183
7730
|
...def?.documentAction ? { access: "standing" } : {}
|
|
7184
7731
|
});
|
|
7185
7732
|
};
|
|
@@ -7317,7 +7864,7 @@ function WorkflowComposer({
|
|
|
7317
7864
|
}
|
|
7318
7865
|
),
|
|
7319
7866
|
!noFiles && workflow && fields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7320
|
-
|
|
7867
|
+
chunk7FZWNDPU_cjs.SchemaForm,
|
|
7321
7868
|
{
|
|
7322
7869
|
fields,
|
|
7323
7870
|
values: values.inputs,
|
|
@@ -7756,7 +8303,7 @@ function WorkTaskComposer({
|
|
|
7756
8303
|
}, [open]);
|
|
7757
8304
|
const workflow = workflows.find((w) => w.id === values.workflowId);
|
|
7758
8305
|
const fields = workflow?.inputs ?? [];
|
|
7759
|
-
const errors = workflow ?
|
|
8306
|
+
const errors = workflow ? chunkHM23LXUP_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs) : {};
|
|
7760
8307
|
const hasWork = configOpen && Boolean(workflow) && Object.keys(errors).length === 0;
|
|
7761
8308
|
const unattended = hasWork && values.when !== "now" && values.when !== "manual";
|
|
7762
8309
|
const canConfigure = !isEdit || seed.assignee === "agent";
|
|
@@ -7764,7 +8311,7 @@ function WorkTaskComposer({
|
|
|
7764
8311
|
const set = (key, value) => setValues({ ...values, [key]: value });
|
|
7765
8312
|
const pickWorkflow = (id2) => {
|
|
7766
8313
|
const next = workflows.find((w) => w.id === id2);
|
|
7767
|
-
setValues({ ...values, workflowId: id2, inputs: next ?
|
|
8314
|
+
setValues({ ...values, workflowId: id2, inputs: next ? chunkHM23LXUP_cjs.defaultInputs(next) : {} });
|
|
7768
8315
|
};
|
|
7769
8316
|
const openConfigure = () => {
|
|
7770
8317
|
setConfigOpen(true);
|
|
@@ -7950,7 +8497,7 @@ function WorkTaskComposer({
|
|
|
7950
8497
|
)
|
|
7951
8498
|
] }),
|
|
7952
8499
|
workflow && fields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7953
|
-
|
|
8500
|
+
chunk7FZWNDPU_cjs.SchemaForm,
|
|
7954
8501
|
{
|
|
7955
8502
|
fields,
|
|
7956
8503
|
values: values.inputs,
|
|
@@ -8231,7 +8778,8 @@ function ConversationTurnSpeaker({
|
|
|
8231
8778
|
currentUserId,
|
|
8232
8779
|
colorClass,
|
|
8233
8780
|
platformName = "ARBI",
|
|
8234
|
-
platformLogoSrc = "/favicon.svg"
|
|
8781
|
+
platformLogoSrc = "/favicon.svg",
|
|
8782
|
+
variant = "pill"
|
|
8235
8783
|
}) {
|
|
8236
8784
|
if (!role) return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "\u2014" });
|
|
8237
8785
|
if (role === "assistant" && !actor)
|
|
@@ -8239,7 +8787,7 @@ function ConversationTurnSpeaker({
|
|
|
8239
8787
|
ui.UserEntity,
|
|
8240
8788
|
{
|
|
8241
8789
|
size: "sm",
|
|
8242
|
-
variant
|
|
8790
|
+
variant,
|
|
8243
8791
|
interactive: false,
|
|
8244
8792
|
picture: platformLogoSrc,
|
|
8245
8793
|
avatarImageClassName: "object-contain p-0.5",
|
|
@@ -8254,7 +8802,7 @@ function ConversationTurnSpeaker({
|
|
|
8254
8802
|
ui.UserEntity,
|
|
8255
8803
|
{
|
|
8256
8804
|
size: "sm",
|
|
8257
|
-
variant
|
|
8805
|
+
variant,
|
|
8258
8806
|
interactive: false,
|
|
8259
8807
|
isMe,
|
|
8260
8808
|
isAgent: actor.external_id.startsWith("agt-"),
|
|
@@ -9994,12 +10542,15 @@ exports.DEFAULT_TASK_RUNS_DIALOG_LABELS = DEFAULT_TASK_RUNS_DIALOG_LABELS;
|
|
|
9994
10542
|
exports.DEFAULT_TASK_STATUS_PILL_LABELS = DEFAULT_TASK_STATUS_PILL_LABELS;
|
|
9995
10543
|
exports.DEFAULT_TASK_THREAD_CHIP_LABELS = DEFAULT_TASK_THREAD_CHIP_LABELS;
|
|
9996
10544
|
exports.DEFAULT_TASK_TRIGGER_CHIP_LABELS = DEFAULT_TASK_TRIGGER_CHIP_LABELS;
|
|
10545
|
+
exports.DEFAULT_THREAD_LAUNCHER_LABELS = DEFAULT_THREAD_LAUNCHER_LABELS;
|
|
10546
|
+
exports.DEFAULT_THREAD_STATE_LABELS = DEFAULT_THREAD_STATE_LABELS;
|
|
9997
10547
|
exports.DEFAULT_TUPLE_ARRAY_FIELD_LABELS = DEFAULT_TUPLE_ARRAY_FIELD_LABELS;
|
|
9998
10548
|
exports.DEFAULT_UPLOAD_TASK_ITEM_LABELS = DEFAULT_UPLOAD_TASK_ITEM_LABELS;
|
|
9999
10549
|
exports.DEFAULT_UPLOAD_TASK_LIST_LABELS = DEFAULT_UPLOAD_TASK_LIST_LABELS;
|
|
10000
10550
|
exports.DEFAULT_WORKFLOWS_CHROME_LABELS = DEFAULT_WORKFLOWS_CHROME_LABELS;
|
|
10001
10551
|
exports.DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS = DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS;
|
|
10002
10552
|
exports.DEFAULT_WORKFLOW_LIST_LABELS = DEFAULT_WORKFLOW_LIST_LABELS;
|
|
10553
|
+
exports.DEFAULT_WORKFLOW_RUN_STATUS_LABELS = DEFAULT_WORKFLOW_RUN_STATUS_LABELS;
|
|
10003
10554
|
exports.DEFAULT_WORKFLOW_THREAD_STRIP_LABELS = DEFAULT_WORKFLOW_THREAD_STRIP_LABELS;
|
|
10004
10555
|
exports.DERIVED_NAME_WORDS = DERIVED_NAME_WORDS;
|
|
10005
10556
|
exports.EMPTY_NEW_THREAD = EMPTY_NEW_THREAD;
|
|
@@ -10053,7 +10604,9 @@ exports.TaskThreadChip = TaskThreadChip;
|
|
|
10053
10604
|
exports.TaskTriggerChip = TaskTriggerChip;
|
|
10054
10605
|
exports.TasksToolbar = TasksToolbar;
|
|
10055
10606
|
exports.ThreadActivity = ThreadActivity;
|
|
10607
|
+
exports.ThreadLauncher = ThreadLauncher;
|
|
10056
10608
|
exports.ThreadNotifyDialog = ThreadNotifyDialog;
|
|
10609
|
+
exports.ThreadStatusLine = ThreadStatusLine;
|
|
10057
10610
|
exports.TupleArrayField = TupleArrayField;
|
|
10058
10611
|
exports.UploadTaskItem = UploadTaskItem;
|
|
10059
10612
|
exports.UploadTaskList = UploadTaskList;
|
|
@@ -10062,6 +10615,7 @@ exports.WORKFLOW_COLUMN_ORDER = WORKFLOW_COLUMN_ORDER;
|
|
|
10062
10615
|
exports.WorkflowConfigDialog = WorkflowConfigDialog;
|
|
10063
10616
|
exports.WorkflowDocumentsField = WorkflowDocumentsField;
|
|
10064
10617
|
exports.WorkflowLauncher = WorkflowLauncher;
|
|
10618
|
+
exports.WorkflowRunStatus = WorkflowRunStatus;
|
|
10065
10619
|
exports.WorkflowThreadStartedBy = WorkflowThreadStartedBy;
|
|
10066
10620
|
exports.WorkflowThreadStrip = WorkflowThreadStrip;
|
|
10067
10621
|
exports.WorkflowsTable = WorkflowsTable;
|
|
@@ -10131,5 +10685,5 @@ exports.workflowToComposerValues = workflowToComposerValues;
|
|
|
10131
10685
|
exports.workflowToSkillMarkdown = workflowToSkillMarkdown;
|
|
10132
10686
|
exports.workflowTriggerType = workflowTriggerType;
|
|
10133
10687
|
exports.workflowWhen = workflowWhen;
|
|
10134
|
-
//# sourceMappingURL=chunk-
|
|
10135
|
-
//# sourceMappingURL=chunk-
|
|
10688
|
+
//# sourceMappingURL=chunk-V4V2CVNE.cjs.map
|
|
10689
|
+
//# sourceMappingURL=chunk-V4V2CVNE.cjs.map
|