@axiom-lattice/react-sdk 2.1.94 → 2.1.96

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -97,8 +97,8 @@ var AuthProvider = ({
97
97
  onLoginSuccess?.(userData, tenantList || []);
98
98
  return { requiresTenantSelection, hasTenants };
99
99
  } catch (err) {
100
- const message29 = err instanceof Error ? err.message : "Login failed";
101
- setError(message29);
100
+ const message28 = err instanceof Error ? err.message : "Login failed";
101
+ setError(message28);
102
102
  throw err;
103
103
  } finally {
104
104
  setIsLoading(false);
@@ -122,8 +122,8 @@ var AuthProvider = ({
122
122
  }
123
123
  return { message: data.message || "Registration successful!", token: data.data?.token };
124
124
  } catch (err) {
125
- const message29 = err instanceof Error ? err.message : "Registration failed";
126
- setError(message29);
125
+ const message28 = err instanceof Error ? err.message : "Registration failed";
126
+ setError(message28);
127
127
  throw err;
128
128
  } finally {
129
129
  setIsLoading(false);
@@ -182,8 +182,8 @@ var AuthProvider = ({
182
182
  }
183
183
  onTenantSelected?.(tenantData);
184
184
  } catch (err) {
185
- const message29 = err instanceof Error ? err.message : "Failed to select tenant";
186
- setError(message29);
185
+ const message28 = err instanceof Error ? err.message : "Failed to select tenant";
186
+ setError(message28);
187
187
  throw err;
188
188
  } finally {
189
189
  setIsLoading(false);
@@ -222,8 +222,8 @@ var AuthProvider = ({
222
222
  setTenants(tenantList);
223
223
  sessionStorage.setItem("lattice_tenants", JSON.stringify(tenantList));
224
224
  } catch (err) {
225
- const message29 = err instanceof Error ? err.message : "Failed to fetch tenants";
226
- setError(message29);
225
+ const message28 = err instanceof Error ? err.message : "Failed to fetch tenants";
226
+ setError(message28);
227
227
  } finally {
228
228
  setIsLoading(false);
229
229
  }
@@ -253,8 +253,8 @@ var AuthProvider = ({
253
253
  setUser(data);
254
254
  sessionStorage.setItem("lattice_user", JSON.stringify(data));
255
255
  } catch (err) {
256
- const message29 = err instanceof Error ? err.message : "Failed to refresh user";
257
- setError(message29);
256
+ const message28 = err instanceof Error ? err.message : "Failed to refresh user";
257
+ setError(message28);
258
258
  } finally {
259
259
  setIsLoading(false);
260
260
  }
@@ -290,8 +290,8 @@ var AuthProvider = ({
290
290
  const result = await response.json();
291
291
  return result;
292
292
  } catch (err) {
293
- const message29 = err instanceof Error ? err.message : "Failed to change password";
294
- setError(message29);
293
+ const message28 = err instanceof Error ? err.message : "Failed to change password";
294
+ setError(message28);
295
295
  throw err;
296
296
  } finally {
297
297
  setIsLoading(false);
@@ -510,7 +510,7 @@ function useChat(threadId, assistantId, options = {}) {
510
510
  throw new Error("Thread ID is required to send messages");
511
511
  }
512
512
  const { input, command, streaming = true } = data;
513
- const { message: message29, files, ...rest } = input || {};
513
+ const { message: message28, files, ...rest } = input || {};
514
514
  setState((prev) => ({
515
515
  ...prev,
516
516
  isLoading: true,
@@ -519,7 +519,7 @@ function useChat(threadId, assistantId, options = {}) {
519
519
  }));
520
520
  const userMessage = {
521
521
  id: uuidv4(),
522
- content: message29 || command?.resume?.message || "",
522
+ content: message28 || command?.resume?.message || "",
523
523
  files,
524
524
  role: "human"
525
525
  };
@@ -1555,8 +1555,8 @@ function convertThreadToConversationThread(thread, label) {
1555
1555
  function getThreadMetadata(label) {
1556
1556
  return label ? { label } : {};
1557
1557
  }
1558
- function generateLabelFromMessage(message29) {
1559
- const cleanMessage = message29.replace(/```attachments[\s\S]*?```/g, "").trim();
1558
+ function generateLabelFromMessage(message28) {
1559
+ const cleanMessage = message28.replace(/```attachments[\s\S]*?```/g, "").trim();
1560
1560
  if (!cleanMessage) {
1561
1561
  return "";
1562
1562
  }
@@ -2029,7 +2029,7 @@ function AgentThreadProvider({
2029
2029
  throw new Error("Thread ID is required to send messages");
2030
2030
  }
2031
2031
  const { input, command, streaming = true, mode } = data;
2032
- const { message: message29, files, ...rest } = input || {};
2032
+ const { message: message28, files, ...rest } = input || {};
2033
2033
  setState((prev) => ({
2034
2034
  ...prev,
2035
2035
  isLoading: true,
@@ -2038,7 +2038,7 @@ function AgentThreadProvider({
2038
2038
  }));
2039
2039
  const userMessage = {
2040
2040
  id: uuidv42(),
2041
- content: message29 || command?.resume?.message || "",
2041
+ content: message28 || command?.resume?.message || "",
2042
2042
  files,
2043
2043
  role: "human"
2044
2044
  };
@@ -2056,8 +2056,8 @@ function AgentThreadProvider({
2056
2056
  ]
2057
2057
  }));
2058
2058
  const isFirstMessage = messageCountRef.current === 0;
2059
- if (isFirstMessage && message29 && conversationContext) {
2060
- const label = generateLabelFromMessage(message29);
2059
+ if (isFirstMessage && message28 && conversationContext) {
2060
+ const label = generateLabelFromMessage(message28);
2061
2061
  if (label) {
2062
2062
  conversationContext.updateThread({
2063
2063
  id: threadId,
@@ -3954,8 +3954,8 @@ function useTenants(options) {
3954
3954
  const { data } = await response.json();
3955
3955
  setTenants(data || []);
3956
3956
  } catch (err) {
3957
- const message29 = err instanceof Error ? err.message : "Failed to fetch tenants";
3958
- setError(message29);
3957
+ const message28 = err instanceof Error ? err.message : "Failed to fetch tenants";
3958
+ setError(message28);
3959
3959
  } finally {
3960
3960
  setIsLoading(false);
3961
3961
  }
@@ -3997,8 +3997,8 @@ function useUsers(options) {
3997
3997
  const { data } = await response.json();
3998
3998
  setUsers(data || []);
3999
3999
  } catch (err) {
4000
- const message29 = err instanceof Error ? err.message : "Failed to fetch users";
4001
- setError(message29);
4000
+ const message28 = err instanceof Error ? err.message : "Failed to fetch users";
4001
+ setError(message28);
4002
4002
  } finally {
4003
4003
  setIsLoading(false);
4004
4004
  }
@@ -4235,7 +4235,7 @@ var FilePanelToggle = () => {
4235
4235
  };
4236
4236
 
4237
4237
  // src/components/Chat/PinToMenuButton.tsx
4238
- import React74, { useState as useState82, useEffect as useEffect56, useCallback as useCallback42 } from "react";
4238
+ import React74, { useState as useState82, useEffect as useEffect57, useCallback as useCallback42 } from "react";
4239
4239
  import { Button as Button60, Input as Input19, Modal as Modal24, Tooltip as Tooltip26, message as message22 } from "antd";
4240
4240
  import { Pin } from "lucide-react";
4241
4241
 
@@ -4245,13 +4245,13 @@ import React73, {
4245
4245
  useContext as useContext11,
4246
4246
  useState as useState81,
4247
4247
  useCallback as useCallback41,
4248
- useEffect as useEffect55,
4248
+ useEffect as useEffect56,
4249
4249
  useRef as useRef30
4250
4250
  } from "react";
4251
4251
  import { WorkspaceClient, Client as Client3 } from "@axiom-lattice/client-sdk";
4252
4252
 
4253
4253
  // src/components/Chat/WorkspaceResourceManager.tsx
4254
- import { useMemo as useMemo35, useEffect as useEffect54, useRef as useRef29, useState as useState80 } from "react";
4254
+ import { useMemo as useMemo35, useEffect as useEffect55, useRef as useRef29, useState as useState80 } from "react";
4255
4255
  import { FolderOpen as FolderOpen3, Activity as Activity4, Database as Database7, Plug as Plug2, Bot as Bot5, Wrench as Wrench2, Zap as Zap2, LogOut as LogOut3, Building2 as Building23, Key, Share2, History, Inbox as Inbox3, FlaskConical as FlaskConical3 } from "lucide-react";
4256
4256
  import { Modal as Modal23, Avatar as Avatar12, Popover as Popover3, Button as Button59 } from "antd";
4257
4257
 
@@ -13444,18 +13444,18 @@ var ToolsList = ({
13444
13444
  };
13445
13445
 
13446
13446
  // src/components/Chat/TopologyRuntimeView.tsx
13447
- import { useEffect as useEffect45, useState as useState70, useMemo as useMemo27, useCallback as useCallback37, useRef as useRef25 } from "react";
13447
+ import { useEffect as useEffect46, useState as useState70, useMemo as useMemo27, useCallback as useCallback37, useRef as useRef25 } from "react";
13448
13448
  import {
13449
13449
  Spin as Spin16,
13450
13450
  Empty as Empty14,
13451
- List as List15,
13452
- Tag as Tag23,
13451
+ List as List16,
13452
+ Tag as Tag24,
13453
13453
  Typography as Typography51,
13454
13454
  Space as Space39,
13455
13455
  Drawer as Drawer2,
13456
13456
  Tooltip as Tooltip23,
13457
13457
  Switch as Switch3,
13458
- Popconfirm as Popconfirm5
13458
+ Popconfirm as Popconfirm6
13459
13459
  } from "antd";
13460
13460
  import {
13461
13461
  ReloadOutlined as ReloadOutlined4,
@@ -13499,11 +13499,11 @@ var ConfirmFeedback = ({
13499
13499
  data,
13500
13500
  interactive = true
13501
13501
  }) => {
13502
- const { message: message29, type, config, feedback, options } = data ?? {};
13502
+ const { message: message28, type, config, feedback, options } = data ?? {};
13503
13503
  const { sendMessage } = useAgentChat();
13504
13504
  const [clicked, setClicked] = useState36(false);
13505
13505
  return /* @__PURE__ */ jsxs22(Space9, { direction: "vertical", style: { width: "100%" }, children: [
13506
- /* @__PURE__ */ jsx31(MDResponse, { content: message29 }),
13506
+ /* @__PURE__ */ jsx31(MDResponse, { content: message28 }),
13507
13507
  options ? /* @__PURE__ */ jsx31(Space9, { style: { justifyContent: "flex-end", width: "100%" }, children: options?.map((option) => /* @__PURE__ */ jsx31(
13508
13508
  Button17,
13509
13509
  {
@@ -13826,7 +13826,7 @@ var useSideAppOpener = () => {
13826
13826
  import { jsx as jsx33, jsxs as jsxs24 } from "react/jsx-runtime";
13827
13827
  var { Text: Text16 } = Typography16;
13828
13828
  var GenericDataTable = ({ data, interactive = true, default_open_in_side_app = true }) => {
13829
- const { dataSource, message: message29 } = data ?? {};
13829
+ const { dataSource, message: message28 } = data ?? {};
13830
13830
  const [expandedRowKeys, setExpandedRowKeys] = useState38([]);
13831
13831
  const openSideApp = useSideAppOpener();
13832
13832
  const processedData = dataSource?.map((item, index) => ({
@@ -13925,7 +13925,7 @@ var GenericDataTable = ({ data, interactive = true, default_open_in_side_app = t
13925
13925
  type: "text/csv;charset=utf-8;"
13926
13926
  });
13927
13927
  const link = document.createElement("a");
13928
- const filename = `${message29 || "data"}_${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}.csv`;
13928
+ const filename = `${message28 || "data"}_${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}.csv`;
13929
13929
  link.href = URL.createObjectURL(blob);
13930
13930
  link.download = filename;
13931
13931
  document.body.appendChild(link);
@@ -13946,7 +13946,7 @@ var GenericDataTable = ({ data, interactive = true, default_open_in_side_app = t
13946
13946
  tableLayout: "fixed",
13947
13947
  style: { width: "100% !important" },
13948
13948
  title: () => /* @__PURE__ */ jsxs24(Flex, { justify: "space-between", align: "center", children: [
13949
- /* @__PURE__ */ jsx33(Space11, { children: /* @__PURE__ */ jsx33(Text16, { strong: true, style: { fontSize: 16 }, children: message29 || "" }) }),
13949
+ /* @__PURE__ */ jsx33(Space11, { children: /* @__PURE__ */ jsx33(Text16, { strong: true, style: { fontSize: 16 }, children: message28 || "" }) }),
13950
13950
  /* @__PURE__ */ jsxs24(Space11, { children: [
13951
13951
  /* @__PURE__ */ jsx33(
13952
13952
  Button19,
@@ -13968,8 +13968,8 @@ var GenericDataTable = ({ data, interactive = true, default_open_in_side_app = t
13968
13968
  onClick: () => {
13969
13969
  openSideApp({
13970
13970
  component_key: "generic_data_table",
13971
- message: message29 || "",
13972
- data: { dataSource, message: message29 }
13971
+ message: message28 || "",
13972
+ data: { dataSource, message: message28 }
13973
13973
  });
13974
13974
  },
13975
13975
  children: /* @__PURE__ */ jsx33(ExpandAltOutlined, {})
@@ -15573,7 +15573,7 @@ var AttachmentsCard = ({
15573
15573
 
15574
15574
  // src/components/GenUI/elements/attachments_viewer_side_app.tsx
15575
15575
  import { Button as Button26, Empty as Empty4, Skeleton, Space as Space18 } from "antd";
15576
- import { useEffect as useEffect29, useState as useState45 } from "react";
15576
+ import { useEffect as useEffect30, useState as useState45 } from "react";
15577
15577
 
15578
15578
  // src/components/GenUI/FileRenderer.tsx
15579
15579
  import { useEffect as useEffect28, useState as useState43, useMemo as useMemo10 } from "react";
@@ -15743,11 +15743,11 @@ var RenderMDFromURL = ({ url, file_id }) => {
15743
15743
  import { LinkOutlined as LinkOutlined3, DownloadOutlined as DownloadOutlined3 } from "@ant-design/icons";
15744
15744
 
15745
15745
  // src/components/GenUI/ShareModal.tsx
15746
- import { useState as useState44, useCallback as useCallback23 } from "react";
15747
- import { Modal as Modal10, Input as Input13, Select as Select6, InputNumber as InputNumber2, Button as Button25, Space as Space17, Typography as Typography22, message as message11 } from "antd";
15748
- import { CopyOutlined as CopyOutlined3, LinkOutlined as LinkOutlined2 } from "@ant-design/icons";
15746
+ import { useState as useState44, useEffect as useEffect29, useCallback as useCallback23 } from "react";
15747
+ import { Modal as Modal10, Input as Input13, Select as Select6, InputNumber as InputNumber2, Button as Button25, Space as Space17, Typography as Typography22, message as message11, List as List7, Tag as Tag12, Popconfirm as Popconfirm4 } from "antd";
15748
+ import { CopyOutlined as CopyOutlined3, LinkOutlined as LinkOutlined2, StopOutlined, PlusOutlined as PlusOutlined7 } from "@ant-design/icons";
15749
15749
  import { jsx as jsx46, jsxs as jsxs33 } from "react/jsx-runtime";
15750
- var { Text: Text20 } = Typography22;
15750
+ var { Text: Text20, Title: Title5 } = Typography22;
15751
15751
  var EXPIRY_OPTIONS = [
15752
15752
  { label: "Never", value: void 0 },
15753
15753
  { label: "1 hour", value: "1h" },
@@ -15767,32 +15767,60 @@ function expiryToDate(option) {
15767
15767
  const ms = map[option] ?? 0;
15768
15768
  return ms ? new Date(now + ms).toISOString() : void 0;
15769
15769
  }
15770
+ function formatExpiry(d) {
15771
+ if (!d) return "Never";
15772
+ return new Date(d).toLocaleDateString();
15773
+ }
15774
+ function filePathMatch(record, filePath) {
15775
+ const normalizedPath = filePath.replace(/^\/?project\//, "");
15776
+ return record.address.resourcePath === normalizedPath;
15777
+ }
15770
15778
  var ShareModal = ({
15771
15779
  open,
15772
15780
  filePath,
15773
15781
  assistantId,
15774
15782
  fileName,
15775
- existingToken,
15776
- existingVisibility,
15777
- existingTitle,
15778
- onClose,
15779
- onUpdated
15783
+ onClose
15780
15784
  }) => {
15781
- const { shareFile } = useWorkspaceContext();
15782
- const isEditMode = !!existingToken;
15783
- const [state, setState] = useState44(isEditMode ? "edit" : "creating");
15784
- const [token, setToken] = useState44(existingToken ?? "");
15785
- const [url, setUrl] = useState44(existingToken ? `/s/${existingToken}` : "");
15786
- const [title, setTitle] = useState44(existingTitle ?? fileName ?? "");
15787
- const [visibility, setVisibility] = useState44(
15788
- existingVisibility ?? "public"
15789
- );
15785
+ const { shareFile, listShares, unshareFile } = useWorkspaceContext();
15786
+ const { config: shellConfig } = useLatticeChatShellContext();
15787
+ const baseURL = (shellConfig?.baseURL ?? "").replace(/\/$/, "");
15788
+ const [view, setView] = useState44("list");
15789
+ const [shares, setShares] = useState44([]);
15790
+ const [loading, setLoading] = useState44(false);
15791
+ const [title, setTitle] = useState44(fileName ?? "");
15792
+ const [visibility, setVisibility] = useState44("public");
15790
15793
  const [password, setPassword] = useState44("");
15791
15794
  const [expiry, setExpiry] = useState44(void 0);
15792
15795
  const [maxAccess, setMaxAccess] = useState44(void 0);
15793
15796
  const [error, setError] = useState44("");
15797
+ const [resultUrl, setResultUrl] = useState44("");
15798
+ const [resultPwd, setResultPwd] = useState44("");
15799
+ const loadShares = useCallback23(async () => {
15800
+ setLoading(true);
15801
+ try {
15802
+ const all = await listShares();
15803
+ setShares(all.filter((r) => filePathMatch(r, filePath) && !r.revoked));
15804
+ } catch {
15805
+ }
15806
+ setLoading(false);
15807
+ }, [listShares, filePath]);
15808
+ useEffect29(() => {
15809
+ if (open) {
15810
+ setView("list");
15811
+ loadShares();
15812
+ }
15813
+ }, [open, loadShares]);
15814
+ const handleCreate = useCallback23(async () => {
15815
+ setView("create");
15816
+ setTitle(fileName ?? "");
15817
+ setVisibility("public");
15818
+ setPassword("");
15819
+ setExpiry(void 0);
15820
+ setMaxAccess(void 0);
15821
+ setError("");
15822
+ }, [fileName]);
15794
15823
  const handleShare = useCallback23(async () => {
15795
- setState("creating");
15796
15824
  setError("");
15797
15825
  try {
15798
15826
  const result = await shareFile(filePath, assistantId, {
@@ -15802,104 +15830,137 @@ var ShareModal = ({
15802
15830
  expiresAt: expiryToDate(expiry),
15803
15831
  maxAccess: maxAccess ?? void 0
15804
15832
  });
15805
- setToken(result.token);
15806
- setUrl(result.url);
15807
- setState("result");
15833
+ setResultUrl(`${baseURL}${result.url}`);
15834
+ setResultPwd(password);
15835
+ setView("result");
15836
+ loadShares();
15808
15837
  } catch (err) {
15809
15838
  setError(err instanceof Error ? err.message : "Failed to create share");
15810
- setState("error");
15839
+ setView("error");
15840
+ }
15841
+ }, [filePath, assistantId, title, visibility, password, expiry, maxAccess, shareFile, baseURL, loadShares]);
15842
+ const handleCopy = useCallback23((fullUrl, shareTitle, pwd, isProtected) => {
15843
+ const titleText = shareTitle ? `${shareTitle}
15844
+ ` : "";
15845
+ const pwdText = pwd ? `Password: ${pwd}
15846
+ ` : isProtected ? "Password protected\n" : "";
15847
+ navigator.clipboard.writeText(`${titleText}${fullUrl}
15848
+ ${pwdText}`.trim());
15849
+ message11.success("Copied");
15850
+ }, []);
15851
+ const handleRevoke = useCallback23(async (token) => {
15852
+ try {
15853
+ await unshareFile(token);
15854
+ message11.success("Share revoked");
15855
+ loadShares();
15856
+ } catch {
15857
+ message11.error("Failed to revoke");
15811
15858
  }
15812
- }, [
15813
- filePath,
15814
- assistantId,
15815
- title,
15816
- visibility,
15817
- password,
15818
- expiry,
15819
- maxAccess,
15820
- shareFile
15821
- ]);
15822
- const handleCopy = useCallback23(() => {
15823
- const fullUrl = `${window.location.origin}${url}`;
15824
- navigator.clipboard.writeText(fullUrl);
15825
- message11.success("Copied to clipboard");
15826
- }, [url]);
15827
- const handleOpen = useCallback23(() => {
15828
- window.open(url, "_blank");
15829
- }, [url]);
15859
+ }, [unshareFile, loadShares]);
15860
+ const handleOpen = useCallback23((fullUrl) => {
15861
+ window.open(fullUrl, "_blank");
15862
+ }, []);
15830
15863
  return /* @__PURE__ */ jsxs33(
15831
15864
  Modal10,
15832
15865
  {
15833
- title: isEditMode ? "Edit Share" : "Share Resource",
15866
+ title: "Share Resource",
15834
15867
  open,
15835
15868
  onCancel: onClose,
15836
15869
  footer: null,
15837
- width: 420,
15870
+ width: 480,
15838
15871
  children: [
15839
- (state === "edit" || state === "creating") && /* @__PURE__ */ jsxs33(Space17, { direction: "vertical", style: { width: "100%" }, size: "middle", children: [
15872
+ view === "list" && /* @__PURE__ */ jsxs33(Space17, { direction: "vertical", style: { width: "100%" }, size: "middle", children: [
15873
+ shares.length > 0 ? /* @__PURE__ */ jsx46(
15874
+ List7,
15875
+ {
15876
+ loading,
15877
+ dataSource: shares,
15878
+ renderItem: (r) => {
15879
+ const fullUrl = `${baseURL}/s/${r.token}`;
15880
+ return /* @__PURE__ */ jsx46(
15881
+ List7.Item,
15882
+ {
15883
+ actions: [
15884
+ /* @__PURE__ */ jsx46(
15885
+ Button25,
15886
+ {
15887
+ type: "text",
15888
+ size: "small",
15889
+ icon: /* @__PURE__ */ jsx46(CopyOutlined3, {}),
15890
+ onClick: () => handleCopy(fullUrl, r.title ?? void 0, void 0, r.visibility === "password")
15891
+ },
15892
+ "copy"
15893
+ ),
15894
+ /* @__PURE__ */ jsx46(
15895
+ Button25,
15896
+ {
15897
+ type: "text",
15898
+ size: "small",
15899
+ icon: /* @__PURE__ */ jsx46(LinkOutlined2, {}),
15900
+ onClick: () => handleOpen(fullUrl)
15901
+ },
15902
+ "open"
15903
+ ),
15904
+ /* @__PURE__ */ jsx46(Popconfirm4, { title: "Revoke this share?", onConfirm: () => handleRevoke(r.token), children: /* @__PURE__ */ jsx46(Button25, { type: "text", size: "small", danger: true, icon: /* @__PURE__ */ jsx46(StopOutlined, {}) }) }, "revoke")
15905
+ ],
15906
+ children: /* @__PURE__ */ jsx46(
15907
+ List7.Item.Meta,
15908
+ {
15909
+ title: r.title || fileName || r.address.resourcePath.split("/").pop(),
15910
+ description: /* @__PURE__ */ jsxs33(Space17, { size: "small", children: [
15911
+ /* @__PURE__ */ jsx46(Tag12, { color: r.visibility === "password" ? "orange" : "green", children: r.visibility === "password" ? "Password" : "Public" }),
15912
+ /* @__PURE__ */ jsxs33(Text20, { type: "secondary", style: { fontSize: 12 }, children: [
15913
+ "Expires: ",
15914
+ formatExpiry(r.expiresAt)
15915
+ ] })
15916
+ ] })
15917
+ }
15918
+ )
15919
+ }
15920
+ );
15921
+ }
15922
+ }
15923
+ ) : /* @__PURE__ */ jsx46("div", { style: { textAlign: "center", padding: "16px 0" }, children: /* @__PURE__ */ jsx46(Text20, { type: "secondary", children: "No active shares yet" }) }),
15924
+ /* @__PURE__ */ jsx46(Button25, { type: "primary", block: true, icon: /* @__PURE__ */ jsx46(PlusOutlined7, {}), onClick: handleCreate, children: "Create New Share" })
15925
+ ] }),
15926
+ view === "create" && /* @__PURE__ */ jsxs33(Space17, { direction: "vertical", style: { width: "100%" }, size: "middle", children: [
15840
15927
  /* @__PURE__ */ jsxs33("div", { children: [
15841
15928
  /* @__PURE__ */ jsx46(Text20, { type: "secondary", style: { fontSize: 12 }, children: "Title" }),
15842
15929
  /* @__PURE__ */ jsx46(Input13, { value: title, onChange: (e) => setTitle(e.target.value) })
15843
15930
  ] }),
15844
15931
  /* @__PURE__ */ jsxs33("div", { children: [
15845
15932
  /* @__PURE__ */ jsx46(Text20, { type: "secondary", style: { fontSize: 12 }, children: "Visibility" }),
15846
- /* @__PURE__ */ jsxs33(
15847
- Select6,
15848
- {
15849
- value: visibility,
15850
- onChange: setVisibility,
15851
- style: { width: "100%" },
15852
- children: [
15853
- /* @__PURE__ */ jsx46(Select6.Option, { value: "public", children: "Public" }),
15854
- /* @__PURE__ */ jsx46(Select6.Option, { value: "password", children: "Password" })
15855
- ]
15856
- }
15857
- )
15933
+ /* @__PURE__ */ jsxs33(Select6, { value: visibility, onChange: setVisibility, style: { width: "100%" }, children: [
15934
+ /* @__PURE__ */ jsx46(Select6.Option, { value: "public", children: "Public" }),
15935
+ /* @__PURE__ */ jsx46(Select6.Option, { value: "password", children: "Password" })
15936
+ ] })
15858
15937
  ] }),
15859
15938
  visibility === "password" && /* @__PURE__ */ jsxs33("div", { children: [
15860
15939
  /* @__PURE__ */ jsx46(Text20, { type: "secondary", style: { fontSize: 12 }, children: "Password" }),
15861
- /* @__PURE__ */ jsx46(
15862
- Input13.Password,
15863
- {
15864
- value: password,
15865
- onChange: (e) => setPassword(e.target.value)
15866
- }
15867
- )
15940
+ /* @__PURE__ */ jsx46(Input13.Password, { value: password, onChange: (e) => setPassword(e.target.value) })
15868
15941
  ] }),
15869
15942
  /* @__PURE__ */ jsxs33("div", { children: [
15870
15943
  /* @__PURE__ */ jsx46(Text20, { type: "secondary", style: { fontSize: 12 }, children: "Expires" }),
15871
- /* @__PURE__ */ jsx46(
15872
- Select6,
15873
- {
15874
- value: expiry,
15875
- onChange: setExpiry,
15876
- style: { width: "100%" },
15877
- children: EXPIRY_OPTIONS.map((opt) => /* @__PURE__ */ jsx46(Select6.Option, { value: opt.value, children: opt.label }, opt.label))
15878
- }
15879
- )
15944
+ /* @__PURE__ */ jsx46(Select6, { value: expiry, onChange: setExpiry, style: { width: "100%" }, children: EXPIRY_OPTIONS.map((opt) => /* @__PURE__ */ jsx46(Select6.Option, { value: opt.value, children: opt.label }, opt.label)) })
15880
15945
  ] }),
15881
15946
  /* @__PURE__ */ jsxs33("div", { children: [
15882
15947
  /* @__PURE__ */ jsx46(Text20, { type: "secondary", style: { fontSize: 12 }, children: "Max accesses (empty = unlimited)" }),
15883
- /* @__PURE__ */ jsx46(
15884
- InputNumber2,
15885
- {
15886
- value: maxAccess,
15887
- onChange: (v) => setMaxAccess(v ?? void 0),
15888
- style: { width: "100%" },
15889
- min: 1
15890
- }
15891
- )
15948
+ /* @__PURE__ */ jsx46(InputNumber2, { value: maxAccess, onChange: (v) => setMaxAccess(v ?? void 0), style: { width: "100%" }, min: 1 })
15892
15949
  ] }),
15893
- !isEditMode && /* @__PURE__ */ jsx46(Button25, { type: "primary", block: true, onClick: handleShare, children: "Create Share" })
15950
+ /* @__PURE__ */ jsxs33("div", { style: { display: "flex", gap: 8 }, children: [
15951
+ /* @__PURE__ */ jsx46(Button25, { block: true, onClick: () => setView("list"), children: "Back" }),
15952
+ /* @__PURE__ */ jsx46(Button25, { type: "primary", block: true, onClick: handleShare, children: "Create Share" })
15953
+ ] })
15894
15954
  ] }),
15895
- state === "result" && /* @__PURE__ */ jsxs33(Space17, { direction: "vertical", style: { width: "100%" }, size: "middle", children: [
15896
- /* @__PURE__ */ jsx46(Input13, { value: url, readOnly: true, style: { fontFamily: "monospace" } }),
15955
+ view === "result" && /* @__PURE__ */ jsxs33(Space17, { direction: "vertical", style: { width: "100%" }, size: "middle", children: [
15956
+ /* @__PURE__ */ jsx46(Input13, { value: resultUrl, readOnly: true, style: { fontFamily: "monospace" } }),
15897
15957
  /* @__PURE__ */ jsx46("div", { style: { textAlign: "center" }, children: /* @__PURE__ */ jsxs33(Space17, { children: [
15898
- /* @__PURE__ */ jsx46(Button25, { icon: /* @__PURE__ */ jsx46(CopyOutlined3, {}), onClick: handleCopy, children: "Copy" }),
15899
- /* @__PURE__ */ jsx46(Button25, { type: "primary", icon: /* @__PURE__ */ jsx46(LinkOutlined2, {}), onClick: handleOpen, children: "Open" })
15900
- ] }) })
15958
+ /* @__PURE__ */ jsx46(Button25, { icon: /* @__PURE__ */ jsx46(CopyOutlined3, {}), onClick: () => handleCopy(resultUrl, title, resultPwd), children: "Copy" }),
15959
+ /* @__PURE__ */ jsx46(Button25, { type: "primary", icon: /* @__PURE__ */ jsx46(LinkOutlined2, {}), onClick: () => handleOpen(resultUrl), children: "Open" })
15960
+ ] }) }),
15961
+ /* @__PURE__ */ jsx46(Button25, { block: true, onClick: () => setView("list"), children: "Back to shares" })
15901
15962
  ] }),
15902
- state === "error" && /* @__PURE__ */ jsxs33("div", { style: { textAlign: "center", padding: "24px 0" }, children: [
15963
+ view === "error" && /* @__PURE__ */ jsxs33("div", { style: { textAlign: "center", padding: "24px 0" }, children: [
15903
15964
  /* @__PURE__ */ jsx46(Text20, { type: "danger", children: error }),
15904
15965
  /* @__PURE__ */ jsx46("br", {}),
15905
15966
  /* @__PURE__ */ jsx46(Button25, { onClick: handleShare, style: { marginTop: 16 }, children: "Retry" })
@@ -15922,7 +15983,7 @@ function AttachmentsViewerSideApp({
15922
15983
  url: full_url || "",
15923
15984
  fileName: extractFileName(file_id || "")
15924
15985
  });
15925
- useEffect29(() => {
15986
+ useEffect30(() => {
15926
15987
  setFileUri({
15927
15988
  url: full_url || "",
15928
15989
  fileName: extractFileName(file_id || "")
@@ -16002,7 +16063,7 @@ function AttachmentsViewerSideApp({
16002
16063
  import { Button as Button27, Space as Space19, Typography as Typography23 } from "antd";
16003
16064
 
16004
16065
  // src/components/GenUI/elements/ContentPreviewCollapse.tsx
16005
- import { useRef as useRef12, useState as useState46, useEffect as useEffect30, useCallback as useCallback24 } from "react";
16066
+ import { useRef as useRef12, useState as useState46, useEffect as useEffect31, useCallback as useCallback24 } from "react";
16006
16067
  import { Collapse as Collapse5 } from "antd";
16007
16068
  import { createStyles as createStyles12 } from "antd-style";
16008
16069
  import { DownOutlined as DownOutlined3, UpOutlined as UpOutlined2 } from "@ant-design/icons";
@@ -16083,7 +16144,7 @@ var ContentPreviewCollapse = ({
16083
16144
  setIsOverflowing(scrollHeight > collapsedMaxHeight);
16084
16145
  }
16085
16146
  }, [collapsedMaxHeight]);
16086
- useEffect30(() => {
16147
+ useEffect31(() => {
16087
16148
  const element = contentRef.current;
16088
16149
  if (!element) return;
16089
16150
  checkOverflow();
@@ -16261,7 +16322,7 @@ var EditFile = ({
16261
16322
  };
16262
16323
 
16263
16324
  // src/components/GenUI/elements/task_card.tsx
16264
- import { Card as Card13, Typography as Typography25, Tag as Tag12, Avatar as Avatar6 } from "antd";
16325
+ import { Card as Card13, Typography as Typography25, Tag as Tag13, Avatar as Avatar6 } from "antd";
16265
16326
  import { createStyles as createStyles13 } from "antd-style";
16266
16327
  import {
16267
16328
  CheckCircleOutlined as CheckCircleOutlined4,
@@ -16509,7 +16570,7 @@ var TaskCard = ({
16509
16570
  /* @__PURE__ */ jsx52(Text23, { className: styles.assigneeName, children: assignee })
16510
16571
  ] }),
16511
16572
  /* @__PURE__ */ jsx52(
16512
- Tag12,
16573
+ Tag13,
16513
16574
  {
16514
16575
  icon: statusConfig2.icon,
16515
16576
  color: statusConfig2.color,
@@ -16577,21 +16638,21 @@ import ErrorBoundary from "antd/es/alert/ErrorBoundary";
16577
16638
  import {
16578
16639
  memo,
16579
16640
  useCallback as useCallback25,
16580
- useEffect as useEffect31,
16641
+ useEffect as useEffect32,
16581
16642
  useMemo as useMemo11,
16582
16643
  useRef as useRef13,
16583
16644
  useState as useState47
16584
16645
  } from "react";
16585
16646
  import { jsx as jsx53 } from "react/jsx-runtime";
16586
16647
  var LazyBubble = ({
16587
- message: message29,
16648
+ message: message28,
16588
16649
  renderContent,
16589
16650
  autoLoadRightPanel
16590
16651
  }) => {
16591
16652
  const ref = useRef13(null);
16592
16653
  const [isVisible, setIsVisible] = useState47(false);
16593
16654
  const [wasEverVisible, setWasEverVisible] = useState47(false);
16594
- useEffect31(() => {
16655
+ useEffect32(() => {
16595
16656
  const observer = new IntersectionObserver(
16596
16657
  ([entry]) => {
16597
16658
  const visible = entry.isIntersecting;
@@ -16611,14 +16672,14 @@ var LazyBubble = ({
16611
16672
  }
16612
16673
  };
16613
16674
  }, [wasEverVisible]);
16614
- useEffect31(() => {
16675
+ useEffect32(() => {
16615
16676
  autoLoadRightPanel?.();
16616
16677
  }, []);
16617
16678
  const getPlaceholder = () => {
16618
- const estimatedHeight = message29.content ? Math.min(100, message29.content.length / 5) : 100;
16679
+ const estimatedHeight = message28.content ? Math.min(100, message28.content.length / 5) : 100;
16619
16680
  return /* @__PURE__ */ jsx53("div", { style: { height: `${estimatedHeight}px`, minHeight: "50px" } });
16620
16681
  };
16621
- return /* @__PURE__ */ jsx53(ErrorBoundary, { children: /* @__PURE__ */ jsx53("div", { ref, style: { width: "100%" }, children: isVisible || wasEverVisible ? renderContent(message29) : getPlaceholder() }) });
16682
+ return /* @__PURE__ */ jsx53(ErrorBoundary, { children: /* @__PURE__ */ jsx53("div", { ref, style: { width: "100%" }, children: isVisible || wasEverVisible ? renderContent(message28) : getPlaceholder() }) });
16622
16683
  };
16623
16684
  var MemoizedBubbleList = memo(
16624
16685
  ({
@@ -16644,13 +16705,13 @@ var MessageList = ({
16644
16705
  const { styles } = useStyle();
16645
16706
  const openSideApp = useSideAppOpener();
16646
16707
  const messageLengthRef = useRef13(messages?.length ?? 0);
16647
- useEffect31(() => {
16708
+ useEffect32(() => {
16648
16709
  if (messages?.length) {
16649
16710
  messageLengthRef.current = messages?.length;
16650
16711
  }
16651
16712
  }, [messages?.length]);
16652
- const renderContent = useCallback25((message29) => {
16653
- const { content } = message29;
16713
+ const renderContent = useCallback25((message28) => {
16714
+ const { content } = message28;
16654
16715
  try {
16655
16716
  const json = JSON.parse(content);
16656
16717
  if (json.action && json.message) {
@@ -16658,7 +16719,7 @@ var MessageList = ({
16658
16719
  }
16659
16720
  } catch (error) {
16660
16721
  }
16661
- const tool_calls_md = message29.tool_calls?.map((tool_call) => {
16722
+ const tool_calls_md = message28.tool_calls?.map((tool_call) => {
16662
16723
  return `\`\`\`tool_call
16663
16724
  ${JSON.stringify(tool_call)}
16664
16725
  \`\`\``;
@@ -16667,17 +16728,17 @@ ${JSON.stringify(tool_call)}
16667
16728
  return /* @__PURE__ */ jsx53(Space21, { direction: "vertical", style: { width: "100%" }, children: /* @__PURE__ */ jsx53(MDResponse, { content: content_md }) });
16668
16729
  }, []);
16669
16730
  const items = useMemo11(
16670
- () => messages.map((message29, index) => ({
16671
- key: message29.id,
16672
- role: message29.role,
16731
+ () => messages.map((message28, index) => ({
16732
+ key: message28.id,
16733
+ role: message28.role,
16673
16734
  typing: false,
16674
16735
  content: /* @__PURE__ */ jsx53(
16675
16736
  LazyBubble,
16676
16737
  {
16677
- message: message29,
16738
+ message: message28,
16678
16739
  renderContent,
16679
16740
  autoLoadRightPanel: () => {
16680
- const { content, role: role2 } = message29;
16741
+ const { content, role: role2 } = message28;
16681
16742
  const isNewAddedMessage = messageLengthRef.current > 1 && messageLengthRef.current + 1 === messages.length;
16682
16743
  if (index === messages.length - 1 && isNewAddedMessage && role2 === "ai") {
16683
16744
  try {
@@ -16754,14 +16815,14 @@ import {
16754
16815
  Space as Space30,
16755
16816
  Typography as Typography34
16756
16817
  } from "antd";
16757
- import React39, { useCallback as useCallback29, useContext as useContext10, useEffect as useEffect37, useRef as useRef19, useState as useState57 } from "react";
16818
+ import React39, { useCallback as useCallback29, useContext as useContext10, useEffect as useEffect38, useRef as useRef19, useState as useState57 } from "react";
16758
16819
  import { BrainCircuit as BrainCircuit3 } from "lucide-react";
16759
16820
 
16760
16821
  // src/components/GenUI/HITLContainer.tsx
16761
16822
  import {
16762
16823
  Collapse as Collapse6,
16763
16824
  Space as Space22,
16764
- Tag as Tag13,
16825
+ Tag as Tag14,
16765
16826
  Typography as Typography26
16766
16827
  } from "antd";
16767
16828
  import { createStyles as createStyles14 } from "antd-style";
@@ -16802,7 +16863,7 @@ var HITLContainer = () => {
16802
16863
  {
16803
16864
  showArrow: false,
16804
16865
  header: /* @__PURE__ */ jsx54(
16805
- Tag13,
16866
+ Tag14,
16806
16867
  {
16807
16868
  bordered: false,
16808
16869
  color: "orange",
@@ -17375,7 +17436,7 @@ var FileExplorerButton = (_props) => {
17375
17436
  };
17376
17437
 
17377
17438
  // src/components/Chat/ScheduleButton.tsx
17378
- import { useState as useState49, useCallback as useCallback26, useEffect as useEffect32 } from "react";
17439
+ import { useState as useState49, useCallback as useCallback26, useEffect as useEffect33 } from "react";
17379
17440
  import { Tooltip as Tooltip9, Button as Button32, Spin as Spin7 } from "antd";
17380
17441
  import { CalendarOutlined } from "@ant-design/icons";
17381
17442
  import { ScheduledTaskStatus } from "@axiom-lattice/client-sdk";
@@ -17407,7 +17468,7 @@ var ScheduleButton = ({
17407
17468
  setLoading(false);
17408
17469
  }
17409
17470
  }, [client, threadId]);
17410
- useEffect32(() => {
17471
+ useEffect33(() => {
17411
17472
  fetchScheduledTasks();
17412
17473
  }, [fetchScheduledTasks]);
17413
17474
  if (!threadId) {
@@ -17703,7 +17764,7 @@ var AgentHeader = ({
17703
17764
  // src/components/Chat/ThreadManagementButtons.tsx
17704
17765
  import { useCallback as useCallback27, useContext as useContext9 } from "react";
17705
17766
  import { Tooltip as Tooltip12, Button as Button35, Dropdown } from "antd";
17706
- import { HistoryOutlined, PlusOutlined as PlusOutlined7 } from "@ant-design/icons";
17767
+ import { HistoryOutlined, PlusOutlined as PlusOutlined8 } from "@ant-design/icons";
17707
17768
  import { Fragment as Fragment11, jsx as jsx66, jsxs as jsxs45 } from "react/jsx-runtime";
17708
17769
  var CreateThreadButton = () => {
17709
17770
  const { createThread, assistantId, isLoading } = useConversationContext();
@@ -17725,7 +17786,7 @@ var CreateThreadButton = () => {
17725
17786
  Button35,
17726
17787
  {
17727
17788
  type: "text",
17728
- icon: /* @__PURE__ */ jsx66(PlusOutlined7, {}),
17789
+ icon: /* @__PURE__ */ jsx66(PlusOutlined8, {}),
17729
17790
  onClick: handleCreateThread,
17730
17791
  disabled: isLoading,
17731
17792
  loading: isLoading
@@ -17813,7 +17874,7 @@ var ThreadManagementButtons = () => {
17813
17874
 
17814
17875
  // src/components/Chat/DatabasePicker.tsx
17815
17876
  import { useRef as useRef14, useState as useState50 } from "react";
17816
- import { Modal as Modal11, List as List7, Checkbox as Checkbox5, Spin as Spin8, Empty as Empty5, Typography as Typography28, Button as Button36, Space as Space25, Tooltip as Tooltip13 } from "antd";
17877
+ import { Modal as Modal11, List as List8, Checkbox as Checkbox5, Spin as Spin8, Empty as Empty5, Typography as Typography28, Button as Button36, Space as Space25, Tooltip as Tooltip13 } from "antd";
17817
17878
  import { Database as Database4 } from "lucide-react";
17818
17879
  import { Fragment as Fragment12, jsx as jsx67, jsxs as jsxs46 } from "react/jsx-runtime";
17819
17880
  var DatabasePicker = ({ senderRef, iconOnly }) => {
@@ -17909,13 +17970,13 @@ var DatabasePicker = ({ senderRef, iconOnly }) => {
17909
17970
  image: Empty5.PRESENTED_IMAGE_SIMPLE
17910
17971
  }
17911
17972
  ) : /* @__PURE__ */ jsx67(
17912
- List7,
17973
+ List8,
17913
17974
  {
17914
17975
  dataSource: databases,
17915
17976
  renderItem: (db) => {
17916
17977
  const isSelected = selectedDatabases.includes(db.key);
17917
17978
  return /* @__PURE__ */ jsx67(
17918
- List7.Item,
17979
+ List8.Item,
17919
17980
  {
17920
17981
  style: {
17921
17982
  padding: "12px 16px",
@@ -17931,7 +17992,7 @@ var DatabasePicker = ({ senderRef, iconOnly }) => {
17931
17992
  setSelectedDatabases(newValue);
17932
17993
  },
17933
17994
  children: /* @__PURE__ */ jsx67(
17934
- List7.Item.Meta,
17995
+ List8.Item.Meta,
17935
17996
  {
17936
17997
  avatar: /* @__PURE__ */ jsx67(
17937
17998
  Checkbox5,
@@ -17963,7 +18024,7 @@ var DatabasePicker = ({ senderRef, iconOnly }) => {
17963
18024
 
17964
18025
  // src/components/Chat/SkillPicker.tsx
17965
18026
  import { useRef as useRef15, useState as useState51 } from "react";
17966
- import { Modal as Modal12, List as List8, Checkbox as Checkbox6, Spin as Spin9, Empty as Empty6, Typography as Typography29, Button as Button37, Space as Space26, Tooltip as Tooltip14 } from "antd";
18027
+ import { Modal as Modal12, List as List9, Checkbox as Checkbox6, Spin as Spin9, Empty as Empty6, Typography as Typography29, Button as Button37, Space as Space26, Tooltip as Tooltip14 } from "antd";
17967
18028
  import { BrainCircuit } from "lucide-react";
17968
18029
  import { Fragment as Fragment13, jsx as jsx68, jsxs as jsxs47 } from "react/jsx-runtime";
17969
18030
  var SkillPicker = ({ senderRef, iconOnly }) => {
@@ -18059,13 +18120,13 @@ var SkillPicker = ({ senderRef, iconOnly }) => {
18059
18120
  image: Empty6.PRESENTED_IMAGE_SIMPLE
18060
18121
  }
18061
18122
  ) : /* @__PURE__ */ jsx68(
18062
- List8,
18123
+ List9,
18063
18124
  {
18064
18125
  dataSource: skills,
18065
18126
  renderItem: (skill) => {
18066
18127
  const isSelected = selectedSkills.includes(skill.id);
18067
18128
  return /* @__PURE__ */ jsx68(
18068
- List8.Item,
18129
+ List9.Item,
18069
18130
  {
18070
18131
  style: {
18071
18132
  padding: "12px 16px",
@@ -18081,7 +18142,7 @@ var SkillPicker = ({ senderRef, iconOnly }) => {
18081
18142
  setSelectedSkills(newValue);
18082
18143
  },
18083
18144
  children: /* @__PURE__ */ jsx68(
18084
- List8.Item.Meta,
18145
+ List9.Item.Meta,
18085
18146
  {
18086
18147
  avatar: /* @__PURE__ */ jsx68(
18087
18148
  Checkbox6,
@@ -18113,7 +18174,7 @@ var SkillPicker = ({ senderRef, iconOnly }) => {
18113
18174
 
18114
18175
  // src/components/Chat/AgentPicker.tsx
18115
18176
  import { useRef as useRef16, useState as useState52 } from "react";
18116
- import { Modal as Modal13, List as List9, Empty as Empty7, Typography as Typography30, Button as Button38, Tooltip as Tooltip15 } from "antd";
18177
+ import { Modal as Modal13, List as List10, Empty as Empty7, Typography as Typography30, Button as Button38, Tooltip as Tooltip15 } from "antd";
18117
18178
  import { Bot as Bot2 } from "lucide-react";
18118
18179
  import { Fragment as Fragment14, jsx as jsx69, jsxs as jsxs48 } from "react/jsx-runtime";
18119
18180
  var AgentPicker = ({ senderRef, iconOnly }) => {
@@ -18174,13 +18235,13 @@ var AgentPicker = ({ senderRef, iconOnly }) => {
18174
18235
  image: Empty7.PRESENTED_IMAGE_SIMPLE
18175
18236
  }
18176
18237
  ) : /* @__PURE__ */ jsx69(
18177
- List9,
18238
+ List10,
18178
18239
  {
18179
18240
  dataSource: assistants,
18180
18241
  renderItem: (agent) => {
18181
18242
  const isSelected = selectedAgent === agent.id;
18182
18243
  return /* @__PURE__ */ jsx69(
18183
- List9.Item,
18244
+ List10.Item,
18184
18245
  {
18185
18246
  style: {
18186
18247
  padding: "12px 16px",
@@ -18193,7 +18254,7 @@ var AgentPicker = ({ senderRef, iconOnly }) => {
18193
18254
  },
18194
18255
  onClick: () => handleAgentClick(agent.id),
18195
18256
  children: /* @__PURE__ */ jsx69(
18196
- List9.Item.Meta,
18257
+ List10.Item.Meta,
18197
18258
  {
18198
18259
  avatar: /* @__PURE__ */ jsx69(
18199
18260
  "div",
@@ -18228,8 +18289,8 @@ var AgentPicker = ({ senderRef, iconOnly }) => {
18228
18289
  };
18229
18290
 
18230
18291
  // src/components/Chat/MetricsDataSourcePicker.tsx
18231
- import { useEffect as useEffect34, useState as useState53, useRef as useRef17 } from "react";
18232
- import { Modal as Modal14, List as List10, Spin as Spin11, Empty as Empty8, Typography as Typography31, Button as Button39, Tag as Tag14, Tooltip as Tooltip16 } from "antd";
18292
+ import { useEffect as useEffect35, useState as useState53, useRef as useRef17 } from "react";
18293
+ import { Modal as Modal14, List as List11, Spin as Spin11, Empty as Empty8, Typography as Typography31, Button as Button39, Tag as Tag15, Tooltip as Tooltip16 } from "antd";
18233
18294
  import { Database as Database5, Check as Check4, Server as Server2 } from "lucide-react";
18234
18295
  import { Fragment as Fragment15, jsx as jsx70, jsxs as jsxs49 } from "react/jsx-runtime";
18235
18296
  var SESSION_STORAGE_KEY = "metrics_datasource_selection";
@@ -18317,7 +18378,7 @@ var MetricsDataSourcePicker = ({
18317
18378
  console.error("Failed to save datasource to sessionStorage:", error);
18318
18379
  }
18319
18380
  };
18320
- useEffect34(() => {
18381
+ useEffect35(() => {
18321
18382
  if (hasInitializedRef.current) return;
18322
18383
  hasInitializedRef.current = true;
18323
18384
  loadDataSources().then(() => {
@@ -18447,19 +18508,19 @@ var MetricsDataSourcePicker = ({
18447
18508
  children: serverName
18448
18509
  }
18449
18510
  ),
18450
- /* @__PURE__ */ jsx70(Tag14, { style: { fontSize: 11, padding: "0 6px", lineHeight: "18px" }, children: sources.length })
18511
+ /* @__PURE__ */ jsx70(Tag15, { style: { fontSize: 11, padding: "0 6px", lineHeight: "18px" }, children: sources.length })
18451
18512
  ]
18452
18513
  }
18453
18514
  ),
18454
18515
  /* @__PURE__ */ jsx70(
18455
- List10,
18516
+ List11,
18456
18517
  {
18457
18518
  dataSource: sources,
18458
18519
  renderItem: (dataSource) => {
18459
18520
  const isConnected = dataSource.connected;
18460
18521
  const selected = isSelected(dataSource);
18461
18522
  return /* @__PURE__ */ jsx70(
18462
- List10.Item,
18523
+ List11.Item,
18463
18524
  {
18464
18525
  style: {
18465
18526
  padding: "10px 12px",
@@ -18540,7 +18601,7 @@ var MetricsDataSourcePicker = ({
18540
18601
  }
18541
18602
  ),
18542
18603
  selected && /* @__PURE__ */ jsx70(
18543
- Tag14,
18604
+ Tag15,
18544
18605
  {
18545
18606
  color: "blue",
18546
18607
  style: {
@@ -18568,7 +18629,7 @@ var MetricsDataSourcePicker = ({
18568
18629
  };
18569
18630
 
18570
18631
  // src/components/Chat/ModelSelector.tsx
18571
- import { useState as useState54, useEffect as useEffect35, useCallback as useCallback28, useRef as useRef18 } from "react";
18632
+ import { useState as useState54, useEffect as useEffect36, useCallback as useCallback28, useRef as useRef18 } from "react";
18572
18633
  import { Select as Select7 } from "antd";
18573
18634
  import { jsx as jsx71 } from "react/jsx-runtime";
18574
18635
  var STORAGE_KEY = "axiom-lattice:selected-model";
@@ -18635,7 +18696,7 @@ var ModelSelector = ({
18635
18696
  setIsLoading(false);
18636
18697
  }
18637
18698
  }, [get, defaultModelKey]);
18638
- useEffect35(() => {
18699
+ useEffect36(() => {
18639
18700
  fetchModels();
18640
18701
  }, [fetchModels]);
18641
18702
  const handleChange = (modelKey) => {
@@ -18699,7 +18760,7 @@ import {
18699
18760
  } from "@ant-design/icons";
18700
18761
  import { Prompts } from "@ant-design/x";
18701
18762
  import { Space as Space28, Typography as Typography32, Spin as Spin12 } from "antd";
18702
- import { useEffect as useEffect36, useState as useState55, useMemo as useMemo12 } from "react";
18763
+ import { useEffect as useEffect37, useState as useState55, useMemo as useMemo12 } from "react";
18703
18764
  import { BrainCircuit as BrainCircuit2 } from "lucide-react";
18704
18765
  import { jsx as jsx72, jsxs as jsxs50 } from "react/jsx-runtime";
18705
18766
  var categoryConfig = {
@@ -18789,7 +18850,7 @@ var SkillCategoryPrompts = ({
18789
18850
  const [showAll, setShowAll] = useState55(false);
18790
18851
  const { get } = useApi();
18791
18852
  const MAX_SIMPLE_ITEMS = 10;
18792
- useEffect36(() => {
18853
+ useEffect37(() => {
18793
18854
  const loadSkills = async () => {
18794
18855
  setLoading(true);
18795
18856
  try {
@@ -19391,7 +19452,7 @@ var Chating = ({
19391
19452
  const isInputDisabled = interrupts && interrupts.length > 0;
19392
19453
  const typingFrames = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
19393
19454
  const [typingFrameIndex, setTypingFrameIndex] = useState57(0);
19394
- useEffect37(() => {
19455
+ useEffect38(() => {
19395
19456
  if (!isStreaming) return;
19396
19457
  const interval = setInterval(() => {
19397
19458
  setTypingFrameIndex((prev) => (prev + 1) % typingFrames.length);
@@ -19402,13 +19463,13 @@ var Chating = ({
19402
19463
  const systemContextSentRef = useRef19(false);
19403
19464
  const initialMessageSentRef = useRef19(false);
19404
19465
  const prevLoadingRef = useRef19(false);
19405
- useEffect37(() => {
19466
+ useEffect38(() => {
19406
19467
  systemContextSentRef.current = false;
19407
19468
  }, [threadId]);
19408
- useEffect37(() => {
19469
+ useEffect38(() => {
19409
19470
  initialMessageSentRef.current = false;
19410
19471
  }, [threadId]);
19411
- useEffect37(() => {
19472
+ useEffect38(() => {
19412
19473
  const wasLoading = prevLoadingRef.current;
19413
19474
  prevLoadingRef.current = isLoading;
19414
19475
  if (wasLoading && !isLoading && initialMessage && threadId && !initialMessageSentRef.current) {
@@ -19429,7 +19490,7 @@ var Chating = ({
19429
19490
  }, [updateCustomRunConfig]);
19430
19491
  const [isEmptyState, setIsEmptyState] = useState57(showEmptyState && messages.length === 0 && !pendingMessages?.length);
19431
19492
  const [isTransitioning, setIsTransitioning] = useState57(false);
19432
- useEffect37(() => {
19493
+ useEffect38(() => {
19433
19494
  if (!showEmptyState) {
19434
19495
  setIsEmptyState(false);
19435
19496
  return;
@@ -19516,7 +19577,7 @@ var Chating = ({
19516
19577
  setSuggestionsLoading(false);
19517
19578
  }
19518
19579
  };
19519
- useEffect37(() => {
19580
+ useEffect38(() => {
19520
19581
  regsiterElement("action_show_attachments_uploader", {
19521
19582
  card_view: () => null,
19522
19583
  action: (data) => {
@@ -19952,7 +20013,7 @@ var TaskDetail = ({ data, component_key, interactive = true }) => {
19952
20013
  };
19953
20014
 
19954
20015
  // src/components/GenUI/elements/internet_search_card.tsx
19955
- import { Avatar as Avatar7, Button as Button41, List as List11, Space as Space31, Typography as Typography36 } from "antd";
20016
+ import { Avatar as Avatar7, Button as Button41, List as List12, Space as Space31, Typography as Typography36 } from "antd";
19956
20017
  import {
19957
20018
  SearchOutlined
19958
20019
  } from "@ant-design/icons";
@@ -20083,7 +20144,7 @@ var InternetSearchCard = ({
20083
20144
  header,
20084
20145
  expandIcon: () => /* @__PURE__ */ jsx76(SearchOutlined, {}),
20085
20146
  children: /* @__PURE__ */ jsx76(
20086
- List11,
20147
+ List12,
20087
20148
  {
20088
20149
  size: "small",
20089
20150
  dataSource,
@@ -20092,7 +20153,7 @@ var InternetSearchCard = ({
20092
20153
  const domain = getDomainFromUrl(url);
20093
20154
  const iconText = getIconText(domain);
20094
20155
  const iconColor = getIconColor(domain);
20095
- return /* @__PURE__ */ jsx76(List11.Item, { extra: /* @__PURE__ */ jsx76(Text26, { className: styles.source, children: domain }), children: /* @__PURE__ */ jsxs53(Space31, { style: { width: "100%" }, children: [
20156
+ return /* @__PURE__ */ jsx76(List12.Item, { extra: /* @__PURE__ */ jsx76(Text26, { className: styles.source, children: domain }), children: /* @__PURE__ */ jsxs53(Space31, { style: { width: "100%" }, children: [
20096
20157
  /* @__PURE__ */ jsx76(Avatar7, { style: { background: iconColor }, children: iconText }),
20097
20158
  " ",
20098
20159
  /* @__PURE__ */ jsx76(
@@ -20118,16 +20179,16 @@ var InternetSearchCard = ({
20118
20179
  };
20119
20180
 
20120
20181
  // src/components/GenUI/elements/schedule_viewer.tsx
20121
- import { useState as useState58, useEffect as useEffect38, useCallback as useCallback30 } from "react";
20182
+ import { useState as useState58, useEffect as useEffect39, useCallback as useCallback30 } from "react";
20122
20183
  import {
20123
- Tag as Tag15,
20184
+ Tag as Tag16,
20124
20185
  Button as Button42,
20125
20186
  Empty as Empty10,
20126
20187
  Spin as Spin13,
20127
20188
  Typography as Typography37,
20128
20189
  Space as Space32,
20129
20190
  Tooltip as Tooltip17,
20130
- Popconfirm as Popconfirm4,
20191
+ Popconfirm as Popconfirm5,
20131
20192
  message as message15,
20132
20193
  Card as Card15
20133
20194
  } from "antd";
@@ -20135,7 +20196,7 @@ import {
20135
20196
  ClockCircleOutlined as ClockCircleOutlined3,
20136
20197
  PauseCircleOutlined,
20137
20198
  PlayCircleOutlined,
20138
- StopOutlined,
20199
+ StopOutlined as StopOutlined2,
20139
20200
  ReloadOutlined as ReloadOutlined3,
20140
20201
  CheckCircleOutlined as CheckCircleOutlined6,
20141
20202
  CloseCircleOutlined as CloseCircleOutlined2,
@@ -20152,7 +20213,7 @@ import {
20152
20213
  } from "@axiom-lattice/client-sdk";
20153
20214
  import { jsx as jsx77, jsxs as jsxs54 } from "react/jsx-runtime";
20154
20215
  dayjs2.extend(relativeTime);
20155
- var { Text: Text27, Title: Title5 } = Typography37;
20216
+ var { Text: Text27, Title: Title6 } = Typography37;
20156
20217
  var useStyles7 = createStyles19(({ token, css }) => ({
20157
20218
  container: css`
20158
20219
  height: 100%;
@@ -20263,7 +20324,7 @@ var getStatusIcon2 = (status) => {
20263
20324
  case ScheduledTaskStatus2.FAILED:
20264
20325
  return /* @__PURE__ */ jsx77(CloseCircleOutlined2, {});
20265
20326
  case ScheduledTaskStatus2.CANCELLED:
20266
- return /* @__PURE__ */ jsx77(StopOutlined, {});
20327
+ return /* @__PURE__ */ jsx77(StopOutlined2, {});
20267
20328
  case ScheduledTaskStatus2.PAUSED:
20268
20329
  return /* @__PURE__ */ jsx77(PauseCircleOutlined, {});
20269
20330
  default:
@@ -20347,12 +20408,12 @@ var ScheduleViewer = ({ data }) => {
20347
20408
  },
20348
20409
  [client, handleRefresh]
20349
20410
  );
20350
- useEffect38(() => {
20411
+ useEffect39(() => {
20351
20412
  if (threadId && (!initialTasks || initialTasks.length === 0)) {
20352
20413
  handleRefresh();
20353
20414
  }
20354
20415
  }, [threadId]);
20355
- useEffect38(() => {
20416
+ useEffect39(() => {
20356
20417
  if (initialTasks) {
20357
20418
  setTasks(initialTasks);
20358
20419
  }
@@ -20384,7 +20445,7 @@ var ScheduleViewer = ({ data }) => {
20384
20445
  }
20385
20446
  ) }),
20386
20447
  (isPending || isPaused) && /* @__PURE__ */ jsx77(
20387
- Popconfirm4,
20448
+ Popconfirm5,
20388
20449
  {
20389
20450
  title: "Cancel this scheduled task?",
20390
20451
  description: "This action cannot be undone.",
@@ -20397,7 +20458,7 @@ var ScheduleViewer = ({ data }) => {
20397
20458
  type: "text",
20398
20459
  size: "small",
20399
20460
  danger: true,
20400
- icon: /* @__PURE__ */ jsx77(StopOutlined, {}),
20461
+ icon: /* @__PURE__ */ jsx77(StopOutlined2, {}),
20401
20462
  loading: isLoading
20402
20463
  }
20403
20464
  ) })
@@ -20420,7 +20481,7 @@ var ScheduleViewer = ({ data }) => {
20420
20481
  /* @__PURE__ */ jsx77("div", { className: styles.taskId, children: task.taskId }),
20421
20482
  task.payload?.message?.content && /* @__PURE__ */ jsx77("div", { className: styles.messageContent, children: /* @__PURE__ */ jsx77(Text27, { type: "secondary", style: { fontSize: 12 }, children: task.payload.message.content }) })
20422
20483
  ] }),
20423
- /* @__PURE__ */ jsx77(Tag15, { color: getStatusColor(task.status), icon: getStatusIcon2(task.status), children: task.status.toUpperCase() })
20484
+ /* @__PURE__ */ jsx77(Tag16, { color: getStatusColor(task.status), icon: getStatusIcon2(task.status), children: task.status.toUpperCase() })
20424
20485
  ] }),
20425
20486
  /* @__PURE__ */ jsxs54("div", { className: styles.metaRow, children: [
20426
20487
  /* @__PURE__ */ jsx77(Tooltip17, { title: "Execution Type", children: /* @__PURE__ */ jsxs54("div", { className: styles.metaItem, children: [
@@ -20466,7 +20527,7 @@ var ScheduleViewer = ({ data }) => {
20466
20527
  };
20467
20528
  return /* @__PURE__ */ jsxs54("div", { className: styles.container, children: [
20468
20529
  /* @__PURE__ */ jsxs54("div", { className: styles.header, children: [
20469
- /* @__PURE__ */ jsx77(Title5, { level: 5, style: { margin: 0 }, children: "Scheduled Tasks" }),
20530
+ /* @__PURE__ */ jsx77(Title6, { level: 5, style: { margin: 0 }, children: "Scheduled Tasks" }),
20470
20531
  /* @__PURE__ */ jsx77(Tooltip17, { title: "Refresh", children: /* @__PURE__ */ jsx77(
20471
20532
  Button42,
20472
20533
  {
@@ -20639,7 +20700,7 @@ ${code}
20639
20700
  };
20640
20701
 
20641
20702
  // src/components/GenUI/elements/TeamGraph.tsx
20642
- import { Card as Card16, Typography as Typography40, Avatar as Avatar8, Tag as Tag16, List as List13, Space as Space35, Button as Button45, Skeleton as Skeleton2 } from "antd";
20703
+ import { Card as Card16, Typography as Typography40, Avatar as Avatar8, Tag as Tag17, List as List14, Space as Space35, Button as Button45, Skeleton as Skeleton2 } from "antd";
20643
20704
  import { UserOutlined as UserOutlined5, TeamOutlined as TeamOutlined2 } from "@ant-design/icons";
20644
20705
  import { Monitor } from "lucide-react";
20645
20706
  import { jsx as jsx80, jsxs as jsxs57 } from "react/jsx-runtime";
@@ -20758,10 +20819,10 @@ var TeamGraph = ({ data }) => {
20758
20819
  ) : null,
20759
20820
  children: [
20760
20821
  /* @__PURE__ */ jsx80(
20761
- List13,
20822
+ List14,
20762
20823
  {
20763
20824
  dataSource: teammates,
20764
- renderItem: (teammate) => /* @__PURE__ */ jsxs57(List13.Item, { style: { display: "block" }, children: [
20825
+ renderItem: (teammate) => /* @__PURE__ */ jsxs57(List14.Item, { style: { display: "block" }, children: [
20765
20826
  /* @__PURE__ */ jsxs57(Space35, { align: "center", size: 12, children: [
20766
20827
  /* @__PURE__ */ jsx80(
20767
20828
  Avatar8,
@@ -20781,7 +20842,7 @@ var TeamGraph = ({ data }) => {
20781
20842
  /* @__PURE__ */ jsxs57("div", { style: { flex: 1 }, children: [
20782
20843
  /* @__PURE__ */ jsx80(Text30, { strong: true, style: { display: "block" }, children: teammate?.name || "Unnamed" }),
20783
20844
  /* @__PURE__ */ jsx80(
20784
- Tag16,
20845
+ Tag17,
20785
20846
  {
20786
20847
  color: "blue",
20787
20848
  style: { margin: 0, marginTop: 4 },
@@ -20801,11 +20862,11 @@ var TeamGraph = ({ data }) => {
20801
20862
  ")"
20802
20863
  ] }),
20803
20864
  /* @__PURE__ */ jsx80(
20804
- List13,
20865
+ List14,
20805
20866
  {
20806
20867
  size: "small",
20807
20868
  dataSource: tasks.filter((t) => t.status === "pending"),
20808
- renderItem: (task) => /* @__PURE__ */ jsx80(List13.Item, { style: { padding: "8px 0" }, children: /* @__PURE__ */ jsxs57("div", { children: [
20869
+ renderItem: (task) => /* @__PURE__ */ jsx80(List14.Item, { style: { padding: "8px 0" }, children: /* @__PURE__ */ jsxs57("div", { children: [
20809
20870
  /* @__PURE__ */ jsx80(Text30, { style: { fontSize: 12, color: "#7A7A7A" }, children: task.id }),
20810
20871
  /* @__PURE__ */ jsx80(Text30, { strong: true, style: { display: "block", fontSize: 13 }, children: task.title }),
20811
20872
  task.description && /* @__PURE__ */ jsx80(Text30, { type: "secondary", style: { fontSize: 11 }, children: task.description.length > 100 ? task.description.slice(0, 100) + "..." : task.description })
@@ -21148,7 +21209,7 @@ function useTeamWorkspaceData(threadId, assistantId) {
21148
21209
 
21149
21210
  // src/components/GenUI/elements/TeamWorkspace/TeamDashboard.tsx
21150
21211
  import { jsx as jsx82, jsxs as jsxs59 } from "react/jsx-runtime";
21151
- var { Title: Title6, Text: Text31 } = Typography41;
21212
+ var { Title: Title7, Text: Text31 } = Typography41;
21152
21213
  var useStyles9 = createStyles21(({ token, css }) => ({
21153
21214
  container: css`
21154
21215
  padding: ${token.paddingLG}px;
@@ -21419,7 +21480,7 @@ var TeamDashboard = ({
21419
21480
  const { styles } = useStyles9();
21420
21481
  return /* @__PURE__ */ jsxs59("div", { className: styles.container, children: [
21421
21482
  /* @__PURE__ */ jsxs59("div", { className: styles.header, children: [
21422
- /* @__PURE__ */ jsx82(Title6, { level: 3, className: styles.title, children: "Team Dashboard" }),
21483
+ /* @__PURE__ */ jsx82(Title7, { level: 3, className: styles.title, children: "Team Dashboard" }),
21423
21484
  /* @__PURE__ */ jsx82(Text31, { className: styles.subtitle, children: team?.teamId ? `Team ID: ${team.teamId} \u2022 ${stats.totalTasks} tasks \u2022 ${stats.totalActivities} activities` : "Overview of team activities and tasks" })
21424
21485
  ] }),
21425
21486
  /* @__PURE__ */ jsxs59(Row2, { gutter: [16, 16], className: styles.statsRow, children: [
@@ -21507,13 +21568,13 @@ import {
21507
21568
  ChevronRight as ChevronRight5,
21508
21569
  Circle,
21509
21570
  LayoutGrid as LayoutGrid2,
21510
- List as List14
21571
+ List as List15
21511
21572
  } from "lucide-react";
21512
21573
  import { createStyles as createStyles23 } from "antd-style";
21513
21574
 
21514
21575
  // src/components/GenUI/elements/TeamWorkspace/TaskDetailModal.tsx
21515
21576
  import { useState as useState60 } from "react";
21516
- import { Modal as Modal15, Typography as Typography42, Tag as Tag17, Divider as Divider7, Tabs as Tabs2, Timeline } from "antd";
21577
+ import { Modal as Modal15, Typography as Typography42, Tag as Tag18, Divider as Divider7, Tabs as Tabs2, Timeline } from "antd";
21517
21578
  import { createStyles as createStyles22 } from "antd-style";
21518
21579
  import {
21519
21580
  CheckCircle2 as CheckCircle22,
@@ -21527,7 +21588,7 @@ import {
21527
21588
  GitCommit
21528
21589
  } from "lucide-react";
21529
21590
  import { Fragment as Fragment18, jsx as jsx83, jsxs as jsxs60 } from "react/jsx-runtime";
21530
- var { Title: Title7, Text: Text32, Paragraph } = Typography42;
21591
+ var { Title: Title8, Text: Text32, Paragraph } = Typography42;
21531
21592
  var useStyles10 = createStyles22(({ token, css }) => ({
21532
21593
  modalContent: css`
21533
21594
  padding: 0;
@@ -21989,7 +22050,7 @@ var TaskDetailModal = ({
21989
22050
  ),
21990
22051
  /* @__PURE__ */ jsx83(Text32, { className: styles.taskId, children: task.id })
21991
22052
  ] }),
21992
- /* @__PURE__ */ jsx83(Title7, { level: 3, className: styles.title, children: task.title }),
22053
+ /* @__PURE__ */ jsx83(Title8, { level: 3, className: styles.title, children: task.title }),
21993
22054
  task.description && /* @__PURE__ */ jsx83("div", { className: styles.description, children: /* @__PURE__ */ jsx83(Paragraph, { style: { margin: 0 }, children: task.description }) }),
21994
22055
  /* @__PURE__ */ jsxs60("div", { className: styles.metaSection, children: [
21995
22056
  /* @__PURE__ */ jsxs60("div", { className: styles.metaItem, children: [
@@ -22041,7 +22102,7 @@ var TaskDetailModal = ({
22041
22102
  /* @__PURE__ */ jsx83(Divider7, {}),
22042
22103
  task.dependencies?.length > 0 && /* @__PURE__ */ jsxs60("div", { className: styles.dependenciesSection, children: [
22043
22104
  /* @__PURE__ */ jsx83(Text32, { className: styles.sectionTitle, children: "Dependencies" }),
22044
- /* @__PURE__ */ jsx83("div", { className: styles.dependencyList, children: task.dependencies.map((dep) => /* @__PURE__ */ jsxs60(Tag17, { className: styles.dependencyTag, children: [
22105
+ /* @__PURE__ */ jsx83("div", { className: styles.dependencyList, children: task.dependencies.map((dep) => /* @__PURE__ */ jsxs60(Tag18, { className: styles.dependencyTag, children: [
22045
22106
  /* @__PURE__ */ jsx83(Link, { size: 12 }),
22046
22107
  " ",
22047
22108
  dep
@@ -22062,7 +22123,7 @@ var TaskDetailModal = ({
22062
22123
 
22063
22124
  // src/components/GenUI/elements/TeamWorkspace/IssuesView.tsx
22064
22125
  import { jsx as jsx84, jsxs as jsxs61 } from "react/jsx-runtime";
22065
- var { Title: Title8, Text: Text33 } = Typography43;
22126
+ var { Title: Title9, Text: Text33 } = Typography43;
22066
22127
  var getInitials4 = (name) => {
22067
22128
  return name.split(/[\s_-]/).map((n) => n.charAt(0)).join("").toUpperCase().slice(0, 2);
22068
22129
  };
@@ -22542,7 +22603,7 @@ var IssuesView = ({
22542
22603
  return /* @__PURE__ */ jsxs61("div", { className: styles.container, children: [
22543
22604
  /* @__PURE__ */ jsxs61("div", { className: styles.header, children: [
22544
22605
  /* @__PURE__ */ jsxs61("div", { children: [
22545
- /* @__PURE__ */ jsx84(Title8, { level: 3, className: styles.title, children: "Issues" }),
22606
+ /* @__PURE__ */ jsx84(Title9, { level: 3, className: styles.title, children: "Issues" }),
22546
22607
  /* @__PURE__ */ jsxs61(Text33, { type: "secondary", children: [
22547
22608
  tasks?.length || 0,
22548
22609
  " tasks \u2022 Team: ",
@@ -22555,7 +22616,7 @@ var IssuesView = ({
22555
22616
  {
22556
22617
  className: `${styles.viewToggleButton} ${viewMode === "list" ? "active" : ""}`,
22557
22618
  onClick: () => setViewMode("list"),
22558
- children: /* @__PURE__ */ jsx84(List14, { size: 16 })
22619
+ children: /* @__PURE__ */ jsx84(List15, { size: 16 })
22559
22620
  }
22560
22621
  ),
22561
22622
  /* @__PURE__ */ jsx84(
@@ -22592,10 +22653,10 @@ import {
22592
22653
  useReactFlow as useReactFlow2
22593
22654
  } from "@xyflow/react";
22594
22655
  import "@xyflow/react/dist/style.css";
22595
- import { Typography as Typography44, Tag as Tag18, Space as Space37 } from "antd";
22656
+ import { Typography as Typography44, Tag as Tag19, Space as Space37 } from "antd";
22596
22657
  import { createStyles as createStyles24 } from "antd-style";
22597
22658
  import { jsx as jsx85, jsxs as jsxs62 } from "react/jsx-runtime";
22598
- var { Title: Title9, Text: Text34 } = Typography44;
22659
+ var { Title: Title10, Text: Text34 } = Typography44;
22599
22660
  var useStyles12 = createStyles24(({ token, css }) => ({
22600
22661
  container: css`
22601
22662
  height: 100%;
@@ -22711,7 +22772,7 @@ var TeamMemberNode = ({ data }) => {
22711
22772
  /* @__PURE__ */ jsxs62("div", { children: [
22712
22773
  /* @__PURE__ */ jsxs62("div", { className: styles.nodeTitle, children: [
22713
22774
  name,
22714
- isLead && /* @__PURE__ */ jsx85(Tag18, { color: "blue", style: { marginLeft: 8, fontSize: 10 }, children: "Lead" })
22775
+ isLead && /* @__PURE__ */ jsx85(Tag19, { color: "blue", style: { marginLeft: 8, fontSize: 10 }, children: "Lead" })
22715
22776
  ] }),
22716
22777
  /* @__PURE__ */ jsx85("div", { className: styles.nodeRole, children: role })
22717
22778
  ] })
@@ -22725,15 +22786,15 @@ var TeamMemberNode = ({ data }) => {
22725
22786
  }
22726
22787
  ),
22727
22788
  taskStats && /* @__PURE__ */ jsxs62("div", { className: styles.nodeStats, children: [
22728
- taskStats.completed > 0 && /* @__PURE__ */ jsxs62(Tag18, { color: "success", className: styles.statTag, children: [
22789
+ taskStats.completed > 0 && /* @__PURE__ */ jsxs62(Tag19, { color: "success", className: styles.statTag, children: [
22729
22790
  "\u2713 ",
22730
22791
  taskStats.completed
22731
22792
  ] }),
22732
- taskStats.inProgress > 0 && /* @__PURE__ */ jsxs62(Tag18, { color: "warning", className: styles.statTag, children: [
22793
+ taskStats.inProgress > 0 && /* @__PURE__ */ jsxs62(Tag19, { color: "warning", className: styles.statTag, children: [
22733
22794
  "\u27F3 ",
22734
22795
  taskStats.inProgress
22735
22796
  ] }),
22736
- taskStats.pending > 0 && /* @__PURE__ */ jsxs62(Tag18, { className: styles.statTag, children: [
22797
+ taskStats.pending > 0 && /* @__PURE__ */ jsxs62(Tag19, { className: styles.statTag, children: [
22737
22798
  "\u25CB ",
22738
22799
  taskStats.pending
22739
22800
  ] })
@@ -22832,7 +22893,7 @@ var TeamOrgCanvasInner = ({
22832
22893
  };
22833
22894
  return /* @__PURE__ */ jsxs62("div", { className: styles.container, children: [
22834
22895
  /* @__PURE__ */ jsxs62("div", { className: styles.header, children: [
22835
- /* @__PURE__ */ jsx85(Title9, { level: 3, className: styles.title, children: "Team Organization" }),
22896
+ /* @__PURE__ */ jsx85(Title10, { level: 3, className: styles.title, children: "Team Organization" }),
22836
22897
  /* @__PURE__ */ jsxs62(Text34, { type: "secondary", children: [
22837
22898
  teammates.length + 1,
22838
22899
  " members \u2022 ",
@@ -22896,10 +22957,10 @@ var TeamOrgCanvasInner = ({
22896
22957
  var TeamOrgCanvas = (props) => /* @__PURE__ */ jsx85(ReactFlowProvider3, { children: /* @__PURE__ */ jsx85(TeamOrgCanvasInner, { ...props }) });
22897
22958
 
22898
22959
  // src/components/GenUI/elements/TeamWorkspace/TeamMemberChat.tsx
22899
- import { Typography as Typography45, Tag as Tag19 } from "antd";
22960
+ import { Typography as Typography45, Tag as Tag20 } from "antd";
22900
22961
  import { createStyles as createStyles25 } from "antd-style";
22901
22962
  import { jsx as jsx86, jsxs as jsxs63 } from "react/jsx-runtime";
22902
- var { Title: Title10, Text: Text35 } = Typography45;
22963
+ var { Title: Title11, Text: Text35 } = Typography45;
22903
22964
  var useStyles13 = createStyles25(({ token, css }) => ({
22904
22965
  container: css`
22905
22966
  height: 100%;
@@ -22993,9 +23054,9 @@ var TeamMemberChat = ({
22993
23054
  }
22994
23055
  ),
22995
23056
  /* @__PURE__ */ jsxs63("div", { className: styles.headerInfo, children: [
22996
- /* @__PURE__ */ jsx86(Title10, { level: 4, className: styles.title, children: teammate.name }),
23057
+ /* @__PURE__ */ jsx86(Title11, { level: 4, className: styles.title, children: teammate.name }),
22997
23058
  /* @__PURE__ */ jsxs63("div", { children: [
22998
- /* @__PURE__ */ jsx86(Tag19, { color: "blue", children: teammate.role }),
23059
+ /* @__PURE__ */ jsx86(Tag20, { color: "blue", children: teammate.role }),
22999
23060
  teammate.description && /* @__PURE__ */ jsxs63(Text35, { className: styles.role, children: [
23000
23061
  "\u2022 ",
23001
23062
  teammate.description
@@ -23030,11 +23091,11 @@ import {
23030
23091
  } from "lucide-react";
23031
23092
 
23032
23093
  // src/components/GenUI/elements/MailboxDetailModal.tsx
23033
- import { Modal as Modal16, Typography as Typography46, Tag as Tag20, Divider as Divider8 } from "antd";
23094
+ import { Modal as Modal16, Typography as Typography46, Tag as Tag21, Divider as Divider8 } from "antd";
23034
23095
  import { createStyles as createStyles26 } from "antd-style";
23035
23096
  import { Mail as Mail2, Calendar as Calendar2 } from "lucide-react";
23036
23097
  import { jsx as jsx87, jsxs as jsxs64 } from "react/jsx-runtime";
23037
- var { Title: Title11, Text: Text36, Paragraph: Paragraph2 } = Typography46;
23098
+ var { Title: Title12, Text: Text36, Paragraph: Paragraph2 } = Typography46;
23038
23099
  var useStyles14 = createStyles26(({ token, css }) => ({
23039
23100
  modalContent: css`
23040
23101
  padding: 0;
@@ -23164,12 +23225,12 @@ var formatDate3 = (timestamp) => {
23164
23225
  });
23165
23226
  };
23166
23227
  var MailboxDetailModal = ({
23167
- message: message29,
23228
+ message: message28,
23168
23229
  visible,
23169
23230
  onClose
23170
23231
  }) => {
23171
23232
  const { styles } = useStyles14();
23172
- if (!message29) return null;
23233
+ if (!message28) return null;
23173
23234
  return /* @__PURE__ */ jsx87(
23174
23235
  Modal16,
23175
23236
  {
@@ -23192,12 +23253,12 @@ var MailboxDetailModal = ({
23192
23253
  children: /* @__PURE__ */ jsxs64("div", { className: styles.modalContent, children: [
23193
23254
  /* @__PURE__ */ jsxs64("div", { className: styles.header, children: [
23194
23255
  /* @__PURE__ */ jsx87("div", { className: styles.messageIcon, children: /* @__PURE__ */ jsx87(Mail2, { size: 20 }) }),
23195
- /* @__PURE__ */ jsx87(Text36, { className: styles.messageId, children: message29.id }),
23196
- !message29.read && /* @__PURE__ */ jsx87(Tag20, { color: "red", children: "Unread" })
23256
+ /* @__PURE__ */ jsx87(Text36, { className: styles.messageId, children: message28.id }),
23257
+ !message28.read && /* @__PURE__ */ jsx87(Tag21, { color: "red", children: "Unread" })
23197
23258
  ] }),
23198
- /* @__PURE__ */ jsxs64(Title11, { level: 4, className: styles.title, children: [
23259
+ /* @__PURE__ */ jsxs64(Title12, { level: 4, className: styles.title, children: [
23199
23260
  "Message from ",
23200
- message29.from
23261
+ message28.from
23201
23262
  ] }),
23202
23263
  /* @__PURE__ */ jsxs64("div", { className: styles.metaSection, children: [
23203
23264
  /* @__PURE__ */ jsxs64("div", { className: styles.metaItem, children: [
@@ -23207,11 +23268,11 @@ var MailboxDetailModal = ({
23207
23268
  "div",
23208
23269
  {
23209
23270
  className: styles.avatar,
23210
- style: { background: getAvatarColor7(message29.from) },
23211
- children: getInitials7(message29.from)
23271
+ style: { background: getAvatarColor7(message28.from) },
23272
+ children: getInitials7(message28.from)
23212
23273
  }
23213
23274
  ),
23214
- /* @__PURE__ */ jsx87("span", { children: message29.from })
23275
+ /* @__PURE__ */ jsx87("span", { children: message28.from })
23215
23276
  ] })
23216
23277
  ] }),
23217
23278
  /* @__PURE__ */ jsxs64("div", { className: styles.metaItem, children: [
@@ -23221,29 +23282,29 @@ var MailboxDetailModal = ({
23221
23282
  "div",
23222
23283
  {
23223
23284
  className: styles.avatar,
23224
- style: { background: getAvatarColor7(message29.to) },
23225
- children: getInitials7(message29.to)
23285
+ style: { background: getAvatarColor7(message28.to) },
23286
+ children: getInitials7(message28.to)
23226
23287
  }
23227
23288
  ),
23228
- /* @__PURE__ */ jsx87("span", { children: message29.to })
23289
+ /* @__PURE__ */ jsx87("span", { children: message28.to })
23229
23290
  ] })
23230
23291
  ] }),
23231
23292
  /* @__PURE__ */ jsxs64("div", { className: styles.metaItem, children: [
23232
23293
  /* @__PURE__ */ jsx87(Text36, { className: styles.metaLabel, children: "Time" }),
23233
23294
  /* @__PURE__ */ jsxs64("div", { className: styles.metaValue, children: [
23234
23295
  /* @__PURE__ */ jsx87(Calendar2, { size: 14 }),
23235
- /* @__PURE__ */ jsx87("span", { children: formatDate3(message29.timestamp) })
23296
+ /* @__PURE__ */ jsx87("span", { children: formatDate3(message28.timestamp) })
23236
23297
  ] })
23237
23298
  ] }),
23238
23299
  /* @__PURE__ */ jsxs64("div", { className: styles.metaItem, children: [
23239
23300
  /* @__PURE__ */ jsx87(Text36, { className: styles.metaLabel, children: "Type" }),
23240
- /* @__PURE__ */ jsx87("div", { className: styles.metaValue, children: /* @__PURE__ */ jsx87(Tag20, { color: message29.type === "broadcast" ? "blue" : "default", children: message29.type }) })
23301
+ /* @__PURE__ */ jsx87("div", { className: styles.metaValue, children: /* @__PURE__ */ jsx87(Tag21, { color: message28.type === "broadcast" ? "blue" : "default", children: message28.type }) })
23241
23302
  ] })
23242
23303
  ] }),
23243
23304
  /* @__PURE__ */ jsx87(Divider8, {}),
23244
23305
  /* @__PURE__ */ jsxs64("div", { className: styles.contentSection, children: [
23245
23306
  /* @__PURE__ */ jsx87(Text36, { className: styles.contentLabel, children: "Message Content" }),
23246
- /* @__PURE__ */ jsx87("div", { className: styles.contentBox, children: /* @__PURE__ */ jsx87(Paragraph2, { className: styles.messageContent, children: message29.content }) })
23307
+ /* @__PURE__ */ jsx87("div", { className: styles.contentBox, children: /* @__PURE__ */ jsx87(Paragraph2, { className: styles.messageContent, children: message28.content }) })
23247
23308
  ] })
23248
23309
  ] })
23249
23310
  }
@@ -23252,7 +23313,7 @@ var MailboxDetailModal = ({
23252
23313
 
23253
23314
  // src/components/GenUI/elements/MailboxPanel.tsx
23254
23315
  import { jsx as jsx88, jsxs as jsxs65 } from "react/jsx-runtime";
23255
- var { Title: Title12, Text: Text37 } = Typography47;
23316
+ var { Title: Title13, Text: Text37 } = Typography47;
23256
23317
  var useStyles15 = createStyles27(({ token, css }) => ({
23257
23318
  container: css`
23258
23319
  padding: ${token.paddingLG}px;
@@ -23472,26 +23533,26 @@ var MessageGroupComponent = ({ group, styles, defaultExpanded = true, onMessageC
23472
23533
  ]
23473
23534
  }
23474
23535
  ),
23475
- isExpanded && /* @__PURE__ */ jsx88("div", { className: styles.listGroupContent, children: group.messages.map((message29) => /* @__PURE__ */ jsxs65(
23536
+ isExpanded && /* @__PURE__ */ jsx88("div", { className: styles.listGroupContent, children: group.messages.map((message28) => /* @__PURE__ */ jsxs65(
23476
23537
  "div",
23477
23538
  {
23478
- className: `${styles.listItem} ${!message29.read ? styles.listItemUnread : ""}`,
23479
- onClick: () => onMessageClick(message29),
23539
+ className: `${styles.listItem} ${!message28.read ? styles.listItemUnread : ""}`,
23540
+ onClick: () => onMessageClick(message28),
23480
23541
  children: [
23481
- /* @__PURE__ */ jsx88("div", { className: styles.listItemIcon, children: !message29.read ? /* @__PURE__ */ jsx88("div", { className: styles.unreadBadge }) : /* @__PURE__ */ jsx88(Circle2, { size: 8, style: { color: "#d9d9d9" } }) }),
23542
+ /* @__PURE__ */ jsx88("div", { className: styles.listItemIcon, children: !message28.read ? /* @__PURE__ */ jsx88("div", { className: styles.unreadBadge }) : /* @__PURE__ */ jsx88(Circle2, { size: 8, style: { color: "#d9d9d9" } }) }),
23482
23543
  /* @__PURE__ */ jsxs65("div", { className: styles.listItemContent, children: [
23483
- /* @__PURE__ */ jsx88("span", { className: styles.listItemPreview, children: getMessagePreview(message29.content) }),
23544
+ /* @__PURE__ */ jsx88("span", { className: styles.listItemPreview, children: getMessagePreview(message28.content) }),
23484
23545
  /* @__PURE__ */ jsxs65("span", { className: styles.listItemMeta, children: [
23485
23546
  "To: ",
23486
- message29.to,
23547
+ message28.to,
23487
23548
  " \u2022 ",
23488
- message29.type
23549
+ message28.type
23489
23550
  ] })
23490
23551
  ] }),
23491
- /* @__PURE__ */ jsx88("div", { className: styles.listItemRight, children: /* @__PURE__ */ jsx88("span", { className: styles.listItemDate, children: formatDate4(message29.timestamp) }) })
23552
+ /* @__PURE__ */ jsx88("div", { className: styles.listItemRight, children: /* @__PURE__ */ jsx88("span", { className: styles.listItemDate, children: formatDate4(message28.timestamp) }) })
23492
23553
  ]
23493
23554
  },
23494
- message29.id
23555
+ message28.id
23495
23556
  )) })
23496
23557
  ] });
23497
23558
  };
@@ -23502,12 +23563,12 @@ var MailboxPanel = ({ data }) => {
23502
23563
  const { teamMailbox = [] } = data || {};
23503
23564
  const messageGroups = useMemo17(() => {
23504
23565
  const groupsMap = /* @__PURE__ */ new Map();
23505
- teamMailbox.forEach((message29) => {
23506
- const sender = message29.from;
23566
+ teamMailbox.forEach((message28) => {
23567
+ const sender = message28.from;
23507
23568
  if (!groupsMap.has(sender)) {
23508
23569
  groupsMap.set(sender, []);
23509
23570
  }
23510
- groupsMap.get(sender).push(message29);
23571
+ groupsMap.get(sender).push(message28);
23511
23572
  });
23512
23573
  const groups = Array.from(groupsMap.entries()).map(([sender, messages]) => ({
23513
23574
  sender,
@@ -23524,8 +23585,8 @@ var MailboxPanel = ({ data }) => {
23524
23585
  return groups;
23525
23586
  }, [teamMailbox]);
23526
23587
  const totalUnread = teamMailbox.filter((m) => !m.read).length;
23527
- const handleMessageClick = (message29) => {
23528
- setSelectedMessage(message29);
23588
+ const handleMessageClick = (message28) => {
23589
+ setSelectedMessage(message28);
23529
23590
  setModalVisible(true);
23530
23591
  };
23531
23592
  const handleCloseModal = () => {
@@ -23534,7 +23595,7 @@ var MailboxPanel = ({ data }) => {
23534
23595
  };
23535
23596
  return /* @__PURE__ */ jsxs65("div", { className: styles.container, children: [
23536
23597
  /* @__PURE__ */ jsx88("div", { className: styles.header, children: /* @__PURE__ */ jsxs65("div", { children: [
23537
- /* @__PURE__ */ jsxs65(Title12, { level: 3, className: styles.title, children: [
23598
+ /* @__PURE__ */ jsxs65(Title13, { level: 3, className: styles.title, children: [
23538
23599
  /* @__PURE__ */ jsx88(Mail3, { size: 20, style: { marginRight: 8, verticalAlign: "middle" } }),
23539
23600
  "Mailbox"
23540
23601
  ] }),
@@ -24111,7 +24172,7 @@ var TaskBoard = ({
24111
24172
  };
24112
24173
 
24113
24174
  // src/components/GenUI/elements/Mailbox.tsx
24114
- import { useState as useState64, useMemo as useMemo20, useRef as useRef20, useEffect as useEffect39 } from "react";
24175
+ import { useState as useState64, useMemo as useMemo20, useRef as useRef20, useEffect as useEffect40 } from "react";
24115
24176
  import { jsx as jsx92, jsxs as jsxs69 } from "react/jsx-runtime";
24116
24177
  var useStyle12 = () => {
24117
24178
  return {
@@ -24407,7 +24468,7 @@ var TeamChat = ({ data }) => {
24407
24468
  const mentions = useMemo20(() => {
24408
24469
  return teammates?.map((t) => t.name) || [];
24409
24470
  }, [teammates]);
24410
- useEffect39(() => {
24471
+ useEffect40(() => {
24411
24472
  messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
24412
24473
  }, [sortedMessages]);
24413
24474
  const handleSend = () => {
@@ -24581,7 +24642,7 @@ import { Button as Button47, Typography as Typography48 } from "antd";
24581
24642
  import { ExpandOutlined as ExpandOutlined2 } from "@ant-design/icons";
24582
24643
 
24583
24644
  // src/streaming-html/StreamingHTMLRenderer.tsx
24584
- import React49, { useEffect as useEffect40, useRef as useRef21, useCallback as useCallback31, useState as useState65 } from "react";
24645
+ import React49, { useEffect as useEffect41, useRef as useRef21, useCallback as useCallback31, useState as useState65 } from "react";
24585
24646
 
24586
24647
  // src/streaming-html/show-widget-css-generator.ts
24587
24648
  function generateShowWidgetCSS(tokens) {
@@ -25284,10 +25345,10 @@ var StreamingHTMLRenderer = ({
25284
25345
  const [iframeWidth, setIframeWidth] = React49.useState(void 0);
25285
25346
  const [currentMessageIndex, setCurrentMessageIndex] = useState65(0);
25286
25347
  const [showLoading, setShowLoading] = useState65(true);
25287
- useEffect40(() => {
25348
+ useEffect41(() => {
25288
25349
  isCompleteRef.current = isComplete;
25289
25350
  }, [isComplete]);
25290
- useEffect40(() => {
25351
+ useEffect41(() => {
25291
25352
  if (iframeHeight > 0) {
25292
25353
  setShowLoading(false);
25293
25354
  return;
@@ -25363,17 +25424,17 @@ var StreamingHTMLRenderer = ({
25363
25424
  onError?.(streamingError);
25364
25425
  }
25365
25426
  }, [onError]);
25366
- useEffect40(() => {
25427
+ useEffect41(() => {
25367
25428
  const handleMessage = (event) => {
25368
25429
  const iframe = iframeRef.current;
25369
25430
  if (!iframe || event.source !== iframe.contentWindow) {
25370
25431
  return;
25371
25432
  }
25372
- const message29 = event.data;
25373
- if (!message29 || typeof message29 !== "object") {
25433
+ const message28 = event.data;
25434
+ if (!message28 || typeof message28 !== "object") {
25374
25435
  return;
25375
25436
  }
25376
- switch (message29.type) {
25437
+ switch (message28.type) {
25377
25438
  case "iframe-ready":
25378
25439
  console.log("[StreamingHTMLRenderer] Iframe ready");
25379
25440
  isReadyRef.current = true;
@@ -25388,26 +25449,26 @@ var StreamingHTMLRenderer = ({
25388
25449
  }
25389
25450
  break;
25390
25451
  case "iframe-height":
25391
- if (typeof message29.height === "number" && message29.height > 0) {
25392
- setIframeHeight(message29.height);
25452
+ if (typeof message28.height === "number" && message28.height > 0) {
25453
+ setIframeHeight(message28.height);
25393
25454
  }
25394
25455
  break;
25395
25456
  case "iframe-error": {
25396
25457
  const streamingError = {
25397
25458
  type: "RENDER_ERROR",
25398
- message: message29.error || "Unknown iframe error"
25459
+ message: message28.error || "Unknown iframe error"
25399
25460
  };
25400
25461
  onError?.(streamingError);
25401
25462
  break;
25402
25463
  }
25403
25464
  case "widget-prompt":
25404
- if (typeof message29.text === "string") {
25405
- onPrompt?.(message29.text);
25465
+ if (typeof message28.text === "string") {
25466
+ onPrompt?.(message28.text);
25406
25467
  }
25407
25468
  break;
25408
25469
  case "widget-open-link":
25409
- if (typeof message29.url === "string") {
25410
- window.open(message29.url, "_blank", "noopener,noreferrer");
25470
+ if (typeof message28.url === "string") {
25471
+ window.open(message28.url, "_blank", "noopener,noreferrer");
25411
25472
  }
25412
25473
  break;
25413
25474
  }
@@ -25417,7 +25478,7 @@ var StreamingHTMLRenderer = ({
25417
25478
  window.removeEventListener("message", handleMessage);
25418
25479
  };
25419
25480
  }, [onError, onPrompt, sendChunk, executeScripts]);
25420
- useEffect40(() => {
25481
+ useEffect41(() => {
25421
25482
  if (html === prevHTMLRef.current) {
25422
25483
  return;
25423
25484
  }
@@ -25428,12 +25489,12 @@ var StreamingHTMLRenderer = ({
25428
25489
  sendChunk(newChunk);
25429
25490
  }
25430
25491
  }, [html, sendChunk]);
25431
- useEffect40(() => {
25492
+ useEffect41(() => {
25432
25493
  if (isComplete && isReadyRef.current) {
25433
25494
  executeScripts();
25434
25495
  }
25435
25496
  }, [isComplete, executeScripts]);
25436
- useEffect40(() => {
25497
+ useEffect41(() => {
25437
25498
  const container = containerRef.current;
25438
25499
  if (!container) return;
25439
25500
  const antBubble = container.closest(".ant-bubble");
@@ -25459,7 +25520,7 @@ var StreamingHTMLRenderer = ({
25459
25520
  resizeObserverRef.current = null;
25460
25521
  };
25461
25522
  }, []);
25462
- useEffect40(() => {
25523
+ useEffect41(() => {
25463
25524
  return () => {
25464
25525
  isReadyRef.current = false;
25465
25526
  pendingChunksRef.current = [];
@@ -25774,13 +25835,13 @@ import { CodeHighlighter, Mermaid } from "@ant-design/x";
25774
25835
 
25775
25836
  // src/components/GenUI/ReactInfographic.tsx
25776
25837
  import { Infographic } from "@antv/infographic";
25777
- import { useRef as useRef22, useEffect as useEffect41 } from "react";
25838
+ import { useRef as useRef22, useEffect as useEffect42 } from "react";
25778
25839
  import { jsx as jsx96 } from "react/jsx-runtime";
25779
25840
  var ReactInfographic = (props) => {
25780
25841
  const { children } = props;
25781
25842
  const $container = useRef22(null);
25782
25843
  const infographicInstance = useRef22(null);
25783
- useEffect41(() => {
25844
+ useEffect42(() => {
25784
25845
  if ($container.current) {
25785
25846
  infographicInstance.current = new Infographic({
25786
25847
  container: $container.current,
@@ -25795,7 +25856,7 @@ var ReactInfographic = (props) => {
25795
25856
  infographicInstance.current?.destroy();
25796
25857
  };
25797
25858
  }, []);
25798
- useEffect41(() => {
25859
+ useEffect42(() => {
25799
25860
  const a = `infographic sequence-steps-simple
25800
25861
  data
25801
25862
  sequences
@@ -25811,7 +25872,7 @@ data
25811
25872
  };
25812
25873
 
25813
25874
  // src/components/GenUI/ReactChart.tsx
25814
- import { useEffect as useEffect42, useRef as useRef23, useState as useState66 } from "react";
25875
+ import { useEffect as useEffect43, useRef as useRef23, useState as useState66 } from "react";
25815
25876
  import * as echarts from "echarts";
25816
25877
  import { Card as Card22 } from "antd";
25817
25878
  import { parse } from "best-effort-json-parser";
@@ -26128,7 +26189,7 @@ var ReactChart = (props) => {
26128
26189
  const chartInstance = useRef23(null);
26129
26190
  const resizeObserverRef = useRef23(null);
26130
26191
  const [tableData, setTableData] = useState66(null);
26131
- useEffect42(() => {
26192
+ useEffect43(() => {
26132
26193
  if (!chartRef.current) {
26133
26194
  return;
26134
26195
  }
@@ -26201,7 +26262,7 @@ var ReactChart = (props) => {
26201
26262
  window.removeEventListener("resize", handleResize);
26202
26263
  };
26203
26264
  }, [children]);
26204
- useEffect42(() => {
26265
+ useEffect43(() => {
26205
26266
  return () => {
26206
26267
  if (resizeObserverRef.current) {
26207
26268
  resizeObserverRef.current.disconnect();
@@ -26900,7 +26961,7 @@ function normalize(name, steps) {
26900
26961
  }
26901
26962
 
26902
26963
  // src/components/Chat/WorkflowCanvas.tsx
26903
- import { useMemo as useMemo25, useEffect as useEffect44, useState as useState69, useCallback as useCallback36 } from "react";
26964
+ import { useMemo as useMemo25, useEffect as useEffect45, useState as useState69, useCallback as useCallback36 } from "react";
26904
26965
  import {
26905
26966
  ReactFlowProvider as ReactFlowProvider4,
26906
26967
  MarkerType,
@@ -26910,11 +26971,11 @@ import {
26910
26971
  useEdgesState as useEdgesState4
26911
26972
  } from "@xyflow/react";
26912
26973
  import "@xyflow/react/dist/style.css";
26913
- import { Empty as Empty13, Spin as Spin15, Tag as Tag22, Typography as Typography50, Tabs as Tabs3 } from "antd";
26974
+ import { Empty as Empty13, Spin as Spin15, Tag as Tag23, Typography as Typography50, Tabs as Tabs3 } from "antd";
26914
26975
 
26915
26976
  // src/components/Chat/WorkflowNode.tsx
26916
26977
  import { Handle as Handle3, Position as Position3 } from "@xyflow/react";
26917
- import { Tag as Tag21, Typography as Typography49, Tooltip as Tooltip22, Popover as Popover2 } from "antd";
26978
+ import { Tag as Tag22, Typography as Typography49, Tooltip as Tooltip22, Popover as Popover2 } from "antd";
26918
26979
  import { Workflow, UserCheck, CheckCircle, XCircle, Circle as Circle3, StopCircle, Loader2 as Loader27, CircleCheckBig, CircleX, CirclePause, Filter, Repeat } from "lucide-react";
26919
26980
  import { jsx as jsx104, jsxs as jsxs74 } from "react/jsx-runtime";
26920
26981
  if (typeof document !== "undefined") {
@@ -27006,7 +27067,7 @@ function SchemaView({ schema }) {
27006
27067
  /* @__PURE__ */ jsx104(Text38, { style: { fontSize: 11, fontWeight: isReq ? 600 : 400, fontFamily: "monospace" }, children: key }),
27007
27068
  isReq && /* @__PURE__ */ jsx104("span", { style: { color: "#ef4444", fontSize: 9 }, children: "*" }),
27008
27069
  propDesc && !hasNested && /* @__PURE__ */ jsx104(Text38, { type: "secondary", style: { fontSize: 10, flex: 1, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: propDesc }),
27009
- /* @__PURE__ */ jsx104(Tag21, { color: typeColor(propType), style: { margin: 0, fontSize: 9, padding: "0 4px", lineHeight: "16px", marginLeft: "auto" }, children: propType })
27070
+ /* @__PURE__ */ jsx104(Tag22, { color: typeColor(propType), style: { margin: 0, fontSize: 9, padding: "0 4px", lineHeight: "16px", marginLeft: "auto" }, children: propType })
27010
27071
  ]
27011
27072
  }
27012
27073
  )
@@ -27216,8 +27277,8 @@ var WorkflowNode = ({ data }) => {
27216
27277
  }
27217
27278
  ),
27218
27279
  /* @__PURE__ */ jsxs74("div", { style: { display: "flex", gap: 4, marginTop: 6, flexWrap: "wrap" }, children: [
27219
- !hasRuntime && nodeType === "agent" && ref && /* @__PURE__ */ jsx104(Tag21, { color: "purple", style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: ref }),
27220
- !hasRuntime && nodeType === "agent" && !ref && /* @__PURE__ */ jsx104(Tag21, { color: "default", style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: "general" }),
27280
+ !hasRuntime && nodeType === "agent" && ref && /* @__PURE__ */ jsx104(Tag22, { color: "purple", style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: ref }),
27281
+ !hasRuntime && nodeType === "agent" && !ref && /* @__PURE__ */ jsx104(Tag22, { color: "default", style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: "general" }),
27221
27282
  ask && /* @__PURE__ */ jsx104(Tooltip22, { title: "This step requires human approval before continuing", children: /* @__PURE__ */ jsx104(
27222
27283
  "div",
27223
27284
  {
@@ -27252,9 +27313,9 @@ var WorkflowNode = ({ data }) => {
27252
27313
  children: /* @__PURE__ */ jsx104(Filter, { size: 12, style: { color: "#2f54eb" } })
27253
27314
  }
27254
27315
  ) }),
27255
- !hasRuntime && nodeType === "map" && innerRef && /* @__PURE__ */ jsx104(Tag21, { color: "purple", style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: innerRef }),
27316
+ !hasRuntime && nodeType === "map" && innerRef && /* @__PURE__ */ jsx104(Tag22, { color: "purple", style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: innerRef }),
27256
27317
  !hasRuntime && nodeType === "map" && inputTemplate && /* @__PURE__ */ jsx104(
27257
- Tag21,
27318
+ Tag22,
27258
27319
  {
27259
27320
  color: "default",
27260
27321
  style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px", maxWidth: 120 },
@@ -27262,27 +27323,27 @@ var WorkflowNode = ({ data }) => {
27262
27323
  children: inputTemplate.length > 20 ? inputTemplate.slice(0, 18) + "\u2026" : inputTemplate
27263
27324
  }
27264
27325
  ),
27265
- !hasRuntime && nodeType === "map" && (batchSize || maxConcurrency || innerConcurrency) && /* @__PURE__ */ jsxs74(Tag21, { color: "cyan", style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: [
27326
+ !hasRuntime && nodeType === "map" && (batchSize || maxConcurrency || innerConcurrency) && /* @__PURE__ */ jsxs74(Tag22, { color: "cyan", style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: [
27266
27327
  batchSize ?? 50,
27267
27328
  "\xD7",
27268
27329
  maxConcurrency ?? 10,
27269
27330
  "\xD7",
27270
27331
  innerConcurrency ?? 5
27271
27332
  ] }),
27272
- !hasRuntime && nodeType === "map" && reduceRef && /* @__PURE__ */ jsxs74(Tag21, { color: "blue", style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: [
27333
+ !hasRuntime && nodeType === "map" && reduceRef && /* @__PURE__ */ jsxs74(Tag22, { color: "blue", style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: [
27273
27334
  "\u2193 ",
27274
27335
  reduceRef
27275
27336
  ] }),
27276
- !hasRuntime && maxRetries ? /* @__PURE__ */ jsxs74(Tag21, { style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: [
27337
+ !hasRuntime && maxRetries ? /* @__PURE__ */ jsxs74(Tag22, { style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: [
27277
27338
  "\u21BB ",
27278
27339
  maxRetries
27279
27340
  ] }) : null,
27280
- !hasRuntime && timeout ? /* @__PURE__ */ jsxs74(Tag21, { style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: [
27341
+ !hasRuntime && timeout ? /* @__PURE__ */ jsxs74(Tag22, { style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: [
27281
27342
  "\u23F1 ",
27282
27343
  timeout,
27283
27344
  "s"
27284
27345
  ] }) : null,
27285
- displayDuration && /* @__PURE__ */ jsx104(Tag21, { color: runState ? "blue" : "default", style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: displayDuration }),
27346
+ displayDuration && /* @__PURE__ */ jsx104(Tag22, { color: runState ? "blue" : "default", style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px" }, children: displayDuration }),
27286
27347
  outputKey && /* @__PURE__ */ jsx104("span", { style: { marginLeft: "auto" } }),
27287
27348
  outputKey && /* @__PURE__ */ jsx104(
27288
27349
  Popover2,
@@ -27295,7 +27356,7 @@ var WorkflowNode = ({ data }) => {
27295
27356
  /* @__PURE__ */ jsx104(Text38, { style: { fontSize: 11, fontFamily: "monospace", color: "#6366f1" }, children: outputKey })
27296
27357
  ] }),
27297
27358
  content: nodeSchema ? /* @__PURE__ */ jsx104(SchemaView, { schema: nodeSchema }) : /* @__PURE__ */ jsx104(Text38, { type: "secondary", style: { fontSize: 11 }, children: "No schema defined" }),
27298
- children: /* @__PURE__ */ jsxs74(Tag21, { style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px", flexShrink: 0, cursor: "default" }, children: [
27359
+ children: /* @__PURE__ */ jsxs74(Tag22, { style: { margin: 0, fontSize: 10, padding: "0 5px", lineHeight: "16px", flexShrink: 0, cursor: "default" }, children: [
27299
27360
  "\u2192 ",
27300
27361
  outputKey
27301
27362
  ] })
@@ -27481,7 +27542,7 @@ function StepDetailPopover({ step }) {
27481
27542
  /* @__PURE__ */ jsxs76("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 12 }, children: [
27482
27543
  /* @__PURE__ */ jsx106("span", { style: { color: ssc.color, fontSize: 14 }, children: ssc.icon }),
27483
27544
  /* @__PURE__ */ jsx106(Text39, { strong: true, style: { fontSize: 14 }, children: step.stepName }),
27484
- /* @__PURE__ */ jsx106(Tag22, { color: "purple", style: { fontSize: 11 }, children: step.stepType })
27545
+ /* @__PURE__ */ jsx106(Tag23, { color: "purple", style: { fontSize: 11 }, children: step.stepType })
27485
27546
  ] }),
27486
27547
  step.edgePurpose && /* @__PURE__ */ jsx106("div", { style: { marginBottom: 10 }, children: /* @__PURE__ */ jsxs76(Text39, { type: "secondary", style: { fontSize: 11 }, children: [
27487
27548
  "Purpose: ",
@@ -27828,7 +27889,7 @@ var WorkflowCanvas = ({
27828
27889
  if (!node) return null;
27829
27890
  return matchStepByName(steps, node);
27830
27891
  }, [dsl.nodes, steps, selectedNodeId, isRuntime]);
27831
- useEffect44(() => {
27892
+ useEffect45(() => {
27832
27893
  setNodes(initialNodes);
27833
27894
  setEdges(initialEdges);
27834
27895
  }, [initialNodes, initialEdges, setNodes, setEdges]);
@@ -27843,7 +27904,7 @@ var WorkflowCanvas = ({
27843
27904
  }))
27844
27905
  );
27845
27906
  }, [setNodes]);
27846
- useEffect44(() => {
27907
+ useEffect45(() => {
27847
27908
  if (!isRuntime) return;
27848
27909
  setNodes(
27849
27910
  (nds) => nds.map((n) => ({
@@ -27961,7 +28022,7 @@ if (typeof document !== "undefined") {
27961
28022
  document.head.appendChild(style);
27962
28023
  }
27963
28024
  }
27964
- var { Text: Text40, Title: Title13 } = Typography51;
28025
+ var { Text: Text40, Title: Title14 } = Typography51;
27965
28026
  var statusConfig = {
27966
28027
  running: { icon: /* @__PURE__ */ jsx108(Loader28, { size: 14, style: { animation: "spin 1s linear infinite", color: "#1677ff" } }), label: "Running" },
27967
28028
  completed: { icon: /* @__PURE__ */ jsx108(CircleCheckBig2, { size: 14, style: { color: "#52c41a" } }), label: "Completed" },
@@ -28067,9 +28128,9 @@ function StepNode({ data, selected }) {
28067
28128
  ) })
28068
28129
  ] }),
28069
28130
  /* @__PURE__ */ jsxs77("div", { style: { display: "flex", gap: 4, alignItems: "center", flexWrap: "wrap" }, children: [
28070
- /* @__PURE__ */ jsx108(Tag23, { color: "purple", style: { margin: 0, fontSize: 10, padding: "0 6px", lineHeight: "18px" }, children: step.stepType }),
28131
+ /* @__PURE__ */ jsx108(Tag24, { color: "purple", style: { margin: 0, fontSize: 10, padding: "0 6px", lineHeight: "18px" }, children: step.stepType }),
28071
28132
  /* @__PURE__ */ jsx108(
28072
- Tag23,
28133
+ Tag24,
28073
28134
  {
28074
28135
  color: "blue",
28075
28136
  style: { margin: 0, fontSize: 10, padding: "0 6px", lineHeight: "18px" },
@@ -28143,7 +28204,7 @@ function StepDetailPopover2({ step }) {
28143
28204
  /* @__PURE__ */ jsxs77("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 12 }, children: [
28144
28205
  /* @__PURE__ */ jsx108("span", { style: { color: ssc.color, fontSize: 14 }, children: ssc.icon }),
28145
28206
  /* @__PURE__ */ jsx108(Text40, { strong: true, style: { fontSize: 14 }, children: step.stepName }),
28146
- /* @__PURE__ */ jsx108(Tag23, { color: "purple", style: { fontSize: 11 }, children: step.stepType })
28207
+ /* @__PURE__ */ jsx108(Tag24, { color: "purple", style: { fontSize: 11 }, children: step.stepType })
28147
28208
  ] }),
28148
28209
  step.edgePurpose && /* @__PURE__ */ jsx108("div", { style: { marginBottom: 10 }, children: /* @__PURE__ */ jsxs77(Text40, { type: "secondary", style: { fontSize: 11 }, children: [
28149
28210
  "Purpose: ",
@@ -28229,11 +28290,11 @@ function FlowCanvas({ steps }) {
28229
28290
  () => steps.find((s) => s.id === selectedNodeId) || null,
28230
28291
  [steps, selectedNodeId]
28231
28292
  );
28232
- useEffect45(() => {
28293
+ useEffect46(() => {
28233
28294
  setNodes(initialNodes);
28234
28295
  setEdges(initialEdges);
28235
28296
  }, [initialNodes, initialEdges, setNodes, setEdges]);
28236
- useEffect45(() => {
28297
+ useEffect46(() => {
28237
28298
  if (selectedNodeId) {
28238
28299
  setNodes(
28239
28300
  (nds) => nds.map((n) => ({
@@ -28459,13 +28520,13 @@ var RunDetail = ({ run, agentName, open, onClose, onRunUpdate, autoRefresh, onAu
28459
28520
  setGraphLoading(false);
28460
28521
  }
28461
28522
  }, [get, run.assistantId]);
28462
- useEffect45(() => {
28523
+ useEffect46(() => {
28463
28524
  if (!open) return;
28464
28525
  setLoading(true);
28465
28526
  fetchSteps().finally(() => setLoading(false));
28466
28527
  fetchGraphDefinition();
28467
28528
  }, [open, run.id, fetchSteps, fetchGraphDefinition]);
28468
- useEffect45(() => {
28529
+ useEffect46(() => {
28469
28530
  if (stepsPollTimeoutRef.current) {
28470
28531
  clearTimeout(stepsPollTimeoutRef.current);
28471
28532
  stepsPollTimeoutRef.current = null;
@@ -28494,7 +28555,7 @@ var RunDetail = ({ run, agentName, open, onClose, onRunUpdate, autoRefresh, onAu
28494
28555
  {
28495
28556
  title: /* @__PURE__ */ jsxs77(Space39, { children: [
28496
28557
  /* @__PURE__ */ jsx108(Text40, { strong: true, children: "Pipeline Execution" }),
28497
- /* @__PURE__ */ jsx108(Tag23, { color: "purple", style: { fontSize: 11 }, children: "Flow View" }),
28558
+ /* @__PURE__ */ jsx108(Tag24, { color: "purple", style: { fontSize: 11 }, children: "Flow View" }),
28498
28559
  /* @__PURE__ */ jsxs77(Space39, { size: 4, style: { marginLeft: 12 }, children: [
28499
28560
  /* @__PURE__ */ jsx108(Text40, { type: "secondary", style: { fontSize: 11 }, children: "Auto-refresh" }),
28500
28561
  /* @__PURE__ */ jsx108(Switch3, { size: "small", checked: autoRefresh, onChange: onAutoRefreshChange })
@@ -28546,8 +28607,8 @@ var TopologyRuntimeView = () => {
28546
28607
  setRuns((prev) => prev.filter((r) => r.id !== runId));
28547
28608
  setSelectedRun((prev) => prev?.id === runId ? null : prev);
28548
28609
  } catch (err) {
28549
- const message29 = err instanceof Error ? err.message : "Failed to delete run";
28550
- setError(message29);
28610
+ const message28 = err instanceof Error ? err.message : "Failed to delete run";
28611
+ setError(message28);
28551
28612
  }
28552
28613
  }, [del]);
28553
28614
  const refreshRuns = useCallback37(async () => {
@@ -28579,7 +28640,7 @@ var TopologyRuntimeView = () => {
28579
28640
  setLoading(false);
28580
28641
  }
28581
28642
  }, [get]);
28582
- useEffect45(() => {
28643
+ useEffect46(() => {
28583
28644
  let cancelled = false;
28584
28645
  const init2 = async () => {
28585
28646
  try {
@@ -28615,7 +28676,7 @@ var TopologyRuntimeView = () => {
28615
28676
  cancelled = true;
28616
28677
  };
28617
28678
  }, [get]);
28618
- useEffect45(() => {
28679
+ useEffect46(() => {
28619
28680
  return () => {
28620
28681
  pollingSessionRef.current = 0;
28621
28682
  };
@@ -28631,7 +28692,7 @@ var TopologyRuntimeView = () => {
28631
28692
  }
28632
28693
  return /* @__PURE__ */ jsxs77("div", { style: { padding: 16, overflow: "auto", height: "100%" }, children: [
28633
28694
  /* @__PURE__ */ jsxs77("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: 16 }, children: [
28634
- /* @__PURE__ */ jsx108(Title13, { level: 5, style: { marginBottom: 0 }, children: "Workflow Runs" }),
28695
+ /* @__PURE__ */ jsx108(Title14, { level: 5, style: { marginBottom: 0 }, children: "Workflow Runs" }),
28635
28696
  /* @__PURE__ */ jsx108(Tooltip23, { title: "Refresh now", children: /* @__PURE__ */ jsx108(
28636
28697
  ReloadOutlined4,
28637
28698
  {
@@ -28641,7 +28702,7 @@ var TopologyRuntimeView = () => {
28641
28702
  ) })
28642
28703
  ] }),
28643
28704
  /* @__PURE__ */ jsx108(
28644
- List15,
28705
+ List16,
28645
28706
  {
28646
28707
  dataSource: runs,
28647
28708
  renderItem: (run) => /* @__PURE__ */ jsx108("div", { style: { marginBottom: 8 }, children: /* @__PURE__ */ jsx108(
@@ -28651,7 +28712,7 @@ var TopologyRuntimeView = () => {
28651
28712
  agentName: agentNames[run.assistantId] || run.assistantId,
28652
28713
  onClick: () => setSelectedRun(run),
28653
28714
  extra: /* @__PURE__ */ jsx108(
28654
- Popconfirm5,
28715
+ Popconfirm6,
28655
28716
  {
28656
28717
  title: "Delete run",
28657
28718
  description: "Delete this workflow run and all its step records?",
@@ -28688,11 +28749,11 @@ var TopologyRuntimeView = () => {
28688
28749
  };
28689
28750
 
28690
28751
  // src/components/Chat/TopologyInboxView.tsx
28691
- import { useEffect as useEffect46, useState as useState71 } from "react";
28692
- import { Card as Card23, Typography as Typography52, Spin as Spin17, Empty as Empty15, List as List16, Button as Button50, Space as Space40, Tag as Tag24 } from "antd";
28752
+ import { useEffect as useEffect47, useState as useState71 } from "react";
28753
+ import { Card as Card23, Typography as Typography52, Spin as Spin17, Empty as Empty15, List as List17, Button as Button50, Space as Space40, Tag as Tag25 } from "antd";
28693
28754
  import { InboxOutlined, ReloadOutlined as ReloadOutlined5 } from "@ant-design/icons";
28694
28755
  import { jsx as jsx109, jsxs as jsxs78 } from "react/jsx-runtime";
28695
- var { Text: Text41, Title: Title14 } = Typography52;
28756
+ var { Text: Text41, Title: Title15 } = Typography52;
28696
28757
  var TopologyInboxView = () => {
28697
28758
  const { get } = useApi();
28698
28759
  const [items, setItems] = useState71([]);
@@ -28723,7 +28784,7 @@ var TopologyInboxView = () => {
28723
28784
  setLoading(false);
28724
28785
  }
28725
28786
  };
28726
- useEffect46(() => {
28787
+ useEffect47(() => {
28727
28788
  fetchInbox();
28728
28789
  }, [get]);
28729
28790
  return /* @__PURE__ */ jsxs78("div", { style: { height: "100%", display: "flex", flexDirection: "column" }, children: [
@@ -28738,7 +28799,7 @@ var TopologyInboxView = () => {
28738
28799
  },
28739
28800
  children: [
28740
28801
  /* @__PURE__ */ jsxs78("div", { children: [
28741
- /* @__PURE__ */ jsxs78(Title14, { level: 4, style: { margin: 0 }, children: [
28802
+ /* @__PURE__ */ jsxs78(Title15, { level: 4, style: { margin: 0 }, children: [
28742
28803
  /* @__PURE__ */ jsx109(InboxOutlined, { style: { marginRight: 8 } }),
28743
28804
  "User Inbox"
28744
28805
  ] }),
@@ -28769,7 +28830,7 @@ var TopologyInboxView = () => {
28769
28830
  children: /* @__PURE__ */ jsx109(Spin17, { size: "large" })
28770
28831
  }
28771
28832
  ) : items.length === 0 ? /* @__PURE__ */ jsx109(Empty15, { description: "Inbox is empty" }) : /* @__PURE__ */ jsx109(
28772
- List16,
28833
+ List17,
28773
28834
  {
28774
28835
  dataSource: items,
28775
28836
  renderItem: (item) => /* @__PURE__ */ jsxs78(
@@ -28783,7 +28844,7 @@ var TopologyInboxView = () => {
28783
28844
  {
28784
28845
  style: { marginBottom: 8, display: "flex", justifyContent: "space-between" },
28785
28846
  children: /* @__PURE__ */ jsxs78(Space40, { size: 4, children: [
28786
- /* @__PURE__ */ jsx109(Tag24, { color: "blue", children: item.assistantName }),
28847
+ /* @__PURE__ */ jsx109(Tag25, { color: "blue", children: item.assistantName }),
28787
28848
  /* @__PURE__ */ jsx109(Text41, { type: "secondary", style: { fontSize: 11 }, children: new Date(item.startedAt).toLocaleString() })
28788
28849
  ] })
28789
28850
  }
@@ -28806,14 +28867,14 @@ var TopologyInboxView = () => {
28806
28867
  };
28807
28868
 
28808
28869
  // src/components/Chat/WorkflowAutomationView.tsx
28809
- import { useEffect as useEffect48, useState as useState72, useCallback as useCallback38, useMemo as useMemo30, useRef as useRef26 } from "react";
28870
+ import { useEffect as useEffect49, useState as useState72, useCallback as useCallback38, useMemo as useMemo30, useRef as useRef26 } from "react";
28810
28871
  import {
28811
28872
  ReactFlowProvider as ReactFlowProvider6
28812
28873
  } from "@xyflow/react";
28813
28874
  import "@xyflow/react/dist/style.css";
28814
- import { Spin as Spin18, Empty as Empty16, Card as Card24, Typography as Typography55, Button as Button52, Input as Input15, Modal as Modal18, Popconfirm as Popconfirm6 } from "antd";
28875
+ import { Spin as Spin18, Empty as Empty16, Card as Card24, Typography as Typography55, Button as Button52, Input as Input15, Modal as Modal18, Popconfirm as Popconfirm7 } from "antd";
28815
28876
  import {
28816
- PlusOutlined as PlusOutlined8,
28877
+ PlusOutlined as PlusOutlined9,
28817
28878
  DeleteOutlined as DeleteOutlined4,
28818
28879
  InfoCircleOutlined as InfoCircleOutlined6,
28819
28880
  MenuOutlined,
@@ -28949,7 +29010,7 @@ var CopilotPanel = ({
28949
29010
  };
28950
29011
 
28951
29012
  // src/components/Chat/CreateWorkflowModal.tsx
28952
- import { useEffect as useEffect47 } from "react";
29013
+ import { useEffect as useEffect48 } from "react";
28953
29014
  import { Modal as Modal17, Form as Form7, Input as Input14 } from "antd";
28954
29015
  import { jsx as jsx111 } from "react/jsx-runtime";
28955
29016
  function extractName(purpose) {
@@ -28975,7 +29036,7 @@ var CreateWorkflowModal = ({
28975
29036
  }) => {
28976
29037
  const { post } = useApi();
28977
29038
  const [form] = Form7.useForm();
28978
- useEffect47(() => {
29039
+ useEffect48(() => {
28979
29040
  if (open) {
28980
29041
  form.resetFields();
28981
29042
  }
@@ -29539,7 +29600,7 @@ function WorkflowFlowInner({
29539
29600
  (w) => w.name.toLowerCase().includes(q) || w.description.toLowerCase().includes(q)
29540
29601
  );
29541
29602
  }, [workflows, search]);
29542
- useEffect48(() => {
29603
+ useEffect49(() => {
29543
29604
  if (selectedId) {
29544
29605
  setListOpen(false);
29545
29606
  } else {
@@ -29618,7 +29679,7 @@ function WorkflowFlowInner({
29618
29679
  boxShadow: "0 2px 12px rgba(0,0,0,0.08)",
29619
29680
  border: "1px solid #f0f0f0"
29620
29681
  }, children: /* @__PURE__ */ jsx113(
29621
- Popconfirm6,
29682
+ Popconfirm7,
29622
29683
  {
29623
29684
  title: "Delete workflow",
29624
29685
  description: "This will permanently delete this workflow agent.",
@@ -29665,7 +29726,7 @@ function WorkflowFlowInner({
29665
29726
  {
29666
29727
  type: "text",
29667
29728
  size: "small",
29668
- icon: /* @__PURE__ */ jsx113(PlusOutlined8, {}),
29729
+ icon: /* @__PURE__ */ jsx113(PlusOutlined9, {}),
29669
29730
  onClick: onCreate,
29670
29731
  style: { color: "#6366f1" }
29671
29732
  }
@@ -29887,7 +29948,7 @@ var WorkflowAutomationView = () => {
29887
29948
  setGraphDef(null);
29888
29949
  }
29889
29950
  }, [get]);
29890
- useEffect48(() => {
29951
+ useEffect49(() => {
29891
29952
  let cancelled = false;
29892
29953
  const load2 = async () => {
29893
29954
  try {
@@ -29906,7 +29967,7 @@ var WorkflowAutomationView = () => {
29906
29967
  cancelled = true;
29907
29968
  };
29908
29969
  }, [fetchWorkflows]);
29909
- useEffect48(() => {
29970
+ useEffect49(() => {
29910
29971
  if (selectedId) {
29911
29972
  fetchDSL(selectedId);
29912
29973
  } else {
@@ -29917,7 +29978,7 @@ var WorkflowAutomationView = () => {
29917
29978
  e.preventDefault();
29918
29979
  resizingRef.current = { startX: e.clientX, startWidth: copilotWidth };
29919
29980
  }, [copilotWidth]);
29920
- useEffect48(() => {
29981
+ useEffect49(() => {
29921
29982
  const handleMouseMove = (e) => {
29922
29983
  if (!resizingRef.current) return;
29923
29984
  const delta = resizingRef.current.startX - e.clientX;
@@ -30014,7 +30075,7 @@ var WorkflowAutomationView = () => {
30014
30075
  Button52,
30015
30076
  {
30016
30077
  type: "primary",
30017
- icon: /* @__PURE__ */ jsx113(PlusOutlined8, {}),
30078
+ icon: /* @__PURE__ */ jsx113(PlusOutlined9, {}),
30018
30079
  onClick: () => setCreateModalOpen(true),
30019
30080
  children: "Create Workflow"
30020
30081
  }
@@ -30126,12 +30187,12 @@ var WorkflowAutomationView = () => {
30126
30187
  // src/components/Eval/EvalPanel.tsx
30127
30188
  import React66, { useState as useState75, useMemo as useMemo31 } from "react";
30128
30189
  import { createStyles as createStyles34 } from "antd-style";
30129
- import { Button as Button55, Card as Card28, Typography as Typography59, Row as Row4, Col as Col4, Tag as Tag28, theme as theme15, Dropdown as Dropdown2, Popconfirm as Popconfirm10, message as message18 } from "antd";
30190
+ import { Button as Button55, Card as Card28, Typography as Typography59, Row as Row4, Col as Col4, Tag as Tag29, theme as theme15, Dropdown as Dropdown2, Popconfirm as Popconfirm11, message as message18 } from "antd";
30130
30191
  import { Play as Play2, FlaskConical as FlaskConical2, TestTube2 as TestTube26, TrendingUp, CheckCircle as CheckCircle4, XCircle as XCircle3, ArrowRight as ArrowRight3, ChevronDown as ChevronDown5, Trash2 as Trash27, Clock as Clock5 } from "lucide-react";
30131
30192
 
30132
30193
  // src/components/Eval/EvalSuiteCardList.tsx
30133
30194
  import { createStyles as createStyles31 } from "antd-style";
30134
- import { Card as Card25, Typography as Typography56, Row as Row3, Col as Col3, Empty as Empty17, Popconfirm as Popconfirm7, Spin as Spin19 } from "antd";
30195
+ import { Card as Card25, Typography as Typography56, Row as Row3, Col as Col3, Empty as Empty17, Popconfirm as Popconfirm8, Spin as Spin19 } from "antd";
30135
30196
  import { Trash2 as Trash24, TestTube2 as TestTube24 } from "lucide-react";
30136
30197
  import { jsx as jsx114, jsxs as jsxs82 } from "react/jsx-runtime";
30137
30198
  var { Text: Text45 } = Typography56;
@@ -30216,7 +30277,7 @@ var EvalSuiteCardList = ({ projectId, onSelectSuite }) => {
30216
30277
  /* @__PURE__ */ jsx114("div", { className: styles.subtitle, children: "Server-side agent testing" })
30217
30278
  ] }),
30218
30279
  /* @__PURE__ */ jsx114(
30219
- Popconfirm7,
30280
+ Popconfirm8,
30220
30281
  {
30221
30282
  title: "Delete this suite?",
30222
30283
  onConfirm: (e) => {
@@ -30243,7 +30304,7 @@ var EvalSuiteCardList = ({ projectId, onSelectSuite }) => {
30243
30304
  // src/components/Eval/EvalSuiteDetail.tsx
30244
30305
  import { useState as useState73 } from "react";
30245
30306
  import { createStyles as createStyles32 } from "antd-style";
30246
- import { Button as Button53, Card as Card26, Typography as Typography57, Modal as Modal19, Form as Form8, Input as Input16, Select as Select8, Table as Table3, Popconfirm as Popconfirm8, Empty as Empty18 } from "antd";
30307
+ import { Button as Button53, Card as Card26, Typography as Typography57, Modal as Modal19, Form as Form8, Input as Input16, Select as Select8, Table as Table3, Popconfirm as Popconfirm9, Empty as Empty18 } from "antd";
30247
30308
  import { Play, Plus as Plus6, Trash2 as Trash25, Bot as Bot3, MessageSquare as MessageSquare3, FlaskConical } from "lucide-react";
30248
30309
  import { jsx as jsx115, jsxs as jsxs83 } from "react/jsx-runtime";
30249
30310
  var { Text: Text46 } = Typography57;
@@ -30403,7 +30464,7 @@ var EvalSuiteDetail = ({ projectId, suiteId, onBack, onRun }) => {
30403
30464
  title: "",
30404
30465
  key: "actions",
30405
30466
  width: 40,
30406
- render: (_, c) => /* @__PURE__ */ jsx115(Popconfirm8, { title: "Delete?", onConfirm: () => removeCase(projectId, suiteId, c.id), children: /* @__PURE__ */ jsx115(Button53, { type: "text", danger: true, size: "small", icon: /* @__PURE__ */ jsx115(Trash25, { size: 14 }) }) })
30467
+ render: (_, c) => /* @__PURE__ */ jsx115(Popconfirm9, { title: "Delete?", onConfirm: () => removeCase(projectId, suiteId, c.id), children: /* @__PURE__ */ jsx115(Button53, { type: "text", danger: true, size: "small", icon: /* @__PURE__ */ jsx115(Trash25, { size: 14 }) }) })
30407
30468
  }
30408
30469
  ];
30409
30470
  return /* @__PURE__ */ jsxs83("div", { className: styles.shell, children: [
@@ -30480,9 +30541,9 @@ var EvalSuiteDetail = ({ projectId, suiteId, onBack, onRun }) => {
30480
30541
  };
30481
30542
 
30482
30543
  // src/components/Eval/EvalRunResults.tsx
30483
- import { useEffect as useEffect49, useState as useState74 } from "react";
30544
+ import { useEffect as useEffect50, useState as useState74 } from "react";
30484
30545
  import { createStyles as createStyles33 } from "antd-style";
30485
- import { Button as Button54, Card as Card27, Typography as Typography58, Progress as Progress3, Tag as Tag27, Table as Table4, Empty as Empty19, Popconfirm as Popconfirm9, message as message17 } from "antd";
30546
+ import { Button as Button54, Card as Card27, Typography as Typography58, Progress as Progress3, Tag as Tag28, Table as Table4, Empty as Empty19, Popconfirm as Popconfirm10, message as message17 } from "antd";
30486
30547
  import { CheckCircle as CheckCircle3, XCircle as XCircle2, Trash2 as Trash26 } from "lucide-react";
30487
30548
  import { jsx as jsx116, jsxs as jsxs84 } from "react/jsx-runtime";
30488
30549
  var { Text: Text47 } = Typography58;
@@ -30571,7 +30632,7 @@ var EvalRunResults = ({ runId, onBack }) => {
30571
30632
  const client = useClient("__GLOBAL__");
30572
30633
  const [run, setRun] = useState74(null);
30573
30634
  const { status: streamingStatus, progress, connected } = useEvalRunStream(runId);
30574
- useEffect49(() => {
30635
+ useEffect50(() => {
30575
30636
  client.eval.runs.get(runId).then(setRun).catch(console.error);
30576
30637
  }, [runId, client]);
30577
30638
  if (!run) {
@@ -30588,10 +30649,10 @@ var EvalRunResults = ({ runId, onBack }) => {
30588
30649
  /* @__PURE__ */ jsxs84("div", { className: styles.topLeft, children: [
30589
30650
  /* @__PURE__ */ jsx116("button", { className: styles.breadcrumb, onClick: onBack, children: "\u2190 Back" }),
30590
30651
  /* @__PURE__ */ jsx116("span", { className: styles.pageTitle, children: "Run Results" }),
30591
- /* @__PURE__ */ jsx116(Tag27, { color: run.status === "completed" ? "success" : run.status === "running" ? "processing" : run.status === "failed" ? "error" : "warning", children: run.status })
30652
+ /* @__PURE__ */ jsx116(Tag28, { color: run.status === "completed" ? "success" : run.status === "running" ? "processing" : run.status === "failed" ? "error" : "warning", children: run.status })
30592
30653
  ] }),
30593
30654
  /* @__PURE__ */ jsx116(
30594
- Popconfirm9,
30655
+ Popconfirm10,
30595
30656
  {
30596
30657
  title: "Delete this run?",
30597
30658
  description: "Run results will be permanently deleted.",
@@ -30731,7 +30792,7 @@ var EvalRunResults = ({ runId, onBack }) => {
30731
30792
  align: "center",
30732
30793
  render: (_, r) => {
30733
30794
  const n = r.dimensionResults?.length || 0;
30734
- return n > 0 ? /* @__PURE__ */ jsx116(Tag27, { children: n }) : /* @__PURE__ */ jsx116(Text47, { type: "secondary", children: "\u2014" });
30795
+ return n > 0 ? /* @__PURE__ */ jsx116(Tag28, { children: n }) : /* @__PURE__ */ jsx116(Text47, { type: "secondary", children: "\u2014" });
30735
30796
  }
30736
30797
  },
30737
30798
  {
@@ -30740,7 +30801,7 @@ var EvalRunResults = ({ runId, onBack }) => {
30740
30801
  key: "score",
30741
30802
  width: 80,
30742
30803
  align: "center",
30743
- render: (s) => /* @__PURE__ */ jsx116(Tag27, { color: s >= 80 ? "success" : "error", children: typeof s === "number" ? s.toFixed(1) : "\u2014" })
30804
+ render: (s) => /* @__PURE__ */ jsx116(Tag28, { color: s >= 80 ? "success" : "error", children: typeof s === "number" ? s.toFixed(1) : "\u2014" })
30744
30805
  }
30745
30806
  ]
30746
30807
  }
@@ -30751,7 +30812,7 @@ var EvalRunResults = ({ runId, onBack }) => {
30751
30812
 
30752
30813
  // src/components/Eval/EvalPanel.tsx
30753
30814
  import { jsx as jsx117, jsxs as jsxs85 } from "react/jsx-runtime";
30754
- var { Text: Text48, Title: Title15, Paragraph: Paragraph3 } = Typography59;
30815
+ var { Text: Text48, Title: Title16, Paragraph: Paragraph3 } = Typography59;
30755
30816
  var useStyle16 = createStyles34(({ token, css }) => ({
30756
30817
  shell: css`
30757
30818
  display: flex;
@@ -31071,17 +31132,17 @@ var EvalPanel = () => {
31071
31132
  /* @__PURE__ */ jsx117(Text48, { type: "danger", children: r.failedCases }),
31072
31133
  /* @__PURE__ */ jsx117(Text48, { type: "secondary", children: " failed" })
31073
31134
  ] }),
31074
- passRate !== null && /* @__PURE__ */ jsxs85(Tag28, { color: passRate >= 80 ? "success" : passRate >= 50 ? "warning" : "error", children: [
31135
+ passRate !== null && /* @__PURE__ */ jsxs85(Tag29, { color: passRate >= 80 ? "success" : passRate >= 50 ? "warning" : "error", children: [
31075
31136
  passRate,
31076
31137
  "%"
31077
31138
  ] })
31078
31139
  ] }),
31079
31140
  /* @__PURE__ */ jsxs85("div", { className: styles.runRowRight, style: { gap: 16 }, children: [
31080
31141
  durationMs !== null && /* @__PURE__ */ jsx117(Text48, { type: "secondary", style: { fontSize: 12 }, children: fmtDuration(durationMs) }),
31081
- /* @__PURE__ */ jsx117(Tag28, { color: meta.color, style: { margin: 0 }, children: meta.label }),
31142
+ /* @__PURE__ */ jsx117(Tag29, { color: meta.color, style: { margin: 0 }, children: meta.label }),
31082
31143
  /* @__PURE__ */ jsx117(Text48, { strong: true, style: { fontSize: 15, minWidth: 40, textAlign: "right" }, children: typeof r.avgScore === "number" ? r.avgScore.toFixed(1) : "\u2014" }),
31083
31144
  /* @__PURE__ */ jsx117(
31084
- Popconfirm10,
31145
+ Popconfirm11,
31085
31146
  {
31086
31147
  title: "Delete this run?",
31087
31148
  description: "Run results will be permanently deleted.",
@@ -31182,10 +31243,10 @@ var EvalPanel = () => {
31182
31243
  };
31183
31244
 
31184
31245
  // src/components/Chat/PersonalAssistantPage.tsx
31185
- import { useEffect as useEffect51, useState as useState77, useCallback as useCallback40, useRef as useRef28 } from "react";
31246
+ import { useEffect as useEffect52, useState as useState77, useCallback as useCallback40, useRef as useRef28 } from "react";
31186
31247
  import { Card as Card29, Button as Button57, Input as Input18, Typography as Typography61, message as message20, Dropdown as Dropdown3, Modal as Modal21 } from "antd";
31187
31248
  import { createStyles as createStyles36 } from "antd-style";
31188
- import { Bot as Bot4, Sparkles as Sparkles3, ArrowRight as ArrowRight4, ArrowLeft as ArrowLeft3, Smile, Zap, Heart, Lightbulb, Edit3, MoreHorizontal, Link2 as Link23, Trash2 as Trash29 } from "lucide-react";
31249
+ import { Bot as Bot4, Sparkles as Sparkles3, ArrowRight as ArrowRight4, ArrowLeft as ArrowLeft3, Smile, Zap, Heart, Lightbulb, Edit3, MoreHorizontal, MessagesSquare as MessagesSquare2, Trash2 as Trash29 } from "lucide-react";
31189
31250
  import { Client as Client2 } from "@axiom-lattice/client-sdk";
31190
31251
 
31191
31252
  // src/components/Chat/LatticeAgentWorkspace.tsx
@@ -31198,13 +31259,13 @@ var LatticeAgentWorkspace = ({
31198
31259
  }) => /* @__PURE__ */ jsx118(WorkspaceContextProvider, { workspaceId, projectId, children: /* @__PURE__ */ jsx118(AssistantContextProvider, { autoLoad: true, initialAssistantId: assistant_id, children: /* @__PURE__ */ jsx118(LatticeChat, { showProjectSelector: false, assistant_id, ...chatProps }) }) });
31199
31260
 
31200
31261
  // src/components/Chat/PersonalAssistantChannelModal.tsx
31201
- import { useEffect as useEffect50, useState as useState76, useCallback as useCallback39, useMemo as useMemo32, useRef as useRef27 } from "react";
31262
+ import { useEffect as useEffect51, useState as useState76, useCallback as useCallback39, useMemo as useMemo32, useRef as useRef27 } from "react";
31202
31263
  import {
31203
31264
  Button as Button56,
31204
31265
  Form as Form9,
31205
31266
  Input as Input17,
31206
31267
  Modal as Modal20,
31207
- Popconfirm as Popconfirm11,
31268
+ Popconfirm as Popconfirm12,
31208
31269
  Spin as Spin20,
31209
31270
  Switch as Switch4,
31210
31271
  Typography as Typography60,
@@ -31213,7 +31274,7 @@ import {
31213
31274
  QRCode
31214
31275
  } from "antd";
31215
31276
  import { createStyles as createStyles35 } from "antd-style";
31216
- import { Trash2 as Trash28, X as X2, Link2 as Link22, User as User6, UserPlus } from "lucide-react";
31277
+ import { Trash2 as Trash28, X as X2, MessagesSquare, User as User6, UserPlus } from "lucide-react";
31217
31278
  import { Fragment as Fragment23, jsx as jsx119, jsxs as jsxs86 } from "react/jsx-runtime";
31218
31279
  var { Text: Text49 } = Typography60;
31219
31280
  var AVATAR_COLORS = [
@@ -31525,7 +31586,7 @@ var PersonalAssistantChannelModal = ({
31525
31586
  message19.error("Failed to check QR status");
31526
31587
  }
31527
31588
  }, [get, clearQrCountdown, form]);
31528
- useEffect50(() => {
31589
+ useEffect51(() => {
31529
31590
  return () => {
31530
31591
  if (qrCountdownRef.current) clearInterval(qrCountdownRef.current);
31531
31592
  };
@@ -31561,7 +31622,7 @@ var PersonalAssistantChannelModal = ({
31561
31622
  setBindingsLoading(false);
31562
31623
  }
31563
31624
  }, [get]);
31564
- useEffect50(() => {
31625
+ useEffect51(() => {
31565
31626
  if (open) {
31566
31627
  loadInstallations();
31567
31628
  resetState();
@@ -31823,7 +31884,7 @@ var PersonalAssistantChannelModal = ({
31823
31884
  Button56,
31824
31885
  {
31825
31886
  block: true,
31826
- icon: /* @__PURE__ */ jsx119(Link22, { size: 14 }),
31887
+ icon: /* @__PURE__ */ jsx119(MessagesSquare, { size: 14 }),
31827
31888
  onClick: openCreateForm,
31828
31889
  children: "Connect"
31829
31890
  }
@@ -31832,7 +31893,7 @@ var PersonalAssistantChannelModal = ({
31832
31893
  const renderRightContent = () => {
31833
31894
  if (formMode === "view" && !selectedId) {
31834
31895
  return /* @__PURE__ */ jsxs86("div", { className: styles.emptyState, children: [
31835
- /* @__PURE__ */ jsx119(Link22, { size: 40, style: { opacity: 0.25, marginBottom: 16 } }),
31896
+ /* @__PURE__ */ jsx119(MessagesSquare, { size: 40, style: { opacity: 0.25, marginBottom: 16 } }),
31836
31897
  /* @__PURE__ */ jsx119(Text49, { style: { fontSize: 14, color: "var(--color-text-secondary, #666)" }, children: "Select a channel from the left or add a new one" })
31837
31898
  ] });
31838
31899
  }
@@ -31894,7 +31955,7 @@ var PersonalAssistantChannelModal = ({
31894
31955
  Button56,
31895
31956
  {
31896
31957
  type: "primary",
31897
- icon: /* @__PURE__ */ jsx119(Link22, { size: 14 }),
31958
+ icon: /* @__PURE__ */ jsx119(MessagesSquare, { size: 14 }),
31898
31959
  loading: qrLoading,
31899
31960
  onClick: fetchQrCode,
31900
31961
  children: "Get QR Code"
@@ -32083,7 +32144,7 @@ var PersonalAssistantChannelModal = ({
32083
32144
  const isEdit = formMode === "edit" && selectedId !== null;
32084
32145
  return /* @__PURE__ */ jsxs86("div", { className: styles.footer, children: [
32085
32146
  /* @__PURE__ */ jsx119("div", { children: isEdit && /* @__PURE__ */ jsx119(
32086
- Popconfirm11,
32147
+ Popconfirm12,
32087
32148
  {
32088
32149
  title: "Remove this channel?",
32089
32150
  description: "All bindings for this installation will also be lost.",
@@ -32104,7 +32165,7 @@ var PersonalAssistantChannelModal = ({
32104
32165
  Modal20,
32105
32166
  {
32106
32167
  title: /* @__PURE__ */ jsxs86("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
32107
- /* @__PURE__ */ jsx119(Link22, { size: 18 }),
32168
+ /* @__PURE__ */ jsx119(MessagesSquare, { size: 18 }),
32108
32169
  /* @__PURE__ */ jsx119("span", { children: "Connect Channels" })
32109
32170
  ] }),
32110
32171
  open,
@@ -32125,7 +32186,7 @@ var PersonalAssistantChannelModal = ({
32125
32186
 
32126
32187
  // src/components/Chat/PersonalAssistantPage.tsx
32127
32188
  import { Fragment as Fragment24, jsx as jsx120, jsxs as jsxs87 } from "react/jsx-runtime";
32128
- var { Title: Title16, Text: Text50, Paragraph: Paragraph4 } = Typography61;
32189
+ var { Title: Title17, Text: Text50, Paragraph: Paragraph4 } = Typography61;
32129
32190
  var useStyles20 = createStyles36(({ css, token }) => ({
32130
32191
  container: css` display: flex; flex-direction: column; height: 100%; padding: 24px; overflow-y: auto; `,
32131
32192
  setupWrap: css` max-width: 520px; margin: 30px auto 0; `,
@@ -32228,7 +32289,7 @@ var PersonalAssistantPage = () => {
32228
32289
  return created.data.id;
32229
32290
  }, [get, post, workspaceId, projectId]);
32230
32291
  const lastDate = useRef28("");
32231
- useEffect51(() => {
32292
+ useEffect52(() => {
32232
32293
  if (!assistantId) return;
32233
32294
  let timer;
32234
32295
  const enter = () => {
@@ -32310,7 +32371,7 @@ var PersonalAssistantPage = () => {
32310
32371
  HeaderIconButton,
32311
32372
  {
32312
32373
  ariaLabel: "Channel settings",
32313
- icon: /* @__PURE__ */ jsx120(Link23, { size: 16 }),
32374
+ icon: /* @__PURE__ */ jsx120(MessagesSquare2, { size: 16 }),
32314
32375
  onClick: () => setChannelModalOpen(true)
32315
32376
  }
32316
32377
  ),
@@ -32335,7 +32396,7 @@ var PersonalAssistantPage = () => {
32335
32396
  /* @__PURE__ */ jsx120("div", { className: styles.stepIndicator, children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx120("div", { className: `${styles.stepDot} ${i === step ? styles.stepDotActive : i < step ? styles.stepDotDone : styles.stepDotPending}` }, i)) }),
32336
32397
  step === 0 && /* @__PURE__ */ jsxs87(Card29, { className: styles.card, children: [
32337
32398
  /* @__PURE__ */ jsx120("div", { className: styles.avatar, children: /* @__PURE__ */ jsx120(Sparkles3, { size: 26 }) }),
32338
- /* @__PURE__ */ jsx120(Title16, { level: 3, style: { textAlign: "center", margin: "0 0 4px" }, children: "What would you like to call them?" }),
32399
+ /* @__PURE__ */ jsx120(Title17, { level: 3, style: { textAlign: "center", margin: "0 0 4px" }, children: "What would you like to call them?" }),
32339
32400
  /* @__PURE__ */ jsx120(Paragraph4, { type: "secondary", style: { textAlign: "center", margin: "0 0 24px" }, children: "This is the name you'll use every day \u2014 your go-to nickname for your AI sidekick." }),
32340
32401
  /* @__PURE__ */ jsx120(
32341
32402
  Input18,
@@ -32353,7 +32414,7 @@ var PersonalAssistantPage = () => {
32353
32414
  ] }),
32354
32415
  step === 1 && /* @__PURE__ */ jsxs87(Card29, { className: styles.card, children: [
32355
32416
  /* @__PURE__ */ jsx120("div", { className: styles.avatar, children: /* @__PURE__ */ jsx120(Smile, { size: 26 }) }),
32356
- /* @__PURE__ */ jsx120(Title16, { level: 3, style: { textAlign: "center", margin: "0 0 4px" }, children: "What's their vibe?" }),
32417
+ /* @__PURE__ */ jsx120(Title17, { level: 3, style: { textAlign: "center", margin: "0 0 4px" }, children: "What's their vibe?" }),
32357
32418
  /* @__PURE__ */ jsx120(Paragraph4, { type: "secondary", style: { textAlign: "center", margin: "0 0 20px" }, children: "Pick the personality that feels right. This shapes how they talk and support you." }),
32358
32419
  /* @__PURE__ */ jsx120("div", { className: styles.personalityGrid, children: PERSONALITIES.map((p) => /* @__PURE__ */ jsxs87(
32359
32420
  "div",
@@ -32391,7 +32452,7 @@ var PersonalAssistantPage = () => {
32391
32452
  ] }),
32392
32453
  step === 2 && /* @__PURE__ */ jsxs87(Card29, { className: styles.card, children: [
32393
32454
  /* @__PURE__ */ jsx120("div", { className: styles.avatar, children: /* @__PURE__ */ jsx120(Bot4, { size: 26 }) }),
32394
- /* @__PURE__ */ jsx120(Title16, { level: 3, style: { textAlign: "center", margin: "0 0 4px" }, children: "Almost ready!" }),
32455
+ /* @__PURE__ */ jsx120(Title17, { level: 3, style: { textAlign: "center", margin: "0 0 4px" }, children: "Almost ready!" }),
32395
32456
  /* @__PURE__ */ jsx120(Paragraph4, { type: "secondary", style: { textAlign: "center", margin: "0 0 24px" }, children: "Your assistant will have private memory and learn about you over time." }),
32396
32457
  /* @__PURE__ */ jsxs87(Card29, { size: "small", style: { background: "#fafafa", borderRadius: 12, marginBottom: 20 }, children: [
32397
32458
  /* @__PURE__ */ jsx120(Text50, { type: "secondary", style: { fontSize: 12, textTransform: "uppercase", letterSpacing: 1 }, children: "Name" }),
@@ -32500,7 +32561,7 @@ var FileView = ({ parsed }) => {
32500
32561
  const baseURL = shellConfig?.baseURL ?? "";
32501
32562
  const resourcePath = decodeURIComponent(parsed.payload);
32502
32563
  const params = new URLSearchParams({
32503
- path: `/${resourcePath}`
32564
+ path: resourcePath.startsWith("/") ? resourcePath : `/${resourcePath}`
32504
32565
  });
32505
32566
  if (parsed.assistantId) params.set("assistantId", parsed.assistantId);
32506
32567
  const url = `${baseURL}/api/workspaces/${parsed.workspaceId}/projects/${parsed.projectId}/viewfile?${params}`;
@@ -32568,15 +32629,14 @@ var CustomMenuPage = ({ component_key }) => {
32568
32629
  };
32569
32630
 
32570
32631
  // src/components/Chat/SharesPage.tsx
32571
- import { useEffect as useEffect52, useState as useState78 } from "react";
32572
- import { Table as Table5, Button as Button58, Dropdown as Dropdown4, message as message21, Modal as Modal22, Tag as Tag29, Typography as Typography62 } from "antd";
32573
- import { CopyOutlined as CopyOutlined4, StopOutlined as StopOutlined2, EditOutlined, MoreOutlined as MoreOutlined3 } from "@ant-design/icons";
32632
+ import { useEffect as useEffect53, useState as useState78 } from "react";
32633
+ import { Table as Table5, Button as Button58, Dropdown as Dropdown4, message as message21, Modal as Modal22, Tag as Tag30, Typography as Typography62 } from "antd";
32634
+ import { CopyOutlined as CopyOutlined4, StopOutlined as StopOutlined3, MoreOutlined as MoreOutlined3 } from "@ant-design/icons";
32574
32635
  import { jsx as jsx123, jsxs as jsxs89 } from "react/jsx-runtime";
32575
32636
  var { Text: Text51 } = Typography62;
32576
32637
  var SharesPage = ({ client }) => {
32577
32638
  const [shares, setShares] = useState78([]);
32578
32639
  const [loading, setLoading] = useState78(true);
32579
- const [editingShare, setEditingShare] = useState78(null);
32580
32640
  const loadShares = async () => {
32581
32641
  setLoading(true);
32582
32642
  try {
@@ -32587,11 +32647,18 @@ var SharesPage = ({ client }) => {
32587
32647
  }
32588
32648
  setLoading(false);
32589
32649
  };
32590
- useEffect52(() => {
32650
+ useEffect53(() => {
32591
32651
  loadShares();
32592
32652
  }, []);
32593
- const handleCopy = (url) => {
32594
- navigator.clipboard.writeText(`${window.location.origin}${url}`);
32653
+ const handleCopy = (record) => {
32654
+ const baseURL = client.baseURL ?? "";
32655
+ const fullUrl = `${baseURL.replace(/\/$/, "")}/s/${record.token}`;
32656
+ const titleText = record.title ? `${record.title}
32657
+ ` : `${record.address.resourcePath.split("/").pop() || "file"}
32658
+ `;
32659
+ const pwdText = record.visibility === "password" ? "Password protected\n" : "";
32660
+ navigator.clipboard.writeText(`${titleText}${fullUrl}
32661
+ ${pwdText}`.trim());
32595
32662
  message21.success("Copied");
32596
32663
  };
32597
32664
  const handleRevoke = async (token) => {
@@ -32625,9 +32692,9 @@ var SharesPage = ({ client }) => {
32625
32692
  title: "Status",
32626
32693
  key: "status",
32627
32694
  render: (_, r) => {
32628
- if (r.revoked) return /* @__PURE__ */ jsx123(Tag29, { color: "red", children: "Revoked" });
32629
- if (r.expiresAt && new Date(r.expiresAt) < /* @__PURE__ */ new Date()) return /* @__PURE__ */ jsx123(Tag29, { color: "orange", children: "Expired" });
32630
- return /* @__PURE__ */ jsx123(Tag29, { color: "green", children: "Active" });
32695
+ if (r.revoked) return /* @__PURE__ */ jsx123(Tag30, { color: "red", children: "Revoked" });
32696
+ if (r.expiresAt && new Date(r.expiresAt) < /* @__PURE__ */ new Date()) return /* @__PURE__ */ jsx123(Tag30, { color: "orange", children: "Expired" });
32697
+ return /* @__PURE__ */ jsx123(Tag30, { color: "green", children: "Active" });
32631
32698
  }
32632
32699
  },
32633
32700
  {
@@ -32644,24 +32711,12 @@ var SharesPage = ({ client }) => {
32644
32711
  key: "copy",
32645
32712
  icon: /* @__PURE__ */ jsx123(CopyOutlined4, {}),
32646
32713
  label: "Copy Link",
32647
- onClick: () => handleCopy(`/s/${r.token}`)
32714
+ onClick: () => handleCopy(r)
32648
32715
  },
32649
32716
  ...r.revoked ? [] : [
32650
- {
32651
- key: "edit",
32652
- icon: /* @__PURE__ */ jsx123(EditOutlined, {}),
32653
- label: "Edit",
32654
- onClick: () => setEditingShare({
32655
- token: r.token,
32656
- path: r.address.resourcePath,
32657
- assistantId: r.assistantId ?? void 0,
32658
- visibility: r.visibility,
32659
- title: r.title ?? void 0
32660
- })
32661
- },
32662
32717
  {
32663
32718
  key: "revoke",
32664
- icon: /* @__PURE__ */ jsx123(StopOutlined2, {}),
32719
+ icon: /* @__PURE__ */ jsx123(StopOutlined3, {}),
32665
32720
  label: "Revoke",
32666
32721
  danger: true,
32667
32722
  onClick: () => handleRevoke(r.token)
@@ -32672,20 +32727,7 @@ var SharesPage = ({ client }) => {
32672
32727
  ];
32673
32728
  return /* @__PURE__ */ jsxs89("div", { style: { padding: 24 }, children: [
32674
32729
  /* @__PURE__ */ jsx123(Typography62.Title, { level: 4, children: "My Shares" }),
32675
- /* @__PURE__ */ jsx123(Table5, { dataSource: shares, columns, rowKey: "token", loading, pagination: { pageSize: 20 } }),
32676
- editingShare && /* @__PURE__ */ jsx123(
32677
- ShareModal,
32678
- {
32679
- open: true,
32680
- filePath: editingShare.path,
32681
- assistantId: editingShare.assistantId,
32682
- existingToken: editingShare.token,
32683
- existingVisibility: editingShare.visibility,
32684
- existingTitle: editingShare.title,
32685
- onClose: () => setEditingShare(null),
32686
- onUpdated: () => loadShares()
32687
- }
32688
- )
32730
+ /* @__PURE__ */ jsx123(Table5, { dataSource: shares, columns, rowKey: "token", loading, pagination: { pageSize: 20 } })
32689
32731
  ] });
32690
32732
  };
32691
32733
 
@@ -32697,7 +32739,7 @@ import {
32697
32739
  } from "@ant-design/icons";
32698
32740
  import { Dropdown as Dropdown5, Tooltip as Tooltip25 } from "antd";
32699
32741
  import { createStyles as createStyles37 } from "antd-style";
32700
- import { useEffect as useEffect53, useMemo as useMemo34, useState as useState79 } from "react";
32742
+ import { useEffect as useEffect54, useMemo as useMemo34, useState as useState79 } from "react";
32701
32743
  import { Fragment as Fragment25, jsx as jsx124, jsxs as jsxs90 } from "react/jsx-runtime";
32702
32744
  var useStyle17 = createStyles37(({ token, css }) => {
32703
32745
  return {
@@ -32929,7 +32971,7 @@ var SideAppViewBrowser = ({ region = "side" }) => {
32929
32971
  const switchTab = (key) => {
32930
32972
  setActiveKey(key);
32931
32973
  };
32932
- useEffect53(() => {
32974
+ useEffect54(() => {
32933
32975
  if (!selectedCard) return;
32934
32976
  const key = JSON.stringify(selectedCard);
32935
32977
  if (items.find((item) => item.key === key)) {
@@ -33169,7 +33211,7 @@ var WorkspaceResourceManager = ({
33169
33211
  const { openContentApp, menuCollapsed, setMenuCollapsed } = useChatUIContext();
33170
33212
  const hasOpenedDefault = useRef29(false);
33171
33213
  const hasRegistered = useRef29(false);
33172
- useEffect54(() => {
33214
+ useEffect55(() => {
33173
33215
  if (!hasRegistered.current) {
33174
33216
  hasRegistered.current = true;
33175
33217
  regsiterElement("workspace_projects", {
@@ -33240,7 +33282,7 @@ var WorkspaceResourceManager = ({
33240
33282
  const [tenantModalOpen, setTenantModalOpen] = useState80(false);
33241
33283
  const [changePasswordOpen, setChangePasswordOpen] = useState80(false);
33242
33284
  const [fetchedCustomMenuItems, setFetchedCustomMenuItems] = useState80([]);
33243
- useEffect54(() => {
33285
+ useEffect55(() => {
33244
33286
  const fetchCustomMenu = async () => {
33245
33287
  try {
33246
33288
  const json = await get("/api/menu-items?menuTarget=workspace");
@@ -33253,7 +33295,7 @@ var WorkspaceResourceManager = ({
33253
33295
  };
33254
33296
  fetchCustomMenu();
33255
33297
  }, [get]);
33256
- useEffect54(() => {
33298
+ useEffect55(() => {
33257
33299
  for (const item of fetchedCustomMenuItems) {
33258
33300
  regsiterElement(item.id, {
33259
33301
  card_view: () => null,
@@ -33298,7 +33340,7 @@ var WorkspaceResourceManager = ({
33298
33340
  });
33299
33341
  }
33300
33342
  };
33301
- useEffect54(() => {
33343
+ useEffect55(() => {
33302
33344
  if (!hasOpenedDefault.current && menuItems.length > 0) {
33303
33345
  hasOpenedDefault.current = true;
33304
33346
  const firstRoute = menuItems.find((item) => item.type === "route");
@@ -33522,7 +33564,7 @@ var WorkspaceContextProvider = ({
33522
33564
  Client3.setWorkspaceContext(wsId || void 0, pjId || void 0);
33523
33565
  }
33524
33566
  }, []);
33525
- useEffect55(() => {
33567
+ useEffect56(() => {
33526
33568
  Client3.setWorkspaceContext(workspaceId || void 0, projectId || void 0);
33527
33569
  }, [workspaceId, projectId]);
33528
33570
  const [workspaces, setWorkspaces] = useState81([]);
@@ -33549,7 +33591,7 @@ var WorkspaceContextProvider = ({
33549
33591
  setWorkspaces([]);
33550
33592
  resetSelectedWorkspace();
33551
33593
  }, [resetSelectedWorkspace, setWorkspaces]);
33552
- useEffect55(() => {
33594
+ useEffect56(() => {
33553
33595
  resetWS();
33554
33596
  refreshWorkspaces();
33555
33597
  }, [tenantId]);
@@ -33582,29 +33624,29 @@ var WorkspaceContextProvider = ({
33582
33624
  setLoading(false);
33583
33625
  }
33584
33626
  }, [client, workspaceId]);
33585
- useEffect55(() => {
33627
+ useEffect56(() => {
33586
33628
  if (workspaceId && typeof window !== "undefined") {
33587
33629
  sessionStorage.setItem("workspaceId", workspaceId);
33588
33630
  }
33589
33631
  }, [workspaceId]);
33590
- useEffect55(() => {
33632
+ useEffect56(() => {
33591
33633
  if (projectId && typeof window !== "undefined") {
33592
33634
  sessionStorage.setItem("projectId", projectId);
33593
33635
  }
33594
33636
  }, [projectId]);
33595
- useEffect55(() => {
33637
+ useEffect56(() => {
33596
33638
  refreshWorkspaces().catch((err) => {
33597
33639
  console.warn("Failed to load workspaces:", err);
33598
33640
  });
33599
33641
  }, [refreshWorkspaces]);
33600
- useEffect55(() => {
33642
+ useEffect56(() => {
33601
33643
  if (workspaces.length > 0 && !workspaceId) {
33602
33644
  const firstWorkspace = workspaces[0];
33603
33645
  setWorkspaceId(firstWorkspace.id);
33604
33646
  }
33605
33647
  }, [workspaces, workspaceId]);
33606
33648
  const prevWorkspaceId = useRef30(workspaceId);
33607
- useEffect55(() => {
33649
+ useEffect56(() => {
33608
33650
  if (workspaceId) {
33609
33651
  refreshProjects(workspaceId);
33610
33652
  } else {
@@ -33793,6 +33835,18 @@ var WorkspaceContextProvider = ({
33793
33835
  },
33794
33836
  [client, workspaceId, projectId]
33795
33837
  );
33838
+ const listShares = useCallback41(
33839
+ async () => {
33840
+ return client.resources.listShares();
33841
+ },
33842
+ [client]
33843
+ );
33844
+ const unshareFile = useCallback41(
33845
+ async (token) => {
33846
+ await client.resources.unshare(token);
33847
+ },
33848
+ [client]
33849
+ );
33796
33850
  const value = {
33797
33851
  workspaceId,
33798
33852
  projectId,
@@ -33815,7 +33869,9 @@ var WorkspaceContextProvider = ({
33815
33869
  uploadFile,
33816
33870
  uploadFileToFolder,
33817
33871
  getFileViewUrl,
33818
- shareFile
33872
+ shareFile,
33873
+ listShares,
33874
+ unshareFile
33819
33875
  };
33820
33876
  const currentWorkspace = workspaces.find((w) => w.id === workspaceId);
33821
33877
  const workspaceName = currentWorkspace?.name;
@@ -33843,7 +33899,15 @@ var MODAL_BODY_STYLE = {
33843
33899
  flexDirection: "column",
33844
33900
  gap: 12
33845
33901
  };
33846
- var PinToMenuButton = ({ assistantId }) => {
33902
+ var PinToMenuButton = ({
33903
+ assistantId,
33904
+ contentType = "agent",
33905
+ contentConfig: externalContentConfig,
33906
+ isMatch,
33907
+ size = "small",
33908
+ label,
33909
+ block
33910
+ }) => {
33847
33911
  const workspaceCtx = React74.useContext(WorkspaceContext);
33848
33912
  const { config } = useLatticeChatShellContext();
33849
33913
  const { post, get, del } = useApi();
@@ -33854,8 +33918,9 @@ var PinToMenuButton = ({ assistantId }) => {
33854
33918
  const [isPinned, setIsPinned] = useState82(false);
33855
33919
  const [pinnedItemId, setPinnedItemId] = useState82(null);
33856
33920
  const [checking, setChecking] = useState82(true);
33921
+ const hasTarget = contentType === "agent" ? !!assistantId : !!externalContentConfig;
33857
33922
  const checkPinned = useCallback42(async () => {
33858
- if (!assistantId || !config.enableCustomMenu) {
33923
+ if (!hasTarget || !config.enableCustomMenu) {
33859
33924
  setChecking(false);
33860
33925
  return;
33861
33926
  }
@@ -33865,8 +33930,11 @@ var PinToMenuButton = ({ assistantId }) => {
33865
33930
  "/api/menu-items?menuTarget=workspace"
33866
33931
  );
33867
33932
  if (json.success && json.data?.records) {
33933
+ const matchFn = isMatch ?? ((cfg) => {
33934
+ return contentType === "agent" && cfg.agentId === assistantId;
33935
+ });
33868
33936
  const pinned = json.data.records.find(
33869
- (item) => item.contentConfig?.agentId === assistantId
33937
+ (item) => item.contentType === contentType && matchFn(item.contentConfig)
33870
33938
  );
33871
33939
  if (pinned) {
33872
33940
  setIsPinned(true);
@@ -33880,11 +33948,11 @@ var PinToMenuButton = ({ assistantId }) => {
33880
33948
  } finally {
33881
33949
  setChecking(false);
33882
33950
  }
33883
- }, [assistantId, config.enableCustomMenu, get]);
33884
- useEffect56(() => {
33951
+ }, [hasTarget, config.enableCustomMenu, get, contentType, assistantId, isMatch]);
33952
+ useEffect57(() => {
33885
33953
  checkPinned();
33886
33954
  }, [checkPinned]);
33887
- if (!assistantId || !config.enableCustomMenu) return null;
33955
+ if (!hasTarget || !config.enableCustomMenu) return null;
33888
33956
  const handlePin = async () => {
33889
33957
  if (!name.trim()) {
33890
33958
  message22.warning("Please enter a menu name");
@@ -33892,14 +33960,19 @@ var PinToMenuButton = ({ assistantId }) => {
33892
33960
  }
33893
33961
  setLoading(true);
33894
33962
  try {
33963
+ const contentConfig = contentType === "agent" ? {
33964
+ agentId: assistantId,
33965
+ workspaceId: workspaceCtx?.workspaceId || void 0,
33966
+ projectId: workspaceCtx?.projectId || void 0
33967
+ } : {
33968
+ ...externalContentConfig,
33969
+ workspaceId: workspaceCtx?.workspaceId || void 0,
33970
+ projectId: workspaceCtx?.projectId || void 0
33971
+ };
33895
33972
  const body = {
33896
33973
  menuTarget: "workspace",
33897
- contentType: "agent",
33898
- contentConfig: {
33899
- agentId: assistantId,
33900
- workspaceId: workspaceCtx?.workspaceId || void 0,
33901
- projectId: workspaceCtx?.projectId || void 0
33902
- },
33974
+ contentType,
33975
+ contentConfig,
33903
33976
  group: group.trim() || void 0,
33904
33977
  name: name.trim(),
33905
33978
  sortOrder: 0
@@ -33946,11 +34019,23 @@ var PinToMenuButton = ({ assistantId }) => {
33946
34019
  }
33947
34020
  };
33948
34021
  return /* @__PURE__ */ jsxs92(Fragment26, { children: [
33949
- /* @__PURE__ */ jsx127(Tooltip26, { title: isPinned ? "Unpin from Menu" : "Pin to Menu", children: /* @__PURE__ */ jsx127(
34022
+ /* @__PURE__ */ jsx127(Tooltip26, { title: isPinned ? "Unpin from Menu" : "Pin to Menu", children: label ? /* @__PURE__ */ jsx127(
33950
34023
  Button60,
33951
34024
  {
33952
34025
  type: "text",
33953
- size: "small",
34026
+ size,
34027
+ block,
34028
+ icon: isPinned ? /* @__PURE__ */ jsx127(Pin, { size: 14, fill: "currentColor" }) : /* @__PURE__ */ jsx127(Pin, { size: 14 }),
34029
+ onClick: handleClick,
34030
+ loading: checking || loading && isPinned,
34031
+ children: label
34032
+ }
34033
+ ) : /* @__PURE__ */ jsx127(
34034
+ Button60,
34035
+ {
34036
+ type: "text",
34037
+ size,
34038
+ block,
33954
34039
  icon: isPinned ? /* @__PURE__ */ jsx127(Pin, { size: 14, fill: "currentColor" }) : /* @__PURE__ */ jsx127(Pin, { size: 14 }),
33955
34040
  onClick: handleClick,
33956
34041
  loading: checking || loading && isPinned
@@ -34403,13 +34488,13 @@ var ProjectSelector = ({
34403
34488
  };
34404
34489
 
34405
34490
  // src/components/Chat/ToolPanelFiles.tsx
34406
- import { useCallback as useCallback44, useEffect as useEffect57, useMemo as useMemo37, useState as useState85 } from "react";
34407
- import { message as message25 } from "antd";
34491
+ import { useCallback as useCallback44, useEffect as useEffect58, useMemo as useMemo37, useState as useState85 } from "react";
34492
+ import { message as message24 } from "antd";
34408
34493
 
34409
34494
  // src/components/Chat/FileDirectoryPanel.tsx
34410
34495
  import React76, { useState as useState84 } from "react";
34411
- import { Spin as Spin23, Dropdown as Dropdown6, Button as Button62, message as message24 } from "antd";
34412
- import { ChevronRight as ChevronRight8, FolderOpen as FolderOpen4, Upload, Pin as Pin2 } from "lucide-react";
34496
+ import { Spin as Spin23, Dropdown as Dropdown6, Button as Button62 } from "antd";
34497
+ import { ChevronRight as ChevronRight8, FolderOpen as FolderOpen4, Upload } from "lucide-react";
34413
34498
  import { createStyles as createStyles39 } from "antd-style";
34414
34499
  import { MoreOutlined as MoreOutlined5, LinkOutlined as LinkOutlined5, DownloadOutlined as DownloadOutlined4, EyeOutlined } from "@ant-design/icons";
34415
34500
  import { Fragment as Fragment28, jsx as jsx129, jsxs as jsxs94 } from "react/jsx-runtime";
@@ -34417,6 +34502,7 @@ var useStyles22 = createStyles39(({ token, css }) => ({
34417
34502
  container: css`
34418
34503
  height: 100%;
34419
34504
  overflow-y: auto;
34505
+ overflow-x: hidden;
34420
34506
  padding: 12px;
34421
34507
  font-size: 13px;
34422
34508
  background: transparent;
@@ -34487,7 +34573,8 @@ var useStyles22 = createStyles39(({ token, css }) => ({
34487
34573
  display: flex;
34488
34574
  align-items: center;
34489
34575
  gap: 8px;
34490
- width: 100%;
34576
+ flex: 1;
34577
+ min-width: 0;
34491
34578
  padding: 5px 8px;
34492
34579
  border-radius: 4px;
34493
34580
  cursor: pointer;
@@ -34642,7 +34729,6 @@ var FileDirectoryPanel = ({
34642
34729
  const { styles } = useStyles22();
34643
34730
  const { currentAssistant } = useAssistantContext();
34644
34731
  const { getFileViewUrl } = useWorkspaceContext();
34645
- const { post } = useApi();
34646
34732
  const [sharePath, setSharePath] = useState84(null);
34647
34733
  const renderEntry = React76.useCallback((entry, depth) => {
34648
34734
  const entryName = getEntryName(entry);
@@ -34701,6 +34787,18 @@ var FileDirectoryPanel = ({
34701
34787
  ]
34702
34788
  }
34703
34789
  ),
34790
+ /* @__PURE__ */ jsx129(
34791
+ PinToMenuButton,
34792
+ {
34793
+ contentType: "file",
34794
+ contentConfig: {
34795
+ resourcePath: entry.path,
34796
+ assistantId: currentAssistant?.id || "",
34797
+ fileName: entry.path.split("/").pop() || entry.path
34798
+ },
34799
+ isMatch: (cfg) => cfg.resourcePath === entry.path
34800
+ }
34801
+ ),
34704
34802
  /* @__PURE__ */ jsx129(
34705
34803
  Dropdown6,
34706
34804
  {
@@ -34730,32 +34828,6 @@ var FileDirectoryPanel = ({
34730
34828
  icon: /* @__PURE__ */ jsx129(LinkOutlined5, {}),
34731
34829
  label: "Share",
34732
34830
  onClick: () => setSharePath(entry.path)
34733
- },
34734
- {
34735
- key: "pin",
34736
- icon: /* @__PURE__ */ jsx129(Pin2, { size: 14 }),
34737
- label: "Pin to Menu",
34738
- onClick: async () => {
34739
- try {
34740
- const fileName = entry.path.split("/").pop() || entry.path;
34741
- await post("/api/menu-items", {
34742
- menuTarget: "workspace",
34743
- contentType: "file",
34744
- contentConfig: {
34745
- resourcePath: entry.path,
34746
- workspaceId: workspaceId || "",
34747
- projectId: projectId || "",
34748
- assistantId: currentAssistant?.id || "",
34749
- fileName
34750
- },
34751
- name: fileName,
34752
- sortOrder: 0
34753
- });
34754
- message24.success(`Pinned "${fileName}" to menu`);
34755
- } catch {
34756
- message24.error("Failed to pin to menu");
34757
- }
34758
- }
34759
34831
  }
34760
34832
  ]
34761
34833
  },
@@ -34912,7 +34984,7 @@ var ToolPanelFiles = () => {
34912
34984
  setDirectoryLoading((prev) => ({ ...prev, [path]: false }));
34913
34985
  }
34914
34986
  }, [directoryExpanded, listPath, currentAssistant?.id]);
34915
- useEffect57(() => {
34987
+ useEffect58(() => {
34916
34988
  resourceFolders.forEach((folder) => {
34917
34989
  void loadAssetsForFolder(folder, false);
34918
34990
  });
@@ -34920,7 +34992,7 @@ var ToolPanelFiles = () => {
34920
34992
  const handleAssetClick = useCallback44((asset) => {
34921
34993
  const fileUrl = getFileViewUrl(asset.path, currentAssistant?.id);
34922
34994
  if (!fileUrl) {
34923
- message25.warning("Please select a workspace and project first.");
34995
+ message24.warning("Please select a workspace and project first.");
34924
34996
  return;
34925
34997
  }
34926
34998
  openSideApp({
@@ -34935,7 +35007,7 @@ var ToolPanelFiles = () => {
34935
35007
  }, [getFileViewUrl, openSideApp, currentAssistant?.id]);
34936
35008
  const handleUploadFolder = useCallback44(async (folderName) => {
34937
35009
  if (!workspaceId || !projectId) {
34938
- message25.warning("Please select a workspace and project before uploading.");
35010
+ message24.warning("Please select a workspace and project before uploading.");
34939
35011
  return;
34940
35012
  }
34941
35013
  const input = document.createElement("input");
@@ -34949,14 +35021,14 @@ var ToolPanelFiles = () => {
34949
35021
  setUploadingFolder(folderName);
34950
35022
  try {
34951
35023
  await uploadFileToFolder(folderName, file, currentAssistant?.id);
34952
- message25.success(`Uploaded "${file.name}" successfully`);
35024
+ message24.success(`Uploaded "${file.name}" successfully`);
34953
35025
  const folder = resourceFolders.find((item) => item.name === folderName);
34954
35026
  if (folder) {
34955
35027
  await loadAssetsForFolder(folder);
34956
35028
  }
34957
35029
  } catch (error) {
34958
35030
  const errMsg = error instanceof Error ? error.message : "Failed to upload file";
34959
- message25.error(errMsg);
35031
+ message24.error(errMsg);
34960
35032
  } finally {
34961
35033
  setUploadingFolder(null);
34962
35034
  input.remove();
@@ -35073,7 +35145,7 @@ import {
35073
35145
  import React78, { useCallback as useCallback45 } from "react";
35074
35146
  import { createStyles as createStyles41 } from "antd-style";
35075
35147
  import { MessageSquare as MessageSquare4, Trash2 as Trash210 } from "lucide-react";
35076
- import { message as message26, Modal as Modal26 } from "antd";
35148
+ import { message as message25, Modal as Modal26 } from "antd";
35077
35149
  import { jsx as jsx132, jsxs as jsxs96 } from "react/jsx-runtime";
35078
35150
  var useStyles24 = createStyles41(({ token, css }) => ({
35079
35151
  container: css`
@@ -35196,9 +35268,9 @@ var ThreadHistoryMenuContent = () => {
35196
35268
  onOk: async () => {
35197
35269
  try {
35198
35270
  await deleteThread(threadIdToDelete);
35199
- message26.success("Conversation deleted");
35271
+ message25.success("Conversation deleted");
35200
35272
  } catch (error) {
35201
- message26.error("Failed to delete conversation");
35273
+ message25.error("Failed to delete conversation");
35202
35274
  }
35203
35275
  }
35204
35276
  });
@@ -35557,12 +35629,12 @@ var LatticeChatView = (props) => {
35557
35629
  };
35558
35630
 
35559
35631
  // src/components/Chat/SettingsModal.tsx
35560
- import { useState as useState87, useEffect as useEffect58, useRef as useRef32 } from "react";
35632
+ import { useState as useState87, useEffect as useEffect59, useRef as useRef32 } from "react";
35561
35633
  import {
35562
35634
  Modal as Modal27,
35563
35635
  Input as Input21,
35564
35636
  Button as Button64,
35565
- message as message27,
35637
+ message as message26,
35566
35638
  notification as notification5,
35567
35639
  Typography as Typography63,
35568
35640
  Alert as Alert9,
@@ -35580,12 +35652,12 @@ import {
35580
35652
  LinkOutlined as LinkOutlined6,
35581
35653
  CheckCircleFilled,
35582
35654
  CloseCircleFilled,
35583
- PlusOutlined as PlusOutlined9,
35655
+ PlusOutlined as PlusOutlined10,
35584
35656
  CloudServerOutlined
35585
35657
  } from "@ant-design/icons";
35586
35658
  import { createStyles as createStyles42 } from "antd-style";
35587
35659
  import { Fragment as Fragment31, jsx as jsx135, jsxs as jsxs98 } from "react/jsx-runtime";
35588
- var { Text: Text52, Title: Title17 } = Typography63;
35660
+ var { Text: Text52, Title: Title18 } = Typography63;
35589
35661
  var { TextArea: TextArea9 } = Input21;
35590
35662
  var useStyles25 = createStyles42(({ token, css }) => ({
35591
35663
  // settingsModal: css`
@@ -35971,7 +36043,7 @@ var SettingsModal = ({
35971
36043
  });
35972
36044
  const [serverConfigs, setServerConfigs] = useState87({});
35973
36045
  const connectionsRef = useRef32(connections);
35974
- useEffect58(() => {
36046
+ useEffect59(() => {
35975
36047
  connectionsRef.current = connections;
35976
36048
  }, [connections]);
35977
36049
  const [activeTabKey, setActiveTabKey] = useState87(
@@ -36122,7 +36194,7 @@ var SettingsModal = ({
36122
36194
  }
36123
36195
  } catch (error) {
36124
36196
  console.error("Failed to load configuration:", error);
36125
- message27.error("Failed to load current configuration");
36197
+ message26.error("Failed to load current configuration");
36126
36198
  }
36127
36199
  };
36128
36200
  const loadModelsConfig = async (serverId) => {
@@ -36173,7 +36245,7 @@ var SettingsModal = ({
36173
36245
  console.error("Failed to load models configuration:", error);
36174
36246
  }
36175
36247
  };
36176
- useEffect58(() => {
36248
+ useEffect59(() => {
36177
36249
  if (open && activeTabKey) {
36178
36250
  initializeServerConfig(activeTabKey);
36179
36251
  const connection = connections.find((c) => c.id === activeTabKey);
@@ -36182,7 +36254,7 @@ var SettingsModal = ({
36182
36254
  }
36183
36255
  }
36184
36256
  }, [open, activeTabKey]);
36185
- useEffect58(() => {
36257
+ useEffect59(() => {
36186
36258
  if (open && activeTabKey) {
36187
36259
  const connection = connections.find((c) => c.id === activeTabKey);
36188
36260
  if (connection?.connected) {
@@ -36196,7 +36268,7 @@ var SettingsModal = ({
36196
36268
  }, [open, activeTabKey, activeMenu]);
36197
36269
  const handleAddServer = async () => {
36198
36270
  if (!newServerUrl.trim()) {
36199
- message27.error("Please enter a server URL");
36271
+ message26.error("Please enter a server URL");
36200
36272
  return;
36201
36273
  }
36202
36274
  let normalizedUrl = newServerUrl.trim();
@@ -36259,12 +36331,12 @@ var SettingsModal = ({
36259
36331
  const handleSave = async () => {
36260
36332
  const connection = connections.find((c) => c.id === activeTabKey);
36261
36333
  if (!connection || !connection.connected) {
36262
- message27.error("Please connect to a server first");
36334
+ message26.error("Please connect to a server first");
36263
36335
  return;
36264
36336
  }
36265
36337
  const url = connection.url;
36266
36338
  if (!url) {
36267
- message27.error("Please connect to a server first");
36339
+ message26.error("Please connect to a server first");
36268
36340
  return;
36269
36341
  }
36270
36342
  try {
@@ -36328,7 +36400,7 @@ var SettingsModal = ({
36328
36400
  const data = await response.json();
36329
36401
  if (response.ok && data.success) {
36330
36402
  if (data.requiresRestart && data.requiresRestart.length > 0) {
36331
- message27.warning(
36403
+ message26.warning(
36332
36404
  `Configuration saved. Please restart the server for ${data.requiresRestart.join(
36333
36405
  ", "
36334
36406
  )} to take effect.`,
@@ -36342,12 +36414,12 @@ var SettingsModal = ({
36342
36414
  }
36343
36415
  if (data.warnings && data.warnings.length > 0) {
36344
36416
  data.warnings.forEach((warning) => {
36345
- message27.warning(warning, 5);
36417
+ message26.warning(warning, 5);
36346
36418
  });
36347
36419
  }
36348
36420
  onClose();
36349
36421
  } else {
36350
- message27.error(data.error || "Failed to save configuration");
36422
+ message26.error(data.error || "Failed to save configuration");
36351
36423
  }
36352
36424
  } else if (activeMenu === "models") {
36353
36425
  const validModels = config.models.filter(
@@ -36372,12 +36444,12 @@ var SettingsModal = ({
36372
36444
  });
36373
36445
  onClose();
36374
36446
  } else {
36375
- message27.error(data.error || "Failed to save model configuration");
36447
+ message26.error(data.error || "Failed to save model configuration");
36376
36448
  }
36377
36449
  }
36378
36450
  } catch (error) {
36379
36451
  console.error("Failed to save configuration:", error);
36380
- message27.error(error.message || "Failed to save configuration");
36452
+ message26.error(error.message || "Failed to save configuration");
36381
36453
  } finally {
36382
36454
  setLoading(false);
36383
36455
  }
@@ -36739,7 +36811,7 @@ QUEUE_NAME=tasks`,
36739
36811
  /* @__PURE__ */ jsxs98("div", { className: styles.content, children: [
36740
36812
  /* @__PURE__ */ jsxs98("div", { className: styles.contentHeader, children: [
36741
36813
  /* @__PURE__ */ jsxs98("div", { className: styles.contentHeaderLeft, children: [
36742
- /* @__PURE__ */ jsx135(Title17, { level: 3, className: styles.contentTitle, children: activeMenuItem?.label }),
36814
+ /* @__PURE__ */ jsx135(Title18, { level: 3, className: styles.contentTitle, children: activeMenuItem?.label }),
36743
36815
  /* @__PURE__ */ jsxs98(Text52, { className: styles.contentDescription, children: [
36744
36816
  activeMenu === "environment" && "Manage environment variables for the gateway server",
36745
36817
  activeMenu === "models" && "Configure and register model lattices for use by agents"
@@ -36775,14 +36847,14 @@ QUEUE_NAME=tasks`,
36775
36847
  },
36776
36848
  children: connection.connecting ? /* @__PURE__ */ jsxs98(Fragment31, { children: [
36777
36849
  /* @__PURE__ */ jsx135(LinkOutlined6, { style: { fontSize: 64, color: "#1890ff" }, spin: true }),
36778
- /* @__PURE__ */ jsx135(Title17, { level: 4, children: "Connecting..." }),
36850
+ /* @__PURE__ */ jsx135(Title18, { level: 4, children: "Connecting..." }),
36779
36851
  /* @__PURE__ */ jsxs98(Text52, { type: "secondary", style: { textAlign: "center" }, children: [
36780
36852
  "Connecting to ",
36781
36853
  connection.url
36782
36854
  ] })
36783
36855
  ] }) : /* @__PURE__ */ jsxs98(Fragment31, { children: [
36784
36856
  /* @__PURE__ */ jsx135(LinkOutlined6, { style: { fontSize: 64, color: "#d9d9d9" } }),
36785
- /* @__PURE__ */ jsx135(Title17, { level: 4, type: "secondary", children: connection.error || "Not Connected" }),
36857
+ /* @__PURE__ */ jsx135(Title18, { level: 4, type: "secondary", children: connection.error || "Not Connected" }),
36786
36858
  /* @__PURE__ */ jsx135(
36787
36859
  Text52,
36788
36860
  {
@@ -36841,7 +36913,7 @@ QUEUE_NAME=tasks`,
36841
36913
  padding: "4px 8px"
36842
36914
  },
36843
36915
  children: [
36844
- /* @__PURE__ */ jsx135(PlusOutlined9, {}),
36916
+ /* @__PURE__ */ jsx135(PlusOutlined10, {}),
36845
36917
  /* @__PURE__ */ jsx135("span", { children: "Add Server" })
36846
36918
  ]
36847
36919
  }
@@ -36962,22 +37034,22 @@ var LatticeChatShell = (props) => {
36962
37034
  };
36963
37035
 
36964
37036
  // src/components/Chat/ChannelInstallationsDrawerContent.tsx
36965
- import { useEffect as useEffect59, useState as useState88 } from "react";
37037
+ import { useEffect as useEffect60, useState as useState88 } from "react";
36966
37038
  import {
36967
37039
  Button as Button65,
36968
37040
  Card as Card30,
36969
37041
  Form as Form10,
36970
37042
  Input as Input22,
36971
37043
  Modal as Modal28,
36972
- Popconfirm as Popconfirm13,
37044
+ Popconfirm as Popconfirm14,
36973
37045
  Spin as Spin24,
36974
- Tag as Tag31,
37046
+ Tag as Tag32,
36975
37047
  Typography as Typography64,
36976
- message as message28
37048
+ message as message27
36977
37049
  } from "antd";
36978
37050
  import { Edit2 as Edit24, Plus as Plus10, RadioTower, Trash2 as Trash211 } from "lucide-react";
36979
37051
  import { jsx as jsx138, jsxs as jsxs100 } from "react/jsx-runtime";
36980
- var { Text: Text53, Title: Title18 } = Typography64;
37052
+ var { Text: Text53, Title: Title19 } = Typography64;
36981
37053
  var ChannelInstallationsDrawerContent = () => {
36982
37054
  const { get, post, put, del } = useApi();
36983
37055
  const [installations, setInstallations] = useState88([]);
@@ -36994,17 +37066,17 @@ var ChannelInstallationsDrawerContent = () => {
36994
37066
  setInstallations(result.data?.records ?? []);
36995
37067
  } else {
36996
37068
  setInstallations([]);
36997
- message28.error(result.message || "Failed to load channel installations");
37069
+ message27.error(result.message || "Failed to load channel installations");
36998
37070
  }
36999
37071
  } catch (error) {
37000
37072
  console.error("Failed to load channel installations:", error);
37001
37073
  setInstallations([]);
37002
- message28.error("Failed to load channel installations");
37074
+ message27.error("Failed to load channel installations");
37003
37075
  } finally {
37004
37076
  setLoading(false);
37005
37077
  }
37006
37078
  };
37007
- useEffect59(() => {
37079
+ useEffect60(() => {
37008
37080
  loadInstallations();
37009
37081
  }, []);
37010
37082
  const handleDelete = async (installation) => {
@@ -37016,13 +37088,13 @@ var ChannelInstallationsDrawerContent = () => {
37016
37088
  setInstallations(
37017
37089
  (current) => current.filter((item) => item.id !== installation.id)
37018
37090
  );
37019
- message28.success("Installation deleted");
37091
+ message27.success("Installation deleted");
37020
37092
  } else {
37021
- message28.error(result.message || "Failed to delete installation");
37093
+ message27.error(result.message || "Failed to delete installation");
37022
37094
  }
37023
37095
  } catch (error) {
37024
37096
  console.error("Failed to delete channel installation:", error);
37025
- message28.error("Failed to delete installation");
37097
+ message27.error("Failed to delete installation");
37026
37098
  }
37027
37099
  };
37028
37100
  return /* @__PURE__ */ jsxs100("div", { style: { height: "100%", display: "flex", flexDirection: "column" }, children: [
@@ -37035,7 +37107,7 @@ var ChannelInstallationsDrawerContent = () => {
37035
37107
  alignItems: "center"
37036
37108
  },
37037
37109
  children: [
37038
- /* @__PURE__ */ jsx138(Title18, { level: 5, style: { margin: 0 }, children: "Channel Installations" }),
37110
+ /* @__PURE__ */ jsx138(Title19, { level: 5, style: { margin: 0 }, children: "Channel Installations" }),
37039
37111
  /* @__PURE__ */ jsx138(
37040
37112
  Button65,
37041
37113
  {
@@ -37081,7 +37153,7 @@ var ChannelInstallationsDrawerContent = () => {
37081
37153
  },
37082
37154
  children: [
37083
37155
  /* @__PURE__ */ jsx138(Text53, { strong: true, style: { fontSize: 15 }, children: installation.name || installation.id }),
37084
- /* @__PURE__ */ jsx138(Tag31, { color: "blue", children: installation.channel })
37156
+ /* @__PURE__ */ jsx138(Tag32, { color: "blue", children: installation.channel })
37085
37157
  ]
37086
37158
  }
37087
37159
  ),
@@ -37116,7 +37188,7 @@ var ChannelInstallationsDrawerContent = () => {
37116
37188
  }
37117
37189
  ),
37118
37190
  /* @__PURE__ */ jsx138(
37119
- Popconfirm13,
37191
+ Popconfirm14,
37120
37192
  {
37121
37193
  title: "Delete Channel Installation",
37122
37194
  description: `Are you sure you want to delete "${installation.name || installation.id}"?`,
@@ -37152,7 +37224,7 @@ var ChannelInstallationsDrawerContent = () => {
37152
37224
  };
37153
37225
  var LarkChannelInstallationFormModal = ({ installation, open, post, put, onCancel, onSave }) => {
37154
37226
  const [form] = Form10.useForm();
37155
- useEffect59(() => {
37227
+ useEffect60(() => {
37156
37228
  if (installation) {
37157
37229
  const config = installation.config;
37158
37230
  form.setFieldsValue({
@@ -37185,10 +37257,10 @@ var LarkChannelInstallationFormModal = ({ installation, open, post, put, onCance
37185
37257
  payload2
37186
37258
  );
37187
37259
  if (result2.success) {
37188
- message28.success("Installation updated");
37260
+ message27.success("Installation updated");
37189
37261
  onSave();
37190
37262
  } else {
37191
- message28.error(result2.message || "Failed to update installation");
37263
+ message27.error(result2.message || "Failed to update installation");
37192
37264
  }
37193
37265
  return;
37194
37266
  }
@@ -37202,14 +37274,14 @@ var LarkChannelInstallationFormModal = ({ installation, open, post, put, onCance
37202
37274
  payload
37203
37275
  );
37204
37276
  if (result.success) {
37205
- message28.success("Installation created");
37277
+ message27.success("Installation created");
37206
37278
  onSave();
37207
37279
  } else {
37208
- message28.error(result.message || "Failed to create installation");
37280
+ message27.error(result.message || "Failed to create installation");
37209
37281
  }
37210
37282
  } catch (error) {
37211
37283
  console.error("Failed to save channel installation:", error);
37212
- message28.error(
37284
+ message27.error(
37213
37285
  installation ? "Failed to update installation" : "Failed to create installation"
37214
37286
  );
37215
37287
  }