@weppy/roblox-mcp 2.4.0 → 2.4.1
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/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +8 -0
- package/package.json +1 -1
- package/plugins/weppy-roblox-mcp/.claude-plugin/plugin.json +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ChangelogDetailPage-CDMDeGei.js → ChangelogDetailPage-J4ikmBDz.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ChangelogPage-Uhx5ND-w.js → ChangelogPage-CRyiyz5Q.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ConfirmModal-BHlbjwL7.js → ConfirmModal-BqqXDrdf.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ConnectionPage-VXh4Hc9N.js → ConnectionPage-BFjleYaN.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{InfoLabel-CGOLGj5z.js → InfoLabel-DG5Q_c5f.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{OverviewPage-CWnqw6VH.js → OverviewPage-skOVAGFT.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{PlaytestPage-62dIQkgo.js → PlaytestPage-jdZTJ1qE.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{PropertyDiff-DnLJY3ZB.js → PropertyDiff-DGvziVFn.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{SettingsPage-Bjr3d4mM.js → SettingsPage-DNmdsQlc.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{StatusBadge-6VL6HJhv.js → StatusBadge-D-Jxp4ai.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{SyncPage-jdplS80I.js → SyncPage-BTX8aTCf.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{TierComparison-7eRDwSAZ.js → TierComparison-Ct-fbCs5.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{TierPromoProgress-DFG_858F.js → TierPromoProgress-CoEpWzRl.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/ToolsPage-54vIMfZg.css +1 -0
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/ToolsPage-Ov5mDGFU.js +1 -0
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{WhatsNewPage-WPfXt13q.js → WhatsNewPage-DZ-tJeoq.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{index-BhDELp5r.js → index-aMbdHsW4.js} +23 -19
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{useLiveUptime-BT-AiWEA.js → useLiveUptime-BpIv_H68.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/index.html +1 -1
- package/plugins/weppy-roblox-mcp/dist/index.js +67 -67
- package/plugins/weppy-roblox-mcp/roblox-plugin/WeppyRobloxMCP.rbxm +0 -0
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/ToolsPage-B8iwhAW0.css +0 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/ToolsPage-Cc6Vl-VU.js +0 -1
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
._wrapper_1s3lp_2{overflow-x:auto}._table_1s3lp_7{width:100%;border-collapse:collapse;font-family:var(--font-code);font-size:12px}._table_1s3lp_7 th{text-align:left;color:var(--text-muted);font-weight:500;padding:6px 8px;border-bottom:1px solid var(--border);background:var(--bg-secondary);white-space:nowrap;-webkit-user-select:none;user-select:none}._table_1s3lp_7 td{padding:6px 8px;color:var(--text-primary);border-bottom:1px solid var(--border-dim, rgba(255, 255, 255, .04))}._sortable_1s3lp_32{cursor:pointer;transition:color var(--transition)}._sortable_1s3lp_32:hover{color:var(--accent)}._sortArrow_1s3lp_41{margin-left:4px;font-size:10px}._table_1s3lp_7 tbody tr:hover td{background:var(--accent-dim)}._clickable_1s3lp_52{cursor:pointer}._empty_1s3lp_57{text-align:center;color:var(--text-muted);font-style:italic;padding:24px 8px}._page_j7i5b_2{display:flex;flex-direction:column;gap:16px;max-width:900px}._tabs_j7i5b_10{display:flex;gap:2px;border-bottom:1px solid var(--border);margin-bottom:4px}._tab_j7i5b_10{font-family:var(--font-label);font-size:12px;font-weight:500;padding:8px 16px;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-secondary);cursor:pointer;transition:color var(--transition),border-color var(--transition)}._tab_j7i5b_10:hover{color:var(--text-primary)}._tabActive_j7i5b_34{color:var(--accent);border-bottom-color:var(--accent)}._card_j7i5b_40{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:16px 20px}._cardToolbar_j7i5b_47{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}._sectionTitle_j7i5b_55{font-family:var(--font-label);font-size:13px;color:var(--text-primary)}._dangerButton_j7i5b_61{border:1px solid rgba(209,84,84,.5);background:#d154541f;color:#f4c1c1;border-radius:8px;padding:6px 12px;cursor:pointer}._proBadge_j7i5b_71{display:inline-block;margin-left:6px;padding:1px 5px;font-size:9px;font-weight:600;letter-spacing:.05em;color:#1a1407;background:var(--pro-badge);border-radius:3px;vertical-align:middle}._statusOk_j7i5b_85{display:inline-block;padding:2px 8px;border-radius:999px;background:color-mix(in srgb,var(--success) 14%,transparent);color:var(--success);font-weight:500}._statusFallback_j7i5b_94{display:inline-block;padding:2px 8px;border-radius:999px;background:#4990e224;color:#6fb6ff;font-weight:600}._statusUnsupported_j7i5b_103{display:inline-block;padding:2px 8px;border-radius:999px;background:#f0b42826;color:#d7a43c;font-weight:600}._statusError_j7i5b_112{display:inline-block;padding:2px 8px;border-radius:999px;background:#d1545424;color:#f09c9c;font-weight:600}._tierBasic_j7i5b_122{color:var(--text-secondary)}._tierPro_j7i5b_126{color:var(--pro-badge);font-weight:500}._tierMixed_j7i5b_131{color:var(--text-primary);font-weight:500}._errorText_j7i5b_137{color:var(--error)}._filterRow_j7i5b_142{display:flex;align-items:center;gap:12px;margin-bottom:12px}._filterLabel_j7i5b_149{font-family:var(--font-label);font-size:11px;color:var(--text-secondary);display:flex;align-items:center;gap:6px}._filterSelect_j7i5b_158{font-family:var(--font-code);font-size:12px;padding:3px 8px;border:1px solid var(--border);border-radius:4px;background:var(--bg-secondary);color:var(--text-primary)}._expandedRow_j7i5b_169{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);padding:12px 16px;margin-top:8px}._expandedSection_j7i5b_177{margin-bottom:8px;font-size:12px;color:var(--text-secondary)}._expandedSection_j7i5b_177:last-child{margin-bottom:0}._detailList_j7i5b_187{display:flex;flex-direction:column;gap:6px}._detailItem_j7i5b_193{display:flex;flex-wrap:wrap;gap:6px}._detailLabel_j7i5b_199{font-family:var(--font-label);color:var(--text-muted)}._detailValue_j7i5b_204{color:var(--text-primary);word-break:break-word}._pre_j7i5b_209{font-family:var(--font-code);font-size:11px;color:var(--text-primary);background:var(--bg-card);border:1px solid var(--border);border-radius:4px;padding:8px;margin-top:4px;overflow-x:auto;max-height:200px;overflow-y:auto;white-space:pre-wrap;word-break:break-all}._pagination_j7i5b_226{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:12px}._pageInfo_j7i5b_234{font-family:var(--font-code);font-size:12px;color:var(--text-secondary)}._btn_j7i5b_240{font-family:var(--font-label);font-size:12px;padding:4px 12px;border-radius:4px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);cursor:pointer;transition:background var(--transition),border-color var(--transition)}._btn_j7i5b_240:hover:not(:disabled){border-color:var(--accent);background:var(--accent-dim)}._btn_j7i5b_240:disabled{opacity:.4;cursor:default}._tierDistribution_j7i5b_263{margin-bottom:16px}._tierBarWrap_j7i5b_267{display:flex;height:12px;border-radius:6px;overflow:hidden;background:var(--bg-secondary)}._tierBarBasic_j7i5b_275{background:var(--text-secondary);transition:width .3s ease}._tierBarPro_j7i5b_280{background:var(--accent);transition:width .3s ease}._tierLabels_j7i5b_285{display:flex;justify-content:space-between;margin-top:4px;font-family:var(--font-code);font-size:11px;color:var(--text-secondary)}._statsTableWrap_j7i5b_294{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}._statsTable_j7i5b_294{width:100%;border-collapse:collapse}._statsTable_j7i5b_294 th,._statsTable_j7i5b_294 td{padding:10px 12px;font-size:12px;text-align:left;border-bottom:1px solid var(--border)}._statsTable_j7i5b_294 th{font-family:var(--font-label);font-size:11px;font-weight:500;color:var(--text-secondary);background:var(--bg-secondary)}._statsTable_j7i5b_294 tbody tr:last-child td{border-bottom:none}._sortableHeader_j7i5b_325{cursor:pointer;-webkit-user-select:none;user-select:none}._sortArrow_j7i5b_330{margin-left:4px}._statsToolRow_j7i5b_334{cursor:pointer}._statsToolRow_j7i5b_334:hover td{background:var(--bg-secondary)}._statsActionRow_j7i5b_342 td{background:color-mix(in srgb,var(--bg-secondary) 72%,transparent)}._expandButton_j7i5b_346{display:inline-flex;align-items:center;gap:8px;padding:0;border:none;background:transparent;color:inherit;font:inherit;cursor:pointer}._expandIcon_j7i5b_358{width:10px;color:var(--text-secondary)}._actionLabel_j7i5b_363{display:inline-block;padding-left:18px;font-family:var(--font-code);color:var(--text-secondary)}._emptyStats_j7i5b_370{text-align:center;color:var(--text-muted)}._summaryLine_j7i5b_376{margin-top:12px;font-family:var(--font-code);font-size:12px;color:var(--text-muted);text-align:right}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as s,r as l,a as q,D as st,u as et,i as ot,T as E}from"./index-BhDELp5r.js";import{C as at}from"./ConfirmModal-BHlbjwL7.js";import{u as rt,T as lt}from"./TierComparison-7eRDwSAZ.js";import{T as it}from"./TierPromoProgress-DFG_858F.js";import"./TierPromo.module-CAoUYgIx.js";const nt="_wrapper_1s3lp_2",ct="_table_1s3lp_7",dt="_sortable_1s3lp_32",ut="_sortArrow_1s3lp_41",pt="_clickable_1s3lp_52",bt="_empty_1s3lp_57",R={wrapper:nt,table:ct,sortable:dt,sortArrow:ut,clickable:pt,empty:bt};function mt({columns:t,data:o,sortBy:m,sortDir:j="asc",onSort:k,onRowClick:S,rowKey:w,emptyMessage:L}){return s.jsx("div",{className:R.wrapper,children:s.jsxs("table",{className:R.table,children:[s.jsx("thead",{children:s.jsx("tr",{children:t.map(d=>s.jsxs("th",{style:d.width?{width:d.width}:void 0,className:d.sortable?R.sortable:void 0,onClick:d.sortable&&k?()=>k(d.key):void 0,children:[s.jsx("span",{children:d.label}),d.sortable&&m===d.key&&s.jsx("span",{className:R.sortArrow,children:j==="asc"?"▴":"▾"})]},d.key))})}),s.jsx("tbody",{children:o.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:t.length,className:R.empty,children:L||"No data"})}):o.map((d,A)=>s.jsx("tr",{className:S?R.clickable:void 0,onClick:S?()=>S(d):void 0,children:t.map(h=>s.jsx("td",{children:h.render?h.render(d):String(d[h.key]??"")},h.key))},w?w(d):A))})]})})}function ht(t){return{...t,sequenceNumber:typeof t.sequenceNumber=="number"?t.sequenceNumber:void 0,executionTimeMs:typeof t.executionTimeMs=="number"?t.executionTimeMs:void 0}}const xt=50;function ft(){const[t,o]=l.useState(null),[m,j]=l.useState(!0),[k,S]=l.useState([]),[w,L]=l.useState(0),[d,A]=l.useState(!1),[h,B]=l.useState(!0),[f,I]=l.useState(0),[b,W]=l.useState(""),M=l.useRef(null),y=l.useCallback(async()=>{j(!0);try{const g=await q.get("/api/dashboard/tool-stats");o(g)}catch{}finally{j(!1)}},[]),T=l.useCallback(async(g,P)=>{B(!0);try{const O={limit:String(xt),offset:String(g)};P&&(O.tool=P);const C=await q.get("/api/dashboard/history",O);S(C.entries.map(ht)),L(C.total),A(C.hasMore)}catch{S([]),L(0),A(!1)}finally{B(!1)}},[]),K=l.useCallback(()=>{y(),T(f,b)},[T,y,f,b]),$=l.useCallback(async()=>{await q.post("/api/dashboard/tools/history/clear"),T(f,b)},[T,f,b]),u=l.useCallback(async()=>{await q.post("/api/dashboard/tools/statistics/clear"),y()},[y]);return l.useEffect(()=>{y()},[y]),l.useEffect(()=>{T(f,b)},[T,f,b]),l.useEffect(()=>{const g=new st;M.current=g,g.connect();const P=g.on("command",()=>{y(),T(f,b)});return()=>{P(),g.disconnect(),M.current=null}},[T,y,f,b]),{statistics:t,statsLoading:m,history:k,historyTotal:w,historyHasMore:d,historyLoading:h,historyOffset:f,historyToolFilter:b,setHistoryOffset:I,setHistoryToolFilter:W,refresh:K,clearHistory:$,clearStatistics:u}}const _t="_page_j7i5b_2",jt="_tabs_j7i5b_10",yt="_tab_j7i5b_10",gt="_tabActive_j7i5b_34",Ct="_card_j7i5b_40",Tt="_cardToolbar_j7i5b_47",kt="_sectionTitle_j7i5b_55",St="_dangerButton_j7i5b_61",Nt="_proBadge_j7i5b_71",vt="_statusOk_j7i5b_85",wt="_statusFallback_j7i5b_94",Bt="_statusUnsupported_j7i5b_103",Mt="_statusError_j7i5b_112",Et="_tierBasic_j7i5b_122",Lt="_tierPro_j7i5b_126",At="_tierMixed_j7i5b_131",Pt="_filterRow_j7i5b_142",Rt="_filterLabel_j7i5b_149",Ht="_filterSelect_j7i5b_158",Ot="_expandedRow_j7i5b_169",It="_expandedSection_j7i5b_177",$t="_detailList_j7i5b_187",Ft="_detailItem_j7i5b_193",Dt="_detailLabel_j7i5b_199",qt="_detailValue_j7i5b_204",Ut="_pre_j7i5b_209",Wt="_pagination_j7i5b_226",Kt="_pageInfo_j7i5b_234",Vt="_btn_j7i5b_240",Gt="_tierDistribution_j7i5b_263",zt="_tierBarWrap_j7i5b_267",Jt="_tierBarBasic_j7i5b_275",Zt="_tierBarPro_j7i5b_280",Qt="_tierLabels_j7i5b_285",Xt="_statsTableWrap_j7i5b_294",Yt="_statsTable_j7i5b_294",ts="_sortableHeader_j7i5b_325",ss="_sortArrow_j7i5b_330",es="_statsToolRow_j7i5b_334",os="_statsActionRow_j7i5b_342",as="_expandButton_j7i5b_346",rs="_expandIcon_j7i5b_358",ls="_actionLabel_j7i5b_363",is="_emptyStats_j7i5b_370",ns="_summaryLine_j7i5b_376",a={page:_t,tabs:jt,tab:yt,tabActive:gt,card:Ct,cardToolbar:Tt,sectionTitle:kt,dangerButton:St,proBadge:Nt,statusOk:vt,statusFallback:wt,statusUnsupported:Bt,statusError:Mt,tierBasic:Et,tierPro:Lt,tierMixed:At,filterRow:Pt,filterLabel:Rt,filterSelect:Ht,expandedRow:Ot,expandedSection:It,detailList:$t,detailItem:Ft,detailLabel:Dt,detailValue:qt,pre:Ut,pagination:Wt,pageInfo:Kt,btn:Vt,tierDistribution:Gt,tierBarWrap:zt,tierBarBasic:Jt,tierBarPro:Zt,tierLabels:Qt,statsTableWrap:Xt,statsTable:Yt,sortableHeader:ts,sortArrow:ss,statsToolRow:es,statsActionRow:os,expandButton:as,expandIcon:rs,actionLabel:ls,emptyStats:is,summaryLine:ns},V=50;function cs(t){const o=new Date(t);return`${String(o.getHours()).padStart(2,"0")}:${String(o.getMinutes()).padStart(2,"0")}:${String(o.getSeconds()).padStart(2,"0")}`}function U(t){return typeof t!="number"||!Number.isFinite(t)?"-":t<1e3?`${t}ms`:`${(t/1e3).toFixed(1)}s`}function H(t,o){return o==="pro"?t("tier.pro","Pro"):o==="mixed"?t("tier.mixed","Mixed"):t("tier.basic","Basic")}function Q(t,o){return o!==t&&o.startsWith(`${t}_`)?o.slice(t.length+1):""}function ds(t,o){const m=Q(t,o);return m?`${t}.${m}`:t}function Z(t){return typeof t=="string"&&t.length>0?t:void 0}function us(t){if(!Array.isArray(t))return;const o=t.filter(m=>typeof m=="string"&&m.length>0);return o.length>0?o:void 0}function ps(t){const o=t.result??{};return{requestedCommand:t.requestedCommand??Z(o.requestedCommand),executedCommand:t.executedCommand??Z(o.executedCommand),alternatives:t.alternatives??us(o.alternatives)}}function bs(t,o){switch(t.status){case"fallback":return{label:o("tools.badge.fallback","FALLBACK"),tooltip:o("tools.badge.fallback.tooltip","The requested Pro action succeeded via a Basic fallback."),className:a.statusFallback};case"unsupported":return{label:o("tools.badge.unsupported","UNSUPPORTED"),tooltip:o("tools.badge.unsupported.tooltip","The requested Pro action was blocked and no fallback ran."),className:a.statusUnsupported};case"error":return{label:o("tools.badge.err","FAILED"),tooltip:o("tools.badge.err.tooltip","The tool run failed."),className:a.statusError};default:return{label:o("tools.status.ok","OK"),tooltip:o("tools.status.ok.tooltip","The tool run completed successfully."),className:a.statusOk}}}function v(t,o){return s.jsxs("div",{className:a.detailItem,children:[s.jsx("span",{className:a.detailLabel,children:t}),s.jsx("span",{className:a.detailValue,children:o})]})}function ys(){const{t}=et(),o=ft(),{show:m}=ot(),j=rt(),[k,S]=l.useState("history"),[w,L]=l.useState(null),[d,A]=l.useState(null),[h,B]=l.useState(null),[f,I]=l.useState(!1),[b,W]=l.useState("totalCalls"),[M,y]=l.useState("desc"),T=l.useCallback(e=>{W(i=>i===e?(y(r=>r==="asc"?"desc":"asc"),e):(y("desc"),e))},[]),K=l.useMemo(()=>{var i;const e=new Set;return Object.keys(((i=o.statistics)==null?void 0:i.tools)??{}).forEach(r=>e.add(r)),o.history.forEach(r=>{r.tool&&e.add(r.tool)}),o.historyToolFilter&&e.add(o.historyToolFilter),Array.from(e).sort()},[o.history,o.historyToolFilter,o.statistics]),$=l.useMemo(()=>{var e;return(e=o.statistics)!=null&&e.tools?Object.values(o.statistics.tools).map(i=>{var J;const r=Object.entries(i.commands??{}).map(([p,c])=>({toolName:i.tool,commandName:c.command??p,label:Q(i.tool,c.command??p)||(c.command??p),tier:c.tier,totalCalls:c.totalCalls,successCount:c.successCount,fallbackCount:c.fallbackCount,unsupportedCount:c.unsupportedCount,failureCount:c.failureCount,totalExecutionTimeMs:c.totalExecutionTimeMs,avgExecutionTimeMs:c.avgExecutionTimeMs})),x=r.reduce((p,c)=>p+c.totalCalls,0),N=r.reduce((p,c)=>p+c.successCount,0),F=r.reduce((p,c)=>p+c.fallbackCount,0),D=r.reduce((p,c)=>p+c.unsupportedCount,0),Y=r.reduce((p,c)=>p+c.failureCount,0),z=r.reduce((p,c)=>p+c.totalExecutionTimeMs,0),tt=new Set(r.map(p=>p.tier)).size>1?"mixed":((J=r[0])==null?void 0:J.tier)??i.tier;return{toolName:i.tool,tier:tt,commands:r,totalCalls:x,successCount:N,fallbackCount:F,unsupportedCount:D,failureCount:Y,totalExecutionTimeMs:z,avgExecutionTimeMs:x>0?Math.round(z/x):0}}):[]},[o.statistics]),u=l.useCallback((e,i,r,x)=>s.jsx(E,{text:t(r,x),children:t(e,i)}),[t]),g=l.useMemo(()=>[...$].sort((i,r)=>{const x=i[b],N=r[b];if(typeof x=="number"&&typeof N=="number")return M==="asc"?x-N:N-x;const F=String(x??""),D=String(N??"");return M==="asc"?F.localeCompare(D):D.localeCompare(F)}),[$,b,M]),P=l.useMemo(()=>[{key:"timestamp",label:u("tools.col.time","Time","tools.col.time.tooltip","When the tool run was recorded."),width:"80px",render:e=>cs(e.timestamp)},{key:"toolName",label:u("tools.col.toolAction","Tool.Action","tools.col.toolAction.tooltip","Tool name and action that were executed."),render:e=>s.jsxs("span",{children:[ds(e.tool,e.command),e.tier==="pro"&&s.jsx(E,{text:t("tools.badge.pro.tooltip","This entry used a Pro-only tool or action."),children:s.jsx("span",{className:a.proBadge,children:t("tools.badge.pro","PRO")})})]})},{key:"executionTimeMs",label:u("tools.col.duration","Duration","tools.col.duration.tooltip","How long the tool took to finish."),width:"80px",render:e=>U(e.executionTimeMs)},{key:"status",label:u("tools.col.status","Status","tools.col.status.tooltip","Outcome of the recorded tool run."),width:"120px",render:e=>{const i=bs(e,t);return s.jsx(E,{text:i.tooltip,children:s.jsx("span",{className:i.className,children:i.label})})}},{key:"tier",label:u("tools.col.tier","Tier","tools.col.tier.tooltip","License tier required for the tool or action."),width:"60px",render:e=>s.jsx("span",{className:e.tier==="pro"?a.tierPro:a.tierBasic,children:H(t,e.tier)})}],[t,u]),O=l.useMemo(()=>[{key:"toolName",label:u("tools.col.tool","Tool","tools.col.tool.tooltip","Consolidated tool name in the statistics table."),sortable:!0},{key:"totalCalls",label:u("tools.col.calls","Calls","tools.col.calls.tooltip","Total number of recorded calls for this tool."),sortable:!0,width:"70px"},{key:"successCount",label:u("tools.col.ok","OK","tools.col.ok.tooltip","Number of direct successful runs."),sortable:!0,width:"70px"},{key:"fallbackCount",label:u("tools.col.fallback","FALLBACK","tools.col.fallback.tooltip","Number of runs that succeeded through fallback execution."),sortable:!0,width:"110px"},{key:"unsupportedCount",label:u("tools.col.unsupported","UNSUPPORTED","tools.col.unsupported.tooltip","Number of blocked runs without fallback execution."),sortable:!0,width:"130px"},{key:"failureCount",label:u("tools.col.err","FAILED","tools.col.err.tooltip","Number of runs that failed."),sortable:!0,width:"70px"},{key:"avgExecutionTimeMs",label:u("tools.col.avgTime","Avg Time","tools.col.avgTime.tooltip","Average execution time across recorded calls."),sortable:!0,width:"90px",render:e=>U(e.avgExecutionTimeMs)},{key:"tier",label:u("tools.col.tier","Tier","tools.col.tierStats.tooltip","Basic, Pro, or Mixed summary for the tool statistics row."),sortable:!0,width:"70px",render:e=>s.jsx(E,{text:e.tier==="mixed"?t("tools.tier.mixed.tooltip","This tool includes both Basic and Pro actions."):"",children:s.jsx("span",{className:e.tier==="pro"?a.tierPro:e.tier==="mixed"?a.tierMixed:a.tierBasic,children:H(t,e.tier)})})}],[t,u]),C=l.useMemo(()=>{if(!o.statistics)return null;const e=o.statistics.tierSummary.basic.totalCalls,i=o.statistics.tierSummary.pro.totalCalls,r=e+i;if(r===0)return null;const x=Math.round(e/r*100),N=100-x;return{basic:e,pro:i,basicPct:x,proPct:N}},[o.statistics]),G=l.useCallback(e=>{A(i=>i===e?null:e)},[]),X=l.useCallback(async()=>{if(h){I(!0);try{h==="history"?await o.clearHistory():await o.clearStatistics(),m(t("toast.clearSuccess","Cleared successfully"),"success"),B(null)}catch{m(t("toast.clearFailed","Failed to clear data"),"error")}finally{I(!1)}}},[h,m,t,o]),n=w?o.history.find(e=>e.id===w)??null:null,_=n?ps(n):null;return s.jsxs("div",{className:a.page,children:[s.jsx("div",{className:a.tabs,children:["history","statistics"].map(e=>s.jsx("button",{className:`${a.tab} ${k===e?a.tabActive:""}`,onClick:()=>S(e),children:t(`tools.tab.${e}`,e.charAt(0).toUpperCase()+e.slice(1))},e))}),k==="history"&&s.jsxs("div",{className:a.card,children:[s.jsxs("div",{className:a.cardToolbar,children:[s.jsx("div",{className:a.sectionTitle,children:t("tools.tab.history","History")}),s.jsx("button",{className:a.dangerButton,onClick:()=>B("history"),children:t("common.clear","Clear")})]}),s.jsx("div",{className:a.filterRow,children:s.jsxs("label",{className:a.filterLabel,children:[t("tools.filter.tool","Tool"),":",s.jsxs("select",{className:a.filterSelect,value:o.historyToolFilter,onChange:e=>{o.setHistoryToolFilter(e.target.value),o.setHistoryOffset(0)},children:[s.jsx("option",{value:"",children:t("tools.filter.all","All")}),K.map(e=>s.jsx("option",{value:e,children:e},e))]})]})}),s.jsx(mt,{columns:P,data:o.history,rowKey:e=>e.id,onRowClick:e=>L(i=>i===e.id?null:e.id),emptyMessage:t("tools.empty.history","No history entries")}),n&&s.jsxs("div",{className:a.expandedRow,children:[s.jsxs("div",{className:a.expandedSection,children:[s.jsxs("strong",{children:[s.jsx(E,{text:t("tools.detail.params.tooltip","Input parameters passed to this tool run."),children:t("tools.detail.params","Parameters")}),":"]}),s.jsx("pre",{className:a.pre,children:JSON.stringify(n.parameters,null,2)})]}),n.result&&s.jsxs("div",{className:a.expandedSection,children:[s.jsxs("strong",{children:[s.jsx(E,{text:t("tools.detail.result.tooltip","Returned result payload for this tool run."),children:t("tools.detail.result","Result")}),":"]}),s.jsx("pre",{className:a.pre,children:JSON.stringify(n.result,null,2)})]}),(n.status==="fallback"||n.status==="unsupported"||n.status==="error")&&s.jsx("div",{className:a.expandedSection,children:s.jsxs("div",{className:a.detailList,children:[n.status==="fallback"&&(_==null?void 0:_.requestedCommand)&&v(t("tools.detail.requestedCommand","Requested Command"),_.requestedCommand),n.status==="fallback"&&(_==null?void 0:_.executedCommand)&&v(t("tools.detail.executedCommand","Executed Command"),_.executedCommand),n.status==="fallback"&&(_==null?void 0:_.alternatives)&&v(t("tools.detail.alternatives","Alternatives"),_.alternatives.join(", ")),n.status==="unsupported"&&n.blockedMessage&&v(t("tools.detail.blockedMessage","Blocked Reason"),n.blockedMessage),n.status==="unsupported"&&v(t("tools.detail.noFallback","No Fallback"),t("tools.detail.noFallback.value","No fallback ran.")),n.status==="error"&&n.errorMessage&&v(t("tools.detail.errorMessage","Error Message"),n.errorMessage),n.status==="error"&&n.blockedMessage&&v(t("tools.detail.blockedMessage","Blocked Reason"),n.blockedMessage),n.status==="error"&&n.fallbackCommand&&v(t("tools.detail.executedCommand","Executed Command"),n.fallbackCommand)]})})]}),s.jsxs("div",{className:a.pagination,children:[s.jsx("button",{className:a.btn,disabled:o.historyOffset===0,title:t("tools.page.prev.tooltip","Go to the previous page of tool history results."),onClick:()=>o.setHistoryOffset(Math.max(0,o.historyOffset-V)),children:t("tools.page.prev","Prev")}),s.jsxs("span",{className:a.pageInfo,children:[o.historyOffset+1,"–",Math.min(o.historyOffset+V,o.historyTotal)," / ",o.historyTotal]}),s.jsx("button",{className:a.btn,disabled:!o.historyHasMore,title:t("tools.page.next.tooltip","Go to the next page of tool history results."),onClick:()=>o.setHistoryOffset(o.historyOffset+V),children:t("tools.page.next","Next")})]})]}),k==="statistics"&&s.jsxs("div",{className:a.card,children:[s.jsxs("div",{className:a.cardToolbar,children:[s.jsx("div",{className:a.sectionTitle,children:t("tools.tab.statistics","Statistics")}),s.jsx("button",{className:a.dangerButton,onClick:()=>B("statistics"),children:t("common.clear","Clear")})]}),C&&s.jsxs("div",{className:a.tierDistribution,children:[s.jsxs("div",{className:a.tierBarWrap,children:[s.jsx("div",{className:a.tierBarBasic,style:{width:`${C.basicPct}%`}}),s.jsx("div",{className:a.tierBarPro,style:{width:`${C.proPct}%`}})]}),s.jsxs("div",{className:a.tierLabels,children:[s.jsxs("span",{children:[H(t,"basic")," ",C.basicPct,"% (",C.basic,")"]}),s.jsxs("span",{children:[H(t,"pro")," ",C.proPct,"% (",C.pro,")"]})]})]}),s.jsx("div",{className:a.statsTableWrap,children:s.jsxs("table",{className:a.statsTable,children:[s.jsx("thead",{children:s.jsx("tr",{children:O.map(e=>s.jsxs("th",{style:e.width?{width:e.width}:void 0,className:e.sortable?a.sortableHeader:void 0,onClick:e.sortable?()=>T(e.key):void 0,children:[s.jsx("span",{children:e.label}),e.sortable&&b===e.key&&s.jsx("span",{className:a.sortArrow,children:M==="asc"?"▴":"▾"})]},e.key))})}),s.jsx("tbody",{children:g.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:O.length,className:a.emptyStats,children:t("tools.empty.stats","No tool statistics")})}):g.map(e=>{const i=d===e.toolName;return s.jsxs(l.Fragment,{children:[s.jsxs("tr",{className:a.statsToolRow,onClick:()=>G(e.toolName),children:[s.jsx("td",{children:s.jsxs("button",{type:"button",className:a.expandButton,"aria-expanded":i,"aria-label":`${e.toolName} ${i?t("common.collapse","Collapse"):t("common.expand","Expand")}`,onClick:r=>{r.stopPropagation(),G(e.toolName)},children:[s.jsx("span",{className:a.expandIcon,"aria-hidden":"true",children:i?"▾":"▸"}),s.jsx("span",{children:e.toolName})]})}),s.jsx("td",{children:e.totalCalls}),s.jsx("td",{children:e.successCount}),s.jsx("td",{children:e.fallbackCount}),s.jsx("td",{children:e.unsupportedCount}),s.jsx("td",{children:e.failureCount}),s.jsx("td",{children:U(e.avgExecutionTimeMs)}),s.jsx("td",{children:s.jsx(E,{text:e.tier==="mixed"?t("tools.tier.mixed.tooltip","This tool includes both Basic and Pro actions."):"",children:s.jsx("span",{className:e.tier==="pro"?a.tierPro:e.tier==="mixed"?a.tierMixed:a.tierBasic,children:H(t,e.tier)})})})]}),i&&e.commands.map(r=>s.jsxs("tr",{className:a.statsActionRow,children:[s.jsx("td",{children:s.jsx("span",{className:a.actionLabel,children:r.label})}),s.jsx("td",{children:r.totalCalls}),s.jsx("td",{children:r.successCount}),s.jsx("td",{children:r.fallbackCount}),s.jsx("td",{children:r.unsupportedCount}),s.jsx("td",{children:r.failureCount}),s.jsx("td",{children:U(r.avgExecutionTimeMs)}),s.jsx("td",{children:s.jsx("span",{className:r.tier==="pro"?a.tierPro:a.tierBasic,children:H(t,r.tier)})})]},`${e.toolName}:${r.commandName}`))]},e.toolName)})})]})}),o.statistics&&s.jsxs("div",{className:a.summaryLine,children:[t("tools.summary.total","Total"),": ",o.statistics.totalCalls," ",t("tools.summary.calls","calls")," | ",t("tools.summary.sessions","Sessions"),": ",o.statistics.totalSessions]})]}),!j.loading&&j.tier==="basic"&&s.jsx(it,{basicCalls:j.basicCalls,proCalls:j.proCalls,totalCalls:j.totalCalls,proUsagePercent:j.proUsagePercent,upgradeHref:lt.tools}),s.jsx(at,{open:h!==null,title:h==="history"?t("tools.clear.history.title","Clear history?"):t("tools.clear.statistics.title","Clear statistics?"),message:h==="history"?t("tools.clear.history.message","This permanently removes the current place tools history."):t("tools.clear.statistics.message","This permanently resets the current place tool statistics."),cancelLabel:t("common.cancel","Cancel"),confirmLabel:t("common.clear","Clear"),loading:f,onCancel:()=>!f&&B(null),onConfirm:X})]})}export{ys as Component};
|