@axiom-lattice/react-sdk 4.6.3 → 4.6.5

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 (51) hide show
  1. package/dist/{AgentDetailSideApp-OBDHXBHZ.mjs → AgentDetailSideApp-2ZWWXXAM.mjs} +6 -6
  2. package/dist/{AgentGovernanceWorkbench-GGVJP6GJ.mjs → AgentGovernanceWorkbench-BZDX64QS.mjs} +7 -7
  3. package/dist/{MessageGraph-GTPXPTZC.mjs → MessageGraph-C5WP23G7.mjs} +2 -2
  4. package/dist/{ReactChart-JEUW4EU2.mjs → ReactChart-JH2RKBRE.mjs} +2 -2
  5. package/dist/{TasksSideApp-74BUDYDZ.mjs → TasksSideApp-H7HMCYAP.mjs} +3 -3
  6. package/dist/{TeamWorkspace-EDO2D3QP.mjs → TeamWorkspace-QHSRNALK.mjs} +2 -2
  7. package/dist/{TopologyRuntimeView-TJ2O6QAK.mjs → TopologyRuntimeView-NDPEEC4A.mjs} +3 -3
  8. package/dist/{WorkflowAutomationView-BMP5ALOD.mjs → WorkflowAutomationView-B5ZKGVJQ.mjs} +5 -5
  9. package/dist/{chunk-RCMWZB5U.mjs → chunk-4R3453QP.mjs} +2 -2
  10. package/dist/{chunk-Y4VGUJAK.mjs → chunk-KLNZZCOC.mjs} +4 -4
  11. package/dist/{chunk-3SVN3DBY.mjs → chunk-LVWTPDHR.mjs} +308 -68
  12. package/dist/chunk-LVWTPDHR.mjs.map +1 -0
  13. package/dist/{chunk-MQJ4GZ45.mjs → chunk-RU45MWG6.mjs} +5 -5
  14. package/dist/{chunk-XVRNO7O4.mjs → chunk-SBL4B3F6.mjs} +2 -2
  15. package/dist/{chunk-H2YPL7NX.mjs → chunk-SC7PWT7C.mjs} +4 -4
  16. package/dist/{chunk-WD5XJQ7Y.mjs → chunk-ZIOX5BRF.mjs} +2 -2
  17. package/dist/{embed-page-AgentDetailSideApp-IV5GFM6V.js → embed-page-AgentDetailSideApp-MVSXAG5S.js} +1 -1
  18. package/dist/{embed-page-AgentGovernanceWorkbench-O7EHZD7A.js → embed-page-AgentGovernanceWorkbench-ZEVAVRIQ.js} +1 -1
  19. package/dist/{embed-page-MessageGraph-TPEQXQVI.js → embed-page-MessageGraph-CPZJIKOD.js} +1 -1
  20. package/dist/{embed-page-ReactChart-A54ZOWXH.js → embed-page-ReactChart-7NQMTFJE.js} +1 -1
  21. package/dist/{embed-page-TasksSideApp-VVT5TJHD.js → embed-page-TasksSideApp-CY6NI4DD.js} +1 -1
  22. package/dist/{embed-page-TeamWorkspace-UJCO54AJ.js → embed-page-TeamWorkspace-7GQCMJWF.js} +1 -1
  23. package/dist/{embed-page-TopologyRuntimeView-S65ORYJP.js → embed-page-TopologyRuntimeView-5DJPLCLQ.js} +1 -1
  24. package/dist/{embed-page-WorkflowAutomationView-U346EREK.js → embed-page-WorkflowAutomationView-PDVXZXEF.js} +1 -1
  25. package/dist/embed-page-chunk-3SV3E6X5.js +6986 -0
  26. package/dist/{embed-page-chunk-5KAV3UKK.js → embed-page-chunk-BKCIU75D.js} +1 -1
  27. package/dist/{embed-page-chunk-ZWOJE3I4.js → embed-page-chunk-PZCET7LJ.js} +1 -1
  28. package/dist/{embed-page-chunk-HXKUWQKZ.js → embed-page-chunk-SFHRRNYQ.js} +1 -1
  29. package/dist/{embed-page-chunk-ZXXK35AA.js → embed-page-chunk-ULBEL4OA.js} +1 -1
  30. package/dist/{embed-page-chunk-DLMNBQDM.js → embed-page-chunk-UWL37DAK.js} +1 -1
  31. package/dist/embed-page.js +1 -1
  32. package/dist/index.js +298 -57
  33. package/dist/index.js.map +1 -1
  34. package/dist/index.mjs +7 -7
  35. package/package.json +3 -3
  36. package/dist/chunk-3SVN3DBY.mjs.map +0 -1
  37. package/dist/embed-page-chunk-PJ6DIO3E.js +0 -6985
  38. /package/dist/{AgentDetailSideApp-OBDHXBHZ.mjs.map → AgentDetailSideApp-2ZWWXXAM.mjs.map} +0 -0
  39. /package/dist/{AgentGovernanceWorkbench-GGVJP6GJ.mjs.map → AgentGovernanceWorkbench-BZDX64QS.mjs.map} +0 -0
  40. /package/dist/{MessageGraph-GTPXPTZC.mjs.map → MessageGraph-C5WP23G7.mjs.map} +0 -0
  41. /package/dist/{ReactChart-JEUW4EU2.mjs.map → ReactChart-JH2RKBRE.mjs.map} +0 -0
  42. /package/dist/{TasksSideApp-74BUDYDZ.mjs.map → TasksSideApp-H7HMCYAP.mjs.map} +0 -0
  43. /package/dist/{TeamWorkspace-EDO2D3QP.mjs.map → TeamWorkspace-QHSRNALK.mjs.map} +0 -0
  44. /package/dist/{TopologyRuntimeView-TJ2O6QAK.mjs.map → TopologyRuntimeView-NDPEEC4A.mjs.map} +0 -0
  45. /package/dist/{WorkflowAutomationView-BMP5ALOD.mjs.map → WorkflowAutomationView-B5ZKGVJQ.mjs.map} +0 -0
  46. /package/dist/{chunk-RCMWZB5U.mjs.map → chunk-4R3453QP.mjs.map} +0 -0
  47. /package/dist/{chunk-Y4VGUJAK.mjs.map → chunk-KLNZZCOC.mjs.map} +0 -0
  48. /package/dist/{chunk-MQJ4GZ45.mjs.map → chunk-RU45MWG6.mjs.map} +0 -0
  49. /package/dist/{chunk-XVRNO7O4.mjs.map → chunk-SBL4B3F6.mjs.map} +0 -0
  50. /package/dist/{chunk-H2YPL7NX.mjs.map → chunk-SC7PWT7C.mjs.map} +0 -0
  51. /package/dist/{chunk-WD5XJQ7Y.mjs.map → chunk-ZIOX5BRF.mjs.map} +0 -0
package/dist/index.js CHANGED
@@ -4456,6 +4456,17 @@ function AgentThreadProvider({
4456
4456
  onStreamCompletedRef.current = onStreamCompleted;
4457
4457
  const pendingIdsRef = (0, import_react14.useRef)(/* @__PURE__ */ new Set());
4458
4458
  const inFlightRef = (0, import_react14.useRef)(0);
4459
+ const dismissedInterruptIdsRef = (0, import_react14.useRef)(/* @__PURE__ */ new Set());
4460
+ const interruptsRef = (0, import_react14.useRef)(state.interrupts);
4461
+ interruptsRef.current = state.interrupts;
4462
+ const isDismissedInterrupt = (0, import_react14.useCallback)(
4463
+ (id2) => id2 !== void 0 && dismissedInterruptIdsRef.current.has(id2),
4464
+ []
4465
+ );
4466
+ const filterDismissedInterrupts = (0, import_react14.useCallback)(
4467
+ (list2) => list2?.filter((interrupt) => !dismissedInterruptIdsRef.current.has(interrupt.id)),
4468
+ []
4469
+ );
4459
4470
  const historyLoadingRef = (0, import_react14.useRef)(false);
4460
4471
  const streamActiveRef = (0, import_react14.useRef)(false);
4461
4472
  const historyGenerationRef = (0, import_react14.useRef)(0);
@@ -4471,6 +4482,7 @@ function AgentThreadProvider({
4471
4482
  historyLoadingRef.current = false;
4472
4483
  inFlightRef.current = 0;
4473
4484
  streamActiveRef.current = false;
4485
+ dismissedInterruptIdsRef.current = /* @__PURE__ */ new Set();
4474
4486
  }
4475
4487
  const isLoadingRef = (0, import_react14.useRef)(state.isLoading);
4476
4488
  isLoadingRef.current = state.isLoading;
@@ -4500,8 +4512,9 @@ function AgentThreadProvider({
4500
4512
  };
4501
4513
  });
4502
4514
  });
4503
- if (fetchedInterrupts?.length) {
4504
- needUpdateFields.interrupts = fetchedInterrupts;
4515
+ const remainingInterrupts = filterDismissedInterrupts(fetchedInterrupts);
4516
+ if (remainingInterrupts?.length) {
4517
+ needUpdateFields.interrupts = remainingInterrupts;
4505
4518
  }
4506
4519
  needUpdateFields.todos = agentState?.values?.todos;
4507
4520
  needUpdateFields.tasks = agentState?.values?.tasks;
@@ -4513,7 +4526,7 @@ function AgentThreadProvider({
4513
4526
  console.warn("Failed to fetch agent state:", error);
4514
4527
  }
4515
4528
  },
4516
- [client, options.enableReturnStateWhenStreamCompleted]
4529
+ [client, options.enableReturnStateWhenStreamCompleted, filterDismissedInterrupts]
4517
4530
  );
4518
4531
  (0, import_react14.useEffect)(() => {
4519
4532
  if (options.initialMessages && options.initialMessages.length > 0) {
@@ -4613,13 +4626,14 @@ function AgentThreadProvider({
4613
4626
  isLoadingRef.current = isLoading;
4614
4627
  setState((prev) => {
4615
4628
  if (currentThreadIdRef.current !== threadId) return prev;
4629
+ const nextInterrupts = interrupt ? isDismissedInterrupt(interrupt.id) ? prev.interrupts : [interrupt] : void 0;
4616
4630
  return {
4617
4631
  ...prev,
4618
4632
  todos: todos || prev.todos,
4619
4633
  messages: chunkMessageMerger.current.getMessages(),
4620
4634
  isLoading,
4621
4635
  stopReason: null,
4622
- interrupts: interrupt ? [interrupt] : void 0
4636
+ interrupts: nextInterrupts
4623
4637
  };
4624
4638
  });
4625
4639
  } else {
@@ -4639,7 +4653,7 @@ function AgentThreadProvider({
4639
4653
  });
4640
4654
  }
4641
4655
  },
4642
- [getOwnedLoading, startTransition, threadId]
4656
+ [getOwnedLoading, startTransition, threadId, isDismissedInterrupt]
4643
4657
  );
4644
4658
  const handleStreamEventRef = (0, import_react14.useRef)(handleStreamEvent);
4645
4659
  handleStreamEventRef.current = handleStreamEvent;
@@ -4669,8 +4683,14 @@ function AgentThreadProvider({
4669
4683
  };
4670
4684
  messageActivityGenerationRef.current += 1;
4671
4685
  const wasIdle = !getOwnedLoading();
4686
+ const isHitlResume = command?.resume !== void 0;
4687
+ if (isHitlResume) {
4688
+ for (const pending of interruptsRef.current ?? []) {
4689
+ dismissedInterruptIdsRef.current.add(pending.id);
4690
+ }
4691
+ }
4672
4692
  inFlightRef.current += 1;
4673
- if (wasIdle) {
4693
+ if (wasIdle || isHitlResume) {
4674
4694
  const isLoading = getOwnedLoading();
4675
4695
  isLoadingRef.current = isLoading;
4676
4696
  setState((prev) => ({
@@ -4863,8 +4883,8 @@ function AgentThreadProvider({
4863
4883
  };
4864
4884
  });
4865
4885
  }
4866
- );
4867
- needUpdateFields.interrupts = interrupts;
4886
+ ) ?? [];
4887
+ needUpdateFields.interrupts = filterDismissedInterrupts(interrupts);
4868
4888
  const fetchedMessages = await client.getMessages({ threadId: capturedThreadId });
4869
4889
  if (capturedEpoch !== threadEpochRef.current || currentThreadIdRef.current !== capturedThreadId || capturedGeneration !== historyGenerationRef.current) return;
4870
4890
  historyLoadingRef.current = false;
@@ -4882,7 +4902,7 @@ function AgentThreadProvider({
4882
4902
  return {
4883
4903
  ...prev,
4884
4904
  ...needUpdateFields,
4885
- interrupts: prev.interrupts ?? needUpdateFields.interrupts,
4905
+ interrupts: filterDismissedInterrupts(prev.interrupts ?? needUpdateFields.interrupts),
4886
4906
  messages: chunkMessageMerger.current.getMessages(),
4887
4907
  isLoading
4888
4908
  };
@@ -4906,7 +4926,8 @@ function AgentThreadProvider({
4906
4926
  handleStreamEvent,
4907
4927
  fetchAndUpdateAgentState,
4908
4928
  getOwnedLoading,
4909
- resumeStream
4929
+ resumeStream,
4930
+ filterDismissedInterrupts
4910
4931
  ]);
4911
4932
  const clearMessages = (0, import_react14.useCallback)(() => {
4912
4933
  messageActivityGenerationRef.current += 1;
@@ -84549,7 +84570,7 @@ var init_read_eval_card = __esm({
84549
84570
  });
84550
84571
 
84551
84572
  // src/components/GenUI/elements/task_manage_card.tsx
84552
- var import_antd49, import_antd_style27, import_lucide_react24, import_jsx_runtime167, Text20, useStyles19, actionTitleStyle4, truncate2, statusColor, priorityColor, openTaskSideApp, TaskLiveCard, TaskListCard, TaskDeleteCard, failureActionLabel, TaskFailureCard, TaskManageCard;
84573
+ var import_antd49, import_antd_style27, import_lucide_react24, import_jsx_runtime167, Text20, useStyles19, actionTitleStyle4, truncate2, firstLine, statusColor, priorityColor, StatusDot, HoverReveal, resolveLiveView, resolveListStats, resolveActivityView, TaskLiveCard, TaskLiveHoverCard, TaskListCard, TaskListHoverCard, TaskActivityCard, TaskActivityHoverCard, TaskDeleteDetailCard, TaskDeleteHoverCard, failureActionLabel, TaskFailureCard, extractTask, TaskManageCard;
84553
84574
  var init_task_manage_card = __esm({
84554
84575
  "src/components/GenUI/elements/task_manage_card.tsx"() {
84555
84576
  "use strict";
@@ -84559,6 +84580,7 @@ var init_task_manage_card = __esm({
84559
84580
  init_SideAppBrowserContext();
84560
84581
  init_eval_manage_card();
84561
84582
  init_EntityCard();
84583
+ init_MDResponse();
84562
84584
  import_jsx_runtime167 = require("react/jsx-runtime");
84563
84585
  ({ Text: Text20 } = import_antd49.Typography);
84564
84586
  useStyles19 = (0, import_antd_style27.createStyles)(({ css }) => ({
@@ -84586,6 +84608,10 @@ var init_task_manage_card = __esm({
84586
84608
  letterSpacing: 0.5
84587
84609
  };
84588
84610
  truncate2 = (s4, max5 = 120) => s4.length > max5 ? s4.slice(0, max5) + "..." : s4;
84611
+ firstLine = (s4) => {
84612
+ const line2 = s4.split("\n").map((l3) => l3.replace(/^#+\s*/, "").trim()).find((l3) => l3.length > 0) ?? "";
84613
+ return truncate2(line2, 80);
84614
+ };
84589
84615
  statusColor = {
84590
84616
  pending: "#9ca3af",
84591
84617
  in_progress: "#3b82f6",
@@ -84600,28 +84626,89 @@ var init_task_manage_card = __esm({
84600
84626
  medium: "#f59e0b",
84601
84627
  low: "#9ca3af"
84602
84628
  };
84603
- openTaskSideApp = (openSideApp) => {
84604
- openSideApp({ component_key: "manage_task", data: {} });
84605
- };
84606
- TaskLiveCard = ({ data, result }) => {
84607
- const openSideApp = useSideAppOpener();
84629
+ StatusDot = ({ status }) => /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(
84630
+ "span",
84631
+ {
84632
+ style: {
84633
+ width: 8,
84634
+ height: 8,
84635
+ borderRadius: "50%",
84636
+ background: statusColor[status] ?? "#9ca3af",
84637
+ display: "inline-block",
84638
+ flexShrink: 0
84639
+ }
84640
+ }
84641
+ );
84642
+ HoverReveal = ({ chip, detail, onClick }) => {
84608
84643
  const { styles } = useStyles19();
84644
+ const trigger = /* @__PURE__ */ (0, import_jsx_runtime167.jsx)("span", { "data-testid": "manage-task-chip", style: { display: "inline-block", maxWidth: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(
84645
+ EntityCard,
84646
+ {
84647
+ item: null,
84648
+ dense: true,
84649
+ className: styles.compactLiveCard,
84650
+ onClick: onClick ? () => onClick() : void 0,
84651
+ renderPrimary: () => /* @__PURE__ */ (0, import_jsx_runtime167.jsx)("div", { style: { display: "flex", alignItems: "center", gap: 8, minWidth: 0 }, children: chip })
84652
+ }
84653
+ ) });
84654
+ if (!detail) return trigger;
84655
+ return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(
84656
+ import_antd49.Popover,
84657
+ {
84658
+ content: /* @__PURE__ */ (0, import_jsx_runtime167.jsx)("div", { style: { maxWidth: 420 }, children: detail }),
84659
+ trigger: "hover",
84660
+ placement: "rightTop",
84661
+ mouseEnterDelay: 0.15,
84662
+ mouseLeaveDelay: 0.1,
84663
+ children: trigger
84664
+ }
84665
+ );
84666
+ };
84667
+ resolveLiveView = (data, result, task) => {
84609
84668
  const args = data?.args ?? {};
84610
84669
  const action = args.action ?? "";
84611
- const item = result.data ?? {};
84612
- const verb = action === "create" ? "CREATE TASK" : action === "set_status" ? "SET STATUS" : "UPDATE TASK";
84613
- const title = item.title ?? args.title ?? "";
84614
- const description = item.description ?? "";
84615
- const status = item.status ?? "pending";
84616
- const priority = item.priority ?? "medium";
84617
- const dependencies = Array.isArray(item.dependencies) ? item.dependencies : [];
84618
- const reviewerAction = result.reviewerAction;
84670
+ const item = task ?? result.data ?? {};
84671
+ return {
84672
+ verb: action === "create" ? "CREATE TASK" : action === "set_status" ? "SET STATUS" : action === "get" ? "TASK" : "UPDATE TASK",
84673
+ title: item.title ?? args.title ?? "",
84674
+ status: item.status ?? "pending",
84675
+ description: item.description ?? "",
84676
+ priority: item.priority ?? "medium",
84677
+ dependencies: Array.isArray(item.dependencies) ? item.dependencies : [],
84678
+ reviewerAction: result.reviewerAction
84679
+ };
84680
+ };
84681
+ resolveListStats = (result) => {
84682
+ const items3 = Array.isArray(result.data) ? result.data : [];
84683
+ return {
84684
+ items: items3,
84685
+ count: result.count ?? items3.length,
84686
+ inProgress: items3.filter((t4) => t4.status === "in_progress").length,
84687
+ completed: items3.filter((t4) => t4.status === "completed").length
84688
+ };
84689
+ };
84690
+ resolveActivityView = (data, result, task) => {
84691
+ const args = data?.args ?? {};
84692
+ const activity = result.data ?? {};
84693
+ const markdown = activity?.detail?.markdown ?? args.content ?? "";
84694
+ return {
84695
+ markdown,
84696
+ summary: activity?.summary ?? args.summary ?? firstLine(markdown),
84697
+ title: task?.title ?? "",
84698
+ status: task?.status ?? "pending"
84699
+ };
84700
+ };
84701
+ TaskLiveCard = ({ data, result, task }) => {
84702
+ const openSideApp = useSideAppOpener();
84703
+ const { styles } = useStyles19();
84704
+ const { verb, title, status, description, priority, dependencies, reviewerAction } = resolveLiveView(data, result, task);
84705
+ const item = task ?? result.data ?? {};
84619
84706
  const handleClick = () => {
84620
84707
  if (item.id) {
84621
84708
  openSideApp({ component_key: "manage_task", data: { task: item } });
84622
84709
  return;
84623
84710
  }
84624
- openTaskSideApp(openSideApp);
84711
+ openSideApp({ component_key: "manage_task", data: {} });
84625
84712
  };
84626
84713
  return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(
84627
84714
  EntityCard,
@@ -84633,19 +84720,7 @@ var init_task_manage_card = __esm({
84633
84720
  renderPrimary: () => /* @__PURE__ */ (0, import_jsx_runtime167.jsxs)(import_jsx_runtime167.Fragment, { children: [
84634
84721
  /* @__PURE__ */ (0, import_jsx_runtime167.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
84635
84722
  /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(Text20, { strong: true, style: actionTitleStyle4, children: verb }),
84636
- /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(
84637
- "span",
84638
- {
84639
- style: {
84640
- width: 8,
84641
- height: 8,
84642
- borderRadius: "50%",
84643
- background: statusColor[status] ?? "#9ca3af",
84644
- display: "inline-block",
84645
- flexShrink: 0
84646
- }
84647
- }
84648
- )
84723
+ /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(StatusDot, { status })
84649
84724
  ] }),
84650
84725
  /* @__PURE__ */ (0, import_jsx_runtime167.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(Text20, { strong: true, style: { fontSize: 14 }, children: title }) })
84651
84726
  ] }),
@@ -84664,14 +84739,48 @@ var init_task_manage_card = __esm({
84664
84739
  }
84665
84740
  );
84666
84741
  };
84742
+ TaskLiveHoverCard = ({ data, result, task }) => {
84743
+ const openSideApp = useSideAppOpener();
84744
+ const action = data?.args?.action ?? "";
84745
+ const { verb, title, status } = resolveLiveView(data, result, task);
84746
+ const handleClick = () => {
84747
+ if (task.id) {
84748
+ openSideApp({ component_key: "manage_task", data: { task } });
84749
+ return;
84750
+ }
84751
+ openSideApp({ component_key: "manage_task", data: {} });
84752
+ };
84753
+ return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(
84754
+ HoverReveal,
84755
+ {
84756
+ onClick: handleClick,
84757
+ detail: /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(TaskLiveCard, { data, result, task }),
84758
+ chip: /* @__PURE__ */ (0, import_jsx_runtime167.jsxs)(import_jsx_runtime167.Fragment, { children: [
84759
+ /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(Text20, { strong: true, style: actionTitleStyle4, children: verb }),
84760
+ /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(
84761
+ Text20,
84762
+ {
84763
+ style: {
84764
+ fontSize: 13,
84765
+ flex: 1,
84766
+ minWidth: 0,
84767
+ overflow: "hidden",
84768
+ textOverflow: "ellipsis",
84769
+ whiteSpace: "nowrap"
84770
+ },
84771
+ children: title
84772
+ }
84773
+ ),
84774
+ action === "set_status" ? /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(Text20, { style: { fontSize: 12, flexShrink: 0, color: statusColor[status] ?? "#9ca3af" }, children: status }) : /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(StatusDot, { status })
84775
+ ] })
84776
+ }
84777
+ );
84778
+ };
84667
84779
  TaskListCard = ({ data, result }) => {
84668
84780
  const openSideApp = useSideAppOpener();
84669
84781
  const { styles } = useStyles19();
84670
- const items3 = Array.isArray(result.data) ? result.data : [];
84671
- const count3 = result.count ?? items3.length;
84672
- const inProgress = items3.filter((t4) => t4.status === "in_progress").length;
84673
- const completed = items3.filter((t4) => t4.status === "completed").length;
84674
- const handleClick = () => openTaskSideApp(openSideApp);
84782
+ const { items: items3, count: count3, inProgress, completed } = resolveListStats(result);
84783
+ const handleClick = () => openSideApp({ component_key: "manage_task", data: {} });
84675
84784
  return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(
84676
84785
  EntityCard,
84677
84786
  {
@@ -84724,20 +84833,137 @@ var init_task_manage_card = __esm({
84724
84833
  }
84725
84834
  );
84726
84835
  };
84727
- TaskDeleteCard = ({ data }) => {
84836
+ TaskListHoverCard = ({ data, result }) => {
84837
+ const openSideApp = useSideAppOpener();
84838
+ const { count: count3, inProgress, completed } = resolveListStats(result);
84839
+ return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(
84840
+ HoverReveal,
84841
+ {
84842
+ onClick: () => openSideApp({ component_key: "manage_task", data: {} }),
84843
+ detail: /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(TaskListCard, { data, result }),
84844
+ chip: /* @__PURE__ */ (0, import_jsx_runtime167.jsxs)(import_jsx_runtime167.Fragment, { children: [
84845
+ /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(Text20, { strong: true, style: actionTitleStyle4, children: "TASK LIST" }),
84846
+ /* @__PURE__ */ (0, import_jsx_runtime167.jsxs)(Text20, { style: { fontSize: 13 }, children: [
84847
+ count3,
84848
+ " ",
84849
+ count3 === 1 ? "task" : "tasks"
84850
+ ] }),
84851
+ /* @__PURE__ */ (0, import_jsx_runtime167.jsxs)(Text20, { type: "secondary", style: { fontSize: 12 }, children: [
84852
+ inProgress,
84853
+ " in progress \xB7 ",
84854
+ completed,
84855
+ " completed"
84856
+ ] })
84857
+ ] })
84858
+ }
84859
+ );
84860
+ };
84861
+ TaskActivityCard = ({ data, result, task }) => {
84728
84862
  const openSideApp = useSideAppOpener();
84729
84863
  const { styles } = useStyles19();
84730
- const args = data?.args ?? {};
84731
- const title = args.title ?? "";
84732
- const handleClick = () => openTaskSideApp(openSideApp);
84864
+ const { markdown, title, status } = resolveActivityView(data, result, task);
84865
+ const handleClick = () => {
84866
+ openSideApp({ component_key: "manage_task", data: task?.id ? { task } : {} });
84867
+ };
84733
84868
  return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(
84734
84869
  EntityCard,
84735
84870
  {
84736
84871
  item: data,
84737
- dense: true,
84738
- className: styles.compactLiveCard,
84872
+ className: styles.liveCard,
84739
84873
  onClick: handleClick,
84740
- renderPrimary: () => /* @__PURE__ */ (0, import_jsx_runtime167.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
84874
+ renderIcon: () => /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(import_lucide_react24.ListChecks, { size: 20 }),
84875
+ renderPrimary: () => /* @__PURE__ */ (0, import_jsx_runtime167.jsxs)(import_jsx_runtime167.Fragment, { children: [
84876
+ /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(Text20, { strong: true, style: actionTitleStyle4, children: "ACTIVITY" }),
84877
+ /* @__PURE__ */ (0, import_jsx_runtime167.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
84878
+ /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(Text20, { strong: true, style: { fontSize: 14 }, children: title || "Task" }),
84879
+ /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(StatusDot, { status })
84880
+ ] })
84881
+ ] }),
84882
+ renderDetails: () => /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(MDResponse, { content: markdown })
84883
+ }
84884
+ );
84885
+ };
84886
+ TaskActivityHoverCard = ({ data, result, task }) => {
84887
+ const openSideApp = useSideAppOpener();
84888
+ const { summary, title } = resolveActivityView(data, result, task);
84889
+ const handleClick = () => {
84890
+ if (task?.id) {
84891
+ openSideApp({ component_key: "manage_task", data: { task } });
84892
+ return;
84893
+ }
84894
+ openSideApp({ component_key: "manage_task", data: {} });
84895
+ };
84896
+ return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(
84897
+ HoverReveal,
84898
+ {
84899
+ onClick: handleClick,
84900
+ detail: /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(TaskActivityCard, { data, result, task }),
84901
+ chip: /* @__PURE__ */ (0, import_jsx_runtime167.jsxs)(import_jsx_runtime167.Fragment, { children: [
84902
+ /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(Text20, { strong: true, style: actionTitleStyle4, children: "ACTIVITY" }),
84903
+ /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(
84904
+ Text20,
84905
+ {
84906
+ style: {
84907
+ fontSize: 13,
84908
+ flex: 1,
84909
+ minWidth: 0,
84910
+ overflow: "hidden",
84911
+ textOverflow: "ellipsis",
84912
+ whiteSpace: "nowrap"
84913
+ },
84914
+ children: summary
84915
+ }
84916
+ ),
84917
+ title && /* @__PURE__ */ (0, import_jsx_runtime167.jsxs)(
84918
+ Text20,
84919
+ {
84920
+ type: "secondary",
84921
+ style: {
84922
+ fontSize: 12,
84923
+ overflow: "hidden",
84924
+ textOverflow: "ellipsis",
84925
+ whiteSpace: "nowrap"
84926
+ },
84927
+ children: [
84928
+ "\xB7 ",
84929
+ title
84930
+ ]
84931
+ }
84932
+ )
84933
+ ] })
84934
+ }
84935
+ );
84936
+ };
84937
+ TaskDeleteDetailCard = ({ title, id: id2 }) => {
84938
+ const openSideApp = useSideAppOpener();
84939
+ const { styles } = useStyles19();
84940
+ return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(
84941
+ EntityCard,
84942
+ {
84943
+ item: null,
84944
+ className: styles.liveCard,
84945
+ onClick: () => openSideApp({ component_key: "manage_task", data: {} }),
84946
+ renderPrimary: () => /* @__PURE__ */ (0, import_jsx_runtime167.jsxs)(import_jsx_runtime167.Fragment, { children: [
84947
+ /* @__PURE__ */ (0, import_jsx_runtime167.jsxs)(Text20, { strong: true, style: actionTitleStyle4, children: [
84948
+ /* @__PURE__ */ (0, import_jsx_runtime167.jsx)("span", { style: { color: "#ef4444" }, children: "\u2713" }),
84949
+ " Deleted task"
84950
+ ] }),
84951
+ /* @__PURE__ */ (0, import_jsx_runtime167.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(Text20, { strong: true, style: { fontSize: 14 }, children: title || id2 }) })
84952
+ ] })
84953
+ }
84954
+ );
84955
+ };
84956
+ TaskDeleteHoverCard = ({ data }) => {
84957
+ const openSideApp = useSideAppOpener();
84958
+ const args = data?.args ?? {};
84959
+ const title = args.title ?? "";
84960
+ const id2 = args.id ?? "";
84961
+ return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(
84962
+ HoverReveal,
84963
+ {
84964
+ onClick: () => openSideApp({ component_key: "manage_task", data: {} }),
84965
+ detail: /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(TaskDeleteDetailCard, { title, id: id2 }),
84966
+ chip: /* @__PURE__ */ (0, import_jsx_runtime167.jsxs)(import_jsx_runtime167.Fragment, { children: [
84741
84967
  /* @__PURE__ */ (0, import_jsx_runtime167.jsxs)(Text20, { strong: true, style: actionTitleStyle4, children: [
84742
84968
  /* @__PURE__ */ (0, import_jsx_runtime167.jsx)("span", { style: { color: "#ef4444" }, children: "\u2713" }),
84743
84969
  " Deleted task"
@@ -84751,7 +84977,9 @@ var init_task_manage_card = __esm({
84751
84977
  create: "CREATE TASK",
84752
84978
  update: "UPDATE TASK",
84753
84979
  set_status: "SET STATUS",
84980
+ get: "GET TASK",
84754
84981
  list: "LIST TASKS",
84982
+ add_activity: "ADD ACTIVITY",
84755
84983
  delete: "DELETE TASK"
84756
84984
  };
84757
84985
  TaskFailureCard = ({ action, message: message49 }) => {
@@ -84779,6 +85007,14 @@ var init_task_manage_card = __esm({
84779
85007
  }
84780
85008
  );
84781
85009
  };
85010
+ extractTask = (action, result) => {
85011
+ if (action === "get") return result.data?.task;
85012
+ if (action === "add_activity") return result.task;
85013
+ if (action === "create" || action === "update" || action === "set_status") {
85014
+ return result.data;
85015
+ }
85016
+ return void 0;
85017
+ };
84782
85018
  TaskManageCard = ({ data }) => {
84783
85019
  const args = data?.args ?? {};
84784
85020
  const action = typeof args.action === "string" ? args.action : "";
@@ -84786,15 +85022,19 @@ var init_task_manage_card = __esm({
84786
85022
  if (!result.success) {
84787
85023
  return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(TaskFailureCard, { action, message: result.error ?? "manage_task failed" });
84788
85024
  }
85025
+ const task = extractTask(action, result);
84789
85026
  switch (action) {
84790
85027
  case "create":
84791
85028
  case "update":
84792
85029
  case "set_status":
84793
- return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(TaskLiveCard, { data, result });
85030
+ case "get":
85031
+ return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(TaskLiveHoverCard, { data, result, task: task ?? {} });
84794
85032
  case "list":
84795
- return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(TaskListCard, { data, result });
85033
+ return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(TaskListHoverCard, { data, result });
85034
+ case "add_activity":
85035
+ return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(TaskActivityHoverCard, { data, result, task });
84796
85036
  case "delete":
84797
- return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(TaskDeleteCard, { data });
85037
+ return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(TaskDeleteHoverCard, { data });
84798
85038
  default:
84799
85039
  return null;
84800
85040
  }
@@ -87525,11 +87765,11 @@ var init_esm2 = __esm({
87525
87765
  return lines;
87526
87766
  }
87527
87767
  const lastLine = lines[lines.length - 1];
87528
- const firstLine = lines[0];
87768
+ const firstLine2 = lines[0];
87529
87769
  if (!lastLine) {
87530
87770
  lines.pop();
87531
87771
  }
87532
- if (!firstLine) {
87772
+ if (!firstLine2) {
87533
87773
  lines.shift();
87534
87774
  }
87535
87775
  return lines;
@@ -99077,6 +99317,7 @@ ${nextContent}`;
99077
99317
  ref: senderRef,
99078
99318
  value: content,
99079
99319
  header: senderHeader,
99320
+ autoSize: { minRows: 1, maxRows: 8 },
99080
99321
  onSubmit,
99081
99322
  placeholder: getPlaceholder(isEmpty, isStreaming, hasPendingMessages),
99082
99323
  onChange: (val) => {
@@ -101430,8 +101671,8 @@ var init_MailboxPanel = __esm({
101430
101671
  }
101431
101672
  };
101432
101673
  getMessagePreview = (content) => {
101433
- const firstLine = content.split("\n")[0];
101434
- return firstLine.length > 80 ? firstLine.slice(0, 80) + "..." : firstLine;
101674
+ const firstLine2 = content.split("\n")[0];
101675
+ return firstLine2.length > 80 ? firstLine2.slice(0, 80) + "..." : firstLine2;
101435
101676
  };
101436
101677
  MessageGroupComponent = ({ group: group2, styles, defaultExpanded = true, onMessageClick }) => {
101437
101678
  const [isExpanded, setIsExpanded] = (0, import_react115.useState)(defaultExpanded);