@weppy/roblox-mcp 2.15.0 → 2.16.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.
Files changed (35) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +6 -4
  3. package/dashboard/dist/assets/{AssetsPage-D3-InAlf.js → AssetsPage-Dcj0TWe9.js} +1 -1
  4. package/dashboard/dist/assets/{ChangelogDetailPage-fmLGEZVO.js → ChangelogDetailPage-Bw3gyr1A.js} +1 -1
  5. package/dashboard/dist/assets/{ChangelogPage-6KtWInS5.js → ChangelogPage-0WZSh2m-.js} +1 -1
  6. package/dashboard/dist/assets/{ConfirmModal-DJp4ax33.js → ConfirmModal-CyjUVYwz.js} +1 -1
  7. package/dashboard/dist/assets/{ConnectionPage-D375gmxK.js → ConnectionPage-B1tZK4zW.js} +1 -1
  8. package/dashboard/dist/assets/{ControlsPage-C7zSLjWc.js → ControlsPage-zlLRwkt6.js} +1 -1
  9. package/dashboard/dist/assets/{CurrentPlaceScope-DrtUw6py.js → CurrentPlaceScope-BdkdaT7r.js} +1 -1
  10. package/dashboard/dist/assets/{GameChangeDetail-Bd5Hg2ZD.js → GameChangeDetail-CONsGQ2-.js} +1 -1
  11. package/dashboard/dist/assets/{InfoLabel-HLPMIIL4.js → InfoLabel-Cf_fu0ZE.js} +1 -1
  12. package/dashboard/dist/assets/{OverviewPage-Bmem2hyc.js → OverviewPage-B7Y5VEFH.js} +1 -1
  13. package/dashboard/dist/assets/{PageHeader-Cvi0LO4r.js → PageHeader-CTOJDcG8.js} +2 -2
  14. package/dashboard/dist/assets/PlaytestPage-BJq2ns66.css +1 -0
  15. package/dashboard/dist/assets/PlaytestPage-Zab8aOB7.js +11 -0
  16. package/dashboard/dist/assets/{SettingsPage-v3EWZSAn.js → SettingsPage-CizCAf2d.js} +1 -1
  17. package/dashboard/dist/assets/{StatusBadge-Cf1Ncow3.js → StatusBadge-DPEvJdzm.js} +1 -1
  18. package/dashboard/dist/assets/{SyncPage-BG7u00IT.js → SyncPage-M1CTHa74.js} +1 -1
  19. package/dashboard/dist/assets/{Tabs-2QEkInbt.js → Tabs-BXHuo9Wk.js} +1 -1
  20. package/dashboard/dist/assets/{ToolsPage-DbtQxCAM.js → ToolsPage-oPc2T58z.js} +1 -1
  21. package/dashboard/dist/assets/{TooltipText-1fJvqtMt.js → TooltipText-55u9HaGy.js} +1 -1
  22. package/dashboard/dist/assets/{UiPrimitive-CsV5QE01.js → UiPrimitive-BUpeGXNh.js} +1 -1
  23. package/dashboard/dist/assets/{UiStudioPage-ZLA3xIIN.js → UiStudioPage-Ck1kJetD.js} +1 -1
  24. package/dashboard/dist/assets/{WhatsNewPage-S4qEx4iN.js → WhatsNewPage-BoTRERVd.js} +1 -1
  25. package/dashboard/dist/assets/{copy-d0x3Roiq.js → copy-szgBQciT.js} +1 -1
  26. package/dashboard/dist/assets/{index-C_exRd2o.js → index-CACN5u4J.js} +103 -55
  27. package/dashboard/dist/assets/{sample-requests-BRAniRWZ.js → sample-requests-DOSLzn1v.js} +1 -1
  28. package/dashboard/dist/assets/{useLiveUptime-D0TQTjV7.js → useLiveUptime-kOkM_pqk.js} +1 -1
  29. package/dashboard/dist/assets/{useSettings-DlZqZGnP.js → useSettings-COna4-LR.js} +1 -1
  30. package/dashboard/dist/index.html +1 -1
  31. package/dist/index.js +128 -121
  32. package/package.json +1 -1
  33. package/roblox-plugin/WeppyRobloxMCP.rbxm +0 -0
  34. package/dashboard/dist/assets/PlaytestPage-CVEtQ4dU.css +0 -1
  35. package/dashboard/dist/assets/PlaytestPage-ChFkixWj.js +0 -11
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weppy/roblox-mcp",
3
- "version": "2.15.0",
3
+ "version": "2.16.0",
4
4
  "description": "MCP (Model Context Protocol) server for Roblox Studio integration - enables AI coding agents to interact with Roblox Studio in real-time",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
Binary file
@@ -1 +0,0 @@
1
- ._page_18pmo_2{display:flex;flex-direction:column;gap:16px;max-width:900px}._sampleBanner_18pmo_9{display:flex;flex-direction:column;gap:12px;padding:18px 20px;border:1px solid var(--pro-border);border-radius:var(--radius);background:linear-gradient(135deg,#f0bd5829,#f0bd5808 55%),var(--bg-card)}._sampleBannerRow_18pmo_21{display:flex;align-items:center;justify-content:space-between;gap:20px}._sampleBannerMain_18pmo_28{display:flex;flex-direction:column;gap:8px;min-width:0}._sampleBadge_18pmo_35{width:fit-content;padding:0;border-radius:0;background:none;border:none;color:var(--pro-text);font-family:var(--font-label);font-size:11px;font-weight:600;letter-spacing:.02em;text-transform:none;opacity:.92}._sampleTitle_18pmo_50{font-family:var(--font-label);font-size:16px;font-weight:600;color:var(--text-primary)}._sampleMessage_18pmo_57{max-width:560px;color:var(--text-secondary);font-size:13px;line-height:1.5}._sampleActions_18pmo_64{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}._primaryAction_18pmo_72,._secondaryAction_18pmo_73{display:inline-flex;align-items:center;justify-content:center;min-height:34px;padding:0 14px;border-radius:var(--radius-control);font-family:var(--font-label);font-size:12px;text-decoration:none;transition:background var(--transition),border-color var(--transition),opacity var(--transition)}._secondaryAction_18pmo_73{border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);cursor:pointer}._secondaryAction_18pmo_73:hover{border-color:var(--accent);background:var(--accent-dim)}._primaryAction_18pmo_72{border:1px solid var(--pro-badge);background:var(--pro-badge);color:var(--pro-text-on-badge)}._primaryAction_18pmo_72:hover{opacity:.9}._card_18pmo_109{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:16px 20px}._cardHeader_18pmo_116{font-family:var(--font-label);font-size:13px;font-weight:600;color:var(--text-primary);margin-bottom:12px;display:flex;align-items:center;justify-content:space-between;gap:8px}._clearButton_18pmo_128{border:1px solid var(--danger-border);background:var(--danger-bg);color:var(--danger-text);border-radius:var(--radius-control);padding:6px 12px;font-family:var(--font-label);font-size:12px;font-weight:600;cursor:pointer;transition:background var(--transition),border-color var(--transition),color var(--transition)}._clearButton_18pmo_128:hover:not(:disabled){background:var(--danger-hover-bg);border-color:var(--danger)}._clearButton_18pmo_128:focus-visible{outline:none;box-shadow:var(--focus-ring)}._clearButton_18pmo_128:disabled{cursor:not-allowed;opacity:.55}._statusRow_18pmo_157{display:flex;align-items:center;gap:12px;margin-bottom:8px}._statusIndicator_18pmo_164{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0}._statusRunning_18pmo_172{background:var(--success);box-shadow:0 0 6px var(--success)}._statusPaused_18pmo_177{background:var(--warning)}._statusNotRunning_18pmo_181{background:var(--text-muted)}._statusLabel_18pmo_185{font-family:var(--font-code);font-size:13px;font-weight:600;color:var(--text-primary)}._statusMeta_18pmo_192{font-family:var(--font-code);font-size:12px;color:var(--text-secondary)}._controlButtons_18pmo_198{display:flex;gap:8px;margin-top:12px}._btn_18pmo_205{font-family:var(--font-label);font-size:12px;padding:6px 14px;border-radius:var(--radius-control);border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);cursor:pointer;transition:background var(--transition),border-color var(--transition)}._btn_18pmo_205:hover{border-color:var(--accent);background:var(--accent-dim)}._btn_18pmo_205:disabled{opacity:.4;pointer-events:none}._btnPrimary_18pmo_227{background:var(--accent);color:var(--bg-card);border-color:var(--accent)}._btnPrimary_18pmo_227:hover{opacity:.9}._btnDanger_18pmo_237{border-color:var(--danger-border);background:var(--danger-bg);color:var(--danger-text)}._btnDanger_18pmo_237:hover{border-color:var(--danger);background:var(--danger-hover-bg)}._historyList_18pmo_249{display:flex;flex-direction:column;gap:4px;max-height:320px;overflow-y:auto}._historyItem_18pmo_257{display:flex;flex-direction:column;gap:4px;padding:8px 12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-card);cursor:pointer;text-align:left;width:100%;font-family:inherit;transition:border-color var(--transition)}._historyItem_18pmo_257:hover{border-color:var(--accent)}._historyItemSelected_18pmo_276{border-color:var(--accent);background:var(--accent-dim)}._historyItemHeader_18pmo_281{display:flex;align-items:center;gap:8px}._historyIcon_18pmo_287{font-size:14px;flex-shrink:0}._historyTimestamp_18pmo_292{font-family:var(--font-code);font-size:11px;color:var(--text-muted);flex-shrink:0}._historyName_18pmo_299{font-family:var(--font-label);font-size:12px;font-weight:500;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._historyItemMeta_18pmo_309{display:flex;gap:12px;font-family:var(--font-code);font-size:11px;color:var(--text-secondary);padding-left:22px}._historyMode_18pmo_318{color:var(--text-muted)}._historyDuration_18pmo_322{color:var(--text-secondary)}._historyStatus_18pmo_326{font-weight:500;text-transform:uppercase;font-size:10px;letter-spacing:.04em}._status_passed_18pmo_333{color:var(--success)}._status_failed_18pmo_337{color:var(--error)}._status_running_18pmo_341{color:var(--accent)}._historyError_18pmo_345{font-family:var(--font-code);font-size:11px;color:var(--error);padding-left:22px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._historyContext_18pmo_355{display:flex;flex-direction:column;gap:4px;padding-left:22px;color:var(--text-secondary);font-size:11px}._historyContextLine_18pmo_364{display:flex;flex-direction:column;gap:2px}._historyContextLabel_18pmo_370{font-family:var(--font-label);font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}._reportContainer_18pmo_379{display:flex;flex-direction:column;gap:12px}._reportContextPanel_18pmo_385{display:flex;flex-direction:column;gap:10px;padding:12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-secondary)}._reportContextRow_18pmo_395{display:flex;flex-direction:column;gap:4px;color:var(--text-primary);font-size:12px}._reportContextLabel_18pmo_403{font-family:var(--font-label);font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}._reportSection_18pmo_411{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}._reportSectionHeader_18pmo_417{font-family:var(--font-label);font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.06em;padding:6px 12px;background:var(--bg-secondary);border-bottom:1px solid var(--border)}._reportMarkdown_18pmo_429{padding:12px;margin:0;font-family:var(--font-code);font-size:12px;line-height:1.6;color:var(--text-primary);white-space:pre-wrap;word-break:break-word;max-height:400px;overflow-y:auto}._reportLogs_18pmo_442{padding:12px;margin:0;font-family:var(--font-code);font-size:11px;line-height:1.5;color:var(--text-secondary);white-space:pre-wrap;word-break:break-word;max-height:240px;overflow-y:auto;background:var(--bg-secondary)}._emptyState_18pmo_457{text-align:center;padding:32px 16px;color:var(--text-muted);font-size:13px}._emptyStateTitle_18pmo_464{font-family:var(--font-label);font-size:14px;font-weight:600;color:var(--text-secondary);margin-bottom:8px}._emptyStateMessage_18pmo_472{font-size:12px;color:var(--text-muted);max-width:360px;margin:0 auto;line-height:1.5}._upgradePanel_18pmo_481{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);padding:32px 24px;text-align:center}._upgradePanelIcon_18pmo_489{font-size:32px;margin-bottom:12px}._upgradePanelTitle_18pmo_494{font-family:var(--font-label);font-size:15px;font-weight:600;color:var(--text-primary);margin-bottom:8px}._upgradePanelDesc_18pmo_502{font-size:13px;color:var(--text-secondary);margin-bottom:16px;max-width:400px;margin-left:auto;margin-right:auto;line-height:1.5}._benefitList_18pmo_512{list-style:none;padding:0;margin:0 auto 16px;display:flex;flex-direction:column;gap:4px;max-width:360px;text-align:left}._benefitItem_18pmo_523{font-size:12px;color:var(--text-secondary);padding-left:16px;position:relative}._benefitItem_18pmo_523:before{content:"+";position:absolute;left:0;color:var(--accent);font-weight:600}._upgradeActions_18pmo_538{display:flex;gap:8px;justify-content:center}@media(max-width:720px){._sampleBannerRow_18pmo_21{flex-direction:column;align-items:stretch}._sampleActions_18pmo_64{justify-content:stretch}._primaryAction_18pmo_72,._secondaryAction_18pmo_73{width:100%}}
@@ -1,11 +0,0 @@
1
- import{r as l,a as v,u as N,j as t,e as D,h as E,l as $,T as U}from"./index-C_exRd2o.js";import{P as O}from"./PageHeader-Cvi0LO4r.js";import{I as B}from"./InfoLabel-HLPMIIL4.js";import{C as F}from"./CurrentPlaceScope-DrtUw6py.js";import{T as S}from"./TooltipText-1fJvqtMt.js";import{C as V}from"./ConfirmModal-DJp4ax33.js";import"./UiPrimitive-CsV5QE01.js";import"./ConfirmModal.module-DJksQHBd.js";const W=5e3;function T(e){if(typeof e=="number")return{placeId:String(e)}}function z(e,o){return typeof o!="number"?e:`${e}?placeId=${encodeURIComponent(String(o))}`}function G(e){const o=(e==null?void 0:e.enabled)??!0,r=(e==null?void 0:e.placeId)??null,[n,a]=l.useState([]),[m,i]=l.useState(null),[p,c]=l.useState(o),d=l.useRef(null),u=l.useCallback(async()=>{try{const y=T(r),x=y?await v.get("/api/dashboard/playtest/history",y):await v.get("/api/dashboard/playtest/history");a(x.entries??[])}catch{}},[r]),h=l.useCallback(async()=>{if(!o){c(!1);return}await u(),c(!1)},[o,u]),g=l.useCallback(async()=>{o&&(await v.post(z("/api/dashboard/playtest/history/clear",r)),a([]),i(null))},[o,r]);l.useEffect(()=>{i(null)},[r]);const f=l.useCallback(async y=>{if(o)try{const x=T(r),w=x?await v.get(`/api/dashboard/playtest/report/${y}`,x):await v.get(`/api/dashboard/playtest/report/${y}`);i(w)}catch{i(null)}},[o,r]);return l.useEffect(()=>{if(!o){c(!1);return}return h(),d.current=setInterval(h,W),()=>{d.current&&clearInterval(d.current)}},[o,h]),{history:n,selectedReport:m,loading:p,loadReport:f,clearHistory:g}}function Q(e){const o="2026-03-27T15:26:00.000Z",r={testScenario:e("playtest.sample.context.why","Spawn into the arena, survive the opener, and verify the HUD responds immediately."),expectedBehavior:e("playtest.sample.context.expected","The player spawns safely, the countdown UI appears within one second, and the first wave starts without errors."),observedBehavior:e("playtest.sample.context.observed","Spawn protection held, the HUD updated on time, and wave one completed with no gameplay regressions.")};return{history:[{timestamp:o,testName:e("playtest.sample.history.name","Sample Arena Smoke Test"),mode:"play",status:"passed",durationMs:4820,contextId:"sample_playtest_preview",contextSummary:r}],report:{markdown:e("playtest.sample.report.markdown",`# Sample Arena Smoke Test
2
-
3
- - Spawn flow: PASS
4
- - HUD countdown: PASS
5
- - Wave bootstrap: PASS
6
-
7
- This is a sample preview. Live playtests and real reports are available with Pro.`),logs:e("playtest.sample.report.logs",`[sample] boot playtest preview
8
- [sample] spawn protection active
9
- [sample] hud countdown rendered
10
- [sample] wave one completed
11
- [sample] preview report finished`),contextId:"sample_playtest_preview",contextSummary:r}}}const Y="_page_18pmo_2",Z="_sampleBanner_18pmo_9",q="_sampleBannerRow_18pmo_21",J="_sampleBannerMain_18pmo_28",K="_sampleBadge_18pmo_35",X="_sampleTitle_18pmo_50",ee="_sampleMessage_18pmo_57",te="_sampleActions_18pmo_64",se="_primaryAction_18pmo_72",ae="_secondaryAction_18pmo_73",oe="_card_18pmo_109",re="_cardHeader_18pmo_116",ne="_clearButton_18pmo_128",le="_statusRow_18pmo_157",ie="_statusIndicator_18pmo_164",ce="_statusRunning_18pmo_172",pe="_statusPaused_18pmo_177",me="_statusNotRunning_18pmo_181",de="_statusLabel_18pmo_185",ue="_statusMeta_18pmo_192",he="_controlButtons_18pmo_198",ye="_btn_18pmo_205",_e="_btnPrimary_18pmo_227",xe="_btnDanger_18pmo_237",ge="_historyList_18pmo_249",ve="_historyItem_18pmo_257",Se="_historyItemSelected_18pmo_276",fe="_historyItemHeader_18pmo_281",be="_historyIcon_18pmo_287",je="_historyTimestamp_18pmo_292",we="_historyName_18pmo_299",Ne="_historyItemMeta_18pmo_309",Ce="_historyMode_18pmo_318",Ie="_historyDuration_18pmo_322",Le="_historyStatus_18pmo_326",Pe="_status_passed_18pmo_333",Re="_status_failed_18pmo_337",Be="_status_running_18pmo_341",Te="_historyError_18pmo_345",Me="_historyContext_18pmo_355",ke="_historyContextLine_18pmo_364",Ae="_historyContextLabel_18pmo_370",He="_reportContainer_18pmo_379",De="_reportContextPanel_18pmo_385",Ee="_reportContextRow_18pmo_395",$e="_reportContextLabel_18pmo_403",Ue="_reportSection_18pmo_411",Oe="_reportSectionHeader_18pmo_417",Fe="_reportMarkdown_18pmo_429",Ve="_reportLogs_18pmo_442",We="_emptyState_18pmo_457",ze="_emptyStateTitle_18pmo_464",Ge="_emptyStateMessage_18pmo_472",Qe="_upgradePanel_18pmo_481",Ye="_upgradePanelIcon_18pmo_489",Ze="_upgradePanelTitle_18pmo_494",qe="_upgradePanelDesc_18pmo_502",Je="_benefitList_18pmo_512",Ke="_benefitItem_18pmo_523",Xe="_upgradeActions_18pmo_538",s={page:Y,sampleBanner:Z,sampleBannerRow:q,sampleBannerMain:J,sampleBadge:K,sampleTitle:X,sampleMessage:ee,sampleActions:te,primaryAction:se,secondaryAction:ae,card:oe,cardHeader:re,clearButton:ne,statusRow:le,statusIndicator:ie,statusRunning:ce,statusPaused:pe,statusNotRunning:me,statusLabel:de,statusMeta:ue,controlButtons:he,btn:ye,btnPrimary:_e,btnDanger:xe,historyList:ge,historyItem:ve,historyItemSelected:Se,historyItemHeader:fe,historyIcon:be,historyTimestamp:je,historyName:we,historyItemMeta:Ne,historyMode:Ce,historyDuration:Ie,historyStatus:Le,status_passed:Pe,status_failed:Re,status_running:Be,historyError:Te,historyContext:Me,historyContextLine:ke,historyContextLabel:Ae,reportContainer:He,reportContextPanel:De,reportContextRow:Ee,reportContextLabel:$e,reportSection:Ue,reportSectionHeader:Oe,reportMarkdown:Fe,reportLogs:Ve,emptyState:We,emptyStateTitle:ze,emptyStateMessage:Ge,upgradePanel:Qe,upgradePanelIcon:Ye,upgradePanelTitle:Ze,upgradePanelDesc:qe,benefitList:Je,benefitItem:Ke,upgradeActions:Xe};function j(e){return e.trim().toLowerCase()}function et(e){switch(j(e)){case"passed":return"✅";case"failed":return"❌";case"running":return"⏱";default:return"❓"}}function tt(e,o){switch(j(o)){case"run":return e("playtest.status.mode.run","Run");case"server":return e("playtest.status.mode.server","Server");case"edit":return e("playtest.status.mode.edit","Edit");case"play":return e("playtest.status.mode.play","Play");default:return o}}function st(e,o){switch(j(o)){case"passed":return e("playtest.history.status.passed","Passed");case"failed":return e("playtest.history.status.failed","Failed");case"running":return e("playtest.history.status.running","Running");default:return e("playtest.history.status.unknown","Unknown")}}function at(e){return e<1e3?`${e}ms`:`${(e/1e3).toFixed(1)}s`}function ot({entries:e,onSelect:o,selectedTimestamp:r}){const{t:n}=N();return e.length===0?t.jsx("div",{className:s.emptyState,children:n("playtest.history.empty","No test results yet")}):t.jsx("div",{className:s.historyList,children:e.map(a=>{var i,p,c,d,u,h;const m=a.timestamp===r;return t.jsxs("button",{className:`${s.historyItem} ${m?s.historyItemSelected:""}`,onClick:()=>o(a.timestamp),children:[t.jsxs("div",{className:s.historyItemHeader,children:[t.jsx("span",{className:s.historyIcon,children:et(a.status)}),t.jsx("span",{className:s.historyTimestamp,children:a.timestamp}),t.jsx("span",{className:s.historyName,children:a.testName})]}),t.jsxs("div",{className:s.historyItemMeta,children:[t.jsx(S,{text:n("playtest.history.mode.tooltip","Playtest mode used for this recorded test run."),children:t.jsxs("span",{className:s.historyMode,children:[n("playtest.history.mode","Mode"),": ",tt(n,a.mode)]})}),t.jsx("span",{className:s.historyDuration,children:at(a.durationMs)}),t.jsx(S,{text:n("playtest.history.status.tooltip","Recorded result state for this automated playtest run."),children:t.jsx("span",{className:`${s.historyStatus} ${s[`status_${j(a.status)}`]??""}`,children:st(n,a.status)})})]}),a.errorMessage&&t.jsx("div",{className:s.historyError,children:a.errorMessage}),(a.contextId||((i=a.contextSummary)==null?void 0:i.testScenario)||((p=a.contextSummary)==null?void 0:p.expectedBehavior)||((c=a.contextSummary)==null?void 0:c.observedBehavior))&&t.jsxs("div",{className:s.historyContext,children:[a.contextId&&t.jsxs("div",{className:s.historyContextLine,children:[t.jsx("span",{className:s.historyContextLabel,children:n("playtest.context.contextId","Context ID")}),t.jsx("span",{children:a.contextId})]}),((d=a.contextSummary)==null?void 0:d.testScenario)&&t.jsxs("div",{className:s.historyContextLine,children:[t.jsx("span",{className:s.historyContextLabel,children:n("playtest.context.why","Why this test ran")}),t.jsx("span",{children:a.contextSummary.testScenario})]}),((u=a.contextSummary)==null?void 0:u.expectedBehavior)&&t.jsxs("div",{className:s.historyContextLine,children:[t.jsx("span",{className:s.historyContextLabel,children:n("playtest.context.expected","Expected")}),t.jsx("span",{children:a.contextSummary.expectedBehavior})]}),((h=a.contextSummary)==null?void 0:h.observedBehavior)&&t.jsxs("div",{className:s.historyContextLine,children:[t.jsx("span",{className:s.historyContextLabel,children:n("playtest.context.observed","Observed")}),t.jsx("span",{children:a.contextSummary.observedBehavior})]})]})]},a.timestamp)})})}function rt({report:e}){var n,a,m,i,p,c;const{t:o}=N(),r=!!((n=e.contextSummary)!=null&&n.testScenario||(a=e.contextSummary)!=null&&a.expectedBehavior||(m=e.contextSummary)!=null&&m.observedBehavior);return t.jsxs("div",{className:s.reportContainer,children:[r&&t.jsxs("div",{className:s.reportContextPanel,children:[((i=e.contextSummary)==null?void 0:i.testScenario)&&t.jsxs("div",{className:s.reportContextRow,children:[t.jsx("span",{className:s.reportContextLabel,children:o("playtest.context.why","Why this test ran")}),t.jsx("span",{children:e.contextSummary.testScenario})]}),((p=e.contextSummary)==null?void 0:p.expectedBehavior)&&t.jsxs("div",{className:s.reportContextRow,children:[t.jsx("span",{className:s.reportContextLabel,children:o("playtest.context.expected","Expected")}),t.jsx("span",{children:e.contextSummary.expectedBehavior})]}),((c=e.contextSummary)==null?void 0:c.observedBehavior)&&t.jsxs("div",{className:s.reportContextRow,children:[t.jsx("span",{className:s.reportContextLabel,children:o("playtest.context.observed","Observed")}),t.jsx("span",{children:e.contextSummary.observedBehavior})]})]}),e.markdown&&t.jsxs("div",{className:s.reportSection,children:[t.jsx("div",{className:s.reportSectionHeader,children:t.jsx(S,{text:o("playtest.report.content.tooltip","Markdown summary for the selected automated playtest run."),children:t.jsx("span",{children:o("playtest.report.content","Report")})})}),t.jsx("pre",{className:s.reportMarkdown,children:e.markdown})]}),e.logs&&t.jsxs("div",{className:s.reportSection,children:[t.jsx("div",{className:s.reportSectionHeader,children:t.jsx(S,{text:o("playtest.report.logs.tooltip","Execution logs captured for the selected automated playtest run."),children:t.jsx("span",{children:o("playtest.report.logs","Logs")})})}),t.jsx("pre",{className:s.reportLogs,children:e.logs})]}),!e.markdown&&!e.logs&&t.jsx("div",{className:s.emptyState,children:o("playtest.report.empty","No report content available")})]})}function ht(){var R;const{t:e}=N(),{trackEvent:o}=D(),{tier:r,loading:n}=E(),a=!n&&r==="basic",[m,i]=l.useState(null),p=G({enabled:!a,placeId:m}),{show:c}=$(),[d,u]=l.useState(null),[h,g]=l.useState(!1),[f,y]=l.useState(!1),{history:x,selectedReport:w,loading:M}=p,_=a?Q(e):null,C=((R=_==null?void 0:_.history[0])==null?void 0:R.timestamp)??null,I=a?d??C:d,L=(_==null?void 0:_.history)??x,P=_&&I===C?_.report:w,k=a?!1:M,A=b=>{u(b),!a&&p.loadReport(b)},H=async()=>{y(!0);try{await p.clearHistory(),c(e("toast.clearSuccess","Cleared successfully"),"success"),g(!1),u(null)}catch{c(e("toast.clearFailed","Failed to clear data"),"error")}finally{y(!1)}};return t.jsxs("div",{className:s.page,children:[t.jsx(O,{title:e("page.playtest.title","Playtest"),description:e("page.playtest.description","Review automated playtest runs, saved reports, and result history."),helpTopicId:"playtest",helpState:{tier:r}}),!a&&t.jsx(F,{surface:"playtest",selectable:!0,selectedPlaceId:m,onSelectedPlaceIdChange:b=>{i(b),u(null)}}),a&&t.jsx("div",{className:s.sampleBanner,children:t.jsxs("div",{className:s.sampleBannerRow,children:[t.jsxs("div",{className:s.sampleBannerMain,children:[t.jsx("div",{className:s.sampleBadge,children:e("playtest.sample.badge","Preview of the Pro playtest view")}),t.jsx("div",{className:s.sampleTitle,children:e("playtest.sample.title","You are previewing the report viewer that becomes available after upgrading to Pro.")}),t.jsx("div",{className:s.sampleMessage,children:e("playtest.sample.message","This preview uses sample data. Real playtest history management and stored reports unlock with Pro.")})]}),t.jsx("div",{className:s.sampleActions,children:t.jsx("a",{className:s.primaryAction,href:U.playtest,target:"_blank",rel:"noreferrer",onClick:()=>o("dashboard_click_event",{click_target:"upgrade_cta",placement:"playtest_sample_banner",page:"playtest"}),children:e("tier.upgrade","View Pro")})})]})}),t.jsxs("div",{className:s.card,children:[t.jsxs("div",{className:s.cardHeader,children:[t.jsx(B,{label:e("playtest.history.title","Test History"),tooltip:e("playtest.history.title.tooltip","Recorded automated playtest runs for this project.")}),a?t.jsx(S,{text:e("playtest.sample.clearDisabled","Available with Pro for live playtest history."),children:t.jsx("span",{children:t.jsx("button",{className:s.clearButton,disabled:!0,children:e("common.clear","Clear")})})}):t.jsx("button",{className:s.clearButton,onClick:()=>{o("dashboard_click_event",{click_target:"playtest_clear_history",page:"playtest"}),g(!0)},children:e("common.clear","Clear")})]}),k?t.jsx("div",{className:s.emptyState,children:e("common.loading","Loading...")}):L.length===0?t.jsxs("div",{className:s.emptyState,children:[t.jsx("div",{className:s.emptyStateTitle,children:e("playtest.empty.title","No playtest results yet")}),t.jsx("div",{className:s.emptyStateMessage,children:e("playtest.empty.message","Test results for this place will appear here after the AI Agent runs a Playtest.")})]}):t.jsx(ot,{entries:L,onSelect:A,selectedTimestamp:I??void 0})]}),P&&t.jsxs("div",{className:s.card,children:[t.jsx("div",{className:s.cardHeader,children:t.jsx(B,{label:e("playtest.report.title","Selected Report"),tooltip:e("playtest.report.title.tooltip","Detailed output for the currently selected automated playtest run.")})}),t.jsx(rt,{report:P})]}),!a&&t.jsx(V,{open:h,title:e("playtest.clear.title","Clear test history?"),message:e("playtest.clear.message","This permanently removes the stored playtest reports for the current place."),cancelLabel:e("common.cancel","Cancel"),confirmLabel:e("common.clear","Clear"),loading:f,onCancel:()=>!f&&g(!1),onConfirm:H})]})}export{ht as Component};