@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.
Files changed (113) hide show
  1. package/dist/{StreamedArtifactEditor-IZWYNFMM.cjs → StreamedArtifactEditor-DNBDUNP2.cjs} +5 -5
  2. package/dist/{StreamedArtifactEditor-IZWYNFMM.cjs.map → StreamedArtifactEditor-DNBDUNP2.cjs.map} +1 -1
  3. package/dist/{StreamedArtifactEditor-HTNPG4NB.js → StreamedArtifactEditor-WDHPTWX7.js} +3 -3
  4. package/dist/{StreamedArtifactEditor-HTNPG4NB.js.map → StreamedArtifactEditor-WDHPTWX7.js.map} +1 -1
  5. package/dist/agents/index.cjs +388 -324
  6. package/dist/agents/index.js +7 -7
  7. package/dist/agents/tasks/ConversationListView.d.ts +2 -1
  8. package/dist/agents/tasks/ConversationTurnSpeaker.d.ts +3 -1
  9. package/dist/agents/tasks/TaskFlow.d.ts +17 -0
  10. package/dist/agents/tasks/ThreadLauncher.d.ts +51 -0
  11. package/dist/agents/tasks/ThreadStatusLine.d.ts +33 -0
  12. package/dist/agents/tasks/WorkflowRunStatus.d.ts +32 -0
  13. package/dist/agents/tasks/WorkflowThreadStrip.d.ts +29 -3
  14. package/dist/agents/tasks/compact-thread-activity.d.ts +5 -2
  15. package/dist/agents/tasks/index.d.ts +3 -0
  16. package/dist/agents/workflows/StepBarFrame.d.ts +18 -17
  17. package/dist/agents/workflows/StepChip.d.ts +37 -0
  18. package/dist/agents/workflows/StepDocuments.d.ts +64 -0
  19. package/dist/agents/workflows/WorkflowStepBar.d.ts +1 -2
  20. package/dist/agents/workflows/index.d.ts +2 -0
  21. package/dist/agents/workflows/stepKinds.d.ts +24 -0
  22. package/dist/artifacts/VersionTimeline.d.ts +7 -0
  23. package/dist/artifacts/index.cjs +21 -21
  24. package/dist/artifacts/index.js +1 -1
  25. package/dist/chat/ChatPage.d.ts +1 -1
  26. package/dist/chat/DraftingDocChip.d.ts +22 -0
  27. package/dist/chat/WorkflowStepChip.d.ts +23 -5
  28. package/dist/chat/chat-page-types.d.ts +18 -2
  29. package/dist/chat/flashMessage.d.ts +6 -0
  30. package/dist/chat/index.cjs +144 -131
  31. package/dist/chat/index.d.ts +2 -0
  32. package/dist/chat/index.js +4 -3
  33. package/dist/{chunk-UDK553WP.cjs → chunk-4VCKYR4D.cjs} +4 -4
  34. package/dist/{chunk-UDK553WP.cjs.map → chunk-4VCKYR4D.cjs.map} +1 -1
  35. package/dist/{chunk-XSUOEJB3.cjs → chunk-7FZWNDPU.cjs} +162 -836
  36. package/dist/chunk-7FZWNDPU.cjs.map +1 -0
  37. package/dist/chunk-7HAM7Y5U.js +907 -0
  38. package/dist/chunk-7HAM7Y5U.js.map +1 -0
  39. package/dist/{chunk-TCNYKDYE.js → chunk-CXLVI3SB.js} +73 -40
  40. package/dist/chunk-CXLVI3SB.js.map +1 -0
  41. package/dist/chunk-HM23LXUP.cjs +976 -0
  42. package/dist/chunk-HM23LXUP.cjs.map +1 -0
  43. package/dist/{chunk-WN64RF46.js → chunk-HQH35JWC.js} +3 -3
  44. package/dist/{chunk-WN64RF46.js.map → chunk-HQH35JWC.js.map} +1 -1
  45. package/dist/{chunk-AY32GGKU.js → chunk-MD7RVFKA.js} +131 -751
  46. package/dist/chunk-MD7RVFKA.js.map +1 -0
  47. package/dist/{chunk-65HZ36MY.js → chunk-OTDGTBAS.js} +20 -3
  48. package/dist/chunk-OTDGTBAS.js.map +1 -0
  49. package/dist/{chunk-ZP4IFW2E.js → chunk-RARHNGKM.js} +731 -183
  50. package/dist/chunk-RARHNGKM.js.map +1 -0
  51. package/dist/{chunk-XFZ7HNPG.js → chunk-SOZNA52K.js} +3 -3
  52. package/dist/{chunk-XFZ7HNPG.js.map → chunk-SOZNA52K.js.map} +1 -1
  53. package/dist/{chunk-US5ASM4G.cjs → chunk-U2F4SSJR.cjs} +5 -5
  54. package/dist/{chunk-US5ASM4G.cjs.map → chunk-U2F4SSJR.cjs.map} +1 -1
  55. package/dist/{chunk-Z2NSU7D5.cjs → chunk-V4V2CVNE.cjs} +768 -214
  56. package/dist/chunk-V4V2CVNE.cjs.map +1 -0
  57. package/dist/{chunk-CK4C3IQR.cjs → chunk-VMZXFYHK.cjs} +47 -6
  58. package/dist/chunk-VMZXFYHK.cjs.map +1 -0
  59. package/dist/{chunk-SVJQWLOF.cjs → chunk-W4GXDARU.cjs} +20 -3
  60. package/dist/chunk-W4GXDARU.cjs.map +1 -0
  61. package/dist/{chunk-S2KVJYBD.cjs → chunk-WV4IDVDQ.cjs} +76 -43
  62. package/dist/chunk-WV4IDVDQ.cjs.map +1 -0
  63. package/dist/{chunk-2FUJXMGO.js → chunk-Y4X3RBFI.js} +44 -6
  64. package/dist/{chunk-CK4C3IQR.cjs.map → chunk-Y4X3RBFI.js.map} +1 -1
  65. package/dist/collaboration/index.cjs +1 -1
  66. package/dist/collaboration/index.js +1 -1
  67. package/dist/connect/index.cjs +63 -46
  68. package/dist/connect/index.cjs.map +1 -1
  69. package/dist/connect/index.js +33 -16
  70. package/dist/connect/index.js.map +1 -1
  71. package/dist/connection/WorkflowRunThread.d.ts +4 -4
  72. package/dist/connection/ai.d.ts +2 -0
  73. package/dist/facts/index.cjs +2 -2
  74. package/dist/facts/index.js +2 -2
  75. package/dist/files/index.cjs +3 -3
  76. package/dist/files/index.js +3 -3
  77. package/dist/home/index.cjs +1 -1
  78. package/dist/home/index.js +1 -1
  79. package/dist/index.cjs +840 -764
  80. package/dist/index.js +14 -14
  81. package/dist/retrieval/index.cjs +1 -1
  82. package/dist/retrieval/index.js +1 -1
  83. package/dist/settings/index.cjs +1 -1
  84. package/dist/settings/index.js +1 -1
  85. package/dist/shell/index.cjs +10 -10
  86. package/dist/shell/index.js +2 -2
  87. package/dist/studio/index.cjs +6 -5
  88. package/dist/studio/index.cjs.map +1 -1
  89. package/dist/studio/index.js +5 -4
  90. package/dist/studio/index.js.map +1 -1
  91. package/dist/workflow-canvas/WorkflowCanvas.d.ts +0 -9
  92. package/dist/workflow-canvas/edit.d.ts +2 -11
  93. package/dist/workflow-canvas/index.cjs +61 -85
  94. package/dist/workflow-canvas/index.cjs.map +1 -1
  95. package/dist/workflow-canvas/index.js +12 -36
  96. package/dist/workflow-canvas/index.js.map +1 -1
  97. package/node_modules/@arbidocs/coedit/package.json +1 -1
  98. package/package.json +4 -4
  99. package/src/blocks.css +168 -0
  100. package/src/workflow-canvas/canvas.css +2 -40
  101. package/dist/chunk-2FUJXMGO.js.map +0 -1
  102. package/dist/chunk-65HZ36MY.js.map +0 -1
  103. package/dist/chunk-AY32GGKU.js.map +0 -1
  104. package/dist/chunk-B4SRYJLM.cjs +0 -107
  105. package/dist/chunk-B4SRYJLM.cjs.map +0 -1
  106. package/dist/chunk-HOXKR26S.js +0 -103
  107. package/dist/chunk-HOXKR26S.js.map +0 -1
  108. package/dist/chunk-S2KVJYBD.cjs.map +0 -1
  109. package/dist/chunk-SVJQWLOF.cjs.map +0 -1
  110. package/dist/chunk-TCNYKDYE.js.map +0 -1
  111. package/dist/chunk-XSUOEJB3.cjs.map +0 -1
  112. package/dist/chunk-Z2NSU7D5.cjs.map +0 -1
  113. 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 chunkXSUOEJB3_cjs = require('./chunk-XSUOEJB3.cjs');
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({ ...chunkXSUOEJB3_cjs.defaultInputs(workflow), ...JSON.parse(initialKey) });
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 = chunkXSUOEJB3_cjs.validateInputs(workflow, inputs);
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(chunkXSUOEJB3_cjs.buildLaunch(workflow, values, agentId))).catch(() => {
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
- chunkXSUOEJB3_cjs.SchemaForm,
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 = chunkXSUOEJB3_cjs.isWorkflowScope(raw) ? raw : { folders: [], labels: [] };
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 = chunkXSUOEJB3_cjs.defaultInputs(workflow);
373
- if (Object.keys(chunkXSUOEJB3_cjs.validateInputs(workflow, inputs)).length === 0) {
374
- Promise.resolve(onLaunch(chunkXSUOEJB3_cjs.buildLaunch(workflow, inputs, void 0))).catch(() => {
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(chunkXSUOEJB3_cjs.fieldToFrontmatter))}`);
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 chunkXSUOEJB3_cjs.workflowFromFrontmatter(id, frontmatter, body);
546
+ return chunkHM23LXUP_cjs.workflowFromFrontmatter(id, frontmatter, body);
547
547
  }
548
548
  function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, resolveWorkflow, compose } = {}) {
549
- const steps = chunkXSUOEJB3_cjs.workflowSteps(workflow);
550
- const [inputs, setInputs] = react.useState(() => chunkXSUOEJB3_cjs.initialRunInputs(workflow));
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") && chunkXSUOEJB3_cjs.stepPhase(steps, states, s.id) === "ready"
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" ? chunkXSUOEJB3_cjs.composeStepPrompt(workflow, next, inputs, { resolveWorkflow, compose }) : "";
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 chunkXSUOEJB3_cjs.useWorkflowView({
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: 1,
4458
- minWidth: 180,
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
- ...liveProps.current.renderLabels ? [
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
- ...isPhone ? { width: 200 } : { flex: 0.5, minWidth: 160 },
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: 150,
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(TaskStatusPill, { id: data.external_id, status: data.status }))
4510
- },
4511
- {
4512
- valueGetter: ({ data }) => data?.message_count,
4513
- colId: "messages",
4514
- headerName: "Messages",
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
- ...liveProps.current.onToggleShared ? [
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: "visibility",
4523
- headerName: "Visibility",
4524
- width: 170,
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 && /* @__PURE__ */ jsxRuntime.jsx(
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: "Activity",
4546
- width: 160,
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
- Boolean(p.onToggleShared),
4560
- isPhone
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: columns,
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 = chunkB4SRYJLM_cjs.useMentionAutocomplete({
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 = chunkXSUOEJB3_cjs.composeWorkflowPrompt(workflow, inputs, context);
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: chunkXSUOEJB3_cjs.composeWorkflowPrompt(workflow, inputs, context),
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 = { ...chunkXSUOEJB3_cjs.DEFAULT_TASK_ACTIVITY_LABELS, ...labels };
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(chunkXSUOEJB3_cjs.TaskActivityTimeline, { events: events ?? [], labels, testId: id, ...timeline }),
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 content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
6258
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", children: item.avatar }),
6259
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "min-w-0 text-left", children: [
6260
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block max-w-32 truncate text-[11px] leading-tight font-medium", children: item.label }),
6261
- /* @__PURE__ */ jsxRuntime.jsx(
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: "block text-[10px] leading-tight text-muted-foreground",
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(lucideReact.ChevronRight, { className: "size-3 shrink-0 text-muted-foreground", "aria-hidden": true }),
6282
- item.onSelect ? /* @__PURE__ */ jsxRuntime.jsx(
6283
- "button",
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
- ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cls, title: item.description ?? item.label, children: content })
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 (chunkXSUOEJB3_cjs.isRunFinished(steps, states)) out.after.push(item);
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 chevron = /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "size-3 shrink-0 text-muted-foreground" });
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) => chunkXSUOEJB3_cjs.stepPhase(steps, states, 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 = chunkXSUOEJB3_cjs.waitingDocuments(states[id]);
6471
- if (documents.length) return chunkXSUOEJB3_cjs.waitingForDocumentsText(documents.length);
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, narrow = false) => {
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
- return /* @__PURE__ */ jsxRuntime.jsxs(ui.Popover, { open: open === step.id, onOpenChange: (o) => setOpen(o ? step.id : null), children: [
6482
- /* @__PURE__ */ jsxRuntime.jsx(ui.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
6483
- "button",
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
- type: "button",
6486
- className: ui.cn(chunkXSUOEJB3_cjs.STEP_PILL, "py-0.5", chunkXSUOEJB3_cjs.stepPillTone(phase, isCurrent)),
6487
- "aria-current": isCurrent ? "step" : void 0,
6488
- title: waiting ? `${step.title} \xB7 ${waiting}` : step.title,
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
- /* @__PURE__ */ jsxRuntime.jsxs(
6519
- ui.PopoverContent,
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
- align: "start",
6522
- className: "w-72 space-y-1 p-2",
6523
- "data-testid": `workflow-thread-step-${step.id}-menu`,
6524
- children: [
6525
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-1 text-xs font-semibold", children: step.title }),
6526
- waiting && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-1 text-xs", "data-testid": `workflow-thread-step-${step.id}-waiting-for`, children: waiting }),
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
- grouped.before.map((item) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex shrink-0 items-center gap-1", children: [
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
- chunkXSUOEJB3_cjs.StepBarFrame,
7106
+ chunk7FZWNDPU_cjs.StepBarFrame,
6565
7107
  {
6566
- levels: chunkXSUOEJB3_cjs.stepLevels(steps),
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, narrow) => pill(
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
- icon: iconOf,
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
- function compactThreadActivity(events) {
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 = chunkXSUOEJB3_cjs.eventWaitingDocuments(event.detail);
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 ? chunkXSUOEJB3_cjs.waitingForDocumentsText(documents.length) : STEP_LABELS[event.kind],
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 Task",
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 Done"
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 ? { ...chunkXSUOEJB3_cjs.defaultInputs(workflow), ...initial?.inputs } : { ...initial?.inputs },
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(chunkXSUOEJB3_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs)).length > 0;
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 ? chunkXSUOEJB3_cjs.defaultInputs(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
- chunkXSUOEJB3_cjs.SchemaForm,
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 ? chunkXSUOEJB3_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs) : {};
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 ? chunkXSUOEJB3_cjs.defaultInputs(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
- chunkXSUOEJB3_cjs.SchemaForm,
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: "pill",
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: "pill",
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-Z2NSU7D5.cjs.map
10135
- //# sourceMappingURL=chunk-Z2NSU7D5.cjs.map
10688
+ //# sourceMappingURL=chunk-V4V2CVNE.cjs.map
10689
+ //# sourceMappingURL=chunk-V4V2CVNE.cjs.map