@ai4b-team/fsaos-gateway-sdk 2.0.2 → 3.1.0

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/iife/ui.js CHANGED
@@ -1,3 +1,3 @@
1
- /* @fsaos/ui v2.0.0 — FSAOS UI Primitives — 2026-05-27T09:38:07.423Z */
1
+ /* @fsaos/ui v2.0.0 — FSAOS UI Primitives — 2026-05-27T18:30:24.764Z */
2
2
  "use strict";var __FSAOS_UI__=(()=>{var m=Object.create;var r=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var f=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty;var y=(e,i)=>()=>(i||e((i={exports:{}}).exports,i),i.exports),N=(e,i)=>{for(var a in i)r(e,a,{get:i[a],enumerable:!0})},s=(e,i,a,l)=>{if(i&&typeof i=="object"||typeof i=="function")for(let t of u(i))!h.call(e,t)&&t!==a&&r(e,t,{get:()=>i[t],enumerable:!(l=g(i,t))||l.enumerable});return e};var x=(e,i,a)=>(a=e!=null?m(f(e)):{},s(i||!e||!e.__esModule?r(a,"default",{value:e,enumerable:!0}):a,e)),b=e=>s(r({},"__esModule",{value:!0}),e);var d=y((V,c)=>{c.exports=React});var P={};N(P,{Badge:()=>z,Breadcrumbs:()=>A,Button:()=>D,Card:()=>w,DataView:()=>R,Detail:()=>_,Empty:()=>I,FilePreview:()=>O,Form:()=>F,Grid:()=>k,Image:()=>G,Link:()=>E,Page:()=>v,Router:()=>T,Sidebar:()=>S,Spinner:()=>B,Stack:()=>C,Table:()=>j,Tabs:()=>W,Video:()=>H});var n=x(d(),1);function o(){return(typeof window<"u"&&window.__FSAOS_CONFIG__||{}).edgeBaseUrl||""}function v(e){return(0,n.createElement)("div",{style:{minHeight:"100vh",display:"flex",flexDirection:"column"},className:e.className||""},e.children)}function C(e){let i=e.direction||"vertical";return(0,n.createElement)("div",{style:{display:"flex",flexDirection:i==="horizontal"?"row":"column",gap:e.gap||"0.5rem",padding:e.padding||"0",alignItems:e.align||"stretch",justifyContent:e.justify||"flex-start",flex:e.flex||"initial"},className:e.className||""},e.children)}function k(e){return(0,n.createElement)("div",{style:{display:"grid",gridTemplateColumns:"repeat("+(e.columns||3)+", 1fr)",gap:e.gap||"1rem",padding:e.padding||"0"},className:e.className||""},e.children)}function S(e){return(0,n.createElement)("div",{style:{display:"flex",flexDirection:"row",minHeight:"100vh"},className:e.className||""},e.children)}function w(e){return(0,n.createElement)("div",{style:{border:"1px solid var(--color-border, #e5e7eb)",borderRadius:"var(--border-radius, 0.5rem)",padding:e.padding||"1rem",background:"var(--color-surface, #fff)"},className:e.className||"",onClick:e.onClick},e.children)}function z(e){return(0,n.createElement)("span",{style:{display:"inline-flex",alignItems:"center",padding:"0.125rem 0.5rem",fontSize:"0.75rem",fontWeight:"500",borderRadius:"9999px",background:e.color||"#e5e7eb",color:e.textColor||"#374151"},className:e.className||""},e.children||e.label)}function B(e){let i=e.size||"1.5rem";return(0,n.createElement)("div",{style:{width:i,height:i,border:"2px solid #e5e7eb",borderTopColor:"var(--color-primary, #3b82f6)",borderRadius:"50%",animation:"fsaos-spin 0.6s linear infinite"}})}function D(e){return(0,n.createElement)("button",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",padding:"0.5rem 1rem",fontSize:"0.875rem",fontWeight:"500",borderRadius:"var(--border-radius, 0.375rem)",border:e.variant==="outline"?"1px solid var(--color-border, #d1d5db)":"none",background:e.variant==="outline"||e.variant==="ghost"?"transparent":"var(--color-primary, #3b82f6)",color:e.variant==="outline"||e.variant==="ghost"?"var(--color-text, #1a1a1a)":"#fff",cursor:e.disabled?"not-allowed":"pointer",opacity:e.disabled?"0.5":"1",gap:"0.5rem"},className:e.className||"",onClick:e.onClick,disabled:e.disabled},e.children||e.label)}function I(e){return(0,n.createElement)("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",padding:"3rem",color:"var(--color-text-secondary, #6b7280)",textAlign:"center"}},e.icon?(0,n.createElement)("div",{style:{fontSize:"2rem",marginBottom:"0.5rem"}},e.icon):null,(0,n.createElement)("div",{style:{fontWeight:500,marginBottom:"0.25rem"}},e.title||e.message||e.children||"No items"),e.description?(0,n.createElement)("div",{style:{fontSize:"0.875rem",opacity:.7}},e.description):null)}function R(e){return(0,n.createElement)("div",{className:e.className||""},e.children)}function j(e){return(0,n.createElement)("table",{className:e.className||""},e.children)}function F(e){return(0,n.createElement)("form",{className:e.className||"",onSubmit:e.onSubmit},e.children)}function _(e){return(0,n.createElement)("div",{className:e.className||""},e.children)}function T(e){return(0,n.createElement)("div",null,e.children)}function E(e){return(0,n.createElement)("a",{href:e.href||e.to,className:e.className||"",onClick:e.onClick},e.children)}function W(e){return(0,n.createElement)("div",{className:e.className||""},e.children)}function A(e){return(0,n.createElement)("nav",{className:e.className||""},e.children)}function G(e){return(0,n.createElement)("img",{src:e.src||(e.path?o()+e.path:""),alt:e.alt||"",className:e.className||"",style:e.style})}function H(e){return(0,n.createElement)("video",{src:e.src||(e.path?o()+e.path:""),controls:!0,className:e.className||""})}function O(e){return(0,n.createElement)("div",{className:e.className||""},e.children||"File preview")}return b(P);})();
3
3
  //# sourceMappingURL=ui.js.map
package/dist/index.cjs CHANGED
@@ -55,6 +55,7 @@ __export(src_exports, {
55
55
  emitEvent: () => emitEvent,
56
56
  fetchChannelMessages: () => fetchChannelMessages,
57
57
  fetchChannelMessagesPage: () => fetchChannelMessagesPage,
58
+ fetchChannelMessagesWithCards: () => fetchChannelMessagesWithCards,
58
59
  fetchEdgesForItem: () => fetchEdgesForItem,
59
60
  fetchItemHistory: () => fetchItemHistory,
60
61
  fetchItemVersions: () => fetchItemVersions,
@@ -790,6 +791,26 @@ async function fetchItems(filter) {
790
791
  return { items: [], total_hint: 0 };
791
792
  }
792
793
  }
794
+ function parseChannelCards(rawItems) {
795
+ return rawItems.filter((i) => i.item_type === "card").map((i) => {
796
+ const td = i.type_data || {};
797
+ return {
798
+ id: i.id || "",
799
+ path: i.path || "",
800
+ name: i.name || (i.path || "").split("/").pop() || "",
801
+ createdAt: i.created_at || "",
802
+ action: td.action || "created",
803
+ targetId: td.target_id || void 0,
804
+ targetPath: td.target_path || "",
805
+ targetDisplayName: td.target_display_name || "",
806
+ targetDescription: td.target_description || "",
807
+ targetItemType: td.target_item_type || "",
808
+ toolId: (i.name || "").startsWith("card-") ? (i.name || "").substring(5) : void 0,
809
+ parentMessagePath: i.parent_message_path || void 0,
810
+ visibility: td.visibility || "private"
811
+ };
812
+ }).sort((a, b) => a.createdAt.localeCompare(b.createdAt));
813
+ }
793
814
  function parseChannelMessages(rawItems) {
794
815
  return rawItems.filter((i) => i.item_type === "message").map((i) => {
795
816
  const td = i.type_data || {};
@@ -828,6 +849,40 @@ async function fetchChannelMessages(channelPath, parentMessageId) {
828
849
  return [];
829
850
  }
830
851
  }
852
+ async function fetchChannelMessagesWithCards(channelPath, parentMessageId) {
853
+ try {
854
+ const params = { channel_path: channelPath };
855
+ if (parentMessageId) params.parent_message_id = parentMessageId;
856
+ const response = await gatewayCall("get-channel-messages", params);
857
+ const raw = response;
858
+ const items = raw.messages || [];
859
+ const messages = parseChannelMessages(items);
860
+ const cards = parseChannelCards(items);
861
+ const messageCards = /* @__PURE__ */ new Map();
862
+ const siblingCards = [];
863
+ for (const card of cards) {
864
+ if (card.parentMessagePath) {
865
+ const existing = messageCards.get(card.parentMessagePath) || [];
866
+ existing.push(card);
867
+ messageCards.set(card.parentMessagePath, existing);
868
+ } else {
869
+ siblingCards.push(card);
870
+ }
871
+ }
872
+ return {
873
+ messages,
874
+ messageCards,
875
+ siblingCards,
876
+ mode: raw.mode || "top_level"
877
+ };
878
+ } catch (err) {
879
+ console.error(
880
+ `[gateway] Failed to fetch channel messages with cards for ${channelPath}:`,
881
+ err
882
+ );
883
+ return { messages: [], messageCards: /* @__PURE__ */ new Map(), siblingCards: [], mode: "top_level" };
884
+ }
885
+ }
831
886
  async function fetchChannelMessagesPage(channelPath, options) {
832
887
  try {
833
888
  const params = { channel_path: channelPath };
@@ -2287,7 +2342,7 @@ function useChannelMessages(options) {
2287
2342
  const debounceRef = React.useRef(null);
2288
2343
  const query = reactQuery.useQuery({
2289
2344
  queryKey: stableKey,
2290
- queryFn: () => fetchChannelMessages(channelPath, parentMessageId),
2345
+ queryFn: () => fetchChannelMessagesWithCards(channelPath, parentMessageId),
2291
2346
  enabled: isEnabled
2292
2347
  });
2293
2348
  React.useEffect(() => {
@@ -2301,7 +2356,7 @@ function useChannelMessages(options) {
2301
2356
  }, 500);
2302
2357
  },
2303
2358
  (data) => {
2304
- return data.item_type === "message" && typeof data.path === "string" && data.path.startsWith(channelPath);
2359
+ return (data.item_type === "message" || data.item_type === "card") && typeof data.path === "string" && data.path.startsWith(channelPath);
2305
2360
  }
2306
2361
  );
2307
2362
  return () => {
@@ -2309,9 +2364,16 @@ function useChannelMessages(options) {
2309
2364
  if (debounceRef.current) clearTimeout(debounceRef.current);
2310
2365
  };
2311
2366
  }, [realtime, isEnabled, channelPath, stableKey, qc]);
2312
- const messages = query.data ?? [];
2367
+ const response = query.data;
2368
+ const messages = response?.messages ?? [];
2369
+ const messageCards = response?.messageCards ?? /* @__PURE__ */ new Map();
2370
+ const siblingCards = response?.siblingCards ?? [];
2313
2371
  return {
2314
2372
  messages,
2373
+ /** Cards grouped by parent message path (child cards of messages). */
2374
+ messageCards,
2375
+ /** Cards that are direct siblings of the channel (not nested under a message). */
2376
+ siblingCards,
2315
2377
  threads: React.useMemo(() => messages.filter((m) => m.reply_count > 0), [messages]),
2316
2378
  isLoading: query.isLoading,
2317
2379
  isFetching: query.isFetching,
@@ -3158,6 +3220,7 @@ exports.disposeVfsRealtimeWs = disposeVfsRealtimeWs;
3158
3220
  exports.emitEvent = emitEvent;
3159
3221
  exports.fetchChannelMessages = fetchChannelMessages;
3160
3222
  exports.fetchChannelMessagesPage = fetchChannelMessagesPage;
3223
+ exports.fetchChannelMessagesWithCards = fetchChannelMessagesWithCards;
3161
3224
  exports.fetchEdgesForItem = fetchEdgesForItem;
3162
3225
  exports.fetchItemHistory = fetchItemHistory;
3163
3226
  exports.fetchItemVersions = fetchItemVersions;