@arbidocs/blocks 0.4.76 → 0.4.78

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 (123) hide show
  1. package/dist/agents/index.cjs +346 -258
  2. package/dist/agents/index.js +5 -5
  3. package/dist/agents/tasks/TaskActivityTimeline.d.ts +1 -1
  4. package/dist/agents/tasks/WorkflowThreadStrip.d.ts +15 -4
  5. package/dist/agents/workflows/SchemaForm.d.ts +6 -1
  6. package/dist/agents/workflows/StepBarFrame.d.ts +75 -0
  7. package/dist/agents/workflows/StepParts.d.ts +109 -0
  8. package/dist/agents/workflows/WorkflowRunner.d.ts +15 -2
  9. package/dist/agents/workflows/WorkflowStepBar.d.ts +9 -11
  10. package/dist/agents/workflows/index.d.ts +5 -2
  11. package/dist/agents/workflows/planSteps.d.ts +8 -1
  12. package/dist/agents/workflows/run.d.ts +61 -8
  13. package/dist/agents/workflows/stepWindow.d.ts +59 -0
  14. package/dist/agents/workflows/types.d.ts +133 -4
  15. package/dist/agents/workflows/useWorkflowPreview.d.ts +2 -1
  16. package/dist/agents/workflows/useWorkflowView.d.ts +19 -0
  17. package/dist/chat/ChatPage.d.ts +1 -1
  18. package/dist/chat/WorkflowStepChip.d.ts +24 -0
  19. package/dist/chat/chat-page-types.d.ts +9 -0
  20. package/dist/chat/index.cjs +130 -122
  21. package/dist/chat/index.d.ts +1 -0
  22. package/dist/chat/index.js +2 -2
  23. package/dist/{chunk-TKB7TVMW.js → chunk-5OC5CGYX.js} +168 -100
  24. package/dist/chunk-5OC5CGYX.js.map +1 -0
  25. package/dist/{chunk-ZWA7UUZL.cjs → chunk-7YUFMNFW.cjs} +2 -54
  26. package/dist/chunk-7YUFMNFW.cjs.map +1 -0
  27. package/dist/chunk-A24C6BNA.js +92 -0
  28. package/dist/chunk-A24C6BNA.js.map +1 -0
  29. package/dist/chunk-AINNADMT.cjs +62 -0
  30. package/dist/chunk-AINNADMT.cjs.map +1 -0
  31. package/dist/chunk-CWAZNXC5.js +441 -0
  32. package/dist/chunk-CWAZNXC5.js.map +1 -0
  33. package/dist/{chunk-UIWLDSTF.js → chunk-EWSEQEPL.js} +71 -7
  34. package/dist/chunk-EWSEQEPL.js.map +1 -0
  35. package/dist/chunk-FE4ULGOR.js +151 -0
  36. package/dist/chunk-FE4ULGOR.js.map +1 -0
  37. package/dist/chunk-FT5FFXSJ.js +60 -0
  38. package/dist/chunk-FT5FFXSJ.js.map +1 -0
  39. package/dist/{chunk-WJEKRSPH.js → chunk-ICBAFX5B.js} +3 -3
  40. package/dist/{chunk-WJEKRSPH.js.map → chunk-ICBAFX5B.js.map} +1 -1
  41. package/dist/{chunk-7CVF3DK2.cjs → chunk-IF6VAYIA.cjs} +5 -5
  42. package/dist/{chunk-7CVF3DK2.cjs.map → chunk-IF6VAYIA.cjs.map} +1 -1
  43. package/dist/chunk-MLAHDAN5.cjs +450 -0
  44. package/dist/chunk-MLAHDAN5.cjs.map +1 -0
  45. package/dist/{chunk-IPGKTUF7.cjs → chunk-MP6FK43E.cjs} +71 -5
  46. package/dist/chunk-MP6FK43E.cjs.map +1 -0
  47. package/dist/{chunk-5EBGRG3X.js → chunk-OPA2Y6YZ.js} +3 -54
  48. package/dist/chunk-OPA2Y6YZ.js.map +1 -0
  49. package/dist/{chunk-7FKARMA3.cjs → chunk-SSDISIDW.cjs} +190 -122
  50. package/dist/chunk-SSDISIDW.cjs.map +1 -0
  51. package/dist/chunk-TZR36PPP.cjs +95 -0
  52. package/dist/chunk-TZR36PPP.cjs.map +1 -0
  53. package/dist/chunk-VFIZYSZB.cjs +2783 -0
  54. package/dist/chunk-VFIZYSZB.cjs.map +1 -0
  55. package/dist/chunk-WXRCMIAE.js +2707 -0
  56. package/dist/chunk-WXRCMIAE.js.map +1 -0
  57. package/dist/{chunk-HITAN7JF.cjs → chunk-XMBYDLZQ.cjs} +4 -4
  58. package/dist/{chunk-HITAN7JF.cjs.map → chunk-XMBYDLZQ.cjs.map} +1 -1
  59. package/dist/{chunk-MK6NJQGF.js → chunk-XQDM6T6C.js} +3 -3
  60. package/dist/{chunk-MK6NJQGF.js.map → chunk-XQDM6T6C.js.map} +1 -1
  61. package/dist/chunk-ZVBPRMHJ.cjs +153 -0
  62. package/dist/chunk-ZVBPRMHJ.cjs.map +1 -0
  63. package/dist/connect/docx.cjs +10 -88
  64. package/dist/connect/docx.cjs.map +1 -1
  65. package/dist/connect/docx.js +6 -86
  66. package/dist/connect/docx.js.map +1 -1
  67. package/dist/connect/index.cjs +468 -49
  68. package/dist/connect/index.cjs.map +1 -1
  69. package/dist/connect/index.d.ts +2 -0
  70. package/dist/connect/index.js +454 -37
  71. package/dist/connect/index.js.map +1 -1
  72. package/dist/connection/ConnectedTagMatrix.d.ts +20 -0
  73. package/dist/connection/ConnectedWorkflowRunner.d.ts +28 -2
  74. package/dist/connection/WorkflowRunThread.d.ts +21 -0
  75. package/dist/connection/WorkflowRunnerDialogs.d.ts +37 -0
  76. package/dist/connection/useWorkflowThread.d.ts +12 -0
  77. package/dist/document-tools/index.cjs +7 -143
  78. package/dist/document-tools/index.cjs.map +1 -1
  79. package/dist/document-tools/index.js +5 -144
  80. package/dist/document-tools/index.js.map +1 -1
  81. package/dist/docx/index.cjs +18 -17
  82. package/dist/docx/index.cjs.map +1 -1
  83. package/dist/docx/index.js +3 -2
  84. package/dist/docx/index.js.map +1 -1
  85. package/dist/facts/index.cjs +1 -1
  86. package/dist/facts/index.js +1 -1
  87. package/dist/files/index.cjs +1 -1
  88. package/dist/files/index.js +1 -1
  89. package/dist/home/index.cjs +1 -1
  90. package/dist/home/index.js +1 -1
  91. package/dist/index.cjs +560 -431
  92. package/dist/index.cjs.map +1 -1
  93. package/dist/index.d.ts +1 -0
  94. package/dist/index.js +10 -9
  95. package/dist/index.js.map +1 -1
  96. package/dist/shell/index.cjs +1 -1
  97. package/dist/shell/index.js +1 -1
  98. package/dist/studio/index.cjs +4 -4
  99. package/dist/studio/index.js +3 -3
  100. package/dist/tags/TagMatrix.d.ts +64 -0
  101. package/dist/tags/index.d.ts +3 -0
  102. package/dist/tags/tagMatrixModel.d.ts +39 -0
  103. package/dist/workflow-canvas/StepActionSettings.d.ts +132 -0
  104. package/dist/workflow-canvas/StepInspector.d.ts +25 -2
  105. package/dist/workflow-canvas/WorkflowBuilder.d.ts +11 -3
  106. package/dist/workflow-canvas/WorkflowCanvas.d.ts +27 -2
  107. package/dist/workflow-canvas/edit.d.ts +9 -1
  108. package/dist/workflow-canvas/index.cjs +882 -102
  109. package/dist/workflow-canvas/index.cjs.map +1 -1
  110. package/dist/workflow-canvas/index.js +849 -69
  111. package/dist/workflow-canvas/index.js.map +1 -1
  112. package/package.json +4 -4
  113. package/src/workflow-canvas/canvas.css +9 -0
  114. package/dist/chunk-22P5KNIM.js +0 -1422
  115. package/dist/chunk-22P5KNIM.js.map +0 -1
  116. package/dist/chunk-5EBGRG3X.js.map +0 -1
  117. package/dist/chunk-7FKARMA3.cjs.map +0 -1
  118. package/dist/chunk-IPGKTUF7.cjs.map +0 -1
  119. package/dist/chunk-TKB7TVMW.js.map +0 -1
  120. package/dist/chunk-UIWLDSTF.js.map +0 -1
  121. package/dist/chunk-VYRKO3XU.cjs +0 -1469
  122. package/dist/chunk-VYRKO3XU.cjs.map +0 -1
  123. package/dist/chunk-ZWA7UUZL.cjs.map +0 -1
@@ -3,20 +3,20 @@
3
3
 
4
4
  var chunkYJQVLVBJ_cjs = require('./chunk-YJQVLVBJ.cjs');
5
5
  var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
6
- var chunkVYRKO3XU_cjs = require('./chunk-VYRKO3XU.cjs');
6
+ var chunkVFIZYSZB_cjs = require('./chunk-VFIZYSZB.cjs');
7
7
  var chunk7RGLTF76_cjs = require('./chunk-7RGLTF76.cjs');
8
+ var chunkZ5VUZ6YD_cjs = require('./chunk-Z5VUZ6YD.cjs');
9
+ var chunk7D737FLE_cjs = require('./chunk-7D737FLE.cjs');
8
10
  var chunk3AFWGEDJ_cjs = require('./chunk-3AFWGEDJ.cjs');
9
11
  var chunkVFUWWH52_cjs = require('./chunk-VFUWWH52.cjs');
10
12
  var chunkV4ISCZJ7_cjs = require('./chunk-V4ISCZJ7.cjs');
11
13
  var chunk2EI7NCUA_cjs = require('./chunk-2EI7NCUA.cjs');
12
14
  var chunkIXALYQT7_cjs = require('./chunk-IXALYQT7.cjs');
13
- var chunkZ5VUZ6YD_cjs = require('./chunk-Z5VUZ6YD.cjs');
14
- var chunk7D737FLE_cjs = require('./chunk-7D737FLE.cjs');
15
15
  var chunkOB5F4577_cjs = require('./chunk-OB5F4577.cjs');
16
- var chunkC54XEN5T_cjs = require('./chunk-C54XEN5T.cjs');
17
16
  var chunkB4SRYJLM_cjs = require('./chunk-B4SRYJLM.cjs');
18
17
  var chunk7UTB4PHM_cjs = require('./chunk-7UTB4PHM.cjs');
19
18
  var chunkFX3K6LNZ_cjs = require('./chunk-FX3K6LNZ.cjs');
19
+ var chunkC54XEN5T_cjs = require('./chunk-C54XEN5T.cjs');
20
20
  var chunkKDG6FER6_cjs = require('./chunk-KDG6FER6.cjs');
21
21
  var chunkULWRNGGE_cjs = require('./chunk-ULWRNGGE.cjs');
22
22
  var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
@@ -145,7 +145,7 @@ function WorkflowConfigDialog({
145
145
  }) {
146
146
  const l = { ...DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS, ...labels };
147
147
  const initialKey = JSON.stringify(initialInputs ?? {});
148
- const seedKey = JSON.stringify({ ...chunkVYRKO3XU_cjs.defaultInputs(workflow), ...JSON.parse(initialKey) });
148
+ const seedKey = JSON.stringify({ ...chunkVFIZYSZB_cjs.defaultInputs(workflow), ...JSON.parse(initialKey) });
149
149
  const seed = react.useMemo(() => JSON.parse(seedKey), [seedKey]);
150
150
  const [inputs, setInputs] = useControllableState(inputsProp, seed, onInputsChange);
151
151
  const [agentId, setAgentId] = useControllableState(
@@ -157,7 +157,7 @@ function WorkflowConfigDialog({
157
157
  if (open && inputsProp === void 0) setInputs(seed);
158
158
  }, [open, seed]);
159
159
  const setField = (name, value) => setInputs({ ...inputs, [name]: value });
160
- const errors = chunkVYRKO3XU_cjs.validateInputs(workflow, inputs);
160
+ const errors = chunkVFIZYSZB_cjs.validateInputs(workflow, inputs);
161
161
  const valid = Object.keys(errors).length === 0;
162
162
  const visibleErrors = Object.fromEntries(
163
163
  Object.entries(errors).filter(([, e]) => e !== "required")
@@ -170,7 +170,7 @@ function WorkflowConfigDialog({
170
170
  const blockedByScope = matchedCount !== null && matchedCount === 0 && Boolean(workflow.requiresFiles);
171
171
  const showAgent = workflow.run.kind === "prompt" && workflow.options?.agent !== false && agents !== void 0 && agents.length > 0;
172
172
  const launch = (values) => {
173
- Promise.resolve(onLaunch(chunkVYRKO3XU_cjs.buildLaunch(workflow, values, agentId))).catch(() => {
173
+ Promise.resolve(onLaunch(chunkVFIZYSZB_cjs.buildLaunch(workflow, values, agentId))).catch(() => {
174
174
  });
175
175
  };
176
176
  const submit = () => {
@@ -248,7 +248,7 @@ function WorkflowConfigDialog({
248
248
  }
249
249
  ) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
250
250
  /* @__PURE__ */ jsxRuntime.jsx(
251
- chunkVYRKO3XU_cjs.SchemaForm,
251
+ chunkVFIZYSZB_cjs.SchemaForm,
252
252
  {
253
253
  fields,
254
254
  values: inputs,
@@ -326,7 +326,7 @@ function resolveScopeInputs(workflow, inputs, scopeSource) {
326
326
  for (const field of workflow.inputs) {
327
327
  if (field.type !== "scope") continue;
328
328
  const raw = inputs[field.name];
329
- const scope = chunkVYRKO3XU_cjs.isWorkflowScope(raw) ? raw : { folders: [], labels: [] };
329
+ const scope = chunkVFIZYSZB_cjs.isWorkflowScope(raw) ? raw : { folders: [], labels: [] };
330
330
  next[field.name] = { ...scope, documents: scopeSource.resolveDocuments(scope) };
331
331
  }
332
332
  return next;
@@ -368,9 +368,9 @@ function WorkflowLauncher({
368
368
  };
369
369
  const select = (workflow) => {
370
370
  if (workflow.run.kind === "operation" && workflow.inputs.length === 0) {
371
- const inputs = chunkVYRKO3XU_cjs.defaultInputs(workflow);
372
- if (Object.keys(chunkVYRKO3XU_cjs.validateInputs(workflow, inputs)).length === 0) {
373
- Promise.resolve(onLaunch(chunkVYRKO3XU_cjs.buildLaunch(workflow, inputs, void 0))).catch(() => {
371
+ const inputs = chunkVFIZYSZB_cjs.defaultInputs(workflow);
372
+ if (Object.keys(chunkVFIZYSZB_cjs.validateInputs(workflow, inputs)).length === 0) {
373
+ Promise.resolve(onLaunch(chunkVFIZYSZB_cjs.buildLaunch(workflow, inputs, void 0))).catch(() => {
374
374
  });
375
375
  return;
376
376
  }
@@ -520,7 +520,7 @@ function workflowToSkillMarkdown(workflow) {
520
520
  if (workflow.landing !== "chat") lines.push(`landing: ${workflow.landing}`);
521
521
  if (workflow.requiresFiles) lines.push("requires_files: true");
522
522
  if (workflow.inputs.length > 0) {
523
- lines.push(`inputs: ${JSON.stringify(workflow.inputs.map(chunkVYRKO3XU_cjs.fieldToFrontmatter))}`);
523
+ lines.push(`inputs: ${JSON.stringify(workflow.inputs.map(chunkVFIZYSZB_cjs.fieldToFrontmatter))}`);
524
524
  }
525
525
  lines.push("---", "", run.promptTemplate.trim(), "");
526
526
  return lines.join("\n");
@@ -542,11 +542,11 @@ function workflowFromSkillMarkdown(id, text2) {
542
542
  } else if (value === "true" || value === "false") frontmatter[key] = value === "true";
543
543
  else frontmatter[key] = value;
544
544
  }
545
- return chunkVYRKO3XU_cjs.workflowFromFrontmatter(id, frontmatter, body);
545
+ return chunkVFIZYSZB_cjs.workflowFromFrontmatter(id, frontmatter, body);
546
546
  }
547
547
  function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, resolveWorkflow, compose } = {}) {
548
- const steps = chunkVYRKO3XU_cjs.workflowSteps(workflow);
549
- const [inputs, setInputs] = react.useState(() => chunkVYRKO3XU_cjs.initialRunInputs(workflow));
548
+ const steps = chunkVFIZYSZB_cjs.workflowSteps(workflow);
549
+ const [inputs, setInputs] = react.useState(() => chunkVFIZYSZB_cjs.initialRunInputs(workflow));
550
550
  const [states, setStates] = react.useState({});
551
551
  const set = (id, state) => setStates((s) => ({ ...s, [id]: state }));
552
552
  const timers = react.useRef(/* @__PURE__ */ new Map());
@@ -567,19 +567,24 @@ function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, reso
567
567
  }, []);
568
568
  react.useEffect(() => {
569
569
  if (Object.values(states).some((s) => s.status === "running")) return;
570
- const next = steps.find((s) => s.kind === "agent" && chunkVYRKO3XU_cjs.stepPhase(steps, states, s.id) === "ready");
571
- if (!next || next.kind !== "agent") return;
572
- const prompt = chunkVYRKO3XU_cjs.composeStepPrompt(workflow, next, inputs, { resolveWorkflow, compose });
570
+ const next = steps.find(
571
+ (s) => (s.kind === "agent" || s.kind === "action") && chunkVFIZYSZB_cjs.stepPhase(steps, states, s.id) === "ready"
572
+ );
573
+ if (!next || next.kind !== "agent" && next.kind !== "action") return;
574
+ const prompt = next.kind === "agent" ? chunkVFIZYSZB_cjs.composeStepPrompt(workflow, next, inputs, { resolveWorkflow, compose }) : "";
573
575
  set(next.id, { status: "running", startedAt: (/* @__PURE__ */ new Date()).toISOString() });
574
576
  timers.current.set(
575
577
  next.id,
576
578
  setTimeout(() => {
577
579
  timers.current.delete(next.id);
578
- set(next.id, { status: "done", text: answer.replace("{prompt}", prompt) });
580
+ set(
581
+ next.id,
582
+ next.kind === "agent" ? { status: "done", text: answer.replace("{prompt}", prompt) } : { status: "done" }
583
+ );
579
584
  }, delayMs)
580
585
  );
581
586
  }, [states, steps, workflow]);
582
- return chunkVYRKO3XU_cjs.useWorkflowView({
587
+ return chunkVFIZYSZB_cjs.useWorkflowView({
583
588
  steps,
584
589
  states,
585
590
  inputs,
@@ -4992,7 +4997,7 @@ function workflowTaskFields(workflow, inputs, name, context) {
4992
4997
  }
4993
4998
  const typed = name?.trim();
4994
4999
  if (workflow.options?.agent === false) {
4995
- const message = chunkVYRKO3XU_cjs.composeWorkflowPrompt(workflow, inputs, context);
5000
+ const message = chunkVFIZYSZB_cjs.composeWorkflowPrompt(workflow, inputs, context);
4996
5001
  return { name: typed || message, prompt: "", skill_ref: null, skill_inputs: null };
4997
5002
  }
4998
5003
  const derived = typed || deriveWorkflowName(workflow, inputs);
@@ -5006,7 +5011,7 @@ function workflowTaskFields(workflow, inputs, name, context) {
5006
5011
  }
5007
5012
  return {
5008
5013
  name: derived,
5009
- prompt: chunkVYRKO3XU_cjs.composeWorkflowPrompt(workflow, inputs, context),
5014
+ prompt: chunkVFIZYSZB_cjs.composeWorkflowPrompt(workflow, inputs, context),
5010
5015
  skill_ref: null,
5011
5016
  // The files a run is bound to travel in the saved inputs, whatever the template: the server binds
5012
5017
  // the run to the ids listed under any input's `documents`.
@@ -6214,6 +6219,11 @@ var ICONS = {
6214
6219
  step_skipped: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { className: "size-3.5", "aria-hidden": true }),
6215
6220
  step_failed: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "size-3.5", "aria-hidden": true }),
6216
6221
  step_signal: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Flag, { className: "size-3.5", "aria-hidden": true }),
6222
+ step_waiting: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Hourglass, { className: "size-3.5", "aria-hidden": true }),
6223
+ step_progress: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PenLine, { className: "size-3.5", "aria-hidden": true }),
6224
+ step_sent_back: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CornerUpLeft, { className: "size-3.5", "aria-hidden": true }),
6225
+ step_ready: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.BellRing, { className: "size-3.5", "aria-hidden": true }),
6226
+ step_reminded: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.BellRing, { className: "size-3.5", "aria-hidden": true }),
6217
6227
  linked_run: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUpRight, { className: "size-3.5", "aria-hidden": true })
6218
6228
  };
6219
6229
  var asString = (v) => typeof v === "string" && v.trim() ? v : null;
@@ -6259,6 +6269,16 @@ function TaskActivityTimeline({
6259
6269
  return { headline: "Step done" };
6260
6270
  case "step_skipped":
6261
6271
  return { headline: "Step skipped" };
6272
+ case "step_waiting":
6273
+ return { headline: "Waiting on people" };
6274
+ case "step_progress":
6275
+ return { headline: detail.signed ? "Signed" : "Step moved on" };
6276
+ case "step_sent_back":
6277
+ return { headline: "Sent the work back" };
6278
+ case "step_ready":
6279
+ return { headline: "Told whose turn it is" };
6280
+ case "step_reminded":
6281
+ return { headline: "Sent a reminder" };
6262
6282
  case "step_signal":
6263
6283
  return { headline: `Signalled \u201C${asString(detail.signal) ?? "a signal"}\u201D` };
6264
6284
  case "linked_run":
@@ -6469,7 +6489,13 @@ function ThreadActivity({ item, children }) {
6469
6489
  }
6470
6490
  ) });
6471
6491
  }
6472
- var STEP_KINDS = /* @__PURE__ */ new Set(["step_started", "step_done", "step_skipped", "step_failed"]);
6492
+ var STEP_KINDS = /* @__PURE__ */ new Set([
6493
+ "step_started",
6494
+ "step_waiting",
6495
+ "step_done",
6496
+ "step_skipped",
6497
+ "step_failed"
6498
+ ]);
6473
6499
  function groupThreadActivity(steps, items) {
6474
6500
  const out = { before: [], byStep: {}, after: [] };
6475
6501
  const states = {};
@@ -6478,12 +6504,12 @@ function groupThreadActivity(steps, items) {
6478
6504
  if (item.kind && STEP_KINDS.has(item.kind) && item.step) {
6479
6505
  current = item.step;
6480
6506
  states[item.step] = {
6481
- status: item.kind === "step_started" ? "running" : item.kind === "step_done" ? "done" : item.kind === "step_skipped" ? "skipped" : "failed"
6507
+ status: item.kind === "step_started" ? "running" : item.kind === "step_waiting" ? "waiting" : item.kind === "step_done" ? "done" : item.kind === "step_skipped" ? "skipped" : "failed"
6482
6508
  };
6483
6509
  continue;
6484
6510
  }
6485
6511
  if (current === void 0) out.before.push(item);
6486
- else if (chunkVYRKO3XU_cjs.isRunFinished(steps, states)) out.after.push(item);
6512
+ else if (chunkVFIZYSZB_cjs.isRunFinished(steps, states)) out.after.push(item);
6487
6513
  else {
6488
6514
  const status = states[current]?.status;
6489
6515
  const at = status === "done" || status === "skipped" ? steps.find((s) => !["done", "skipped"].includes(states[s.id]?.status ?? ""))?.id ?? current : current;
@@ -6498,7 +6524,9 @@ var DEFAULT_WORKFLOW_THREAD_STRIP_LABELS = {
6498
6524
  skip: "Skip this step",
6499
6525
  startedBy: "Started by {step} in {thread}",
6500
6526
  signalled: "This step signalled \u201C{signal}\u201D",
6501
- linkedRun: "Started on \u201C{signal}\u201D: open its thread"
6527
+ linkedRun: "Started on \u201C{signal}\u201D: open its thread",
6528
+ waitingFor: "Waiting for {name}",
6529
+ sentBack: "Sent back to be done again"
6502
6530
  };
6503
6531
  function WorkflowThreadStartedBy({
6504
6532
  origin,
@@ -6553,13 +6581,6 @@ function SignalPill({ signal, l }) {
6553
6581
  }
6554
6582
  );
6555
6583
  }
6556
- function Mark({ phase, icon }) {
6557
- if (phase === "done") return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-3.5" });
6558
- if (phase === "running") return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-3.5 animate-spin" });
6559
- if (phase === "failed") return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "size-3.5" });
6560
- if (phase === "skipped") return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MinusCircle, { className: "size-3.5" });
6561
- return icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-3.5 items-center justify-center [&_svg]:size-3.5", children: icon }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-1.5 rounded-full bg-current" });
6562
- }
6563
6584
  function Entry({ item }) {
6564
6585
  const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
6565
6586
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", children: item.avatar }),
@@ -6595,93 +6616,137 @@ function WorkflowThreadStrip({
6595
6616
  renderStepAction,
6596
6617
  signals = [],
6597
6618
  startedBy,
6619
+ assigneeOf,
6598
6620
  labels,
6621
+ barLabels,
6599
6622
  className
6600
6623
  }) {
6601
6624
  const l = { ...DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, ...labels };
6602
6625
  const grouped = groupThreadActivity(steps, items);
6603
6626
  const strays = signals.filter((s) => !steps.some((step) => step.id === s.step));
6604
6627
  const chevron = /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "size-3 shrink-0 text-muted-foreground" });
6605
- return /* @__PURE__ */ jsxRuntime.jsx(
6606
- "div",
6628
+ const [selected, setSelected] = react.useState(null);
6629
+ const [open, setOpen] = react.useState(null);
6630
+ const phaseOf = (id) => chunkVFIZYSZB_cjs.stepPhase(steps, states, id);
6631
+ const iconOf = (step) => step.icon && renderIcon ? renderIcon(step.icon) : void 0;
6632
+ const waitingOf = (id) => {
6633
+ const step = steps.find((s) => s.id === id);
6634
+ const phase = phaseOf(id);
6635
+ const name = step && (phase === "ready" || phase === "waiting") ? assigneeOf?.(step) : void 0;
6636
+ return name ? l.waitingFor.replace("{name}", name) : void 0;
6637
+ };
6638
+ const pill = (step, isCurrent, narrow = false) => {
6639
+ const phase = phaseOf(step.id);
6640
+ const happened = grouped.byStep[step.id] ?? [];
6641
+ const assignee = phase === "ready" || phase === "waiting" ? assigneeOf?.(step) : void 0;
6642
+ const waiting = assignee ? l.waitingFor.replace("{name}", assignee) : void 0;
6643
+ const sentBack = states[step.id]?.sentBack;
6644
+ return /* @__PURE__ */ jsxRuntime.jsxs(ui.Popover, { open: open === step.id, onOpenChange: (o) => setOpen(o ? step.id : null), children: [
6645
+ /* @__PURE__ */ jsxRuntime.jsx(ui.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
6646
+ "button",
6647
+ {
6648
+ type: "button",
6649
+ className: ui.cn(chunkVFIZYSZB_cjs.STEP_PILL, "py-0.5", chunkVFIZYSZB_cjs.stepPillTone(phase, isCurrent)),
6650
+ "aria-current": isCurrent ? "step" : void 0,
6651
+ title: waiting ? `${step.title} \xB7 ${waiting}` : step.title,
6652
+ "data-phase": phase,
6653
+ "data-testid": `workflow-thread-step-${step.id}`,
6654
+ children: [
6655
+ /* @__PURE__ */ jsxRuntime.jsx(chunkVFIZYSZB_cjs.PhaseMark, { phase, icon: iconOf(step) }),
6656
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: ui.cn(chunkVFIZYSZB_cjs.STEP_LABEL, isCurrent ? "max-w-[16rem]" : "max-w-[11rem]"), children: step.title }),
6657
+ sentBack && /* @__PURE__ */ jsxRuntime.jsx(
6658
+ lucideReact.CornerUpLeft,
6659
+ {
6660
+ className: "size-3 shrink-0 text-amber-600 dark:text-amber-400",
6661
+ "aria-label": l.sentBack,
6662
+ "data-testid": `workflow-thread-step-${step.id}-sent-back`
6663
+ }
6664
+ ),
6665
+ assignee && isCurrent && !narrow && /* @__PURE__ */ jsxRuntime.jsxs(
6666
+ "span",
6667
+ {
6668
+ className: ui.cn(chunkVFIZYSZB_cjs.STEP_EXTRA, "flex max-w-[12rem] items-center gap-0.5"),
6669
+ title: waiting,
6670
+ "data-testid": `workflow-thread-step-${step.id}-assignee`,
6671
+ children: [
6672
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserRound, { className: "size-3 shrink-0" }),
6673
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: waiting })
6674
+ ]
6675
+ }
6676
+ ),
6677
+ 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 })
6678
+ ]
6679
+ }
6680
+ ) }),
6681
+ /* @__PURE__ */ jsxRuntime.jsxs(
6682
+ ui.PopoverContent,
6683
+ {
6684
+ align: "start",
6685
+ className: "w-72 space-y-1 p-2",
6686
+ "data-testid": `workflow-thread-step-${step.id}-menu`,
6687
+ children: [
6688
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-1 text-xs font-semibold", children: step.title }),
6689
+ assignee && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-1 text-xs", "data-testid": `workflow-thread-step-${step.id}-waiting-for`, children: waiting }),
6690
+ sentBack && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-1 text-xs text-amber-700 dark:text-amber-300", children: l.sentBack }),
6691
+ /* @__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 }),
6692
+ happened.map((item) => /* @__PURE__ */ jsxRuntime.jsx(Entry, { item }, item.id)),
6693
+ renderStepAction?.(step, phase),
6694
+ onSkip && ["ready", "blocked", "failed", "waiting"].includes(phase) && /* @__PURE__ */ jsxRuntime.jsx(
6695
+ "button",
6696
+ {
6697
+ type: "button",
6698
+ onClick: () => onSkip(step.id),
6699
+ className: "w-full rounded-md px-1 py-1 text-left text-xs text-muted-foreground hover:bg-accent",
6700
+ "data-testid": `workflow-thread-step-${step.id}-skip`,
6701
+ children: l.skip
6702
+ }
6703
+ )
6704
+ ]
6705
+ }
6706
+ )
6707
+ ] });
6708
+ };
6709
+ const leading = startedBy || grouped.before.length ? /* @__PURE__ */ jsxRuntime.jsxs("ol", { className: "flex shrink-0 items-center gap-1", children: [
6710
+ startedBy && /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex shrink-0 items-center gap-1", children: [
6711
+ /* @__PURE__ */ jsxRuntime.jsx(WorkflowThreadStartedBy, { origin: startedBy, labels }),
6712
+ chevron
6713
+ ] }),
6714
+ grouped.before.map((item) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex shrink-0 items-center gap-1", children: [
6715
+ /* @__PURE__ */ jsxRuntime.jsx(Entry, { item }),
6716
+ chevron
6717
+ ] }, item.id))
6718
+ ] }) : null;
6719
+ const trailing = grouped.after.length || strays.length ? /* @__PURE__ */ jsxRuntime.jsxs("ol", { className: "flex shrink-0 items-center gap-1", children: [
6720
+ grouped.after.map((item) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex shrink-0 items-center gap-1", children: [
6721
+ chevron,
6722
+ /* @__PURE__ */ jsxRuntime.jsx(Entry, { item })
6723
+ ] }, item.id)),
6724
+ 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}`))
6725
+ ] }) : null;
6726
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("min-w-0 flex-1", className), "data-testid": "workflow-thread-strip", children: /* @__PURE__ */ jsxRuntime.jsx(
6727
+ chunkVFIZYSZB_cjs.StepBarFrame,
6607
6728
  {
6608
- className: ui.cn("min-w-0 flex-1 overflow-x-auto overscroll-x-contain", className),
6609
- role: "region",
6610
- "aria-label": "Workflow steps",
6611
- "data-testid": "workflow-thread-strip",
6612
- children: /* @__PURE__ */ jsxRuntime.jsxs("ol", { className: "flex w-max min-w-full items-center gap-1", children: [
6613
- startedBy && /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex shrink-0 items-center gap-1", children: [
6614
- /* @__PURE__ */ jsxRuntime.jsx(WorkflowThreadStartedBy, { origin: startedBy, labels }),
6615
- chevron
6616
- ] }),
6617
- grouped.before.map((item) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex shrink-0 items-center gap-1", children: [
6618
- /* @__PURE__ */ jsxRuntime.jsx(Entry, { item }),
6619
- chevron
6620
- ] }, item.id)),
6621
- steps.map((step, i) => {
6622
- const phase = chunkVYRKO3XU_cjs.stepPhase(steps, states, step.id);
6623
- const happened = grouped.byStep[step.id] ?? [];
6624
- const chip = /* @__PURE__ */ jsxRuntime.jsxs(
6625
- "span",
6626
- {
6627
- className: ui.cn(
6628
- "flex shrink-0 items-center gap-1.5 whitespace-nowrap rounded-full border px-2 py-0.5 text-xs font-medium",
6629
- phase === "running" || phase === "ready" ? "border-primary bg-primary/10 text-primary" : phase === "done" || phase === "skipped" ? "border-primary/30 text-primary" : phase === "failed" ? "border-destructive/40 text-destructive" : "border-dashed border-border text-muted-foreground"
6630
- ),
6631
- "data-phase": phase,
6632
- "data-testid": `workflow-thread-step-${step.id}`,
6633
- children: [
6634
- /* @__PURE__ */ jsxRuntime.jsx(
6635
- Mark,
6636
- {
6637
- phase,
6638
- icon: step.icon && renderIcon ? renderIcon(step.icon) : void 0
6639
- }
6640
- ),
6641
- step.title,
6642
- happened.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-muted px-1.5 text-[10px] text-muted-foreground", children: happened.length })
6643
- ]
6644
- }
6645
- );
6646
- return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex shrink-0 items-center gap-1", children: [
6647
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Popover, { children: [
6648
- /* @__PURE__ */ jsxRuntime.jsx(ui.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "rounded-full", children: chip }) }),
6649
- /* @__PURE__ */ jsxRuntime.jsxs(
6650
- ui.PopoverContent,
6651
- {
6652
- align: "start",
6653
- className: "w-72 space-y-1 p-2",
6654
- "data-testid": `workflow-thread-step-${step.id}-menu`,
6655
- children: [
6656
- /* @__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 }),
6657
- happened.map((item) => /* @__PURE__ */ jsxRuntime.jsx(Entry, { item }, item.id)),
6658
- renderStepAction?.(step, phase),
6659
- onSkip && ["ready", "blocked", "failed"].includes(phase) && /* @__PURE__ */ jsxRuntime.jsx(
6660
- "button",
6661
- {
6662
- type: "button",
6663
- onClick: () => onSkip(step.id),
6664
- className: "w-full rounded-md px-1 py-1 text-left text-xs text-muted-foreground hover:bg-accent",
6665
- "data-testid": `workflow-thread-step-${step.id}-skip`,
6666
- children: l.skip
6667
- }
6668
- )
6669
- ]
6670
- }
6671
- )
6672
- ] }),
6673
- signals.filter((s) => s.step === step.id).map((s) => /* @__PURE__ */ jsxRuntime.jsx(SignalPill, { signal: s, l }, `${s.step}-${s.signal}`)),
6674
- (i < steps.length - 1 || grouped.after.length > 0 || strays.length > 0) && chevron
6675
- ] }, step.id);
6676
- }),
6677
- grouped.after.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex shrink-0 items-center gap-1", children: [
6678
- /* @__PURE__ */ jsxRuntime.jsx(Entry, { item }),
6679
- (i < grouped.after.length - 1 || strays.length > 0) && chevron
6680
- ] }, item.id)),
6681
- 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}`))
6682
- ] })
6729
+ levels: chunkVFIZYSZB_cjs.stepLevels(steps),
6730
+ phaseOf,
6731
+ current: selected,
6732
+ onSelect: (id) => {
6733
+ setSelected(id);
6734
+ setOpen(id);
6735
+ },
6736
+ renderStep: (step, _level, win, narrow) => pill(
6737
+ step,
6738
+ step.id === win.levels[win.currentLevel]?.primary.id || step.id === selected,
6739
+ narrow
6740
+ ),
6741
+ noteOf: waitingOf,
6742
+ 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}`)),
6743
+ leading,
6744
+ trailing,
6745
+ icon: iconOf,
6746
+ labels: { waitingFor: l.waitingFor, ...barLabels },
6747
+ tid: (suffix) => `workflow-thread-${suffix}`
6683
6748
  }
6684
- );
6749
+ ) });
6685
6750
  }
6686
6751
 
6687
6752
  // src/agents/tasks/linkedRuns.ts
@@ -6719,7 +6784,10 @@ var STEP_LABELS = {
6719
6784
  step_started: "Step started",
6720
6785
  step_done: "Step done",
6721
6786
  step_skipped: "Step skipped",
6722
- step_failed: "Step failed"
6787
+ step_failed: "Step failed",
6788
+ step_waiting: "Waiting",
6789
+ step_progress: "Signed",
6790
+ step_sent_back: "Sent back"
6723
6791
  };
6724
6792
  function compactThreadActivity(events) {
6725
6793
  const result = [];
@@ -7140,7 +7208,7 @@ function defaultTaskComposerValues(workflows, initial) {
7140
7208
  return {
7141
7209
  assignee: "me",
7142
7210
  workflowId,
7143
- inputs: workflow ? { ...chunkVYRKO3XU_cjs.defaultInputs(workflow), ...initial?.inputs } : { ...initial?.inputs },
7211
+ inputs: workflow ? { ...chunkVFIZYSZB_cjs.defaultInputs(workflow), ...initial?.inputs } : { ...initial?.inputs },
7144
7212
  when: "manual",
7145
7213
  runAt: "",
7146
7214
  rrule: "",
@@ -7249,7 +7317,7 @@ function WorkflowComposer({
7249
7317
  return !docs?.length;
7250
7318
  })
7251
7319
  );
7252
- const whatMissing = !workflow || Object.keys(chunkVYRKO3XU_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs)).length > 0;
7320
+ const whatMissing = !workflow || Object.keys(chunkVFIZYSZB_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs)).length > 0;
7253
7321
  const runAtPast = values.when === "once" && values.runAt !== "" && values.runAt !== initialValues?.runAt && new Date(values.runAt).getTime() <= Date.now();
7254
7322
  const whenMissing = missingWhen(values, runAtPast);
7255
7323
  const scheduled = values.when !== "now" && values.when !== "manual";
@@ -7261,7 +7329,7 @@ function WorkflowComposer({
7261
7329
  setValues({
7262
7330
  ...values,
7263
7331
  workflowId: next,
7264
- inputs: def ? chunkVYRKO3XU_cjs.defaultInputs(def) : {},
7332
+ inputs: def ? chunkVFIZYSZB_cjs.defaultInputs(def) : {},
7265
7333
  ...def?.documentAction ? { access: "standing" } : {}
7266
7334
  });
7267
7335
  };
@@ -7399,7 +7467,7 @@ function WorkflowComposer({
7399
7467
  }
7400
7468
  ),
7401
7469
  !noFiles && workflow && fields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
7402
- chunkVYRKO3XU_cjs.SchemaForm,
7470
+ chunkVFIZYSZB_cjs.SchemaForm,
7403
7471
  {
7404
7472
  fields,
7405
7473
  values: values.inputs,
@@ -7838,7 +7906,7 @@ function WorkTaskComposer({
7838
7906
  }, [open]);
7839
7907
  const workflow = workflows.find((w) => w.id === values.workflowId);
7840
7908
  const fields = workflow?.inputs ?? [];
7841
- const errors = workflow ? chunkVYRKO3XU_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs) : {};
7909
+ const errors = workflow ? chunkVFIZYSZB_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs) : {};
7842
7910
  const hasWork = configOpen && Boolean(workflow) && Object.keys(errors).length === 0;
7843
7911
  const unattended = hasWork && values.when !== "now" && values.when !== "manual";
7844
7912
  const canConfigure = !isEdit || seed.assignee === "agent";
@@ -7846,7 +7914,7 @@ function WorkTaskComposer({
7846
7914
  const set = (key, value) => setValues({ ...values, [key]: value });
7847
7915
  const pickWorkflow = (id2) => {
7848
7916
  const next = workflows.find((w) => w.id === id2);
7849
- setValues({ ...values, workflowId: id2, inputs: next ? chunkVYRKO3XU_cjs.defaultInputs(next) : {} });
7917
+ setValues({ ...values, workflowId: id2, inputs: next ? chunkVFIZYSZB_cjs.defaultInputs(next) : {} });
7850
7918
  };
7851
7919
  const openConfigure = () => {
7852
7920
  setConfigOpen(true);
@@ -8032,7 +8100,7 @@ function WorkTaskComposer({
8032
8100
  )
8033
8101
  ] }),
8034
8102
  workflow && fields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
8035
- chunkVYRKO3XU_cjs.SchemaForm,
8103
+ chunkVFIZYSZB_cjs.SchemaForm,
8036
8104
  {
8037
8105
  fields,
8038
8106
  values: values.inputs,
@@ -10215,5 +10283,5 @@ exports.workflowToComposerValues = workflowToComposerValues;
10215
10283
  exports.workflowToSkillMarkdown = workflowToSkillMarkdown;
10216
10284
  exports.workflowTriggerType = workflowTriggerType;
10217
10285
  exports.workflowWhen = workflowWhen;
10218
- //# sourceMappingURL=chunk-7FKARMA3.cjs.map
10219
- //# sourceMappingURL=chunk-7FKARMA3.cjs.map
10286
+ //# sourceMappingURL=chunk-SSDISIDW.cjs.map
10287
+ //# sourceMappingURL=chunk-SSDISIDW.cjs.map