@apteva/apteva-darwin-x64 0.4.41 → 0.4.48
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/apteva +0 -0
- package/dist/ActivityPage.9v5ha2p7.js +3 -0
- package/dist/{ActivityPage.7907h64p.js.map → ActivityPage.9v5ha2p7.js.map} +3 -3
- package/dist/ApiDocsPage.qsehxvkb.js +4 -0
- package/dist/ApiDocsPage.qsehxvkb.js.map +10 -0
- package/dist/App.168av39e.js +221 -0
- package/dist/{App.qcknavjz.js.map → App.168av39e.js.map} +15 -15
- package/dist/App.2j20h2gt.js +8 -0
- package/dist/App.2j20h2gt.js.map +12 -0
- package/dist/App.7gj4jht5.js +53 -0
- package/dist/{App.apjrmctz.js.map → App.7gj4jht5.js.map} +50 -52
- package/dist/App.aexwv4rk.js +4 -0
- package/dist/App.aexwv4rk.js.map +10 -0
- package/dist/App.anvw0hjc.js +61 -0
- package/dist/App.anvw0hjc.js.map +13 -0
- package/dist/App.cjcyr5aj.js +4 -0
- package/dist/App.cjcyr5aj.js.map +10 -0
- package/dist/App.dmvykj97.js +4 -0
- package/dist/App.dmvykj97.js.map +10 -0
- package/dist/App.e2kkda2a.js +4 -0
- package/dist/App.e2kkda2a.js.map +10 -0
- package/dist/App.j4ec9k18.js +13 -0
- package/dist/App.j4ec9k18.js.map +10 -0
- package/dist/{App.7fb3e7mp.js → App.jdkx6eqd.js} +1 -1
- package/dist/App.kz3qyyre.js +4 -0
- package/dist/{App.myxqcj9x.js.map → App.kz3qyyre.js.map} +3 -3
- package/dist/App.sd685nt9.js +4 -0
- package/dist/App.sd685nt9.js.map +10 -0
- package/dist/App.shfd8tp9.js +20 -0
- package/dist/{App.3qw8nben.js.map → App.shfd8tp9.js.map} +6 -4
- package/dist/App.wghtdzsk.js +1 -0
- package/dist/App.x6x8s16g.js +4 -0
- package/dist/App.x6x8s16g.js.map +14 -0
- package/dist/App.y2vn8m06.js +4 -0
- package/dist/App.y2vn8m06.js.map +10 -0
- package/dist/ConnectionsPage.1dyyfqbk.js +3 -0
- package/dist/McpPage.xvr8hk05.js +3 -0
- package/dist/SettingsPage.5jmnefwe.js +3 -0
- package/dist/SkillsPage.jw7carjq.js +3 -0
- package/dist/TasksPage.r8txe0e9.js +3 -0
- package/dist/TasksPage.r8txe0e9.js.map +9 -0
- package/dist/TelemetryPage.pcafk41x.js +3 -0
- package/dist/TelemetryPage.pcafk41x.js.map +9 -0
- package/dist/TestsPage.pkymr7yt.js +3 -0
- package/dist/ThreadsPage.49tgq4fq.js +3 -0
- package/dist/apteva-kit.css +1 -1
- package/dist/index.html +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/dist/ActivityPage.7907h64p.js +0 -3
- package/dist/ApiDocsPage.k3jjenpq.js +0 -4
- package/dist/ApiDocsPage.k3jjenpq.js.map +0 -10
- package/dist/App.01nq20st.js +0 -4
- package/dist/App.01nq20st.js.map +0 -10
- package/dist/App.1maqvamf.js +0 -4
- package/dist/App.1maqvamf.js.map +0 -14
- package/dist/App.2yjrh32f.js +0 -4
- package/dist/App.2yjrh32f.js.map +0 -10
- package/dist/App.3qw8nben.js +0 -20
- package/dist/App.7sy3wq8c.js +0 -4
- package/dist/App.7sy3wq8c.js.map +0 -10
- package/dist/App.apjrmctz.js +0 -57
- package/dist/App.av6t2yhe.js +0 -4
- package/dist/App.av6t2yhe.js.map +0 -10
- package/dist/App.jqj5a094.js +0 -46
- package/dist/App.jqj5a094.js.map +0 -13
- package/dist/App.mc7xf85h.js +0 -4
- package/dist/App.mc7xf85h.js.map +0 -10
- package/dist/App.myxqcj9x.js +0 -4
- package/dist/App.nm91r1mp.js +0 -13
- package/dist/App.nm91r1mp.js.map +0 -10
- package/dist/App.p02f4ret.js +0 -1
- package/dist/App.qcknavjz.js +0 -221
- package/dist/App.vc7vfhg4.js +0 -4
- package/dist/App.vc7vfhg4.js.map +0 -10
- package/dist/App.z4s9zkw5.js +0 -4
- package/dist/App.z4s9zkw5.js.map +0 -10
- package/dist/ConnectionsPage.z1pw5xe2.js +0 -3
- package/dist/McpPage.8vc97z0b.js +0 -3
- package/dist/SettingsPage.p61bz8kd.js +0 -3
- package/dist/SkillsPage.r9x43g3g.js +0 -3
- package/dist/TasksPage.1e0zkye4.js +0 -3
- package/dist/TasksPage.1e0zkye4.js.map +0 -9
- package/dist/TelemetryPage.p9vbe4gf.js +0 -3
- package/dist/TelemetryPage.p9vbe4gf.js.map +0 -9
- package/dist/TestsPage.d4xy504e.js +0 -3
- package/dist/ThreadsPage.m016am3x.js +0 -3
- /package/dist/{App.7fb3e7mp.js.map → App.jdkx6eqd.js.map} +0 -0
- /package/dist/{ConnectionsPage.z1pw5xe2.js.map → ConnectionsPage.1dyyfqbk.js.map} +0 -0
- /package/dist/{McpPage.8vc97z0b.js.map → McpPage.xvr8hk05.js.map} +0 -0
- /package/dist/{SettingsPage.p61bz8kd.js.map → SettingsPage.5jmnefwe.js.map} +0 -0
- /package/dist/{SkillsPage.r9x43g3g.js.map → SkillsPage.jw7carjq.js.map} +0 -0
- /package/dist/{TestsPage.d4xy504e.js.map → TestsPage.pkymr7yt.js.map} +0 -0
- /package/dist/{ThreadsPage.m016am3x.js.map → ThreadsPage.49tgq4fq.js.map} +0 -0
package/dist/App.z4s9zkw5.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{G as i,H as V,I as d,l as c,q as l}from"./App.7fb3e7mp.js";import{V as u}from"./App.7sy3wq8c.js";import{$ as k,X as g,aa as y,da as b,ja as p,ma as m}from"./App.3qw8nben.js";var Y=g(k(),1);var z=g(y(),1);function Jz({onSelectAgent:G}){let{authFetch:Z}=p(),{currentProjectId:W}=m(),[X,N]=Y.useState([]),[w,K]=Y.useState(!0),[$,J]=Y.useState("all"),[Q,q]=Y.useState("all"),[_,R]=Y.useState(null),[L,A]=Y.useState(!1),P=Y.useRef(null),{events:C}=b({category:"TASK"}),F=Y.useCallback(async()=>{try{let B=`/api/tasks?status=${$}`;if(W!==null)B+=`&project_id=${encodeURIComponent(W)}`;let U=await(await Z(B)).json();N(U.tasks||[])}catch(B){console.error("Failed to fetch tasks:",B)}finally{K(!1)}},[Z,$,W]);Y.useEffect(()=>{F()},[F]),Y.useEffect(()=>{if(!C.length)return;let B=C[0];if(!B||B.id===P.current)return;let H=B.type;if(H==="task_created"||H==="task_updated"||H==="task_deleted")P.current=B.id,console.log("[TasksPage] Telemetry event:",H),F()},[C,F]);let r=Y.useCallback(async(B)=>{R(B),A(!0);try{let H=await Z(`/api/tasks/${B.agentId}/${B.id}`);if(console.log("[TasksPage] Fetch task response status:",H.status),H.ok){let U=await H.json();if(console.log("[TasksPage] Task data:",U),console.log("[TasksPage] Has trajectory:",!!U.task?.trajectory,"Length:",U.task?.trajectory?.length),U.task)R({...U.task,agentId:B.agentId,agentName:B.agentName})}else console.error("[TasksPage] Failed to fetch task:",H.status,await H.text())}catch(H){console.error("Failed to fetch task details:",H)}finally{A(!1)}},[Z]),S=Y.useMemo(()=>{let B=new Map;for(let H of X){let U=H.agentId||H.agent_id,O=H.agentName||H.agent_name;if(U&&O&&!B.has(U))B.set(U,O)}return Array.from(B.entries()).sort((H,U)=>H[1].localeCompare(U[1]))},[X]),f=Y.useMemo(()=>{return[...Q==="all"?X:X.filter((H)=>(H.agentId||H.agent_id)===Q)].sort((H,U)=>{if(H.status==="running"&&U.status!=="running")return-1;if(U.status==="running"&&H.status!=="running")return 1;let O=H.status==="pending",v=U.status==="pending";if(O&&!v)return-1;if(v&&!O)return 1;if(O&&v||H.status==="running"&&U.status==="running"){let T=H.next_run||H.execute_at||null,h=U.next_run||U.execute_at||null,n=T?new Date(T).getTime():1/0,o=h?new Date(h).getTime():1/0;return n-o}let x=H.completed_at||H.executed_at||H.created_at,E=U.completed_at||U.executed_at||U.created_at;return new Date(E).getTime()-new Date(x).getTime()})},[X,Q]),I={pending:"bg-yellow-500/20 text-yellow-400",running:"bg-blue-500/20 text-blue-400",completed:"bg-green-500/20 text-green-400",failed:"bg-red-500/20 text-red-400",cancelled:"bg-gray-500/20 text-gray-400"};return z.jsxDEV("div",{className:"flex-1 flex overflow-hidden",children:[z.jsxDEV("div",{className:`flex-1 p-4 md:p-6 overflow-auto ${_?"hidden md:block md:w-1/2 lg:w-2/3":""}`,children:z.jsxDEV("div",{className:"max-w-4xl",children:[z.jsxDEV("div",{className:"mb-6",children:[z.jsxDEV("div",{className:"mb-4",children:[z.jsxDEV("h1",{className:"text-xl md:text-2xl font-semibold mb-1",children:"Tasks"},void 0,!1,void 0,this),z.jsxDEV("p",{className:"text-sm text-[#666]",children:"View tasks from all running agents"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z.jsxDEV("div",{className:"flex items-center gap-3 flex-wrap pb-1",children:[z.jsxDEV("div",{className:"flex gap-2 overflow-x-auto scrollbar-hide",children:[{value:"all",label:"All"},{value:"pending",label:"Pending"},{value:"running",label:"Running"},{value:"completed",label:"Completed"},{value:"failed",label:"Failed"}].map((B)=>z.jsxDEV("button",{onClick:()=>J(B.value),className:`px-3 py-1.5 rounded text-sm transition whitespace-nowrap ${$===B.value?"bg-[#f97316] text-black":"bg-[#1a1a1a] hover:bg-[#222]"}`,children:B.label},B.value,!1,void 0,this))},void 0,!1,void 0,this),S.length>0&&z.jsxDEV("div",{className:"w-48",children:z.jsxDEV(u,{value:Q,onChange:q,placeholder:"All agents",compact:!0,options:[{value:"all",label:"All agents"},...S.map(([B,H])=>({value:B,label:H}))]},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w?z.jsxDEV("div",{className:"text-center py-12 text-[#666]",children:"Loading tasks..."},void 0,!1,void 0,this):f.length===0?z.jsxDEV("div",{className:"text-center py-12",children:[z.jsxDEV(l,{className:"w-12 h-12 mx-auto mb-4 text-[#333]"},void 0,!1,void 0,this),z.jsxDEV("p",{className:"text-[#666]",children:"No tasks found"},void 0,!1,void 0,this),z.jsxDEV("p",{className:"text-sm text-[#444] mt-1",children:"Tasks will appear here when agents create them"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):z.jsxDEV("div",{className:"space-y-3",children:f.map((B)=>z.jsxDEV("div",{onClick:()=>r(B),className:`bg-[#111] border rounded-lg p-4 cursor-pointer transition ${_?.id===B.id&&_?.agentId===B.agentId?"border-[#f97316]":"border-[#1a1a1a] hover:border-[#333]"}`,children:[z.jsxDEV("div",{className:"flex items-start justify-between mb-2",children:[z.jsxDEV("div",{className:"flex-1",children:[z.jsxDEV("h3",{className:"font-medium",children:B.title},void 0,!1,void 0,this),z.jsxDEV("p",{className:"text-sm text-[#666]",children:B.agentName},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z.jsxDEV("span",{className:`px-2 py-1 rounded text-xs font-medium ${I[B.status]||I.pending}`,children:B.status},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B.description&&z.jsxDEV("p",{className:"text-sm text-[#888] mb-2 line-clamp-2",children:B.description},void 0,!1,void 0,this),z.jsxDEV("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-[#555]",children:[z.jsxDEV("span",{className:"flex items-center gap-1",children:[B.type==="recurring"?z.jsxDEV(i,{className:"w-3.5 h-3.5"},void 0,!1,void 0,this):B.execute_at?z.jsxDEV(V,{className:"w-3.5 h-3.5"},void 0,!1,void 0,this):z.jsxDEV(d,{className:"w-3.5 h-3.5"},void 0,!1,void 0,this),B.type==="recurring"&&B.recurrence?D(B.recurrence):B.type]},void 0,!0,void 0,this),z.jsxDEV("span",{children:["Priority: ",B.priority]},void 0,!0,void 0,this),B.next_run&&z.jsxDEV("span",{className:"text-[#f97316]",children:M(B.next_run)},void 0,!1,void 0,this),!B.next_run&&B.execute_at&&z.jsxDEV("span",{className:"text-[#f97316]",children:M(B.execute_at)},void 0,!1,void 0,this),z.jsxDEV("span",{children:["Created: ",new Date(B.created_at).toLocaleDateString()]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},`${B.agentId}-${B.id}`,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),_&&z.jsxDEV(a,{task:_,statusColors:I,onClose:()=>R(null),onSelectAgent:G,loading:L},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function a({task:G,statusColors:Z,onClose:W,onSelectAgent:X,loading:N}){return z.jsxDEV("div",{className:"w-full md:w-1/2 lg:w-1/3 border-l border-[#1a1a1a] bg-[#0a0a0a] flex flex-col overflow-hidden",children:[z.jsxDEV("div",{className:"flex items-center justify-between p-4 border-b border-[#1a1a1a]",children:[z.jsxDEV("h2",{className:"font-medium truncate pr-2",children:"Task Details"},void 0,!1,void 0,this),z.jsxDEV("button",{onClick:W,className:"text-[#666] hover:text-[#e0e0e0] transition",children:z.jsxDEV(c,{},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z.jsxDEV("div",{className:"flex-1 overflow-auto p-4 space-y-4",children:[z.jsxDEV("div",{children:[z.jsxDEV("div",{className:"flex items-start justify-between gap-2 mb-2",children:[z.jsxDEV("h3",{className:"text-lg font-medium",children:G.title},void 0,!1,void 0,this),z.jsxDEV("span",{className:`px-2 py-1 rounded text-xs font-medium flex-shrink-0 ${Z[G.status]}`,children:G.status},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z.jsxDEV("button",{onClick:()=>X?.(G.agentId),className:"text-sm text-[#f97316] hover:underline",children:G.agentName},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.description&&z.jsxDEV("div",{children:[z.jsxDEV("h4",{className:"text-xs text-[#666] uppercase tracking-wider mb-1",children:"Description"},void 0,!1,void 0,this),z.jsxDEV("p",{className:"text-sm text-[#888] whitespace-pre-wrap",children:G.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z.jsxDEV("div",{className:"grid grid-cols-2 gap-3 text-sm",children:[z.jsxDEV("div",{children:[z.jsxDEV("span",{className:"text-[#666]",children:"Type"},void 0,!1,void 0,this),z.jsxDEV("p",{className:"capitalize",children:G.type},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z.jsxDEV("div",{children:[z.jsxDEV("span",{className:"text-[#666]",children:"Priority"},void 0,!1,void 0,this),z.jsxDEV("p",{children:G.priority},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z.jsxDEV("div",{children:[z.jsxDEV("span",{className:"text-[#666]",children:"Source"},void 0,!1,void 0,this),z.jsxDEV("p",{className:"capitalize",children:G.source},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.recurrence&&z.jsxDEV("div",{children:[z.jsxDEV("span",{className:"text-[#666]",children:"Recurrence"},void 0,!1,void 0,this),z.jsxDEV("p",{children:D(G.recurrence)},void 0,!1,void 0,this),z.jsxDEV("p",{className:"text-xs text-[#444] mt-0.5 font-mono",children:G.recurrence},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),z.jsxDEV("div",{className:"space-y-2 text-sm",children:[z.jsxDEV("div",{className:"flex justify-between",children:[z.jsxDEV("span",{className:"text-[#666]",children:"Created"},void 0,!1,void 0,this),z.jsxDEV("span",{children:new Date(G.created_at).toLocaleString()},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.execute_at&&z.jsxDEV("div",{className:"flex justify-between",children:[z.jsxDEV("span",{className:"text-[#666]",children:"Scheduled"},void 0,!1,void 0,this),z.jsxDEV("span",{className:"text-[#f97316]",children:M(G.execute_at)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.executed_at&&z.jsxDEV("div",{className:"flex justify-between",children:[z.jsxDEV("span",{className:"text-[#666]",children:"Started"},void 0,!1,void 0,this),z.jsxDEV("span",{children:new Date(G.executed_at).toLocaleString()},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.completed_at&&z.jsxDEV("div",{className:"flex justify-between",children:[z.jsxDEV("span",{className:"text-[#666]",children:"Completed"},void 0,!1,void 0,this),z.jsxDEV("span",{children:new Date(G.completed_at).toLocaleString()},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.next_run&&z.jsxDEV("div",{className:"flex justify-between",children:[z.jsxDEV("span",{className:"text-[#666]",children:"Next Run"},void 0,!1,void 0,this),z.jsxDEV("span",{className:"text-[#f97316]",children:M(G.next_run)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),G.status==="failed"&&G.error&&z.jsxDEV("div",{className:"min-w-0",children:[z.jsxDEV("h4",{className:"text-xs text-red-400 uppercase tracking-wider mb-1",children:"Error"},void 0,!1,void 0,this),z.jsxDEV("div",{className:"bg-red-500/10 border border-red-500/20 rounded p-3 overflow-x-auto",children:z.jsxDEV("pre",{className:"text-sm text-red-400 whitespace-pre-wrap break-words",children:G.error},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.status==="completed"&&G.result&&z.jsxDEV("div",{className:"min-w-0",children:[z.jsxDEV("h4",{className:"text-xs text-green-400 uppercase tracking-wider mb-1",children:"Result"},void 0,!1,void 0,this),z.jsxDEV("div",{className:"bg-green-500/10 border border-green-500/20 rounded p-3 overflow-x-auto",children:z.jsxDEV("pre",{className:"text-sm text-green-400 whitespace-pre-wrap break-words",children:typeof G.result==="string"?G.result:JSON.stringify(G.result,null,2)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),N&&!G.trajectory&&z.jsxDEV("div",{children:[z.jsxDEV("h4",{className:"text-xs text-[#666] uppercase tracking-wider mb-2",children:"Trajectory"},void 0,!1,void 0,this),z.jsxDEV("div",{className:"text-sm text-[#555]",children:"Loading trajectory..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.trajectory&&G.trajectory.length>0&&z.jsxDEV("div",{children:[z.jsxDEV("h4",{className:"text-xs text-[#666] uppercase tracking-wider mb-2",children:["Trajectory (",G.trajectory.length," steps)"]},void 0,!0,void 0,this),z.jsxDEV(e,{trajectory:G.trajectory},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function e({trajectory:G}){let[Z,W]=Y.useState(new Set),X=(K)=>{W(($)=>{let J=new Set($);if(J.has(K))J.delete(K);else J.add(K);return J})},N={user:{bg:"bg-blue-500/10",text:"text-blue-400",icon:"\uD83D\uDC64",label:"User"},assistant:{bg:"bg-purple-500/10",text:"text-purple-400",icon:"\uD83E\uDD16",label:"Assistant"}},w=(K)=>{let $=K.content;if(typeof $==="string"){let J=$.length>200,Q=Z.has(K.id);return z.jsxDEV("div",{children:[z.jsxDEV("p",{className:`text-sm text-[#ccc] whitespace-pre-wrap break-words ${!Q&&J?"line-clamp-4":""}`,children:$},void 0,!1,void 0,this),J&&z.jsxDEV("button",{onClick:()=>X(K.id),className:"text-xs text-[#666] hover:text-[#888] mt-1",children:Q?"Show less":"Show more..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}return z.jsxDEV("div",{className:"space-y-2",children:$.map((J,Q)=>{if(J.type==="tool_use"){let q=JSON.stringify(J.input,null,2),_=q.length>150,R=`${K.id}-${Q}`,L=Z.has(R);return z.jsxDEV("div",{className:"bg-orange-500/10 border border-orange-500/20 rounded p-2",children:[z.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[z.jsxDEV("span",{className:"text-orange-400",children:"\uD83D\uDD27"},void 0,!1,void 0,this),z.jsxDEV("span",{className:"text-xs font-medium text-orange-400",children:"Tool Call"},void 0,!1,void 0,this),z.jsxDEV("span",{className:"text-xs text-[#888]",children:J.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z.jsxDEV("pre",{className:`text-xs text-[#888] overflow-x-auto ${!L&&_?"line-clamp-3":""}`,children:q},void 0,!1,void 0,this),_&&z.jsxDEV("button",{onClick:()=>X(R),className:"text-xs text-[#666] hover:text-[#888] mt-1",children:L?"Show less":"Show more..."},void 0,!1,void 0,this)]},Q,!0,void 0,this)}if(J.type==="tool_result"){let q=J.is_error,_=`${K.id}-${Q}`,R=Z.has(_),L=J.content.length>150;return z.jsxDEV("div",{className:`${q?"bg-red-500/10 border-red-500/20":"bg-teal-500/10 border-teal-500/20"} border rounded p-2`,children:[z.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[z.jsxDEV("span",{children:q?"❌":"\uD83D\uDCCB"},void 0,!1,void 0,this),z.jsxDEV("span",{className:`text-xs font-medium ${q?"text-red-400":"text-teal-400"}`,children:"Tool Result"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z.jsxDEV("pre",{className:`text-xs text-[#888] overflow-x-auto whitespace-pre-wrap break-words ${!R&&L?"line-clamp-3":""}`,children:J.content},void 0,!1,void 0,this),L&&z.jsxDEV("button",{onClick:()=>X(_),className:"text-xs text-[#666] hover:text-[#888] mt-1",children:R?"Show less":"Show more..."},void 0,!1,void 0,this)]},Q,!0,void 0,this)}return null})},void 0,!1,void 0,this)};return z.jsxDEV("div",{className:"space-y-2",children:G.map((K)=>{let $=N[K.role]||N.assistant;return z.jsxDEV("div",{className:`${$.bg} border border-[#1a1a1a] rounded overflow-hidden p-3`,children:[z.jsxDEV("div",{className:"flex items-center gap-2 mb-2",children:[z.jsxDEV("span",{children:$.icon},void 0,!1,void 0,this),z.jsxDEV("span",{className:`text-xs font-medium ${$.text}`,children:$.label},void 0,!1,void 0,this),K.model&&z.jsxDEV("span",{className:"text-xs text-[#555]",children:["· ",K.model]},void 0,!0,void 0,this),z.jsxDEV("span",{className:"text-xs text-[#555]",children:["· ",new Date(K.created_at).toLocaleTimeString()]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w(K)]},K.id,!0,void 0,this)})},void 0,!1,void 0,this)}var j=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];function D(G){try{let Z=G.trim().split(/\s+/);if(Z.length!==5)return G;let[W,X,N,w,K]=Z;if(W.startsWith("*/")&&X==="*"&&N==="*"&&w==="*"&&K==="*"){let J=parseInt(W.slice(2));if(J===1)return"Every minute";return`Every ${J} minutes`}if(W!=="*"&&!W.includes("/")&&X==="*"&&N==="*"&&w==="*"&&K==="*")return"Every hour";if(X.startsWith("*/")&&N==="*"&&w==="*"&&K==="*"){let J=parseInt(X.slice(2));if(J===1)return"Every hour";return`Every ${J} hours`}let $=(J,Q)=>{let q=parseInt(J),_=parseInt(Q);if(isNaN(q))return"";let R=q>=12?"PM":"AM";return`${q===0?12:q>12?q-12:q}:${_.toString().padStart(2,"0")} ${R}`};if(X!=="*"&&!X.includes("/")&&N==="*"&&w==="*"){let J=$(X,W);if(K==="*")return`Daily at ${J}`;let Q=K.split(",").map((q)=>{let _=parseInt(q.trim());return j[_]||q});if(Q.length===7)return`Daily at ${J}`;if(Q.length===5&&!Q.includes("Sat")&&!Q.includes("Sun"))return`Weekdays at ${J}`;if(Q.length===1)return`Weekly on ${Q[0]} at ${J}`;return`${Q.join(" & ")} at ${J}`}return G}catch{return G}}function M(G){let Z=new Date(G),W=new Date,X=Z.getTime()-W.getTime(),N=Math.abs(X),w=X>0,K=Math.floor(N/60000),$=Math.floor(N/3600000),J=Math.floor(N/86400000),Q=Z.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"}),q=Z.toDateString()===W.toDateString(),_=new Date(W);_.setDate(_.getDate()+1);let R=Z.toDateString()===_.toDateString(),L=new Date(W);L.setDate(L.getDate()-1);let A=Z.toDateString()===L.toDateString();if(q){if(K<1)return w?"now":"just now";if(K<60)return w?`in ${K} min (${Q})`:`${K} min ago`;return w?`in ${$}h (${Q})`:`${$}h ago`}if(R)return`Tomorrow at ${Q}`;if(A)return`Yesterday at ${Q}`;if(J<7)return`${j[Z.getDay()]} at ${Q}`;return Z.toLocaleDateString([],{month:"short",day:"numeric"})+` at ${Q}`}
|
|
2
|
-
export{Jz as d,a as e,e as f,D as g,M as h};
|
|
3
|
-
|
|
4
|
-
//# debugId=8FAAA8C9DC4BD64D64756E2164756E21
|
package/dist/App.z4s9zkw5.js.map
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/web/components/tasks/TasksPage.tsx"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import React, { useState, useEffect, useCallback, useRef, useMemo } from \"react\";\nimport { TasksIcon, CloseIcon, RecurringIcon, ScheduledIcon, TaskOnceIcon } from \"../common/Icons\";\nimport { Select } from \"../common/Select\";\nimport { useAuth, useProjects } from \"../../context\";\nimport { useTelemetry } from \"../../context/TelemetryContext\";\nimport type { Task, TaskTrajectoryStep, ToolUseBlock, ToolResultBlock } from \"../../types\";\n\ninterface TasksPageProps {\n onSelectAgent?: (agentId: string) => void;\n}\n\nexport function TasksPage({ onSelectAgent }: TasksPageProps) {\n const { authFetch } = useAuth();\n const { currentProjectId } = useProjects();\n const [tasks, setTasks] = useState<Task[]>([]);\n const [loading, setLoading] = useState(true);\n const [filter, setFilter] = useState<string>(\"all\");\n const [agentFilter, setAgentFilter] = useState<string>(\"all\");\n const [selectedTask, setSelectedTask] = useState<Task | null>(null);\n const [loadingTask, setLoadingTask] = useState(false);\n const lastProcessedEventRef = useRef<string | null>(null);\n\n // Subscribe to task telemetry events for real-time updates\n const { events: taskEvents } = useTelemetry({ category: \"TASK\" });\n\n const fetchTasks = useCallback(async () => {\n try {\n let url = `/api/tasks?status=${filter}`;\n if (currentProjectId !== null) {\n url += `&project_id=${encodeURIComponent(currentProjectId)}`;\n }\n const res = await authFetch(url);\n const data = await res.json();\n setTasks(data.tasks || []);\n } catch (e) {\n console.error(\"Failed to fetch tasks:\", e);\n } finally {\n setLoading(false);\n }\n }, [authFetch, filter, currentProjectId]);\n\n // Initial fetch\n useEffect(() => {\n fetchTasks();\n }, [fetchTasks]);\n\n // Handle real-time task events from telemetry - use as trigger to refetch\n // since telemetry data is incomplete (missing id, agentId, status, etc.)\n useEffect(() => {\n if (!taskEvents.length) return;\n\n const latestEvent = taskEvents[0];\n if (!latestEvent || latestEvent.id === lastProcessedEventRef.current) return;\n\n // Only react to task mutation events\n const eventType = latestEvent.type;\n if (eventType === \"task_created\" || eventType === \"task_updated\" || eventType === \"task_deleted\") {\n lastProcessedEventRef.current = latestEvent.id;\n console.log(\"[TasksPage] Telemetry event:\", eventType);\n // Refetch to get complete task data\n fetchTasks();\n }\n }, [taskEvents, fetchTasks]);\n\n // Fetch full task details (including trajectory) when selecting a task\n const selectTask = useCallback(async (task: Task) => {\n // Set task immediately for quick feedback\n setSelectedTask(task);\n setLoadingTask(true);\n\n try {\n const res = await authFetch(`/api/tasks/${task.agentId}/${task.id}`);\n console.log(\"[TasksPage] Fetch task response status:\", res.status);\n if (res.ok) {\n const data = await res.json();\n console.log(\"[TasksPage] Task data:\", data);\n console.log(\"[TasksPage] Has trajectory:\", !!data.task?.trajectory, \"Length:\", data.task?.trajectory?.length);\n if (data.task) {\n // Merge with agentId/agentName since API might not include them\n setSelectedTask({ ...data.task, agentId: task.agentId, agentName: task.agentName });\n }\n } else {\n console.error(\"[TasksPage] Failed to fetch task:\", res.status, await res.text());\n }\n } catch (e) {\n console.error(\"Failed to fetch task details:\", e);\n } finally {\n setLoadingTask(false);\n }\n }, [authFetch]);\n\n // Extract unique agents from tasks for the agent filter\n const uniqueAgents = useMemo(() => {\n const map = new Map<string, string>();\n for (const t of tasks) {\n const id = t.agentId || (t as any).agent_id;\n const name = t.agentName || (t as any).agent_name;\n if (id && name && !map.has(id)) {\n map.set(id, name);\n }\n }\n return Array.from(map.entries()).sort((a, b) => a[1].localeCompare(b[1]));\n }, [tasks]);\n\n // Sort tasks: running first, then pending by next execution (soonest first), then completed/failed by date\n const sortedTasks = useMemo(() => {\n const filtered = agentFilter === \"all\" ? tasks : tasks.filter(t => (t.agentId || (t as any).agent_id) === agentFilter);\n return [...filtered].sort((a, b) => {\n // Running tasks first\n if (a.status === \"running\" && b.status !== \"running\") return -1;\n if (b.status === \"running\" && a.status !== \"running\") return 1;\n // Pending tasks next\n const aIsPending = a.status === \"pending\";\n const bIsPending = b.status === \"pending\";\n if (aIsPending && !bIsPending) return -1;\n if (bIsPending && !aIsPending) return 1;\n // For running/pending: sort by next execution time (soonest first)\n if (aIsPending && bIsPending || a.status === \"running\" && b.status === \"running\") {\n const aTime = a.next_run || a.execute_at || null;\n const bTime = b.next_run || b.execute_at || null;\n const aTs = aTime ? new Date(aTime).getTime() : Infinity;\n const bTs = bTime ? new Date(bTime).getTime() : Infinity;\n return aTs - bTs;\n }\n // For completed/failed: most recent first\n const aDate = a.completed_at || a.executed_at || a.created_at;\n const bDate = b.completed_at || b.executed_at || b.created_at;\n return new Date(bDate).getTime() - new Date(aDate).getTime();\n });\n }, [tasks, agentFilter]);\n\n const statusColors: Record<string, string> = {\n pending: \"bg-yellow-500/20 text-yellow-400\",\n running: \"bg-blue-500/20 text-blue-400\",\n completed: \"bg-green-500/20 text-green-400\",\n failed: \"bg-red-500/20 text-red-400\",\n cancelled: \"bg-gray-500/20 text-gray-400\",\n };\n\n const filterOptions = [\n { value: \"all\", label: \"All\" },\n { value: \"pending\", label: \"Pending\" },\n { value: \"running\", label: \"Running\" },\n { value: \"completed\", label: \"Completed\" },\n { value: \"failed\", label: \"Failed\" },\n ];\n\n return (\n <div className=\"flex-1 flex overflow-hidden\">\n {/* Task List */}\n <div className={`flex-1 p-4 md:p-6 overflow-auto ${selectedTask ? 'hidden md:block md:w-1/2 lg:w-2/3' : ''}`}>\n <div className=\"max-w-4xl\">\n <div className=\"mb-6\">\n <div className=\"mb-4\">\n <h1 className=\"text-xl md:text-2xl font-semibold mb-1\">Tasks</h1>\n <p className=\"text-sm text-[#666]\">\n View tasks from all running agents\n </p>\n </div>\n <div className=\"flex items-center gap-3 flex-wrap pb-1\">\n <div className=\"flex gap-2 overflow-x-auto scrollbar-hide\">\n {filterOptions.map(opt => (\n <button\n key={opt.value}\n onClick={() => setFilter(opt.value)}\n className={`px-3 py-1.5 rounded text-sm transition whitespace-nowrap ${\n filter === opt.value\n ? \"bg-[#f97316] text-black\"\n : \"bg-[#1a1a1a] hover:bg-[#222]\"\n }`}\n >\n {opt.label}\n </button>\n ))}\n </div>\n {uniqueAgents.length > 0 && (\n <div className=\"w-48\">\n <Select\n value={agentFilter}\n onChange={setAgentFilter}\n placeholder=\"All agents\"\n compact\n options={[\n { value: \"all\", label: \"All agents\" },\n ...uniqueAgents.map(([id, name]) => ({ value: id, label: name })),\n ]}\n />\n </div>\n )}\n </div>\n </div>\n\n {loading ? (\n <div className=\"text-center py-12 text-[#666]\">Loading tasks...</div>\n ) : sortedTasks.length === 0 ? (\n <div className=\"text-center py-12\">\n <TasksIcon className=\"w-12 h-12 mx-auto mb-4 text-[#333]\" />\n <p className=\"text-[#666]\">No tasks found</p>\n <p className=\"text-sm text-[#444] mt-1\">\n Tasks will appear here when agents create them\n </p>\n </div>\n ) : (\n <div className=\"space-y-3\">\n {sortedTasks.map(task => (\n <div\n key={`${task.agentId}-${task.id}`}\n onClick={() => selectTask(task)}\n className={`bg-[#111] border rounded-lg p-4 cursor-pointer transition ${\n selectedTask?.id === task.id && selectedTask?.agentId === task.agentId\n ? \"border-[#f97316]\"\n : \"border-[#1a1a1a] hover:border-[#333]\"\n }`}\n >\n <div className=\"flex items-start justify-between mb-2\">\n <div className=\"flex-1\">\n <h3 className=\"font-medium\">{task.title}</h3>\n <p className=\"text-sm text-[#666]\">{task.agentName}</p>\n </div>\n <span className={`px-2 py-1 rounded text-xs font-medium ${statusColors[task.status] || statusColors.pending}`}>\n {task.status}\n </span>\n </div>\n\n {task.description && (\n <p className=\"text-sm text-[#888] mb-2 line-clamp-2\">\n {task.description}\n </p>\n )}\n\n <div className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-[#555]\">\n <span className=\"flex items-center gap-1\">\n {task.type === \"recurring\"\n ? <RecurringIcon className=\"w-3.5 h-3.5\" />\n : task.execute_at\n ? <ScheduledIcon className=\"w-3.5 h-3.5\" />\n : <TaskOnceIcon className=\"w-3.5 h-3.5\" />\n }\n {task.type === \"recurring\" && task.recurrence ? formatCron(task.recurrence) : task.type}\n </span>\n <span>Priority: {task.priority}</span>\n {task.next_run && (\n <span className=\"text-[#f97316]\">{formatRelativeTime(task.next_run)}</span>\n )}\n {!task.next_run && task.execute_at && (\n <span className=\"text-[#f97316]\">{formatRelativeTime(task.execute_at)}</span>\n )}\n <span>Created: {new Date(task.created_at).toLocaleDateString()}</span>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* Task Detail Panel */}\n {selectedTask && (\n <TaskDetailPanel\n task={selectedTask}\n statusColors={statusColors}\n onClose={() => setSelectedTask(null)}\n onSelectAgent={onSelectAgent}\n loading={loadingTask}\n />\n )}\n </div>\n );\n}\n\nexport interface TaskDetailPanelProps {\n task: Task;\n statusColors: Record<string, string>;\n onClose: () => void;\n onSelectAgent?: (agentId: string) => void;\n loading?: boolean;\n}\n\nexport function TaskDetailPanel({ task, statusColors, onClose, onSelectAgent, loading }: TaskDetailPanelProps) {\n return (\n <div className=\"w-full md:w-1/2 lg:w-1/3 border-l border-[#1a1a1a] bg-[#0a0a0a] flex flex-col overflow-hidden\">\n {/* Header */}\n <div className=\"flex items-center justify-between p-4 border-b border-[#1a1a1a]\">\n <h2 className=\"font-medium truncate pr-2\">Task Details</h2>\n <button onClick={onClose} className=\"text-[#666] hover:text-[#e0e0e0] transition\">\n <CloseIcon />\n </button>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-auto p-4 space-y-4\">\n {/* Title & Status */}\n <div>\n <div className=\"flex items-start justify-between gap-2 mb-2\">\n <h3 className=\"text-lg font-medium\">{task.title}</h3>\n <span className={`px-2 py-1 rounded text-xs font-medium flex-shrink-0 ${statusColors[task.status]}`}>\n {task.status}\n </span>\n </div>\n <button\n onClick={() => onSelectAgent?.(task.agentId)}\n className=\"text-sm text-[#f97316] hover:underline\"\n >\n {task.agentName}\n </button>\n </div>\n\n {/* Description */}\n {task.description && (\n <div>\n <h4 className=\"text-xs text-[#666] uppercase tracking-wider mb-1\">Description</h4>\n <p className=\"text-sm text-[#888] whitespace-pre-wrap\">{task.description}</p>\n </div>\n )}\n\n {/* Metadata */}\n <div className=\"grid grid-cols-2 gap-3 text-sm\">\n <div>\n <span className=\"text-[#666]\">Type</span>\n <p className=\"capitalize\">{task.type}</p>\n </div>\n <div>\n <span className=\"text-[#666]\">Priority</span>\n <p>{task.priority}</p>\n </div>\n <div>\n <span className=\"text-[#666]\">Source</span>\n <p className=\"capitalize\">{task.source}</p>\n </div>\n {task.recurrence && (\n <div>\n <span className=\"text-[#666]\">Recurrence</span>\n <p>{formatCron(task.recurrence)}</p>\n <p className=\"text-xs text-[#444] mt-0.5 font-mono\">{task.recurrence}</p>\n </div>\n )}\n </div>\n\n {/* Timestamps */}\n <div className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-[#666]\">Created</span>\n <span>{new Date(task.created_at).toLocaleString()}</span>\n </div>\n {task.execute_at && (\n <div className=\"flex justify-between\">\n <span className=\"text-[#666]\">Scheduled</span>\n <span className=\"text-[#f97316]\">{formatRelativeTime(task.execute_at)}</span>\n </div>\n )}\n {task.executed_at && (\n <div className=\"flex justify-between\">\n <span className=\"text-[#666]\">Started</span>\n <span>{new Date(task.executed_at).toLocaleString()}</span>\n </div>\n )}\n {task.completed_at && (\n <div className=\"flex justify-between\">\n <span className=\"text-[#666]\">Completed</span>\n <span>{new Date(task.completed_at).toLocaleString()}</span>\n </div>\n )}\n {task.next_run && (\n <div className=\"flex justify-between\">\n <span className=\"text-[#666]\">Next Run</span>\n <span className=\"text-[#f97316]\">{formatRelativeTime(task.next_run)}</span>\n </div>\n )}\n </div>\n\n {/* Error */}\n {task.status === \"failed\" && task.error && (\n <div className=\"min-w-0\">\n <h4 className=\"text-xs text-red-400 uppercase tracking-wider mb-1\">Error</h4>\n <div className=\"bg-red-500/10 border border-red-500/20 rounded p-3 overflow-x-auto\">\n <pre className=\"text-sm text-red-400 whitespace-pre-wrap break-words\">{task.error}</pre>\n </div>\n </div>\n )}\n\n {/* Result */}\n {task.status === \"completed\" && task.result && (\n <div className=\"min-w-0\">\n <h4 className=\"text-xs text-green-400 uppercase tracking-wider mb-1\">Result</h4>\n <div className=\"bg-green-500/10 border border-green-500/20 rounded p-3 overflow-x-auto\">\n <pre className=\"text-sm text-green-400 whitespace-pre-wrap break-words\">\n {typeof task.result === \"string\" ? task.result : JSON.stringify(task.result, null, 2)}\n </pre>\n </div>\n </div>\n )}\n\n {/* Trajectory */}\n {loading && !task.trajectory && (\n <div>\n <h4 className=\"text-xs text-[#666] uppercase tracking-wider mb-2\">Trajectory</h4>\n <div className=\"text-sm text-[#555]\">Loading trajectory...</div>\n </div>\n )}\n {task.trajectory && task.trajectory.length > 0 && (\n <div>\n <h4 className=\"text-xs text-[#666] uppercase tracking-wider mb-2\">\n Trajectory ({task.trajectory.length} steps)\n </h4>\n <TrajectoryView trajectory={task.trajectory} />\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport function TrajectoryView({ trajectory }: { trajectory: TaskTrajectoryStep[] }) {\n const [expanded, setExpanded] = useState<Set<string>>(new Set());\n\n const toggleStep = (id: string) => {\n setExpanded(prev => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n };\n\n const roleStyles = {\n user: { bg: \"bg-blue-500/10\", text: \"text-blue-400\", icon: \"👤\", label: \"User\" },\n assistant: { bg: \"bg-purple-500/10\", text: \"text-purple-400\", icon: \"🤖\", label: \"Assistant\" },\n };\n\n // Render content which can be string or array of blocks\n const renderContent = (step: TaskTrajectoryStep) => {\n const content = step.content;\n\n // String content (text message)\n if (typeof content === \"string\") {\n const isLong = content.length > 200;\n const isExpanded = expanded.has(step.id);\n\n return (\n <div>\n <p className={`text-sm text-[#ccc] whitespace-pre-wrap break-words ${!isExpanded && isLong ? 'line-clamp-4' : ''}`}>\n {content}\n </p>\n {isLong && (\n <button\n onClick={() => toggleStep(step.id)}\n className=\"text-xs text-[#666] hover:text-[#888] mt-1\"\n >\n {isExpanded ? \"Show less\" : \"Show more...\"}\n </button>\n )}\n </div>\n );\n }\n\n // Array content (tool_use or tool_result blocks)\n return (\n <div className=\"space-y-2\">\n {content.map((block, idx) => {\n if (block.type === \"tool_use\") {\n const inputStr = JSON.stringify(block.input, null, 2);\n const isLong = inputStr.length > 150;\n const blockId = `${step.id}-${idx}`;\n const isExpanded = expanded.has(blockId);\n\n return (\n <div key={idx} className=\"bg-orange-500/10 border border-orange-500/20 rounded p-2\">\n <div className=\"flex items-center gap-2 mb-1\">\n <span className=\"text-orange-400\">🔧</span>\n <span className=\"text-xs font-medium text-orange-400\">Tool Call</span>\n <span className=\"text-xs text-[#888]\">{block.name}</span>\n </div>\n <pre className={`text-xs text-[#888] overflow-x-auto ${!isExpanded && isLong ? 'line-clamp-3' : ''}`}>\n {inputStr}\n </pre>\n {isLong && (\n <button\n onClick={() => toggleStep(blockId)}\n className=\"text-xs text-[#666] hover:text-[#888] mt-1\"\n >\n {isExpanded ? \"Show less\" : \"Show more...\"}\n </button>\n )}\n </div>\n );\n }\n\n if (block.type === \"tool_result\") {\n const isError = block.is_error;\n const blockId = `${step.id}-${idx}`;\n const isExpanded = expanded.has(blockId);\n const isLong = block.content.length > 150;\n\n return (\n <div\n key={idx}\n className={`${isError ? 'bg-red-500/10 border-red-500/20' : 'bg-teal-500/10 border-teal-500/20'} border rounded p-2`}\n >\n <div className=\"flex items-center gap-2 mb-1\">\n <span>{isError ? \"❌\" : \"📋\"}</span>\n <span className={`text-xs font-medium ${isError ? 'text-red-400' : 'text-teal-400'}`}>\n Tool Result\n </span>\n </div>\n <pre className={`text-xs text-[#888] overflow-x-auto whitespace-pre-wrap break-words ${!isExpanded && isLong ? 'line-clamp-3' : ''}`}>\n {block.content}\n </pre>\n {isLong && (\n <button\n onClick={() => toggleStep(blockId)}\n className=\"text-xs text-[#666] hover:text-[#888] mt-1\"\n >\n {isExpanded ? \"Show less\" : \"Show more...\"}\n </button>\n )}\n </div>\n );\n }\n\n return null;\n })}\n </div>\n );\n };\n\n return (\n <div className=\"space-y-2\">\n {trajectory.map((step) => {\n const style = roleStyles[step.role] || roleStyles.assistant;\n\n return (\n <div\n key={step.id}\n className={`${style.bg} border border-[#1a1a1a] rounded overflow-hidden p-3`}\n >\n <div className=\"flex items-center gap-2 mb-2\">\n <span>{style.icon}</span>\n <span className={`text-xs font-medium ${style.text}`}>{style.label}</span>\n {step.model && (\n <span className=\"text-xs text-[#555]\">· {step.model}</span>\n )}\n <span className=\"text-xs text-[#555]\">\n · {new Date(step.created_at).toLocaleTimeString()}\n </span>\n </div>\n {renderContent(step)}\n </div>\n );\n })}\n </div>\n );\n}\n\n// --- Schedule formatting helpers ---\n\nconst DAY_NAMES = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\nexport function formatCron(cron: string): string {\n try {\n const parts = cron.trim().split(/\\s+/);\n if (parts.length !== 5) return cron;\n const [minute, hour, dayOfMonth, month, dayOfWeek] = parts;\n\n // Every N minutes: */N * * * *\n if (minute.startsWith(\"*/\") && hour === \"*\" && dayOfMonth === \"*\" && month === \"*\" && dayOfWeek === \"*\") {\n const n = parseInt(minute.slice(2));\n if (n === 1) return \"Every minute\";\n return `Every ${n} minutes`;\n }\n\n // Every hour: 0 * * * *\n if (minute !== \"*\" && !minute.includes(\"/\") && hour === \"*\" && dayOfMonth === \"*\" && month === \"*\" && dayOfWeek === \"*\") {\n return \"Every hour\";\n }\n\n // Every N hours: 0 */N * * *\n if (hour.startsWith(\"*/\") && dayOfMonth === \"*\" && month === \"*\" && dayOfWeek === \"*\") {\n const n = parseInt(hour.slice(2));\n if (n === 1) return \"Every hour\";\n return `Every ${n} hours`;\n }\n\n const formatTime = (h: string, m: string): string => {\n const hr = parseInt(h);\n const mn = parseInt(m);\n if (isNaN(hr)) return \"\";\n const ampm = hr >= 12 ? \"PM\" : \"AM\";\n const h12 = hr === 0 ? 12 : hr > 12 ? hr - 12 : hr;\n return `${h12}:${mn.toString().padStart(2, \"0\")} ${ampm}`;\n };\n\n if (hour !== \"*\" && !hour.includes(\"/\") && dayOfMonth === \"*\" && month === \"*\") {\n const timeStr = formatTime(hour, minute);\n\n if (dayOfWeek === \"*\") return `Daily at ${timeStr}`;\n\n const days = dayOfWeek.split(\",\").map(d => {\n const num = parseInt(d.trim());\n return DAY_NAMES[num] || d;\n });\n\n if (days.length === 7) return `Daily at ${timeStr}`;\n if (days.length === 5 && !days.includes(\"Sat\") && !days.includes(\"Sun\")) {\n return `Weekdays at ${timeStr}`;\n }\n if (days.length === 1) return `Weekly on ${days[0]} at ${timeStr}`;\n return `${days.join(\" & \")} at ${timeStr}`;\n }\n\n return cron;\n } catch {\n return cron;\n }\n}\n\nexport function formatRelativeTime(dateStr: string): string {\n const date = new Date(dateStr);\n const now = new Date();\n const diffMs = date.getTime() - now.getTime();\n const absDiffMs = Math.abs(diffMs);\n const isFuture = diffMs > 0;\n\n const minutes = Math.floor(absDiffMs / 60000);\n const hours = Math.floor(absDiffMs / 3600000);\n const days = Math.floor(absDiffMs / 86400000);\n\n const timeStr = date.toLocaleTimeString([], { hour: \"numeric\", minute: \"2-digit\" });\n\n const isToday = date.toDateString() === now.toDateString();\n const tomorrow = new Date(now);\n tomorrow.setDate(tomorrow.getDate() + 1);\n const isTomorrow = date.toDateString() === tomorrow.toDateString();\n const yesterday = new Date(now);\n yesterday.setDate(yesterday.getDate() - 1);\n const isYesterday = date.toDateString() === yesterday.toDateString();\n\n if (isToday) {\n if (minutes < 1) return isFuture ? \"now\" : \"just now\";\n if (minutes < 60) return isFuture ? `in ${minutes} min (${timeStr})` : `${minutes} min ago`;\n return isFuture ? `in ${hours}h (${timeStr})` : `${hours}h ago`;\n }\n\n if (isTomorrow) return `Tomorrow at ${timeStr}`;\n if (isYesterday) return `Yesterday at ${timeStr}`;\n\n if (days < 7) {\n const dayName = DAY_NAMES[date.getDay()];\n return `${dayName} at ${timeStr}`;\n }\n\n return date.toLocaleDateString([], { month: \"short\", day: \"numeric\" }) + ` at ${timeStr}`;\n}\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "8FAAA8C9DC4BD64D64756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|
package/dist/McpPage.8vc97z0b.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{d as a,e as b,f as c,g as d,h as e}from"./App.z4s9zkw5.js";import"./App.7fb3e7mp.js";import"./App.7sy3wq8c.js";import"./App.3qw8nben.js";export{e as formatRelativeTime,d as formatCron,c as TrajectoryView,a as TasksPage,b as TaskDetailPanel};
|
|
2
|
-
|
|
3
|
-
//# debugId=5CE043860ECD15A064756E2164756E21
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|