@weppy/roblox-mcp 2.3.0 → 2.3.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/.github/workflows/install-test.yml +108 -0
- package/CHANGELOG.md +14 -0
- package/README.md +14 -8
- package/docs/en/installation/README.md +2 -2
- package/docs/en/installation/roblox-explorer.md +13 -3
- package/docs/en/installation/roblox-plugin.md +42 -31
- package/docs/en/pro-upgrade.md +26 -12
- package/docs/en/sync/luau-lsp.md +41 -0
- package/docs/en/sync/overview.md +4 -1
- package/docs/es/README.md +13 -5
- package/docs/es/installation/README.md +2 -2
- package/docs/es/pro-upgrade.md +26 -12
- package/docs/es/sync/luau-lsp.md +41 -0
- package/docs/es/sync/overview.md +4 -1
- package/docs/id/README.md +13 -5
- package/docs/id/installation/README.md +2 -2
- package/docs/id/pro-upgrade.md +26 -12
- package/docs/id/sync/luau-lsp.md +41 -0
- package/docs/id/sync/overview.md +4 -1
- package/docs/installer/assets/index-Bz0amd7x.js +63 -0
- package/docs/installer/assets/index-ei4lRUa6.css +1 -0
- package/docs/installer/index.html +2 -2
- package/docs/ja/README.md +15 -9
- package/docs/ja/installation/README.md +2 -2
- package/docs/ja/pro-upgrade.md +26 -12
- package/docs/ja/sync/luau-lsp.md +41 -0
- package/docs/ja/sync/overview.md +4 -1
- package/docs/ko/README.md +14 -8
- package/docs/ko/installation/README.md +2 -2
- package/docs/ko/installation/roblox-explorer.md +13 -3
- package/docs/ko/installation/roblox-plugin.md +42 -31
- package/docs/ko/pro-upgrade.md +26 -12
- package/docs/ko/sync/luau-lsp.md +41 -0
- package/docs/ko/sync/overview.md +4 -1
- package/docs/pt-br/README.md +13 -5
- package/docs/pt-br/installation/README.md +2 -2
- package/docs/pt-br/pro-upgrade.md +26 -12
- package/docs/pt-br/sync/luau-lsp.md +41 -0
- package/docs/pt-br/sync/overview.md +4 -1
- package/docs/troubleshooting.md +1 -1
- package/install.ps1 +36 -96
- package/install.sh +22 -67
- package/llms.txt +1 -1
- 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-CGK59Jsx.js → ChangelogDetailPage-ITTDURna.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ChangelogPage-oNm6ratx.js → ChangelogPage-DjVot-60.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ConfirmModal-Dtak3Vnq.js → ConfirmModal-B1q8BGeA.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/ConnectionPage-9bG71eB1.css +1 -0
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/ConnectionPage-D4y36l03.js +1 -0
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{InfoLabel-CLvjiyTG.js → InfoLabel-COMRAIq0.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{OverviewPage-BdF0Ve7h.js → OverviewPage-DojgIxVT.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{PlaytestPage-cQMWlAOS.js → PlaytestPage-CkEvf6XW.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/PropertyDiff-r9iLxfi8.js +6 -0
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{SettingsPage-C-QX0AY-.js → SettingsPage-CEs6Ob3d.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{StatusBadge-A9U9m2LQ.js → StatusBadge-DHhSWmAT.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/SyncPage-ifjnfsNg.js +4 -0
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{TierComparison-BA_L4c9p.js → TierComparison-C29caZ6C.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{TierPromoProgress-Dq6ofjr2.js → TierPromoProgress-BdEtTxkK.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ToolsPage-C_tMIyix.js → ToolsPage-BOIC0ngW.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/index-CQYn3Wfp.js +129 -0
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{useLiveUptime-Df1ECedb.js → useLiveUptime-Dco8Aiiz.js} +1 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/index.html +1 -1
- package/plugins/weppy-roblox-mcp/dist/index.js +86 -81
- package/plugins/weppy-roblox-mcp/roblox-plugin/WeppyRobloxMCP.rbxm +0 -0
- package/docs/installer/assets/index-B4Gp7BPj.js +0 -63
- package/docs/installer/assets/index-B7mvmOPt.css +0 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/ConnectionPage-CN3LYLAT.css +0 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/ConnectionPage-CjLtImxr.js +0 -1
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/PropertyDiff-BnOZxkTS.js +0 -6
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/SyncPage-BAS0cXRM.js +0 -4
- package/plugins/weppy-roblox-mcp/dashboard/dist/assets/index-OH9mpHwW.js +0 -129
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{r as o,a as T,D as R,u as I,k as L,l as k,j as e,d as P,i as O,T as f,m as E}from"./index-OH9mpHwW.js";import{I as w}from"./InfoLabel-CLvjiyTG.js";import{C as $}from"./ConfirmModal-Dtak3Vnq.js";import{S as A}from"./StatusBadge-A9U9m2LQ.js";import{D as B,a as D,u as H,T as M}from"./TierComparison-BA_L4c9p.js";import{t as l}from"./TierPromo.module-CAoUYgIx.js";const U=5e3;function F(){const[t,n]=o.useState(null),[_,u]=o.useState([]),[c,y]=o.useState(!0),h=o.useRef(null),g=o.useRef(null),r=o.useCallback(async()=>{try{const p=await T.get("/sync/status");n(p)}catch{}},[]),m=o.useCallback(async()=>{try{const p=await T.get("/sync/history",{limit:"30"});u(p.entries??[])}catch{u([])}},[]),d=o.useCallback(async()=>{await Promise.all([r(),m()]),y(!1)},[r,m]),b=o.useCallback(()=>{d()},[d]),a=o.useCallback(async()=>{await T.post("/api/dashboard/sync/history/clear"),u([]),r()},[r]);return o.useEffect(()=>(d(),g.current=setInterval(d,U),()=>{g.current&&clearInterval(g.current)}),[d]),o.useEffect(()=>{const p=new R;h.current=p,p.connect();const v=p.on("sync",()=>{r(),m()});return()=>{v(),p.disconnect(),h.current=null}},[r,m]),{status:t,history:_,loading:c,refresh:b,clearHistory:a}}function W({icon:t,title:n,description:_,benefits:u,upgradeLabel:c,upgradeHref:y}){const{t:h}=I(),[g,r]=o.useState(!1),{trackEvent:m}=L(),{pathname:d}=k(),b=d.replace(/^\//,"").split("/")[0]||"overview";return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:l.panel,children:[t&&e.jsx("div",{className:l.panelIcon,children:t}),e.jsx("div",{className:l.panelTitle,children:n}),e.jsx("div",{className:l.panelDesc,children:_}),e.jsx("ul",{className:l.benefitList,children:u.map(a=>e.jsx("li",{className:l.benefitItem,children:a},a))}),e.jsx("div",{className:l.panelDiscountWrap,children:e.jsx(B,{variant:"centered"})}),e.jsxs("div",{className:l.actions,children:[e.jsx("button",{className:`${l.btn} ${l.btnOutline}`,onClick:()=>{m("dashboard_tier_toggle",{page:b}),r(!0)},children:h("tier.compare","Basic vs Pro")}),e.jsx("a",{className:`${l.btn} ${l.btnPrimary}`,href:y,target:"_blank",rel:"noreferrer",onClick:()=>m("dashboard_upgrade_click",{page:b}),children:c})]})]}),g&&e.jsx(D,{onClose:()=>r(!1)})]})}const q="_page_1warw_2",G="_card_1warw_10",z="_cardHeader_1warw_17",V="_clearButton_1warw_29",X="_statusRow_1warw_39",Y="_metaItem_1warw_46",J="_statusGrid_1warw_52",Q="_table_1warw_71",Z="_directionRail_1warw_99",K="_endpointLabel_1warw_105",ee="_optionRail_1warw_109",te="_directionOption_1warw_115",se="_directionOptionActive_1warw_129",ae="_directionOptionInactive_1warw_133",ne="_direction_forward_1warw_139",ie="_direction_bidirectional_1warw_143",oe="_direction_reverse_1warw_147",ce="_lockBadge_1warw_152",re="_proBadge_1warw_160",le="_forwardBadge_1warw_174",de="_logContainer_1warw_187",pe="_logEntry_1warw_194",ue="_logTime_1warw_206",ye="_logType_1warw_212",he="_logTypeWrite_1warw_221",me="_logTypeUpdate_1warw_225",ge="_logTypeDelete_1warw_229",we="_logTypeIdle_1warw_233",_e="_logPath_1warw_237",fe="_logEmpty_1warw_244",xe="_overlay_1warw_251",be="_overlayTitle_1warw_261",je="_overlayMessage_1warw_268",ve="_checklist_1warw_274",Te="_checkItem_1warw_284",Ne="_upgradePanel_1warw_300",Ce="_upgradePanelHeader_1warw_307",Ie="_benefitList_1warw_315",Se="_benefitItem_1warw_324",Re="_upgradeActions_1warw_339",Le="_btn_1warw_344",ke="_btnPrimary_1warw_361",Pe="_disabled_1warw_372",s={page:q,card:G,cardHeader:z,clearButton:V,statusRow:X,metaItem:Y,statusGrid:J,table:Q,directionRail:Z,endpointLabel:K,optionRail:ee,directionOption:te,directionOptionActive:se,directionOptionInactive:ae,direction_forward:ne,direction_bidirectional:ie,direction_reverse:oe,lockBadge:ce,proBadge:re,forwardBadge:le,logContainer:de,logEntry:pe,logTime:ue,logType:ye,logTypeWrite:he,logTypeUpdate:me,logTypeDelete:ge,logTypeIdle:we,logPath:_e,logEmpty:fe,overlay:xe,overlayTitle:be,overlayMessage:je,checklist:ve,checkItem:Te,upgradePanel:Ne,upgradePanelHeader:Ce,benefitList:Ie,benefitItem:Se,upgradeActions:Re,btn:Le,btnPrimary:ke,disabled:Pe},Oe=[{key:"forward",symbol:"←"},{key:"bidirectional",symbol:"↔"},{key:"reverse",symbol:"→"}];function Ee(t){const n=new Date(t);return`${String(n.getHours()).padStart(2,"0")}:${String(n.getMinutes()).padStart(2,"0")}`}function $e(t){switch(t){case"write":return s.logTypeWrite;case"update":return s.logTypeUpdate;case"delete":return s.logTypeDelete;default:return s.logTypeIdle}}function Ae(t){switch(t){case"syncing":return"syncing";case"initializing":return"initializing";case"idle":return"idle";default:return"offline"}}function Be(t,n,_,u){const c=t(`sync.directions.cat.${n}`,n.charAt(0).toUpperCase()+n.slice(1)),y=t("sync.directions.endpoint.local","Local"),h=t("sync.directions.endpoint.studio","Studio");switch(_){case"forward":return[`${c}: ${y} <- ${h}`,t("sync.directions.tooltip.forward.body","Studio changes sync to local files only")].join(`
|
|
2
|
-
`);case"bidirectional":return[`${c}: ${y} <-> ${h}`,t("sync.directions.tooltip.bidirectional.body","Two-way sync between Local and Studio"),u?t("sync.directions.tooltip.proRequired","Pro required in Basic tier"):""].filter(Boolean).join(`
|
|
3
|
-
`);case"reverse":return[`${c}: ${y} -> ${h}`,t("sync.directions.tooltip.reverse.body","Push local file changes to Studio"),u?t("sync.directions.tooltip.proRequired","Pro required in Basic tier"):""].filter(Boolean).join(`
|
|
4
|
-
`);default:return c}}const De=["scripts","values","containers","data","services"];function He(t,n){return n==="manual"?t("sync.directions.mode.manual","Manual"):n==="auto"?t("sync.directions.mode.auto","Auto"):"-"}function Me(t,n){return n==="manual"?t("sync.directions.mode.manual.tooltip","Applies sync changes only when you trigger them manually."):n==="auto"?t("sync.directions.mode.auto.tooltip","Applies sync changes automatically when updates arrive."):""}function Ue(t,n){switch(n){case"write":return t("sync.log.type.write","WRITE");case"update":return t("sync.log.type.update","UPDATE");case"delete":return t("sync.log.type.delete","DELETE");default:return t("sync.log.type.idle","IDLE")}}function Fe(t,n){switch(n){case"write":return t("sync.log.type.write.tooltip","A new sync output was written to disk.");case"update":return t("sync.log.type.update.tooltip","An existing synced file or instance was updated.");case"delete":return t("sync.log.type.delete.tooltip","A synced file or instance was removed.");default:return t("sync.log.type.idle.tooltip","A sync event was recorded without a file mutation.")}}function Ye(){const{t}=I(),{level:n}=P(),{tier:_,loading:u}=H(),c=F(),{show:y}=O(),[h,g]=o.useState(!1),[r,m]=o.useState(!1),d=!u&&_==="basic";if(n==="disconnected"||n==="serverOnly")return e.jsx("div",{className:s.page,children:e.jsx("div",{className:s.card,children:e.jsxs("div",{className:s.overlay,children:[e.jsx("div",{className:s.overlayTitle,children:t("sync.overlay.title","Roblox Studio plugin required")}),e.jsx("div",{className:s.overlayMessage,children:t("sync.overlay.message","Sync status will be available once the Roblox Studio plugin connects.")}),e.jsxs("ul",{className:s.checklist,children:[e.jsx("li",{className:s.checkItem,children:t("sync.overlay.check1","Is Roblox Studio running?")}),e.jsx("li",{className:s.checkItem,children:t("sync.overlay.check2","Is the WROX Plugin installed?")}),e.jsx("li",{className:s.checkItem,children:t("sync.overlay.check3","Are HTTP Requests enabled in Studio settings?")})]})]})})});const a=c.status,p=c.history,v=Ae(a==null?void 0:a.state),S=async()=>{m(!0);try{await c.clearHistory(),y(t("toast.clearSuccess","Cleared successfully"),"success"),g(!1)}catch{y(t("toast.clearFailed","Failed to clear data"),"error")}finally{m(!1)}};return e.jsxs("div",{className:s.page,children:[e.jsxs("div",{className:s.card,children:[e.jsxs("div",{className:s.cardHeader,children:[e.jsx(f,{text:t("sync.status.title.tooltip","Current Studio and local file sync status for this place."),children:t("sync.status.title","Sync Status")}),d&&e.jsx(f,{text:t("sync.status.forwardOnly.tooltip","Basic tier allows Studio to local forward sync only."),children:e.jsx("span",{className:s.forwardBadge,children:t("sync.status.forwardOnly","Forward Only")})})]}),e.jsxs("div",{className:s.statusRow,children:[e.jsx(A,{status:v}),(a==null?void 0:a.placeName)&&e.jsxs("span",{className:s.metaItem,children:[e.jsx(w,{label:t("sync.status.place","Place"),tooltip:t("sync.status.place.tooltip","Connected Roblox place name and place ID.")}),": ",a.placeName,a.placeId?` (${a.placeId})`:""]})]}),e.jsxs("dl",{className:s.statusGrid,children:[(a==null?void 0:a.syncRoot)&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{children:e.jsx(w,{label:t("sync.status.path","Path"),tooltip:t("sync.status.path.tooltip","Local filesystem root currently used for sync output.")})}),e.jsx("dd",{children:a.syncRoot})]}),(a==null?void 0:a.instanceCount)!=null&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{children:e.jsx(w,{label:t("sync.status.instances","Instances"),tooltip:t("sync.status.instances.tooltip","Total synced Roblox instances tracked in the local mirror.")})}),e.jsx("dd",{children:a.instanceCount})]}),(a==null?void 0:a.scriptCount)!=null&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{children:e.jsx(w,{label:t("sync.status.scripts","Scripts"),tooltip:t("sync.status.scripts.tooltip","Total synced script files currently indexed for this place.")})}),e.jsx("dd",{children:a.scriptCount})]}),(a==null?void 0:a.state)==="syncing"&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{children:e.jsx(w,{label:t("sync.status.state","State"),tooltip:t("sync.status.state.tooltip","Current runtime sync state reported by the server.")})}),e.jsx("dd",{children:t("status.syncing","Syncing")})]})]})]}),(a==null?void 0:a.directions)&&e.jsxs("div",{className:s.card,children:[e.jsx("div",{className:s.cardHeader,children:e.jsx(f,{text:t("sync.directions.title.tooltip","Per-category sync direction and apply behavior between Local and Studio."),children:t("sync.directions.title","Sync Directions")})}),e.jsxs("table",{className:s.table,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:e.jsx(w,{label:t("sync.directions.type","Type"),tooltip:t("sync.directions.type.tooltip","Sync category affected by this rule.")})}),e.jsx("th",{children:e.jsx(w,{label:t("sync.directions.direction","Direction"),tooltip:t("sync.directions.direction.tooltip","Whether each category syncs from Studio, to Studio, or both ways.")})}),e.jsx("th",{children:e.jsx(w,{label:t("sync.directions.applyMode","Apply Mode"),tooltip:t("sync.directions.applyMode.tooltip","How incoming sync changes are applied for this category.")})})]})}),e.jsx("tbody",{children:De.map(i=>{var C;const j=a.directions[i],N=(C=a.applyModes)==null?void 0:C[i];return e.jsxs("tr",{children:[e.jsx("td",{children:t(`sync.directions.cat.${i}`,i.charAt(0).toUpperCase()+i.slice(1))}),e.jsx("td",{children:e.jsxs("div",{className:s.directionRail,"aria-label":`${i}-direction-rail`,children:[e.jsx(f,{text:t("sync.directions.endpoint.local.tooltip","Local files on disk are always shown on the left side of the direction rail."),children:e.jsx("span",{className:s.endpointLabel,children:t("sync.directions.endpoint.local","Local")})}),e.jsx("span",{className:s.optionRail,children:Oe.map(x=>e.jsx(E,{text:Be(t,i,x.key,d),children:e.jsx("span",{className:`${s.directionOption} ${j===x.key?s.directionOptionActive:s.directionOptionInactive} ${s[`direction_${x.key}`]??""}`,"data-active":j===x.key?"true":"false",children:x.symbol})},x.key))}),e.jsx(f,{text:t("sync.directions.endpoint.studio.tooltip","Roblox Studio is always shown on the right side of the direction rail."),children:e.jsx("span",{className:s.endpointLabel,children:t("sync.directions.endpoint.studio","Studio")})})]})}),e.jsx("td",{children:e.jsx(f,{text:Me(t,N),children:He(t,N)})})]},i)})})]})]}),e.jsxs("div",{className:s.card,children:[e.jsxs("div",{className:s.cardHeader,children:[e.jsx("span",{children:t("sync.log.title","Sync Log")}),e.jsx("button",{className:s.clearButton,onClick:()=>g(!0),children:t("common.clear","Clear")})]}),e.jsx("div",{className:s.logContainer,children:p.length===0?e.jsx("div",{className:s.logEmpty,children:t("sync.log.empty","No sync events yet")}):p.map((i,j)=>e.jsxs("div",{className:s.logEntry,children:[e.jsx("span",{className:s.logTime,children:Ee(i.timestamp)}),e.jsx(f,{text:Fe(t,i.type),children:e.jsx("span",{className:`${s.logType} ${$e(i.type)}`,children:Ue(t,i.type)})}),e.jsxs("span",{className:s.logPath,children:[i.path,i.details?` — ${i.details}`:""]})]},j))})]}),d&&e.jsx(W,{title:t("sync.upgrade.title","Unlock Full Sync with Pro"),description:t("tier.banner.save","Save AI tokens with Pro!"),benefits:[t("sync.upgrade.benefit1","Bidirectional sync — edit files, auto-apply to Studio"),t("sync.upgrade.benefit2","Reverse sync — push file changes back to Studio"),t("sync.upgrade.benefit3","Full sync history and detailed change log")],upgradeLabel:t("sync.upgrade.buy","Upgrade to Pro"),upgradeHref:M.sync}),e.jsx($,{open:h,title:t("sync.clear.title","Clear sync log?"),message:t("sync.clear.message","This permanently removes the stored sync log for the current place."),cancelLabel:t("common.cancel","Cancel"),confirmLabel:t("common.clear","Clear"),loading:r,onCancel:()=>!r&&g(!1),onConfirm:S})]})}export{Ye as Component};
|