@weppy/roblox-mcp 2.17.14 → 2.17.15

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 (37) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dashboard/dist/assets/{AiPromptExamples-B3Uy68MJ.js → AiPromptExamples-Cwfw0ZqC.js} +1 -1
  3. package/dashboard/dist/assets/{AssetsPage-DGSoVLnO.js → AssetsPage-Cd1Ir_6o.js} +1 -1
  4. package/dashboard/dist/assets/{ChangelogPage-B9dCtQOo.js → ChangelogPage-BPP9_53U.js} +1 -1
  5. package/dashboard/dist/assets/{ConfirmModal-B6ovGUld.js → ConfirmModal-CdZW4-sk.js} +1 -1
  6. package/dashboard/dist/assets/{ConnectionPage-B3NzHXCM.js → ConnectionPage-j6oGLSEC.js} +1 -1
  7. package/dashboard/dist/assets/{ControlsPage-dQj67_QM.js → ControlsPage-CkU_Xz6W.js} +1 -1
  8. package/dashboard/dist/assets/{GameChangeDetail-BfltcON0.js → GameChangeDetail-BVanxiU-.js} +1 -1
  9. package/dashboard/dist/assets/{InfoLabel-CUAC4KaS.js → InfoLabel-DuNAxesz.js} +1 -1
  10. package/dashboard/dist/assets/OverviewPage-DaR6Zf4N.js +1 -0
  11. package/dashboard/dist/assets/{PageHeader-BbXDD7J9.js → PageHeader-C8RSD2wK.js} +1 -1
  12. package/dashboard/dist/assets/{PlaceSelectOptions-CoWR0lUt.js → PlaceSelectOptions-B-hh23M4.js} +1 -1
  13. package/dashboard/dist/assets/{PlaytestAiPromptExamples-CNzT1Zzl.js → PlaytestAiPromptExamples-CVThXrz5.js} +1 -1
  14. package/dashboard/dist/assets/{PlaytestPage-DoyKVZGe.js → PlaytestPage-BoKMpsGY.js} +1 -1
  15. package/dashboard/dist/assets/{SettingsPage-DmuhCaCs.js → SettingsPage-Cgnm6p8V.js} +1 -1
  16. package/dashboard/dist/assets/SyncPage-CZ3NhJOo.js +1 -0
  17. package/dashboard/dist/assets/{Tabs-CI7QBRFn.js → Tabs-Br8Zgvmi.js} +1 -1
  18. package/dashboard/dist/assets/{TierPromoPanel-BcWyr5ni.js → TierPromoPanel-BYdwzdxN.js} +1 -1
  19. package/dashboard/dist/assets/{ToolsPage-BYlAjTDF.js → ToolsPage-DC8hKMbq.js} +1 -1
  20. package/dashboard/dist/assets/{TooltipText-C8S8B8k6.js → TooltipText-DudXe1Qy.js} +1 -1
  21. package/dashboard/dist/assets/{UiStudioPage-Sg9Sc7dA.js → UiStudioPage-DZUmNIp2.js} +1 -1
  22. package/dashboard/dist/assets/{WhatsNewPage-Xu9jN9ei.js → WhatsNewPage-EVjYD3ti.js} +1 -1
  23. package/dashboard/dist/assets/{bot-GYHFrFjr.js → bot-Cud9Il_O.js} +1 -1
  24. package/dashboard/dist/assets/{check-CK84xvEL.js → check-CsYm1hvL.js} +1 -1
  25. package/dashboard/dist/assets/{copy-Dagqdoq_.js → copy-yeY7HS26.js} +1 -1
  26. package/dashboard/dist/assets/{index-Dryjq9a5.js → index-CbTOKOZ5.js} +11 -11
  27. package/dashboard/dist/assets/{rotate-ccw-BhctsB9r.js → rotate-ccw-CzAWuBD5.js} +1 -1
  28. package/dashboard/dist/assets/{sample-requests-B6Kd_Wul.js → sample-requests-Ctlw72Az.js} +1 -1
  29. package/dashboard/dist/assets/{trash-2-BkWSghui.js → trash-2-BAenJavG.js} +1 -1
  30. package/dashboard/dist/assets/{useLiveUptime-C0rFrLl1.js → useLiveUptime-Dyb_GmdN.js} +1 -1
  31. package/dashboard/dist/assets/{useSettings-CyIbYDSy.js → useSettings-fppB8ls5.js} +1 -1
  32. package/dashboard/dist/index.html +1 -1
  33. package/dist/index.js +244 -160
  34. package/package.json +1 -1
  35. package/roblox-plugin/WeppyRobloxMCP.rbxm +0 -0
  36. package/dashboard/dist/assets/OverviewPage-DAHV_J9P.js +0 -1
  37. package/dashboard/dist/assets/SyncPage-DTwGdjCc.js +0 -1
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OverviewPage-DAHV_J9P.js","assets/InfoLabel-CUAC4KaS.js","assets/PageHeader-BbXDD7J9.js","assets/PageHeader-ip0Enk1k.css","assets/useLiveUptime-C0rFrLl1.js","assets/useLiveUptime-C2zYt5iE.css","assets/TooltipText-C8S8B8k6.js","assets/GameChangeDetail-BfltcON0.js","assets/GameChangeDetail-C1XtdYwk.css","assets/OverviewPage-CviBL36S.css","assets/ConnectionPage-B3NzHXCM.js","assets/ConfirmModal-B6ovGUld.js","assets/ConfirmModal.module-DJksQHBd.js","assets/ConfirmModal-uqFW3py_.css","assets/bot-GYHFrFjr.js","assets/copy-Dagqdoq_.js","assets/rotate-ccw-BhctsB9r.js","assets/ConnectionPage-BStKoHK8.css","assets/SyncPage-DTwGdjCc.js","assets/TierPromoPanel-BcWyr5ni.js","assets/TierPromoPanel-Ch583WAw.css","assets/SyncPage-BeZ52U2s.css","assets/AssetsPage-DGSoVLnO.js","assets/PlaceSelectOptions-CoWR0lUt.js","assets/PlaceSelectOptions-DCv8Lnxo.css","assets/AiPromptExamples-B3Uy68MJ.js","assets/AiPromptExamples-DvVR2a1g.css","assets/trash-2-BkWSghui.js","assets/AssetsPage-Bdcj6AyD.css","assets/ChangelogPage-B9dCtQOo.js","assets/Tabs-CI7QBRFn.js","assets/Tabs-Ci4-OJm-.css","assets/ChangelogPage-B1CY41my.css","assets/PlaytestPage-DoyKVZGe.js","assets/PlaytestAiPromptExamples-CNzT1Zzl.js","assets/check-CK84xvEL.js","assets/PlaytestPage-BkuJr8Va.css","assets/UiStudioPage-Sg9Sc7dA.js","assets/sample-requests-B6Kd_Wul.js","assets/sample-requests-BeoPIWbH.css","assets/UiStudioPage-DmWjv22S.css","assets/ToolsPage-BYlAjTDF.js","assets/ToolsPage-ApMAWvg3.css","assets/ControlsPage-dQj67_QM.js","assets/useSettings-CyIbYDSy.js","assets/useSettings-I6BaXsZq.css","assets/WhatsNewPage-Xu9jN9ei.js","assets/WhatsNewPage-WMbbAUsL.css","assets/SettingsPage-DmuhCaCs.js","assets/SettingsPage-BO1WqaOl.css"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OverviewPage-DaR6Zf4N.js","assets/InfoLabel-DuNAxesz.js","assets/PageHeader-C8RSD2wK.js","assets/PageHeader-ip0Enk1k.css","assets/useLiveUptime-Dyb_GmdN.js","assets/useLiveUptime-C2zYt5iE.css","assets/TooltipText-DudXe1Qy.js","assets/GameChangeDetail-BVanxiU-.js","assets/GameChangeDetail-C1XtdYwk.css","assets/OverviewPage-CviBL36S.css","assets/ConnectionPage-j6oGLSEC.js","assets/ConfirmModal-CdZW4-sk.js","assets/ConfirmModal.module-DJksQHBd.js","assets/ConfirmModal-uqFW3py_.css","assets/bot-Cud9Il_O.js","assets/copy-yeY7HS26.js","assets/rotate-ccw-CzAWuBD5.js","assets/ConnectionPage-BStKoHK8.css","assets/SyncPage-CZ3NhJOo.js","assets/TierPromoPanel-BYdwzdxN.js","assets/TierPromoPanel-Ch583WAw.css","assets/SyncPage-BeZ52U2s.css","assets/AssetsPage-Cd1Ir_6o.js","assets/PlaceSelectOptions-B-hh23M4.js","assets/PlaceSelectOptions-DCv8Lnxo.css","assets/AiPromptExamples-Cwfw0ZqC.js","assets/AiPromptExamples-DvVR2a1g.css","assets/trash-2-BAenJavG.js","assets/AssetsPage-Bdcj6AyD.css","assets/ChangelogPage-BPP9_53U.js","assets/Tabs-Br8Zgvmi.js","assets/Tabs-Ci4-OJm-.css","assets/ChangelogPage-B1CY41my.css","assets/PlaytestPage-BoKMpsGY.js","assets/PlaytestAiPromptExamples-CVThXrz5.js","assets/check-CsYm1hvL.js","assets/PlaytestPage-BkuJr8Va.css","assets/UiStudioPage-DZUmNIp2.js","assets/sample-requests-Ctlw72Az.js","assets/sample-requests-BeoPIWbH.css","assets/UiStudioPage-DmWjv22S.css","assets/ToolsPage-DC8hKMbq.js","assets/ToolsPage-ApMAWvg3.css","assets/ControlsPage-CkU_Xz6W.js","assets/useSettings-fppB8ls5.js","assets/useSettings-I6BaXsZq.css","assets/WhatsNewPage-EVjYD3ti.js","assets/WhatsNewPage-WMbbAUsL.css","assets/SettingsPage-Cgnm6p8V.js","assets/SettingsPage-BO1WqaOl.css"])))=>i.map(i=>d[i]);
2
2
  var Hy=Object.defineProperty;var Ny=(i,s,r)=>s in i?Hy(i,s,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[s]=r;var Ia=(i,s,r)=>Ny(i,typeof s!="symbol"?s+"":s,r);function Sp(i,s){for(var r=0;r<s.length;r++){const d=s[r];if(typeof d!="string"&&!Array.isArray(d)){for(const u in d)if(u!=="default"&&!(u in i)){const p=Object.getOwnPropertyDescriptor(d,u);p&&Object.defineProperty(i,u,p.get?p:{enumerable:!0,get:()=>d[u]})}}}return Object.freeze(Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}))}(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const u of document.querySelectorAll('link[rel="modulepreload"]'))d(u);new MutationObserver(u=>{for(const p of u)if(p.type==="childList")for(const g of p.addedNodes)g.tagName==="LINK"&&g.rel==="modulepreload"&&d(g)}).observe(document,{childList:!0,subtree:!0});function r(u){const p={};return u.integrity&&(p.integrity=u.integrity),u.referrerPolicy&&(p.referrerPolicy=u.referrerPolicy),u.crossOrigin==="use-credentials"?p.credentials="include":u.crossOrigin==="anonymous"?p.credentials="omit":p.credentials="same-origin",p}function d(u){if(u.ep)return;u.ep=!0;const p=r(u);fetch(u.href,p)}})();function bp(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}var Cl={exports:{}},os={},Al={exports:{}},Ae={};/**
3
3
  * @license React
4
4
  * react.production.min.js
@@ -74,7 +74,7 @@ Error generating stack: `+l.message+`
74
74
  - Keep adapterStudioOnly=true so generated source checks RunService:IsStudio() before accessing game code. Set it to false only if I explicitly ask to omit that check, and show the production warning in the plan.
75
75
  - Preserve development source. Guarded WEPPY-managed adapters can remain for direct Studio publishing; guard-disabled or custom test code and test objects still need review.
76
76
  - Preview managed source with manage_studio.playtest_adapter_plan and apply the returned token with manage_studio.playtest_adapter_apply only after reviewing the diff and usages.
77
- - Show the source location, files changed, profile usages, cleanup behavior, and what I must manually check before publishing.`,"sidebar.overview":"Overview","sidebar.changelog":"Changelog","sidebar.connection":"Connection","sidebar.sync":"Sync","sidebar.playtest":"Playtest","sidebar.tools":"Tools","sidebar.settings":"Settings","sidebar.ui_studio":"UI Studio","sidebar.gate.l1":"MCP server connection required","sidebar.gate.l2":"Roblox Studio plugin connection required","header.currentProject":"Current Project","header.unknownProject":"Unknown project","header.projectRoot.label":"Project Root","header.currentProject.loading":"Loading project root...","header.currentProject.unavailable":"Project root unavailable","header.placeNotConnected":"Place not connected","header.currentProject.tooltip":"Currently selected project folder","header.currentProject.loading.tooltip":"Project root information is still loading","header.currentProject.unavailable.tooltip":"Current project root information is unavailable","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Loading sync root...","header.currentProjectSyncRoot.unavailable":"Sync root unavailable","header.currentProjectSyncRoot.tooltip":"Current sync root folder for the selected project","header.currentProjectSyncRoot.loading.tooltip":"Sync root information is still loading","header.currentProjectSyncRoot.unavailable.tooltip":"Current sync root information is unavailable","header.testFiles.label":"Test Files","header.testFiles.unavailable":"Test files unavailable","header.testFiles.tooltip":"Current playtest files directory for the selected place","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Plugin connection required","header.places.liveRequired":"Plugin connection required for live active place","header.place.tooltip":"Connected Roblox place","header.placeNotConnected.tooltip":"Place not connected","placeScope.current.label":"Current Place","placeScope.lastActive.label":"Last Active Place","placeScope.selected.label":"Selected Place","placeScope.unknownPlace":"Unknown place","placeScope.live":"Live","placeScope.connected":"Studio connected","placeScope.stored":"Stored data","placeScope.connectedGroup":"Connected Studios","placeScope.storedGroup":"Stored data","placeScope.stored.note":"No connected Studio currently has this place open.","placeScope.pluginRequired":"Plugin required","placeScope.pluginRequired.note":"Connect WEPPY Plugin to confirm the live active place.","placeScope.noPlace.label":"Place scope","placeScope.noPlace.value":"No place data available yet","placeScope.noPlace.badge":"No place","placeScope.noPlace.note":"Connect WEPPY Plugin and sync a place to create place-scoped data.","placeScope.selected.note":"Showing stored data only. Studio routing is unchanged.","placeScope.surface.sync":"Sync status and logs use this place.","placeScope.surface.changelog":"Changelog sessions use this place.","placeScope.surface.playtest":"Playtest reports use this place.","placeScope.surface.uiStudio":"UI captures and change history use this place.","placeScope.surface.tools":"Tool history and statistics use this place.","placeScope.loading":"Loading place scope...","placeScope.unavailable":"Place scope unavailable","placeScope.selector.label":"Place data","placeScope.shortcuts.trigger":"Quick links","placeScope.shortcuts.label":"Place shortcuts","placeScope.shortcuts.settings":"Place settings","placeScope.shortcuts.experience":"Experience management","placeScope.shortcuts.roblox":"View on Roblox","placeScope.folder.duplicate":"Duplicate folder","placeScope.folder.unresolved":"Representative folder unconfirmed","placeScope.folder.noSyncHistory":"No sync history","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Place folder details","placeScope.folder.duplicateReason":"The current saved location is {canonicalFolder}. This folder is backed up after a successful full sync.","placeScope.folder.unresolvedReason":"This Place remains selectable by ID, but no specific folder is confirmed as the representative yet.","placeScope.folder.unknown":"unknown","placeScope.selector.noneSelectable":"No selectable Place folder","header.changeProjectRoot":"Change Project Root","header.changeProjectRoot.ariaLabel":"Change project root","header.changeProjectRoot.tooltip":"Change the current project root","header.changeProjectRoot.disabledTooltip.l0":"MCP server connection required before project root can be changed","header.changeProjectRoot.disabledTooltip.loading":"Project root information is still loading","header.changeProjectRoot.disabledTooltip.unavailable":"Current project root information is unavailable","header.projectRootModal.initial.title":"Change project root","header.projectRootModal.initial.body.connected":"After you choose a project folder, MCP will switch to the new project root and the current Studio contents will be fully resynced into the new <selected project folder>/weppy-project-sync target.","header.projectRootModal.initial.body.disconnected":"After you choose a project folder, MCP will switch to the new project root and use <selected project folder>/weppy-project-sync as the next sync target.","header.projectRootModal.initial.nextSyncRoot":"New sync target after selection","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"Current sync stops immediately.","header.projectRootModal.initial.warningFreshSync":"The current Studio contents will be used to build a fresh full sync in the new target.","header.projectRootModal.initial.warningNoMove":"Old sync folders are not moved automatically.","header.projectRootModal.initial.warningDeferredSync":"If Studio is not connected, full resync starts the next time the plugin connects.","header.projectRootModal.confirm.title":"Confirm new project root","header.projectRootModal.confirm.body":"Review the selected project folder before applying.","header.projectRootModal.confirm.projectRoot":"Selected project folder","header.projectRootModal.confirm.syncRoot":"New sync target","header.projectRootModal.confirm.warningNoMove":"Existing sync folders are not moved automatically.","header.projectRootModal.pick":"Choose folder","header.projectRootModal.apply":"Apply change","header.projectRootModal.cancel":"Cancel","header.projectRootModal.error":"Failed to change project root","status.online":"Online","status.offline":"Offline","status.idle":"Idle","status.syncing":"Syncing","status.error":"Error","status.initializing":"Initializing","level.l0.title":"Server disconnected","level.l0.message":"WEPPY Dashboard opened but MCP server has stopped or is not responding.","level.l1.title":"Server connected","level.l1.hint":"Check: Is Roblox Studio running? Is the plugin installed?","level.l2.ok":"Studio connected","tier.basic":"Basic","tier.basic.tooltip":"Basic tier with the standard WEPPY Dashboard feature set.","tier.pro":"Pro","tier.pro.tooltip":"Pro tier with the full WEPPY Dashboard feature set.","tier.mixed":"Mixed","tier.upgrade":"View Pro","tier.banner.save":"Save AI tokens with Pro!","tier.tool.query_instances.desc":"Inspect instances, search children and descendants, and inspect class data. Pro adds file tree, project structure, and property or tag search.","tier.tool.mutate_instances.desc":"Create, delete, clone, and move instances. Pro adds tree creation and bulk create, delete, or clone operations.","tier.tool.manage_properties.desc":"Read and set properties, attributes, and tags. Pro adds calculated updates, relative changes, and bulk property operations.","tier.tool.manage_scripts.desc":"Read, write, create, delete, edit, and search script source. Pro adds bulk replacement across scripts.","tier.tool.manage_ui.desc":"Pro only. Create or refine game-style menus, HUDs, buttons, labels, and image panels, then capture screens and review improvement suggestions.","tier.tool.manage_ui.action.design_brief":"Plan UI direction","tier.tool.manage_ui.action.create_tree":"Create new UI","tier.tool.manage_ui.action.update":"Update existing UI","tier.tool.manage_ui.action.delete":"Remove UI","tier.tool.manage_ui.action.preview":"Capture UI screen","tier.tool.manage_ui.action.check":"Review improvement suggestions","tier.tool.manage_lighting.desc":"Pro only. Configure lighting, atmosphere, sky, terrain properties, and time-of-day settings.","tier.tool.manage_selection.desc":"Read, set, and clear the current Studio selection. Pro adds context, details, add or remove, and selection watch support.","tier.tool.manage_camera.desc":"Inspect camera state, focus by path or position, and request suggested views.","tier.tool.manage_tween.desc":"Pro only. Create, play, pause, and cancel tweens for smooth animation.","tier.tool.manage_audio.desc":"Pro only. Play, stop, pause, and resume sounds, and configure the audio listener.","tier.tool.manage_animation.desc":"Pro only. Load, play, and stop animations, and inspect active animation tracks.","tier.tool.manage_physics.desc":"Pro only. Register collision groups, configure group collisions, and inspect available groups.","tier.tool.manage_effects.desc":"Pro only. Emit particles, clear effects, and toggle effect state.","tier.tool.manage_terrain.desc":"Pro only. Fill terrain shapes, clear regions, replace materials, manage terrain colors, read or write voxels, generate terrain, and smooth terrain.","tier.tool.spatial_query.desc":"Pro only. Run raycasts, find ground, validate placement, scan areas, search for flat or spawn positions, analyze walkability, map space, and inspect collisions.","tier.tool.manage_assets.desc":"Pro only. Insert models, inspect asset info, search the creator store, insert free assets or packages, and export assets.","tier.tool.manage_sync.desc":"Pro only. Inspect sync status, configuration, history, directions, and read or write synced files.","tier.tool.workspace_state.desc":"Pro only. Run full sync, capture snapshots, inspect recent changes and viewport state, and manage related metadata.","tier.tool.manage_logs.desc":"Inspect output logs with filtering, incremental polling, buffer clearing, and recent error lookup.","tier.tool.system_info.desc":"Inspect connection status and current tier. Pro adds place info, services, Studio settings, playtest control, and automated tests.","tier.tool.manage_studio.desc":"Pro only. Toggle Studio editor view settings such as UI preview for screenshot and QA workflows; it changes Studio session settings, not game UI objects.","tier.tool.batch_execute.desc":"Pro only. Run multiple commands in a batch, with sequential execution and optional continue-on-error behavior.","tier.tool.execute_luau.desc":"Pro only. Execute arbitrary Luau code inside the Roblox Studio sandbox.","connection.server.title":"Bridge Status","connection.server.version":"Version","connection.server.version.tooltip":"WEPPY Bridge runtime version","connection.server.pid":"PID","connection.server.pid.tooltip":"Operating system process identifier","connection.server.uptime":"Uptime","connection.server.uptime.tooltip":"Time elapsed since the WEPPY Bridge started","connection.server.session":"Session","connection.server.session.tooltip":"Current WEPPY Bridge session identifier","connection.server.exec":"Exec","connection.server.exec.tooltip":"Executable path used to launch the WEPPY Bridge","connection.server.restart":"Restart Bridge","connection.server.restarting":"Restarting…","connection.server.restartUnavailable":"Connect at least one AI Agent before restarting so its MCP Adapter can start the new Bridge.","connection.server.restartTitle":"Restart WEPPY Bridge?","connection.server.restartMessage":"Dashboard and Studio targets will disconnect briefly. In-progress commands may have an unknown result, and active Playtest sessions or pending controls will be cleaned up. A connected MCP Adapter will start a new Bridge automatically.","connection.server.restartConfirm":"Restart Bridge","connection.server.restartRequesting":"Requesting Bridge restart…","connection.server.restartReconnecting":"Reconnecting to WEPPY Bridge…","connection.server.restartWaiting":"Dashboard and Studio connections will return automatically when the new Bridge is ready.","connection.server.restartSucceeded":"WEPPY Bridge restarted","connection.server.restartFailed":"WEPPY Bridge could not be restarted","connection.server.restartTimeout":"The new Bridge did not become ready in time. Check the MCP connection in your AI tool, then try again.","connection.server.restartStale":"The Bridge changed before the restart request was accepted. Refresh the current status and try again.","connection.reconnect":"Reconnect","connection.checkSettings":"Check Settings","connection.agents.title":"AI Agents","connection.agents.name":"Agent","connection.agents.version":"Version","connection.agents.version.tooltip":"MCP Adapter package version for this agent session.","connection.agents.cwd":"Working Dir","connection.agents.cwd.tooltip":"Current working directory for the connected AI agent","connection.agents.projectRoot":"Project Root","connection.agents.projectRoot.tooltip":"Authoritative project root for sync ownership","connection.agents.projectRoot.unresolved":"Unresolved","connection.agents.connected":"Connected","connection.agents.unknown":"Unknown","connection.agents.none":"No agents connected","connection.plugins.title":"Plugins","connection.plugins.place":"Place","connection.plugins.clientId":"Connection ID","connection.plugins.clientId.tooltip":"Full connection ID for diagnostics","connection.plugins.lastSeen":"Last Seen","connection.plugins.lastSeen.tooltip":"Most recent heartbeat received from the plugin","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Installed plugin version reported by Studio","connection.plugins.none":"No plugins connected","connection.targets.title":"Studio Targets","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"Short name for this Roblox Studio window","connection.targets.place":"Place","connection.targets.placeId":"Place ID","connection.targets.placeId.tooltip":"Roblox Place ID for this Studio window","connection.targets.clientId":"Connection ID","connection.targets.clientId.tooltip":"Full connection ID for diagnostics. Usually use Studio ID instead.","connection.targets.session":"Session","connection.targets.session.tooltip":"Command channel state for this Studio target","connection.targets.lastUsed":"Last Used","connection.targets.lastUsed.tooltip":"Most recent plugin-route request routed to this Studio target","connection.targets.lastSeen":"Last Seen","connection.targets.lastSeen.tooltip":"Most recent heartbeat received from this Studio target","connection.targets.version":"Version","connection.targets.version.tooltip":"Installed plugin version reported by Studio","connection.targets.routing":"Routing","connection.targets.routing.tooltip":"Default Studio window when the agent does not name one","connection.targets.inFlight":"In Flight","connection.targets.inFlight.tooltip":"Active command request currently routed to this Studio target","connection.targets.studioState":"Studio State","connection.targets.studioState.tooltip":"Current edit/play runtime state reported by this Studio window","connection.targets.studioState.edit":"Edit","connection.targets.studioState.running":"Running","connection.targets.studioState.paused":"Paused","connection.targets.studioState.unknown":"Unknown","connection.targets.studioState.source.thread":"WEPPY play command","connection.targets.studioState.source.pluginConnection":"Studio Play/Test connection","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"Unknown source","connection.targets.studioState.updatedUnknown":"not reported","connection.targets.copyPlaceId":"Copy Place ID","connection.targets.copyTargetAlias":"Copy Studio ID","connection.targets.copyClientId":"Copy Connection ID","connection.targets.copied":"Copied value","connection.targets.copyFailed":"Failed to copy value","connection.targets.none":"No Studio targets connected. Open Roblox Studio and connect WEPPY Plugin.","connection.targets.help":"When multiple Studio windows are connected, tell the agent to use Studio ID studio-1 to choose one.","connection.topology.ariaLabel":"Connection topology","connection.topology.title":"Connection topology","connection.topology.description":"Each AI agent connects through its own MCP Adapter to one shared WEPPY Bridge, which keeps Roblox Studio connected.","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"Active","connection.topology.stale":"Stale","connection.topology.unknown":"Unknown","connection.topology.lastContact":"Last contact","connection.topology.noContact":"No recent contact","connection.topology.versionUnknown":"Version unknown","connection.topology.placeUnknown":"Place unknown","connection.topology.moreAgents":"+{count} more agents","connection.topology.moreStudios":"+{count} more studios","connection.topology.allAgentsVisible":"All agents visible","connection.topology.allStudiosVisible":"All studios visible","connection.topology.showAll":"Show all","connection.topology.showLess":"Show less","connection.topology.showAllAgents":"Show all AI agents","connection.topology.showAllStudios":"Show all Studio targets","connection.topology.showLessAgents":"Show less AI agents","connection.topology.showLessStudios":"Show less Studio targets","connection.routing.updateFailed":"Failed to update routing target","connection.log.title":"Connection Log","connection.log.empty":"No events yet","connection.time.secondsAgo":"s ago","connection.time.minutesAgo":"m ago","connection.time.hoursAgo":"h ago","common.loading":"Loading...","common.retry":"Retry","common.reconnecting":"Reconnecting...","common.expand":"Expand","common.collapse":"Collapse","tools.tab.history":"History","tools.tab.statistics":"Statistics","tools.tab.failures":"Failures","tools.col.time":"Time","tools.col.time.tooltip":"When the tool run was recorded.","tools.col.toolAction":"Tool.Action","tools.col.toolAction.tooltip":"Tool name and action that were executed.","tools.col.duration":"Duration","tools.col.duration.tooltip":"How long the tool took to finish.","tools.col.status":"Status","tools.col.status.tooltip":"Outcome of the recorded tool run.","tools.col.tier":"Tier","tools.col.tier.tooltip":"License tier required for the tool or action.","tools.col.tierStats.tooltip":"Basic, Pro, or Mixed summary for the tool statistics row.","tools.col.tool":"Tool","tools.col.tool.tooltip":"Consolidated tool name in the statistics table.","tools.col.calls":"Calls","tools.col.calls.tooltip":"Total number of recorded calls for this tool.","tools.col.ok":"OK","tools.col.ok.tooltip":"Number of direct successful runs.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Number of runs that succeeded through fallback execution.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Number of blocked runs without fallback execution.","tools.col.warn":"WARN","tools.col.warn.tooltip":"Number of expected failures caused by caller input, project state, Roblox policy, or user code.","tools.col.err":"FAILED","tools.col.err.tooltip":"Number of runs that failed.","tools.col.okRate":"OK%","tools.col.okRate.tooltip":"Percentage of calls that finished successfully.","tools.col.avgTime":"Avg Time","tools.col.avgTime.tooltip":"Average execution time across recorded calls.","tools.col.error":"Error","tools.filter.tool":"Tool","tools.filter.all":"All","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"This entry used a Pro-only tool or action.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"The requested Pro action succeeded via a Basic fallback.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"The requested Pro action was blocked and no fallback ran.","tools.badge.warn":"WARN","tools.badge.warn.tooltip":"The tool call failed as an expected caller, project, policy, or user-code issue.","tools.badge.err":"FAILED","tools.badge.err.tooltip":"The tool run failed.","tools.status.ok":"OK","tools.status.ok.tooltip":"The tool run completed successfully.","tools.tier.mixed.tooltip":"This tool includes both Basic and Pro actions.","tools.detail.params":"Parameters","tools.detail.params.tooltip":"Input parameters passed to this tool run.","tools.detail.result":"Result","tools.detail.result.tooltip":"Returned result payload for this tool run.","tools.detail.requestedCommand":"Command Sent","tools.detail.executedCommand":"Executed Command","tools.detail.alternatives":"Alternatives","tools.detail.blockedMessage":"Blocked Reason","tools.detail.noFallback":"No Fallback","tools.detail.noFallback.value":"No fallback ran.","tools.detail.warningMessage":"Warning Message","tools.detail.errorMessage":"Error Message","tools.detail.open":"Details","tools.detail.openLabel":"View details for {command}","tools.detail.dialogLabel":"Tool execution detail","tools.detail.title":"Tool execution","tools.history.routing":"Routing","tools.history.routing.mode":"Mode","tools.history.routing.requested":"Requested","tools.history.routing.actual":"Actual","tools.history.routing.none":"No Studio target named","tools.clear.history.title":"Clear history?","tools.clear.history.message":"This permanently removes the current place tools history.","tools.clear.statistics.title":"Clear statistics?","tools.clear.statistics.message":"This permanently resets the current place tool statistics.","tools.detail.error":"Error","tools.page.prev":"Prev","tools.page.prev.tooltip":"Go to the previous page of tool history results.","tools.page.next":"Next","tools.page.next.tooltip":"Go to the next page of tool history results.","tools.empty.history":"No history entries","tools.empty.stats":"No tool statistics","tools.empty.failures":"No failures","tools.summary.total":"Total","tools.summary.calls":"calls","tools.summary.sessions":"Sessions","settings.license.title":"License","settings.license.title.tooltip":"Current license status and subscription tier.","settings.license.status":"Status","settings.license.status.tooltip":"Current license activation state.","settings.license.tier":"Tier","settings.license.tier.tooltip":"Current subscription tier for available WEPPY Dashboard features.","settings.license.key":"Key","settings.license.key.tooltip":"Masked license key currently loaded by the server.","settings.license.keyValue.tooltip":"Masked license key currently loaded by the server.","settings.license.provider":"Provider","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"License provider used to validate this key.","settings.license.providerValue.tooltip":"License provider used to validate this key.","settings.license.active":"Active","settings.license.active.tooltip":"Current license activation state.","settings.license.status.activeCancelPending.tooltip":"Cancellation is pending, but Pro access remains active until the current billing period ends.","settings.license.inactive":"Inactive","settings.license.inactive.tooltip":"Current license activation state.","settings.license.expired":"Expired","settings.license.expired.tooltip":"Current license activation state.","settings.license.unavailable":"License info unavailable","settings.license.detail.cancelPending":"Cancellation is scheduled. Pro access remains active until the current billing period ends.","settings.license.reset":"Reset License","settings.readOnly":"Read-only","settings.readOnly.tooltip":"This section shows values that cannot be edited from the WEPPY Dashboard.","settings.unavailable":"Settings unavailable","settings.general.title":"General Settings","settings.general.title.tooltip":"Hot settings that apply immediately when changed.","settings.general.liveApply":"Live Apply","settings.general.liveApply.tooltip":"Changes in this section are applied immediately without a separate save button.","settings.general.applied":"Applied","settings.general.logLevel":"Log Level","settings.general.logLevel.tooltip":"Choose how much detail the MCP server writes to logs. Lower to ‘debug’ when tracking down a problem.","settings.general.localHistory":"Tool History Recording","settings.general.localHistory.tooltip":"Save AI tool runs to disk. Required for the Tools and History pages.","settings.general.localStatistics":"Tool Statistics Collection","settings.general.localStatistics.tooltip":"Aggregate tool usage counts. Used by the Overview statistics.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"Save structured execution context so the Changelog and Playtest views can render it.","settings.general.requestTimeout":"Action Timeout","settings.general.requestTimeout.tooltip":"Maximum time (in ms) to wait for a single tool action before failing.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"Action timeout is measured in milliseconds.","settings.cold.title":"Server Environment","settings.cold.title.tooltip":"Read-only server environment values loaded at startup.","settings.cold.httpPort.tooltip":"Port number used by the MCP WEPPY Dashboard HTTP server.","settings.cold.httpHost.tooltip":"Host interface that the MCP WEPPY Dashboard HTTP server binds to.","settings.cold.hint":"Set via environment variables to change these values.","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"Choose how WEPPY Dashboard behaves when the MCP Server starts.","settings.dashboard.nextStartBadge":"Next Start","settings.dashboard.autoOpen.label":"Open Dashboard when WEPPY starts","settings.dashboard.autoOpen.description":"Automatically opens this Dashboard after the MCP Server starts.","settings.dashboard.autoOpen.nextStart":"Applies the next time the MCP Server starts.","settings.dashboard.settingsFile.label":"Settings file","settings.dashboard.agentExample.label":"Ask your Agent","settings.dashboard.agentExample.prompt":"“Turn off Dashboard auto-open.”","settings.dashboard.autoOpen.saving":"Saving…","settings.dashboard.autoOpen.saved":"Saved for the next server start.","settings.dashboard.autoOpen.error":"Could not save. The previous setting was restored.","dashboardAutoOpenGuide.eyebrow":"Dashboard preference","dashboardAutoOpenGuide.title":"Choose how WEPPY Dashboard opens","dashboardAutoOpenGuide.currentOn":"Auto-open is currently On. This Dashboard opens after the MCP Server starts.","dashboardAutoOpenGuide.currentOff":"Auto-open is currently Off. WEPPY will not open a new Dashboard tab when the MCP Server starts.","dashboardAutoOpenGuide.changeAnytime":"You can change this anytime in Settings.","dashboardAutoOpenGuide.agentHint":"You can also ask your Agent, “Turn off Dashboard auto-open.”","dashboardAutoOpenGuide.statusOn":"Auto-open On","dashboardAutoOpenGuide.statusOff":"Auto-open Off","dashboardAutoOpenGuide.keep":"Keep current setting","dashboardAutoOpenGuide.turnOff":"Turn off auto-open","dashboardAutoOpenGuide.openSettings":"Open Settings","dashboardAutoOpenGuide.close":"Close auto-open guide","dashboardAutoOpenGuide.saving":"Saving…","dashboardAutoOpenGuide.error":"Could not save your choice. Please try again.","settings.language.title":"Language","settings.language.title.tooltip":"Choose how the WEPPY Dashboard interface text is localized.","settings.language.dashboard":"WEPPY Dashboard Language","settings.language.dashboard.tooltip":"Overrides the WEPPY Dashboard language or follows the system language when set to Auto.","settings.language.auto":"Auto","overview.l0.title":"MCP Server Disconnected","overview.l0.message":"The MCP server is not responding. The WEPPY Dashboard will automatically attempt to reconnect.","overview.l0.step1":"Check that the MCP server process is running","overview.l0.step2":"Restart the MCP server command if needed","overview.l0.reconnecting":"Auto-reconnecting every 3s...","overview.l0.reconnectBtn":"Reconnect","overview.l0.settingsBtn":"Check Settings","overview.l1.pluginGuide":"Roblox Studio plugin is not connected","overview.l1.check1":"Is Roblox Studio running?","overview.l1.check2":"Is the WEPPY Plugin installed?","overview.l1.feedHint":"Changes will appear here once the plugin connects","overview.metric.server":"Server","overview.metric.server.tooltip":"MCP server runtime and process status","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Roblox Studio plugin connection and version status","overview.metric.agent":"Agent","overview.metric.agent.tooltip":"Connected AI coding agents and their runtime state","overview.metric.agent.instancesUnit":"instances","overview.metric.sync":"Sync","overview.metric.sync.tooltip":"Current Studio to local sync activity","overview.metric.noAgent":"No Agent","overview.meta.version":"Version","overview.meta.version.tooltip":"Installed MCP server version","overview.meta.session":"Session","overview.meta.session.tooltip":"Current MCP session identifier","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Operating system process identifier","overview.meta.uptime":"Uptime","overview.meta.uptime.tooltip":"Time elapsed since the MCP server started","overview.feed.title":"Recent Game Changes","overview.feed.empty":"No recent changes","overview.changelog.title":"Session Change Summary","overview.changelog.entries":"Total","overview.changelog.scripts":"scripts","overview.changelog.instances":"instances","overview.changelog.properties":"properties","overview.changelog.assets":"assets","overview.tier.title":"Tier Usage","changelog.subtitle":"Game Change History","changelog.filter.all":"All","changelog.filter.active":"Active","changelog.filter.completed":"Completed","changelog.empty":"No changelog entries yet","changelog.basic.limit.title":"Basic preview shows the latest 3 sessions","changelog.basic.limit.body":"Full changelog timeline browsing is available with Pro.","changelog.basic.metricLabel":"Visible Changelog / Total","changelog.basic.visible":"visible","changelog.basic.total":"total","changelog.card.active":"Active","changelog.card.active.tooltip":"This session is still receiving new game changes.","changelog.card.completed":"Completed","changelog.card.completed.tooltip":"This session has ended and no more changes are expected.","changelog.card.bootstrapStatus":"Bootstrap","changelog.card.bootstrapStatus.tooltip":"This session only contains the initial sync bootstrap snapshot.","changelog.card.inProgress":"in progress","changelog.card.noChanges":"No changes yet","changelog.card.noChanges.tooltip":"No game changes have been extracted for this session yet.","changelog.card.bootstrapSummary":"Initial sync snapshot","changelog.card.bootstrapSummary.tooltip":"Initial file sync writes are collapsed into a single bootstrap snapshot row.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"scripts","changelog.card.scripts.tooltip":"Script changes made in this session.","changelog.card.instances":"instances","changelog.card.instances.tooltip":"Instance create, delete, move, or clone changes in this session.","changelog.card.modified":"modified","changelog.card.created":"created","changelog.card.deleted":"deleted","changelog.card.moved":"moved","changelog.card.propertiesChanged":"properties changed","changelog.card.propertiesChanged.tooltip":"Property value changes recorded for this session.","changelog.card.lightingConfigured":"Lighting configured","changelog.card.lightingConfigured.tooltip":"Lighting or atmosphere settings changed in this session.","changelog.card.terrainConfigured":"Terrain configured","changelog.card.terrainConfigured.tooltip":"Terrain data or terrain settings changed in this session.","changelog.card.assetsInserted":"assets inserted","changelog.card.assetsInserted.tooltip":"Assets inserted into the place during this session.","changelog.category.script":"Scripts","changelog.category.instance":"Instances","changelog.category.property":"Properties","changelog.category.lighting":"Lighting","changelog.category.terrain":"Terrain","changelog.category.asset":"Assets","changelog.detail.dialogLabel":"Changelog details","changelog.detail.changeSummary":"Change Summary","changelog.detail.changeSummary.tooltip":"Counts of extracted game changes grouped by category for this session.","changelog.detail.changeTimeline":"Change Timeline","changelog.detail.changeTimeline.tooltip":"Chronological list of extracted game changes for this session.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Before & After","changelog.detail.filterCategory":"Category","changelog.detail.filterCategory.tooltip":"Filter the timeline to a single change category.","changelog.detail.confidence.exact":"Exact","changelog.detail.confidence.exact.tooltip":"Both the before and after state were confirmed for this change.","changelog.detail.confidence.partial":"Partial","changelog.detail.confidence.partial.tooltip":"Only part of the before and after state could be confirmed for this change.","changelog.detail.confidence.afterOnly":"After only","changelog.detail.confidence.afterOnly.tooltip":"Only the resulting state after the change could be confirmed.","changelog.detail.confidence.intentOnly":"Intent only","changelog.detail.confidence.intentOnly.tooltip":"Only the requested action was recorded, not the resulting state.","changelog.detail.confidence.unknown":"Unknown","changelog.detail.confidence.unknown.tooltip":"This change could not be confidently classified from the available data.","changelog.detail.noChanges":"No changes in this category","changelog.detail.backToList":"Back to list","changelog.diff.empty":"No diff available","changelog.diff.unified":"Unified","changelog.diff.sideBySide":"Side by Side","changelog.diff.before":"Before","changelog.diff.after":"After","sync.targets.title":"Connected Studios","sync.targets.refresh":"Refresh","sync.targets.loading":"Loading Studio Sync status…","sync.targets.unavailable":"Studio Sync status is unavailable. Retry to check the current state.","sync.targets.empty":"No Studio is connected. Connect the WEPPY Plugin to see live Sync status.","sync.targets.unknownPlace":"Unknown place","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"Connected","sync.targets.notReported":"Not reported yet","sync.targets.state.unknown":"Unknown","sync.targets.state.off":"Sync OFF","sync.targets.state.idle":"Sync ON · waiting","sync.targets.state.initializing":"Initializing","sync.targets.state.syncing":"Syncing","sync.targets.state.paused":"Paused","sync.targets.state.error":"Error","sync.forwardStatus.label":"Change sending","sync.forwardStatus.tooltip":"This reports whether Edit changes can be sent. Enabled does not confirm every local file is current.","sync.forwardStatus.inactive":"Off","sync.forwardStatus.active":"Enabled","sync.forwardStatus.paused_play":"Paused for Play","sync.forwardStatus.reconciling":"Checking Edit changes","sync.forwardStatus.blocked":"Needs attention","sync.forwardStatus.unknown":"Unknown","sync.forwardStatus.observedAt":"Observed","sync.forwardStatus.reason.review":"Review changes in the Studio Plugin.","sync.forwardStatus.reason.editChanged":"Edit changed during the check. Inspect Sync in the Studio Plugin.","sync.forwardStatus.reason.failed":"Changes could not be confirmed. Inspect Sync in the Studio Plugin.","sync.forwardStatus.reason.fallback":"Check the Studio Plugin for details.","sync.stored.title":"Stored places","sync.stored.data":"Stored data","sync.stored.ambiguous":"Storage location unconfirmed","sync.detail.scope":"Viewing Sync details for","sync.detail.readOnly":"Viewing details does not change Studio routing.","sync.detail.empty":"Select a connected Studio or stored place to view details.","sync.detail.unknown":"This Studio has not reported its Sync state yet.","sync.detail.error":"Sync reported an error. Check the Studio Plugin for details.","sync.detail.placeFolder":"Place folder","sync.detail.placeFolder.tooltip":"The stored folder shared by Studios opening this Place.","sync.detail.sharedData":"Path, counts, and log belong to the Place and are shared by Studios opening it.","sync.log.shared":"Shared Place log","sync.log.unsafe":"This Place has no confirmed storage location for log access.","sync.log.unavailable":"The Place log could not be loaded. Retry to check it.","sync.log.loading":"Loading Place log…","sync.clear.selectedMessage":"This permanently removes the shared Sync log for {place}.","sync.overlay.title":"Roblox Studio plugin required","sync.overlay.message":"Sync status will be available once the Roblox Studio plugin connects.","sync.overlay.check1":"Is Roblox Studio running?","sync.overlay.check2":"Is the WEPPY Plugin installed?","sync.status.title":"Sync Status","sync.status.title.tooltip":"Current Studio and local file sync status for this place.","sync.status.forwardOnly":"Forward Only","sync.status.forwardOnly.tooltip":"Basic tier allows Studio to local forward sync only.","sync.status.place":"Place","sync.status.place.tooltip":"Connected Roblox place name and place ID.","sync.status.path":"Path","sync.status.path.tooltip":"Local filesystem root currently used for sync output.","sync.status.instances":"Instances","sync.status.instances.tooltip":"Total synced Roblox instances tracked in the local mirror.","sync.status.scripts":"Scripts","sync.status.scripts.tooltip":"Total synced script files currently indexed for this place.","sync.status.state":"State","sync.status.state.tooltip":"Current runtime sync state reported by the server.","sync.policy.title":"Sync Policy","sync.policy.title.tooltip":"Effective Sync policy reported by the connected Studio plugin.","sync.policy.activation":"Activation","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"Workflow","sync.policy.preset.studio_first":"Studio First","sync.policy.preset.bidirectional_review":"Bidirectional","sync.policy.preset.local_code_studio_world":"Local Code, Studio World","sync.policy.preset.custom":"Custom","sync.policy.apply.title":"How local changes apply to Studio","sync.policy.apply.description":"Shows whether changes made locally are reviewed first or applied to Studio automatically.","sync.policy.apply.content":"Content changes","sync.policy.apply.content.tooltip":"Script Source, property, and Service property changes made locally. Instance creation, deletion, renaming, and moves are Structure changes.","sync.policy.apply.structure":"Structure changes","sync.policy.apply.structure.tooltip":"Instance creation, deletion, renaming, and moves made locally. Automatic local deletion additionally requires the separate delete option below.","sync.policy.apply.manual":"Review first","sync.policy.apply.auto":"Auto apply","sync.policy.scope.disclosure":"Scope directions","sync.policy.scope.scriptSource":"Script source","sync.policy.scope.properties":"Properties","sync.policy.scope.structure":"Structure","sync.policy.scope.serviceProperties":"Service properties","sync.policy.endpoint.local":"Local","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → Local","sync.policy.direction.forward.tooltip":"Studio changes are written to local files.","sync.policy.direction.reverse":"Local → Studio","sync.policy.direction.reverse.tooltip":"Local file changes are applied to Studio.","sync.policy.direction.bidirectional":"Both ways","sync.policy.direction.bidirectional.tooltip":"Changes can move from Studio to local files and from local files to Studio.","sync.policy.safety.localDeletes":"Local delete → Studio instance removal","sync.policy.safety.review":"Review before delete","sync.policy.safety.review.tooltip":"Local file deletions wait for review before matching Studio instances are removed. This is separate from UI Studio automatic cleanup.","sync.policy.safety.auto":"Auto delete to Studio","sync.policy.safety.auto.tooltip":"Deleting local files may automatically remove matching Studio instances. This is separate from UI Studio automatic cleanup.","sync.policy.reviewRequired":"Review this policy in the Studio plugin before starting Sync.","sync.log.title":"Sync Log","sync.log.empty":"No sync events yet","sync.log.type.write":"WRITE","sync.log.type.write.tooltip":"A new sync output was written to disk.","sync.log.type.update":"UPDATE","sync.log.type.update.tooltip":"An existing synced file or instance was updated.","sync.log.type.delete":"DELETE","sync.log.type.delete.tooltip":"A synced file or instance was removed.","sync.log.type.idle":"IDLE","sync.log.type.idle.tooltip":"A sync event was recorded without a file mutation.","sync.upgrade.title":"Explore Full Sync with Pro","sync.upgrade.benefit1":"Bidirectional sync — edit files, auto-apply to Studio","sync.upgrade.benefit2":"Reverse sync — push file changes back to Studio","sync.upgrade.benefit3":"Full sync history and detailed change log","sync.upgrade.buy":"View Pro","playtest.status.title":"Playtest Status","playtest.status.title.tooltip":"Current Roblox playtest session state reported by Studio.","playtest.status.mode":"Mode","playtest.status.mode.tooltip":"Studio playtest launch mode for the current session.","playtest.status.mode.value.tooltip":"Specific Roblox Studio playtest mode currently in use.","playtest.status.mode.play":"Play","playtest.status.mode.run":"Run","playtest.status.mode.server":"Server","playtest.status.mode.edit":"Edit","playtest.status.place.tooltip":"Roblox place currently associated with this playtest session.","playtest.status.state.running":"Running","playtest.status.state.running.tooltip":"A Roblox playtest session is currently running.","playtest.status.state.paused":"Paused","playtest.status.state.paused.tooltip":"The current Roblox playtest session is paused.","playtest.status.state.notRunning":"Not Running","playtest.status.state.notRunning.tooltip":"No Roblox playtest session is currently running.","playtest.control.play":"Play","playtest.control.pause":"Pause","playtest.control.resume":"Resume","playtest.control.stop":"Stop","playtest.history.title":"Test History","playtest.history.search":"Search test results","playtest.history.filter":"Result","playtest.history.filterAll":"All results","playtest.history.filteredCount":"{{visible}} of {{total}} results","playtest.history.title.tooltip":"Recorded automated playtest runs for this project.","playtest.history.empty":"No test results yet","playtest.history.mode":"Mode","playtest.history.mode.tooltip":"Playtest mode used for this recorded test run.","playtest.history.status.passed":"Passed","playtest.history.status.failed":"Failed","playtest.history.status.running":"Running","playtest.history.status.unknown":"Unknown","playtest.history.status.tooltip":"Recorded result state for this automated playtest run.","playtest.empty.title":"No playtest results yet","playtest.empty.message":"Test results will appear here after the AI Agent runs a Playtest.","playtest.empty.message.before":"Test results will appear here after the AI Agent runs a Playtest.","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"Ask the AI Agent to run a Playtest when you need a fresh report.","playtest.report.title":"Selected Report","playtest.report.title.tooltip":"Detailed output for the currently selected automated playtest run.","playtest.detail.dialogLabel":"Playtest report detail","playtest.detail.loading":"Loading report...","playtest.detail.errorTitle":"Report unavailable","playtest.report.content":"Report","playtest.report.content.tooltip":"Markdown summary for the selected automated playtest run.","playtest.report.logs":"Logs","playtest.report.logs.tooltip":"Execution logs captured for the selected automated playtest run.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"No report content available","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest is a Pro-only feature","playtest.basic.desc":"Control playtesting from the WEPPY Dashboard, run automated tests, and view detailed test reports.","playtest.basic.benefit1":"One-click play/pause/stop controls","playtest.basic.benefit2":"Automated test execution via AI agent","playtest.basic.benefit3":"Test history with pass/fail tracking","playtest.basic.benefit4":"Detailed markdown test reports","playtest.sample.badge":"Preview of the Pro playtest view","playtest.sample.title":"You are previewing the playtest screen that becomes available after upgrading to Pro.","playtest.sample.message":"This preview uses sample data. Live playtest control, history management, and real reports unlock with Pro.","playtest.sample.clearDisabled":"Available with Pro for live playtest history.","playtest.sample.place":"Arena Preview","playtest.sample.history.name":"Sample Arena Smoke Test","playtest.sample.context.why":"Spawn into the arena, survive the opener, and verify the HUD responds immediately.","playtest.sample.context.expected":"The player spawns safely, the countdown UI appears within one second, and the first wave starts without errors.","playtest.sample.context.observed":"Spawn protection held, the HUD updated on time, and wave one completed with no gameplay regressions.","playtest.sample.report.markdown":`# Sample Arena Smoke Test
77
+ - Show the source location, files changed, profile usages, cleanup behavior, and what I must manually check before publishing.`,"sidebar.overview":"Overview","sidebar.changelog":"Changelog","sidebar.connection":"Connection","sidebar.sync":"Sync","sidebar.playtest":"Playtest","sidebar.tools":"Tools","sidebar.settings":"Settings","sidebar.ui_studio":"UI Studio","sidebar.gate.l1":"MCP server connection required","sidebar.gate.l2":"Roblox Studio plugin connection required","header.currentProject":"Current Project","header.unknownProject":"Unknown project","header.projectRoot.label":"Project Root","header.currentProject.loading":"Loading project root...","header.currentProject.unavailable":"Project root unavailable","header.placeNotConnected":"Place not connected","header.currentProject.tooltip":"Currently selected project folder","header.currentProject.loading.tooltip":"Project root information is still loading","header.currentProject.unavailable.tooltip":"Current project root information is unavailable","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Loading sync root...","header.currentProjectSyncRoot.unavailable":"Sync root unavailable","header.currentProjectSyncRoot.tooltip":"Current sync root folder for the selected project","header.currentProjectSyncRoot.loading.tooltip":"Sync root information is still loading","header.currentProjectSyncRoot.unavailable.tooltip":"Current sync root information is unavailable","header.testFiles.label":"Test Files","header.testFiles.unavailable":"Test files unavailable","header.testFiles.tooltip":"Current playtest files directory for the selected place","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Plugin connection required","header.places.liveRequired":"Plugin connection required for live active place","header.place.tooltip":"Connected Roblox place","header.placeNotConnected.tooltip":"Place not connected","placeScope.current.label":"Current Place","placeScope.lastActive.label":"Last Active Place","placeScope.selected.label":"Selected Place","placeScope.unknownPlace":"Unknown place","placeScope.live":"Live","placeScope.connected":"Studio connected","placeScope.stored":"Stored data","placeScope.connectedGroup":"Connected Studios","placeScope.storedGroup":"Stored data","placeScope.stored.note":"No connected Studio currently has this place open.","placeScope.pluginRequired":"Plugin required","placeScope.pluginRequired.note":"Connect WEPPY Plugin to confirm the live active place.","placeScope.noPlace.label":"Place scope","placeScope.noPlace.value":"No place data available yet","placeScope.noPlace.badge":"No place","placeScope.noPlace.note":"Connect WEPPY Plugin and sync a place to create place-scoped data.","placeScope.selected.note":"Showing stored data only. Studio routing is unchanged.","placeScope.surface.sync":"Sync status and logs use this place.","placeScope.surface.changelog":"Changelog sessions use this place.","placeScope.surface.playtest":"Playtest reports use this place.","placeScope.surface.uiStudio":"UI captures and change history use this place.","placeScope.surface.tools":"Tool history and statistics use this place.","placeScope.loading":"Loading place scope...","placeScope.unavailable":"Place scope unavailable","placeScope.selector.label":"Place data","placeScope.shortcuts.trigger":"Quick links","placeScope.shortcuts.label":"Place shortcuts","placeScope.shortcuts.settings":"Place settings","placeScope.shortcuts.experience":"Experience management","placeScope.shortcuts.roblox":"View on Roblox","placeScope.folder.duplicate":"Duplicate folder","placeScope.folder.unresolved":"Representative folder unconfirmed","placeScope.folder.noSyncHistory":"No sync history","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Place folder details","placeScope.folder.duplicateReason":"The current saved location is {canonicalFolder}. This folder is backed up after a successful full sync.","placeScope.folder.unresolvedReason":"This Place remains selectable by ID, but no specific folder is confirmed as the representative yet.","placeScope.folder.unknown":"unknown","placeScope.selector.noneSelectable":"No selectable Place folder","header.changeProjectRoot":"Change Project Root","header.changeProjectRoot.ariaLabel":"Change project root","header.changeProjectRoot.tooltip":"Change the current project root","header.changeProjectRoot.disabledTooltip.l0":"MCP server connection required before project root can be changed","header.changeProjectRoot.disabledTooltip.loading":"Project root information is still loading","header.changeProjectRoot.disabledTooltip.unavailable":"Current project root information is unavailable","header.projectRootModal.initial.title":"Change project root","header.projectRootModal.initial.body.connected":"After you choose a project folder, MCP will switch to the new project root and the current Studio contents will be fully resynced into the new <selected project folder>/weppy-project-sync target.","header.projectRootModal.initial.body.disconnected":"After you choose a project folder, MCP will switch to the new project root and use <selected project folder>/weppy-project-sync as the next sync target.","header.projectRootModal.initial.nextSyncRoot":"New sync target after selection","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"Current sync stops immediately.","header.projectRootModal.initial.warningFreshSync":"The current Studio contents will be used to build a fresh full sync in the new target.","header.projectRootModal.initial.warningNoMove":"Old sync folders are not moved automatically.","header.projectRootModal.initial.warningDeferredSync":"If Studio is not connected, full resync starts the next time the plugin connects.","header.projectRootModal.confirm.title":"Confirm new project root","header.projectRootModal.confirm.body":"Review the selected project folder before applying.","header.projectRootModal.confirm.projectRoot":"Selected project folder","header.projectRootModal.confirm.syncRoot":"New sync target","header.projectRootModal.confirm.warningNoMove":"Existing sync folders are not moved automatically.","header.projectRootModal.pick":"Choose folder","header.projectRootModal.apply":"Apply change","header.projectRootModal.cancel":"Cancel","header.projectRootModal.error":"Failed to change project root","status.online":"Online","status.offline":"Offline","status.idle":"Idle","status.syncing":"Syncing","status.error":"Error","status.initializing":"Initializing","level.l0.title":"Server disconnected","level.l0.message":"WEPPY Dashboard opened but MCP server has stopped or is not responding.","level.l1.title":"Server connected","level.l1.hint":"Check: Is Roblox Studio running? Is the plugin installed?","level.l2.ok":"Studio connected","tier.basic":"Basic","tier.basic.tooltip":"Basic tier with the standard WEPPY Dashboard feature set.","tier.pro":"Pro","tier.pro.tooltip":"Pro tier with the full WEPPY Dashboard feature set.","tier.mixed":"Mixed","tier.upgrade":"View Pro","tier.banner.save":"Save AI tokens with Pro!","tier.tool.query_instances.desc":"Inspect instances, search children and descendants, and inspect class data. Pro adds file tree, project structure, and property or tag search.","tier.tool.mutate_instances.desc":"Create, delete, clone, and move instances. Pro adds tree creation and bulk create, delete, or clone operations.","tier.tool.manage_properties.desc":"Read and set properties, attributes, and tags. Pro adds calculated updates, relative changes, and bulk property operations.","tier.tool.manage_scripts.desc":"Read, write, create, delete, edit, and search script source. Pro adds bulk replacement across scripts.","tier.tool.manage_ui.desc":"Pro only. Create or refine game-style menus, HUDs, buttons, labels, and image panels, then capture screens and review improvement suggestions.","tier.tool.manage_ui.action.design_brief":"Plan UI direction","tier.tool.manage_ui.action.create_tree":"Create new UI","tier.tool.manage_ui.action.update":"Update existing UI","tier.tool.manage_ui.action.delete":"Remove UI","tier.tool.manage_ui.action.preview":"Capture UI screen","tier.tool.manage_ui.action.check":"Review improvement suggestions","tier.tool.manage_lighting.desc":"Pro only. Configure lighting, atmosphere, sky, terrain properties, and time-of-day settings.","tier.tool.manage_selection.desc":"Read, set, and clear the current Studio selection. Pro adds context, details, add or remove, and selection watch support.","tier.tool.manage_camera.desc":"Inspect camera state, focus by path or position, and request suggested views.","tier.tool.manage_tween.desc":"Pro only. Create, play, pause, and cancel tweens for smooth animation.","tier.tool.manage_audio.desc":"Pro only. Play, stop, pause, and resume sounds, and configure the audio listener.","tier.tool.manage_animation.desc":"Pro only. Load, play, and stop animations, and inspect active animation tracks.","tier.tool.manage_physics.desc":"Pro only. Register collision groups, configure group collisions, and inspect available groups.","tier.tool.manage_effects.desc":"Pro only. Emit particles, clear effects, and toggle effect state.","tier.tool.manage_terrain.desc":"Pro only. Fill terrain shapes, clear regions, replace materials, manage terrain colors, read or write voxels, generate terrain, and smooth terrain.","tier.tool.spatial_query.desc":"Pro only. Run raycasts, find ground, validate placement, scan areas, search for flat or spawn positions, analyze walkability, map space, and inspect collisions.","tier.tool.manage_assets.desc":"Pro only. Insert models, inspect asset info, search the creator store, insert free assets or packages, and export assets.","tier.tool.manage_sync.desc":"Pro only. Inspect sync status, configuration, history, directions, and read or write synced files.","tier.tool.workspace_state.desc":"Pro only. Run full sync, capture snapshots, inspect recent changes and viewport state, and manage related metadata.","tier.tool.manage_logs.desc":"Inspect output logs with filtering, incremental polling, buffer clearing, and recent error lookup.","tier.tool.system_info.desc":"Inspect connection status and current tier. Pro adds place info, services, Studio settings, playtest control, and automated tests.","tier.tool.manage_studio.desc":"Pro only. Toggle Studio editor view settings such as UI preview for screenshot and QA workflows; it changes Studio session settings, not game UI objects.","tier.tool.batch_execute.desc":"Pro only. Run multiple commands in a batch, with sequential execution and optional continue-on-error behavior.","tier.tool.execute_luau.desc":"Pro only. Execute arbitrary Luau code inside the Roblox Studio sandbox.","connection.server.title":"Bridge Status","connection.server.version":"Version","connection.server.version.tooltip":"WEPPY Bridge runtime version","connection.server.pid":"PID","connection.server.pid.tooltip":"Operating system process identifier","connection.server.uptime":"Uptime","connection.server.uptime.tooltip":"Time elapsed since the WEPPY Bridge started","connection.server.session":"Session","connection.server.session.tooltip":"Current WEPPY Bridge session identifier","connection.server.exec":"Exec","connection.server.exec.tooltip":"Executable path used to launch the WEPPY Bridge","connection.server.restart":"Restart Bridge","connection.server.restarting":"Restarting…","connection.server.restartUnavailable":"Connect at least one AI Agent before restarting so its MCP Adapter can start the new Bridge.","connection.server.restartTitle":"Restart WEPPY Bridge?","connection.server.restartMessage":"Dashboard and Studio targets will disconnect briefly. In-progress commands may have an unknown result, and active Playtest sessions or pending controls will be cleaned up. A connected MCP Adapter will start a new Bridge automatically.","connection.server.restartConfirm":"Restart Bridge","connection.server.restartRequesting":"Requesting Bridge restart…","connection.server.restartReconnecting":"Reconnecting to WEPPY Bridge…","connection.server.restartWaiting":"Dashboard and Studio connections will return automatically when the new Bridge is ready.","connection.server.restartSucceeded":"WEPPY Bridge restarted","connection.server.restartFailed":"WEPPY Bridge could not be restarted","connection.server.restartTimeout":"The new Bridge did not become ready in time. Check the MCP connection in your AI tool, then try again.","connection.server.restartStale":"The Bridge changed before the restart request was accepted. Refresh the current status and try again.","connection.reconnect":"Reconnect","connection.checkSettings":"Check Settings","connection.agents.title":"AI Agents","connection.agents.name":"Agent","connection.agents.version":"Version","connection.agents.version.tooltip":"MCP Adapter package version for this agent session.","connection.agents.cwd":"Working Dir","connection.agents.cwd.tooltip":"Current working directory for the connected AI agent","connection.agents.projectRoot":"Project Root","connection.agents.projectRoot.tooltip":"Authoritative project root for sync ownership","connection.agents.projectRoot.unresolved":"Unresolved","connection.agents.connected":"Connected","connection.agents.unknown":"Unknown","connection.agents.none":"No agents connected","connection.plugins.title":"Plugins","connection.plugins.place":"Place","connection.plugins.clientId":"Connection ID","connection.plugins.clientId.tooltip":"Full connection ID for diagnostics","connection.plugins.lastSeen":"Last Seen","connection.plugins.lastSeen.tooltip":"Most recent heartbeat received from the plugin","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Installed plugin version reported by Studio","connection.plugins.none":"No plugins connected","connection.targets.title":"Studio Targets","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"Short name for this Roblox Studio window","connection.targets.place":"Place","connection.targets.placeId":"Place ID","connection.targets.placeId.tooltip":"Roblox Place ID for this Studio window","connection.targets.clientId":"Connection ID","connection.targets.clientId.tooltip":"Full connection ID for diagnostics. Usually use Studio ID instead.","connection.targets.session":"Session","connection.targets.session.tooltip":"Command channel state for this Studio target","connection.targets.lastUsed":"Last Used","connection.targets.lastUsed.tooltip":"Most recent plugin-route request routed to this Studio target","connection.targets.lastSeen":"Last Seen","connection.targets.lastSeen.tooltip":"Most recent heartbeat received from this Studio target","connection.targets.version":"Version","connection.targets.version.tooltip":"Installed plugin version reported by Studio","connection.targets.routing":"Routing","connection.targets.routing.tooltip":"Default Studio window when the agent does not name one","connection.targets.inFlight":"In Flight","connection.targets.inFlight.tooltip":"Active command request currently routed to this Studio target","connection.targets.studioState":"Studio State","connection.targets.studioState.tooltip":"Current edit/play runtime state reported by this Studio window","connection.targets.studioState.edit":"Edit","connection.targets.studioState.running":"Running","connection.targets.studioState.paused":"Paused","connection.targets.studioState.unknown":"Unknown","connection.targets.studioState.source.thread":"WEPPY play command","connection.targets.studioState.source.pluginConnection":"Studio Play/Test connection","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"Unknown source","connection.targets.studioState.updatedUnknown":"not reported","connection.targets.copyPlaceId":"Copy Place ID","connection.targets.copyTargetAlias":"Copy Studio ID","connection.targets.copyClientId":"Copy Connection ID","connection.targets.copied":"Copied value","connection.targets.copyFailed":"Failed to copy value","connection.targets.none":"No Studio targets connected. Open Roblox Studio and connect WEPPY Plugin.","connection.targets.help":"When multiple Studio windows are connected, tell the agent to use Studio ID studio-1 to choose one.","connection.topology.ariaLabel":"Connection topology","connection.topology.title":"Connection topology","connection.topology.description":"Each AI agent connects through its own MCP Adapter to one shared WEPPY Bridge, which keeps Roblox Studio connected.","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"Active","connection.topology.stale":"Stale","connection.topology.unknown":"Unknown","connection.topology.lastContact":"Last contact","connection.topology.noContact":"No recent contact","connection.topology.versionUnknown":"Version unknown","connection.topology.placeUnknown":"Place unknown","connection.topology.moreAgents":"+{count} more agents","connection.topology.moreStudios":"+{count} more studios","connection.topology.allAgentsVisible":"All agents visible","connection.topology.allStudiosVisible":"All studios visible","connection.topology.showAll":"Show all","connection.topology.showLess":"Show less","connection.topology.showAllAgents":"Show all AI agents","connection.topology.showAllStudios":"Show all Studio targets","connection.topology.showLessAgents":"Show less AI agents","connection.topology.showLessStudios":"Show less Studio targets","connection.routing.updateFailed":"Failed to update routing target","connection.log.title":"Connection Log","connection.log.empty":"No events yet","connection.time.secondsAgo":"s ago","connection.time.minutesAgo":"m ago","connection.time.hoursAgo":"h ago","common.loading":"Loading...","common.retry":"Retry","common.reconnecting":"Reconnecting...","common.expand":"Expand","common.collapse":"Collapse","tools.tab.history":"History","tools.tab.statistics":"Statistics","tools.tab.failures":"Failures","tools.col.time":"Time","tools.col.time.tooltip":"When the tool run was recorded.","tools.col.toolAction":"Tool.Action","tools.col.toolAction.tooltip":"Tool name and action that were executed.","tools.col.duration":"Duration","tools.col.duration.tooltip":"How long the tool took to finish.","tools.col.status":"Status","tools.col.status.tooltip":"Outcome of the recorded tool run.","tools.col.tier":"Tier","tools.col.tier.tooltip":"License tier required for the tool or action.","tools.col.tierStats.tooltip":"Basic, Pro, or Mixed summary for the tool statistics row.","tools.col.tool":"Tool","tools.col.tool.tooltip":"Consolidated tool name in the statistics table.","tools.col.calls":"Calls","tools.col.calls.tooltip":"Total number of recorded calls for this tool.","tools.col.ok":"OK","tools.col.ok.tooltip":"Number of direct successful runs.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Number of runs that succeeded through fallback execution.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Number of blocked runs without fallback execution.","tools.col.warn":"WARN","tools.col.warn.tooltip":"Number of expected failures caused by caller input, project state, Roblox policy, or user code.","tools.col.err":"FAILED","tools.col.err.tooltip":"Number of runs that failed.","tools.col.okRate":"OK%","tools.col.okRate.tooltip":"Percentage of calls that finished successfully.","tools.col.avgTime":"Avg Time","tools.col.avgTime.tooltip":"Average execution time across recorded calls.","tools.col.error":"Error","tools.filter.tool":"Tool","tools.filter.all":"All","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"This entry used a Pro-only tool or action.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"The requested Pro action succeeded via a Basic fallback.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"The requested Pro action was blocked and no fallback ran.","tools.badge.warn":"WARN","tools.badge.warn.tooltip":"The tool call failed as an expected caller, project, policy, or user-code issue.","tools.badge.err":"FAILED","tools.badge.err.tooltip":"The tool run failed.","tools.status.ok":"OK","tools.status.ok.tooltip":"The tool run completed successfully.","tools.tier.mixed.tooltip":"This tool includes both Basic and Pro actions.","tools.detail.params":"Parameters","tools.detail.params.tooltip":"Input parameters passed to this tool run.","tools.detail.result":"Result","tools.detail.result.tooltip":"Returned result payload for this tool run.","tools.detail.requestedCommand":"Command Sent","tools.detail.executedCommand":"Executed Command","tools.detail.alternatives":"Alternatives","tools.detail.blockedMessage":"Blocked Reason","tools.detail.noFallback":"No Fallback","tools.detail.noFallback.value":"No fallback ran.","tools.detail.warningMessage":"Warning Message","tools.detail.errorMessage":"Error Message","tools.detail.open":"Details","tools.detail.openLabel":"View details for {command}","tools.detail.dialogLabel":"Tool execution detail","tools.detail.title":"Tool execution","tools.history.routing":"Routing","tools.history.routing.mode":"Mode","tools.history.routing.requested":"Requested","tools.history.routing.actual":"Actual","tools.history.routing.none":"No Studio target named","tools.clear.history.title":"Clear history?","tools.clear.history.message":"This permanently removes the current place tools history.","tools.clear.statistics.title":"Clear statistics?","tools.clear.statistics.message":"This permanently resets the current place tool statistics.","tools.detail.error":"Error","tools.page.prev":"Prev","tools.page.prev.tooltip":"Go to the previous page of tool history results.","tools.page.next":"Next","tools.page.next.tooltip":"Go to the next page of tool history results.","tools.empty.history":"No history entries","tools.empty.stats":"No tool statistics","tools.empty.failures":"No failures","tools.summary.total":"Total","tools.summary.calls":"calls","tools.summary.sessions":"Sessions","settings.license.title":"License","settings.license.title.tooltip":"Current license status and subscription tier.","settings.license.status":"Status","settings.license.status.tooltip":"Current license activation state.","settings.license.tier":"Tier","settings.license.tier.tooltip":"Current subscription tier for available WEPPY Dashboard features.","settings.license.key":"Key","settings.license.key.tooltip":"Masked license key currently loaded by the server.","settings.license.keyValue.tooltip":"Masked license key currently loaded by the server.","settings.license.provider":"Provider","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"License provider used to validate this key.","settings.license.providerValue.tooltip":"License provider used to validate this key.","settings.license.active":"Active","settings.license.active.tooltip":"Current license activation state.","settings.license.status.activeCancelPending.tooltip":"Cancellation is pending, but Pro access remains active until the current billing period ends.","settings.license.inactive":"Inactive","settings.license.inactive.tooltip":"Current license activation state.","settings.license.expired":"Expired","settings.license.expired.tooltip":"Current license activation state.","settings.license.unavailable":"License info unavailable","settings.license.detail.cancelPending":"Cancellation is scheduled. Pro access remains active until the current billing period ends.","settings.license.reset":"Reset License","settings.readOnly":"Read-only","settings.readOnly.tooltip":"This section shows values that cannot be edited from the WEPPY Dashboard.","settings.unavailable":"Settings unavailable","settings.general.title":"General Settings","settings.general.title.tooltip":"Hot settings that apply immediately when changed.","settings.general.liveApply":"Live Apply","settings.general.liveApply.tooltip":"Changes in this section are applied immediately without a separate save button.","settings.general.applied":"Applied","settings.general.logLevel":"Log Level","settings.general.logLevel.tooltip":"Choose how much detail the MCP server writes to logs. Lower to ‘debug’ when tracking down a problem.","settings.general.localHistory":"Tool History Recording","settings.general.localHistory.tooltip":"Save AI tool runs to disk. Required for the Tools and History pages.","settings.general.localStatistics":"Tool Statistics Collection","settings.general.localStatistics.tooltip":"Aggregate tool usage counts. Used by the Overview statistics.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"Save structured execution context so the Changelog and Playtest views can render it.","settings.general.requestTimeout":"Action Timeout","settings.general.requestTimeout.tooltip":"Maximum time (in ms) to wait for a single tool action before failing.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"Action timeout is measured in milliseconds.","settings.cold.title":"Server Environment","settings.cold.title.tooltip":"Read-only server environment values loaded at startup.","settings.cold.httpPort.tooltip":"Port number used by the MCP WEPPY Dashboard HTTP server.","settings.cold.httpHost.tooltip":"Host interface that the MCP WEPPY Dashboard HTTP server binds to.","settings.cold.hint":"Set via environment variables to change these values.","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"Choose how WEPPY Dashboard behaves when the MCP Server starts.","settings.dashboard.nextStartBadge":"Next Start","settings.dashboard.autoOpen.label":"Open Dashboard when WEPPY starts","settings.dashboard.autoOpen.description":"Automatically opens this Dashboard after the MCP Server starts.","settings.dashboard.autoOpen.nextStart":"Applies the next time the MCP Server starts.","settings.dashboard.settingsFile.label":"Settings file","settings.dashboard.agentExample.label":"Ask your Agent","settings.dashboard.agentExample.prompt":"“Turn off Dashboard auto-open.”","settings.dashboard.autoOpen.saving":"Saving…","settings.dashboard.autoOpen.saved":"Saved for the next server start.","settings.dashboard.autoOpen.error":"Could not save. The previous setting was restored.","dashboardAutoOpenGuide.eyebrow":"Dashboard preference","dashboardAutoOpenGuide.title":"Choose how WEPPY Dashboard opens","dashboardAutoOpenGuide.currentOn":"Auto-open is currently On. This Dashboard opens after the MCP Server starts.","dashboardAutoOpenGuide.currentOff":"Auto-open is currently Off. WEPPY will not open a new Dashboard tab when the MCP Server starts.","dashboardAutoOpenGuide.changeAnytime":"You can change this anytime in Settings.","dashboardAutoOpenGuide.agentHint":"You can also ask your Agent, “Turn off Dashboard auto-open.”","dashboardAutoOpenGuide.statusOn":"Auto-open On","dashboardAutoOpenGuide.statusOff":"Auto-open Off","dashboardAutoOpenGuide.keep":"Keep current setting","dashboardAutoOpenGuide.turnOff":"Turn off auto-open","dashboardAutoOpenGuide.openSettings":"Open Settings","dashboardAutoOpenGuide.close":"Close auto-open guide","dashboardAutoOpenGuide.saving":"Saving…","dashboardAutoOpenGuide.error":"Could not save your choice. Please try again.","settings.language.title":"Language","settings.language.title.tooltip":"Choose how the WEPPY Dashboard interface text is localized.","settings.language.dashboard":"WEPPY Dashboard Language","settings.language.dashboard.tooltip":"Overrides the WEPPY Dashboard language or follows the system language when set to Auto.","settings.language.auto":"Auto","overview.l0.title":"MCP Server Disconnected","overview.l0.message":"The MCP server is not responding. The WEPPY Dashboard will automatically attempt to reconnect.","overview.l0.step1":"Check that the MCP server process is running","overview.l0.step2":"Restart the MCP server command if needed","overview.l0.reconnecting":"Auto-reconnecting every 3s...","overview.l0.reconnectBtn":"Reconnect","overview.l0.settingsBtn":"Check Settings","overview.l1.pluginGuide":"Roblox Studio plugin is not connected","overview.l1.check1":"Is Roblox Studio running?","overview.l1.check2":"Is the WEPPY Plugin installed?","overview.l1.feedHint":"Changes will appear here once the plugin connects","overview.metric.server":"Server","overview.metric.server.tooltip":"MCP server runtime and process status","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Roblox Studio plugin connection and version status","overview.metric.agent":"Agent","overview.metric.agent.tooltip":"Connected AI coding agents and their runtime state","overview.metric.agent.instancesUnit":"instances","overview.metric.sync":"Sync","overview.metric.sync.tooltip":"Current Studio to local sync activity","overview.metric.noAgent":"No Agent","overview.meta.version":"Version","overview.meta.version.tooltip":"Installed MCP server version","overview.meta.session":"Session","overview.meta.session.tooltip":"Current MCP session identifier","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Operating system process identifier","overview.meta.uptime":"Uptime","overview.meta.uptime.tooltip":"Time elapsed since the MCP server started","overview.feed.title":"Recent Game Changes","overview.feed.empty":"No recent changes","overview.changelog.title":"Session Change Summary","overview.changelog.entries":"Total","overview.changelog.scripts":"scripts","overview.changelog.instances":"instances","overview.changelog.properties":"properties","overview.changelog.assets":"assets","overview.tier.title":"Tier Usage","changelog.subtitle":"Game Change History","changelog.filter.all":"All","changelog.filter.active":"Active","changelog.filter.completed":"Completed","changelog.empty":"No changelog entries yet","changelog.basic.limit.title":"Basic preview shows the latest 3 sessions","changelog.basic.limit.body":"Full changelog timeline browsing is available with Pro.","changelog.basic.metricLabel":"Visible Changelog / Total","changelog.basic.visible":"visible","changelog.basic.total":"total","changelog.card.active":"Active","changelog.card.active.tooltip":"This session is still receiving new game changes.","changelog.card.completed":"Completed","changelog.card.completed.tooltip":"This session has ended and no more changes are expected.","changelog.card.bootstrapStatus":"Bootstrap","changelog.card.bootstrapStatus.tooltip":"This session only contains the initial sync bootstrap snapshot.","changelog.card.inProgress":"in progress","changelog.card.noChanges":"No changes yet","changelog.card.noChanges.tooltip":"No game changes have been extracted for this session yet.","changelog.card.bootstrapSummary":"Initial sync snapshot","changelog.card.bootstrapSummary.tooltip":"Initial file sync writes are collapsed into a single bootstrap snapshot row.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"scripts","changelog.card.scripts.tooltip":"Script changes made in this session.","changelog.card.instances":"instances","changelog.card.instances.tooltip":"Instance create, delete, move, or clone changes in this session.","changelog.card.modified":"modified","changelog.card.created":"created","changelog.card.deleted":"deleted","changelog.card.moved":"moved","changelog.card.propertiesChanged":"properties changed","changelog.card.propertiesChanged.tooltip":"Property value changes recorded for this session.","changelog.card.lightingConfigured":"Lighting configured","changelog.card.lightingConfigured.tooltip":"Lighting or atmosphere settings changed in this session.","changelog.card.terrainConfigured":"Terrain configured","changelog.card.terrainConfigured.tooltip":"Terrain data or terrain settings changed in this session.","changelog.card.assetsInserted":"assets inserted","changelog.card.assetsInserted.tooltip":"Assets inserted into the place during this session.","changelog.category.script":"Scripts","changelog.category.instance":"Instances","changelog.category.property":"Properties","changelog.category.lighting":"Lighting","changelog.category.terrain":"Terrain","changelog.category.asset":"Assets","changelog.detail.dialogLabel":"Changelog details","changelog.detail.changeSummary":"Change Summary","changelog.detail.changeSummary.tooltip":"Counts of extracted game changes grouped by category for this session.","changelog.detail.changeTimeline":"Change Timeline","changelog.detail.changeTimeline.tooltip":"Chronological list of extracted game changes for this session.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Before & After","changelog.detail.filterCategory":"Category","changelog.detail.filterCategory.tooltip":"Filter the timeline to a single change category.","changelog.detail.confidence.exact":"Exact","changelog.detail.confidence.exact.tooltip":"Both the before and after state were confirmed for this change.","changelog.detail.confidence.partial":"Partial","changelog.detail.confidence.partial.tooltip":"Only part of the before and after state could be confirmed for this change.","changelog.detail.confidence.afterOnly":"After only","changelog.detail.confidence.afterOnly.tooltip":"Only the resulting state after the change could be confirmed.","changelog.detail.confidence.intentOnly":"Intent only","changelog.detail.confidence.intentOnly.tooltip":"Only the requested action was recorded, not the resulting state.","changelog.detail.confidence.unknown":"Unknown","changelog.detail.confidence.unknown.tooltip":"This change could not be confidently classified from the available data.","changelog.detail.noChanges":"No changes in this category","changelog.detail.backToList":"Back to list","changelog.diff.empty":"No diff available","changelog.diff.unified":"Unified","changelog.diff.sideBySide":"Side by Side","changelog.diff.before":"Before","changelog.diff.after":"After","sync.targets.title":"Connected Studios","sync.targets.refresh":"Refresh","sync.targets.loading":"Loading Studio Sync status…","sync.targets.unavailable":"Studio Sync status is unavailable. Retry to check the current state.","sync.targets.empty":"No Studio is connected. Connect the WEPPY Plugin to see live Sync status.","sync.targets.unknownPlace":"Unknown place","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"Connected","sync.targets.notReported":"Not reported yet","sync.targets.state.unknown":"Unknown","sync.targets.state.off":"Sync OFF","sync.targets.state.idle":"Sync ON · waiting","sync.targets.state.initializing":"Initializing","sync.targets.state.syncing":"Syncing","sync.targets.state.paused":"Paused","sync.targets.state.error":"Error","sync.forwardStatus.label":"Change sending","sync.forwardStatus.tooltip":"This reports whether Edit changes can be sent. Enabled does not confirm every local file is current.","sync.forwardStatus.inactive":"Off","sync.forwardStatus.active":"Enabled","sync.forwardStatus.paused_play":"Paused for Play","sync.forwardStatus.reconciling":"Checking Edit changes","sync.forwardStatus.blocked":"Needs attention","sync.forwardStatus.unknown":"Unknown","sync.forwardStatus.observedAt":"Observed","sync.forwardStatus.reason.review":"Review changes in the Studio Plugin.","sync.forwardStatus.reason.editChanged":"Edit changed during the check. Inspect Sync in the Studio Plugin.","sync.forwardStatus.reason.failed":"Changes could not be confirmed. Inspect Sync in the Studio Plugin.","sync.forwardStatus.reason.fallback":"Check the Studio Plugin for details.","sync.stored.title":"Stored places","sync.stored.data":"Stored data","sync.stored.ambiguous":"Storage location unconfirmed","sync.detail.scope":"Viewing Sync details for","sync.detail.readOnly":"Viewing details does not change Studio routing.","sync.detail.empty":"Select a connected Studio or stored place to view details.","sync.detail.unknown":"This Studio has not reported its Sync state yet.","sync.detail.error":"Sync reported an error. Check the Studio Plugin for details.","sync.detail.placeFolder":"Place folder","sync.detail.placeFolder.tooltip":"The stored folder shared by Studios opening this Place.","sync.detail.sharedData":"Path, counts, and log belong to the Place and are shared by Studios opening it.","sync.log.shared":"Shared Place log","sync.log.unsafe":"This Place has no confirmed storage location for log access.","sync.log.unavailable":"The Place log could not be loaded. Retry to check it.","sync.log.loading":"Loading Place log…","sync.clear.selectedMessage":"This permanently removes the shared Sync log for {place}.","sync.overlay.title":"Roblox Studio plugin required","sync.overlay.message":"Sync status will be available once the Roblox Studio plugin connects.","sync.overlay.check1":"Is Roblox Studio running?","sync.overlay.check2":"Is the WEPPY Plugin installed?","sync.status.title":"Sync Status","sync.status.title.tooltip":"Current Studio and local file sync status for this place.","sync.status.forwardOnly":"Forward Only","sync.status.forwardOnly.tooltip":"Basic tier allows Studio to local forward sync only.","sync.status.place":"Place","sync.status.place.tooltip":"Connected Roblox place name and place ID.","sync.status.path":"Path","sync.status.path.tooltip":"Local filesystem root currently used for sync output.","sync.status.instances":"Instances","sync.status.instances.tooltip":"Total synced Roblox instances tracked in the local mirror.","sync.status.scripts":"Scripts","sync.status.scripts.tooltip":"Total synced script files currently indexed for this place.","sync.status.state":"State","sync.status.state.tooltip":"Current runtime sync state reported by the server.","sync.policy.title":"Sync Policy","sync.policy.title.tooltip":"Effective Sync policy reported by the connected Studio plugin.","sync.policy.activation":"Activation","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"Workflow","sync.policy.preset.studio_first":"Studio First","sync.policy.preset.bidirectional_review":"Bidirectional","sync.policy.preset.local_code_studio_world":"Local Code, Studio World","sync.policy.preset.custom":"Custom","sync.policy.apply.title":"How local changes apply to Studio","sync.policy.apply.description":"Shows whether changes made locally are reviewed first or applied to Studio automatically.","sync.policy.apply.content":"Content changes","sync.policy.apply.content.tooltip":"Script Source, property, and Service property changes made locally. Instance creation, deletion, renaming, and moves are Structure changes.","sync.policy.apply.structure":"Structure changes","sync.policy.apply.structure.tooltip":"Instance creation, deletion, renaming, and moves made locally. Automatic local deletion additionally requires the separate delete option below.","sync.policy.apply.manual":"Review first","sync.policy.apply.auto":"Auto apply","sync.policy.scope.disclosure":"Scope directions","sync.policy.scope.scriptSource":"Script source","sync.policy.scope.properties":"Properties","sync.policy.scope.structure":"Structure","sync.policy.scope.serviceProperties":"Service properties","sync.policy.endpoint.local":"Local","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → Local","sync.policy.direction.forward.tooltip":"Studio changes are written to local files.","sync.policy.direction.reverse":"Local → Studio","sync.policy.direction.reverse.tooltip":"Local file changes are applied to Studio.","sync.policy.direction.bidirectional":"Both ways","sync.policy.direction.bidirectional.tooltip":"Changes can move from Studio to local files and from local files to Studio.","sync.policy.safety.localDeletes":"Local delete → Studio instance removal","sync.policy.safety.review":"Review before delete","sync.policy.safety.review.tooltip":"Local file deletions wait for review before matching Studio instances are removed. This is separate from UI Studio automatic cleanup.","sync.policy.safety.auto":"Auto delete to Studio","sync.policy.safety.auto.tooltip":"Deleting local files may automatically remove matching Studio instances. This is separate from UI Studio automatic cleanup.","sync.policy.reviewRequired":"Review this policy in the Studio plugin before starting Sync.","sync.log.title":"Sync Log","sync.log.empty":"No sync events yet","sync.log.type.fullSyncStart":"START","sync.log.type.fullSyncStart.tooltip":"Full Sync started.","sync.log.type.fullSyncProgress":"PROGRESS","sync.log.type.fullSyncProgress.tooltip":"Full Sync is saving the snapshot.","sync.log.type.fullSyncComplete":"COMPLETE","sync.log.type.fullSyncComplete.tooltip":"Full Sync completed successfully.","sync.log.type.fullSyncFailed":"FAILED","sync.log.type.fullSyncFailed.tooltip":"Full Sync ended without completing the snapshot.","sync.log.type.write":"WRITE","sync.log.type.write.tooltip":"A new sync output was written to disk.","sync.log.type.update":"UPDATE","sync.log.type.update.tooltip":"An existing synced file or instance was updated.","sync.log.type.delete":"DELETE","sync.log.type.delete.tooltip":"A synced file or instance was removed.","sync.log.type.idle":"IDLE","sync.log.type.idle.tooltip":"A sync event was recorded without a file mutation.","sync.upgrade.title":"Explore Full Sync with Pro","sync.upgrade.benefit1":"Bidirectional sync — edit files, auto-apply to Studio","sync.upgrade.benefit2":"Reverse sync — push file changes back to Studio","sync.upgrade.benefit3":"Full sync history and detailed change log","sync.upgrade.buy":"View Pro","playtest.status.title":"Playtest Status","playtest.status.title.tooltip":"Current Roblox playtest session state reported by Studio.","playtest.status.mode":"Mode","playtest.status.mode.tooltip":"Studio playtest launch mode for the current session.","playtest.status.mode.value.tooltip":"Specific Roblox Studio playtest mode currently in use.","playtest.status.mode.play":"Play","playtest.status.mode.run":"Run","playtest.status.mode.server":"Server","playtest.status.mode.edit":"Edit","playtest.status.place.tooltip":"Roblox place currently associated with this playtest session.","playtest.status.state.running":"Running","playtest.status.state.running.tooltip":"A Roblox playtest session is currently running.","playtest.status.state.paused":"Paused","playtest.status.state.paused.tooltip":"The current Roblox playtest session is paused.","playtest.status.state.notRunning":"Not Running","playtest.status.state.notRunning.tooltip":"No Roblox playtest session is currently running.","playtest.control.play":"Play","playtest.control.pause":"Pause","playtest.control.resume":"Resume","playtest.control.stop":"Stop","playtest.history.title":"Test History","playtest.history.search":"Search test results","playtest.history.filter":"Result","playtest.history.filterAll":"All results","playtest.history.filteredCount":"{{visible}} of {{total}} results","playtest.history.title.tooltip":"Recorded automated playtest runs for this project.","playtest.history.empty":"No test results yet","playtest.history.mode":"Mode","playtest.history.mode.tooltip":"Playtest mode used for this recorded test run.","playtest.history.status.passed":"Passed","playtest.history.status.failed":"Failed","playtest.history.status.running":"Running","playtest.history.status.unknown":"Unknown","playtest.history.status.tooltip":"Recorded result state for this automated playtest run.","playtest.empty.title":"No playtest results yet","playtest.empty.message":"Test results will appear here after the AI Agent runs a Playtest.","playtest.empty.message.before":"Test results will appear here after the AI Agent runs a Playtest.","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"Ask the AI Agent to run a Playtest when you need a fresh report.","playtest.report.title":"Selected Report","playtest.report.title.tooltip":"Detailed output for the currently selected automated playtest run.","playtest.detail.dialogLabel":"Playtest report detail","playtest.detail.loading":"Loading report...","playtest.detail.errorTitle":"Report unavailable","playtest.report.content":"Report","playtest.report.content.tooltip":"Markdown summary for the selected automated playtest run.","playtest.report.logs":"Logs","playtest.report.logs.tooltip":"Execution logs captured for the selected automated playtest run.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"No report content available","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest is a Pro-only feature","playtest.basic.desc":"Control playtesting from the WEPPY Dashboard, run automated tests, and view detailed test reports.","playtest.basic.benefit1":"One-click play/pause/stop controls","playtest.basic.benefit2":"Automated test execution via AI agent","playtest.basic.benefit3":"Test history with pass/fail tracking","playtest.basic.benefit4":"Detailed markdown test reports","playtest.sample.badge":"Preview of the Pro playtest view","playtest.sample.title":"You are previewing the playtest screen that becomes available after upgrading to Pro.","playtest.sample.message":"This preview uses sample data. Live playtest control, history management, and real reports unlock with Pro.","playtest.sample.clearDisabled":"Available with Pro for live playtest history.","playtest.sample.place":"Arena Preview","playtest.sample.history.name":"Sample Arena Smoke Test","playtest.sample.context.why":"Spawn into the arena, survive the opener, and verify the HUD responds immediately.","playtest.sample.context.expected":"The player spawns safely, the countdown UI appears within one second, and the first wave starts without errors.","playtest.sample.context.observed":"Spawn protection held, the HUD updated on time, and wave one completed with no gameplay regressions.","playtest.sample.report.markdown":`# Sample Arena Smoke Test
78
78
 
79
79
  - Spawn flow: PASS
80
80
  - HUD countdown: PASS
@@ -92,7 +92,7 @@ This is a sample preview. Live playtests and real reports are available with Pro
92
92
  - 생성 source가 게임 코드에 접근하기 전에 RunService:IsStudio()를 확인하도록 adapterStudioOnly=true를 유지해 주세요. 제가 해당 검사를 제외하라고 명시한 경우에만 false로 설정하고 plan에 production 경고를 표시해 주세요.
93
93
  - 개발 원본은 보존하세요. 기본 guard가 있는 WEPPY 관리형 Adapter는 Studio 직접 Publish에 남겨도 되고, guard를 끈 Adapter·사용자 작성 테스트 코드·테스트 객체는 별도로 검토해야 한다고 설명해 주세요.
94
94
  - manage_studio.playtest_adapter_plan으로 소스 변경안을 확인하고, diff와 사용처를 검토한 뒤에만 반환된 토큰으로 manage_studio.playtest_adapter_apply를 실행해 주세요.
95
- - 소스 위치, 변경 파일, 프로필 사용처, cleanup 동작과 배포 전에 제가 직접 확인할 항목을 알려 주세요.`,"sidebar.overview":"개요","sidebar.changelog":"변경 이력","sidebar.connection":"연결","sidebar.sync":"동기화","sidebar.playtest":"플레이테스트","sidebar.tools":"도구","sidebar.settings":"설정","sidebar.ui_studio":"UI 스튜디오","sidebar.gate.l1":"MCP 서버를 연결해야 이 페이지를 사용할 수 있습니다.","sidebar.gate.l2":"Roblox Studio 플러그인을 연결해야 이 페이지를 사용할 수 있습니다.","header.currentProject":"현재 프로젝트","header.unknownProject":"알 수 없는 프로젝트","header.projectRoot.label":"Project Root","header.currentProject.loading":"프로젝트 루트 불러오는 중...","header.currentProject.unavailable":"프로젝트 루트를 불러올 수 없음","header.placeNotConnected":"플레이스 미연결","header.currentProject.tooltip":"현재 선택된 프로젝트 폴더입니다.","header.currentProject.loading.tooltip":"프로젝트 루트 정보를 아직 불러오는 중입니다.","header.currentProject.unavailable.tooltip":"현재 프로젝트 루트 정보를 불러올 수 없습니다.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Sync root 불러오는 중...","header.currentProjectSyncRoot.unavailable":"Sync root 정보를 불러올 수 없음","header.currentProjectSyncRoot.tooltip":"선택된 프로젝트의 현재 sync root 폴더입니다.","header.currentProjectSyncRoot.loading.tooltip":"Sync root 정보를 아직 불러오는 중입니다.","header.currentProjectSyncRoot.unavailable.tooltip":"현재 sync root 정보를 불러올 수 없습니다.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"테스트 파일 경로를 확인할 수 없습니다.","header.testFiles.tooltip":"선택된 플레이스의 현재 플레이테스트 파일 경로입니다.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"플러그인 연결 필요","header.places.liveRequired":"실시간 활성 플레이스를 확인하려면 플러그인 연결이 필요합니다.","header.place.tooltip":"연결된 Roblox 플레이스입니다.","header.placeNotConnected.tooltip":"플레이스 미연결","placeScope.current.label":"현재 플레이스","placeScope.lastActive.label":"마지막 활성 플레이스","placeScope.selected.label":"선택한 플레이스","placeScope.unknownPlace":"알 수 없는 플레이스","placeScope.live":"실시간","placeScope.connected":"Studio 연결됨","placeScope.stored":"저장 데이터","placeScope.connectedGroup":"연결된 Studio","placeScope.storedGroup":"저장 데이터","placeScope.stored.note":"현재 연결된 Studio에서 이 플레이스가 열려 있지 않습니다.","placeScope.pluginRequired":"플러그인 필요","placeScope.pluginRequired.note":"실시간 활성 플레이스를 확인하려면 WEPPY Plugin을 연결하세요.","placeScope.noPlace.label":"플레이스 범위","placeScope.noPlace.value":"아직 플레이스 데이터가 없습니다.","placeScope.noPlace.badge":"플레이스 없음","placeScope.noPlace.note":"WEPPY Plugin을 연결하고 플레이스를 동기화하면 place-scoped 데이터가 생성됩니다.","placeScope.selected.note":"저장된 데이터만 표시합니다. Studio 라우팅은 변경되지 않습니다.","placeScope.surface.sync":"이 플레이스의 동기화 상태와 로그를 표시합니다.","placeScope.surface.changelog":"이 플레이스의 변경 이력 세션을 표시합니다.","placeScope.surface.playtest":"이 플레이스의 플레이테스트 보고서를 표시합니다.","placeScope.surface.uiStudio":"이 플레이스의 UI 캡처와 변경 이력을 표시합니다.","placeScope.surface.tools":"이 플레이스의 도구 실행 기록과 통계를 표시합니다.","placeScope.loading":"플레이스 범위 불러오는 중...","placeScope.unavailable":"플레이스 범위를 사용할 수 없습니다.","placeScope.selector.label":"플레이스 데이터","placeScope.shortcuts.trigger":"바로가기","placeScope.shortcuts.label":"플레이스 바로가기","placeScope.shortcuts.settings":"플레이스 설정","placeScope.shortcuts.experience":"Experience 관리","placeScope.shortcuts.roblox":"Roblox에서 보기","placeScope.folder.duplicate":"중복 폴더","placeScope.folder.unresolved":"대표 폴더 미확정","placeScope.folder.noSyncHistory":"동기화 기록 없음","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Place 폴더 상세","placeScope.folder.duplicateReason":"현재 저장 위치는 {canonicalFolder}입니다. 이 폴더는 전체 동기화가 성공한 뒤 백업됩니다.","placeScope.folder.unresolvedReason":"이 Place는 ID로 계속 선택할 수 있지만, 아직 특정 폴더가 대표로 확정되지 않았습니다.","placeScope.folder.unknown":"확인되지 않음","placeScope.selector.noneSelectable":"선택할 수 있는 Place 폴더가 없습니다.","header.changeProjectRoot":"프로젝트 루트 변경","header.changeProjectRoot.ariaLabel":"프로젝트 루트 변경","header.changeProjectRoot.tooltip":"현재 프로젝트 루트를 변경합니다.","header.changeProjectRoot.disabledTooltip.l0":"프로젝트 루트를 변경하려면 먼저 MCP 서버 연결이 필요합니다.","header.changeProjectRoot.disabledTooltip.loading":"프로젝트 루트 정보를 아직 불러오는 중입니다.","header.changeProjectRoot.disabledTooltip.unavailable":"현재 프로젝트 루트 정보를 불러올 수 없습니다.","header.projectRootModal.initial.title":"프로젝트 루트 변경","header.projectRootModal.initial.body.connected":"프로젝트 폴더를 선택하면 MCP 프로젝트 루트가 즉시 변경되고 현재 Studio 내용이 새 <selected project folder>/weppy-project-sync 대상으로 전체 재동기화됩니다.","header.projectRootModal.initial.body.disconnected":"프로젝트 폴더를 선택하면 MCP 프로젝트 루트가 즉시 변경되고 새 <selected project folder>/weppy-project-sync 경로가 다음 sync 대상으로 사용됩니다.","header.projectRootModal.initial.nextSyncRoot":"선택 후 새 sync 대상","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"현재 sync는 즉시 중단됩니다.","header.projectRootModal.initial.warningFreshSync":"현재 Studio 내용을 기준으로 새 대상에 fresh full sync가 다시 생성됩니다.","header.projectRootModal.initial.warningNoMove":"기존 sync 폴더는 자동으로 이동되지 않습니다.","header.projectRootModal.initial.warningDeferredSync":"Studio가 아직 연결되지 않았다면 전체 재동기화는 다음 플러그인 연결 시 시작됩니다.","header.projectRootModal.confirm.title":"새 프로젝트 루트 확인","header.projectRootModal.confirm.body":"적용 전에 선택한 프로젝트 폴더를 다시 확인하세요.","header.projectRootModal.confirm.projectRoot":"선택한 프로젝트 폴더","header.projectRootModal.confirm.syncRoot":"새 sync 대상","header.projectRootModal.confirm.warningNoMove":"기존 sync 폴더는 자동으로 이동되지 않습니다.","header.projectRootModal.pick":"폴더 선택","header.projectRootModal.apply":"변경 적용","header.projectRootModal.cancel":"취소","header.projectRootModal.error":"프로젝트 루트를 변경하지 못했습니다.","status.online":"온라인","status.offline":"오프라인","status.idle":"대기","status.syncing":"동기화 중","status.error":"오류","status.initializing":"초기화 중","level.l0.title":"서버 연결 끊김","level.l0.message":"WEPPY Dashboard가 열린 뒤 서버가 종료되었거나 응답하지 않습니다.","level.l1.title":"서버 연결됨","level.l1.hint":"확인: Studio 실행 중? 플러그인 설치?","level.l2.ok":"Studio 연결됨","tier.basic":"Basic","tier.basic.tooltip":"기본 WEPPY Dashboard 기능을 제공하는 Basic 티어입니다.","tier.pro":"Pro","tier.pro.tooltip":"전체 WEPPY Dashboard 기능을 제공하는 Pro 티어입니다.","tier.mixed":"혼합","tier.upgrade":"Pro 확인하기","tier.banner.save":"Pro로 AI 토큰 절약!","tier.tool.query_instances.desc":"인스턴스 조회, 자식/자손 탐색, 클래스 정보, 이름·클래스 검색. Pro: 파일 트리, 프로젝트 구조, 속성·태그 검색.","tier.tool.mutate_instances.desc":"인스턴스 생성, 삭제, 복제, 이동, 이름변경, 피벗. Pro: 트리 생성, 대량 생성·삭제·복제.","tier.tool.manage_properties.desc":"속성, 어트리뷰트, 태그 조회 및 설정. Pro: 계산·상대값 설정, 대량 조회·설정, 자식 일괄 수정.","tier.tool.manage_scripts.desc":"스크립트 소스 코드 읽기, 쓰기, 생성, 삭제, 줄 편집, 검색. Pro: 스크립트 간 일괄 치환.","tier.tool.manage_ui.desc":"Pro 전용. 게임 스타일의 메뉴, HUD, 버튼, 라벨, 이미지 패널을 생성·개선하고 화면 캡처와 개선 제안을 확인합니다.","tier.tool.manage_ui.action.design_brief":"UI 방향 정리","tier.tool.manage_ui.action.create_tree":"새 UI 만들기","tier.tool.manage_ui.action.update":"기존 UI 수정","tier.tool.manage_ui.action.delete":"UI 삭제","tier.tool.manage_ui.action.preview":"UI 화면 캡처","tier.tool.manage_ui.action.check":"개선 제안 확인","tier.tool.manage_lighting.desc":"Pro 전용. 조명, 대기, 하늘, 터레인 속성, 시간대 환경 설정.","tier.tool.manage_selection.desc":"선택 조회, 설정, 해제. Pro: 컨텍스트, 상세 정보, 항목 추가·제거, 변경 감시.","tier.tool.manage_camera.desc":"카메라 정보 조회, 경로 또는 좌표로 포커스, 추천 뷰 제안.","tier.tool.manage_tween.desc":"Pro 전용. 부드러운 애니메이션을 위한 트윈 생성, 재생, 일시정지, 취소.","tier.tool.manage_audio.desc":"Pro 전용. 사운드 재생, 정지, 일시정지, 재개. 오디오 리스너 설정.","tier.tool.manage_animation.desc":"Pro 전용. 애니메이션 로드, 재생, 정지. 휴머노이드·컨트롤러의 트랙 조회.","tier.tool.manage_physics.desc":"Pro 전용. 물리 충돌 그룹 등록, 그룹 간 충돌 설정, 목록 조회.","tier.tool.manage_effects.desc":"Pro 전용. 파티클 방출, 전체 삭제, 이펙트 활성화 토글.","tier.tool.manage_terrain.desc":"Pro 전용. 도형 채우기, 영역 삭제, 재질 치환, 색상 관리, 복셀 읽기·쓰기, 절차적 생성, 스무딩.","tier.tool.spatial_query.desc":"Pro 전용. 레이캐스트, 지면 찾기, 배치 확인, 영역 스캔, 평지·스폰 위치 탐색, 보행 분석, 공간 맵, 충돌 확인.","tier.tool.manage_assets.desc":"Pro 전용. 모델 삽입, 에셋 정보 조회, 크리에이터 스토어 검색, 무료 모델·패키지 삽입, 내보내기.","tier.tool.manage_sync.desc":"Pro 전용. 동기화 상태, 설정, 히스토리, 방향 설정, 동기화 파일 읽기·쓰기.","tier.tool.workspace_state.desc":"Pro 전용. 전체 동기화, 상태 캡처, 최근 변경, 뷰포트 정보, 메타데이터, 캐시 관리.","tier.tool.manage_logs.desc":"출력 로그 필터링 조회, 증분 폴링, 버퍼 삭제, 최근 오류 조회.","tier.tool.system_info.desc":"연결 상태, 사용 티어 확인. Pro: 플레이스 정보, 서비스 목록, Studio 설정, 플레이테스트 제어, 자동 테스트.","tier.tool.manage_studio.desc":"Pro 전용. 스크린샷과 QA 흐름을 위해 UI 프리뷰 같은 Studio 편집기 보기 설정을 전환합니다. 게임 UI 오브젝트는 변경하지 않습니다.","tier.tool.batch_execute.desc":"Pro 전용. 여러 명령을 한 번에 일괄 실행. 순차 처리하며 오류 시 계속 진행 옵션.","tier.tool.execute_luau.desc":"Pro 전용. Roblox Studio 샌드박스에서 임의 Luau 코드 실행.","connection.server.title":"Bridge 상태","connection.server.version":"버전","connection.server.version.tooltip":"WEPPY Bridge 런타임 버전입니다.","connection.server.pid":"PID","connection.server.pid.tooltip":"운영체제에서 사용하는 프로세스 식별자입니다.","connection.server.uptime":"가동 시간","connection.server.uptime.tooltip":"WEPPY Bridge가 시작된 뒤 경과한 시간입니다.","connection.server.session":"세션","connection.server.session.tooltip":"현재 WEPPY Bridge 세션 식별자입니다.","connection.server.exec":"실행 파일","connection.server.exec.tooltip":"WEPPY Bridge를 실행한 실행 파일 경로입니다.","connection.server.restart":"Bridge 재시작","connection.server.restarting":"재시작 중…","connection.server.restartUnavailable":"새 Bridge를 실행할 MCP Adapter가 필요합니다. AI Agent를 하나 이상 연결하세요.","connection.server.restartTitle":"WEPPY Bridge를 재시작할까요?","connection.server.restartMessage":"Dashboard와 Studio target이 잠시 연결 끊깁니다. 진행 중인 명령은 완료 여부가 불확실해질 수 있고, 실행 중인 Playtest session과 대기 중인 제어는 정리됩니다. 연결된 MCP Adapter가 새 Bridge를 자동으로 실행합니다.","connection.server.restartConfirm":"Bridge 재시작","connection.server.restartRequesting":"Bridge 재시작 요청 중…","connection.server.restartReconnecting":"WEPPY Bridge 재연결 중…","connection.server.restartWaiting":"새 Bridge가 준비되면 Dashboard와 Studio가 자동으로 다시 연결됩니다.","connection.server.restartSucceeded":"WEPPY Bridge가 재시작되었습니다","connection.server.restartFailed":"WEPPY Bridge를 재시작하지 못했습니다","connection.server.restartTimeout":"제한 시간 안에 새 Bridge가 준비되지 않았습니다. AI 도구의 MCP 연결을 확인한 뒤 다시 시도하세요.","connection.server.restartStale":"재시작 요청이 수락되기 전에 Bridge가 바뀌었습니다. 현재 상태를 새로고침한 뒤 다시 시도하세요.","connection.reconnect":"수동 재연결","connection.checkSettings":"설정 확인","connection.agents.title":"AI 에이전트","connection.agents.name":"에이전트","connection.agents.version":"버전","connection.agents.version.tooltip":"이 에이전트 세션의 MCP Adapter 패키지 버전입니다.","connection.agents.cwd":"작업 디렉토리","connection.agents.cwd.tooltip":"연결된 AI 에이전트의 현재 작업 디렉토리입니다.","connection.agents.projectRoot":"프로젝트 루트","connection.agents.projectRoot.tooltip":"Sync ownership을 결정하는 프로젝트 경로","connection.agents.projectRoot.unresolved":"미확인","connection.agents.connected":"연결 시각","connection.agents.unknown":"알 수 없음","connection.agents.none":"연결된 에이전트 없음","connection.plugins.title":"플러그인","connection.plugins.place":"플레이스","connection.plugins.clientId":"연결 ID","connection.plugins.clientId.tooltip":"진단용 전체 연결 ID입니다.","connection.plugins.lastSeen":"마지막 확인","connection.plugins.lastSeen.tooltip":"플러그인에서 가장 최근에 수신한 heartbeat 시각입니다.","connection.plugins.version":"버전","connection.plugins.version.tooltip":"Studio가 보고한 설치된 플러그인 버전입니다.","connection.plugins.none":"연결된 플러그인 없음","connection.targets.title":"Studio 타깃","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"이 Roblox Studio 창을 가리키는 짧은 이름입니다.","connection.targets.place":"플레이스","connection.targets.placeId":"플레이스 ID","connection.targets.placeId.tooltip":"이 Studio 창의 Roblox 플레이스 ID입니다.","connection.targets.clientId":"연결 ID","connection.targets.clientId.tooltip":"진단용 전체 연결 ID입니다. 보통은 Studio ID를 사용하세요.","connection.targets.session":"세션","connection.targets.session.tooltip":"이 Studio 타깃의 명령 채널 상태입니다.","connection.targets.lastUsed":"마지막 사용","connection.targets.lastUsed.tooltip":"이 Studio 타깃으로 가장 최근에 라우팅된 plugin-route 요청 시각입니다.","connection.targets.lastSeen":"마지막 확인","connection.targets.lastSeen.tooltip":"이 Studio 타깃에서 가장 최근에 수신한 heartbeat 시각입니다.","connection.targets.version":"버전","connection.targets.version.tooltip":"Studio가 보고한 설치된 플러그인 버전입니다.","connection.targets.routing":"라우팅","connection.targets.routing.tooltip":"에이전트가 Studio 창을 지정하지 않았을 때 사용할 기본 창입니다.","connection.targets.inFlight":"진행 중","connection.targets.inFlight.tooltip":"이 Studio 타깃으로 현재 라우팅된 진행 중 명령 요청입니다.","connection.targets.studioState":"Studio 상태","connection.targets.studioState.tooltip":"이 Studio 창이 보고한 현재 편집/실행 상태입니다.","connection.targets.studioState.edit":"편집","connection.targets.studioState.running":"실행 중","connection.targets.studioState.paused":"일시정지","connection.targets.studioState.unknown":"알 수 없음","connection.targets.studioState.source.thread":"WEPPY 실행 명령","connection.targets.studioState.source.pluginConnection":"Studio Play/Test 연결","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"알 수 없는 출처","connection.targets.studioState.updatedUnknown":"보고 없음","connection.targets.copyPlaceId":"플레이스 ID 복사","connection.targets.copyTargetAlias":"Studio ID 복사","connection.targets.copyClientId":"연결 ID 복사","connection.targets.copied":"값을 복사했습니다","connection.targets.copyFailed":"값을 복사하지 못했습니다","connection.targets.none":"연결된 Studio target이 없습니다. Roblox Studio를 열고 WEPPY Plugin을 연결하세요.","connection.targets.help":'Studio 창이 여러 개 연결된 경우 에이전트에게 "Studio ID studio-1에 적용해줘"처럼 말해 특정 창을 지정할 수 있습니다.',"connection.topology.ariaLabel":"연결 구조","connection.topology.title":"연결 구조","connection.topology.description":"각 AI 에이전트는 자체 MCP Adapter를 통해 하나의 공유 WEPPY Bridge에 연결되고, Bridge가 Roblox Studio 연결을 유지합니다.","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"활성","connection.topology.stale":"지연","connection.topology.unknown":"미확인","connection.topology.lastContact":"마지막 연결 확인","connection.topology.noContact":"연결 확인 기록 없음","connection.topology.versionUnknown":"버전 미확인","connection.topology.placeUnknown":"플레이스 미확인","connection.topology.moreAgents":"+{count}개 에이전트 더 있음","connection.topology.moreStudios":"+{count}개 Studio 더 있음","connection.topology.allAgentsVisible":"모든 에이전트 표시 중","connection.topology.allStudiosVisible":"모든 Studio 표시 중","connection.topology.showAll":"모두 보기","connection.topology.showLess":"접기","connection.topology.showAllAgents":"모든 AI 에이전트 보기","connection.topology.showAllStudios":"모든 Studio 타깃 보기","connection.topology.showLessAgents":"AI 에이전트 접기","connection.topology.showLessStudios":"Studio 타깃 접기","connection.routing.updateFailed":"라우팅 target을 변경하지 못했습니다","connection.log.title":"연결 로그","connection.log.empty":"이벤트 없음","connection.time.secondsAgo":"초 전","connection.time.minutesAgo":"분 전","connection.time.hoursAgo":"시간 전","common.loading":"로딩 중...","common.retry":"재시도","common.reconnecting":"재연결 중...","common.expand":"펼치기","common.collapse":"접기","tools.tab.history":"히스토리","tools.tab.statistics":"통계","tools.tab.failures":"실패","tools.col.time":"시간","tools.col.time.tooltip":"도구 실행이 기록된 시각입니다.","tools.col.toolAction":"도구.액션","tools.col.toolAction.tooltip":"실행된 도구 이름과 액션입니다.","tools.col.duration":"소요 시간","tools.col.duration.tooltip":"도구 실행이 완료될 때까지 걸린 시간입니다.","tools.col.status":"상태","tools.col.status.tooltip":"기록된 도구 실행의 결과 상태입니다.","tools.col.tier":"티어","tools.col.tier.tooltip":"도구 또는 액션에 필요한 라이센스 티어입니다.","tools.col.tierStats.tooltip":"도구 통계 행이 Basic, Pro, Mixed 중 어느 집계인지 설명합니다.","tools.col.tool":"도구","tools.col.tool.tooltip":"통계 테이블에 표시되는 통합 도구 이름입니다.","tools.col.calls":"호출 수","tools.col.calls.tooltip":"이 도구에 대해 기록된 총 호출 횟수입니다.","tools.col.ok":"OK","tools.col.ok.tooltip":"직접 성공한 실행 횟수입니다.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"fallback 실행으로 성공한 횟수입니다.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"fallback 없이 차단된 실행 횟수입니다.","tools.col.warn":"주의","tools.col.warn.tooltip":"입력, 프로젝트 상태, Roblox 정책 또는 사용자 코드 때문에 예상된 실패로 기록된 횟수입니다.","tools.col.err":"실패","tools.col.err.tooltip":"실패로 끝난 실행 횟수입니다.","tools.col.okRate":"성공률","tools.col.okRate.tooltip":"성공적으로 끝난 호출 비율입니다.","tools.col.avgTime":"평균 시간","tools.col.avgTime.tooltip":"기록된 호출들의 평균 실행 시간입니다.","tools.col.error":"오류","tools.filter.tool":"도구","tools.filter.all":"전체","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"이 항목은 Pro 전용 도구 또는 액션을 사용했습니다.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"요청한 Pro 액션이 Basic fallback으로 성공했습니다.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"요청한 Pro 액션이 차단되었고 fallback도 실행되지 않았습니다.","tools.badge.warn":"주의","tools.badge.warn.tooltip":"요청, 프로젝트 상태, 정책 또는 사용자 코드 조정이 필요한 예상 실패입니다.","tools.badge.err":"실패","tools.badge.err.tooltip":"도구 실행이 실패로 끝났습니다.","tools.status.ok":"OK","tools.status.ok.tooltip":"도구 실행이 성공적으로 완료되었습니다.","tools.tier.mixed.tooltip":"이 도구에는 Basic 액션과 Pro 액션이 함께 포함됩니다.","tools.detail.params":"파라미터","tools.detail.params.tooltip":"이 도구 실행에 전달된 입력 파라미터입니다.","tools.detail.result":"결과","tools.detail.result.tooltip":"이 도구 실행에서 반환된 결과 페이로드입니다.","tools.detail.requestedCommand":"전송한 명령","tools.detail.executedCommand":"실행된 명령","tools.detail.alternatives":"대안","tools.detail.blockedMessage":"차단 사유","tools.detail.noFallback":"Fallback 없음","tools.detail.noFallback.value":"실행된 fallback이 없습니다.","tools.detail.warningMessage":"주의 메시지","tools.detail.errorMessage":"오류 메시지","tools.detail.open":"상세","tools.detail.openLabel":"{command} 상세 보기","tools.detail.dialogLabel":"도구 실행 상세","tools.detail.title":"도구 실행","tools.history.routing":"라우팅","tools.history.routing.mode":"모드","tools.history.routing.requested":"요청","tools.history.routing.actual":"실제","tools.history.routing.none":"지정한 Studio 대상 없음","tools.clear.history.title":"히스토리를 삭제할까요?","tools.clear.history.message":"현재 place의 도구 히스토리가 영구적으로 삭제됩니다.","tools.clear.statistics.title":"통계를 삭제할까요?","tools.clear.statistics.message":"현재 place의 도구 통계가 영구적으로 초기화됩니다.","tools.detail.error":"오류","tools.page.prev":"이전","tools.page.prev.tooltip":"도구 히스토리의 이전 페이지로 이동합니다.","tools.page.next":"다음","tools.page.next.tooltip":"도구 히스토리의 다음 페이지로 이동합니다.","tools.empty.history":"히스토리 없음","tools.empty.stats":"도구 통계 없음","tools.empty.failures":"실패 없음","tools.summary.total":"합계","tools.summary.calls":"호출","tools.summary.sessions":"세션","settings.license.title":"라이센스","settings.license.title.tooltip":"현재 라이센스 상태와 구독 티어입니다.","settings.license.status":"상태","settings.license.status.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.tier":"티어","settings.license.tier.tooltip":"WEPPY Dashboard 기능 범위를 결정하는 현재 구독 티어입니다.","settings.license.key":"키","settings.license.key.tooltip":"서버에 현재 로드된 마스킹된 라이센스 키입니다.","settings.license.keyValue.tooltip":"서버에 현재 로드된 마스킹된 라이센스 키입니다.","settings.license.provider":"제공자","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"이 키를 검증하는 라이센스 제공자입니다.","settings.license.providerValue.tooltip":"이 키를 검증하는 라이센스 제공자입니다.","settings.license.active":"활성","settings.license.active.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.status.activeCancelPending.tooltip":"해지가 예약되어 있지만 현재 결제 주기가 끝날 때까지 Pro 접근은 유지됩니다.","settings.license.inactive":"비활성","settings.license.inactive.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.expired":"만료","settings.license.expired.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.unavailable":"라이센스 정보를 불러올 수 없음","settings.license.detail.cancelPending":"해지가 예약되었습니다. 현재 결제 주기가 끝날 때까지 Pro 접근은 유지됩니다.","settings.license.reset":"라이센스 리셋","settings.readOnly":"읽기 전용","settings.readOnly.tooltip":"이 섹션의 값은 WEPPY Dashboard에서 수정할 수 없습니다.","settings.unavailable":"설정을 불러올 수 없음","settings.general.title":"일반 설정","settings.general.title.tooltip":"변경 즉시 적용되는 Hot 설정입니다.","settings.general.liveApply":"즉시 반영","settings.general.liveApply.tooltip":"이 섹션의 변경은 별도 저장 버튼 없이 바로 적용됩니다.","settings.general.applied":"적용됨","settings.general.logLevel":"로그 레벨","settings.general.logLevel.tooltip":"MCP 서버가 남기는 로그의 자세한 정도를 정합니다. 문제 추적이 필요하면 debug 로 낮추세요.","settings.general.localHistory":"도구 히스토리 기록","settings.general.localHistory.tooltip":"AI 도구 호출 기록을 컴퓨터에 저장합니다. Tools / History 화면에서 보기 위해 필요합니다.","settings.general.localStatistics":"도구 통계 집계","settings.general.localStatistics.tooltip":"도구 사용 횟수를 집계합니다. Overview 화면의 통계에 사용됩니다.","settings.general.contextCapture":"컨텍스트 캡처","settings.general.contextCapture.tooltip":"Changelog와 Playtest 화면에서 보기 좋도록 변경 이력을 구조화해 저장합니다.","settings.general.requestTimeout":"작업 제한 시간","settings.general.requestTimeout.tooltip":"AI 도구 한 번 실행에 대해 기다리는 최대 시간(밀리초)입니다. 시간이 지나면 실패로 처리됩니다.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"작업 제한 시간 단위는 밀리초입니다.","settings.cold.title":"서버 환경변수","settings.cold.title.tooltip":"서버 시작 시 로드되는 읽기 전용 환경변수 값입니다.","settings.cold.httpPort.tooltip":"MCP WEPPY Dashboard HTTP 서버가 사용하는 포트 번호입니다.","settings.cold.httpHost.tooltip":"MCP WEPPY Dashboard HTTP 서버가 바인딩하는 호스트 인터페이스입니다.","settings.cold.hint":"환경변수로 설정하세요.","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"MCP 서버가 시작될 때 WEPPY Dashboard가 어떻게 동작할지 선택합니다.","settings.dashboard.nextStartBadge":"다음 시작부터","settings.dashboard.autoOpen.label":"WEPPY 시작 시 Dashboard 열기","settings.dashboard.autoOpen.description":"MCP 서버가 시작된 뒤 이 Dashboard를 자동으로 엽니다.","settings.dashboard.autoOpen.nextStart":"다음 MCP 서버 시작부터 적용됩니다.","settings.dashboard.settingsFile.label":"설정 파일","settings.dashboard.agentExample.label":"Agent에게 이렇게 요청해 보세요","settings.dashboard.agentExample.prompt":"“Dashboard 자동 열기 꺼줘”","settings.dashboard.autoOpen.saving":"저장 중…","settings.dashboard.autoOpen.saved":"다음 서버 시작에 적용되도록 저장했습니다.","settings.dashboard.autoOpen.error":"저장하지 못해 이전 설정으로 되돌렸습니다.","dashboardAutoOpenGuide.eyebrow":"Dashboard 설정","dashboardAutoOpenGuide.title":"WEPPY Dashboard를 여는 방식을 선택하세요","dashboardAutoOpenGuide.currentOn":"현재 자동 열기가 켜져 있습니다. MCP 서버가 시작되면 이 Dashboard가 열립니다.","dashboardAutoOpenGuide.currentOff":"현재 자동 열기가 꺼져 있습니다. MCP 서버가 시작되어도 새 Dashboard 탭을 열지 않습니다.","dashboardAutoOpenGuide.changeAnytime":"Settings에서 언제든지 변경할 수 있습니다.","dashboardAutoOpenGuide.agentHint":"Agent에게 “Dashboard 자동 열기 꺼줘”라고 요청할 수도 있습니다.","dashboardAutoOpenGuide.statusOn":"자동 열기 켜짐","dashboardAutoOpenGuide.statusOff":"자동 열기 꺼짐","dashboardAutoOpenGuide.keep":"현재 설정 유지","dashboardAutoOpenGuide.turnOff":"자동 열기 끄기","dashboardAutoOpenGuide.openSettings":"Settings에서 보기","dashboardAutoOpenGuide.close":"자동 열기 안내 닫기","dashboardAutoOpenGuide.saving":"저장 중…","dashboardAutoOpenGuide.error":"선택을 저장하지 못했습니다. 다시 시도해 주세요.","settings.language.title":"언어","settings.language.title.tooltip":"WEPPY Dashboard UI 텍스트에 사용할 언어를 선택합니다.","settings.language.dashboard":"WEPPY Dashboard 언어","settings.language.dashboard.tooltip":"Auto일 때는 시스템 언어를 따르고, 아니면 선택한 언어를 강제합니다.","settings.language.auto":"자동","overview.l0.title":"MCP 서버 연결 끊김","overview.l0.message":"MCP 서버가 응답하지 않습니다. WEPPY Dashboard가 자동으로 재연결을 시도합니다.","overview.l0.step1":"MCP 서버 프로세스가 실행 중인지 확인하세요","overview.l0.step2":"필요 시 MCP 서버 명령을 다시 시작하세요","overview.l0.reconnecting":"3초마다 자동 재연결 중...","overview.l0.reconnectBtn":"수동 재연결","overview.l0.settingsBtn":"설정 확인","overview.l1.pluginGuide":"Roblox Studio 플러그인이 연결되지 않았습니다","overview.l1.check1":"Roblox Studio가 실행 중인가요?","overview.l1.check2":"WEPPY Plugin이 설치되어 있나요?","overview.l1.feedHint":"플러그인이 연결되면 변경사항이 표시됩니다","overview.metric.server":"서버","overview.metric.server.tooltip":"MCP 서버의 실행 상태와 프로세스 상태입니다.","overview.metric.plugin":"플러그인","overview.metric.plugin.tooltip":"Roblox Studio 플러그인의 연결 상태와 버전 정보입니다.","overview.metric.agent":"에이전트","overview.metric.agent.tooltip":"연결된 AI 코딩 에이전트와 현재 실행 상태입니다.","overview.metric.agent.instancesUnit":"인스턴스","overview.metric.sync":"동기화","overview.metric.sync.tooltip":"현재 Studio와 로컬 파일 간 동기화 상태입니다.","overview.metric.noAgent":"에이전트 없음","overview.meta.version":"버전","overview.meta.version.tooltip":"설치된 MCP 서버 버전입니다.","overview.meta.session":"세션","overview.meta.session.tooltip":"현재 MCP 세션 식별자입니다.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"운영체제에서 사용하는 프로세스 식별자입니다.","overview.meta.uptime":"가동 시간","overview.meta.uptime.tooltip":"MCP 서버가 시작된 뒤 경과한 시간입니다.","overview.feed.title":"최근 게임 변경","overview.feed.empty":"최근 변경사항 없음","overview.changelog.title":"세션 변경 요약","overview.changelog.entries":"합계","overview.changelog.scripts":"스크립트","overview.changelog.instances":"인스턴스","overview.changelog.properties":"속성","overview.changelog.assets":"에셋","overview.tier.title":"티어 사용 현황","changelog.subtitle":"게임 변경 이력","changelog.filter.all":"전체","changelog.filter.active":"활성","changelog.filter.completed":"완료","changelog.empty":"변경 이력이 없습니다","changelog.basic.limit.title":"Basic 미리보기에서는 최신 3개 세션만 표시됩니다","changelog.basic.limit.body":"Pro에서 이 플레이스의 전체 변경 이력 타임라인을 확인할 수 있습니다.","changelog.basic.metricLabel":"표시 중인 변경 이력 / 전체","changelog.basic.visible":"표시 중","changelog.basic.total":"전체","changelog.card.active":"활성","changelog.card.active.tooltip":"이 세션은 아직 새 게임 변경을 계속 수집 중입니다.","changelog.card.completed":"완료","changelog.card.completed.tooltip":"이 세션은 종료되어 더 이상 새 변경이 추가되지 않습니다.","changelog.card.bootstrapStatus":"초기화","changelog.card.bootstrapStatus.tooltip":"이 세션에는 초기 동기화 기준 기록만 포함됩니다.","changelog.card.inProgress":"진행 중","changelog.card.noChanges":"아직 변경사항 없음","changelog.card.noChanges.tooltip":"이 세션에서는 아직 추출된 게임 변경이 없습니다.","changelog.card.bootstrapSummary":"초기 동기화 기준 기록","changelog.card.bootstrapSummary.tooltip":"초기 파일 동기화 쓰기 작업은 하나의 기준 기록 행으로 축약됩니다.","changelog.card.sessionIntent":"세션 의도","changelog.card.scripts":"스크립트","changelog.card.scripts.tooltip":"이 세션에서 발생한 스크립트 변경입니다.","changelog.card.instances":"인스턴스","changelog.card.instances.tooltip":"이 세션에서 발생한 인스턴스 생성, 삭제, 이동, 복제 변경입니다.","changelog.card.modified":"수정","changelog.card.created":"생성","changelog.card.deleted":"삭제","changelog.card.moved":"이동","changelog.card.propertiesChanged":"속성 변경","changelog.card.propertiesChanged.tooltip":"이 세션에서 기록된 속성 값 변경입니다.","changelog.card.lightingConfigured":"라이팅 설정됨","changelog.card.lightingConfigured.tooltip":"이 세션에서 라이팅 또는 대기 설정이 변경되었습니다.","changelog.card.terrainConfigured":"터레인 설정됨","changelog.card.terrainConfigured.tooltip":"이 세션에서 터레인 데이터 또는 터레인 설정이 변경되었습니다.","changelog.card.assetsInserted":"에셋 삽입","changelog.card.assetsInserted.tooltip":"이 세션 동안 플레이스에 삽입된 에셋입니다.","changelog.category.script":"스크립트","changelog.category.instance":"인스턴스","changelog.category.property":"속성","changelog.category.lighting":"라이팅","changelog.category.terrain":"터레인","changelog.category.asset":"에셋","changelog.detail.dialogLabel":"변경 이력 상세","changelog.detail.changeSummary":"변경 요약","changelog.detail.changeSummary.tooltip":"이 세션에서 추출된 게임 변경 수를 카테고리별로 묶어서 보여줍니다.","changelog.detail.changeTimeline":"변경 타임라인","changelog.detail.changeTimeline.tooltip":"이 세션에서 추출된 게임 변경을 시간순으로 보여줍니다.","changelog.detail.context.title":"컨텍스트 요약","changelog.detail.context.tooltip":"이 체인지로그 세션에 연결된 구조화된 실행 컨텍스트입니다.","changelog.detail.verification.title":"검증","changelog.detail.verification.tooltip":"이 체인지로그 세션에 연결된 검증 신호입니다.","changelog.detail.verification.label":"결과","changelog.detail.verification.status":"상태","changelog.detail.verification.timestamp":"기록 시각","changelog.detail.beforeAfter":"변경 전후 비교","changelog.detail.filterCategory":"카테고리","changelog.detail.filterCategory.tooltip":"타임라인을 하나의 변경 카테고리만 보이도록 필터링합니다.","changelog.detail.confidence.exact":"정확","changelog.detail.confidence.exact.tooltip":"이 변경은 변경 전과 변경 후 상태가 모두 확인되었습니다.","changelog.detail.confidence.partial":"부분 확인","changelog.detail.confidence.partial.tooltip":"이 변경은 변경 전후 상태 중 일부만 확인되었습니다.","changelog.detail.confidence.afterOnly":"결과만 확인","changelog.detail.confidence.afterOnly.tooltip":"이 변경은 적용 후 결과 상태만 확인되었습니다.","changelog.detail.confidence.intentOnly":"의도만 기록","changelog.detail.confidence.intentOnly.tooltip":"요청된 작업 의도만 기록되었고 결과 상태는 확인되지 않았습니다.","changelog.detail.confidence.unknown":"알 수 없음","changelog.detail.confidence.unknown.tooltip":"사용 가능한 데이터만으로는 이 변경을 신뢰도 있게 분류할 수 없습니다.","changelog.detail.noChanges":"이 카테고리에 변경사항 없음","changelog.detail.backToList":"목록으로 돌아가기","changelog.diff.empty":"비교할 내용 없음","changelog.diff.unified":"통합","changelog.diff.sideBySide":"나란히 비교","changelog.diff.before":"변경 전","changelog.diff.after":"변경 후","sync.targets.title":"연결된 Studio","sync.targets.refresh":"새로고침","sync.targets.loading":"Studio Sync 상태를 불러오는 중…","sync.targets.unavailable":"Studio Sync 상태를 확인할 수 없습니다. 다시 시도해 현재 상태를 확인하세요.","sync.targets.empty":"연결된 Studio가 없습니다. WEPPY Plugin을 연결하면 실시간 Sync 상태가 표시됩니다.","sync.targets.unknownPlace":"알 수 없는 플레이스","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"연결됨","sync.targets.notReported":"아직 보고되지 않음","sync.targets.state.unknown":"확인되지 않음","sync.targets.state.off":"Sync 꺼짐","sync.targets.state.idle":"켜짐 · 실행 대기","sync.targets.state.initializing":"초기화 중","sync.targets.state.syncing":"동기화 중","sync.targets.state.paused":"일시 중지","sync.targets.state.error":"오류","sync.forwardStatus.label":"변경 전송","sync.forwardStatus.tooltip":"Edit 변경 전송 가능 상태입니다. 활성 상태여도 모든 로컬 파일이 최신이라는 뜻은 아닙니다.","sync.forwardStatus.inactive":"꺼짐","sync.forwardStatus.active":"활성","sync.forwardStatus.paused_play":"Play 중 일시 중지","sync.forwardStatus.reconciling":"Edit 변경 확인 중","sync.forwardStatus.blocked":"확인 필요","sync.forwardStatus.unknown":"확인되지 않음","sync.forwardStatus.observedAt":"관측 시각","sync.forwardStatus.reason.review":"Studio Plugin에서 변경을 검토하세요.","sync.forwardStatus.reason.editChanged":"확인 중 Edit 내용이 바뀌었습니다. Studio Plugin에서 Sync를 확인하세요.","sync.forwardStatus.reason.failed":"변경 반영을 확인하지 못했습니다. Studio Plugin에서 Sync를 확인하세요.","sync.forwardStatus.reason.fallback":"Studio Plugin에서 자세한 내용을 확인하세요.","sync.stored.title":"저장된 플레이스","sync.stored.data":"저장된 데이터","sync.stored.ambiguous":"저장 위치 미확정","sync.detail.scope":"Sync 상세 조회 대상","sync.detail.readOnly":"상세 조회는 Studio 라우팅을 변경하지 않습니다.","sync.detail.empty":"연결된 Studio 또는 저장된 플레이스를 선택하세요.","sync.detail.unknown":"이 Studio의 Sync 상태가 아직 보고되지 않았습니다.","sync.detail.error":"Sync 오류가 보고되었습니다. Studio Plugin에서 자세한 내용을 확인하세요.","sync.detail.placeFolder":"Place 폴더","sync.detail.placeFolder.tooltip":"이 Place를 연 Studio들이 공유하는 저장 폴더입니다.","sync.detail.sharedData":"경로·개수·로그는 Place 단위이며 이 Place를 연 Studio들이 공유합니다.","sync.log.shared":"Place 공유 로그","sync.log.unsafe":"이 Place의 저장 위치가 확인되지 않아 로그에 접근할 수 없습니다.","sync.log.unavailable":"Place 로그를 불러오지 못했습니다. 다시 시도하세요.","sync.log.loading":"Place 로그를 불러오는 중…","sync.clear.selectedMessage":"{place}의 공유 Sync 로그를 영구적으로 삭제합니다.","sync.overlay.title":"Roblox Studio 플러그인이 필요합니다","sync.overlay.message":"Roblox Studio 플러그인이 연결되면 동기화 상태를 확인할 수 있습니다.","sync.overlay.check1":"Roblox Studio가 실행 중인가요?","sync.overlay.check2":"WEPPY Plugin이 설치되어 있나요?","sync.status.title":"동기화 상태","sync.status.title.tooltip":"이 플레이스의 Studio와 로컬 파일 동기화 상태입니다.","sync.status.forwardOnly":"단방향만","sync.status.forwardOnly.tooltip":"Basic 티어에서는 Studio에서 로컬로 가는 단방향 동기화만 사용할 수 있습니다.","sync.status.place":"플레이스","sync.status.place.tooltip":"연결된 Roblox 플레이스 이름과 플레이스 ID입니다.","sync.status.path":"경로","sync.status.path.tooltip":"현재 동기화 출력에 사용하는 로컬 파일 시스템 루트입니다.","sync.status.instances":"인스턴스","sync.status.instances.tooltip":"로컬 미러에 추적 중인 동기화된 Roblox 인스턴스 수입니다.","sync.status.scripts":"스크립트","sync.status.scripts.tooltip":"이 플레이스에 대해 현재 인덱싱된 동기화 스크립트 파일 수입니다.","sync.status.state":"상태","sync.status.state.tooltip":"서버가 보고한 현재 동기화 런타임 상태입니다.","sync.policy.title":"Sync 정책","sync.policy.title.tooltip":"연결된 Studio 플러그인이 보고한 실제 Sync 적용 정책입니다.","sync.policy.activation":"활성 상태","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"워크플로","sync.policy.preset.studio_first":"Studio 우선","sync.policy.preset.bidirectional_review":"양방향","sync.policy.preset.local_code_studio_world":"로컬 코드, Studio 월드","sync.policy.preset.custom":"Custom","sync.policy.apply.title":"로컬 변경을 Studio에 적용하는 방식","sync.policy.apply.description":"로컬에서 바꾼 내용을 Studio에 검토 후 적용하는지 자동 적용하는지 보여줍니다.","sync.policy.apply.content":"콘텐츠 변경","sync.policy.apply.content.tooltip":"로컬에서 변경한 Script Source, 속성, Service 속성의 Studio 적용 방식입니다. 인스턴스 생성·삭제·이름 변경·이동은 구조 변경입니다.","sync.policy.apply.structure":"구조 변경","sync.policy.apply.structure.tooltip":"로컬에서 수행한 인스턴스 생성·삭제·이름 변경·이동의 Studio 적용 방식입니다. 로컬 삭제 자동 적용에는 아래의 별도 삭제 설정도 필요합니다.","sync.policy.apply.manual":"검토 후 적용","sync.policy.apply.auto":"자동 적용","sync.policy.scope.disclosure":"Scope별 방향","sync.policy.scope.scriptSource":"스크립트 source","sync.policy.scope.properties":"Properties","sync.policy.scope.structure":"구조","sync.policy.scope.serviceProperties":"Service properties","sync.policy.endpoint.local":"로컬","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → 로컬","sync.policy.direction.forward.tooltip":"Studio 변경을 로컬 파일에 기록합니다.","sync.policy.direction.reverse":"로컬 → Studio","sync.policy.direction.reverse.tooltip":"로컬 파일 변경을 Studio에 적용합니다.","sync.policy.direction.bidirectional":"양방향","sync.policy.direction.bidirectional.tooltip":"Studio와 로컬 파일 양쪽의 변경을 서로 적용합니다.","sync.policy.safety.localDeletes":"로컬 삭제 → Studio 인스턴스 삭제","sync.policy.safety.review":"삭제 전 검토","sync.policy.safety.review.tooltip":"로컬 파일 삭제는 대응하는 Studio 인스턴스를 제거하기 전에 검토를 기다립니다. UI Studio 자동 정리와는 별개 기능입니다.","sync.policy.safety.auto":"Studio에 자동 삭제","sync.policy.safety.auto.tooltip":"로컬 파일을 삭제하면 대응하는 Studio 인스턴스가 자동으로 제거될 수 있습니다. UI Studio 자동 정리와는 별개 기능입니다.","sync.policy.reviewRequired":"Sync를 시작하기 전에 Studio 플러그인에서 이 정책을 검토하세요.","sync.log.title":"동기화 로그","sync.log.empty":"동기화 이벤트 없음","sync.log.type.write":"쓰기","sync.log.type.write.tooltip":"새 동기화 출력이 디스크에 기록되었습니다.","sync.log.type.update":"업데이트","sync.log.type.update.tooltip":"기존 동기화 파일 또는 인스턴스가 갱신되었습니다.","sync.log.type.delete":"삭제","sync.log.type.delete.tooltip":"동기화된 파일 또는 인스턴스가 제거되었습니다.","sync.log.type.idle":"대기","sync.log.type.idle.tooltip":"파일 변경 없이 동기화 이벤트만 기록되었습니다.","sync.upgrade.title":"Pro 동기화 기능 확인하기","sync.upgrade.benefit1":"양방향 동기화 — 파일 편집 시 Studio에 자동 반영","sync.upgrade.benefit2":"역방향 동기화 — 파일 변경을 Studio로 전송","sync.upgrade.benefit3":"전체 동기화 히스토리 및 상세 변경 로그","sync.upgrade.buy":"Pro 확인하기","playtest.status.title":"플레이테스트 상태","playtest.status.title.tooltip":"Studio가 보고한 현재 Roblox 플레이테스트 세션 상태입니다.","playtest.status.mode":"모드","playtest.status.mode.tooltip":"현재 세션에 사용 중인 Studio 플레이테스트 실행 모드입니다.","playtest.status.mode.value.tooltip":"현재 적용 중인 Roblox Studio 플레이테스트 모드의 구체적인 값입니다.","playtest.status.mode.play":"플레이","playtest.status.mode.run":"실행","playtest.status.mode.server":"서버","playtest.status.mode.edit":"편집","playtest.status.place.tooltip":"이 플레이테스트 세션과 연결된 Roblox 플레이스입니다.","playtest.status.state.running":"실행 중","playtest.status.state.running.tooltip":"현재 Roblox 플레이테스트 세션이 실행 중입니다.","playtest.status.state.paused":"일시정지","playtest.status.state.paused.tooltip":"현재 Roblox 플레이테스트 세션이 일시정지 상태입니다.","playtest.status.state.notRunning":"실행 안 함","playtest.status.state.notRunning.tooltip":"현재 실행 중인 Roblox 플레이테스트 세션이 없습니다.","playtest.control.play":"플레이","playtest.control.pause":"일시정지","playtest.control.resume":"재개","playtest.control.stop":"정지","playtest.history.title":"테스트 히스토리","playtest.history.search":"테스트 결과 검색","playtest.history.filter":"결과","playtest.history.filterAll":"전체 결과","playtest.history.filteredCount":"전체 {{total}}개 중 {{visible}}개","playtest.history.title.tooltip":"이 프로젝트에서 기록된 자동 플레이테스트 실행 이력입니다.","playtest.history.empty":"테스트 결과 없음","playtest.history.mode":"모드","playtest.history.mode.tooltip":"이 기록된 테스트 실행에 사용된 플레이테스트 모드입니다.","playtest.history.status.passed":"성공","playtest.history.status.failed":"실패","playtest.history.status.running":"실행 중","playtest.history.status.unknown":"알 수 없음","playtest.history.status.tooltip":"이 자동 플레이테스트 실행의 기록된 결과 상태입니다.","playtest.empty.title":"아직 플레이테스트 결과가 없습니다","playtest.empty.message":"AI Agent가 Playtest를 실행하면 결과가 여기에 표시됩니다.","playtest.empty.message.before":"AI Agent가 Playtest를 실행하면 결과가 여기에 표시됩니다.","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"새 리포트가 필요하면 AI Agent에게 Playtest 실행을 요청하세요.","playtest.report.title":"선택된 리포트","playtest.report.title.tooltip":"현재 선택된 자동 플레이테스트 실행의 상세 출력입니다.","playtest.detail.dialogLabel":"플레이테스트 리포트 상세","playtest.detail.loading":"리포트를 불러오는 중...","playtest.detail.errorTitle":"리포트를 불러올 수 없음","playtest.report.content":"리포트","playtest.report.content.tooltip":"선택된 자동 플레이테스트 실행의 마크다운 요약입니다.","playtest.report.logs":"로그","playtest.report.logs.tooltip":"선택된 자동 플레이테스트 실행에서 수집된 실행 로그입니다.","playtest.context.contextId":"컨텍스트 ID","playtest.context.why":"이 테스트를 실행한 이유","playtest.context.expected":"예상 결과","playtest.context.observed":"관찰 결과","playtest.report.empty":"리포트 내용 없음","playtest.basic.icon":"🎮","playtest.basic.title":"플레이테스트는 Pro 전용 기능입니다","playtest.basic.desc":"WEPPY Dashboard에서 플레이테스트를 제어하고, 자동 테스트를 실행하며, 상세한 테스트 리포트를 확인하세요.","playtest.basic.benefit1":"원클릭 플레이/일시정지/정지 제어","playtest.basic.benefit2":"AI 에이전트를 통한 자동 테스트 실행","playtest.basic.benefit3":"성공/실패 추적이 가능한 테스트 히스토리","playtest.basic.benefit4":"상세한 마크다운 테스트 리포트","playtest.sample.badge":"Pro 플레이테스트 화면 미리보기","playtest.sample.title":"현재 보고 있는 화면은 Pro에서 사용할 수 있는 플레이테스트 화면 예시입니다.","playtest.sample.message":"이 미리보기는 샘플 데이터로 구성되어 있습니다. 실시간 플레이테스트 제어, 히스토리 관리, 실제 리포트 저장은 Pro 구매 후 사용할 수 있습니다.","playtest.sample.clearDisabled":"실제 플레이테스트 기록 삭제는 Pro에서 사용할 수 있습니다.","playtest.sample.place":"아레나 미리보기","playtest.sample.history.name":"샘플 아레나 스모크 테스트","playtest.sample.context.why":"아레나에 스폰한 뒤 첫 구간을 버티고 HUD가 즉시 반응하는지 확인합니다.","playtest.sample.context.expected":"플레이어가 안전하게 스폰되고, 1초 안에 카운트다운 UI가 표시되며, 첫 웨이브가 오류 없이 시작되어야 합니다.","playtest.sample.context.observed":"스폰 보호가 정상 동작했고, HUD가 제때 갱신되었으며, 첫 웨이브가 회귀 없이 완료되었습니다.","playtest.sample.report.markdown":`# 샘플 아레나 스모크 테스트
95
+ - 소스 위치, 변경 파일, 프로필 사용처, cleanup 동작과 배포 전에 제가 직접 확인할 항목을 알려 주세요.`,"sidebar.overview":"개요","sidebar.changelog":"변경 이력","sidebar.connection":"연결","sidebar.sync":"동기화","sidebar.playtest":"플레이테스트","sidebar.tools":"도구","sidebar.settings":"설정","sidebar.ui_studio":"UI 스튜디오","sidebar.gate.l1":"MCP 서버를 연결해야 이 페이지를 사용할 수 있습니다.","sidebar.gate.l2":"Roblox Studio 플러그인을 연결해야 이 페이지를 사용할 수 있습니다.","header.currentProject":"현재 프로젝트","header.unknownProject":"알 수 없는 프로젝트","header.projectRoot.label":"Project Root","header.currentProject.loading":"프로젝트 루트 불러오는 중...","header.currentProject.unavailable":"프로젝트 루트를 불러올 수 없음","header.placeNotConnected":"플레이스 미연결","header.currentProject.tooltip":"현재 선택된 프로젝트 폴더입니다.","header.currentProject.loading.tooltip":"프로젝트 루트 정보를 아직 불러오는 중입니다.","header.currentProject.unavailable.tooltip":"현재 프로젝트 루트 정보를 불러올 수 없습니다.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Sync root 불러오는 중...","header.currentProjectSyncRoot.unavailable":"Sync root 정보를 불러올 수 없음","header.currentProjectSyncRoot.tooltip":"선택된 프로젝트의 현재 sync root 폴더입니다.","header.currentProjectSyncRoot.loading.tooltip":"Sync root 정보를 아직 불러오는 중입니다.","header.currentProjectSyncRoot.unavailable.tooltip":"현재 sync root 정보를 불러올 수 없습니다.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"테스트 파일 경로를 확인할 수 없습니다.","header.testFiles.tooltip":"선택된 플레이스의 현재 플레이테스트 파일 경로입니다.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"플러그인 연결 필요","header.places.liveRequired":"실시간 활성 플레이스를 확인하려면 플러그인 연결이 필요합니다.","header.place.tooltip":"연결된 Roblox 플레이스입니다.","header.placeNotConnected.tooltip":"플레이스 미연결","placeScope.current.label":"현재 플레이스","placeScope.lastActive.label":"마지막 활성 플레이스","placeScope.selected.label":"선택한 플레이스","placeScope.unknownPlace":"알 수 없는 플레이스","placeScope.live":"실시간","placeScope.connected":"Studio 연결됨","placeScope.stored":"저장 데이터","placeScope.connectedGroup":"연결된 Studio","placeScope.storedGroup":"저장 데이터","placeScope.stored.note":"현재 연결된 Studio에서 이 플레이스가 열려 있지 않습니다.","placeScope.pluginRequired":"플러그인 필요","placeScope.pluginRequired.note":"실시간 활성 플레이스를 확인하려면 WEPPY Plugin을 연결하세요.","placeScope.noPlace.label":"플레이스 범위","placeScope.noPlace.value":"아직 플레이스 데이터가 없습니다.","placeScope.noPlace.badge":"플레이스 없음","placeScope.noPlace.note":"WEPPY Plugin을 연결하고 플레이스를 동기화하면 place-scoped 데이터가 생성됩니다.","placeScope.selected.note":"저장된 데이터만 표시합니다. Studio 라우팅은 변경되지 않습니다.","placeScope.surface.sync":"이 플레이스의 동기화 상태와 로그를 표시합니다.","placeScope.surface.changelog":"이 플레이스의 변경 이력 세션을 표시합니다.","placeScope.surface.playtest":"이 플레이스의 플레이테스트 보고서를 표시합니다.","placeScope.surface.uiStudio":"이 플레이스의 UI 캡처와 변경 이력을 표시합니다.","placeScope.surface.tools":"이 플레이스의 도구 실행 기록과 통계를 표시합니다.","placeScope.loading":"플레이스 범위 불러오는 중...","placeScope.unavailable":"플레이스 범위를 사용할 수 없습니다.","placeScope.selector.label":"플레이스 데이터","placeScope.shortcuts.trigger":"바로가기","placeScope.shortcuts.label":"플레이스 바로가기","placeScope.shortcuts.settings":"플레이스 설정","placeScope.shortcuts.experience":"Experience 관리","placeScope.shortcuts.roblox":"Roblox에서 보기","placeScope.folder.duplicate":"중복 폴더","placeScope.folder.unresolved":"대표 폴더 미확정","placeScope.folder.noSyncHistory":"동기화 기록 없음","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Place 폴더 상세","placeScope.folder.duplicateReason":"현재 저장 위치는 {canonicalFolder}입니다. 이 폴더는 전체 동기화가 성공한 뒤 백업됩니다.","placeScope.folder.unresolvedReason":"이 Place는 ID로 계속 선택할 수 있지만, 아직 특정 폴더가 대표로 확정되지 않았습니다.","placeScope.folder.unknown":"확인되지 않음","placeScope.selector.noneSelectable":"선택할 수 있는 Place 폴더가 없습니다.","header.changeProjectRoot":"프로젝트 루트 변경","header.changeProjectRoot.ariaLabel":"프로젝트 루트 변경","header.changeProjectRoot.tooltip":"현재 프로젝트 루트를 변경합니다.","header.changeProjectRoot.disabledTooltip.l0":"프로젝트 루트를 변경하려면 먼저 MCP 서버 연결이 필요합니다.","header.changeProjectRoot.disabledTooltip.loading":"프로젝트 루트 정보를 아직 불러오는 중입니다.","header.changeProjectRoot.disabledTooltip.unavailable":"현재 프로젝트 루트 정보를 불러올 수 없습니다.","header.projectRootModal.initial.title":"프로젝트 루트 변경","header.projectRootModal.initial.body.connected":"프로젝트 폴더를 선택하면 MCP 프로젝트 루트가 즉시 변경되고 현재 Studio 내용이 새 <selected project folder>/weppy-project-sync 대상으로 전체 재동기화됩니다.","header.projectRootModal.initial.body.disconnected":"프로젝트 폴더를 선택하면 MCP 프로젝트 루트가 즉시 변경되고 새 <selected project folder>/weppy-project-sync 경로가 다음 sync 대상으로 사용됩니다.","header.projectRootModal.initial.nextSyncRoot":"선택 후 새 sync 대상","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"현재 sync는 즉시 중단됩니다.","header.projectRootModal.initial.warningFreshSync":"현재 Studio 내용을 기준으로 새 대상에 fresh full sync가 다시 생성됩니다.","header.projectRootModal.initial.warningNoMove":"기존 sync 폴더는 자동으로 이동되지 않습니다.","header.projectRootModal.initial.warningDeferredSync":"Studio가 아직 연결되지 않았다면 전체 재동기화는 다음 플러그인 연결 시 시작됩니다.","header.projectRootModal.confirm.title":"새 프로젝트 루트 확인","header.projectRootModal.confirm.body":"적용 전에 선택한 프로젝트 폴더를 다시 확인하세요.","header.projectRootModal.confirm.projectRoot":"선택한 프로젝트 폴더","header.projectRootModal.confirm.syncRoot":"새 sync 대상","header.projectRootModal.confirm.warningNoMove":"기존 sync 폴더는 자동으로 이동되지 않습니다.","header.projectRootModal.pick":"폴더 선택","header.projectRootModal.apply":"변경 적용","header.projectRootModal.cancel":"취소","header.projectRootModal.error":"프로젝트 루트를 변경하지 못했습니다.","status.online":"온라인","status.offline":"오프라인","status.idle":"대기","status.syncing":"동기화 중","status.error":"오류","status.initializing":"초기화 중","level.l0.title":"서버 연결 끊김","level.l0.message":"WEPPY Dashboard가 열린 뒤 서버가 종료되었거나 응답하지 않습니다.","level.l1.title":"서버 연결됨","level.l1.hint":"확인: Studio 실행 중? 플러그인 설치?","level.l2.ok":"Studio 연결됨","tier.basic":"Basic","tier.basic.tooltip":"기본 WEPPY Dashboard 기능을 제공하는 Basic 티어입니다.","tier.pro":"Pro","tier.pro.tooltip":"전체 WEPPY Dashboard 기능을 제공하는 Pro 티어입니다.","tier.mixed":"혼합","tier.upgrade":"Pro 확인하기","tier.banner.save":"Pro로 AI 토큰 절약!","tier.tool.query_instances.desc":"인스턴스 조회, 자식/자손 탐색, 클래스 정보, 이름·클래스 검색. Pro: 파일 트리, 프로젝트 구조, 속성·태그 검색.","tier.tool.mutate_instances.desc":"인스턴스 생성, 삭제, 복제, 이동, 이름변경, 피벗. Pro: 트리 생성, 대량 생성·삭제·복제.","tier.tool.manage_properties.desc":"속성, 어트리뷰트, 태그 조회 및 설정. Pro: 계산·상대값 설정, 대량 조회·설정, 자식 일괄 수정.","tier.tool.manage_scripts.desc":"스크립트 소스 코드 읽기, 쓰기, 생성, 삭제, 줄 편집, 검색. Pro: 스크립트 간 일괄 치환.","tier.tool.manage_ui.desc":"Pro 전용. 게임 스타일의 메뉴, HUD, 버튼, 라벨, 이미지 패널을 생성·개선하고 화면 캡처와 개선 제안을 확인합니다.","tier.tool.manage_ui.action.design_brief":"UI 방향 정리","tier.tool.manage_ui.action.create_tree":"새 UI 만들기","tier.tool.manage_ui.action.update":"기존 UI 수정","tier.tool.manage_ui.action.delete":"UI 삭제","tier.tool.manage_ui.action.preview":"UI 화면 캡처","tier.tool.manage_ui.action.check":"개선 제안 확인","tier.tool.manage_lighting.desc":"Pro 전용. 조명, 대기, 하늘, 터레인 속성, 시간대 환경 설정.","tier.tool.manage_selection.desc":"선택 조회, 설정, 해제. Pro: 컨텍스트, 상세 정보, 항목 추가·제거, 변경 감시.","tier.tool.manage_camera.desc":"카메라 정보 조회, 경로 또는 좌표로 포커스, 추천 뷰 제안.","tier.tool.manage_tween.desc":"Pro 전용. 부드러운 애니메이션을 위한 트윈 생성, 재생, 일시정지, 취소.","tier.tool.manage_audio.desc":"Pro 전용. 사운드 재생, 정지, 일시정지, 재개. 오디오 리스너 설정.","tier.tool.manage_animation.desc":"Pro 전용. 애니메이션 로드, 재생, 정지. 휴머노이드·컨트롤러의 트랙 조회.","tier.tool.manage_physics.desc":"Pro 전용. 물리 충돌 그룹 등록, 그룹 간 충돌 설정, 목록 조회.","tier.tool.manage_effects.desc":"Pro 전용. 파티클 방출, 전체 삭제, 이펙트 활성화 토글.","tier.tool.manage_terrain.desc":"Pro 전용. 도형 채우기, 영역 삭제, 재질 치환, 색상 관리, 복셀 읽기·쓰기, 절차적 생성, 스무딩.","tier.tool.spatial_query.desc":"Pro 전용. 레이캐스트, 지면 찾기, 배치 확인, 영역 스캔, 평지·스폰 위치 탐색, 보행 분석, 공간 맵, 충돌 확인.","tier.tool.manage_assets.desc":"Pro 전용. 모델 삽입, 에셋 정보 조회, 크리에이터 스토어 검색, 무료 모델·패키지 삽입, 내보내기.","tier.tool.manage_sync.desc":"Pro 전용. 동기화 상태, 설정, 히스토리, 방향 설정, 동기화 파일 읽기·쓰기.","tier.tool.workspace_state.desc":"Pro 전용. 전체 동기화, 상태 캡처, 최근 변경, 뷰포트 정보, 메타데이터, 캐시 관리.","tier.tool.manage_logs.desc":"출력 로그 필터링 조회, 증분 폴링, 버퍼 삭제, 최근 오류 조회.","tier.tool.system_info.desc":"연결 상태, 사용 티어 확인. Pro: 플레이스 정보, 서비스 목록, Studio 설정, 플레이테스트 제어, 자동 테스트.","tier.tool.manage_studio.desc":"Pro 전용. 스크린샷과 QA 흐름을 위해 UI 프리뷰 같은 Studio 편집기 보기 설정을 전환합니다. 게임 UI 오브젝트는 변경하지 않습니다.","tier.tool.batch_execute.desc":"Pro 전용. 여러 명령을 한 번에 일괄 실행. 순차 처리하며 오류 시 계속 진행 옵션.","tier.tool.execute_luau.desc":"Pro 전용. Roblox Studio 샌드박스에서 임의 Luau 코드 실행.","connection.server.title":"Bridge 상태","connection.server.version":"버전","connection.server.version.tooltip":"WEPPY Bridge 런타임 버전입니다.","connection.server.pid":"PID","connection.server.pid.tooltip":"운영체제에서 사용하는 프로세스 식별자입니다.","connection.server.uptime":"가동 시간","connection.server.uptime.tooltip":"WEPPY Bridge가 시작된 뒤 경과한 시간입니다.","connection.server.session":"세션","connection.server.session.tooltip":"현재 WEPPY Bridge 세션 식별자입니다.","connection.server.exec":"실행 파일","connection.server.exec.tooltip":"WEPPY Bridge를 실행한 실행 파일 경로입니다.","connection.server.restart":"Bridge 재시작","connection.server.restarting":"재시작 중…","connection.server.restartUnavailable":"새 Bridge를 실행할 MCP Adapter가 필요합니다. AI Agent를 하나 이상 연결하세요.","connection.server.restartTitle":"WEPPY Bridge를 재시작할까요?","connection.server.restartMessage":"Dashboard와 Studio target이 잠시 연결 끊깁니다. 진행 중인 명령은 완료 여부가 불확실해질 수 있고, 실행 중인 Playtest session과 대기 중인 제어는 정리됩니다. 연결된 MCP Adapter가 새 Bridge를 자동으로 실행합니다.","connection.server.restartConfirm":"Bridge 재시작","connection.server.restartRequesting":"Bridge 재시작 요청 중…","connection.server.restartReconnecting":"WEPPY Bridge 재연결 중…","connection.server.restartWaiting":"새 Bridge가 준비되면 Dashboard와 Studio가 자동으로 다시 연결됩니다.","connection.server.restartSucceeded":"WEPPY Bridge가 재시작되었습니다","connection.server.restartFailed":"WEPPY Bridge를 재시작하지 못했습니다","connection.server.restartTimeout":"제한 시간 안에 새 Bridge가 준비되지 않았습니다. AI 도구의 MCP 연결을 확인한 뒤 다시 시도하세요.","connection.server.restartStale":"재시작 요청이 수락되기 전에 Bridge가 바뀌었습니다. 현재 상태를 새로고침한 뒤 다시 시도하세요.","connection.reconnect":"수동 재연결","connection.checkSettings":"설정 확인","connection.agents.title":"AI 에이전트","connection.agents.name":"에이전트","connection.agents.version":"버전","connection.agents.version.tooltip":"이 에이전트 세션의 MCP Adapter 패키지 버전입니다.","connection.agents.cwd":"작업 디렉토리","connection.agents.cwd.tooltip":"연결된 AI 에이전트의 현재 작업 디렉토리입니다.","connection.agents.projectRoot":"프로젝트 루트","connection.agents.projectRoot.tooltip":"Sync ownership을 결정하는 프로젝트 경로","connection.agents.projectRoot.unresolved":"미확인","connection.agents.connected":"연결 시각","connection.agents.unknown":"알 수 없음","connection.agents.none":"연결된 에이전트 없음","connection.plugins.title":"플러그인","connection.plugins.place":"플레이스","connection.plugins.clientId":"연결 ID","connection.plugins.clientId.tooltip":"진단용 전체 연결 ID입니다.","connection.plugins.lastSeen":"마지막 확인","connection.plugins.lastSeen.tooltip":"플러그인에서 가장 최근에 수신한 heartbeat 시각입니다.","connection.plugins.version":"버전","connection.plugins.version.tooltip":"Studio가 보고한 설치된 플러그인 버전입니다.","connection.plugins.none":"연결된 플러그인 없음","connection.targets.title":"Studio 타깃","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"이 Roblox Studio 창을 가리키는 짧은 이름입니다.","connection.targets.place":"플레이스","connection.targets.placeId":"플레이스 ID","connection.targets.placeId.tooltip":"이 Studio 창의 Roblox 플레이스 ID입니다.","connection.targets.clientId":"연결 ID","connection.targets.clientId.tooltip":"진단용 전체 연결 ID입니다. 보통은 Studio ID를 사용하세요.","connection.targets.session":"세션","connection.targets.session.tooltip":"이 Studio 타깃의 명령 채널 상태입니다.","connection.targets.lastUsed":"마지막 사용","connection.targets.lastUsed.tooltip":"이 Studio 타깃으로 가장 최근에 라우팅된 plugin-route 요청 시각입니다.","connection.targets.lastSeen":"마지막 확인","connection.targets.lastSeen.tooltip":"이 Studio 타깃에서 가장 최근에 수신한 heartbeat 시각입니다.","connection.targets.version":"버전","connection.targets.version.tooltip":"Studio가 보고한 설치된 플러그인 버전입니다.","connection.targets.routing":"라우팅","connection.targets.routing.tooltip":"에이전트가 Studio 창을 지정하지 않았을 때 사용할 기본 창입니다.","connection.targets.inFlight":"진행 중","connection.targets.inFlight.tooltip":"이 Studio 타깃으로 현재 라우팅된 진행 중 명령 요청입니다.","connection.targets.studioState":"Studio 상태","connection.targets.studioState.tooltip":"이 Studio 창이 보고한 현재 편집/실행 상태입니다.","connection.targets.studioState.edit":"편집","connection.targets.studioState.running":"실행 중","connection.targets.studioState.paused":"일시정지","connection.targets.studioState.unknown":"알 수 없음","connection.targets.studioState.source.thread":"WEPPY 실행 명령","connection.targets.studioState.source.pluginConnection":"Studio Play/Test 연결","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"알 수 없는 출처","connection.targets.studioState.updatedUnknown":"보고 없음","connection.targets.copyPlaceId":"플레이스 ID 복사","connection.targets.copyTargetAlias":"Studio ID 복사","connection.targets.copyClientId":"연결 ID 복사","connection.targets.copied":"값을 복사했습니다","connection.targets.copyFailed":"값을 복사하지 못했습니다","connection.targets.none":"연결된 Studio target이 없습니다. Roblox Studio를 열고 WEPPY Plugin을 연결하세요.","connection.targets.help":'Studio 창이 여러 개 연결된 경우 에이전트에게 "Studio ID studio-1에 적용해줘"처럼 말해 특정 창을 지정할 수 있습니다.',"connection.topology.ariaLabel":"연결 구조","connection.topology.title":"연결 구조","connection.topology.description":"각 AI 에이전트는 자체 MCP Adapter를 통해 하나의 공유 WEPPY Bridge에 연결되고, Bridge가 Roblox Studio 연결을 유지합니다.","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"활성","connection.topology.stale":"지연","connection.topology.unknown":"미확인","connection.topology.lastContact":"마지막 연결 확인","connection.topology.noContact":"연결 확인 기록 없음","connection.topology.versionUnknown":"버전 미확인","connection.topology.placeUnknown":"플레이스 미확인","connection.topology.moreAgents":"+{count}개 에이전트 더 있음","connection.topology.moreStudios":"+{count}개 Studio 더 있음","connection.topology.allAgentsVisible":"모든 에이전트 표시 중","connection.topology.allStudiosVisible":"모든 Studio 표시 중","connection.topology.showAll":"모두 보기","connection.topology.showLess":"접기","connection.topology.showAllAgents":"모든 AI 에이전트 보기","connection.topology.showAllStudios":"모든 Studio 타깃 보기","connection.topology.showLessAgents":"AI 에이전트 접기","connection.topology.showLessStudios":"Studio 타깃 접기","connection.routing.updateFailed":"라우팅 target을 변경하지 못했습니다","connection.log.title":"연결 로그","connection.log.empty":"이벤트 없음","connection.time.secondsAgo":"초 전","connection.time.minutesAgo":"분 전","connection.time.hoursAgo":"시간 전","common.loading":"로딩 중...","common.retry":"재시도","common.reconnecting":"재연결 중...","common.expand":"펼치기","common.collapse":"접기","tools.tab.history":"히스토리","tools.tab.statistics":"통계","tools.tab.failures":"실패","tools.col.time":"시간","tools.col.time.tooltip":"도구 실행이 기록된 시각입니다.","tools.col.toolAction":"도구.액션","tools.col.toolAction.tooltip":"실행된 도구 이름과 액션입니다.","tools.col.duration":"소요 시간","tools.col.duration.tooltip":"도구 실행이 완료될 때까지 걸린 시간입니다.","tools.col.status":"상태","tools.col.status.tooltip":"기록된 도구 실행의 결과 상태입니다.","tools.col.tier":"티어","tools.col.tier.tooltip":"도구 또는 액션에 필요한 라이센스 티어입니다.","tools.col.tierStats.tooltip":"도구 통계 행이 Basic, Pro, Mixed 중 어느 집계인지 설명합니다.","tools.col.tool":"도구","tools.col.tool.tooltip":"통계 테이블에 표시되는 통합 도구 이름입니다.","tools.col.calls":"호출 수","tools.col.calls.tooltip":"이 도구에 대해 기록된 총 호출 횟수입니다.","tools.col.ok":"OK","tools.col.ok.tooltip":"직접 성공한 실행 횟수입니다.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"fallback 실행으로 성공한 횟수입니다.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"fallback 없이 차단된 실행 횟수입니다.","tools.col.warn":"주의","tools.col.warn.tooltip":"입력, 프로젝트 상태, Roblox 정책 또는 사용자 코드 때문에 예상된 실패로 기록된 횟수입니다.","tools.col.err":"실패","tools.col.err.tooltip":"실패로 끝난 실행 횟수입니다.","tools.col.okRate":"성공률","tools.col.okRate.tooltip":"성공적으로 끝난 호출 비율입니다.","tools.col.avgTime":"평균 시간","tools.col.avgTime.tooltip":"기록된 호출들의 평균 실행 시간입니다.","tools.col.error":"오류","tools.filter.tool":"도구","tools.filter.all":"전체","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"이 항목은 Pro 전용 도구 또는 액션을 사용했습니다.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"요청한 Pro 액션이 Basic fallback으로 성공했습니다.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"요청한 Pro 액션이 차단되었고 fallback도 실행되지 않았습니다.","tools.badge.warn":"주의","tools.badge.warn.tooltip":"요청, 프로젝트 상태, 정책 또는 사용자 코드 조정이 필요한 예상 실패입니다.","tools.badge.err":"실패","tools.badge.err.tooltip":"도구 실행이 실패로 끝났습니다.","tools.status.ok":"OK","tools.status.ok.tooltip":"도구 실행이 성공적으로 완료되었습니다.","tools.tier.mixed.tooltip":"이 도구에는 Basic 액션과 Pro 액션이 함께 포함됩니다.","tools.detail.params":"파라미터","tools.detail.params.tooltip":"이 도구 실행에 전달된 입력 파라미터입니다.","tools.detail.result":"결과","tools.detail.result.tooltip":"이 도구 실행에서 반환된 결과 페이로드입니다.","tools.detail.requestedCommand":"전송한 명령","tools.detail.executedCommand":"실행된 명령","tools.detail.alternatives":"대안","tools.detail.blockedMessage":"차단 사유","tools.detail.noFallback":"Fallback 없음","tools.detail.noFallback.value":"실행된 fallback이 없습니다.","tools.detail.warningMessage":"주의 메시지","tools.detail.errorMessage":"오류 메시지","tools.detail.open":"상세","tools.detail.openLabel":"{command} 상세 보기","tools.detail.dialogLabel":"도구 실행 상세","tools.detail.title":"도구 실행","tools.history.routing":"라우팅","tools.history.routing.mode":"모드","tools.history.routing.requested":"요청","tools.history.routing.actual":"실제","tools.history.routing.none":"지정한 Studio 대상 없음","tools.clear.history.title":"히스토리를 삭제할까요?","tools.clear.history.message":"현재 place의 도구 히스토리가 영구적으로 삭제됩니다.","tools.clear.statistics.title":"통계를 삭제할까요?","tools.clear.statistics.message":"현재 place의 도구 통계가 영구적으로 초기화됩니다.","tools.detail.error":"오류","tools.page.prev":"이전","tools.page.prev.tooltip":"도구 히스토리의 이전 페이지로 이동합니다.","tools.page.next":"다음","tools.page.next.tooltip":"도구 히스토리의 다음 페이지로 이동합니다.","tools.empty.history":"히스토리 없음","tools.empty.stats":"도구 통계 없음","tools.empty.failures":"실패 없음","tools.summary.total":"합계","tools.summary.calls":"호출","tools.summary.sessions":"세션","settings.license.title":"라이센스","settings.license.title.tooltip":"현재 라이센스 상태와 구독 티어입니다.","settings.license.status":"상태","settings.license.status.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.tier":"티어","settings.license.tier.tooltip":"WEPPY Dashboard 기능 범위를 결정하는 현재 구독 티어입니다.","settings.license.key":"키","settings.license.key.tooltip":"서버에 현재 로드된 마스킹된 라이센스 키입니다.","settings.license.keyValue.tooltip":"서버에 현재 로드된 마스킹된 라이센스 키입니다.","settings.license.provider":"제공자","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"이 키를 검증하는 라이센스 제공자입니다.","settings.license.providerValue.tooltip":"이 키를 검증하는 라이센스 제공자입니다.","settings.license.active":"활성","settings.license.active.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.status.activeCancelPending.tooltip":"해지가 예약되어 있지만 현재 결제 주기가 끝날 때까지 Pro 접근은 유지됩니다.","settings.license.inactive":"비활성","settings.license.inactive.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.expired":"만료","settings.license.expired.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.unavailable":"라이센스 정보를 불러올 수 없음","settings.license.detail.cancelPending":"해지가 예약되었습니다. 현재 결제 주기가 끝날 때까지 Pro 접근은 유지됩니다.","settings.license.reset":"라이센스 리셋","settings.readOnly":"읽기 전용","settings.readOnly.tooltip":"이 섹션의 값은 WEPPY Dashboard에서 수정할 수 없습니다.","settings.unavailable":"설정을 불러올 수 없음","settings.general.title":"일반 설정","settings.general.title.tooltip":"변경 즉시 적용되는 Hot 설정입니다.","settings.general.liveApply":"즉시 반영","settings.general.liveApply.tooltip":"이 섹션의 변경은 별도 저장 버튼 없이 바로 적용됩니다.","settings.general.applied":"적용됨","settings.general.logLevel":"로그 레벨","settings.general.logLevel.tooltip":"MCP 서버가 남기는 로그의 자세한 정도를 정합니다. 문제 추적이 필요하면 debug 로 낮추세요.","settings.general.localHistory":"도구 히스토리 기록","settings.general.localHistory.tooltip":"AI 도구 호출 기록을 컴퓨터에 저장합니다. Tools / History 화면에서 보기 위해 필요합니다.","settings.general.localStatistics":"도구 통계 집계","settings.general.localStatistics.tooltip":"도구 사용 횟수를 집계합니다. Overview 화면의 통계에 사용됩니다.","settings.general.contextCapture":"컨텍스트 캡처","settings.general.contextCapture.tooltip":"Changelog와 Playtest 화면에서 보기 좋도록 변경 이력을 구조화해 저장합니다.","settings.general.requestTimeout":"작업 제한 시간","settings.general.requestTimeout.tooltip":"AI 도구 한 번 실행에 대해 기다리는 최대 시간(밀리초)입니다. 시간이 지나면 실패로 처리됩니다.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"작업 제한 시간 단위는 밀리초입니다.","settings.cold.title":"서버 환경변수","settings.cold.title.tooltip":"서버 시작 시 로드되는 읽기 전용 환경변수 값입니다.","settings.cold.httpPort.tooltip":"MCP WEPPY Dashboard HTTP 서버가 사용하는 포트 번호입니다.","settings.cold.httpHost.tooltip":"MCP WEPPY Dashboard HTTP 서버가 바인딩하는 호스트 인터페이스입니다.","settings.cold.hint":"환경변수로 설정하세요.","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"MCP 서버가 시작될 때 WEPPY Dashboard가 어떻게 동작할지 선택합니다.","settings.dashboard.nextStartBadge":"다음 시작부터","settings.dashboard.autoOpen.label":"WEPPY 시작 시 Dashboard 열기","settings.dashboard.autoOpen.description":"MCP 서버가 시작된 뒤 이 Dashboard를 자동으로 엽니다.","settings.dashboard.autoOpen.nextStart":"다음 MCP 서버 시작부터 적용됩니다.","settings.dashboard.settingsFile.label":"설정 파일","settings.dashboard.agentExample.label":"Agent에게 이렇게 요청해 보세요","settings.dashboard.agentExample.prompt":"“Dashboard 자동 열기 꺼줘”","settings.dashboard.autoOpen.saving":"저장 중…","settings.dashboard.autoOpen.saved":"다음 서버 시작에 적용되도록 저장했습니다.","settings.dashboard.autoOpen.error":"저장하지 못해 이전 설정으로 되돌렸습니다.","dashboardAutoOpenGuide.eyebrow":"Dashboard 설정","dashboardAutoOpenGuide.title":"WEPPY Dashboard를 여는 방식을 선택하세요","dashboardAutoOpenGuide.currentOn":"현재 자동 열기가 켜져 있습니다. MCP 서버가 시작되면 이 Dashboard가 열립니다.","dashboardAutoOpenGuide.currentOff":"현재 자동 열기가 꺼져 있습니다. MCP 서버가 시작되어도 새 Dashboard 탭을 열지 않습니다.","dashboardAutoOpenGuide.changeAnytime":"Settings에서 언제든지 변경할 수 있습니다.","dashboardAutoOpenGuide.agentHint":"Agent에게 “Dashboard 자동 열기 꺼줘”라고 요청할 수도 있습니다.","dashboardAutoOpenGuide.statusOn":"자동 열기 켜짐","dashboardAutoOpenGuide.statusOff":"자동 열기 꺼짐","dashboardAutoOpenGuide.keep":"현재 설정 유지","dashboardAutoOpenGuide.turnOff":"자동 열기 끄기","dashboardAutoOpenGuide.openSettings":"Settings에서 보기","dashboardAutoOpenGuide.close":"자동 열기 안내 닫기","dashboardAutoOpenGuide.saving":"저장 중…","dashboardAutoOpenGuide.error":"선택을 저장하지 못했습니다. 다시 시도해 주세요.","settings.language.title":"언어","settings.language.title.tooltip":"WEPPY Dashboard UI 텍스트에 사용할 언어를 선택합니다.","settings.language.dashboard":"WEPPY Dashboard 언어","settings.language.dashboard.tooltip":"Auto일 때는 시스템 언어를 따르고, 아니면 선택한 언어를 강제합니다.","settings.language.auto":"자동","overview.l0.title":"MCP 서버 연결 끊김","overview.l0.message":"MCP 서버가 응답하지 않습니다. WEPPY Dashboard가 자동으로 재연결을 시도합니다.","overview.l0.step1":"MCP 서버 프로세스가 실행 중인지 확인하세요","overview.l0.step2":"필요 시 MCP 서버 명령을 다시 시작하세요","overview.l0.reconnecting":"3초마다 자동 재연결 중...","overview.l0.reconnectBtn":"수동 재연결","overview.l0.settingsBtn":"설정 확인","overview.l1.pluginGuide":"Roblox Studio 플러그인이 연결되지 않았습니다","overview.l1.check1":"Roblox Studio가 실행 중인가요?","overview.l1.check2":"WEPPY Plugin이 설치되어 있나요?","overview.l1.feedHint":"플러그인이 연결되면 변경사항이 표시됩니다","overview.metric.server":"서버","overview.metric.server.tooltip":"MCP 서버의 실행 상태와 프로세스 상태입니다.","overview.metric.plugin":"플러그인","overview.metric.plugin.tooltip":"Roblox Studio 플러그인의 연결 상태와 버전 정보입니다.","overview.metric.agent":"에이전트","overview.metric.agent.tooltip":"연결된 AI 코딩 에이전트와 현재 실행 상태입니다.","overview.metric.agent.instancesUnit":"인스턴스","overview.metric.sync":"동기화","overview.metric.sync.tooltip":"현재 Studio와 로컬 파일 간 동기화 상태입니다.","overview.metric.noAgent":"에이전트 없음","overview.meta.version":"버전","overview.meta.version.tooltip":"설치된 MCP 서버 버전입니다.","overview.meta.session":"세션","overview.meta.session.tooltip":"현재 MCP 세션 식별자입니다.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"운영체제에서 사용하는 프로세스 식별자입니다.","overview.meta.uptime":"가동 시간","overview.meta.uptime.tooltip":"MCP 서버가 시작된 뒤 경과한 시간입니다.","overview.feed.title":"최근 게임 변경","overview.feed.empty":"최근 변경사항 없음","overview.changelog.title":"세션 변경 요약","overview.changelog.entries":"합계","overview.changelog.scripts":"스크립트","overview.changelog.instances":"인스턴스","overview.changelog.properties":"속성","overview.changelog.assets":"에셋","overview.tier.title":"티어 사용 현황","changelog.subtitle":"게임 변경 이력","changelog.filter.all":"전체","changelog.filter.active":"활성","changelog.filter.completed":"완료","changelog.empty":"변경 이력이 없습니다","changelog.basic.limit.title":"Basic 미리보기에서는 최신 3개 세션만 표시됩니다","changelog.basic.limit.body":"Pro에서 이 플레이스의 전체 변경 이력 타임라인을 확인할 수 있습니다.","changelog.basic.metricLabel":"표시 중인 변경 이력 / 전체","changelog.basic.visible":"표시 중","changelog.basic.total":"전체","changelog.card.active":"활성","changelog.card.active.tooltip":"이 세션은 아직 새 게임 변경을 계속 수집 중입니다.","changelog.card.completed":"완료","changelog.card.completed.tooltip":"이 세션은 종료되어 더 이상 새 변경이 추가되지 않습니다.","changelog.card.bootstrapStatus":"초기화","changelog.card.bootstrapStatus.tooltip":"이 세션에는 초기 동기화 기준 기록만 포함됩니다.","changelog.card.inProgress":"진행 중","changelog.card.noChanges":"아직 변경사항 없음","changelog.card.noChanges.tooltip":"이 세션에서는 아직 추출된 게임 변경이 없습니다.","changelog.card.bootstrapSummary":"초기 동기화 기준 기록","changelog.card.bootstrapSummary.tooltip":"초기 파일 동기화 쓰기 작업은 하나의 기준 기록 행으로 축약됩니다.","changelog.card.sessionIntent":"세션 의도","changelog.card.scripts":"스크립트","changelog.card.scripts.tooltip":"이 세션에서 발생한 스크립트 변경입니다.","changelog.card.instances":"인스턴스","changelog.card.instances.tooltip":"이 세션에서 발생한 인스턴스 생성, 삭제, 이동, 복제 변경입니다.","changelog.card.modified":"수정","changelog.card.created":"생성","changelog.card.deleted":"삭제","changelog.card.moved":"이동","changelog.card.propertiesChanged":"속성 변경","changelog.card.propertiesChanged.tooltip":"이 세션에서 기록된 속성 값 변경입니다.","changelog.card.lightingConfigured":"라이팅 설정됨","changelog.card.lightingConfigured.tooltip":"이 세션에서 라이팅 또는 대기 설정이 변경되었습니다.","changelog.card.terrainConfigured":"터레인 설정됨","changelog.card.terrainConfigured.tooltip":"이 세션에서 터레인 데이터 또는 터레인 설정이 변경되었습니다.","changelog.card.assetsInserted":"에셋 삽입","changelog.card.assetsInserted.tooltip":"이 세션 동안 플레이스에 삽입된 에셋입니다.","changelog.category.script":"스크립트","changelog.category.instance":"인스턴스","changelog.category.property":"속성","changelog.category.lighting":"라이팅","changelog.category.terrain":"터레인","changelog.category.asset":"에셋","changelog.detail.dialogLabel":"변경 이력 상세","changelog.detail.changeSummary":"변경 요약","changelog.detail.changeSummary.tooltip":"이 세션에서 추출된 게임 변경 수를 카테고리별로 묶어서 보여줍니다.","changelog.detail.changeTimeline":"변경 타임라인","changelog.detail.changeTimeline.tooltip":"이 세션에서 추출된 게임 변경을 시간순으로 보여줍니다.","changelog.detail.context.title":"컨텍스트 요약","changelog.detail.context.tooltip":"이 체인지로그 세션에 연결된 구조화된 실행 컨텍스트입니다.","changelog.detail.verification.title":"검증","changelog.detail.verification.tooltip":"이 체인지로그 세션에 연결된 검증 신호입니다.","changelog.detail.verification.label":"결과","changelog.detail.verification.status":"상태","changelog.detail.verification.timestamp":"기록 시각","changelog.detail.beforeAfter":"변경 전후 비교","changelog.detail.filterCategory":"카테고리","changelog.detail.filterCategory.tooltip":"타임라인을 하나의 변경 카테고리만 보이도록 필터링합니다.","changelog.detail.confidence.exact":"정확","changelog.detail.confidence.exact.tooltip":"이 변경은 변경 전과 변경 후 상태가 모두 확인되었습니다.","changelog.detail.confidence.partial":"부분 확인","changelog.detail.confidence.partial.tooltip":"이 변경은 변경 전후 상태 중 일부만 확인되었습니다.","changelog.detail.confidence.afterOnly":"결과만 확인","changelog.detail.confidence.afterOnly.tooltip":"이 변경은 적용 후 결과 상태만 확인되었습니다.","changelog.detail.confidence.intentOnly":"의도만 기록","changelog.detail.confidence.intentOnly.tooltip":"요청된 작업 의도만 기록되었고 결과 상태는 확인되지 않았습니다.","changelog.detail.confidence.unknown":"알 수 없음","changelog.detail.confidence.unknown.tooltip":"사용 가능한 데이터만으로는 이 변경을 신뢰도 있게 분류할 수 없습니다.","changelog.detail.noChanges":"이 카테고리에 변경사항 없음","changelog.detail.backToList":"목록으로 돌아가기","changelog.diff.empty":"비교할 내용 없음","changelog.diff.unified":"통합","changelog.diff.sideBySide":"나란히 비교","changelog.diff.before":"변경 전","changelog.diff.after":"변경 후","sync.targets.title":"연결된 Studio","sync.targets.refresh":"새로고침","sync.targets.loading":"Studio Sync 상태를 불러오는 중…","sync.targets.unavailable":"Studio Sync 상태를 확인할 수 없습니다. 다시 시도해 현재 상태를 확인하세요.","sync.targets.empty":"연결된 Studio가 없습니다. WEPPY Plugin을 연결하면 실시간 Sync 상태가 표시됩니다.","sync.targets.unknownPlace":"알 수 없는 플레이스","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"연결됨","sync.targets.notReported":"아직 보고되지 않음","sync.targets.state.unknown":"확인되지 않음","sync.targets.state.off":"Sync 꺼짐","sync.targets.state.idle":"켜짐 · 실행 대기","sync.targets.state.initializing":"초기화 중","sync.targets.state.syncing":"동기화 중","sync.targets.state.paused":"일시 중지","sync.targets.state.error":"오류","sync.forwardStatus.label":"변경 전송","sync.forwardStatus.tooltip":"Edit 변경 전송 가능 상태입니다. 활성 상태여도 모든 로컬 파일이 최신이라는 뜻은 아닙니다.","sync.forwardStatus.inactive":"꺼짐","sync.forwardStatus.active":"활성","sync.forwardStatus.paused_play":"Play 중 일시 중지","sync.forwardStatus.reconciling":"Edit 변경 확인 중","sync.forwardStatus.blocked":"확인 필요","sync.forwardStatus.unknown":"확인되지 않음","sync.forwardStatus.observedAt":"관측 시각","sync.forwardStatus.reason.review":"Studio Plugin에서 변경을 검토하세요.","sync.forwardStatus.reason.editChanged":"확인 중 Edit 내용이 바뀌었습니다. Studio Plugin에서 Sync를 확인하세요.","sync.forwardStatus.reason.failed":"변경 반영을 확인하지 못했습니다. Studio Plugin에서 Sync를 확인하세요.","sync.forwardStatus.reason.fallback":"Studio Plugin에서 자세한 내용을 확인하세요.","sync.stored.title":"저장된 플레이스","sync.stored.data":"저장된 데이터","sync.stored.ambiguous":"저장 위치 미확정","sync.detail.scope":"Sync 상세 조회 대상","sync.detail.readOnly":"상세 조회는 Studio 라우팅을 변경하지 않습니다.","sync.detail.empty":"연결된 Studio 또는 저장된 플레이스를 선택하세요.","sync.detail.unknown":"이 Studio의 Sync 상태가 아직 보고되지 않았습니다.","sync.detail.error":"Sync 오류가 보고되었습니다. Studio Plugin에서 자세한 내용을 확인하세요.","sync.detail.placeFolder":"Place 폴더","sync.detail.placeFolder.tooltip":"이 Place를 연 Studio들이 공유하는 저장 폴더입니다.","sync.detail.sharedData":"경로·개수·로그는 Place 단위이며 이 Place를 연 Studio들이 공유합니다.","sync.log.shared":"Place 공유 로그","sync.log.unsafe":"이 Place의 저장 위치가 확인되지 않아 로그에 접근할 수 없습니다.","sync.log.unavailable":"Place 로그를 불러오지 못했습니다. 다시 시도하세요.","sync.log.loading":"Place 로그를 불러오는 중…","sync.clear.selectedMessage":"{place}의 공유 Sync 로그를 영구적으로 삭제합니다.","sync.overlay.title":"Roblox Studio 플러그인이 필요합니다","sync.overlay.message":"Roblox Studio 플러그인이 연결되면 동기화 상태를 확인할 수 있습니다.","sync.overlay.check1":"Roblox Studio가 실행 중인가요?","sync.overlay.check2":"WEPPY Plugin이 설치되어 있나요?","sync.status.title":"동기화 상태","sync.status.title.tooltip":"이 플레이스의 Studio와 로컬 파일 동기화 상태입니다.","sync.status.forwardOnly":"단방향만","sync.status.forwardOnly.tooltip":"Basic 티어에서는 Studio에서 로컬로 가는 단방향 동기화만 사용할 수 있습니다.","sync.status.place":"플레이스","sync.status.place.tooltip":"연결된 Roblox 플레이스 이름과 플레이스 ID입니다.","sync.status.path":"경로","sync.status.path.tooltip":"현재 동기화 출력에 사용하는 로컬 파일 시스템 루트입니다.","sync.status.instances":"인스턴스","sync.status.instances.tooltip":"로컬 미러에 추적 중인 동기화된 Roblox 인스턴스 수입니다.","sync.status.scripts":"스크립트","sync.status.scripts.tooltip":"이 플레이스에 대해 현재 인덱싱된 동기화 스크립트 파일 수입니다.","sync.status.state":"상태","sync.status.state.tooltip":"서버가 보고한 현재 동기화 런타임 상태입니다.","sync.policy.title":"Sync 정책","sync.policy.title.tooltip":"연결된 Studio 플러그인이 보고한 실제 Sync 적용 정책입니다.","sync.policy.activation":"활성 상태","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"워크플로","sync.policy.preset.studio_first":"Studio 우선","sync.policy.preset.bidirectional_review":"양방향","sync.policy.preset.local_code_studio_world":"로컬 코드, Studio 월드","sync.policy.preset.custom":"Custom","sync.policy.apply.title":"로컬 변경을 Studio에 적용하는 방식","sync.policy.apply.description":"로컬에서 바꾼 내용을 Studio에 검토 후 적용하는지 자동 적용하는지 보여줍니다.","sync.policy.apply.content":"콘텐츠 변경","sync.policy.apply.content.tooltip":"로컬에서 변경한 Script Source, 속성, Service 속성의 Studio 적용 방식입니다. 인스턴스 생성·삭제·이름 변경·이동은 구조 변경입니다.","sync.policy.apply.structure":"구조 변경","sync.policy.apply.structure.tooltip":"로컬에서 수행한 인스턴스 생성·삭제·이름 변경·이동의 Studio 적용 방식입니다. 로컬 삭제 자동 적용에는 아래의 별도 삭제 설정도 필요합니다.","sync.policy.apply.manual":"검토 후 적용","sync.policy.apply.auto":"자동 적용","sync.policy.scope.disclosure":"Scope별 방향","sync.policy.scope.scriptSource":"스크립트 source","sync.policy.scope.properties":"Properties","sync.policy.scope.structure":"구조","sync.policy.scope.serviceProperties":"Service properties","sync.policy.endpoint.local":"로컬","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → 로컬","sync.policy.direction.forward.tooltip":"Studio 변경을 로컬 파일에 기록합니다.","sync.policy.direction.reverse":"로컬 → Studio","sync.policy.direction.reverse.tooltip":"로컬 파일 변경을 Studio에 적용합니다.","sync.policy.direction.bidirectional":"양방향","sync.policy.direction.bidirectional.tooltip":"Studio와 로컬 파일 양쪽의 변경을 서로 적용합니다.","sync.policy.safety.localDeletes":"로컬 삭제 → Studio 인스턴스 삭제","sync.policy.safety.review":"삭제 전 검토","sync.policy.safety.review.tooltip":"로컬 파일 삭제는 대응하는 Studio 인스턴스를 제거하기 전에 검토를 기다립니다. UI Studio 자동 정리와는 별개 기능입니다.","sync.policy.safety.auto":"Studio에 자동 삭제","sync.policy.safety.auto.tooltip":"로컬 파일을 삭제하면 대응하는 Studio 인스턴스가 자동으로 제거될 수 있습니다. UI Studio 자동 정리와는 별개 기능입니다.","sync.policy.reviewRequired":"Sync를 시작하기 전에 Studio 플러그인에서 이 정책을 검토하세요.","sync.log.title":"동기화 로그","sync.log.empty":"동기화 이벤트 없음","sync.log.type.fullSyncStart":"시작","sync.log.type.fullSyncStart.tooltip":"전체 동기화를 시작했습니다.","sync.log.type.fullSyncProgress":"진행","sync.log.type.fullSyncProgress.tooltip":"전체 동기화 데이터를 저장하고 있습니다.","sync.log.type.fullSyncComplete":"완료","sync.log.type.fullSyncComplete.tooltip":"전체 동기화를 완료했습니다.","sync.log.type.fullSyncFailed":"실패","sync.log.type.fullSyncFailed.tooltip":"전체 동기화를 완료하지 못하고 종료했습니다.","sync.log.type.write":"쓰기","sync.log.type.write.tooltip":"새 동기화 출력이 디스크에 기록되었습니다.","sync.log.type.update":"업데이트","sync.log.type.update.tooltip":"기존 동기화 파일 또는 인스턴스가 갱신되었습니다.","sync.log.type.delete":"삭제","sync.log.type.delete.tooltip":"동기화된 파일 또는 인스턴스가 제거되었습니다.","sync.log.type.idle":"대기","sync.log.type.idle.tooltip":"파일 변경 없이 동기화 이벤트만 기록되었습니다.","sync.upgrade.title":"Pro 동기화 기능 확인하기","sync.upgrade.benefit1":"양방향 동기화 — 파일 편집 시 Studio에 자동 반영","sync.upgrade.benefit2":"역방향 동기화 — 파일 변경을 Studio로 전송","sync.upgrade.benefit3":"전체 동기화 히스토리 및 상세 변경 로그","sync.upgrade.buy":"Pro 확인하기","playtest.status.title":"플레이테스트 상태","playtest.status.title.tooltip":"Studio가 보고한 현재 Roblox 플레이테스트 세션 상태입니다.","playtest.status.mode":"모드","playtest.status.mode.tooltip":"현재 세션에 사용 중인 Studio 플레이테스트 실행 모드입니다.","playtest.status.mode.value.tooltip":"현재 적용 중인 Roblox Studio 플레이테스트 모드의 구체적인 값입니다.","playtest.status.mode.play":"플레이","playtest.status.mode.run":"실행","playtest.status.mode.server":"서버","playtest.status.mode.edit":"편집","playtest.status.place.tooltip":"이 플레이테스트 세션과 연결된 Roblox 플레이스입니다.","playtest.status.state.running":"실행 중","playtest.status.state.running.tooltip":"현재 Roblox 플레이테스트 세션이 실행 중입니다.","playtest.status.state.paused":"일시정지","playtest.status.state.paused.tooltip":"현재 Roblox 플레이테스트 세션이 일시정지 상태입니다.","playtest.status.state.notRunning":"실행 안 함","playtest.status.state.notRunning.tooltip":"현재 실행 중인 Roblox 플레이테스트 세션이 없습니다.","playtest.control.play":"플레이","playtest.control.pause":"일시정지","playtest.control.resume":"재개","playtest.control.stop":"정지","playtest.history.title":"테스트 히스토리","playtest.history.search":"테스트 결과 검색","playtest.history.filter":"결과","playtest.history.filterAll":"전체 결과","playtest.history.filteredCount":"전체 {{total}}개 중 {{visible}}개","playtest.history.title.tooltip":"이 프로젝트에서 기록된 자동 플레이테스트 실행 이력입니다.","playtest.history.empty":"테스트 결과 없음","playtest.history.mode":"모드","playtest.history.mode.tooltip":"이 기록된 테스트 실행에 사용된 플레이테스트 모드입니다.","playtest.history.status.passed":"성공","playtest.history.status.failed":"실패","playtest.history.status.running":"실행 중","playtest.history.status.unknown":"알 수 없음","playtest.history.status.tooltip":"이 자동 플레이테스트 실행의 기록된 결과 상태입니다.","playtest.empty.title":"아직 플레이테스트 결과가 없습니다","playtest.empty.message":"AI Agent가 Playtest를 실행하면 결과가 여기에 표시됩니다.","playtest.empty.message.before":"AI Agent가 Playtest를 실행하면 결과가 여기에 표시됩니다.","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"새 리포트가 필요하면 AI Agent에게 Playtest 실행을 요청하세요.","playtest.report.title":"선택된 리포트","playtest.report.title.tooltip":"현재 선택된 자동 플레이테스트 실행의 상세 출력입니다.","playtest.detail.dialogLabel":"플레이테스트 리포트 상세","playtest.detail.loading":"리포트를 불러오는 중...","playtest.detail.errorTitle":"리포트를 불러올 수 없음","playtest.report.content":"리포트","playtest.report.content.tooltip":"선택된 자동 플레이테스트 실행의 마크다운 요약입니다.","playtest.report.logs":"로그","playtest.report.logs.tooltip":"선택된 자동 플레이테스트 실행에서 수집된 실행 로그입니다.","playtest.context.contextId":"컨텍스트 ID","playtest.context.why":"이 테스트를 실행한 이유","playtest.context.expected":"예상 결과","playtest.context.observed":"관찰 결과","playtest.report.empty":"리포트 내용 없음","playtest.basic.icon":"🎮","playtest.basic.title":"플레이테스트는 Pro 전용 기능입니다","playtest.basic.desc":"WEPPY Dashboard에서 플레이테스트를 제어하고, 자동 테스트를 실행하며, 상세한 테스트 리포트를 확인하세요.","playtest.basic.benefit1":"원클릭 플레이/일시정지/정지 제어","playtest.basic.benefit2":"AI 에이전트를 통한 자동 테스트 실행","playtest.basic.benefit3":"성공/실패 추적이 가능한 테스트 히스토리","playtest.basic.benefit4":"상세한 마크다운 테스트 리포트","playtest.sample.badge":"Pro 플레이테스트 화면 미리보기","playtest.sample.title":"현재 보고 있는 화면은 Pro에서 사용할 수 있는 플레이테스트 화면 예시입니다.","playtest.sample.message":"이 미리보기는 샘플 데이터로 구성되어 있습니다. 실시간 플레이테스트 제어, 히스토리 관리, 실제 리포트 저장은 Pro 구매 후 사용할 수 있습니다.","playtest.sample.clearDisabled":"실제 플레이테스트 기록 삭제는 Pro에서 사용할 수 있습니다.","playtest.sample.place":"아레나 미리보기","playtest.sample.history.name":"샘플 아레나 스모크 테스트","playtest.sample.context.why":"아레나에 스폰한 뒤 첫 구간을 버티고 HUD가 즉시 반응하는지 확인합니다.","playtest.sample.context.expected":"플레이어가 안전하게 스폰되고, 1초 안에 카운트다운 UI가 표시되며, 첫 웨이브가 오류 없이 시작되어야 합니다.","playtest.sample.context.observed":"스폰 보호가 정상 동작했고, HUD가 제때 갱신되었으며, 첫 웨이브가 회귀 없이 완료되었습니다.","playtest.sample.report.markdown":`# 샘플 아레나 스모크 테스트
96
96
 
97
97
  - 스폰 흐름: 통과
98
98
  - HUD 카운트다운: 통과
@@ -110,7 +110,7 @@ This is a sample preview. Live playtests and real reports are available with Pro
110
110
  - Mantén adapterStudioOnly=true para que el source generado compruebe RunService:IsStudio() antes de acceder al código del juego. Usa false solo si pido explícitamente omitir esa comprobación y muestra la advertencia production en el plan.
111
111
  - Conserva el source de desarrollo. Los Adapter administrados por WEPPY con guard pueden permanecer al publicar desde Studio; revisa el código personalizado o sin guard y los objetos de prueba.
112
112
  - Revisa los cambios de código con manage_studio.playtest_adapter_plan y ejecuta manage_studio.playtest_adapter_apply con el token devuelto solo después de revisar el diff y los usos.
113
- - Indica la ubicación del código, los archivos modificados, los perfiles que lo usan, el comportamiento de cleanup y qué debo revisar manualmente antes de publicar.`,"sidebar.overview":"Resumen","sidebar.changelog":"Historial","sidebar.connection":"Conexión","sidebar.sync":"Sincronización","sidebar.playtest":"Prueba","sidebar.tools":"Herramientas","sidebar.settings":"Configuración","sidebar.ui_studio":"UI Studio","sidebar.gate.l1":"Se requiere conexión con el servidor MCP.","sidebar.gate.l2":"Se requiere conexión con el plugin de Roblox Studio.","header.currentProject":"Proyecto actual","header.unknownProject":"Proyecto desconocido","header.projectRoot.label":"Project Root","header.currentProject.loading":"Cargando raíz del proyecto...","header.currentProject.unavailable":"Raíz del proyecto no disponible","header.placeNotConnected":"Place no conectado","header.currentProject.tooltip":"Carpeta de proyecto seleccionada actualmente.","header.currentProject.loading.tooltip":"La información de la raíz del proyecto todavía se está cargando.","header.currentProject.unavailable.tooltip":"La información actual de la raíz del proyecto no está disponible.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Cargando sync root...","header.currentProjectSyncRoot.unavailable":"Sync root no disponible","header.currentProjectSyncRoot.tooltip":"Carpeta sync root actual del proyecto seleccionado.","header.currentProjectSyncRoot.loading.tooltip":"La información de sync root todavía se está cargando.","header.currentProjectSyncRoot.unavailable.tooltip":"La información actual de sync root no está disponible.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"La ruta de archivos de prueba no está disponible.","header.testFiles.tooltip":"Directorio actual de archivos de playtest para el place seleccionado.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Se requiere conexión del plugin","header.places.liveRequired":"Se requiere conexión del plugin para ver el place activo en tiempo real.","header.place.tooltip":"Place de Roblox conectado.","header.placeNotConnected.tooltip":"Place no conectado","placeScope.current.label":"Place actual","placeScope.lastActive.label":"Último place activo","placeScope.selected.label":"Place seleccionado","placeScope.unknownPlace":"Place desconocido","placeScope.live":"En vivo","placeScope.connected":"Studio conectado","placeScope.stored":"Datos guardados","placeScope.connectedGroup":"Studios conectados","placeScope.storedGroup":"Datos guardados","placeScope.stored.note":"Este place no está abierto actualmente en ningún Studio conectado.","placeScope.pluginRequired":"Plugin requerido","placeScope.pluginRequired.note":"Conecta WEPPY Plugin para confirmar el place activo en vivo.","placeScope.noPlace.label":"Alcance del place","placeScope.noPlace.value":"Aún no hay datos de place disponibles","placeScope.noPlace.badge":"Sin place","placeScope.noPlace.note":"Conecta WEPPY Plugin y sincroniza un place para crear datos por place.","placeScope.selected.note":"Solo se muestran datos guardados. El enrutamiento de Studio no cambia.","placeScope.surface.sync":"El estado de sincronización y los registros usan este place.","placeScope.surface.changelog":"Las sesiones del historial de cambios usan este place.","placeScope.surface.playtest":"Los informes de playtest usan este place.","placeScope.surface.uiStudio":"Las capturas de UI y el historial de cambios usan este place.","placeScope.surface.tools":"El historial y las estadísticas de herramientas usan este place.","placeScope.loading":"Cargando alcance del place...","placeScope.unavailable":"Alcance del place no disponible","placeScope.selector.label":"Datos del place","placeScope.shortcuts.trigger":"Enlaces rápidos","placeScope.shortcuts.label":"Enlaces del place","placeScope.shortcuts.settings":"Configuración del place","placeScope.shortcuts.experience":"Administrar experiencia","placeScope.shortcuts.roblox":"Ver en Roblox","placeScope.folder.duplicate":"Carpeta duplicada","placeScope.folder.unresolved":"Carpeta representativa sin confirmar","placeScope.folder.noSyncHistory":"Sin historial de sincronización","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Detalles de carpetas del Place","placeScope.folder.duplicateReason":"La ubicación de guardado actual es {canonicalFolder}. Esta carpeta se respalda después de una sincronización completa correcta.","placeScope.folder.unresolvedReason":"Este Place se puede seguir seleccionando por ID, pero aún no se ha confirmado una carpeta representativa.","placeScope.folder.unknown":"desconocida","placeScope.selector.noneSelectable":"No hay ninguna carpeta de Place seleccionable","header.changeProjectRoot":"Cambiar raíz del proyecto","header.changeProjectRoot.ariaLabel":"Cambiar raíz del proyecto","header.changeProjectRoot.tooltip":"Cambiar la raíz actual del proyecto.","header.changeProjectRoot.disabledTooltip.l0":"Primero se requiere conexión con el servidor MCP para cambiar la raíz del proyecto.","header.changeProjectRoot.disabledTooltip.loading":"La información de la raíz del proyecto todavía se está cargando.","header.changeProjectRoot.disabledTooltip.unavailable":"La información actual de la raíz del proyecto no está disponible.","header.projectRootModal.initial.title":"Cambiar raíz del proyecto","header.projectRootModal.initial.body.connected":"Después de elegir una carpeta de proyecto, MCP cambiará a la nueva raíz del proyecto y el contenido actual de Studio se resincronizará por completo en el nuevo destino <selected project folder>/weppy-project-sync.","header.projectRootModal.initial.body.disconnected":"Después de elegir una carpeta de proyecto, MCP cambiará a la nueva raíz del proyecto y usará <selected project folder>/weppy-project-sync como el próximo destino de sync.","header.projectRootModal.initial.nextSyncRoot":"Nuevo destino de sync después de la selección","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"El sync actual se detiene de inmediato.","header.projectRootModal.initial.warningFreshSync":"El contenido actual de Studio se usará para crear un fresh full sync en el nuevo destino.","header.projectRootModal.initial.warningNoMove":"Las carpetas de sync anteriores no se mueven automáticamente.","header.projectRootModal.initial.warningDeferredSync":"Si Studio no está conectado, el full resync comenzará la próxima vez que se conecte el plugin.","header.projectRootModal.confirm.title":"Confirmar nueva raíz del proyecto","header.projectRootModal.confirm.body":"Revisa la carpeta seleccionada antes de aplicar el cambio.","header.projectRootModal.confirm.projectRoot":"Carpeta de proyecto seleccionada","header.projectRootModal.confirm.syncRoot":"Nuevo destino de sync","header.projectRootModal.confirm.warningNoMove":"Las carpetas de sync existentes no se mueven automáticamente.","header.projectRootModal.pick":"Elegir carpeta","header.projectRootModal.apply":"Aplicar cambio","header.projectRootModal.cancel":"Cancelar","header.projectRootModal.error":"No se pudo cambiar la raíz del proyecto.","status.online":"En línea","status.offline":"Desconectado","status.idle":"Inactivo","status.syncing":"Sincronizando","status.error":"Error","status.initializing":"Inicializando","level.l0.title":"Servidor desconectado","level.l0.message":"WEPPY Dashboard está abierto pero el servidor MCP se detuvo o no responde.","level.l1.title":"Servidor conectado","level.l1.hint":"Verifica: ¿Roblox Studio está abierto? ¿El plugin está instalado?","level.l2.ok":"Studio conectado","tier.basic":"Basic","tier.basic.tooltip":"Nivel Basic con el conjunto estándar de funciones del WEPPY Dashboard.","tier.pro":"Pro","tier.pro.tooltip":"Nivel Pro con el conjunto completo de funciones del WEPPY Dashboard.","tier.mixed":"Mixto","tier.upgrade":"Ver Pro","tier.banner.save":"¡Ahorra tokens de IA con Pro!","tier.tool.query_instances.desc":"Consulta de instancias, exploración de hijos/descendientes, info de clase, búsqueda por nombre y clase. Pro: árbol de archivos, estructura del proyecto, búsqueda por propiedad y etiqueta.","tier.tool.mutate_instances.desc":"Crear, eliminar, clonar, mover, renombrar y pivotar instancias. Pro: creación de árboles, creación/eliminación/duplicación masiva.","tier.tool.manage_properties.desc":"Consultar y establecer propiedades, atributos y etiquetas. Pro: valores calculados y relativos, consulta/establecimiento masivo, modificación masiva de hijos.","tier.tool.manage_scripts.desc":"Leer, escribir, crear, eliminar, editar líneas y buscar en scripts. Pro: reemplazo masivo entre scripts.","tier.tool.manage_ui.desc":"Solo Pro. Crea o mejora menús, HUDs, botones, etiquetas y paneles de imagen con estilo de juego; luego captura pantallas y revisa sugerencias.","tier.tool.manage_ui.action.design_brief":"Planificar la dirección de UI","tier.tool.manage_ui.action.create_tree":"Crear nueva UI","tier.tool.manage_ui.action.update":"Actualizar UI existente","tier.tool.manage_ui.action.delete":"Eliminar UI","tier.tool.manage_ui.action.preview":"Capturar pantalla de UI","tier.tool.manage_ui.action.check":"Revisar sugerencias de mejora","tier.tool.manage_lighting.desc":"Solo Pro. Configuración de iluminación, atmósfera, cielo, propiedades del terreno y hora del día.","tier.tool.manage_selection.desc":"Consultar, establecer y borrar selección. Pro: contexto, detalles, agregar/quitar elementos, monitorear cambios.","tier.tool.manage_camera.desc":"Info de cámara, enfocar por ruta o coordenadas, vista sugerida.","tier.tool.manage_tween.desc":"Solo Pro. Crear, reproducir, pausar y cancelar tweens para animaciones suaves.","tier.tool.manage_audio.desc":"Solo Pro. Reproducir, detener, pausar y reanudar sonidos. Configurar listener de audio.","tier.tool.manage_animation.desc":"Solo Pro. Cargar, reproducir y detener animaciones. Consultar tracks de humanoide/controlador.","tier.tool.manage_physics.desc":"Solo Pro. Registrar grupos de colisión, configurar colisión entre grupos, listar grupos.","tier.tool.manage_effects.desc":"Solo Pro. Emitir partículas, borrar todas, alternar activación de efectos.","tier.tool.manage_terrain.desc":"Solo Pro. Rellenar formas, borrar regiones, reemplazar materiales, gestionar colores, leer/escribir voxels, generación procedural, suavizado.","tier.tool.spatial_query.desc":"Solo Pro. Raycast, buscar suelo, verificar colocación, escaneo de área, buscar zonas planas y puntos de aparición, análisis de caminabilidad, mapa espacial, detección de colisión.","tier.tool.manage_assets.desc":"Solo Pro. Insertar modelos, consultar info de assets, buscar en tienda de creadores, insertar modelos/paquetes gratuitos, exportar.","tier.tool.manage_sync.desc":"Solo Pro. Estado de sincronización, configuración, historial, dirección, lectura/escritura de archivos sincronizados.","tier.tool.workspace_state.desc":"Solo Pro. Sincronización completa, instantánea, cambios recientes, info de viewport, metadatos, gestión de caché.","tier.tool.manage_logs.desc":"Consulta filtrada de registros, sondeo incremental, borrar buffer, consulta de errores recientes.","tier.tool.system_info.desc":"Estado de conexión, verificación de tier. Pro: info de lugar, lista de servicios, configuración de Studio, control de playtest, pruebas automáticas.","tier.tool.manage_studio.desc":"Solo Pro. Alterna ajustes de vista del editor de Studio, como la vista previa de UI, para capturas y QA; cambia ajustes de la sesión, no objetos de UI del juego.","tier.tool.batch_execute.desc":"Solo Pro. Ejecutar múltiples comandos en lote. Procesamiento secuencial con opción de continuar en caso de error.","tier.tool.execute_luau.desc":"Solo Pro. Ejecutar código Luau arbitrario en el sandbox de Roblox Studio.","connection.server.title":"Estado del Bridge","connection.server.version":"Versión","connection.server.version.tooltip":"Versión del entorno de ejecución de WEPPY Bridge.","connection.server.pid":"PID","connection.server.pid.tooltip":"Identificador de proceso del sistema operativo.","connection.server.uptime":"Tiempo activo","connection.server.uptime.tooltip":"Tiempo transcurrido desde que se inició WEPPY Bridge.","connection.server.session":"Sesión","connection.server.session.tooltip":"Identificador de la sesión actual de WEPPY Bridge.","connection.server.exec":"Ejecutable","connection.server.exec.tooltip":"Ruta del ejecutable usado para iniciar WEPPY Bridge.","connection.server.restart":"Reiniciar Bridge","connection.server.restarting":"Reiniciando…","connection.server.restartUnavailable":"Conecta al menos un agente de IA para que su MCP Adapter pueda iniciar el nuevo Bridge.","connection.server.restartTitle":"¿Reiniciar WEPPY Bridge?","connection.server.restartMessage":"Dashboard y los destinos de Studio se desconectarán brevemente. El resultado de los comandos en curso puede quedar sin confirmar, y las sesiones de Playtest activas o los controles pendientes se limpiarán. Un MCP Adapter conectado iniciará automáticamente un nuevo Bridge.","connection.server.restartConfirm":"Reiniciar Bridge","connection.server.restartRequesting":"Solicitando el reinicio de Bridge…","connection.server.restartReconnecting":"Reconectando con WEPPY Bridge…","connection.server.restartWaiting":"Dashboard y Studio volverán a conectarse automáticamente cuando el nuevo Bridge esté listo.","connection.server.restartSucceeded":"WEPPY Bridge se reinició","connection.server.restartFailed":"No se pudo reiniciar WEPPY Bridge","connection.server.restartTimeout":"El nuevo Bridge no estuvo listo a tiempo. Comprueba la conexión MCP en tu herramienta de IA y vuelve a intentarlo.","connection.server.restartStale":"Bridge cambió antes de aceptar la solicitud. Actualiza el estado y vuelve a intentarlo.","connection.reconnect":"Reconectar","connection.checkSettings":"Verificar configuración","connection.agents.title":"Agentes IA","connection.agents.name":"Agente","connection.agents.version":"Versión","connection.agents.version.tooltip":"Versión del paquete MCP Adapter para esta sesión del agente.","connection.agents.cwd":"Directorio","connection.agents.cwd.tooltip":"Directorio de trabajo actual del agente de IA conectado.","connection.agents.projectRoot":"Raíz del proyecto","connection.agents.projectRoot.tooltip":"Ruta del proyecto autoritativa para la propiedad de sincronización","connection.agents.projectRoot.unresolved":"Sin resolver","connection.agents.connected":"Conectado","connection.agents.unknown":"Desconocido","connection.agents.none":"Sin agentes conectados","connection.plugins.title":"Plugins","connection.plugins.place":"Place","connection.plugins.clientId":"Connection ID","connection.plugins.clientId.tooltip":"Full connection ID for diagnostics","connection.plugins.lastSeen":"Última vez","connection.plugins.lastSeen.tooltip":"Heartbeat más reciente recibido desde el plugin.","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Versión instalada del plugin informada por Studio.","connection.plugins.none":"Sin plugins conectados","connection.targets.title":"Studio Targets","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"Short name for this Roblox Studio window","connection.targets.place":"Place","connection.targets.placeId":"Place ID","connection.targets.placeId.tooltip":"Roblox Place ID for this Studio window","connection.targets.clientId":"Connection ID","connection.targets.clientId.tooltip":"Full connection ID for diagnostics. Usually use Studio ID instead.","connection.targets.session":"Session","connection.targets.session.tooltip":"Command channel state for this Studio target","connection.targets.lastUsed":"Last Used","connection.targets.lastUsed.tooltip":"Most recent plugin-route request routed to this Studio target","connection.targets.lastSeen":"Last Seen","connection.targets.lastSeen.tooltip":"Most recent heartbeat received from this Studio target","connection.targets.version":"Version","connection.targets.version.tooltip":"Installed plugin version reported by Studio","connection.targets.routing":"Routing","connection.targets.routing.tooltip":"Default Studio window when the agent does not name one","connection.targets.inFlight":"In Flight","connection.targets.inFlight.tooltip":"Active command request currently routed to this Studio target","connection.targets.studioState":"Studio State","connection.targets.studioState.tooltip":"Current edit/play runtime state reported by this Studio window","connection.targets.studioState.edit":"Edit","connection.targets.studioState.running":"Running","connection.targets.studioState.paused":"Paused","connection.targets.studioState.unknown":"Unknown","connection.targets.studioState.source.thread":"WEPPY play command","connection.targets.studioState.source.pluginConnection":"Conexión Play/Test de Studio","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"Unknown source","connection.targets.studioState.updatedUnknown":"not reported","connection.targets.copyPlaceId":"Copy Place ID","connection.targets.copyTargetAlias":"Copy Studio ID","connection.targets.copyClientId":"Copy Connection ID","connection.targets.copied":"Copied value","connection.targets.copyFailed":"Failed to copy value","connection.targets.none":"No Studio targets connected. Open Roblox Studio and connect WEPPY Plugin.","connection.targets.help":"When multiple Studio windows are connected, tell the agent to use Studio ID studio-1 to choose one.","connection.topology.ariaLabel":"Connection topology","connection.topology.title":"Connection topology","connection.topology.description":"Cada agente de IA se conecta mediante su propio MCP Adapter a un WEPPY Bridge compartido, que mantiene la conexión con Roblox Studio.","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"Active","connection.topology.stale":"Stale","connection.topology.unknown":"Unknown","connection.topology.lastContact":"Último contacto","connection.topology.noContact":"Sin contacto reciente","connection.topology.versionUnknown":"Version unknown","connection.topology.placeUnknown":"Place unknown","connection.topology.moreAgents":"+{count} more agents","connection.topology.moreStudios":"+{count} more studios","connection.topology.allAgentsVisible":"All agents visible","connection.topology.allStudiosVisible":"All studios visible","connection.topology.showAll":"Show all","connection.topology.showLess":"Show less","connection.topology.showAllAgents":"Show all AI agents","connection.topology.showAllStudios":"Show all Studio targets","connection.topology.showLessAgents":"Show less AI agents","connection.topology.showLessStudios":"Show less Studio targets","connection.routing.updateFailed":"Failed to update routing target","connection.log.title":"Registro de conexión","connection.log.empty":"Sin eventos","connection.time.secondsAgo":"s atrás","connection.time.minutesAgo":"min atrás","connection.time.hoursAgo":"h atrás","common.loading":"Cargando...","common.retry":"Reintentar","common.reconnecting":"Reconectando...","common.expand":"Expandir","common.collapse":"Contraer","tools.tab.history":"Historial","tools.tab.statistics":"Estadísticas","tools.tab.failures":"Fallos","tools.col.time":"Hora","tools.col.time.tooltip":"Momento en que se registró la ejecución de la herramienta.","tools.col.toolAction":"Herramienta.Acción","tools.col.toolAction.tooltip":"Nombre de la herramienta y acción que se ejecutó.","tools.col.duration":"Duración","tools.col.duration.tooltip":"Cuánto tardó la herramienta en finalizar.","tools.col.status":"Estado","tools.col.status.tooltip":"Resultado de la ejecución registrada.","tools.col.tier":"Nivel","tools.col.tier.tooltip":"Nivel de licencia requerido para la herramienta o acción.","tools.col.tierStats.tooltip":"Resumen Basic, Pro o Mixed para esta fila de estadísticas de herramientas.","tools.col.tool":"Herramienta","tools.col.tool.tooltip":"Nombre de la herramienta consolidada en la tabla de estadísticas.","tools.col.calls":"Llamadas","tools.col.calls.tooltip":"Número total de llamadas registradas para esta herramienta.","tools.col.ok":"OK","tools.col.ok.tooltip":"Número de ejecuciones exitosas directas.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Número de ejecuciones que tuvieron éxito mediante fallback.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Número de ejecuciones bloqueadas sin fallback.","tools.col.warn":"WARN","tools.col.warn.tooltip":"Número de fallos esperados causados por la entrada, el estado del proyecto, la política de Roblox o el código del usuario.","tools.col.err":"FALLIDO","tools.col.err.tooltip":"Número de ejecuciones que terminaron en fallo.","tools.col.okRate":"% Éxito","tools.col.okRate.tooltip":"Porcentaje de llamadas que terminaron correctamente.","tools.col.avgTime":"Tiempo promedio","tools.col.avgTime.tooltip":"Tiempo promedio de ejecución entre las llamadas registradas.","tools.col.error":"Error","tools.filter.tool":"Herramienta","tools.filter.all":"Todos","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Esta entrada usó una herramienta o acción exclusiva de Pro.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"La acción Pro solicitada tuvo éxito mediante un fallback Basic.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"La acción Pro solicitada fue bloqueada y no se ejecutó ningún fallback.","tools.badge.warn":"WARN","tools.badge.warn.tooltip":"La llamada falló por un problema esperado de entrada, proyecto, política o código de usuario.","tools.badge.err":"FALLIDO","tools.badge.err.tooltip":"La ejecución de la herramienta terminó en fallo.","tools.status.ok":"OK","tools.status.ok.tooltip":"La ejecución de la herramienta finalizó correctamente.","tools.tier.mixed.tooltip":"Esta herramienta incluye acciones Basic y Pro.","tools.detail.params":"Parámetros","tools.detail.params.tooltip":"Parámetros de entrada enviados en esta ejecución.","tools.detail.result":"Resultado","tools.detail.result.tooltip":"Carga útil devuelta por esta ejecución.","tools.detail.requestedCommand":"Comando enviado","tools.detail.executedCommand":"Comando ejecutado","tools.detail.alternatives":"Alternativas","tools.detail.blockedMessage":"Motivo del bloqueo","tools.detail.noFallback":"Sin fallback","tools.detail.noFallback.value":"No se ejecutó ningún fallback.","tools.detail.warningMessage":"Mensaje de advertencia","tools.detail.errorMessage":"Mensaje de error","tools.detail.open":"Detalles","tools.detail.openLabel":"Ver detalles de {command}","tools.detail.dialogLabel":"Detalle de ejecución de herramienta","tools.detail.title":"Ejecución de herramienta","tools.history.routing":"Routing","tools.history.routing.mode":"Mode","tools.history.routing.requested":"Requested","tools.history.routing.actual":"Actual","tools.history.routing.none":"No Studio target named","tools.clear.history.title":"¿Borrar historial?","tools.clear.history.message":"Esto elimina permanentemente el historial de herramientas del place actual.","tools.clear.statistics.title":"¿Borrar estadísticas?","tools.clear.statistics.message":"Esto restablece permanentemente las estadísticas de herramientas del place actual.","tools.detail.error":"Error","tools.page.prev":"Anterior","tools.page.prev.tooltip":"Ir a la página anterior del historial de herramientas.","tools.page.next":"Siguiente","tools.page.next.tooltip":"Ir a la página siguiente del historial de herramientas.","tools.empty.history":"Sin entradas de historial","tools.empty.stats":"Sin estadísticas","tools.empty.failures":"Sin fallos","tools.summary.total":"Total","tools.summary.calls":"llamadas","tools.summary.sessions":"Sesiones","settings.license.title":"Licencia","settings.license.title.tooltip":"Estado actual de la licencia y nivel de suscripción.","settings.license.status":"Estado","settings.license.status.tooltip":"Estado actual de activación de la licencia.","settings.license.tier":"Nivel","settings.license.tier.tooltip":"Nivel de suscripción actual para las funciones disponibles del WEPPY Dashboard.","settings.license.key":"Clave","settings.license.key.tooltip":"Clave de licencia enmascarada cargada actualmente por el servidor.","settings.license.keyValue.tooltip":"Clave de licencia enmascarada cargada actualmente por el servidor.","settings.license.provider":"Proveedor","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"Proveedor de licencia usado para validar esta clave.","settings.license.providerValue.tooltip":"Proveedor de licencia usado para validar esta clave.","settings.license.active":"Activa","settings.license.active.tooltip":"Estado actual de activación de la licencia.","settings.license.status.activeCancelPending.tooltip":"La cancelación está pendiente, pero el acceso Pro seguirá activo hasta que termine el período de facturación actual.","settings.license.inactive":"Inactiva","settings.license.inactive.tooltip":"Estado actual de activación de la licencia.","settings.license.expired":"Expirada","settings.license.expired.tooltip":"Estado actual de activación de la licencia.","settings.license.unavailable":"Información de licencia no disponible","settings.license.detail.cancelPending":"La cancelación está programada. El acceso Pro seguirá activo hasta que termine el período de facturación actual.","settings.license.reset":"Restablecer licencia","settings.readOnly":"Solo lectura","settings.readOnly.tooltip":"Esta sección muestra valores que no se pueden editar desde el WEPPY Dashboard.","settings.unavailable":"Configuración no disponible","settings.general.title":"Configuración general","settings.general.title.tooltip":"Ajustes calientes que se aplican inmediatamente al cambiarse.","settings.general.liveApply":"Aplicar en vivo","settings.general.liveApply.tooltip":"Los cambios en esta sección se aplican al instante sin un botón de guardar aparte.","settings.general.applied":"Aplicado","settings.general.logLevel":"Nivel de log","settings.general.logLevel.tooltip":"Define cuánto detalle escribe el WEPPY Dashboard en sus registros.","settings.general.localHistory":"Registro de historial","settings.general.localHistory.tooltip":"Guarda el historial local de ejecución de herramientas para las vistas de historial del WEPPY Dashboard.","settings.general.localStatistics":"Recopilación de estadísticas","settings.general.localStatistics.tooltip":"Agrega estadísticas locales de uso para los informes del WEPPY Dashboard.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WEPPY Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"Tiempo de espera","settings.general.requestTimeout.tooltip":"Tiempo máximo que el WEPPY Dashboard espera una acción antes de marcarla como fallida.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"El tiempo de espera de la acción se mide en milisegundos.","settings.cold.title":"Entorno del servidor","settings.cold.title.tooltip":"Valores de entorno del servidor de solo lectura cargados al iniciar.","settings.cold.httpPort.tooltip":"Número de puerto usado por el servidor HTTP del WEPPY Dashboard MCP.","settings.cold.httpHost.tooltip":"Interfaz de host a la que se enlaza el servidor HTTP del WEPPY Dashboard MCP.","settings.cold.hint":"Configure mediante variables de entorno.","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"Elige cómo se comporta WEPPY Dashboard cuando se inicia el servidor MCP.","settings.dashboard.nextStartBadge":"Próximo inicio","settings.dashboard.autoOpen.label":"Abrir Dashboard al iniciar WEPPY","settings.dashboard.autoOpen.description":"Abre automáticamente este Dashboard después de iniciar el servidor MCP.","settings.dashboard.autoOpen.nextStart":"Se aplica la próxima vez que se inicie el servidor MCP.","settings.dashboard.settingsFile.label":"Archivo de configuración","settings.dashboard.agentExample.label":"Pídeselo a tu Agent","settings.dashboard.agentExample.prompt":"“Desactiva la apertura automática del Dashboard”.","settings.dashboard.autoOpen.saving":"Guardando…","settings.dashboard.autoOpen.saved":"Guardado para el próximo inicio del servidor.","settings.dashboard.autoOpen.error":"No se pudo guardar. Se restauró la opción anterior.","dashboardAutoOpenGuide.eyebrow":"Preferencia del Dashboard","dashboardAutoOpenGuide.title":"Elige cómo se abre WEPPY Dashboard","dashboardAutoOpenGuide.currentOn":"La apertura automática está activada. Este Dashboard se abre después de iniciar el servidor MCP.","dashboardAutoOpenGuide.currentOff":"La apertura automática está desactivada. WEPPY no abrirá una pestaña nueva del Dashboard al iniciar el servidor MCP.","dashboardAutoOpenGuide.changeAnytime":"Puedes cambiarlo cuando quieras en Settings.","dashboardAutoOpenGuide.agentHint":"También puedes pedirle a tu Agent: “Desactiva la apertura automática del Dashboard”.","dashboardAutoOpenGuide.statusOn":"Apertura automática activada","dashboardAutoOpenGuide.statusOff":"Apertura automática desactivada","dashboardAutoOpenGuide.keep":"Mantener opción actual","dashboardAutoOpenGuide.turnOff":"Desactivar apertura automática","dashboardAutoOpenGuide.openSettings":"Abrir Settings","dashboardAutoOpenGuide.close":"Cerrar guía de apertura automática","dashboardAutoOpenGuide.saving":"Guardando…","dashboardAutoOpenGuide.error":"No se pudo guardar tu elección. Inténtalo de nuevo.","settings.language.title":"Idioma","settings.language.title.tooltip":"Elige cómo se localiza el texto de la interfaz del WEPPY Dashboard.","settings.language.dashboard":"Idioma del WEPPY Dashboard","settings.language.dashboard.tooltip":"Sobrescribe el idioma del WEPPY Dashboard o usa el idioma del sistema cuando está en Automático.","settings.language.auto":"Automático","overview.l0.title":"Servidor MCP desconectado","overview.l0.message":"El servidor MCP no responde. El WEPPY Dashboard intentará reconectarse automáticamente.","overview.l0.step1":"Verifique que el proceso del servidor MCP esté ejecutándose","overview.l0.step2":"Reinicie el comando del servidor MCP si es necesario","overview.l0.reconnecting":"Reconectando automáticamente cada 3s...","overview.l0.reconnectBtn":"Reconectar","overview.l0.settingsBtn":"Verificar configuración","overview.l1.pluginGuide":"El plugin de Roblox Studio no está conectado","overview.l1.check1":"¿Roblox Studio está abierto?","overview.l1.check2":"¿El WEPPY Plugin está instalado?","overview.l1.feedHint":"Los cambios aparecerán aquí cuando el plugin se conecte","overview.metric.server":"Servidor","overview.metric.server.tooltip":"Estado de ejecución y proceso del servidor MCP.","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Estado de conexión y versión del plugin de Roblox Studio.","overview.metric.agent":"Agente","overview.metric.agent.tooltip":"Agentes de IA conectados y su estado actual.","overview.metric.agent.instancesUnit":"instancias","overview.metric.sync":"Sincronización","overview.metric.sync.tooltip":"Actividad actual de sincronización entre Studio y archivos locales.","overview.metric.noAgent":"Sin agente","overview.meta.version":"Versión","overview.meta.version.tooltip":"Versión instalada del servidor MCP.","overview.meta.session":"Sesión","overview.meta.session.tooltip":"Identificador de la sesión MCP actual.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Identificador de proceso del sistema operativo.","overview.meta.uptime":"Tiempo activo","overview.meta.uptime.tooltip":"Tiempo transcurrido desde que se inició el servidor MCP.","overview.feed.title":"Cambios recientes del juego","overview.feed.empty":"Sin cambios recientes","overview.changelog.title":"Resumen de cambios de sesión","overview.changelog.entries":"Total","overview.changelog.scripts":"scripts","overview.changelog.instances":"instancias","overview.changelog.properties":"propiedades","overview.changelog.assets":"assets","overview.tier.title":"Uso por nivel","changelog.subtitle":"Historial de cambios del juego","changelog.filter.all":"Todos","changelog.filter.active":"Activo","changelog.filter.completed":"Completado","changelog.empty":"Sin entradas de historial","changelog.basic.limit.title":"La vista previa Basic muestra solo las 3 sesiones más recientes","changelog.basic.limit.body":"Actualiza a Pro para explorar la línea completa del historial de cambios de este place.","changelog.basic.metricLabel":"Historial visible / Total","changelog.basic.visible":"visibles","changelog.basic.total":"total","changelog.card.active":"Activo","changelog.card.active.tooltip":"Esta sesión todavía sigue recibiendo nuevos cambios del juego.","changelog.card.completed":"Completado","changelog.card.completed.tooltip":"Esta sesión terminó y ya no se esperan más cambios.","changelog.card.bootstrapStatus":"Inicializado","changelog.card.bootstrapStatus.tooltip":"Esta sesión solo contiene la instantánea inicial de bootstrap de sincronización.","changelog.card.inProgress":"en progreso","changelog.card.noChanges":"Sin cambios aún","changelog.card.noChanges.tooltip":"Todavía no se han extraído cambios del juego para esta sesión.","changelog.card.bootstrapSummary":"Instantánea de sincronización inicial","changelog.card.bootstrapSummary.tooltip":"Las escrituras de la sincronización inicial de archivos se agrupan en una sola fila de bootstrap.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"scripts","changelog.card.scripts.tooltip":"Cambios de scripts realizados en esta sesión.","changelog.card.instances":"instancias","changelog.card.instances.tooltip":"Cambios de creación, eliminación, movimiento o clonado de instancias en esta sesión.","changelog.card.modified":"modificado","changelog.card.created":"creado","changelog.card.deleted":"eliminado","changelog.card.moved":"movido","changelog.card.propertiesChanged":"propiedades cambiadas","changelog.card.propertiesChanged.tooltip":"Cambios de valores de propiedades registrados para esta sesión.","changelog.card.lightingConfigured":"Iluminación configurada","changelog.card.lightingConfigured.tooltip":"La iluminación o la atmósfera cambiaron en esta sesión.","changelog.card.terrainConfigured":"Terreno configurado","changelog.card.terrainConfigured.tooltip":"Los datos o la configuración del terreno cambiaron en esta sesión.","changelog.card.assetsInserted":"assets insertados","changelog.card.assetsInserted.tooltip":"Assets insertados en el place durante esta sesión.","changelog.category.script":"Scripts","changelog.category.instance":"Instancias","changelog.category.property":"Propiedades","changelog.category.lighting":"Iluminación","changelog.category.terrain":"Terreno","changelog.category.asset":"Assets","changelog.detail.dialogLabel":"Detalles del registro de cambios","changelog.detail.changeSummary":"Resumen de cambios","changelog.detail.changeSummary.tooltip":"Cantidad de cambios del juego extraídos agrupados por categoría para esta sesión.","changelog.detail.changeTimeline":"Línea de tiempo","changelog.detail.changeTimeline.tooltip":"Lista cronológica de cambios del juego extraídos para esta sesión.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Antes y después","changelog.detail.filterCategory":"Categoría","changelog.detail.filterCategory.tooltip":"Filtra la línea de tiempo a una sola categoría de cambio.","changelog.detail.confidence.exact":"Exacto","changelog.detail.confidence.exact.tooltip":"Se confirmaron tanto el estado anterior como el posterior para este cambio.","changelog.detail.confidence.partial":"Parcial","changelog.detail.confidence.partial.tooltip":"Solo se pudo confirmar parte del estado anterior y posterior para este cambio.","changelog.detail.confidence.afterOnly":"Solo después","changelog.detail.confidence.afterOnly.tooltip":"Solo se pudo confirmar el estado resultante después del cambio.","changelog.detail.confidence.intentOnly":"Solo intención","changelog.detail.confidence.intentOnly.tooltip":"Solo se registró la acción solicitada, no el estado resultante.","changelog.detail.confidence.unknown":"Desconocido","changelog.detail.confidence.unknown.tooltip":"No fue posible clasificar este cambio con confianza usando los datos disponibles.","changelog.detail.noChanges":"Sin cambios en esta categoría","changelog.detail.backToList":"Volver a la lista","changelog.diff.empty":"Sin diferencias disponibles","changelog.diff.unified":"Unificado","changelog.diff.sideBySide":"Lado a lado","changelog.diff.before":"Antes","changelog.diff.after":"Después","sync.targets.title":"Studios conectados","sync.targets.refresh":"Actualizar","sync.targets.loading":"Cargando estado de Sync de Studio…","sync.targets.unavailable":"El estado de Sync de Studio no está disponible. Vuelve a intentarlo.","sync.targets.empty":"No hay Studios conectados. Conecta WEPPY Plugin para ver Sync en vivo.","sync.targets.unknownPlace":"Place desconocido","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"Conectado","sync.targets.notReported":"Aún no informado","sync.targets.state.unknown":"Desconocido","sync.targets.state.off":"Sync desactivado","sync.targets.state.idle":"Sync activado · en espera","sync.targets.state.initializing":"Inicializando","sync.targets.state.syncing":"Sincronizando","sync.targets.state.paused":"Pausado","sync.targets.state.error":"Error","sync.forwardStatus.label":"Envío de cambios","sync.forwardStatus.tooltip":"Indica si se pueden enviar cambios de Edit. Activado no confirma que todos los archivos locales estén actualizados.","sync.forwardStatus.inactive":"Desactivado","sync.forwardStatus.active":"Activado","sync.forwardStatus.paused_play":"Pausado durante Play","sync.forwardStatus.reconciling":"Comprobando cambios de Edit","sync.forwardStatus.blocked":"Requiere atención","sync.forwardStatus.unknown":"Desconocido","sync.forwardStatus.observedAt":"Observado","sync.forwardStatus.reason.review":"Revisa los cambios en Studio Plugin.","sync.forwardStatus.reason.editChanged":"Edit cambió durante la comprobación. Revisa Sync en Studio Plugin.","sync.forwardStatus.reason.failed":"No se pudieron confirmar los cambios. Revisa Sync en Studio Plugin.","sync.forwardStatus.reason.fallback":"Consulta Studio Plugin para más detalles.","sync.stored.title":"Places guardados","sync.stored.data":"Datos guardados","sync.stored.ambiguous":"Ubicación de almacenamiento sin confirmar","sync.detail.scope":"Viendo detalles de Sync de","sync.detail.readOnly":"Ver detalles no cambia el enrutamiento de Studio.","sync.detail.empty":"Selecciona un Studio conectado o un Place guardado.","sync.detail.unknown":"Este Studio aún no ha informado su estado de Sync.","sync.detail.error":"Sync informó un error. Consulta Studio Plugin para más detalles.","sync.detail.placeFolder":"Carpeta de Place","sync.detail.placeFolder.tooltip":"Carpeta compartida por los Studios que abren este Place.","sync.detail.sharedData":"La ruta, los recuentos y el registro pertenecen al Place y se comparten entre sus Studios.","sync.log.shared":"Registro compartido de Place","sync.log.unsafe":"La ubicación de almacenamiento no está confirmada para acceder al registro.","sync.log.unavailable":"No se pudo cargar el registro del Place. Vuelve a intentarlo.","sync.log.loading":"Cargando registro de Place…","sync.clear.selectedMessage":"Esto elimina permanentemente el registro de Sync compartido de {place}.","sync.overlay.title":"Se requiere el plugin de Roblox Studio","sync.overlay.message":"El estado de sincronización estará disponible cuando el plugin de Roblox Studio se conecte.","sync.overlay.check1":"¿Roblox Studio está abierto?","sync.overlay.check2":"¿El WEPPY Plugin está instalado?","sync.status.title":"Estado de sincronización","sync.status.title.tooltip":"Estado actual de sincronización entre Studio y archivos locales para este place.","sync.status.forwardOnly":"Solo avance","sync.status.forwardOnly.tooltip":"La suscripción Basic solo permite sincronización directa de Studio a local.","sync.status.place":"Place","sync.status.place.tooltip":"Nombre e ID del place de Roblox conectado.","sync.status.path":"Ruta","sync.status.path.tooltip":"Raíz del sistema de archivos local usada actualmente para la sincronización.","sync.status.instances":"Instancias","sync.status.instances.tooltip":"Cantidad total de instancias de Roblox sincronizadas en el espejo local.","sync.status.scripts":"Scripts","sync.status.scripts.tooltip":"Cantidad total de scripts sincronizados e indexados para este place.","sync.status.state":"Estado","sync.status.state.tooltip":"Estado de ejecución de sincronización reportado por el servidor.","sync.policy.title":"Política de Sync","sync.policy.title.tooltip":"Política de Sync efectiva informada por el plugin de Studio conectado.","sync.policy.activation":"Activación","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"Flujo de trabajo","sync.policy.preset.studio_first":"Studio primero","sync.policy.preset.bidirectional_review":"Bidireccional","sync.policy.preset.local_code_studio_world":"Código local, mundo en Studio","sync.policy.preset.custom":"Personalizado","sync.policy.apply.title":"Cómo se aplican a Studio los cambios locales","sync.policy.apply.description":"Muestra si los cambios locales se revisan primero o se aplican automáticamente a Studio.","sync.policy.apply.content":"Cambios de contenido","sync.policy.apply.content.tooltip":"Cambios locales en código Script, propiedades y propiedades de servicios. Crear, eliminar, renombrar y mover son cambios de estructura.","sync.policy.apply.structure":"Cambios de estructura","sync.policy.apply.structure.tooltip":"Creación, eliminación, renombrado y movimiento locales de instancias. La eliminación local automática también requiere la opción de borrado separada de abajo.","sync.policy.apply.manual":"Revisar primero","sync.policy.apply.auto":"Aplicación automática","sync.policy.scope.disclosure":"Direcciones por ámbito","sync.policy.scope.scriptSource":"Código de scripts","sync.policy.scope.properties":"Propiedades","sync.policy.scope.structure":"Estructura","sync.policy.scope.serviceProperties":"Propiedades de servicios","sync.policy.endpoint.local":"Local","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → Local","sync.policy.direction.forward.tooltip":"Los cambios de Studio se escriben en los archivos locales.","sync.policy.direction.reverse":"Local → Studio","sync.policy.direction.reverse.tooltip":"Los cambios de archivos locales se aplican en Studio.","sync.policy.direction.bidirectional":"Ambas direcciones","sync.policy.direction.bidirectional.tooltip":"Los cambios pueden pasar de Studio a los archivos locales y de los archivos locales a Studio.","sync.policy.safety.localDeletes":"Eliminación local → eliminar instancia de Studio","sync.policy.safety.review":"Revisar antes de borrar","sync.policy.safety.review.tooltip":"Los borrados de archivos locales esperan revisión antes de eliminar las instancias correspondientes de Studio. Es independiente de la limpieza automática de UI Studio.","sync.policy.safety.auto":"Borrado automático en Studio","sync.policy.safety.auto.tooltip":"Borrar archivos locales puede eliminar automáticamente las instancias correspondientes de Studio. Es independiente de la limpieza automática de UI Studio.","sync.policy.reviewRequired":"Revisa esta política en el plugin de Studio antes de iniciar Sync.","sync.log.title":"Registro de sincronización","sync.log.empty":"Sin eventos de sincronización","sync.log.type.write":"ESCRIBIR","sync.log.type.write.tooltip":"Se escribió una nueva salida sincronizada en el disco.","sync.log.type.update":"ACTUALIZAR","sync.log.type.update.tooltip":"Se actualizó un archivo o una instancia ya sincronizada.","sync.log.type.delete":"ELIMINAR","sync.log.type.delete.tooltip":"Se eliminó un archivo o una instancia sincronizada.","sync.log.type.idle":"INACTIVO","sync.log.type.idle.tooltip":"Se registró un evento de sincronización sin modificar archivos.","sync.upgrade.title":"Explora la sincronización completa con Pro","sync.upgrade.benefit1":"Sincronización bidireccional — edita archivos, se aplica automáticamente a Studio","sync.upgrade.benefit2":"Sincronización inversa — envía cambios de archivos a Studio","sync.upgrade.benefit3":"Historial completo de sincronización y registro detallado de cambios","sync.upgrade.buy":"Ver Pro","playtest.status.title":"Estado de prueba","playtest.status.title.tooltip":"Estado actual de la sesión de playtest de Roblox informado por Studio.","playtest.status.mode":"Modo","playtest.status.mode.tooltip":"Modo de inicio de playtest de Studio usado por la sesión actual.","playtest.status.mode.value.tooltip":"Modo específico de playtest de Roblox Studio que se está usando ahora.","playtest.status.mode.play":"Jugar","playtest.status.mode.run":"Ejecutar","playtest.status.mode.server":"Servidor","playtest.status.mode.edit":"Editar","playtest.status.place.tooltip":"Place de Roblox asociado actualmente con esta sesión de playtest.","playtest.status.state.running":"En ejecución","playtest.status.state.running.tooltip":"Actualmente hay una sesión de playtest de Roblox en ejecución.","playtest.status.state.paused":"Pausado","playtest.status.state.paused.tooltip":"La sesión actual de playtest de Roblox está en pausa.","playtest.status.state.notRunning":"Sin ejecutar","playtest.status.state.notRunning.tooltip":"Actualmente no hay ninguna sesión de playtest de Roblox en ejecución.","playtest.control.play":"Jugar","playtest.control.pause":"Pausar","playtest.control.resume":"Reanudar","playtest.control.stop":"Detener","playtest.history.title":"Historial de pruebas","playtest.history.search":"Buscar resultados de prueba","playtest.history.filter":"Resultado","playtest.history.filterAll":"Todos los resultados","playtest.history.filteredCount":"{{visible}} de {{total}} resultados","playtest.history.title.tooltip":"Ejecuciones automatizadas de playtest registradas para este proyecto.","playtest.history.empty":"Sin resultados de prueba","playtest.history.mode":"Modo","playtest.history.mode.tooltip":"Modo de playtest usado en esta ejecución de prueba registrada.","playtest.history.status.passed":"Aprobado","playtest.history.status.failed":"Fallido","playtest.history.status.running":"En ejecución","playtest.history.status.unknown":"Desconocido","playtest.history.status.tooltip":"Estado de resultado registrado para esta ejecución automatizada de playtest.","playtest.empty.title":"Sin resultados de prueba aún","playtest.empty.message":"Los resultados aparecerán aquí después de que el agente de IA ejecute un Playtest.","playtest.empty.message.before":"Los resultados aparecerán aquí después de que el agente de IA ejecute un Playtest.","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"Ask the AI Agent to run a Playtest when you need a fresh report.","playtest.report.title":"Reporte seleccionado","playtest.report.title.tooltip":"Salida detallada de la ejecución automatizada de playtest seleccionada actualmente.","playtest.detail.dialogLabel":"Detalle del informe de playtest","playtest.detail.loading":"Cargando informe...","playtest.detail.errorTitle":"Informe no disponible","playtest.report.content":"Reporte","playtest.report.content.tooltip":"Resumen en Markdown de la ejecución automatizada de playtest seleccionada.","playtest.report.logs":"Registros","playtest.report.logs.tooltip":"Registros de ejecución capturados para la ejecución automatizada de playtest seleccionada.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"Sin contenido de reporte","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest es una función exclusiva de Pro","playtest.basic.desc":"Controla las pruebas desde el WEPPY Dashboard, ejecuta pruebas automatizadas y visualiza reportes detallados.","playtest.basic.benefit1":"Controles de jugar/pausar/detener con un clic","playtest.basic.benefit2":"Ejecución de pruebas automatizadas vía agente IA","playtest.basic.benefit3":"Historial de pruebas con seguimiento de éxito/fallo","playtest.basic.benefit4":"Reportes de prueba detallados en markdown","playtest.sample.badge":"Vista previa de la pantalla Pro de playtest","playtest.sample.title":"Estás viendo una vista previa de la pantalla de playtest disponible después de actualizar a Pro.","playtest.sample.message":"Esta vista previa usa datos de ejemplo. El control de playtest en vivo, la gestión del historial y los reportes reales se desbloquean con Pro.","playtest.sample.clearDisabled":"Actualiza a Pro para borrar el historial real de playtest.","playtest.sample.place":"Vista previa de Arena","playtest.sample.history.name":"Prueba de humo de Arena de ejemplo","playtest.sample.context.why":"Entrar a la arena, sobrevivir a la apertura y verificar que el HUD responda de inmediato.","playtest.sample.context.expected":"El jugador aparece de forma segura, la cuenta regresiva del HUD aparece en un segundo y la primera ola inicia sin errores.","playtest.sample.context.observed":"La protección de aparición funcionó, el HUD se actualizó a tiempo y la primera ola terminó sin regresiones.","playtest.sample.report.markdown":`# Prueba de humo de Arena de ejemplo
113
+ - Indica la ubicación del código, los archivos modificados, los perfiles que lo usan, el comportamiento de cleanup y qué debo revisar manualmente antes de publicar.`,"sidebar.overview":"Resumen","sidebar.changelog":"Historial","sidebar.connection":"Conexión","sidebar.sync":"Sincronización","sidebar.playtest":"Prueba","sidebar.tools":"Herramientas","sidebar.settings":"Configuración","sidebar.ui_studio":"UI Studio","sidebar.gate.l1":"Se requiere conexión con el servidor MCP.","sidebar.gate.l2":"Se requiere conexión con el plugin de Roblox Studio.","header.currentProject":"Proyecto actual","header.unknownProject":"Proyecto desconocido","header.projectRoot.label":"Project Root","header.currentProject.loading":"Cargando raíz del proyecto...","header.currentProject.unavailable":"Raíz del proyecto no disponible","header.placeNotConnected":"Place no conectado","header.currentProject.tooltip":"Carpeta de proyecto seleccionada actualmente.","header.currentProject.loading.tooltip":"La información de la raíz del proyecto todavía se está cargando.","header.currentProject.unavailable.tooltip":"La información actual de la raíz del proyecto no está disponible.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Cargando sync root...","header.currentProjectSyncRoot.unavailable":"Sync root no disponible","header.currentProjectSyncRoot.tooltip":"Carpeta sync root actual del proyecto seleccionado.","header.currentProjectSyncRoot.loading.tooltip":"La información de sync root todavía se está cargando.","header.currentProjectSyncRoot.unavailable.tooltip":"La información actual de sync root no está disponible.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"La ruta de archivos de prueba no está disponible.","header.testFiles.tooltip":"Directorio actual de archivos de playtest para el place seleccionado.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Se requiere conexión del plugin","header.places.liveRequired":"Se requiere conexión del plugin para ver el place activo en tiempo real.","header.place.tooltip":"Place de Roblox conectado.","header.placeNotConnected.tooltip":"Place no conectado","placeScope.current.label":"Place actual","placeScope.lastActive.label":"Último place activo","placeScope.selected.label":"Place seleccionado","placeScope.unknownPlace":"Place desconocido","placeScope.live":"En vivo","placeScope.connected":"Studio conectado","placeScope.stored":"Datos guardados","placeScope.connectedGroup":"Studios conectados","placeScope.storedGroup":"Datos guardados","placeScope.stored.note":"Este place no está abierto actualmente en ningún Studio conectado.","placeScope.pluginRequired":"Plugin requerido","placeScope.pluginRequired.note":"Conecta WEPPY Plugin para confirmar el place activo en vivo.","placeScope.noPlace.label":"Alcance del place","placeScope.noPlace.value":"Aún no hay datos de place disponibles","placeScope.noPlace.badge":"Sin place","placeScope.noPlace.note":"Conecta WEPPY Plugin y sincroniza un place para crear datos por place.","placeScope.selected.note":"Solo se muestran datos guardados. El enrutamiento de Studio no cambia.","placeScope.surface.sync":"El estado de sincronización y los registros usan este place.","placeScope.surface.changelog":"Las sesiones del historial de cambios usan este place.","placeScope.surface.playtest":"Los informes de playtest usan este place.","placeScope.surface.uiStudio":"Las capturas de UI y el historial de cambios usan este place.","placeScope.surface.tools":"El historial y las estadísticas de herramientas usan este place.","placeScope.loading":"Cargando alcance del place...","placeScope.unavailable":"Alcance del place no disponible","placeScope.selector.label":"Datos del place","placeScope.shortcuts.trigger":"Enlaces rápidos","placeScope.shortcuts.label":"Enlaces del place","placeScope.shortcuts.settings":"Configuración del place","placeScope.shortcuts.experience":"Administrar experiencia","placeScope.shortcuts.roblox":"Ver en Roblox","placeScope.folder.duplicate":"Carpeta duplicada","placeScope.folder.unresolved":"Carpeta representativa sin confirmar","placeScope.folder.noSyncHistory":"Sin historial de sincronización","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Detalles de carpetas del Place","placeScope.folder.duplicateReason":"La ubicación de guardado actual es {canonicalFolder}. Esta carpeta se respalda después de una sincronización completa correcta.","placeScope.folder.unresolvedReason":"Este Place se puede seguir seleccionando por ID, pero aún no se ha confirmado una carpeta representativa.","placeScope.folder.unknown":"desconocida","placeScope.selector.noneSelectable":"No hay ninguna carpeta de Place seleccionable","header.changeProjectRoot":"Cambiar raíz del proyecto","header.changeProjectRoot.ariaLabel":"Cambiar raíz del proyecto","header.changeProjectRoot.tooltip":"Cambiar la raíz actual del proyecto.","header.changeProjectRoot.disabledTooltip.l0":"Primero se requiere conexión con el servidor MCP para cambiar la raíz del proyecto.","header.changeProjectRoot.disabledTooltip.loading":"La información de la raíz del proyecto todavía se está cargando.","header.changeProjectRoot.disabledTooltip.unavailable":"La información actual de la raíz del proyecto no está disponible.","header.projectRootModal.initial.title":"Cambiar raíz del proyecto","header.projectRootModal.initial.body.connected":"Después de elegir una carpeta de proyecto, MCP cambiará a la nueva raíz del proyecto y el contenido actual de Studio se resincronizará por completo en el nuevo destino <selected project folder>/weppy-project-sync.","header.projectRootModal.initial.body.disconnected":"Después de elegir una carpeta de proyecto, MCP cambiará a la nueva raíz del proyecto y usará <selected project folder>/weppy-project-sync como el próximo destino de sync.","header.projectRootModal.initial.nextSyncRoot":"Nuevo destino de sync después de la selección","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"El sync actual se detiene de inmediato.","header.projectRootModal.initial.warningFreshSync":"El contenido actual de Studio se usará para crear un fresh full sync en el nuevo destino.","header.projectRootModal.initial.warningNoMove":"Las carpetas de sync anteriores no se mueven automáticamente.","header.projectRootModal.initial.warningDeferredSync":"Si Studio no está conectado, el full resync comenzará la próxima vez que se conecte el plugin.","header.projectRootModal.confirm.title":"Confirmar nueva raíz del proyecto","header.projectRootModal.confirm.body":"Revisa la carpeta seleccionada antes de aplicar el cambio.","header.projectRootModal.confirm.projectRoot":"Carpeta de proyecto seleccionada","header.projectRootModal.confirm.syncRoot":"Nuevo destino de sync","header.projectRootModal.confirm.warningNoMove":"Las carpetas de sync existentes no se mueven automáticamente.","header.projectRootModal.pick":"Elegir carpeta","header.projectRootModal.apply":"Aplicar cambio","header.projectRootModal.cancel":"Cancelar","header.projectRootModal.error":"No se pudo cambiar la raíz del proyecto.","status.online":"En línea","status.offline":"Desconectado","status.idle":"Inactivo","status.syncing":"Sincronizando","status.error":"Error","status.initializing":"Inicializando","level.l0.title":"Servidor desconectado","level.l0.message":"WEPPY Dashboard está abierto pero el servidor MCP se detuvo o no responde.","level.l1.title":"Servidor conectado","level.l1.hint":"Verifica: ¿Roblox Studio está abierto? ¿El plugin está instalado?","level.l2.ok":"Studio conectado","tier.basic":"Basic","tier.basic.tooltip":"Nivel Basic con el conjunto estándar de funciones del WEPPY Dashboard.","tier.pro":"Pro","tier.pro.tooltip":"Nivel Pro con el conjunto completo de funciones del WEPPY Dashboard.","tier.mixed":"Mixto","tier.upgrade":"Ver Pro","tier.banner.save":"¡Ahorra tokens de IA con Pro!","tier.tool.query_instances.desc":"Consulta de instancias, exploración de hijos/descendientes, info de clase, búsqueda por nombre y clase. Pro: árbol de archivos, estructura del proyecto, búsqueda por propiedad y etiqueta.","tier.tool.mutate_instances.desc":"Crear, eliminar, clonar, mover, renombrar y pivotar instancias. Pro: creación de árboles, creación/eliminación/duplicación masiva.","tier.tool.manage_properties.desc":"Consultar y establecer propiedades, atributos y etiquetas. Pro: valores calculados y relativos, consulta/establecimiento masivo, modificación masiva de hijos.","tier.tool.manage_scripts.desc":"Leer, escribir, crear, eliminar, editar líneas y buscar en scripts. Pro: reemplazo masivo entre scripts.","tier.tool.manage_ui.desc":"Solo Pro. Crea o mejora menús, HUDs, botones, etiquetas y paneles de imagen con estilo de juego; luego captura pantallas y revisa sugerencias.","tier.tool.manage_ui.action.design_brief":"Planificar la dirección de UI","tier.tool.manage_ui.action.create_tree":"Crear nueva UI","tier.tool.manage_ui.action.update":"Actualizar UI existente","tier.tool.manage_ui.action.delete":"Eliminar UI","tier.tool.manage_ui.action.preview":"Capturar pantalla de UI","tier.tool.manage_ui.action.check":"Revisar sugerencias de mejora","tier.tool.manage_lighting.desc":"Solo Pro. Configuración de iluminación, atmósfera, cielo, propiedades del terreno y hora del día.","tier.tool.manage_selection.desc":"Consultar, establecer y borrar selección. Pro: contexto, detalles, agregar/quitar elementos, monitorear cambios.","tier.tool.manage_camera.desc":"Info de cámara, enfocar por ruta o coordenadas, vista sugerida.","tier.tool.manage_tween.desc":"Solo Pro. Crear, reproducir, pausar y cancelar tweens para animaciones suaves.","tier.tool.manage_audio.desc":"Solo Pro. Reproducir, detener, pausar y reanudar sonidos. Configurar listener de audio.","tier.tool.manage_animation.desc":"Solo Pro. Cargar, reproducir y detener animaciones. Consultar tracks de humanoide/controlador.","tier.tool.manage_physics.desc":"Solo Pro. Registrar grupos de colisión, configurar colisión entre grupos, listar grupos.","tier.tool.manage_effects.desc":"Solo Pro. Emitir partículas, borrar todas, alternar activación de efectos.","tier.tool.manage_terrain.desc":"Solo Pro. Rellenar formas, borrar regiones, reemplazar materiales, gestionar colores, leer/escribir voxels, generación procedural, suavizado.","tier.tool.spatial_query.desc":"Solo Pro. Raycast, buscar suelo, verificar colocación, escaneo de área, buscar zonas planas y puntos de aparición, análisis de caminabilidad, mapa espacial, detección de colisión.","tier.tool.manage_assets.desc":"Solo Pro. Insertar modelos, consultar info de assets, buscar en tienda de creadores, insertar modelos/paquetes gratuitos, exportar.","tier.tool.manage_sync.desc":"Solo Pro. Estado de sincronización, configuración, historial, dirección, lectura/escritura de archivos sincronizados.","tier.tool.workspace_state.desc":"Solo Pro. Sincronización completa, instantánea, cambios recientes, info de viewport, metadatos, gestión de caché.","tier.tool.manage_logs.desc":"Consulta filtrada de registros, sondeo incremental, borrar buffer, consulta de errores recientes.","tier.tool.system_info.desc":"Estado de conexión, verificación de tier. Pro: info de lugar, lista de servicios, configuración de Studio, control de playtest, pruebas automáticas.","tier.tool.manage_studio.desc":"Solo Pro. Alterna ajustes de vista del editor de Studio, como la vista previa de UI, para capturas y QA; cambia ajustes de la sesión, no objetos de UI del juego.","tier.tool.batch_execute.desc":"Solo Pro. Ejecutar múltiples comandos en lote. Procesamiento secuencial con opción de continuar en caso de error.","tier.tool.execute_luau.desc":"Solo Pro. Ejecutar código Luau arbitrario en el sandbox de Roblox Studio.","connection.server.title":"Estado del Bridge","connection.server.version":"Versión","connection.server.version.tooltip":"Versión del entorno de ejecución de WEPPY Bridge.","connection.server.pid":"PID","connection.server.pid.tooltip":"Identificador de proceso del sistema operativo.","connection.server.uptime":"Tiempo activo","connection.server.uptime.tooltip":"Tiempo transcurrido desde que se inició WEPPY Bridge.","connection.server.session":"Sesión","connection.server.session.tooltip":"Identificador de la sesión actual de WEPPY Bridge.","connection.server.exec":"Ejecutable","connection.server.exec.tooltip":"Ruta del ejecutable usado para iniciar WEPPY Bridge.","connection.server.restart":"Reiniciar Bridge","connection.server.restarting":"Reiniciando…","connection.server.restartUnavailable":"Conecta al menos un agente de IA para que su MCP Adapter pueda iniciar el nuevo Bridge.","connection.server.restartTitle":"¿Reiniciar WEPPY Bridge?","connection.server.restartMessage":"Dashboard y los destinos de Studio se desconectarán brevemente. El resultado de los comandos en curso puede quedar sin confirmar, y las sesiones de Playtest activas o los controles pendientes se limpiarán. Un MCP Adapter conectado iniciará automáticamente un nuevo Bridge.","connection.server.restartConfirm":"Reiniciar Bridge","connection.server.restartRequesting":"Solicitando el reinicio de Bridge…","connection.server.restartReconnecting":"Reconectando con WEPPY Bridge…","connection.server.restartWaiting":"Dashboard y Studio volverán a conectarse automáticamente cuando el nuevo Bridge esté listo.","connection.server.restartSucceeded":"WEPPY Bridge se reinició","connection.server.restartFailed":"No se pudo reiniciar WEPPY Bridge","connection.server.restartTimeout":"El nuevo Bridge no estuvo listo a tiempo. Comprueba la conexión MCP en tu herramienta de IA y vuelve a intentarlo.","connection.server.restartStale":"Bridge cambió antes de aceptar la solicitud. Actualiza el estado y vuelve a intentarlo.","connection.reconnect":"Reconectar","connection.checkSettings":"Verificar configuración","connection.agents.title":"Agentes IA","connection.agents.name":"Agente","connection.agents.version":"Versión","connection.agents.version.tooltip":"Versión del paquete MCP Adapter para esta sesión del agente.","connection.agents.cwd":"Directorio","connection.agents.cwd.tooltip":"Directorio de trabajo actual del agente de IA conectado.","connection.agents.projectRoot":"Raíz del proyecto","connection.agents.projectRoot.tooltip":"Ruta del proyecto autoritativa para la propiedad de sincronización","connection.agents.projectRoot.unresolved":"Sin resolver","connection.agents.connected":"Conectado","connection.agents.unknown":"Desconocido","connection.agents.none":"Sin agentes conectados","connection.plugins.title":"Plugins","connection.plugins.place":"Place","connection.plugins.clientId":"Connection ID","connection.plugins.clientId.tooltip":"Full connection ID for diagnostics","connection.plugins.lastSeen":"Última vez","connection.plugins.lastSeen.tooltip":"Heartbeat más reciente recibido desde el plugin.","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Versión instalada del plugin informada por Studio.","connection.plugins.none":"Sin plugins conectados","connection.targets.title":"Studio Targets","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"Short name for this Roblox Studio window","connection.targets.place":"Place","connection.targets.placeId":"Place ID","connection.targets.placeId.tooltip":"Roblox Place ID for this Studio window","connection.targets.clientId":"Connection ID","connection.targets.clientId.tooltip":"Full connection ID for diagnostics. Usually use Studio ID instead.","connection.targets.session":"Session","connection.targets.session.tooltip":"Command channel state for this Studio target","connection.targets.lastUsed":"Last Used","connection.targets.lastUsed.tooltip":"Most recent plugin-route request routed to this Studio target","connection.targets.lastSeen":"Last Seen","connection.targets.lastSeen.tooltip":"Most recent heartbeat received from this Studio target","connection.targets.version":"Version","connection.targets.version.tooltip":"Installed plugin version reported by Studio","connection.targets.routing":"Routing","connection.targets.routing.tooltip":"Default Studio window when the agent does not name one","connection.targets.inFlight":"In Flight","connection.targets.inFlight.tooltip":"Active command request currently routed to this Studio target","connection.targets.studioState":"Studio State","connection.targets.studioState.tooltip":"Current edit/play runtime state reported by this Studio window","connection.targets.studioState.edit":"Edit","connection.targets.studioState.running":"Running","connection.targets.studioState.paused":"Paused","connection.targets.studioState.unknown":"Unknown","connection.targets.studioState.source.thread":"WEPPY play command","connection.targets.studioState.source.pluginConnection":"Conexión Play/Test de Studio","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"Unknown source","connection.targets.studioState.updatedUnknown":"not reported","connection.targets.copyPlaceId":"Copy Place ID","connection.targets.copyTargetAlias":"Copy Studio ID","connection.targets.copyClientId":"Copy Connection ID","connection.targets.copied":"Copied value","connection.targets.copyFailed":"Failed to copy value","connection.targets.none":"No Studio targets connected. Open Roblox Studio and connect WEPPY Plugin.","connection.targets.help":"When multiple Studio windows are connected, tell the agent to use Studio ID studio-1 to choose one.","connection.topology.ariaLabel":"Connection topology","connection.topology.title":"Connection topology","connection.topology.description":"Cada agente de IA se conecta mediante su propio MCP Adapter a un WEPPY Bridge compartido, que mantiene la conexión con Roblox Studio.","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"Active","connection.topology.stale":"Stale","connection.topology.unknown":"Unknown","connection.topology.lastContact":"Último contacto","connection.topology.noContact":"Sin contacto reciente","connection.topology.versionUnknown":"Version unknown","connection.topology.placeUnknown":"Place unknown","connection.topology.moreAgents":"+{count} more agents","connection.topology.moreStudios":"+{count} more studios","connection.topology.allAgentsVisible":"All agents visible","connection.topology.allStudiosVisible":"All studios visible","connection.topology.showAll":"Show all","connection.topology.showLess":"Show less","connection.topology.showAllAgents":"Show all AI agents","connection.topology.showAllStudios":"Show all Studio targets","connection.topology.showLessAgents":"Show less AI agents","connection.topology.showLessStudios":"Show less Studio targets","connection.routing.updateFailed":"Failed to update routing target","connection.log.title":"Registro de conexión","connection.log.empty":"Sin eventos","connection.time.secondsAgo":"s atrás","connection.time.minutesAgo":"min atrás","connection.time.hoursAgo":"h atrás","common.loading":"Cargando...","common.retry":"Reintentar","common.reconnecting":"Reconectando...","common.expand":"Expandir","common.collapse":"Contraer","tools.tab.history":"Historial","tools.tab.statistics":"Estadísticas","tools.tab.failures":"Fallos","tools.col.time":"Hora","tools.col.time.tooltip":"Momento en que se registró la ejecución de la herramienta.","tools.col.toolAction":"Herramienta.Acción","tools.col.toolAction.tooltip":"Nombre de la herramienta y acción que se ejecutó.","tools.col.duration":"Duración","tools.col.duration.tooltip":"Cuánto tardó la herramienta en finalizar.","tools.col.status":"Estado","tools.col.status.tooltip":"Resultado de la ejecución registrada.","tools.col.tier":"Nivel","tools.col.tier.tooltip":"Nivel de licencia requerido para la herramienta o acción.","tools.col.tierStats.tooltip":"Resumen Basic, Pro o Mixed para esta fila de estadísticas de herramientas.","tools.col.tool":"Herramienta","tools.col.tool.tooltip":"Nombre de la herramienta consolidada en la tabla de estadísticas.","tools.col.calls":"Llamadas","tools.col.calls.tooltip":"Número total de llamadas registradas para esta herramienta.","tools.col.ok":"OK","tools.col.ok.tooltip":"Número de ejecuciones exitosas directas.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Número de ejecuciones que tuvieron éxito mediante fallback.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Número de ejecuciones bloqueadas sin fallback.","tools.col.warn":"WARN","tools.col.warn.tooltip":"Número de fallos esperados causados por la entrada, el estado del proyecto, la política de Roblox o el código del usuario.","tools.col.err":"FALLIDO","tools.col.err.tooltip":"Número de ejecuciones que terminaron en fallo.","tools.col.okRate":"% Éxito","tools.col.okRate.tooltip":"Porcentaje de llamadas que terminaron correctamente.","tools.col.avgTime":"Tiempo promedio","tools.col.avgTime.tooltip":"Tiempo promedio de ejecución entre las llamadas registradas.","tools.col.error":"Error","tools.filter.tool":"Herramienta","tools.filter.all":"Todos","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Esta entrada usó una herramienta o acción exclusiva de Pro.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"La acción Pro solicitada tuvo éxito mediante un fallback Basic.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"La acción Pro solicitada fue bloqueada y no se ejecutó ningún fallback.","tools.badge.warn":"WARN","tools.badge.warn.tooltip":"La llamada falló por un problema esperado de entrada, proyecto, política o código de usuario.","tools.badge.err":"FALLIDO","tools.badge.err.tooltip":"La ejecución de la herramienta terminó en fallo.","tools.status.ok":"OK","tools.status.ok.tooltip":"La ejecución de la herramienta finalizó correctamente.","tools.tier.mixed.tooltip":"Esta herramienta incluye acciones Basic y Pro.","tools.detail.params":"Parámetros","tools.detail.params.tooltip":"Parámetros de entrada enviados en esta ejecución.","tools.detail.result":"Resultado","tools.detail.result.tooltip":"Carga útil devuelta por esta ejecución.","tools.detail.requestedCommand":"Comando enviado","tools.detail.executedCommand":"Comando ejecutado","tools.detail.alternatives":"Alternativas","tools.detail.blockedMessage":"Motivo del bloqueo","tools.detail.noFallback":"Sin fallback","tools.detail.noFallback.value":"No se ejecutó ningún fallback.","tools.detail.warningMessage":"Mensaje de advertencia","tools.detail.errorMessage":"Mensaje de error","tools.detail.open":"Detalles","tools.detail.openLabel":"Ver detalles de {command}","tools.detail.dialogLabel":"Detalle de ejecución de herramienta","tools.detail.title":"Ejecución de herramienta","tools.history.routing":"Routing","tools.history.routing.mode":"Mode","tools.history.routing.requested":"Requested","tools.history.routing.actual":"Actual","tools.history.routing.none":"No Studio target named","tools.clear.history.title":"¿Borrar historial?","tools.clear.history.message":"Esto elimina permanentemente el historial de herramientas del place actual.","tools.clear.statistics.title":"¿Borrar estadísticas?","tools.clear.statistics.message":"Esto restablece permanentemente las estadísticas de herramientas del place actual.","tools.detail.error":"Error","tools.page.prev":"Anterior","tools.page.prev.tooltip":"Ir a la página anterior del historial de herramientas.","tools.page.next":"Siguiente","tools.page.next.tooltip":"Ir a la página siguiente del historial de herramientas.","tools.empty.history":"Sin entradas de historial","tools.empty.stats":"Sin estadísticas","tools.empty.failures":"Sin fallos","tools.summary.total":"Total","tools.summary.calls":"llamadas","tools.summary.sessions":"Sesiones","settings.license.title":"Licencia","settings.license.title.tooltip":"Estado actual de la licencia y nivel de suscripción.","settings.license.status":"Estado","settings.license.status.tooltip":"Estado actual de activación de la licencia.","settings.license.tier":"Nivel","settings.license.tier.tooltip":"Nivel de suscripción actual para las funciones disponibles del WEPPY Dashboard.","settings.license.key":"Clave","settings.license.key.tooltip":"Clave de licencia enmascarada cargada actualmente por el servidor.","settings.license.keyValue.tooltip":"Clave de licencia enmascarada cargada actualmente por el servidor.","settings.license.provider":"Proveedor","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"Proveedor de licencia usado para validar esta clave.","settings.license.providerValue.tooltip":"Proveedor de licencia usado para validar esta clave.","settings.license.active":"Activa","settings.license.active.tooltip":"Estado actual de activación de la licencia.","settings.license.status.activeCancelPending.tooltip":"La cancelación está pendiente, pero el acceso Pro seguirá activo hasta que termine el período de facturación actual.","settings.license.inactive":"Inactiva","settings.license.inactive.tooltip":"Estado actual de activación de la licencia.","settings.license.expired":"Expirada","settings.license.expired.tooltip":"Estado actual de activación de la licencia.","settings.license.unavailable":"Información de licencia no disponible","settings.license.detail.cancelPending":"La cancelación está programada. El acceso Pro seguirá activo hasta que termine el período de facturación actual.","settings.license.reset":"Restablecer licencia","settings.readOnly":"Solo lectura","settings.readOnly.tooltip":"Esta sección muestra valores que no se pueden editar desde el WEPPY Dashboard.","settings.unavailable":"Configuración no disponible","settings.general.title":"Configuración general","settings.general.title.tooltip":"Ajustes calientes que se aplican inmediatamente al cambiarse.","settings.general.liveApply":"Aplicar en vivo","settings.general.liveApply.tooltip":"Los cambios en esta sección se aplican al instante sin un botón de guardar aparte.","settings.general.applied":"Aplicado","settings.general.logLevel":"Nivel de log","settings.general.logLevel.tooltip":"Define cuánto detalle escribe el WEPPY Dashboard en sus registros.","settings.general.localHistory":"Registro de historial","settings.general.localHistory.tooltip":"Guarda el historial local de ejecución de herramientas para las vistas de historial del WEPPY Dashboard.","settings.general.localStatistics":"Recopilación de estadísticas","settings.general.localStatistics.tooltip":"Agrega estadísticas locales de uso para los informes del WEPPY Dashboard.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WEPPY Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"Tiempo de espera","settings.general.requestTimeout.tooltip":"Tiempo máximo que el WEPPY Dashboard espera una acción antes de marcarla como fallida.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"El tiempo de espera de la acción se mide en milisegundos.","settings.cold.title":"Entorno del servidor","settings.cold.title.tooltip":"Valores de entorno del servidor de solo lectura cargados al iniciar.","settings.cold.httpPort.tooltip":"Número de puerto usado por el servidor HTTP del WEPPY Dashboard MCP.","settings.cold.httpHost.tooltip":"Interfaz de host a la que se enlaza el servidor HTTP del WEPPY Dashboard MCP.","settings.cold.hint":"Configure mediante variables de entorno.","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"Elige cómo se comporta WEPPY Dashboard cuando se inicia el servidor MCP.","settings.dashboard.nextStartBadge":"Próximo inicio","settings.dashboard.autoOpen.label":"Abrir Dashboard al iniciar WEPPY","settings.dashboard.autoOpen.description":"Abre automáticamente este Dashboard después de iniciar el servidor MCP.","settings.dashboard.autoOpen.nextStart":"Se aplica la próxima vez que se inicie el servidor MCP.","settings.dashboard.settingsFile.label":"Archivo de configuración","settings.dashboard.agentExample.label":"Pídeselo a tu Agent","settings.dashboard.agentExample.prompt":"“Desactiva la apertura automática del Dashboard”.","settings.dashboard.autoOpen.saving":"Guardando…","settings.dashboard.autoOpen.saved":"Guardado para el próximo inicio del servidor.","settings.dashboard.autoOpen.error":"No se pudo guardar. Se restauró la opción anterior.","dashboardAutoOpenGuide.eyebrow":"Preferencia del Dashboard","dashboardAutoOpenGuide.title":"Elige cómo se abre WEPPY Dashboard","dashboardAutoOpenGuide.currentOn":"La apertura automática está activada. Este Dashboard se abre después de iniciar el servidor MCP.","dashboardAutoOpenGuide.currentOff":"La apertura automática está desactivada. WEPPY no abrirá una pestaña nueva del Dashboard al iniciar el servidor MCP.","dashboardAutoOpenGuide.changeAnytime":"Puedes cambiarlo cuando quieras en Settings.","dashboardAutoOpenGuide.agentHint":"También puedes pedirle a tu Agent: “Desactiva la apertura automática del Dashboard”.","dashboardAutoOpenGuide.statusOn":"Apertura automática activada","dashboardAutoOpenGuide.statusOff":"Apertura automática desactivada","dashboardAutoOpenGuide.keep":"Mantener opción actual","dashboardAutoOpenGuide.turnOff":"Desactivar apertura automática","dashboardAutoOpenGuide.openSettings":"Abrir Settings","dashboardAutoOpenGuide.close":"Cerrar guía de apertura automática","dashboardAutoOpenGuide.saving":"Guardando…","dashboardAutoOpenGuide.error":"No se pudo guardar tu elección. Inténtalo de nuevo.","settings.language.title":"Idioma","settings.language.title.tooltip":"Elige cómo se localiza el texto de la interfaz del WEPPY Dashboard.","settings.language.dashboard":"Idioma del WEPPY Dashboard","settings.language.dashboard.tooltip":"Sobrescribe el idioma del WEPPY Dashboard o usa el idioma del sistema cuando está en Automático.","settings.language.auto":"Automático","overview.l0.title":"Servidor MCP desconectado","overview.l0.message":"El servidor MCP no responde. El WEPPY Dashboard intentará reconectarse automáticamente.","overview.l0.step1":"Verifique que el proceso del servidor MCP esté ejecutándose","overview.l0.step2":"Reinicie el comando del servidor MCP si es necesario","overview.l0.reconnecting":"Reconectando automáticamente cada 3s...","overview.l0.reconnectBtn":"Reconectar","overview.l0.settingsBtn":"Verificar configuración","overview.l1.pluginGuide":"El plugin de Roblox Studio no está conectado","overview.l1.check1":"¿Roblox Studio está abierto?","overview.l1.check2":"¿El WEPPY Plugin está instalado?","overview.l1.feedHint":"Los cambios aparecerán aquí cuando el plugin se conecte","overview.metric.server":"Servidor","overview.metric.server.tooltip":"Estado de ejecución y proceso del servidor MCP.","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Estado de conexión y versión del plugin de Roblox Studio.","overview.metric.agent":"Agente","overview.metric.agent.tooltip":"Agentes de IA conectados y su estado actual.","overview.metric.agent.instancesUnit":"instancias","overview.metric.sync":"Sincronización","overview.metric.sync.tooltip":"Actividad actual de sincronización entre Studio y archivos locales.","overview.metric.noAgent":"Sin agente","overview.meta.version":"Versión","overview.meta.version.tooltip":"Versión instalada del servidor MCP.","overview.meta.session":"Sesión","overview.meta.session.tooltip":"Identificador de la sesión MCP actual.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Identificador de proceso del sistema operativo.","overview.meta.uptime":"Tiempo activo","overview.meta.uptime.tooltip":"Tiempo transcurrido desde que se inició el servidor MCP.","overview.feed.title":"Cambios recientes del juego","overview.feed.empty":"Sin cambios recientes","overview.changelog.title":"Resumen de cambios de sesión","overview.changelog.entries":"Total","overview.changelog.scripts":"scripts","overview.changelog.instances":"instancias","overview.changelog.properties":"propiedades","overview.changelog.assets":"assets","overview.tier.title":"Uso por nivel","changelog.subtitle":"Historial de cambios del juego","changelog.filter.all":"Todos","changelog.filter.active":"Activo","changelog.filter.completed":"Completado","changelog.empty":"Sin entradas de historial","changelog.basic.limit.title":"La vista previa Basic muestra solo las 3 sesiones más recientes","changelog.basic.limit.body":"Actualiza a Pro para explorar la línea completa del historial de cambios de este place.","changelog.basic.metricLabel":"Historial visible / Total","changelog.basic.visible":"visibles","changelog.basic.total":"total","changelog.card.active":"Activo","changelog.card.active.tooltip":"Esta sesión todavía sigue recibiendo nuevos cambios del juego.","changelog.card.completed":"Completado","changelog.card.completed.tooltip":"Esta sesión terminó y ya no se esperan más cambios.","changelog.card.bootstrapStatus":"Inicializado","changelog.card.bootstrapStatus.tooltip":"Esta sesión solo contiene la instantánea inicial de bootstrap de sincronización.","changelog.card.inProgress":"en progreso","changelog.card.noChanges":"Sin cambios aún","changelog.card.noChanges.tooltip":"Todavía no se han extraído cambios del juego para esta sesión.","changelog.card.bootstrapSummary":"Instantánea de sincronización inicial","changelog.card.bootstrapSummary.tooltip":"Las escrituras de la sincronización inicial de archivos se agrupan en una sola fila de bootstrap.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"scripts","changelog.card.scripts.tooltip":"Cambios de scripts realizados en esta sesión.","changelog.card.instances":"instancias","changelog.card.instances.tooltip":"Cambios de creación, eliminación, movimiento o clonado de instancias en esta sesión.","changelog.card.modified":"modificado","changelog.card.created":"creado","changelog.card.deleted":"eliminado","changelog.card.moved":"movido","changelog.card.propertiesChanged":"propiedades cambiadas","changelog.card.propertiesChanged.tooltip":"Cambios de valores de propiedades registrados para esta sesión.","changelog.card.lightingConfigured":"Iluminación configurada","changelog.card.lightingConfigured.tooltip":"La iluminación o la atmósfera cambiaron en esta sesión.","changelog.card.terrainConfigured":"Terreno configurado","changelog.card.terrainConfigured.tooltip":"Los datos o la configuración del terreno cambiaron en esta sesión.","changelog.card.assetsInserted":"assets insertados","changelog.card.assetsInserted.tooltip":"Assets insertados en el place durante esta sesión.","changelog.category.script":"Scripts","changelog.category.instance":"Instancias","changelog.category.property":"Propiedades","changelog.category.lighting":"Iluminación","changelog.category.terrain":"Terreno","changelog.category.asset":"Assets","changelog.detail.dialogLabel":"Detalles del registro de cambios","changelog.detail.changeSummary":"Resumen de cambios","changelog.detail.changeSummary.tooltip":"Cantidad de cambios del juego extraídos agrupados por categoría para esta sesión.","changelog.detail.changeTimeline":"Línea de tiempo","changelog.detail.changeTimeline.tooltip":"Lista cronológica de cambios del juego extraídos para esta sesión.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Antes y después","changelog.detail.filterCategory":"Categoría","changelog.detail.filterCategory.tooltip":"Filtra la línea de tiempo a una sola categoría de cambio.","changelog.detail.confidence.exact":"Exacto","changelog.detail.confidence.exact.tooltip":"Se confirmaron tanto el estado anterior como el posterior para este cambio.","changelog.detail.confidence.partial":"Parcial","changelog.detail.confidence.partial.tooltip":"Solo se pudo confirmar parte del estado anterior y posterior para este cambio.","changelog.detail.confidence.afterOnly":"Solo después","changelog.detail.confidence.afterOnly.tooltip":"Solo se pudo confirmar el estado resultante después del cambio.","changelog.detail.confidence.intentOnly":"Solo intención","changelog.detail.confidence.intentOnly.tooltip":"Solo se registró la acción solicitada, no el estado resultante.","changelog.detail.confidence.unknown":"Desconocido","changelog.detail.confidence.unknown.tooltip":"No fue posible clasificar este cambio con confianza usando los datos disponibles.","changelog.detail.noChanges":"Sin cambios en esta categoría","changelog.detail.backToList":"Volver a la lista","changelog.diff.empty":"Sin diferencias disponibles","changelog.diff.unified":"Unificado","changelog.diff.sideBySide":"Lado a lado","changelog.diff.before":"Antes","changelog.diff.after":"Después","sync.targets.title":"Studios conectados","sync.targets.refresh":"Actualizar","sync.targets.loading":"Cargando estado de Sync de Studio…","sync.targets.unavailable":"El estado de Sync de Studio no está disponible. Vuelve a intentarlo.","sync.targets.empty":"No hay Studios conectados. Conecta WEPPY Plugin para ver Sync en vivo.","sync.targets.unknownPlace":"Place desconocido","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"Conectado","sync.targets.notReported":"Aún no informado","sync.targets.state.unknown":"Desconocido","sync.targets.state.off":"Sync desactivado","sync.targets.state.idle":"Sync activado · en espera","sync.targets.state.initializing":"Inicializando","sync.targets.state.syncing":"Sincronizando","sync.targets.state.paused":"Pausado","sync.targets.state.error":"Error","sync.forwardStatus.label":"Envío de cambios","sync.forwardStatus.tooltip":"Indica si se pueden enviar cambios de Edit. Activado no confirma que todos los archivos locales estén actualizados.","sync.forwardStatus.inactive":"Desactivado","sync.forwardStatus.active":"Activado","sync.forwardStatus.paused_play":"Pausado durante Play","sync.forwardStatus.reconciling":"Comprobando cambios de Edit","sync.forwardStatus.blocked":"Requiere atención","sync.forwardStatus.unknown":"Desconocido","sync.forwardStatus.observedAt":"Observado","sync.forwardStatus.reason.review":"Revisa los cambios en Studio Plugin.","sync.forwardStatus.reason.editChanged":"Edit cambió durante la comprobación. Revisa Sync en Studio Plugin.","sync.forwardStatus.reason.failed":"No se pudieron confirmar los cambios. Revisa Sync en Studio Plugin.","sync.forwardStatus.reason.fallback":"Consulta Studio Plugin para más detalles.","sync.stored.title":"Places guardados","sync.stored.data":"Datos guardados","sync.stored.ambiguous":"Ubicación de almacenamiento sin confirmar","sync.detail.scope":"Viendo detalles de Sync de","sync.detail.readOnly":"Ver detalles no cambia el enrutamiento de Studio.","sync.detail.empty":"Selecciona un Studio conectado o un Place guardado.","sync.detail.unknown":"Este Studio aún no ha informado su estado de Sync.","sync.detail.error":"Sync informó un error. Consulta Studio Plugin para más detalles.","sync.detail.placeFolder":"Carpeta de Place","sync.detail.placeFolder.tooltip":"Carpeta compartida por los Studios que abren este Place.","sync.detail.sharedData":"La ruta, los recuentos y el registro pertenecen al Place y se comparten entre sus Studios.","sync.log.shared":"Registro compartido de Place","sync.log.unsafe":"La ubicación de almacenamiento no está confirmada para acceder al registro.","sync.log.unavailable":"No se pudo cargar el registro del Place. Vuelve a intentarlo.","sync.log.loading":"Cargando registro de Place…","sync.clear.selectedMessage":"Esto elimina permanentemente el registro de Sync compartido de {place}.","sync.overlay.title":"Se requiere el plugin de Roblox Studio","sync.overlay.message":"El estado de sincronización estará disponible cuando el plugin de Roblox Studio se conecte.","sync.overlay.check1":"¿Roblox Studio está abierto?","sync.overlay.check2":"¿El WEPPY Plugin está instalado?","sync.status.title":"Estado de sincronización","sync.status.title.tooltip":"Estado actual de sincronización entre Studio y archivos locales para este place.","sync.status.forwardOnly":"Solo avance","sync.status.forwardOnly.tooltip":"La suscripción Basic solo permite sincronización directa de Studio a local.","sync.status.place":"Place","sync.status.place.tooltip":"Nombre e ID del place de Roblox conectado.","sync.status.path":"Ruta","sync.status.path.tooltip":"Raíz del sistema de archivos local usada actualmente para la sincronización.","sync.status.instances":"Instancias","sync.status.instances.tooltip":"Cantidad total de instancias de Roblox sincronizadas en el espejo local.","sync.status.scripts":"Scripts","sync.status.scripts.tooltip":"Cantidad total de scripts sincronizados e indexados para este place.","sync.status.state":"Estado","sync.status.state.tooltip":"Estado de ejecución de sincronización reportado por el servidor.","sync.policy.title":"Política de Sync","sync.policy.title.tooltip":"Política de Sync efectiva informada por el plugin de Studio conectado.","sync.policy.activation":"Activación","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"Flujo de trabajo","sync.policy.preset.studio_first":"Studio primero","sync.policy.preset.bidirectional_review":"Bidireccional","sync.policy.preset.local_code_studio_world":"Código local, mundo en Studio","sync.policy.preset.custom":"Personalizado","sync.policy.apply.title":"Cómo se aplican a Studio los cambios locales","sync.policy.apply.description":"Muestra si los cambios locales se revisan primero o se aplican automáticamente a Studio.","sync.policy.apply.content":"Cambios de contenido","sync.policy.apply.content.tooltip":"Cambios locales en código Script, propiedades y propiedades de servicios. Crear, eliminar, renombrar y mover son cambios de estructura.","sync.policy.apply.structure":"Cambios de estructura","sync.policy.apply.structure.tooltip":"Creación, eliminación, renombrado y movimiento locales de instancias. La eliminación local automática también requiere la opción de borrado separada de abajo.","sync.policy.apply.manual":"Revisar primero","sync.policy.apply.auto":"Aplicación automática","sync.policy.scope.disclosure":"Direcciones por ámbito","sync.policy.scope.scriptSource":"Código de scripts","sync.policy.scope.properties":"Propiedades","sync.policy.scope.structure":"Estructura","sync.policy.scope.serviceProperties":"Propiedades de servicios","sync.policy.endpoint.local":"Local","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → Local","sync.policy.direction.forward.tooltip":"Los cambios de Studio se escriben en los archivos locales.","sync.policy.direction.reverse":"Local → Studio","sync.policy.direction.reverse.tooltip":"Los cambios de archivos locales se aplican en Studio.","sync.policy.direction.bidirectional":"Ambas direcciones","sync.policy.direction.bidirectional.tooltip":"Los cambios pueden pasar de Studio a los archivos locales y de los archivos locales a Studio.","sync.policy.safety.localDeletes":"Eliminación local → eliminar instancia de Studio","sync.policy.safety.review":"Revisar antes de borrar","sync.policy.safety.review.tooltip":"Los borrados de archivos locales esperan revisión antes de eliminar las instancias correspondientes de Studio. Es independiente de la limpieza automática de UI Studio.","sync.policy.safety.auto":"Borrado automático en Studio","sync.policy.safety.auto.tooltip":"Borrar archivos locales puede eliminar automáticamente las instancias correspondientes de Studio. Es independiente de la limpieza automática de UI Studio.","sync.policy.reviewRequired":"Revisa esta política en el plugin de Studio antes de iniciar Sync.","sync.log.title":"Registro de sincronización","sync.log.empty":"Sin eventos de sincronización","sync.log.type.fullSyncStart":"INICIO","sync.log.type.fullSyncStart.tooltip":"La sincronización completa ha comenzado.","sync.log.type.fullSyncProgress":"EN CURSO","sync.log.type.fullSyncProgress.tooltip":"La sincronización completa está guardando los datos.","sync.log.type.fullSyncComplete":"COMPLETADO","sync.log.type.fullSyncComplete.tooltip":"La sincronización completa ha finalizado correctamente.","sync.log.type.fullSyncFailed":"FALLO","sync.log.type.fullSyncFailed.tooltip":"La sincronización completa terminó sin guardar todos los datos.","sync.log.type.write":"ESCRIBIR","sync.log.type.write.tooltip":"Se escribió una nueva salida sincronizada en el disco.","sync.log.type.update":"ACTUALIZAR","sync.log.type.update.tooltip":"Se actualizó un archivo o una instancia ya sincronizada.","sync.log.type.delete":"ELIMINAR","sync.log.type.delete.tooltip":"Se eliminó un archivo o una instancia sincronizada.","sync.log.type.idle":"INACTIVO","sync.log.type.idle.tooltip":"Se registró un evento de sincronización sin modificar archivos.","sync.upgrade.title":"Explora la sincronización completa con Pro","sync.upgrade.benefit1":"Sincronización bidireccional — edita archivos, se aplica automáticamente a Studio","sync.upgrade.benefit2":"Sincronización inversa — envía cambios de archivos a Studio","sync.upgrade.benefit3":"Historial completo de sincronización y registro detallado de cambios","sync.upgrade.buy":"Ver Pro","playtest.status.title":"Estado de prueba","playtest.status.title.tooltip":"Estado actual de la sesión de playtest de Roblox informado por Studio.","playtest.status.mode":"Modo","playtest.status.mode.tooltip":"Modo de inicio de playtest de Studio usado por la sesión actual.","playtest.status.mode.value.tooltip":"Modo específico de playtest de Roblox Studio que se está usando ahora.","playtest.status.mode.play":"Jugar","playtest.status.mode.run":"Ejecutar","playtest.status.mode.server":"Servidor","playtest.status.mode.edit":"Editar","playtest.status.place.tooltip":"Place de Roblox asociado actualmente con esta sesión de playtest.","playtest.status.state.running":"En ejecución","playtest.status.state.running.tooltip":"Actualmente hay una sesión de playtest de Roblox en ejecución.","playtest.status.state.paused":"Pausado","playtest.status.state.paused.tooltip":"La sesión actual de playtest de Roblox está en pausa.","playtest.status.state.notRunning":"Sin ejecutar","playtest.status.state.notRunning.tooltip":"Actualmente no hay ninguna sesión de playtest de Roblox en ejecución.","playtest.control.play":"Jugar","playtest.control.pause":"Pausar","playtest.control.resume":"Reanudar","playtest.control.stop":"Detener","playtest.history.title":"Historial de pruebas","playtest.history.search":"Buscar resultados de prueba","playtest.history.filter":"Resultado","playtest.history.filterAll":"Todos los resultados","playtest.history.filteredCount":"{{visible}} de {{total}} resultados","playtest.history.title.tooltip":"Ejecuciones automatizadas de playtest registradas para este proyecto.","playtest.history.empty":"Sin resultados de prueba","playtest.history.mode":"Modo","playtest.history.mode.tooltip":"Modo de playtest usado en esta ejecución de prueba registrada.","playtest.history.status.passed":"Aprobado","playtest.history.status.failed":"Fallido","playtest.history.status.running":"En ejecución","playtest.history.status.unknown":"Desconocido","playtest.history.status.tooltip":"Estado de resultado registrado para esta ejecución automatizada de playtest.","playtest.empty.title":"Sin resultados de prueba aún","playtest.empty.message":"Los resultados aparecerán aquí después de que el agente de IA ejecute un Playtest.","playtest.empty.message.before":"Los resultados aparecerán aquí después de que el agente de IA ejecute un Playtest.","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"Ask the AI Agent to run a Playtest when you need a fresh report.","playtest.report.title":"Reporte seleccionado","playtest.report.title.tooltip":"Salida detallada de la ejecución automatizada de playtest seleccionada actualmente.","playtest.detail.dialogLabel":"Detalle del informe de playtest","playtest.detail.loading":"Cargando informe...","playtest.detail.errorTitle":"Informe no disponible","playtest.report.content":"Reporte","playtest.report.content.tooltip":"Resumen en Markdown de la ejecución automatizada de playtest seleccionada.","playtest.report.logs":"Registros","playtest.report.logs.tooltip":"Registros de ejecución capturados para la ejecución automatizada de playtest seleccionada.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"Sin contenido de reporte","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest es una función exclusiva de Pro","playtest.basic.desc":"Controla las pruebas desde el WEPPY Dashboard, ejecuta pruebas automatizadas y visualiza reportes detallados.","playtest.basic.benefit1":"Controles de jugar/pausar/detener con un clic","playtest.basic.benefit2":"Ejecución de pruebas automatizadas vía agente IA","playtest.basic.benefit3":"Historial de pruebas con seguimiento de éxito/fallo","playtest.basic.benefit4":"Reportes de prueba detallados en markdown","playtest.sample.badge":"Vista previa de la pantalla Pro de playtest","playtest.sample.title":"Estás viendo una vista previa de la pantalla de playtest disponible después de actualizar a Pro.","playtest.sample.message":"Esta vista previa usa datos de ejemplo. El control de playtest en vivo, la gestión del historial y los reportes reales se desbloquean con Pro.","playtest.sample.clearDisabled":"Actualiza a Pro para borrar el historial real de playtest.","playtest.sample.place":"Vista previa de Arena","playtest.sample.history.name":"Prueba de humo de Arena de ejemplo","playtest.sample.context.why":"Entrar a la arena, sobrevivir a la apertura y verificar que el HUD responda de inmediato.","playtest.sample.context.expected":"El jugador aparece de forma segura, la cuenta regresiva del HUD aparece en un segundo y la primera ola inicia sin errores.","playtest.sample.context.observed":"La protección de aparición funcionó, el HUD se actualizó a tiempo y la primera ola terminó sin regresiones.","playtest.sample.report.markdown":`# Prueba de humo de Arena de ejemplo
114
114
 
115
115
  - Flujo de aparición: PASS
116
116
  - Cuenta regresiva del HUD: PASS
@@ -128,7 +128,7 @@ Esta es una vista de muestra. Actualiza a Pro para ejecutar playtests reales y g
128
128
  - Mantenha adapterStudioOnly=true para que o source gerado verifique RunService:IsStudio() antes de acessar o código do jogo. Use false apenas se eu pedir explicitamente para omitir essa verificação e mostre o aviso production no plan.
129
129
  - Preserve o source de desenvolvimento. Adapter gerenciados pela WEPPY com guard podem permanecer na publicação pelo Studio; revise código personalizado ou sem guard e objetos de teste.
130
130
  - Confira as alterações de código com manage_studio.playtest_adapter_plan e execute manage_studio.playtest_adapter_apply com o token retornado somente após revisar o diff e os usos.
131
- - Informe a localização do código, os arquivos alterados, os perfis que o utilizam, o comportamento de cleanup e o que devo conferir manualmente antes de publicar.`,"sidebar.overview":"Visão Geral","sidebar.changelog":"Histórico","sidebar.connection":"Conexão","sidebar.sync":"Sincronização","sidebar.playtest":"Teste","sidebar.tools":"Ferramentas","sidebar.settings":"Configurações","sidebar.ui_studio":"UI Studio","sidebar.gate.l1":"É necessária conexão com o servidor MCP.","sidebar.gate.l2":"É necessária conexão com o plugin do Roblox Studio.","header.currentProject":"Projeto atual","header.unknownProject":"Projeto desconhecido","header.projectRoot.label":"Project Root","header.currentProject.loading":"Carregando raiz do projeto...","header.currentProject.unavailable":"Raiz do projeto indisponível","header.placeNotConnected":"Place não conectado","header.currentProject.tooltip":"Pasta do projeto atualmente selecionada.","header.currentProject.loading.tooltip":"As informações da raiz do projeto ainda estão carregando.","header.currentProject.unavailable.tooltip":"As informações atuais da raiz do projeto estão indisponíveis.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Carregando sync root...","header.currentProjectSyncRoot.unavailable":"Sync root indisponível","header.currentProjectSyncRoot.tooltip":"Pasta sync root atual do projeto selecionado.","header.currentProjectSyncRoot.loading.tooltip":"As informações de sync root ainda estão carregando.","header.currentProjectSyncRoot.unavailable.tooltip":"As informações atuais de sync root estão indisponíveis.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"O caminho dos arquivos de teste está indisponível.","header.testFiles.tooltip":"Diretório atual dos arquivos de playtest para o place selecionado.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Conexão do plugin necessária","header.places.liveRequired":"A conexão do plugin é necessária para ver o place ativo em tempo real.","header.place.tooltip":"Place do Roblox conectado.","header.placeNotConnected.tooltip":"Place não conectado","placeScope.current.label":"Place atual","placeScope.lastActive.label":"Último place ativo","placeScope.selected.label":"Place selecionado","placeScope.unknownPlace":"Place desconhecido","placeScope.live":"Ao vivo","placeScope.connected":"Studio conectado","placeScope.stored":"Dados salvos","placeScope.connectedGroup":"Studios conectados","placeScope.storedGroup":"Dados salvos","placeScope.stored.note":"Este place não está aberto em nenhum Studio conectado no momento.","placeScope.pluginRequired":"Plugin necessário","placeScope.pluginRequired.note":"Conecte o WEPPY Plugin para confirmar o place ativo ao vivo.","placeScope.noPlace.label":"Escopo do place","placeScope.noPlace.value":"Ainda não há dados de place disponíveis","placeScope.noPlace.badge":"Sem place","placeScope.noPlace.note":"Conecte o WEPPY Plugin e sincronize um place para criar dados por place.","placeScope.selected.note":"Mostrando apenas dados salvos. O roteamento do Studio não muda.","placeScope.surface.sync":"O status de sincronização e os logs usam este place.","placeScope.surface.changelog":"As sessões do changelog usam este place.","placeScope.surface.playtest":"Os relatórios de playtest usam este place.","placeScope.surface.uiStudio":"As capturas de UI e o histórico de alterações usam este place.","placeScope.surface.tools":"O histórico e as estatísticas de ferramentas usam este place.","placeScope.loading":"Carregando escopo do place...","placeScope.unavailable":"Escopo do place indisponível","placeScope.selector.label":"Dados do place","placeScope.shortcuts.trigger":"Links rápidos","placeScope.shortcuts.label":"Links do place","placeScope.shortcuts.settings":"Configurações do place","placeScope.shortcuts.experience":"Gerenciar experiência","placeScope.shortcuts.roblox":"Ver no Roblox","placeScope.folder.duplicate":"Pasta duplicada","placeScope.folder.unresolved":"Pasta representativa não confirmada","placeScope.folder.noSyncHistory":"Sem histórico de sincronização","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Detalhes das pastas do Place","placeScope.folder.duplicateReason":"O local de armazenamento atual é {canonicalFolder}. Esta pasta será armazenada como backup após uma sincronização completa bem-sucedida.","placeScope.folder.unresolvedReason":"Este Place continua selecionável por ID, mas nenhuma pasta foi confirmada como representante ainda.","placeScope.folder.unknown":"desconhecido","placeScope.selector.noneSelectable":"Não há pasta de Place selecionável","header.changeProjectRoot":"Alterar raiz do projeto","header.changeProjectRoot.ariaLabel":"Alterar raiz do projeto","header.changeProjectRoot.tooltip":"Altere a raiz atual do projeto.","header.changeProjectRoot.disabledTooltip.l0":"A conexão com o servidor MCP é necessária primeiro para alterar a raiz do projeto.","header.changeProjectRoot.disabledTooltip.loading":"As informações da raiz do projeto ainda estão carregando.","header.changeProjectRoot.disabledTooltip.unavailable":"As informações atuais da raiz do projeto estão indisponíveis.","header.projectRootModal.initial.title":"Alterar raiz do projeto","header.projectRootModal.initial.body.connected":"Depois que você escolher uma pasta de projeto, o MCP mudará para a nova raiz do projeto e o conteúdo atual do Studio será totalmente resincronizado para o novo destino <selected project folder>/weppy-project-sync.","header.projectRootModal.initial.body.disconnected":"Depois que você escolher uma pasta de projeto, o MCP mudará para a nova raiz do projeto e usará <selected project folder>/weppy-project-sync como o próximo destino de sync.","header.projectRootModal.initial.nextSyncRoot":"Novo destino de sync após a seleção","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"O sync atual é interrompido imediatamente.","header.projectRootModal.initial.warningFreshSync":"O conteúdo atual do Studio será usado para criar um fresh full sync no novo destino.","header.projectRootModal.initial.warningNoMove":"Pastas de sync antigas não são movidas automaticamente.","header.projectRootModal.initial.warningDeferredSync":"Se o Studio não estiver conectado, o full resync começará na próxima conexão do plugin.","header.projectRootModal.confirm.title":"Confirmar nova raiz do projeto","header.projectRootModal.confirm.body":"Revise a pasta selecionada antes de aplicar a mudança.","header.projectRootModal.confirm.projectRoot":"Pasta de projeto selecionada","header.projectRootModal.confirm.syncRoot":"Novo destino do sync","header.projectRootModal.confirm.warningNoMove":"Pastas de sync existentes não são movidas automaticamente.","header.projectRootModal.pick":"Escolher pasta","header.projectRootModal.apply":"Aplicar alteração","header.projectRootModal.cancel":"Cancelar","header.projectRootModal.error":"Não foi possível alterar a raiz do projeto.","status.online":"Online","status.offline":"Offline","status.idle":"Ocioso","status.syncing":"Sincronizando","status.error":"Erro","status.initializing":"Inicializando","level.l0.title":"Servidor desconectado","level.l0.message":"O WEPPY Dashboard está aberto mas o servidor MCP parou ou não está respondendo.","level.l1.title":"Servidor conectado","level.l1.hint":"Verifique: O Roblox Studio está aberto? O plugin está instalado?","level.l2.ok":"Studio conectado","tier.basic":"Basic","tier.basic.tooltip":"Tier Basic com o conjunto padrão de recursos do WEPPY Dashboard.","tier.pro":"Pro","tier.pro.tooltip":"Tier Pro com o conjunto completo de recursos do WEPPY Dashboard.","tier.mixed":"Misto","tier.upgrade":"Ver Pro","tier.banner.save":"Economize tokens de IA com Pro!","tier.tool.query_instances.desc":"Consulta de instâncias, exploração de filhos/descendentes, info de classe, busca por nome e classe. Pro: árvore de arquivos, estrutura do projeto, busca por propriedade e tag.","tier.tool.mutate_instances.desc":"Criar, excluir, clonar, mover, renomear e pivotar instâncias. Pro: criação de árvores, criação/exclusão/duplicação em massa.","tier.tool.manage_properties.desc":"Consultar e definir propriedades, atributos e tags. Pro: valores calculados e relativos, consulta/definição em massa, modificação em massa de filhos.","tier.tool.manage_scripts.desc":"Ler, escrever, criar, excluir, editar linhas e buscar em scripts. Pro: substituição em massa entre scripts.","tier.tool.manage_ui.desc":"Somente Pro. Crie ou refine menus, HUDs, botões, labels e painéis de imagem com estilo de jogo; depois capture telas e revise sugestões.","tier.tool.manage_ui.action.design_brief":"Planejar direção da UI","tier.tool.manage_ui.action.create_tree":"Criar nova UI","tier.tool.manage_ui.action.update":"Atualizar UI existente","tier.tool.manage_ui.action.delete":"Remover UI","tier.tool.manage_ui.action.preview":"Capturar tela da UI","tier.tool.manage_ui.action.check":"Revisar sugestões de melhoria","tier.tool.manage_lighting.desc":"Somente Pro. Configuração de iluminação, atmosfera, céu, propriedades do terreno e hora do dia.","tier.tool.manage_selection.desc":"Consultar, definir e limpar seleção. Pro: contexto, detalhes, adicionar/remover itens, monitorar mudanças.","tier.tool.manage_camera.desc":"Info da câmera, focar por caminho ou coordenadas, visualização sugerida.","tier.tool.manage_tween.desc":"Somente Pro. Criar, reproduzir, pausar e cancelar tweens para animações suaves.","tier.tool.manage_audio.desc":"Somente Pro. Reproduzir, parar, pausar e retomar sons. Configurar listener de áudio.","tier.tool.manage_animation.desc":"Somente Pro. Carregar, reproduzir e parar animações. Consultar tracks de humanoide/controlador.","tier.tool.manage_physics.desc":"Somente Pro. Registrar grupos de colisão, configurar colisão entre grupos, listar grupos.","tier.tool.manage_effects.desc":"Somente Pro. Emitir partículas, limpar todas, alternar ativação de efeitos.","tier.tool.manage_terrain.desc":"Somente Pro. Preencher formas, limpar regiões, substituir materiais, gerenciar cores, ler/escrever voxels, geração procedural, suavização.","tier.tool.spatial_query.desc":"Somente Pro. Raycast, encontrar chão, verificar posicionamento, varredura de área, encontrar áreas planas e pontos de spawn, análise de caminhabilidade, mapa espacial, detecção de colisão.","tier.tool.manage_assets.desc":"Somente Pro. Inserir modelos, consultar info de assets, buscar na loja de criadores, inserir modelos/pacotes gratuitos, exportar.","tier.tool.manage_sync.desc":"Somente Pro. Estado de sincronização, configuração, histórico, direção, leitura/escrita de arquivos sincronizados.","tier.tool.workspace_state.desc":"Somente Pro. Sincronização completa, snapshot, mudanças recentes, info de viewport, metadados, gerenciamento de cache.","tier.tool.manage_logs.desc":"Consulta filtrada de logs, sondagem incremental, limpar buffer, consulta de erros recentes.","tier.tool.system_info.desc":"Estado de conexão, verificação de tier. Pro: info do lugar, lista de serviços, configurações do Studio, controle de playtest, testes automáticos.","tier.tool.manage_studio.desc":"Somente Pro. Alterna ajustes de visualização do editor do Studio, como preview de UI, para capturas e QA; altera a sessão do Studio, não objetos de UI do jogo.","tier.tool.batch_execute.desc":"Somente Pro. Executar múltiplos comandos em lote. Processamento sequencial com opção de continuar em caso de erro.","tier.tool.execute_luau.desc":"Somente Pro. Executar código Luau arbitrário no sandbox do Roblox Studio.","connection.server.title":"Status do Bridge","connection.server.version":"Versão","connection.server.version.tooltip":"Versão do runtime do WEPPY Bridge.","connection.server.pid":"PID","connection.server.pid.tooltip":"Identificador de processo do sistema operacional.","connection.server.uptime":"Tempo ativo","connection.server.uptime.tooltip":"Tempo decorrido desde que o WEPPY Bridge foi iniciado.","connection.server.session":"Sessão","connection.server.session.tooltip":"Identificador da sessão atual do WEPPY Bridge.","connection.server.exec":"Executável","connection.server.exec.tooltip":"Caminho do executável usado para iniciar o WEPPY Bridge.","connection.server.restart":"Reiniciar Bridge","connection.server.restarting":"Reiniciando…","connection.server.restartUnavailable":"Conecte pelo menos um Agente de IA para que o MCP Adapter possa iniciar o novo Bridge.","connection.server.restartTitle":"Reiniciar o WEPPY Bridge?","connection.server.restartMessage":"O Dashboard e os destinos do Studio serão desconectados por alguns instantes. O resultado de comandos em andamento pode ficar indeterminado, e sessões de Playtest ativas ou controles pendentes serão limpos. Um MCP Adapter conectado iniciará automaticamente um novo Bridge.","connection.server.restartConfirm":"Reiniciar Bridge","connection.server.restartRequesting":"Solicitando reinício do Bridge…","connection.server.restartReconnecting":"Reconectando ao WEPPY Bridge…","connection.server.restartWaiting":"O Dashboard e o Studio serão reconectados automaticamente quando o novo Bridge estiver pronto.","connection.server.restartSucceeded":"WEPPY Bridge reiniciado","connection.server.restartFailed":"Não foi possível reiniciar o WEPPY Bridge","connection.server.restartTimeout":"O novo Bridge não ficou pronto a tempo. Verifique a conexão MCP na sua ferramenta de IA e tente novamente.","connection.server.restartStale":"O Bridge mudou antes de a solicitação ser aceita. Atualize o status atual e tente novamente.","connection.reconnect":"Reconectar","connection.checkSettings":"Verificar configurações","connection.agents.title":"Agentes IA","connection.agents.name":"Agente","connection.agents.version":"Versão","connection.agents.version.tooltip":"Versão do pacote MCP Adapter desta sessão do agente.","connection.agents.cwd":"Diretório","connection.agents.cwd.tooltip":"Diretório de trabalho atual do agente de IA conectado.","connection.agents.projectRoot":"Raiz do Projeto","connection.agents.projectRoot.tooltip":"Caminho do projeto autoritativo para propriedade de sincronização","connection.agents.projectRoot.unresolved":"Não resolvido","connection.agents.connected":"Conectado","connection.agents.unknown":"Desconhecido","connection.agents.none":"Nenhum agente conectado","connection.plugins.title":"Plugins","connection.plugins.place":"Place","connection.plugins.clientId":"Connection ID","connection.plugins.clientId.tooltip":"Full connection ID for diagnostics","connection.plugins.lastSeen":"Última vez","connection.plugins.lastSeen.tooltip":"Heartbeat mais recente recebido do plugin.","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Versão instalada do plugin reportada pelo Studio.","connection.plugins.none":"Nenhum plugin conectado","connection.targets.title":"Studio Targets","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"Short name for this Roblox Studio window","connection.targets.place":"Place","connection.targets.placeId":"Place ID","connection.targets.placeId.tooltip":"Roblox Place ID for this Studio window","connection.targets.clientId":"Connection ID","connection.targets.clientId.tooltip":"Full connection ID for diagnostics. Usually use Studio ID instead.","connection.targets.session":"Session","connection.targets.session.tooltip":"Command channel state for this Studio target","connection.targets.lastUsed":"Last Used","connection.targets.lastUsed.tooltip":"Most recent plugin-route request routed to this Studio target","connection.targets.lastSeen":"Last Seen","connection.targets.lastSeen.tooltip":"Most recent heartbeat received from this Studio target","connection.targets.version":"Version","connection.targets.version.tooltip":"Installed plugin version reported by Studio","connection.targets.routing":"Routing","connection.targets.routing.tooltip":"Default Studio window when the agent does not name one","connection.targets.inFlight":"In Flight","connection.targets.inFlight.tooltip":"Active command request currently routed to this Studio target","connection.targets.studioState":"Studio State","connection.targets.studioState.tooltip":"Current edit/play runtime state reported by this Studio window","connection.targets.studioState.edit":"Edit","connection.targets.studioState.running":"Running","connection.targets.studioState.paused":"Paused","connection.targets.studioState.unknown":"Unknown","connection.targets.studioState.source.thread":"WEPPY play command","connection.targets.studioState.source.pluginConnection":"Conexão Play/Test do Studio","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"Unknown source","connection.targets.studioState.updatedUnknown":"not reported","connection.targets.copyPlaceId":"Copy Place ID","connection.targets.copyTargetAlias":"Copy Studio ID","connection.targets.copyClientId":"Copy Connection ID","connection.targets.copied":"Copied value","connection.targets.copyFailed":"Failed to copy value","connection.targets.none":"No Studio targets connected. Open Roblox Studio and connect WEPPY Plugin.","connection.targets.help":"When multiple Studio windows are connected, tell the agent to use Studio ID studio-1 to choose one.","connection.topology.ariaLabel":"Connection topology","connection.topology.title":"Connection topology","connection.topology.description":"Cada agente de IA se conecta por seu MCP Adapter ao WEPPY Bridge compartilhado, que mantém a conexão com o Roblox Studio.","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"Active","connection.topology.stale":"Stale","connection.topology.unknown":"Unknown","connection.topology.lastContact":"Último contato","connection.topology.noContact":"Sem contato recente","connection.topology.versionUnknown":"Version unknown","connection.topology.placeUnknown":"Place unknown","connection.topology.moreAgents":"+{count} more agents","connection.topology.moreStudios":"+{count} more studios","connection.topology.allAgentsVisible":"All agents visible","connection.topology.allStudiosVisible":"All studios visible","connection.topology.showAll":"Show all","connection.topology.showLess":"Show less","connection.topology.showAllAgents":"Show all AI agents","connection.topology.showAllStudios":"Show all Studio targets","connection.topology.showLessAgents":"Show less AI agents","connection.topology.showLessStudios":"Show less Studio targets","connection.routing.updateFailed":"Failed to update routing target","connection.log.title":"Log de conexão","connection.log.empty":"Nenhum evento","connection.time.secondsAgo":"s atrás","connection.time.minutesAgo":"min atrás","connection.time.hoursAgo":"h atrás","common.loading":"Carregando...","common.retry":"Tentar novamente","common.reconnecting":"Reconectando...","common.expand":"Expandir","common.collapse":"Recolher","tools.tab.history":"Histórico","tools.tab.statistics":"Estatísticas","tools.tab.failures":"Falhas","tools.col.time":"Hora","tools.col.time.tooltip":"Momento em que a execução da ferramenta foi registrada.","tools.col.toolAction":"Ferramenta.Ação","tools.col.toolAction.tooltip":"Nome da ferramenta e ação executada.","tools.col.duration":"Duração","tools.col.duration.tooltip":"Quanto tempo a ferramenta levou para terminar.","tools.col.status":"Status","tools.col.status.tooltip":"Resultado da execução registrada da ferramenta.","tools.col.tier":"Nível","tools.col.tier.tooltip":"Nível de licença exigido para a ferramenta ou ação.","tools.col.tierStats.tooltip":"Resumo Basic, Pro ou Mixed para esta linha de estatísticas da ferramenta.","tools.col.tool":"Ferramenta","tools.col.tool.tooltip":"Nome da ferramenta consolidada na tabela de estatísticas.","tools.col.calls":"Chamadas","tools.col.calls.tooltip":"Número total de chamadas registradas para esta ferramenta.","tools.col.ok":"OK","tools.col.ok.tooltip":"Número de execuções bem-sucedidas diretas.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Número de execuções que tiveram sucesso por fallback.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Número de execuções bloqueadas sem fallback.","tools.col.warn":"WARN","tools.col.warn.tooltip":"Número de falhas esperadas causadas por entrada, estado do projeto, política do Roblox ou código do usuário.","tools.col.err":"FALHOU","tools.col.err.tooltip":"Número de execuções que terminaram em falha.","tools.col.okRate":"% Sucesso","tools.col.okRate.tooltip":"Percentual de chamadas que terminaram com sucesso.","tools.col.avgTime":"Tempo médio","tools.col.avgTime.tooltip":"Tempo médio de execução entre as chamadas registradas.","tools.col.error":"Erro","tools.filter.tool":"Ferramenta","tools.filter.all":"Todos","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Esta entrada usou uma ferramenta ou ação exclusiva do Pro.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"A ação Pro solicitada teve sucesso por meio de um fallback Basic.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"A ação Pro solicitada foi bloqueada e nenhum fallback foi executado.","tools.badge.warn":"WARN","tools.badge.warn.tooltip":"A chamada falhou por um problema esperado de entrada, projeto, política ou código de usuário.","tools.badge.err":"FALHOU","tools.badge.err.tooltip":"A execução da ferramenta falhou.","tools.status.ok":"OK","tools.status.ok.tooltip":"A execução da ferramenta terminou com sucesso.","tools.tier.mixed.tooltip":"Esta ferramenta inclui ações Basic e Pro.","tools.detail.params":"Parâmetros","tools.detail.params.tooltip":"Parâmetros de entrada enviados nesta execução da ferramenta.","tools.detail.result":"Resultado","tools.detail.result.tooltip":"Payload de resultado retornado por esta execução da ferramenta.","tools.detail.requestedCommand":"Comando enviado","tools.detail.executedCommand":"Comando executado","tools.detail.alternatives":"Alternativas","tools.detail.blockedMessage":"Motivo do bloqueio","tools.detail.noFallback":"Sem fallback","tools.detail.noFallback.value":"Nenhum fallback foi executado.","tools.detail.warningMessage":"Mensagem de aviso","tools.detail.errorMessage":"Mensagem de erro","tools.detail.open":"Detalhes","tools.detail.openLabel":"Ver detalhes de {command}","tools.detail.dialogLabel":"Detalhes da execução da ferramenta","tools.detail.title":"Execução da ferramenta","tools.history.routing":"Routing","tools.history.routing.mode":"Mode","tools.history.routing.requested":"Requested","tools.history.routing.actual":"Actual","tools.history.routing.none":"No Studio target named","tools.clear.history.title":"Limpar histórico?","tools.clear.history.message":"Isso remove permanentemente o histórico de ferramentas do place atual.","tools.clear.statistics.title":"Limpar estatísticas?","tools.clear.statistics.message":"Isso redefine permanentemente as estatísticas de ferramentas do place atual.","tools.detail.error":"Erro","tools.page.prev":"Anterior","tools.page.prev.tooltip":"Ir para a página anterior do histórico de ferramentas.","tools.page.next":"Próximo","tools.page.next.tooltip":"Ir para a próxima página do histórico de ferramentas.","tools.empty.history":"Nenhuma entrada no histórico","tools.empty.stats":"Sem estatísticas","tools.empty.failures":"Sem falhas","tools.summary.total":"Total","tools.summary.calls":"chamadas","tools.summary.sessions":"Sessões","settings.license.title":"Licença","settings.license.title.tooltip":"Status atual da licença e nível de assinatura.","settings.license.status":"Status","settings.license.status.tooltip":"Estado atual de ativação da licença.","settings.license.tier":"Nível","settings.license.tier.tooltip":"Nível de assinatura atual para os recursos disponíveis do WEPPY Dashboard.","settings.license.key":"Chave","settings.license.key.tooltip":"Chave de licença mascarada atualmente carregada pelo servidor.","settings.license.keyValue.tooltip":"Chave de licença mascarada atualmente carregada pelo servidor.","settings.license.provider":"Provedor","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"Provedor de licença usado para validar esta chave.","settings.license.providerValue.tooltip":"Provedor de licença usado para validar esta chave.","settings.license.active":"Ativa","settings.license.active.tooltip":"Estado atual de ativação da licença.","settings.license.status.activeCancelPending.tooltip":"O cancelamento está pendente, mas o acesso Pro permanece ativo até o fim do ciclo de cobrança atual.","settings.license.inactive":"Inativa","settings.license.inactive.tooltip":"Estado atual de ativação da licença.","settings.license.expired":"Expirada","settings.license.expired.tooltip":"Estado atual de ativação da licença.","settings.license.unavailable":"Informações de licença indisponíveis","settings.license.detail.cancelPending":"O cancelamento foi agendado. O acesso Pro permanece ativo até o fim do ciclo de cobrança atual.","settings.license.reset":"Redefinir licença","settings.readOnly":"Somente leitura","settings.readOnly.tooltip":"Esta seção mostra valores que não podem ser editados pelo WEPPY Dashboard.","settings.unavailable":"Configurações indisponíveis","settings.general.title":"Configurações gerais","settings.general.title.tooltip":"Configurações quentes que são aplicadas imediatamente ao mudar.","settings.general.liveApply":"Aplicar ao vivo","settings.general.liveApply.tooltip":"As mudanças nesta seção são aplicadas imediatamente sem um botão separado de salvar.","settings.general.applied":"Aplicado","settings.general.logLevel":"Nível de log","settings.general.logLevel.tooltip":"Define quanto detalhe o WEPPY Dashboard escreve nos logs.","settings.general.localHistory":"Registro de histórico","settings.general.localHistory.tooltip":"Armazena o histórico local de execução de ferramentas para as telas de histórico do WEPPY Dashboard.","settings.general.localStatistics":"Coleta de estatísticas","settings.general.localStatistics.tooltip":"Agrega estatísticas locais de uso para os relatórios do WEPPY Dashboard.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WEPPY Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"Tempo limite","settings.general.requestTimeout.tooltip":"Tempo máximo que o WEPPY Dashboard espera uma ação antes de falhar.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"O tempo limite da ação é medido em milissegundos.","settings.cold.title":"Ambiente do servidor","settings.cold.title.tooltip":"Valores de ambiente do servidor somente leitura carregados na inicialização.","settings.cold.httpPort.tooltip":"Número da porta usada pelo servidor HTTP do WEPPY Dashboard MCP.","settings.cold.httpHost.tooltip":"Interface de host à qual o servidor HTTP do WEPPY Dashboard MCP se vincula.","settings.cold.hint":"Configure via variáveis de ambiente.","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"Escolha como o WEPPY Dashboard se comporta quando o servidor MCP inicia.","settings.dashboard.nextStartBadge":"Próxima inicialização","settings.dashboard.autoOpen.label":"Abrir o Dashboard ao iniciar o WEPPY","settings.dashboard.autoOpen.description":"Abre este Dashboard automaticamente após o servidor MCP iniciar.","settings.dashboard.autoOpen.nextStart":"Será aplicado na próxima inicialização do servidor MCP.","settings.dashboard.settingsFile.label":"Arquivo de configuração","settings.dashboard.agentExample.label":"Peça ao seu Agent","settings.dashboard.agentExample.prompt":"“Desative a abertura automática do Dashboard”.","settings.dashboard.autoOpen.saving":"Salvando…","settings.dashboard.autoOpen.saved":"Salvo para a próxima inicialização do servidor.","settings.dashboard.autoOpen.error":"Não foi possível salvar. A opção anterior foi restaurada.","dashboardAutoOpenGuide.eyebrow":"Preferência do Dashboard","dashboardAutoOpenGuide.title":"Escolha como o WEPPY Dashboard será aberto","dashboardAutoOpenGuide.currentOn":"A abertura automática está ativada. Este Dashboard abre após o servidor MCP iniciar.","dashboardAutoOpenGuide.currentOff":"A abertura automática está desativada. O WEPPY não abrirá uma nova aba do Dashboard ao iniciar o servidor MCP.","dashboardAutoOpenGuide.changeAnytime":"Você pode alterar isso a qualquer momento em Settings.","dashboardAutoOpenGuide.agentHint":"Você também pode pedir ao Agent: “Desative a abertura automática do Dashboard”.","dashboardAutoOpenGuide.statusOn":"Abertura automática ativada","dashboardAutoOpenGuide.statusOff":"Abertura automática desativada","dashboardAutoOpenGuide.keep":"Manter opção atual","dashboardAutoOpenGuide.turnOff":"Desativar abertura automática","dashboardAutoOpenGuide.openSettings":"Abrir Settings","dashboardAutoOpenGuide.close":"Fechar guia de abertura automática","dashboardAutoOpenGuide.saving":"Salvando…","dashboardAutoOpenGuide.error":"Não foi possível salvar sua escolha. Tente novamente.","settings.language.title":"Idioma","settings.language.title.tooltip":"Escolha como o texto da interface do WEPPY Dashboard é localizado.","settings.language.dashboard":"Idioma do WEPPY Dashboard","settings.language.dashboard.tooltip":"Substitui o idioma do WEPPY Dashboard ou segue o idioma do sistema quando definido como Automático.","settings.language.auto":"Automático","overview.l0.title":"Servidor MCP desconectado","overview.l0.message":"O servidor MCP não está respondendo. O WEPPY Dashboard tentará reconectar automaticamente.","overview.l0.step1":"Verifique se o processo do servidor MCP está em execução","overview.l0.step2":"Reinicie o comando do servidor MCP se necessário","overview.l0.reconnecting":"Reconectando automaticamente a cada 3s...","overview.l0.reconnectBtn":"Reconectar","overview.l0.settingsBtn":"Verificar configurações","overview.l1.pluginGuide":"O plugin do Roblox Studio não está conectado","overview.l1.check1":"O Roblox Studio está aberto?","overview.l1.check2":"O WEPPY Plugin está instalado?","overview.l1.feedHint":"As alterações aparecerão aqui quando o plugin se conectar","overview.metric.server":"Servidor","overview.metric.server.tooltip":"Status de execução e processo do servidor MCP.","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Status de conexão e versão do plugin do Roblox Studio.","overview.metric.agent":"Agente","overview.metric.agent.tooltip":"Agentes de IA conectados e seu estado atual.","overview.metric.agent.instancesUnit":"instâncias","overview.metric.sync":"Sincronização","overview.metric.sync.tooltip":"Atividade atual de sincronização entre Studio e arquivos locais.","overview.metric.noAgent":"Sem agente","overview.meta.version":"Versão","overview.meta.version.tooltip":"Versão instalada do servidor MCP.","overview.meta.session":"Sessão","overview.meta.session.tooltip":"Identificador da sessão MCP atual.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Identificador de processo do sistema operacional.","overview.meta.uptime":"Tempo ativo","overview.meta.uptime.tooltip":"Tempo decorrido desde que o servidor MCP foi iniciado.","overview.feed.title":"Alterações recentes do jogo","overview.feed.empty":"Sem alterações recentes","overview.changelog.title":"Resumo de alterações da sessão","overview.changelog.entries":"Total","overview.changelog.scripts":"scripts","overview.changelog.instances":"instâncias","overview.changelog.properties":"propriedades","overview.changelog.assets":"assets","overview.tier.title":"Uso por nível","changelog.subtitle":"Histórico de alterações do jogo","changelog.filter.all":"Todos","changelog.filter.active":"Ativo","changelog.filter.completed":"Concluído","changelog.empty":"Nenhuma entrada no histórico","changelog.basic.limit.title":"A prévia Basic mostra apenas as 3 sessões mais recentes","changelog.basic.limit.body":"Faça upgrade para Pro para navegar pela linha do tempo completa do changelog deste place.","changelog.basic.metricLabel":"Changelog visível / Total","changelog.basic.visible":"visíveis","changelog.basic.total":"total","changelog.card.active":"Ativo","changelog.card.active.tooltip":"Esta sessão ainda está recebendo novas alterações do jogo.","changelog.card.completed":"Concluído","changelog.card.completed.tooltip":"Esta sessão terminou e não deve receber mais alterações.","changelog.card.bootstrapStatus":"Inicialização","changelog.card.bootstrapStatus.tooltip":"Esta sessão contém apenas o snapshot inicial de bootstrap da sincronização.","changelog.card.inProgress":"em andamento","changelog.card.noChanges":"Sem alterações ainda","changelog.card.noChanges.tooltip":"Ainda não foram extraídas alterações do jogo para esta sessão.","changelog.card.bootstrapSummary":"Snapshot de sincronização inicial","changelog.card.bootstrapSummary.tooltip":"As gravações da sincronização inicial de arquivos são condensadas em uma única linha de snapshot bootstrap.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"scripts","changelog.card.scripts.tooltip":"Alterações de script feitas nesta sessão.","changelog.card.instances":"instâncias","changelog.card.instances.tooltip":"Alterações de criação, exclusão, movimentação ou clonagem de instâncias nesta sessão.","changelog.card.modified":"modificado","changelog.card.created":"criado","changelog.card.deleted":"excluído","changelog.card.moved":"movido","changelog.card.propertiesChanged":"propriedades alteradas","changelog.card.propertiesChanged.tooltip":"Alterações de valores de propriedades registradas para esta sessão.","changelog.card.lightingConfigured":"Iluminação configurada","changelog.card.lightingConfigured.tooltip":"A iluminação ou a atmosfera foram alteradas nesta sessão.","changelog.card.terrainConfigured":"Terreno configurado","changelog.card.terrainConfigured.tooltip":"Os dados ou as configurações de terreno foram alterados nesta sessão.","changelog.card.assetsInserted":"assets inseridos","changelog.card.assetsInserted.tooltip":"Assets inseridos no place durante esta sessão.","changelog.category.script":"Scripts","changelog.category.instance":"Instâncias","changelog.category.property":"Propriedades","changelog.category.lighting":"Iluminação","changelog.category.terrain":"Terreno","changelog.category.asset":"Assets","changelog.detail.dialogLabel":"Detalhes do histórico de alterações","changelog.detail.changeSummary":"Resumo de alterações","changelog.detail.changeSummary.tooltip":"Contagem de alterações do jogo extraídas e agrupadas por categoria nesta sessão.","changelog.detail.changeTimeline":"Linha do tempo","changelog.detail.changeTimeline.tooltip":"Lista cronológica das alterações do jogo extraídas para esta sessão.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Antes e depois","changelog.detail.filterCategory":"Categoria","changelog.detail.filterCategory.tooltip":"Filtra a linha do tempo para uma única categoria de alteração.","changelog.detail.confidence.exact":"Exato","changelog.detail.confidence.exact.tooltip":"Os estados antes e depois desta alteração foram confirmados.","changelog.detail.confidence.partial":"Parcial","changelog.detail.confidence.partial.tooltip":"Apenas parte dos estados antes e depois desta alteração pôde ser confirmada.","changelog.detail.confidence.afterOnly":"Somente depois","changelog.detail.confidence.afterOnly.tooltip":"Apenas o estado resultante após a alteração pôde ser confirmado.","changelog.detail.confidence.intentOnly":"Somente intenção","changelog.detail.confidence.intentOnly.tooltip":"Apenas a ação solicitada foi registrada, não o estado resultante.","changelog.detail.confidence.unknown":"Desconhecido","changelog.detail.confidence.unknown.tooltip":"Não foi possível classificar esta alteração com confiança a partir dos dados disponíveis.","changelog.detail.noChanges":"Sem alterações nesta categoria","changelog.detail.backToList":"Voltar à lista","changelog.diff.empty":"Sem diferenças disponíveis","changelog.diff.unified":"Unificado","changelog.diff.sideBySide":"Lado a lado","changelog.diff.before":"Antes","changelog.diff.after":"Depois","sync.targets.title":"Studios conectados","sync.targets.refresh":"Atualizar","sync.targets.loading":"Carregando o estado do Sync do Studio…","sync.targets.unavailable":"O estado do Sync do Studio está indisponível. Tente novamente.","sync.targets.empty":"Nenhum Studio conectado. Conecte o WEPPY Plugin para ver o Sync ao vivo.","sync.targets.unknownPlace":"Place desconhecido","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"Conectado","sync.targets.notReported":"Ainda não informado","sync.targets.state.unknown":"Desconhecido","sync.targets.state.off":"Sync desligado","sync.targets.state.idle":"Sync ligado · aguardando","sync.targets.state.initializing":"Inicializando","sync.targets.state.syncing":"Sincronizando","sync.targets.state.paused":"Pausado","sync.targets.state.error":"Erro","sync.forwardStatus.label":"Envio de alterações","sync.forwardStatus.tooltip":"Indica se alterações do Edit podem ser enviadas. Ativo não garante que todos os arquivos locais estejam atualizados.","sync.forwardStatus.inactive":"Desativado","sync.forwardStatus.active":"Ativo","sync.forwardStatus.paused_play":"Pausado durante Play","sync.forwardStatus.reconciling":"Verificando alterações do Edit","sync.forwardStatus.blocked":"Requer atenção","sync.forwardStatus.unknown":"Desconhecido","sync.forwardStatus.observedAt":"Observado","sync.forwardStatus.reason.review":"Revise as alterações no Studio Plugin.","sync.forwardStatus.reason.editChanged":"O Edit mudou durante a verificação. Confira o Sync no Studio Plugin.","sync.forwardStatus.reason.failed":"Não foi possível confirmar as alterações. Confira o Sync no Studio Plugin.","sync.forwardStatus.reason.fallback":"Confira os detalhes no Studio Plugin.","sync.stored.title":"Places salvos","sync.stored.data":"Dados salvos","sync.stored.ambiguous":"Local de armazenamento não confirmado","sync.detail.scope":"Exibindo detalhes do Sync de","sync.detail.readOnly":"A consulta não altera o roteamento do Studio.","sync.detail.empty":"Selecione um Studio conectado ou Place salvo.","sync.detail.unknown":"Este Studio ainda não informou seu estado de Sync.","sync.detail.error":"O Sync informou um erro. Veja os detalhes no Studio Plugin.","sync.detail.placeFolder":"Pasta do Place","sync.detail.placeFolder.tooltip":"Pasta compartilhada pelos Studios que abrem este Place.","sync.detail.sharedData":"Caminho, contagens e log pertencem ao Place e são compartilhados por seus Studios.","sync.log.shared":"Log compartilhado do Place","sync.log.unsafe":"O local de armazenamento não foi confirmado para acessar o log.","sync.log.unavailable":"Não foi possível carregar o log do Place. Tente novamente.","sync.log.loading":"Carregando log do Place…","sync.clear.selectedMessage":"Isso remove permanentemente o log compartilhado de Sync de {place}.","sync.overlay.title":"Plugin do Roblox Studio necessário","sync.overlay.message":"O status de sincronização estará disponível quando o plugin do Roblox Studio se conectar.","sync.overlay.check1":"O Roblox Studio está aberto?","sync.overlay.check2":"O WEPPY Plugin está instalado?","sync.status.title":"Status de sincronização","sync.status.title.tooltip":"Status atual de sincronização entre o Studio e os arquivos locais deste place.","sync.status.forwardOnly":"Somente avanço","sync.status.forwardOnly.tooltip":"O tier Basic permite apenas sincronização direta do Studio para o local.","sync.status.place":"Place","sync.status.place.tooltip":"Nome e ID do place do Roblox atualmente conectado.","sync.status.path":"Caminho","sync.status.path.tooltip":"Raiz do sistema de arquivos local usada atualmente para a saída de sincronização.","sync.status.instances":"Instâncias","sync.status.instances.tooltip":"Total de instâncias do Roblox sincronizadas no espelho local.","sync.status.scripts":"Scripts","sync.status.scripts.tooltip":"Total de arquivos de script atualmente indexados para este place.","sync.status.state":"Estado","sync.status.state.tooltip":"Estado atual de execução da sincronização informado pelo servidor.","sync.policy.title":"Política de Sync","sync.policy.title.tooltip":"Política efetiva de Sync informada pelo plugin do Studio conectado.","sync.policy.activation":"Ativação","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"Fluxo de trabalho","sync.policy.preset.studio_first":"Studio primeiro","sync.policy.preset.bidirectional_review":"Bidirecional","sync.policy.preset.local_code_studio_world":"Código local, mundo no Studio","sync.policy.preset.custom":"Personalizado","sync.policy.apply.title":"Como as alterações locais são aplicadas ao Studio","sync.policy.apply.description":"Mostra se as alterações locais serão revisadas primeiro ou aplicadas automaticamente ao Studio.","sync.policy.apply.content":"Mudanças de conteúdo","sync.policy.apply.content.tooltip":"Alterações locais de Código Script, propriedades e propriedades de serviços. Criar, excluir, renomear e mover são alterações de estrutura.","sync.policy.apply.structure":"Mudanças de estrutura","sync.policy.apply.structure.tooltip":"Criação, exclusão, renomeação e movimentação locais de instâncias. A exclusão local automática também exige a opção de exclusão separada abaixo.","sync.policy.apply.manual":"Revisar primeiro","sync.policy.apply.auto":"Aplicar automaticamente","sync.policy.scope.disclosure":"Direções por escopo","sync.policy.scope.scriptSource":"Código dos scripts","sync.policy.scope.properties":"Propriedades","sync.policy.scope.structure":"Estrutura","sync.policy.scope.serviceProperties":"Propriedades dos serviços","sync.policy.endpoint.local":"Local","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → Local","sync.policy.direction.forward.tooltip":"As mudanças do Studio são gravadas nos arquivos locais.","sync.policy.direction.reverse":"Local → Studio","sync.policy.direction.reverse.tooltip":"As mudanças dos arquivos locais são aplicadas ao Studio.","sync.policy.direction.bidirectional":"Nos dois sentidos","sync.policy.direction.bidirectional.tooltip":"As mudanças podem ir do Studio para os arquivos locais e dos arquivos locais para o Studio.","sync.policy.safety.localDeletes":"Exclusão local → excluir instância do Studio","sync.policy.safety.review":"Revisar antes de excluir","sync.policy.safety.review.tooltip":"As exclusões de arquivos locais aguardam revisão antes de remover as instâncias correspondentes do Studio. Isso é separado da limpeza automática do UI Studio.","sync.policy.safety.auto":"Exclusão automática no Studio","sync.policy.safety.auto.tooltip":"Excluir arquivos locais pode remover automaticamente as instâncias correspondentes do Studio. Isso é separado da limpeza automática do UI Studio.","sync.policy.reviewRequired":"Revise esta política no plugin do Studio antes de iniciar o Sync.","sync.log.title":"Log de sincronização","sync.log.empty":"Sem eventos de sincronização","sync.log.type.write":"ESCREVER","sync.log.type.write.tooltip":"Uma nova saída de sincronização foi gravada no disco.","sync.log.type.update":"ATUALIZAR","sync.log.type.update.tooltip":"Um arquivo ou uma instância já sincronizada foi atualizada.","sync.log.type.delete":"EXCLUIR","sync.log.type.delete.tooltip":"Um arquivo ou uma instância sincronizada foi removida.","sync.log.type.idle":"OCIOSO","sync.log.type.idle.tooltip":"Um evento de sincronização foi registrado sem alterar arquivos.","sync.upgrade.title":"Veja a sincronização completa com Pro","sync.upgrade.benefit1":"Sincronização bidirecional — edite arquivos, aplicação automática no Studio","sync.upgrade.benefit2":"Sincronização reversa — envie alterações de arquivos para o Studio","sync.upgrade.benefit3":"Histórico completo de sincronização e registro detalhado de alterações","sync.upgrade.buy":"Ver Pro","playtest.status.title":"Status de teste","playtest.status.title.tooltip":"Estado atual da sessão de playtest do Roblox informado pelo Studio.","playtest.status.mode":"Modo","playtest.status.mode.tooltip":"Modo de inicialização do playtest do Studio para a sessão atual.","playtest.status.mode.value.tooltip":"Modo específico de playtest do Roblox Studio atualmente em uso.","playtest.status.mode.play":"Jogar","playtest.status.mode.run":"Executar","playtest.status.mode.server":"Servidor","playtest.status.mode.edit":"Editar","playtest.status.place.tooltip":"Place do Roblox atualmente associado a esta sessão de playtest.","playtest.status.state.running":"Executando","playtest.status.state.running.tooltip":"Uma sessão de playtest do Roblox está em execução no momento.","playtest.status.state.paused":"Pausado","playtest.status.state.paused.tooltip":"A sessão atual de playtest do Roblox está pausada.","playtest.status.state.notRunning":"Não está em execução","playtest.status.state.notRunning.tooltip":"Nenhuma sessão de playtest do Roblox está em execução no momento.","playtest.control.play":"Jogar","playtest.control.pause":"Pausar","playtest.control.resume":"Retomar","playtest.control.stop":"Parar","playtest.history.title":"Histórico de testes","playtest.history.search":"Pesquisar resultados de teste","playtest.history.filter":"Resultado","playtest.history.filterAll":"Todos os resultados","playtest.history.filteredCount":"{{visible}} de {{total}} resultados","playtest.history.title.tooltip":"Execuções automatizadas de playtest registradas para este projeto.","playtest.history.empty":"Sem resultados de teste","playtest.history.mode":"Modo","playtest.history.mode.tooltip":"Modo de playtest usado nesta execução de teste registrada.","playtest.history.status.passed":"Aprovado","playtest.history.status.failed":"Falhou","playtest.history.status.running":"Executando","playtest.history.status.unknown":"Desconhecido","playtest.history.status.tooltip":"Estado de resultado registrado para esta execução automatizada de playtest.","playtest.empty.title":"Sem resultados de teste ainda","playtest.empty.message":"Os resultados aparecerão aqui depois que o agente de IA executar um Playtest.","playtest.empty.message.before":"Os resultados aparecerão aqui depois que o agente de IA executar um Playtest.","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"Ask the AI Agent to run a Playtest when you need a fresh report.","playtest.report.title":"Relatório selecionado","playtest.report.title.tooltip":"Saída detalhada da execução automatizada de playtest atualmente selecionada.","playtest.detail.dialogLabel":"Detalhes do relatório de playtest","playtest.detail.loading":"Carregando relatório...","playtest.detail.errorTitle":"Relatório indisponível","playtest.report.content":"Relatório","playtest.report.content.tooltip":"Resumo em Markdown da execução automatizada de playtest selecionada.","playtest.report.logs":"Logs","playtest.report.logs.tooltip":"Logs de execução capturados para a execução automatizada de playtest selecionada.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"Sem conteúdo de relatório","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest é uma função exclusiva do Pro","playtest.basic.desc":"Controle os testes pelo WEPPY Dashboard, execute testes automatizados e visualize relatórios detalhados.","playtest.basic.benefit1":"Controles de jogar/pausar/parar com um clique","playtest.basic.benefit2":"Execução de testes automatizados via agente IA","playtest.basic.benefit3":"Histórico de testes com rastreamento de sucesso/falha","playtest.basic.benefit4":"Relatórios de teste detalhados em markdown","playtest.sample.badge":"Prévia da tela de playtest Pro","playtest.sample.title":"Você está vendo uma prévia da tela de playtest disponível após o upgrade para Pro.","playtest.sample.message":"Esta prévia usa dados de exemplo. Controle de playtest ao vivo, gerenciamento de histórico e relatórios reais são liberados com Pro.","playtest.sample.clearDisabled":"Faça upgrade para Pro para limpar o histórico real de playtest.","playtest.sample.place":"Prévia da Arena","playtest.sample.history.name":"Teste de fumaça da Arena de exemplo","playtest.sample.context.why":"Entrar na arena, sobreviver à abertura e verificar se o HUD responde imediatamente.","playtest.sample.context.expected":"O jogador surge com segurança, a contagem regressiva do HUD aparece em um segundo e a primeira onda começa sem erros.","playtest.sample.context.observed":"A proteção de spawn funcionou, o HUD atualizou no tempo certo e a primeira onda terminou sem regressões.","playtest.sample.report.markdown":`# Teste de fumaça da Arena de exemplo
131
+ - Informe a localização do código, os arquivos alterados, os perfis que o utilizam, o comportamento de cleanup e o que devo conferir manualmente antes de publicar.`,"sidebar.overview":"Visão Geral","sidebar.changelog":"Histórico","sidebar.connection":"Conexão","sidebar.sync":"Sincronização","sidebar.playtest":"Teste","sidebar.tools":"Ferramentas","sidebar.settings":"Configurações","sidebar.ui_studio":"UI Studio","sidebar.gate.l1":"É necessária conexão com o servidor MCP.","sidebar.gate.l2":"É necessária conexão com o plugin do Roblox Studio.","header.currentProject":"Projeto atual","header.unknownProject":"Projeto desconhecido","header.projectRoot.label":"Project Root","header.currentProject.loading":"Carregando raiz do projeto...","header.currentProject.unavailable":"Raiz do projeto indisponível","header.placeNotConnected":"Place não conectado","header.currentProject.tooltip":"Pasta do projeto atualmente selecionada.","header.currentProject.loading.tooltip":"As informações da raiz do projeto ainda estão carregando.","header.currentProject.unavailable.tooltip":"As informações atuais da raiz do projeto estão indisponíveis.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Carregando sync root...","header.currentProjectSyncRoot.unavailable":"Sync root indisponível","header.currentProjectSyncRoot.tooltip":"Pasta sync root atual do projeto selecionado.","header.currentProjectSyncRoot.loading.tooltip":"As informações de sync root ainda estão carregando.","header.currentProjectSyncRoot.unavailable.tooltip":"As informações atuais de sync root estão indisponíveis.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"O caminho dos arquivos de teste está indisponível.","header.testFiles.tooltip":"Diretório atual dos arquivos de playtest para o place selecionado.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Conexão do plugin necessária","header.places.liveRequired":"A conexão do plugin é necessária para ver o place ativo em tempo real.","header.place.tooltip":"Place do Roblox conectado.","header.placeNotConnected.tooltip":"Place não conectado","placeScope.current.label":"Place atual","placeScope.lastActive.label":"Último place ativo","placeScope.selected.label":"Place selecionado","placeScope.unknownPlace":"Place desconhecido","placeScope.live":"Ao vivo","placeScope.connected":"Studio conectado","placeScope.stored":"Dados salvos","placeScope.connectedGroup":"Studios conectados","placeScope.storedGroup":"Dados salvos","placeScope.stored.note":"Este place não está aberto em nenhum Studio conectado no momento.","placeScope.pluginRequired":"Plugin necessário","placeScope.pluginRequired.note":"Conecte o WEPPY Plugin para confirmar o place ativo ao vivo.","placeScope.noPlace.label":"Escopo do place","placeScope.noPlace.value":"Ainda não há dados de place disponíveis","placeScope.noPlace.badge":"Sem place","placeScope.noPlace.note":"Conecte o WEPPY Plugin e sincronize um place para criar dados por place.","placeScope.selected.note":"Mostrando apenas dados salvos. O roteamento do Studio não muda.","placeScope.surface.sync":"O status de sincronização e os logs usam este place.","placeScope.surface.changelog":"As sessões do changelog usam este place.","placeScope.surface.playtest":"Os relatórios de playtest usam este place.","placeScope.surface.uiStudio":"As capturas de UI e o histórico de alterações usam este place.","placeScope.surface.tools":"O histórico e as estatísticas de ferramentas usam este place.","placeScope.loading":"Carregando escopo do place...","placeScope.unavailable":"Escopo do place indisponível","placeScope.selector.label":"Dados do place","placeScope.shortcuts.trigger":"Links rápidos","placeScope.shortcuts.label":"Links do place","placeScope.shortcuts.settings":"Configurações do place","placeScope.shortcuts.experience":"Gerenciar experiência","placeScope.shortcuts.roblox":"Ver no Roblox","placeScope.folder.duplicate":"Pasta duplicada","placeScope.folder.unresolved":"Pasta representativa não confirmada","placeScope.folder.noSyncHistory":"Sem histórico de sincronização","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Detalhes das pastas do Place","placeScope.folder.duplicateReason":"O local de armazenamento atual é {canonicalFolder}. Esta pasta será armazenada como backup após uma sincronização completa bem-sucedida.","placeScope.folder.unresolvedReason":"Este Place continua selecionável por ID, mas nenhuma pasta foi confirmada como representante ainda.","placeScope.folder.unknown":"desconhecido","placeScope.selector.noneSelectable":"Não há pasta de Place selecionável","header.changeProjectRoot":"Alterar raiz do projeto","header.changeProjectRoot.ariaLabel":"Alterar raiz do projeto","header.changeProjectRoot.tooltip":"Altere a raiz atual do projeto.","header.changeProjectRoot.disabledTooltip.l0":"A conexão com o servidor MCP é necessária primeiro para alterar a raiz do projeto.","header.changeProjectRoot.disabledTooltip.loading":"As informações da raiz do projeto ainda estão carregando.","header.changeProjectRoot.disabledTooltip.unavailable":"As informações atuais da raiz do projeto estão indisponíveis.","header.projectRootModal.initial.title":"Alterar raiz do projeto","header.projectRootModal.initial.body.connected":"Depois que você escolher uma pasta de projeto, o MCP mudará para a nova raiz do projeto e o conteúdo atual do Studio será totalmente resincronizado para o novo destino <selected project folder>/weppy-project-sync.","header.projectRootModal.initial.body.disconnected":"Depois que você escolher uma pasta de projeto, o MCP mudará para a nova raiz do projeto e usará <selected project folder>/weppy-project-sync como o próximo destino de sync.","header.projectRootModal.initial.nextSyncRoot":"Novo destino de sync após a seleção","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"O sync atual é interrompido imediatamente.","header.projectRootModal.initial.warningFreshSync":"O conteúdo atual do Studio será usado para criar um fresh full sync no novo destino.","header.projectRootModal.initial.warningNoMove":"Pastas de sync antigas não são movidas automaticamente.","header.projectRootModal.initial.warningDeferredSync":"Se o Studio não estiver conectado, o full resync começará na próxima conexão do plugin.","header.projectRootModal.confirm.title":"Confirmar nova raiz do projeto","header.projectRootModal.confirm.body":"Revise a pasta selecionada antes de aplicar a mudança.","header.projectRootModal.confirm.projectRoot":"Pasta de projeto selecionada","header.projectRootModal.confirm.syncRoot":"Novo destino do sync","header.projectRootModal.confirm.warningNoMove":"Pastas de sync existentes não são movidas automaticamente.","header.projectRootModal.pick":"Escolher pasta","header.projectRootModal.apply":"Aplicar alteração","header.projectRootModal.cancel":"Cancelar","header.projectRootModal.error":"Não foi possível alterar a raiz do projeto.","status.online":"Online","status.offline":"Offline","status.idle":"Ocioso","status.syncing":"Sincronizando","status.error":"Erro","status.initializing":"Inicializando","level.l0.title":"Servidor desconectado","level.l0.message":"O WEPPY Dashboard está aberto mas o servidor MCP parou ou não está respondendo.","level.l1.title":"Servidor conectado","level.l1.hint":"Verifique: O Roblox Studio está aberto? O plugin está instalado?","level.l2.ok":"Studio conectado","tier.basic":"Basic","tier.basic.tooltip":"Tier Basic com o conjunto padrão de recursos do WEPPY Dashboard.","tier.pro":"Pro","tier.pro.tooltip":"Tier Pro com o conjunto completo de recursos do WEPPY Dashboard.","tier.mixed":"Misto","tier.upgrade":"Ver Pro","tier.banner.save":"Economize tokens de IA com Pro!","tier.tool.query_instances.desc":"Consulta de instâncias, exploração de filhos/descendentes, info de classe, busca por nome e classe. Pro: árvore de arquivos, estrutura do projeto, busca por propriedade e tag.","tier.tool.mutate_instances.desc":"Criar, excluir, clonar, mover, renomear e pivotar instâncias. Pro: criação de árvores, criação/exclusão/duplicação em massa.","tier.tool.manage_properties.desc":"Consultar e definir propriedades, atributos e tags. Pro: valores calculados e relativos, consulta/definição em massa, modificação em massa de filhos.","tier.tool.manage_scripts.desc":"Ler, escrever, criar, excluir, editar linhas e buscar em scripts. Pro: substituição em massa entre scripts.","tier.tool.manage_ui.desc":"Somente Pro. Crie ou refine menus, HUDs, botões, labels e painéis de imagem com estilo de jogo; depois capture telas e revise sugestões.","tier.tool.manage_ui.action.design_brief":"Planejar direção da UI","tier.tool.manage_ui.action.create_tree":"Criar nova UI","tier.tool.manage_ui.action.update":"Atualizar UI existente","tier.tool.manage_ui.action.delete":"Remover UI","tier.tool.manage_ui.action.preview":"Capturar tela da UI","tier.tool.manage_ui.action.check":"Revisar sugestões de melhoria","tier.tool.manage_lighting.desc":"Somente Pro. Configuração de iluminação, atmosfera, céu, propriedades do terreno e hora do dia.","tier.tool.manage_selection.desc":"Consultar, definir e limpar seleção. Pro: contexto, detalhes, adicionar/remover itens, monitorar mudanças.","tier.tool.manage_camera.desc":"Info da câmera, focar por caminho ou coordenadas, visualização sugerida.","tier.tool.manage_tween.desc":"Somente Pro. Criar, reproduzir, pausar e cancelar tweens para animações suaves.","tier.tool.manage_audio.desc":"Somente Pro. Reproduzir, parar, pausar e retomar sons. Configurar listener de áudio.","tier.tool.manage_animation.desc":"Somente Pro. Carregar, reproduzir e parar animações. Consultar tracks de humanoide/controlador.","tier.tool.manage_physics.desc":"Somente Pro. Registrar grupos de colisão, configurar colisão entre grupos, listar grupos.","tier.tool.manage_effects.desc":"Somente Pro. Emitir partículas, limpar todas, alternar ativação de efeitos.","tier.tool.manage_terrain.desc":"Somente Pro. Preencher formas, limpar regiões, substituir materiais, gerenciar cores, ler/escrever voxels, geração procedural, suavização.","tier.tool.spatial_query.desc":"Somente Pro. Raycast, encontrar chão, verificar posicionamento, varredura de área, encontrar áreas planas e pontos de spawn, análise de caminhabilidade, mapa espacial, detecção de colisão.","tier.tool.manage_assets.desc":"Somente Pro. Inserir modelos, consultar info de assets, buscar na loja de criadores, inserir modelos/pacotes gratuitos, exportar.","tier.tool.manage_sync.desc":"Somente Pro. Estado de sincronização, configuração, histórico, direção, leitura/escrita de arquivos sincronizados.","tier.tool.workspace_state.desc":"Somente Pro. Sincronização completa, snapshot, mudanças recentes, info de viewport, metadados, gerenciamento de cache.","tier.tool.manage_logs.desc":"Consulta filtrada de logs, sondagem incremental, limpar buffer, consulta de erros recentes.","tier.tool.system_info.desc":"Estado de conexão, verificação de tier. Pro: info do lugar, lista de serviços, configurações do Studio, controle de playtest, testes automáticos.","tier.tool.manage_studio.desc":"Somente Pro. Alterna ajustes de visualização do editor do Studio, como preview de UI, para capturas e QA; altera a sessão do Studio, não objetos de UI do jogo.","tier.tool.batch_execute.desc":"Somente Pro. Executar múltiplos comandos em lote. Processamento sequencial com opção de continuar em caso de erro.","tier.tool.execute_luau.desc":"Somente Pro. Executar código Luau arbitrário no sandbox do Roblox Studio.","connection.server.title":"Status do Bridge","connection.server.version":"Versão","connection.server.version.tooltip":"Versão do runtime do WEPPY Bridge.","connection.server.pid":"PID","connection.server.pid.tooltip":"Identificador de processo do sistema operacional.","connection.server.uptime":"Tempo ativo","connection.server.uptime.tooltip":"Tempo decorrido desde que o WEPPY Bridge foi iniciado.","connection.server.session":"Sessão","connection.server.session.tooltip":"Identificador da sessão atual do WEPPY Bridge.","connection.server.exec":"Executável","connection.server.exec.tooltip":"Caminho do executável usado para iniciar o WEPPY Bridge.","connection.server.restart":"Reiniciar Bridge","connection.server.restarting":"Reiniciando…","connection.server.restartUnavailable":"Conecte pelo menos um Agente de IA para que o MCP Adapter possa iniciar o novo Bridge.","connection.server.restartTitle":"Reiniciar o WEPPY Bridge?","connection.server.restartMessage":"O Dashboard e os destinos do Studio serão desconectados por alguns instantes. O resultado de comandos em andamento pode ficar indeterminado, e sessões de Playtest ativas ou controles pendentes serão limpos. Um MCP Adapter conectado iniciará automaticamente um novo Bridge.","connection.server.restartConfirm":"Reiniciar Bridge","connection.server.restartRequesting":"Solicitando reinício do Bridge…","connection.server.restartReconnecting":"Reconectando ao WEPPY Bridge…","connection.server.restartWaiting":"O Dashboard e o Studio serão reconectados automaticamente quando o novo Bridge estiver pronto.","connection.server.restartSucceeded":"WEPPY Bridge reiniciado","connection.server.restartFailed":"Não foi possível reiniciar o WEPPY Bridge","connection.server.restartTimeout":"O novo Bridge não ficou pronto a tempo. Verifique a conexão MCP na sua ferramenta de IA e tente novamente.","connection.server.restartStale":"O Bridge mudou antes de a solicitação ser aceita. Atualize o status atual e tente novamente.","connection.reconnect":"Reconectar","connection.checkSettings":"Verificar configurações","connection.agents.title":"Agentes IA","connection.agents.name":"Agente","connection.agents.version":"Versão","connection.agents.version.tooltip":"Versão do pacote MCP Adapter desta sessão do agente.","connection.agents.cwd":"Diretório","connection.agents.cwd.tooltip":"Diretório de trabalho atual do agente de IA conectado.","connection.agents.projectRoot":"Raiz do Projeto","connection.agents.projectRoot.tooltip":"Caminho do projeto autoritativo para propriedade de sincronização","connection.agents.projectRoot.unresolved":"Não resolvido","connection.agents.connected":"Conectado","connection.agents.unknown":"Desconhecido","connection.agents.none":"Nenhum agente conectado","connection.plugins.title":"Plugins","connection.plugins.place":"Place","connection.plugins.clientId":"Connection ID","connection.plugins.clientId.tooltip":"Full connection ID for diagnostics","connection.plugins.lastSeen":"Última vez","connection.plugins.lastSeen.tooltip":"Heartbeat mais recente recebido do plugin.","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Versão instalada do plugin reportada pelo Studio.","connection.plugins.none":"Nenhum plugin conectado","connection.targets.title":"Studio Targets","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"Short name for this Roblox Studio window","connection.targets.place":"Place","connection.targets.placeId":"Place ID","connection.targets.placeId.tooltip":"Roblox Place ID for this Studio window","connection.targets.clientId":"Connection ID","connection.targets.clientId.tooltip":"Full connection ID for diagnostics. Usually use Studio ID instead.","connection.targets.session":"Session","connection.targets.session.tooltip":"Command channel state for this Studio target","connection.targets.lastUsed":"Last Used","connection.targets.lastUsed.tooltip":"Most recent plugin-route request routed to this Studio target","connection.targets.lastSeen":"Last Seen","connection.targets.lastSeen.tooltip":"Most recent heartbeat received from this Studio target","connection.targets.version":"Version","connection.targets.version.tooltip":"Installed plugin version reported by Studio","connection.targets.routing":"Routing","connection.targets.routing.tooltip":"Default Studio window when the agent does not name one","connection.targets.inFlight":"In Flight","connection.targets.inFlight.tooltip":"Active command request currently routed to this Studio target","connection.targets.studioState":"Studio State","connection.targets.studioState.tooltip":"Current edit/play runtime state reported by this Studio window","connection.targets.studioState.edit":"Edit","connection.targets.studioState.running":"Running","connection.targets.studioState.paused":"Paused","connection.targets.studioState.unknown":"Unknown","connection.targets.studioState.source.thread":"WEPPY play command","connection.targets.studioState.source.pluginConnection":"Conexão Play/Test do Studio","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"Unknown source","connection.targets.studioState.updatedUnknown":"not reported","connection.targets.copyPlaceId":"Copy Place ID","connection.targets.copyTargetAlias":"Copy Studio ID","connection.targets.copyClientId":"Copy Connection ID","connection.targets.copied":"Copied value","connection.targets.copyFailed":"Failed to copy value","connection.targets.none":"No Studio targets connected. Open Roblox Studio and connect WEPPY Plugin.","connection.targets.help":"When multiple Studio windows are connected, tell the agent to use Studio ID studio-1 to choose one.","connection.topology.ariaLabel":"Connection topology","connection.topology.title":"Connection topology","connection.topology.description":"Cada agente de IA se conecta por seu MCP Adapter ao WEPPY Bridge compartilhado, que mantém a conexão com o Roblox Studio.","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"Active","connection.topology.stale":"Stale","connection.topology.unknown":"Unknown","connection.topology.lastContact":"Último contato","connection.topology.noContact":"Sem contato recente","connection.topology.versionUnknown":"Version unknown","connection.topology.placeUnknown":"Place unknown","connection.topology.moreAgents":"+{count} more agents","connection.topology.moreStudios":"+{count} more studios","connection.topology.allAgentsVisible":"All agents visible","connection.topology.allStudiosVisible":"All studios visible","connection.topology.showAll":"Show all","connection.topology.showLess":"Show less","connection.topology.showAllAgents":"Show all AI agents","connection.topology.showAllStudios":"Show all Studio targets","connection.topology.showLessAgents":"Show less AI agents","connection.topology.showLessStudios":"Show less Studio targets","connection.routing.updateFailed":"Failed to update routing target","connection.log.title":"Log de conexão","connection.log.empty":"Nenhum evento","connection.time.secondsAgo":"s atrás","connection.time.minutesAgo":"min atrás","connection.time.hoursAgo":"h atrás","common.loading":"Carregando...","common.retry":"Tentar novamente","common.reconnecting":"Reconectando...","common.expand":"Expandir","common.collapse":"Recolher","tools.tab.history":"Histórico","tools.tab.statistics":"Estatísticas","tools.tab.failures":"Falhas","tools.col.time":"Hora","tools.col.time.tooltip":"Momento em que a execução da ferramenta foi registrada.","tools.col.toolAction":"Ferramenta.Ação","tools.col.toolAction.tooltip":"Nome da ferramenta e ação executada.","tools.col.duration":"Duração","tools.col.duration.tooltip":"Quanto tempo a ferramenta levou para terminar.","tools.col.status":"Status","tools.col.status.tooltip":"Resultado da execução registrada da ferramenta.","tools.col.tier":"Nível","tools.col.tier.tooltip":"Nível de licença exigido para a ferramenta ou ação.","tools.col.tierStats.tooltip":"Resumo Basic, Pro ou Mixed para esta linha de estatísticas da ferramenta.","tools.col.tool":"Ferramenta","tools.col.tool.tooltip":"Nome da ferramenta consolidada na tabela de estatísticas.","tools.col.calls":"Chamadas","tools.col.calls.tooltip":"Número total de chamadas registradas para esta ferramenta.","tools.col.ok":"OK","tools.col.ok.tooltip":"Número de execuções bem-sucedidas diretas.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Número de execuções que tiveram sucesso por fallback.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Número de execuções bloqueadas sem fallback.","tools.col.warn":"WARN","tools.col.warn.tooltip":"Número de falhas esperadas causadas por entrada, estado do projeto, política do Roblox ou código do usuário.","tools.col.err":"FALHOU","tools.col.err.tooltip":"Número de execuções que terminaram em falha.","tools.col.okRate":"% Sucesso","tools.col.okRate.tooltip":"Percentual de chamadas que terminaram com sucesso.","tools.col.avgTime":"Tempo médio","tools.col.avgTime.tooltip":"Tempo médio de execução entre as chamadas registradas.","tools.col.error":"Erro","tools.filter.tool":"Ferramenta","tools.filter.all":"Todos","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Esta entrada usou uma ferramenta ou ação exclusiva do Pro.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"A ação Pro solicitada teve sucesso por meio de um fallback Basic.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"A ação Pro solicitada foi bloqueada e nenhum fallback foi executado.","tools.badge.warn":"WARN","tools.badge.warn.tooltip":"A chamada falhou por um problema esperado de entrada, projeto, política ou código de usuário.","tools.badge.err":"FALHOU","tools.badge.err.tooltip":"A execução da ferramenta falhou.","tools.status.ok":"OK","tools.status.ok.tooltip":"A execução da ferramenta terminou com sucesso.","tools.tier.mixed.tooltip":"Esta ferramenta inclui ações Basic e Pro.","tools.detail.params":"Parâmetros","tools.detail.params.tooltip":"Parâmetros de entrada enviados nesta execução da ferramenta.","tools.detail.result":"Resultado","tools.detail.result.tooltip":"Payload de resultado retornado por esta execução da ferramenta.","tools.detail.requestedCommand":"Comando enviado","tools.detail.executedCommand":"Comando executado","tools.detail.alternatives":"Alternativas","tools.detail.blockedMessage":"Motivo do bloqueio","tools.detail.noFallback":"Sem fallback","tools.detail.noFallback.value":"Nenhum fallback foi executado.","tools.detail.warningMessage":"Mensagem de aviso","tools.detail.errorMessage":"Mensagem de erro","tools.detail.open":"Detalhes","tools.detail.openLabel":"Ver detalhes de {command}","tools.detail.dialogLabel":"Detalhes da execução da ferramenta","tools.detail.title":"Execução da ferramenta","tools.history.routing":"Routing","tools.history.routing.mode":"Mode","tools.history.routing.requested":"Requested","tools.history.routing.actual":"Actual","tools.history.routing.none":"No Studio target named","tools.clear.history.title":"Limpar histórico?","tools.clear.history.message":"Isso remove permanentemente o histórico de ferramentas do place atual.","tools.clear.statistics.title":"Limpar estatísticas?","tools.clear.statistics.message":"Isso redefine permanentemente as estatísticas de ferramentas do place atual.","tools.detail.error":"Erro","tools.page.prev":"Anterior","tools.page.prev.tooltip":"Ir para a página anterior do histórico de ferramentas.","tools.page.next":"Próximo","tools.page.next.tooltip":"Ir para a próxima página do histórico de ferramentas.","tools.empty.history":"Nenhuma entrada no histórico","tools.empty.stats":"Sem estatísticas","tools.empty.failures":"Sem falhas","tools.summary.total":"Total","tools.summary.calls":"chamadas","tools.summary.sessions":"Sessões","settings.license.title":"Licença","settings.license.title.tooltip":"Status atual da licença e nível de assinatura.","settings.license.status":"Status","settings.license.status.tooltip":"Estado atual de ativação da licença.","settings.license.tier":"Nível","settings.license.tier.tooltip":"Nível de assinatura atual para os recursos disponíveis do WEPPY Dashboard.","settings.license.key":"Chave","settings.license.key.tooltip":"Chave de licença mascarada atualmente carregada pelo servidor.","settings.license.keyValue.tooltip":"Chave de licença mascarada atualmente carregada pelo servidor.","settings.license.provider":"Provedor","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"Provedor de licença usado para validar esta chave.","settings.license.providerValue.tooltip":"Provedor de licença usado para validar esta chave.","settings.license.active":"Ativa","settings.license.active.tooltip":"Estado atual de ativação da licença.","settings.license.status.activeCancelPending.tooltip":"O cancelamento está pendente, mas o acesso Pro permanece ativo até o fim do ciclo de cobrança atual.","settings.license.inactive":"Inativa","settings.license.inactive.tooltip":"Estado atual de ativação da licença.","settings.license.expired":"Expirada","settings.license.expired.tooltip":"Estado atual de ativação da licença.","settings.license.unavailable":"Informações de licença indisponíveis","settings.license.detail.cancelPending":"O cancelamento foi agendado. O acesso Pro permanece ativo até o fim do ciclo de cobrança atual.","settings.license.reset":"Redefinir licença","settings.readOnly":"Somente leitura","settings.readOnly.tooltip":"Esta seção mostra valores que não podem ser editados pelo WEPPY Dashboard.","settings.unavailable":"Configurações indisponíveis","settings.general.title":"Configurações gerais","settings.general.title.tooltip":"Configurações quentes que são aplicadas imediatamente ao mudar.","settings.general.liveApply":"Aplicar ao vivo","settings.general.liveApply.tooltip":"As mudanças nesta seção são aplicadas imediatamente sem um botão separado de salvar.","settings.general.applied":"Aplicado","settings.general.logLevel":"Nível de log","settings.general.logLevel.tooltip":"Define quanto detalhe o WEPPY Dashboard escreve nos logs.","settings.general.localHistory":"Registro de histórico","settings.general.localHistory.tooltip":"Armazena o histórico local de execução de ferramentas para as telas de histórico do WEPPY Dashboard.","settings.general.localStatistics":"Coleta de estatísticas","settings.general.localStatistics.tooltip":"Agrega estatísticas locais de uso para os relatórios do WEPPY Dashboard.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WEPPY Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"Tempo limite","settings.general.requestTimeout.tooltip":"Tempo máximo que o WEPPY Dashboard espera uma ação antes de falhar.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"O tempo limite da ação é medido em milissegundos.","settings.cold.title":"Ambiente do servidor","settings.cold.title.tooltip":"Valores de ambiente do servidor somente leitura carregados na inicialização.","settings.cold.httpPort.tooltip":"Número da porta usada pelo servidor HTTP do WEPPY Dashboard MCP.","settings.cold.httpHost.tooltip":"Interface de host à qual o servidor HTTP do WEPPY Dashboard MCP se vincula.","settings.cold.hint":"Configure via variáveis de ambiente.","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"Escolha como o WEPPY Dashboard se comporta quando o servidor MCP inicia.","settings.dashboard.nextStartBadge":"Próxima inicialização","settings.dashboard.autoOpen.label":"Abrir o Dashboard ao iniciar o WEPPY","settings.dashboard.autoOpen.description":"Abre este Dashboard automaticamente após o servidor MCP iniciar.","settings.dashboard.autoOpen.nextStart":"Será aplicado na próxima inicialização do servidor MCP.","settings.dashboard.settingsFile.label":"Arquivo de configuração","settings.dashboard.agentExample.label":"Peça ao seu Agent","settings.dashboard.agentExample.prompt":"“Desative a abertura automática do Dashboard”.","settings.dashboard.autoOpen.saving":"Salvando…","settings.dashboard.autoOpen.saved":"Salvo para a próxima inicialização do servidor.","settings.dashboard.autoOpen.error":"Não foi possível salvar. A opção anterior foi restaurada.","dashboardAutoOpenGuide.eyebrow":"Preferência do Dashboard","dashboardAutoOpenGuide.title":"Escolha como o WEPPY Dashboard será aberto","dashboardAutoOpenGuide.currentOn":"A abertura automática está ativada. Este Dashboard abre após o servidor MCP iniciar.","dashboardAutoOpenGuide.currentOff":"A abertura automática está desativada. O WEPPY não abrirá uma nova aba do Dashboard ao iniciar o servidor MCP.","dashboardAutoOpenGuide.changeAnytime":"Você pode alterar isso a qualquer momento em Settings.","dashboardAutoOpenGuide.agentHint":"Você também pode pedir ao Agent: “Desative a abertura automática do Dashboard”.","dashboardAutoOpenGuide.statusOn":"Abertura automática ativada","dashboardAutoOpenGuide.statusOff":"Abertura automática desativada","dashboardAutoOpenGuide.keep":"Manter opção atual","dashboardAutoOpenGuide.turnOff":"Desativar abertura automática","dashboardAutoOpenGuide.openSettings":"Abrir Settings","dashboardAutoOpenGuide.close":"Fechar guia de abertura automática","dashboardAutoOpenGuide.saving":"Salvando…","dashboardAutoOpenGuide.error":"Não foi possível salvar sua escolha. Tente novamente.","settings.language.title":"Idioma","settings.language.title.tooltip":"Escolha como o texto da interface do WEPPY Dashboard é localizado.","settings.language.dashboard":"Idioma do WEPPY Dashboard","settings.language.dashboard.tooltip":"Substitui o idioma do WEPPY Dashboard ou segue o idioma do sistema quando definido como Automático.","settings.language.auto":"Automático","overview.l0.title":"Servidor MCP desconectado","overview.l0.message":"O servidor MCP não está respondendo. O WEPPY Dashboard tentará reconectar automaticamente.","overview.l0.step1":"Verifique se o processo do servidor MCP está em execução","overview.l0.step2":"Reinicie o comando do servidor MCP se necessário","overview.l0.reconnecting":"Reconectando automaticamente a cada 3s...","overview.l0.reconnectBtn":"Reconectar","overview.l0.settingsBtn":"Verificar configurações","overview.l1.pluginGuide":"O plugin do Roblox Studio não está conectado","overview.l1.check1":"O Roblox Studio está aberto?","overview.l1.check2":"O WEPPY Plugin está instalado?","overview.l1.feedHint":"As alterações aparecerão aqui quando o plugin se conectar","overview.metric.server":"Servidor","overview.metric.server.tooltip":"Status de execução e processo do servidor MCP.","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Status de conexão e versão do plugin do Roblox Studio.","overview.metric.agent":"Agente","overview.metric.agent.tooltip":"Agentes de IA conectados e seu estado atual.","overview.metric.agent.instancesUnit":"instâncias","overview.metric.sync":"Sincronização","overview.metric.sync.tooltip":"Atividade atual de sincronização entre Studio e arquivos locais.","overview.metric.noAgent":"Sem agente","overview.meta.version":"Versão","overview.meta.version.tooltip":"Versão instalada do servidor MCP.","overview.meta.session":"Sessão","overview.meta.session.tooltip":"Identificador da sessão MCP atual.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Identificador de processo do sistema operacional.","overview.meta.uptime":"Tempo ativo","overview.meta.uptime.tooltip":"Tempo decorrido desde que o servidor MCP foi iniciado.","overview.feed.title":"Alterações recentes do jogo","overview.feed.empty":"Sem alterações recentes","overview.changelog.title":"Resumo de alterações da sessão","overview.changelog.entries":"Total","overview.changelog.scripts":"scripts","overview.changelog.instances":"instâncias","overview.changelog.properties":"propriedades","overview.changelog.assets":"assets","overview.tier.title":"Uso por nível","changelog.subtitle":"Histórico de alterações do jogo","changelog.filter.all":"Todos","changelog.filter.active":"Ativo","changelog.filter.completed":"Concluído","changelog.empty":"Nenhuma entrada no histórico","changelog.basic.limit.title":"A prévia Basic mostra apenas as 3 sessões mais recentes","changelog.basic.limit.body":"Faça upgrade para Pro para navegar pela linha do tempo completa do changelog deste place.","changelog.basic.metricLabel":"Changelog visível / Total","changelog.basic.visible":"visíveis","changelog.basic.total":"total","changelog.card.active":"Ativo","changelog.card.active.tooltip":"Esta sessão ainda está recebendo novas alterações do jogo.","changelog.card.completed":"Concluído","changelog.card.completed.tooltip":"Esta sessão terminou e não deve receber mais alterações.","changelog.card.bootstrapStatus":"Inicialização","changelog.card.bootstrapStatus.tooltip":"Esta sessão contém apenas o snapshot inicial de bootstrap da sincronização.","changelog.card.inProgress":"em andamento","changelog.card.noChanges":"Sem alterações ainda","changelog.card.noChanges.tooltip":"Ainda não foram extraídas alterações do jogo para esta sessão.","changelog.card.bootstrapSummary":"Snapshot de sincronização inicial","changelog.card.bootstrapSummary.tooltip":"As gravações da sincronização inicial de arquivos são condensadas em uma única linha de snapshot bootstrap.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"scripts","changelog.card.scripts.tooltip":"Alterações de script feitas nesta sessão.","changelog.card.instances":"instâncias","changelog.card.instances.tooltip":"Alterações de criação, exclusão, movimentação ou clonagem de instâncias nesta sessão.","changelog.card.modified":"modificado","changelog.card.created":"criado","changelog.card.deleted":"excluído","changelog.card.moved":"movido","changelog.card.propertiesChanged":"propriedades alteradas","changelog.card.propertiesChanged.tooltip":"Alterações de valores de propriedades registradas para esta sessão.","changelog.card.lightingConfigured":"Iluminação configurada","changelog.card.lightingConfigured.tooltip":"A iluminação ou a atmosfera foram alteradas nesta sessão.","changelog.card.terrainConfigured":"Terreno configurado","changelog.card.terrainConfigured.tooltip":"Os dados ou as configurações de terreno foram alterados nesta sessão.","changelog.card.assetsInserted":"assets inseridos","changelog.card.assetsInserted.tooltip":"Assets inseridos no place durante esta sessão.","changelog.category.script":"Scripts","changelog.category.instance":"Instâncias","changelog.category.property":"Propriedades","changelog.category.lighting":"Iluminação","changelog.category.terrain":"Terreno","changelog.category.asset":"Assets","changelog.detail.dialogLabel":"Detalhes do histórico de alterações","changelog.detail.changeSummary":"Resumo de alterações","changelog.detail.changeSummary.tooltip":"Contagem de alterações do jogo extraídas e agrupadas por categoria nesta sessão.","changelog.detail.changeTimeline":"Linha do tempo","changelog.detail.changeTimeline.tooltip":"Lista cronológica das alterações do jogo extraídas para esta sessão.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Antes e depois","changelog.detail.filterCategory":"Categoria","changelog.detail.filterCategory.tooltip":"Filtra a linha do tempo para uma única categoria de alteração.","changelog.detail.confidence.exact":"Exato","changelog.detail.confidence.exact.tooltip":"Os estados antes e depois desta alteração foram confirmados.","changelog.detail.confidence.partial":"Parcial","changelog.detail.confidence.partial.tooltip":"Apenas parte dos estados antes e depois desta alteração pôde ser confirmada.","changelog.detail.confidence.afterOnly":"Somente depois","changelog.detail.confidence.afterOnly.tooltip":"Apenas o estado resultante após a alteração pôde ser confirmado.","changelog.detail.confidence.intentOnly":"Somente intenção","changelog.detail.confidence.intentOnly.tooltip":"Apenas a ação solicitada foi registrada, não o estado resultante.","changelog.detail.confidence.unknown":"Desconhecido","changelog.detail.confidence.unknown.tooltip":"Não foi possível classificar esta alteração com confiança a partir dos dados disponíveis.","changelog.detail.noChanges":"Sem alterações nesta categoria","changelog.detail.backToList":"Voltar à lista","changelog.diff.empty":"Sem diferenças disponíveis","changelog.diff.unified":"Unificado","changelog.diff.sideBySide":"Lado a lado","changelog.diff.before":"Antes","changelog.diff.after":"Depois","sync.targets.title":"Studios conectados","sync.targets.refresh":"Atualizar","sync.targets.loading":"Carregando o estado do Sync do Studio…","sync.targets.unavailable":"O estado do Sync do Studio está indisponível. Tente novamente.","sync.targets.empty":"Nenhum Studio conectado. Conecte o WEPPY Plugin para ver o Sync ao vivo.","sync.targets.unknownPlace":"Place desconhecido","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"Conectado","sync.targets.notReported":"Ainda não informado","sync.targets.state.unknown":"Desconhecido","sync.targets.state.off":"Sync desligado","sync.targets.state.idle":"Sync ligado · aguardando","sync.targets.state.initializing":"Inicializando","sync.targets.state.syncing":"Sincronizando","sync.targets.state.paused":"Pausado","sync.targets.state.error":"Erro","sync.forwardStatus.label":"Envio de alterações","sync.forwardStatus.tooltip":"Indica se alterações do Edit podem ser enviadas. Ativo não garante que todos os arquivos locais estejam atualizados.","sync.forwardStatus.inactive":"Desativado","sync.forwardStatus.active":"Ativo","sync.forwardStatus.paused_play":"Pausado durante Play","sync.forwardStatus.reconciling":"Verificando alterações do Edit","sync.forwardStatus.blocked":"Requer atenção","sync.forwardStatus.unknown":"Desconhecido","sync.forwardStatus.observedAt":"Observado","sync.forwardStatus.reason.review":"Revise as alterações no Studio Plugin.","sync.forwardStatus.reason.editChanged":"O Edit mudou durante a verificação. Confira o Sync no Studio Plugin.","sync.forwardStatus.reason.failed":"Não foi possível confirmar as alterações. Confira o Sync no Studio Plugin.","sync.forwardStatus.reason.fallback":"Confira os detalhes no Studio Plugin.","sync.stored.title":"Places salvos","sync.stored.data":"Dados salvos","sync.stored.ambiguous":"Local de armazenamento não confirmado","sync.detail.scope":"Exibindo detalhes do Sync de","sync.detail.readOnly":"A consulta não altera o roteamento do Studio.","sync.detail.empty":"Selecione um Studio conectado ou Place salvo.","sync.detail.unknown":"Este Studio ainda não informou seu estado de Sync.","sync.detail.error":"O Sync informou um erro. Veja os detalhes no Studio Plugin.","sync.detail.placeFolder":"Pasta do Place","sync.detail.placeFolder.tooltip":"Pasta compartilhada pelos Studios que abrem este Place.","sync.detail.sharedData":"Caminho, contagens e log pertencem ao Place e são compartilhados por seus Studios.","sync.log.shared":"Log compartilhado do Place","sync.log.unsafe":"O local de armazenamento não foi confirmado para acessar o log.","sync.log.unavailable":"Não foi possível carregar o log do Place. Tente novamente.","sync.log.loading":"Carregando log do Place…","sync.clear.selectedMessage":"Isso remove permanentemente o log compartilhado de Sync de {place}.","sync.overlay.title":"Plugin do Roblox Studio necessário","sync.overlay.message":"O status de sincronização estará disponível quando o plugin do Roblox Studio se conectar.","sync.overlay.check1":"O Roblox Studio está aberto?","sync.overlay.check2":"O WEPPY Plugin está instalado?","sync.status.title":"Status de sincronização","sync.status.title.tooltip":"Status atual de sincronização entre o Studio e os arquivos locais deste place.","sync.status.forwardOnly":"Somente avanço","sync.status.forwardOnly.tooltip":"O tier Basic permite apenas sincronização direta do Studio para o local.","sync.status.place":"Place","sync.status.place.tooltip":"Nome e ID do place do Roblox atualmente conectado.","sync.status.path":"Caminho","sync.status.path.tooltip":"Raiz do sistema de arquivos local usada atualmente para a saída de sincronização.","sync.status.instances":"Instâncias","sync.status.instances.tooltip":"Total de instâncias do Roblox sincronizadas no espelho local.","sync.status.scripts":"Scripts","sync.status.scripts.tooltip":"Total de arquivos de script atualmente indexados para este place.","sync.status.state":"Estado","sync.status.state.tooltip":"Estado atual de execução da sincronização informado pelo servidor.","sync.policy.title":"Política de Sync","sync.policy.title.tooltip":"Política efetiva de Sync informada pelo plugin do Studio conectado.","sync.policy.activation":"Ativação","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"Fluxo de trabalho","sync.policy.preset.studio_first":"Studio primeiro","sync.policy.preset.bidirectional_review":"Bidirecional","sync.policy.preset.local_code_studio_world":"Código local, mundo no Studio","sync.policy.preset.custom":"Personalizado","sync.policy.apply.title":"Como as alterações locais são aplicadas ao Studio","sync.policy.apply.description":"Mostra se as alterações locais serão revisadas primeiro ou aplicadas automaticamente ao Studio.","sync.policy.apply.content":"Mudanças de conteúdo","sync.policy.apply.content.tooltip":"Alterações locais de Código Script, propriedades e propriedades de serviços. Criar, excluir, renomear e mover são alterações de estrutura.","sync.policy.apply.structure":"Mudanças de estrutura","sync.policy.apply.structure.tooltip":"Criação, exclusão, renomeação e movimentação locais de instâncias. A exclusão local automática também exige a opção de exclusão separada abaixo.","sync.policy.apply.manual":"Revisar primeiro","sync.policy.apply.auto":"Aplicar automaticamente","sync.policy.scope.disclosure":"Direções por escopo","sync.policy.scope.scriptSource":"Código dos scripts","sync.policy.scope.properties":"Propriedades","sync.policy.scope.structure":"Estrutura","sync.policy.scope.serviceProperties":"Propriedades dos serviços","sync.policy.endpoint.local":"Local","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → Local","sync.policy.direction.forward.tooltip":"As mudanças do Studio são gravadas nos arquivos locais.","sync.policy.direction.reverse":"Local → Studio","sync.policy.direction.reverse.tooltip":"As mudanças dos arquivos locais são aplicadas ao Studio.","sync.policy.direction.bidirectional":"Nos dois sentidos","sync.policy.direction.bidirectional.tooltip":"As mudanças podem ir do Studio para os arquivos locais e dos arquivos locais para o Studio.","sync.policy.safety.localDeletes":"Exclusão local → excluir instância do Studio","sync.policy.safety.review":"Revisar antes de excluir","sync.policy.safety.review.tooltip":"As exclusões de arquivos locais aguardam revisão antes de remover as instâncias correspondentes do Studio. Isso é separado da limpeza automática do UI Studio.","sync.policy.safety.auto":"Exclusão automática no Studio","sync.policy.safety.auto.tooltip":"Excluir arquivos locais pode remover automaticamente as instâncias correspondentes do Studio. Isso é separado da limpeza automática do UI Studio.","sync.policy.reviewRequired":"Revise esta política no plugin do Studio antes de iniciar o Sync.","sync.log.title":"Log de sincronização","sync.log.empty":"Sem eventos de sincronização","sync.log.type.fullSyncStart":"INÍCIO","sync.log.type.fullSyncStart.tooltip":"A sincronização completa foi iniciada.","sync.log.type.fullSyncProgress":"EM ANDAMENTO","sync.log.type.fullSyncProgress.tooltip":"A sincronização completa está salvando os dados.","sync.log.type.fullSyncComplete":"CONCLUÍDO","sync.log.type.fullSyncComplete.tooltip":"A sincronização completa foi concluída com sucesso.","sync.log.type.fullSyncFailed":"FALHA","sync.log.type.fullSyncFailed.tooltip":"A sincronização completa terminou sem salvar todos os dados.","sync.log.type.write":"ESCREVER","sync.log.type.write.tooltip":"Uma nova saída de sincronização foi gravada no disco.","sync.log.type.update":"ATUALIZAR","sync.log.type.update.tooltip":"Um arquivo ou uma instância já sincronizada foi atualizada.","sync.log.type.delete":"EXCLUIR","sync.log.type.delete.tooltip":"Um arquivo ou uma instância sincronizada foi removida.","sync.log.type.idle":"OCIOSO","sync.log.type.idle.tooltip":"Um evento de sincronização foi registrado sem alterar arquivos.","sync.upgrade.title":"Veja a sincronização completa com Pro","sync.upgrade.benefit1":"Sincronização bidirecional — edite arquivos, aplicação automática no Studio","sync.upgrade.benefit2":"Sincronização reversa — envie alterações de arquivos para o Studio","sync.upgrade.benefit3":"Histórico completo de sincronização e registro detalhado de alterações","sync.upgrade.buy":"Ver Pro","playtest.status.title":"Status de teste","playtest.status.title.tooltip":"Estado atual da sessão de playtest do Roblox informado pelo Studio.","playtest.status.mode":"Modo","playtest.status.mode.tooltip":"Modo de inicialização do playtest do Studio para a sessão atual.","playtest.status.mode.value.tooltip":"Modo específico de playtest do Roblox Studio atualmente em uso.","playtest.status.mode.play":"Jogar","playtest.status.mode.run":"Executar","playtest.status.mode.server":"Servidor","playtest.status.mode.edit":"Editar","playtest.status.place.tooltip":"Place do Roblox atualmente associado a esta sessão de playtest.","playtest.status.state.running":"Executando","playtest.status.state.running.tooltip":"Uma sessão de playtest do Roblox está em execução no momento.","playtest.status.state.paused":"Pausado","playtest.status.state.paused.tooltip":"A sessão atual de playtest do Roblox está pausada.","playtest.status.state.notRunning":"Não está em execução","playtest.status.state.notRunning.tooltip":"Nenhuma sessão de playtest do Roblox está em execução no momento.","playtest.control.play":"Jogar","playtest.control.pause":"Pausar","playtest.control.resume":"Retomar","playtest.control.stop":"Parar","playtest.history.title":"Histórico de testes","playtest.history.search":"Pesquisar resultados de teste","playtest.history.filter":"Resultado","playtest.history.filterAll":"Todos os resultados","playtest.history.filteredCount":"{{visible}} de {{total}} resultados","playtest.history.title.tooltip":"Execuções automatizadas de playtest registradas para este projeto.","playtest.history.empty":"Sem resultados de teste","playtest.history.mode":"Modo","playtest.history.mode.tooltip":"Modo de playtest usado nesta execução de teste registrada.","playtest.history.status.passed":"Aprovado","playtest.history.status.failed":"Falhou","playtest.history.status.running":"Executando","playtest.history.status.unknown":"Desconhecido","playtest.history.status.tooltip":"Estado de resultado registrado para esta execução automatizada de playtest.","playtest.empty.title":"Sem resultados de teste ainda","playtest.empty.message":"Os resultados aparecerão aqui depois que o agente de IA executar um Playtest.","playtest.empty.message.before":"Os resultados aparecerão aqui depois que o agente de IA executar um Playtest.","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"Ask the AI Agent to run a Playtest when you need a fresh report.","playtest.report.title":"Relatório selecionado","playtest.report.title.tooltip":"Saída detalhada da execução automatizada de playtest atualmente selecionada.","playtest.detail.dialogLabel":"Detalhes do relatório de playtest","playtest.detail.loading":"Carregando relatório...","playtest.detail.errorTitle":"Relatório indisponível","playtest.report.content":"Relatório","playtest.report.content.tooltip":"Resumo em Markdown da execução automatizada de playtest selecionada.","playtest.report.logs":"Logs","playtest.report.logs.tooltip":"Logs de execução capturados para a execução automatizada de playtest selecionada.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"Sem conteúdo de relatório","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest é uma função exclusiva do Pro","playtest.basic.desc":"Controle os testes pelo WEPPY Dashboard, execute testes automatizados e visualize relatórios detalhados.","playtest.basic.benefit1":"Controles de jogar/pausar/parar com um clique","playtest.basic.benefit2":"Execução de testes automatizados via agente IA","playtest.basic.benefit3":"Histórico de testes com rastreamento de sucesso/falha","playtest.basic.benefit4":"Relatórios de teste detalhados em markdown","playtest.sample.badge":"Prévia da tela de playtest Pro","playtest.sample.title":"Você está vendo uma prévia da tela de playtest disponível após o upgrade para Pro.","playtest.sample.message":"Esta prévia usa dados de exemplo. Controle de playtest ao vivo, gerenciamento de histórico e relatórios reais são liberados com Pro.","playtest.sample.clearDisabled":"Faça upgrade para Pro para limpar o histórico real de playtest.","playtest.sample.place":"Prévia da Arena","playtest.sample.history.name":"Teste de fumaça da Arena de exemplo","playtest.sample.context.why":"Entrar na arena, sobreviver à abertura e verificar se o HUD responde imediatamente.","playtest.sample.context.expected":"O jogador surge com segurança, a contagem regressiva do HUD aparece em um segundo e a primeira onda começa sem erros.","playtest.sample.context.observed":"A proteção de spawn funcionou, o HUD atualizou no tempo certo e a primeira onda terminou sem regressões.","playtest.sample.report.markdown":`# Teste de fumaça da Arena de exemplo
132
132
 
133
133
  - Fluxo de spawn: PASS
134
134
  - Contagem do HUD: PASS
@@ -146,7 +146,7 @@ Isto é uma prévia de amostra. Faça upgrade para Pro para executar playtests a
146
146
  - 生成sourceがゲームコードへアクセスする前にRunService:IsStudio()を確認するようadapterStudioOnly=trueを維持してください。この確認の省略を私が明示した場合だけfalseにし、planにproduction警告を表示してください。
147
147
  - 開発用sourceは保持してください。既定guard付きのWEPPY管理AdapterはStudio直接Publishに残せますが、guard無効またはユーザー作成テストコードとテストオブジェクトは確認してください。
148
148
  - manage_studio.playtest_adapter_planでソースの変更案を確認し、diffと使用箇所を確認した後にのみ、返されたトークンを使ってmanage_studio.playtest_adapter_applyを実行してください。
149
- - ソースの場所、変更したファイル、使用しているプロファイル、cleanupの動作、公開前に私が自分で確認する項目を示してください。`,"sidebar.overview":"概要","sidebar.changelog":"変更履歴","sidebar.connection":"接続","sidebar.sync":"同期","sidebar.playtest":"プレイテスト","sidebar.tools":"ツール","sidebar.settings":"設定","sidebar.ui_studio":"UI Studio","sidebar.gate.l1":"MCP サーバーへの接続が必要です。","sidebar.gate.l2":"Roblox Studio プラグインへの接続が必要です。","header.currentProject":"現在のプロジェクト","header.unknownProject":"不明なプロジェクト","header.projectRoot.label":"Project Root","header.currentProject.loading":"プロジェクトルートを読み込み中...","header.currentProject.unavailable":"プロジェクトルートを読み込めません","header.placeNotConnected":"プレイス未接続","header.currentProject.tooltip":"現在選択されているプロジェクトフォルダです。","header.currentProject.loading.tooltip":"プロジェクトルート情報をまだ読み込み中です。","header.currentProject.unavailable.tooltip":"現在のプロジェクトルート情報を読み込めません。","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Sync root を読み込み中...","header.currentProjectSyncRoot.unavailable":"Sync root 情報を読み込めません","header.currentProjectSyncRoot.tooltip":"選択中のプロジェクトに対応する現在の sync root フォルダです。","header.currentProjectSyncRoot.loading.tooltip":"Sync root 情報をまだ読み込み中です。","header.currentProjectSyncRoot.unavailable.tooltip":"現在の sync root 情報を読み込めません。","header.testFiles.label":"Test Files","header.testFiles.unavailable":"テストファイルのパスを確認できません。","header.testFiles.tooltip":"選択した place の現在の playtest ファイルディレクトリです。","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"プラグイン接続が必要です","header.places.liveRequired":"現在の active place を確認するにはプラグイン接続が必要です。","header.place.tooltip":"接続中の Roblox プレイスです。","header.placeNotConnected.tooltip":"プレイス未接続","placeScope.current.label":"現在の Place","placeScope.lastActive.label":"最後にアクティブだった Place","placeScope.selected.label":"選択中の Place","placeScope.unknownPlace":"不明な Place","placeScope.live":"ライブ","placeScope.connected":"Studio 接続中","placeScope.stored":"保存データ","placeScope.connectedGroup":"接続中の Studio","placeScope.storedGroup":"保存データ","placeScope.stored.note":"現在接続中の Studio では、この Place は開かれていません。","placeScope.pluginRequired":"プラグインが必要","placeScope.pluginRequired.note":"ライブのアクティブ Place を確認するには WEPPY Plugin を接続してください。","placeScope.noPlace.label":"Place スコープ","placeScope.noPlace.value":"まだ Place データがありません","placeScope.noPlace.badge":"Place なし","placeScope.noPlace.note":"WEPPY Plugin を接続して Place を同期すると、Place ごとのデータが作成されます。","placeScope.selected.note":"保存済みデータのみ表示しています。Studio のルーティングは変更されません。","placeScope.surface.sync":"同期ステータスとログはこの Place を使用します。","placeScope.surface.changelog":"変更履歴セッションはこの Place を使用します。","placeScope.surface.playtest":"プレイテストレポートはこの Place を使用します。","placeScope.surface.uiStudio":"UI キャプチャと変更履歴はこの Place を使用します。","placeScope.surface.tools":"ツール履歴と統計はこの Place を使用します。","placeScope.loading":"Place スコープを読み込み中...","placeScope.unavailable":"Place スコープを使用できません","placeScope.selector.label":"Place データ","placeScope.shortcuts.trigger":"ショートカット","placeScope.shortcuts.label":"Place ショートカット","placeScope.shortcuts.settings":"Place の設定","placeScope.shortcuts.experience":"エクスペリエンスを管理","placeScope.shortcuts.roblox":"Roblox で表示","placeScope.folder.duplicate":"重複フォルダー","placeScope.folder.unresolved":"代表フォルダー未確定","placeScope.folder.noSyncHistory":"同期履歴なし","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Place フォルダーの詳細","placeScope.folder.duplicateReason":"現在の保存先は {canonicalFolder} です。このフォルダーはフル同期が成功した後にバックアップされます。","placeScope.folder.unresolvedReason":"この Place は ID で引き続き選択できますが、代表フォルダーはまだ確定していません。","placeScope.folder.unknown":"不明","placeScope.selector.noneSelectable":"選択できる Place フォルダーがありません","header.changeProjectRoot":"プロジェクトルートを変更","header.changeProjectRoot.ariaLabel":"プロジェクトルートを変更","header.changeProjectRoot.tooltip":"現在の project root を変更します。","header.changeProjectRoot.disabledTooltip.l0":"プロジェクトルートを変更するには、まず MCP サーバー接続が必要です。","header.changeProjectRoot.disabledTooltip.loading":"プロジェクトルート情報をまだ読み込み中です。","header.changeProjectRoot.disabledTooltip.unavailable":"現在のプロジェクトルート情報を読み込めません。","header.projectRootModal.initial.title":"プロジェクトルートを変更","header.projectRootModal.initial.body.connected":"プロジェクトフォルダを選択すると、MCP は新しい project root に切り替わり、現在の Studio 内容が新しい <selected project folder>/weppy-project-sync にフル再同期されます。","header.projectRootModal.initial.body.disconnected":"プロジェクトフォルダを選択すると、MCP は新しい project root に切り替わり、<selected project folder>/weppy-project-sync を次の sync 対象として使用します。","header.projectRootModal.initial.nextSyncRoot":"選択後の新しい sync 先","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"現在の sync は直ちに停止します。","header.projectRootModal.initial.warningFreshSync":"現在の Studio 内容を基準に、新しい対象へ fresh full sync が作成されます。","header.projectRootModal.initial.warningNoMove":"既存の sync フォルダは自動では移動されません。","header.projectRootModal.initial.warningDeferredSync":"Studio が未接続の場合、full resync は次回 plugin 接続時に開始されます。","header.projectRootModal.confirm.title":"新しいプロジェクトルートを確認","header.projectRootModal.confirm.body":"適用前に選択したプロジェクトフォルダを確認してください。","header.projectRootModal.confirm.projectRoot":"選択したプロジェクトフォルダ","header.projectRootModal.confirm.syncRoot":"新しい sync 先","header.projectRootModal.confirm.warningNoMove":"既存の sync フォルダは自動では移動されません。","header.projectRootModal.pick":"フォルダを選択","header.projectRootModal.apply":"変更を適用","header.projectRootModal.cancel":"キャンセル","header.projectRootModal.error":"プロジェクトルートを変更できませんでした。","status.online":"オンライン","status.offline":"オフライン","status.idle":"待機中","status.syncing":"同期中","status.error":"エラー","status.initializing":"初期化中","level.l0.title":"サーバー切断","level.l0.message":"WEPPY Dashboard は開いていますが、MCPサーバーが停止したか応答していません。","level.l1.title":"サーバー接続済み","level.l1.hint":"確認: Roblox Studioは実行中?プラグインはインストール済み?","level.l2.ok":"Studio接続済み","tier.basic":"Basic","tier.basic.tooltip":"標準のWEPPY Dashboard機能を提供するBasicティアです。","tier.pro":"Pro","tier.pro.tooltip":"すべてのWEPPY Dashboard機能を提供するProティアです。","tier.mixed":"混合","tier.upgrade":"Proを確認","tier.banner.save":"ProでAIトークンを節約!","tier.tool.query_instances.desc":"インスタンス照会、子孫探索、クラス情報、名前・クラス検索。Pro: ファイルツリー、プロジェクト構造、プロパティ・タグ検索。","tier.tool.mutate_instances.desc":"インスタンスの作成、削除、複製、移動、名前変更、ピボット。Pro: ツリー作成、一括作成・削除・複製。","tier.tool.manage_properties.desc":"プロパティ、属性、タグの取得・設定。Pro: 計算・相対値設定、一括取得・設定、子の一括変更。","tier.tool.manage_scripts.desc":"スクリプトソースの読取・書込・作成・削除・行編集・検索。Pro: スクリプト間一括置換。","tier.tool.manage_ui.desc":"Pro専用。ゲームらしいメニュー、HUD、ボタン、ラベル、画像パネルを作成・改善し、画面キャプチャと改善提案を確認します。","tier.tool.manage_ui.action.design_brief":"UIの方向性を整理","tier.tool.manage_ui.action.create_tree":"新しいUIを作成","tier.tool.manage_ui.action.update":"既存UIを更新","tier.tool.manage_ui.action.delete":"UIを削除","tier.tool.manage_ui.action.preview":"UI画面をキャプチャ","tier.tool.manage_ui.action.check":"改善提案を確認","tier.tool.manage_lighting.desc":"Pro専用。照明、大気、空、テレイン属性、時間帯の環境設定。","tier.tool.manage_selection.desc":"選択の取得、設定、解除。Pro: コンテキスト、詳細、項目の追加・削除、変更監視。","tier.tool.manage_camera.desc":"カメラ情報取得、パスまたは座標でフォーカス、推奨ビュー提案。","tier.tool.manage_tween.desc":"Pro専用。滑らかなアニメーションのためのトゥイーン作成、再生、一時停止、キャンセル。","tier.tool.manage_audio.desc":"Pro専用。サウンドの再生、停止、一時停止、再開。オーディオリスナー設定。","tier.tool.manage_animation.desc":"Pro専用。アニメーションのロード、再生、停止。ヒューマノイド・コントローラーのトラック照会。","tier.tool.manage_physics.desc":"Pro専用。物理衝突グループの登録、グループ間衝突設定、一覧照会。","tier.tool.manage_effects.desc":"Pro専用。パーティクル放出、全消去、エフェクト有効化トグル。","tier.tool.manage_terrain.desc":"Pro専用。図形充填、領域消去、マテリアル置換、色管理、ボクセル読書、手続き生成、スムージング。","tier.tool.spatial_query.desc":"Pro専用。レイキャスト、地面検索、配置確認、領域スキャン、平地・スポーン位置探索、歩行分析、空間マップ、衝突確認。","tier.tool.manage_assets.desc":"Pro専用。モデル挿入、アセット情報照会、クリエイターストア検索、無料モデル・パッケージ挿入、エクスポート。","tier.tool.manage_sync.desc":"Pro専用。同期状態、設定、履歴、方向設定、同期ファイル読書。","tier.tool.workspace_state.desc":"Pro専用。フル同期、スナップショット、最近の変更、ビューポート情報、メタデータ、キャッシュ管理。","tier.tool.manage_logs.desc":"出力ログのフィルタリング照会、増分ポーリング、バッファ消去、最近のエラー照会。","tier.tool.system_info.desc":"接続状態、使用ティア確認。Pro: プレイス情報、サービス一覧、Studio設定、プレイテスト制御、自動テスト。","tier.tool.manage_studio.desc":"Pro専用。スクリーンショットやQAのためにUIプレビューなどStudioエディタの表示設定を切り替えます。ゲーム内UIオブジェクトは変更しません。","tier.tool.batch_execute.desc":"Pro専用。複数コマンドを一括実行。順次処理、エラー時続行オプション。","tier.tool.execute_luau.desc":"Pro専用。Roblox Studioサンドボックスで任意のLuauコードを実行。","connection.server.title":"Bridgeステータス","connection.server.version":"バージョン","connection.server.version.tooltip":"WEPPY Bridgeランタイムのバージョンです。","connection.server.pid":"PID","connection.server.pid.tooltip":"OSが使用するプロセス識別子です。","connection.server.uptime":"稼働時間","connection.server.uptime.tooltip":"WEPPY Bridgeの起動後に経過した時間です。","connection.server.session":"セッション","connection.server.session.tooltip":"現在のWEPPY Bridgeセッション識別子です。","connection.server.exec":"実行ファイル","connection.server.exec.tooltip":"WEPPY Bridgeを起動した実行ファイルのパスです。","connection.server.restart":"Bridgeを再起動","connection.server.restarting":"再起動中…","connection.server.restartUnavailable":"新しいBridgeを起動できるよう、1つ以上のAI AgentとMCP Adapterを接続してください。","connection.server.restartTitle":"WEPPY Bridgeを再起動しますか?","connection.server.restartMessage":"DashboardとStudio targetの接続が一時的に切れます。実行中のコマンドは結果が不明になる場合があり、アクティブなPlaytest sessionと保留中の制御はクリーンアップされます。接続済みのMCP Adapterが新しいBridgeを自動的に起動します。","connection.server.restartConfirm":"Bridgeを再起動","connection.server.restartRequesting":"Bridgeの再起動をリクエスト中…","connection.server.restartReconnecting":"WEPPY Bridgeに再接続中…","connection.server.restartWaiting":"新しいBridgeの準備が完了すると、DashboardとStudioは自動的に再接続されます。","connection.server.restartSucceeded":"WEPPY Bridgeを再起動しました","connection.server.restartFailed":"WEPPY Bridgeを再起動できませんでした","connection.server.restartTimeout":"時間内に新しいBridgeの準備が完了しませんでした。AIツールのMCP接続を確認してから再試行してください。","connection.server.restartStale":"再起動リクエストの受付前にBridgeが変更されました。現在の状態を更新して再試行してください。","connection.reconnect":"再接続","connection.checkSettings":"設定を確認","connection.agents.title":"AIエージェント","connection.agents.name":"エージェント","connection.agents.version":"バージョン","connection.agents.version.tooltip":"このエージェントセッションの MCP Adapter パッケージバージョンです。","connection.agents.cwd":"作業ディレクトリ","connection.agents.cwd.tooltip":"接続中のAIエージェントの現在の作業ディレクトリです。","connection.agents.projectRoot":"プロジェクトルート","connection.agents.projectRoot.tooltip":"同期オーナーシップの権威あるプロジェクトパス","connection.agents.projectRoot.unresolved":"未解決","connection.agents.connected":"接続時刻","connection.agents.unknown":"不明","connection.agents.none":"接続中のエージェントなし","connection.plugins.title":"プラグイン","connection.plugins.place":"プレイス","connection.plugins.clientId":"Connection ID","connection.plugins.clientId.tooltip":"Full connection ID for diagnostics","connection.plugins.lastSeen":"最終確認","connection.plugins.lastSeen.tooltip":"プラグインから最後に受信したハートビート時刻です。","connection.plugins.version":"バージョン","connection.plugins.version.tooltip":"Studioが報告したインストール済みプラグインのバージョンです。","connection.plugins.none":"接続中のプラグインなし","connection.targets.title":"Studio Targets","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"Short name for this Roblox Studio window","connection.targets.place":"Place","connection.targets.placeId":"Place ID","connection.targets.placeId.tooltip":"Roblox Place ID for this Studio window","connection.targets.clientId":"Connection ID","connection.targets.clientId.tooltip":"Full connection ID for diagnostics. Usually use Studio ID instead.","connection.targets.session":"Session","connection.targets.session.tooltip":"Command channel state for this Studio target","connection.targets.lastUsed":"Last Used","connection.targets.lastUsed.tooltip":"Most recent plugin-route request routed to this Studio target","connection.targets.lastSeen":"Last Seen","connection.targets.lastSeen.tooltip":"Most recent heartbeat received from this Studio target","connection.targets.version":"Version","connection.targets.version.tooltip":"Installed plugin version reported by Studio","connection.targets.routing":"Routing","connection.targets.routing.tooltip":"Default Studio window when the agent does not name one","connection.targets.inFlight":"In Flight","connection.targets.inFlight.tooltip":"Active command request currently routed to this Studio target","connection.targets.studioState":"Studio State","connection.targets.studioState.tooltip":"Current edit/play runtime state reported by this Studio window","connection.targets.studioState.edit":"Edit","connection.targets.studioState.running":"Running","connection.targets.studioState.paused":"Paused","connection.targets.studioState.unknown":"Unknown","connection.targets.studioState.source.thread":"WEPPY play command","connection.targets.studioState.source.pluginConnection":"Studio Play/Test 接続","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"Unknown source","connection.targets.studioState.updatedUnknown":"not reported","connection.targets.copyPlaceId":"Copy Place ID","connection.targets.copyTargetAlias":"Copy Studio ID","connection.targets.copyClientId":"Copy Connection ID","connection.targets.copied":"Copied value","connection.targets.copyFailed":"Failed to copy value","connection.targets.none":"No Studio targets connected. Open Roblox Studio and connect WEPPY Plugin.","connection.targets.help":"When multiple Studio windows are connected, tell the agent to use Studio ID studio-1 to choose one.","connection.topology.ariaLabel":"Connection topology","connection.topology.title":"Connection topology","connection.topology.description":"各AIエージェントは専用のMCP Adapterを介して1つの共有WEPPY Bridgeに接続し、BridgeがRoblox Studioとの接続を維持します。","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"Active","connection.topology.stale":"Stale","connection.topology.unknown":"Unknown","connection.topology.lastContact":"最終接続確認","connection.topology.noContact":"接続確認の記録なし","connection.topology.versionUnknown":"Version unknown","connection.topology.placeUnknown":"Place unknown","connection.topology.moreAgents":"+{count} more agents","connection.topology.moreStudios":"+{count} more studios","connection.topology.allAgentsVisible":"All agents visible","connection.topology.allStudiosVisible":"All studios visible","connection.topology.showAll":"Show all","connection.topology.showLess":"Show less","connection.topology.showAllAgents":"Show all AI agents","connection.topology.showAllStudios":"Show all Studio targets","connection.topology.showLessAgents":"Show less AI agents","connection.topology.showLessStudios":"Show less Studio targets","connection.routing.updateFailed":"Failed to update routing target","connection.log.title":"接続ログ","connection.log.empty":"イベントなし","connection.time.secondsAgo":"秒前","connection.time.minutesAgo":"分前","connection.time.hoursAgo":"時間前","common.loading":"読み込み中...","common.retry":"再試行","common.reconnecting":"再接続中...","common.expand":"展開","common.collapse":"折りたたむ","tools.tab.history":"履歴","tools.tab.statistics":"統計","tools.tab.failures":"失敗","tools.col.time":"時刻","tools.col.time.tooltip":"ツール実行が記録された時刻です。","tools.col.toolAction":"ツール.アクション","tools.col.toolAction.tooltip":"実行されたツール名とアクションです。","tools.col.duration":"所要時間","tools.col.duration.tooltip":"ツール完了までにかかった時間です。","tools.col.status":"ステータス","tools.col.status.tooltip":"記録されたツール実行の結果です。","tools.col.tier":"ティア","tools.col.tier.tooltip":"そのツールまたはアクションに必要なライセンスティアです。","tools.col.tierStats.tooltip":"ツール統計行がBasic、Pro、Mixedのどれに当たるかを示します。","tools.col.tool":"ツール","tools.col.tool.tooltip":"統計テーブルに表示される統合ツール名です。","tools.col.calls":"呼び出し数","tools.col.calls.tooltip":"このツールで記録された総呼び出し回数です。","tools.col.ok":"OK","tools.col.ok.tooltip":"直接成功した実行回数です。","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"fallback 実行で成功した回数です。","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"fallback なしでブロックされた実行回数です。","tools.col.warn":"WARN","tools.col.warn.tooltip":"入力、プロジェクト状態、Roblox ポリシー、ユーザーコードに起因する想定内の失敗回数です。","tools.col.err":"失敗","tools.col.err.tooltip":"失敗で終了した実行回数です。","tools.col.okRate":"成功率","tools.col.okRate.tooltip":"正常に完了した呼び出しの割合です。","tools.col.avgTime":"平均時間","tools.col.avgTime.tooltip":"記録された呼び出し全体の平均実行時間です。","tools.col.error":"エラー","tools.filter.tool":"ツール","tools.filter.all":"すべて","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"この項目はPro専用のツールまたはアクションを使用しました。","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"要求したProアクションがBasic fallbackで成功しました。","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"要求したProアクションはブロックされ、fallbackも実行されませんでした。","tools.badge.warn":"WARN","tools.badge.warn.tooltip":"入力、プロジェクト状態、ポリシー、ユーザーコードに起因する想定内の失敗です。","tools.badge.err":"失敗","tools.badge.err.tooltip":"ツール実行が失敗で終了しました。","tools.status.ok":"OK","tools.status.ok.tooltip":"ツール実行が正常に完了しました。","tools.tier.mixed.tooltip":"このツールにはBasicとProのアクションが両方含まれます。","tools.detail.params":"パラメータ","tools.detail.params.tooltip":"このツール実行に渡された入力パラメータです。","tools.detail.result":"結果","tools.detail.result.tooltip":"このツール実行から返された結果ペイロードです。","tools.detail.requestedCommand":"送信したコマンド","tools.detail.executedCommand":"実行コマンド","tools.detail.alternatives":"代替候補","tools.detail.blockedMessage":"ブロック理由","tools.detail.noFallback":"Fallback なし","tools.detail.noFallback.value":"実行された fallback はありません。","tools.detail.warningMessage":"警告メッセージ","tools.detail.errorMessage":"エラーメッセージ","tools.detail.open":"詳細","tools.detail.openLabel":"{command} の詳細を表示","tools.detail.dialogLabel":"ツール実行の詳細","tools.detail.title":"ツール実行","tools.history.routing":"Routing","tools.history.routing.mode":"Mode","tools.history.routing.requested":"Requested","tools.history.routing.actual":"Actual","tools.history.routing.none":"No Studio target named","tools.clear.history.title":"履歴を削除しますか?","tools.clear.history.message":"現在の place のツール履歴を完全に削除します。","tools.clear.statistics.title":"統計を削除しますか?","tools.clear.statistics.message":"現在の place のツール統計を完全にリセットします。","tools.detail.error":"エラー","tools.page.prev":"前へ","tools.page.prev.tooltip":"ツール履歴の前のページへ移動します。","tools.page.next":"次へ","tools.page.next.tooltip":"ツール履歴の次のページへ移動します。","tools.empty.history":"履歴なし","tools.empty.stats":"ツール統計なし","tools.empty.failures":"失敗なし","tools.summary.total":"合計","tools.summary.calls":"呼び出し","tools.summary.sessions":"セッション","settings.license.title":"ライセンス","settings.license.title.tooltip":"現在のライセンス状態とサブスクリプションティアです。","settings.license.status":"ステータス","settings.license.status.tooltip":"現在のライセンス有効化状態です。","settings.license.tier":"ティア","settings.license.tier.tooltip":"利用できるWEPPY Dashboard機能を決める現在のサブスクリプションティアです。","settings.license.key":"キー","settings.license.key.tooltip":"現在サーバーに読み込まれているマスク済みライセンスキーです。","settings.license.keyValue.tooltip":"現在サーバーに読み込まれているマスク済みライセンスキーです。","settings.license.provider":"プロバイダー","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"このキーを検証するライセンスプロバイダーです。","settings.license.providerValue.tooltip":"このキーを検証するライセンスプロバイダーです。","settings.license.active":"有効","settings.license.active.tooltip":"現在のライセンス有効化状態です。","settings.license.status.activeCancelPending.tooltip":"解約は予約済みですが、現在の請求期間が終了するまでは Pro アクセスが維持されます。","settings.license.inactive":"無効","settings.license.inactive.tooltip":"現在のライセンス有効化状態です。","settings.license.expired":"期限切れ","settings.license.expired.tooltip":"現在のライセンス有効化状態です。","settings.license.unavailable":"ライセンス情報を取得できません","settings.license.detail.cancelPending":"解約が予約されました。現在の請求期間が終了するまでは Pro アクセスが維持されます。","settings.license.reset":"ライセンスをリセット","settings.readOnly":"読み取り専用","settings.readOnly.tooltip":"このセクションの値はWEPPY Dashboardから編集できません。","settings.unavailable":"設定を取得できません","settings.general.title":"一般設定","settings.general.title.tooltip":"変更すると即時反映されるHot設定です。","settings.general.liveApply":"即時反映","settings.general.liveApply.tooltip":"このセクションの変更は別の保存ボタンなしですぐ適用されます。","settings.general.applied":"適用済み","settings.general.logLevel":"ログレベル","settings.general.logLevel.tooltip":"WEPPY Dashboardログに出力する詳細度を設定します。","settings.general.localHistory":"ツール履歴記録","settings.general.localHistory.tooltip":"WEPPY Dashboard履歴画面用にローカルのツール実行履歴を保存します。","settings.general.localStatistics":"ツール統計収集","settings.general.localStatistics.tooltip":"WEPPY Dashboard表示用にローカル利用統計を集計します。","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WEPPY Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"操作タイムアウト","settings.general.requestTimeout.tooltip":"操作を失敗扱いにするまでWEPPY Dashboardが待機する最大時間です。","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"操作タイムアウトの単位はミリ秒です。","settings.cold.title":"サーバー環境変数","settings.cold.title.tooltip":"サーバー起動時に読み込まれる読み取り専用の環境変数です。","settings.cold.httpPort.tooltip":"MCPWEPPY DashboardHTTPサーバーが使用するポート番号です。","settings.cold.httpHost.tooltip":"MCPWEPPY DashboardHTTPサーバーがバインドするホストインターフェースです。","settings.cold.hint":"環境変数で設定してください。","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"MCPサーバー起動時のWEPPY Dashboardの動作を選択します。","settings.dashboard.nextStartBadge":"次回起動から","settings.dashboard.autoOpen.label":"WEPPY起動時にDashboardを開く","settings.dashboard.autoOpen.description":"MCPサーバーの起動後にこのDashboardを自動で開きます。","settings.dashboard.autoOpen.nextStart":"次回のMCPサーバー起動時から適用されます。","settings.dashboard.settingsFile.label":"設定ファイル","settings.dashboard.agentExample.label":"Agentへの依頼例","settings.dashboard.agentExample.prompt":"「Dashboardの自動起動をオフにして」","settings.dashboard.autoOpen.saving":"保存中…","settings.dashboard.autoOpen.saved":"次回のサーバー起動用に保存しました。","settings.dashboard.autoOpen.error":"保存できなかったため、以前の設定に戻しました。","dashboardAutoOpenGuide.eyebrow":"Dashboard設定","dashboardAutoOpenGuide.title":"WEPPY Dashboardの開き方を選択してください","dashboardAutoOpenGuide.currentOn":"自動起動は現在オンです。MCPサーバーの起動後にこのDashboardが開きます。","dashboardAutoOpenGuide.currentOff":"自動起動は現在オフです。MCPサーバーの起動時に新しいDashboardタブは開きません。","dashboardAutoOpenGuide.changeAnytime":"Settingsでいつでも変更できます。","dashboardAutoOpenGuide.agentHint":"Agentに「Dashboardの自動起動をオフにして」と依頼することもできます。","dashboardAutoOpenGuide.statusOn":"自動起動 オン","dashboardAutoOpenGuide.statusOff":"自動起動 オフ","dashboardAutoOpenGuide.keep":"現在の設定を維持","dashboardAutoOpenGuide.turnOff":"自動起動をオフにする","dashboardAutoOpenGuide.openSettings":"Settingsを開く","dashboardAutoOpenGuide.close":"自動起動の案内を閉じる","dashboardAutoOpenGuide.saving":"保存中…","dashboardAutoOpenGuide.error":"選択を保存できませんでした。もう一度お試しください。","settings.language.title":"言語","settings.language.title.tooltip":"WEPPY DashboardUIテキストの表示言語を選択します。","settings.language.dashboard":"WEPPY Dashboard言語","settings.language.dashboard.tooltip":"Autoではシステム言語を使い、それ以外では選択した言語を強制します。","settings.language.auto":"自動","overview.l0.title":"MCPサーバー切断","overview.l0.message":"MCPサーバーが応答していません。WEPPY Dashboardが自動的に再接続を試みます。","overview.l0.step1":"MCPサーバープロセスが実行中か確認してください","overview.l0.step2":"必要に応じてMCPサーバーコマンドを再起動してください","overview.l0.reconnecting":"3秒ごとに自動再接続中...","overview.l0.reconnectBtn":"再接続","overview.l0.settingsBtn":"設定を確認","overview.l1.pluginGuide":"Roblox Studioプラグインが接続されていません","overview.l1.check1":"Roblox Studioは実行中ですか?","overview.l1.check2":"WEPPY Pluginはインストール済みですか?","overview.l1.feedHint":"プラグインが接続されると変更がここに表示されます","overview.metric.server":"サーバー","overview.metric.server.tooltip":"MCPサーバーの実行状態とプロセス状態です。","overview.metric.plugin":"プラグイン","overview.metric.plugin.tooltip":"Roblox Studioプラグインの接続状態とバージョン情報です。","overview.metric.agent":"エージェント","overview.metric.agent.tooltip":"接続中のAIコーディングエージェントと現在の実行状態です。","overview.metric.agent.instancesUnit":"インスタンス","overview.metric.sync":"同期","overview.metric.sync.tooltip":"現在のStudioとローカルファイル間の同期状態です。","overview.metric.noAgent":"エージェントなし","overview.meta.version":"バージョン","overview.meta.version.tooltip":"インストールされているMCPサーバーのバージョンです。","overview.meta.session":"セッション","overview.meta.session.tooltip":"現在のMCPセッション識別子です。","overview.meta.pid":"PID","overview.meta.pid.tooltip":"OSが使用するプロセス識別子です。","overview.meta.uptime":"稼働時間","overview.meta.uptime.tooltip":"MCPサーバーの起動後に経過した時間です。","overview.feed.title":"最近のゲーム変更","overview.feed.empty":"最近の変更なし","overview.changelog.title":"セッション変更サマリー","overview.changelog.entries":"合計","overview.changelog.scripts":"スクリプト","overview.changelog.instances":"インスタンス","overview.changelog.properties":"プロパティ","overview.changelog.assets":"アセット","overview.tier.title":"ティア使用状況","changelog.subtitle":"ゲーム変更履歴","changelog.filter.all":"すべて","changelog.filter.active":"アクティブ","changelog.filter.completed":"完了","changelog.empty":"変更履歴がありません","changelog.basic.limit.title":"Basicプレビューでは最新3セッションのみ表示されます","changelog.basic.limit.body":"Proにアップグレードすると、このプレイスの完全な変更履歴タイムラインを確認できます。","changelog.basic.metricLabel":"表示中の変更履歴 / 全体","changelog.basic.visible":"表示中","changelog.basic.total":"全体","changelog.card.active":"アクティブ","changelog.card.active.tooltip":"このセッションはまだ新しいゲーム変更を受信しています。","changelog.card.completed":"完了","changelog.card.completed.tooltip":"このセッションは終了しており、これ以上変更は追加されません。","changelog.card.bootstrapStatus":"初期化","changelog.card.bootstrapStatus.tooltip":"このセッションには初期同期ブートストラップのスナップショットのみが含まれます。","changelog.card.inProgress":"進行中","changelog.card.noChanges":"変更なし","changelog.card.noChanges.tooltip":"このセッションではまだ抽出されたゲーム変更がありません。","changelog.card.bootstrapSummary":"初期同期スナップショット","changelog.card.bootstrapSummary.tooltip":"初期ファイル同期の書き込みは 1 件のブートストラップスナップショット行にまとめられます。","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"スクリプト","changelog.card.scripts.tooltip":"このセッションで発生したスクリプト変更です。","changelog.card.instances":"インスタンス","changelog.card.instances.tooltip":"このセッションで発生したインスタンスの作成、削除、移動、複製です。","changelog.card.modified":"変更","changelog.card.created":"作成","changelog.card.deleted":"削除","changelog.card.moved":"移動","changelog.card.propertiesChanged":"プロパティ変更","changelog.card.propertiesChanged.tooltip":"このセッションで記録されたプロパティ値の変更です。","changelog.card.lightingConfigured":"ライティング設定済み","changelog.card.lightingConfigured.tooltip":"このセッションでライティングまたは大気設定が変更されました。","changelog.card.terrainConfigured":"テレイン設定済み","changelog.card.terrainConfigured.tooltip":"このセッションでテレインデータまたはテレイン設定が変更されました。","changelog.card.assetsInserted":"アセット挿入","changelog.card.assetsInserted.tooltip":"このセッション中にプレイスへ挿入されたアセットです。","changelog.category.script":"スクリプト","changelog.category.instance":"インスタンス","changelog.category.property":"プロパティ","changelog.category.lighting":"ライティング","changelog.category.terrain":"テレイン","changelog.category.asset":"アセット","changelog.detail.dialogLabel":"変更履歴の詳細","changelog.detail.changeSummary":"変更サマリー","changelog.detail.changeSummary.tooltip":"このセッションで抽出されたゲーム変更数をカテゴリ別に表示します。","changelog.detail.changeTimeline":"変更タイムライン","changelog.detail.changeTimeline.tooltip":"このセッションで抽出されたゲーム変更を時系列で表示します。","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"変更前後の比較","changelog.detail.filterCategory":"カテゴリ","changelog.detail.filterCategory.tooltip":"タイムラインを 1 つの変更カテゴリに絞り込みます。","changelog.detail.confidence.exact":"正確","changelog.detail.confidence.exact.tooltip":"この変更は変更前と変更後の状態が両方確認されています。","changelog.detail.confidence.partial":"部分確認","changelog.detail.confidence.partial.tooltip":"この変更は変更前後の状態の一部のみ確認されています。","changelog.detail.confidence.afterOnly":"結果のみ確認","changelog.detail.confidence.afterOnly.tooltip":"この変更は適用後の結果状態のみ確認されています。","changelog.detail.confidence.intentOnly":"意図のみ記録","changelog.detail.confidence.intentOnly.tooltip":"要求された操作意図のみが記録され、結果状態は確認されていません。","changelog.detail.confidence.unknown":"不明","changelog.detail.confidence.unknown.tooltip":"利用可能なデータだけではこの変更を確実に分類できませんでした。","changelog.detail.noChanges":"このカテゴリに変更なし","changelog.detail.backToList":"一覧に戻る","changelog.diff.empty":"差分なし","changelog.diff.unified":"統合","changelog.diff.sideBySide":"並列比較","changelog.diff.before":"変更前","changelog.diff.after":"変更後","sync.targets.title":"接続中のStudio","sync.targets.refresh":"更新","sync.targets.loading":"StudioのSync状態を読み込み中…","sync.targets.unavailable":"StudioのSync状態を取得できません。再試行してください。","sync.targets.empty":"接続中のStudioはありません。WEPPY Pluginを接続してください。","sync.targets.unknownPlace":"不明なPlace","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"接続中","sync.targets.notReported":"未報告","sync.targets.state.unknown":"不明","sync.targets.state.off":"Sync OFF","sync.targets.state.idle":"Sync ON · 待機中","sync.targets.state.initializing":"初期化中","sync.targets.state.syncing":"同期中","sync.targets.state.paused":"一時停止","sync.targets.state.error":"エラー","sync.forwardStatus.label":"変更の送信","sync.forwardStatus.tooltip":"Edit の変更を送信できるかを示します。有効でも、すべてのローカルファイルが最新とは限りません。","sync.forwardStatus.inactive":"オフ","sync.forwardStatus.active":"有効","sync.forwardStatus.paused_play":"Play 中は一時停止","sync.forwardStatus.reconciling":"Edit の変更を確認中","sync.forwardStatus.blocked":"確認が必要","sync.forwardStatus.unknown":"不明","sync.forwardStatus.observedAt":"確認時刻","sync.forwardStatus.reason.review":"Studio Plugin で変更を確認してください。","sync.forwardStatus.reason.editChanged":"確認中に Edit が変更されました。Studio Plugin で Sync を確認してください。","sync.forwardStatus.reason.failed":"変更を確認できませんでした。Studio Plugin で Sync を確認してください。","sync.forwardStatus.reason.fallback":"詳しくは Studio Plugin を確認してください。","sync.stored.title":"保存済みPlace","sync.stored.data":"保存データ","sync.stored.ambiguous":"保存場所未確定","sync.detail.scope":"Sync詳細の表示対象","sync.detail.readOnly":"詳細表示はStudioルーティングを変更しません。","sync.detail.empty":"接続中のStudioまたは保存済みPlaceを選択してください。","sync.detail.unknown":"このStudioはSync状態をまだ報告していません。","sync.detail.error":"Syncエラーが報告されました。Studio Pluginで詳細を確認してください。","sync.detail.placeFolder":"Placeフォルダー","sync.detail.placeFolder.tooltip":"このPlaceを開いているStudioで共有する保存フォルダーです。","sync.detail.sharedData":"パス・件数・ログはPlace単位で共有されます。","sync.log.shared":"共有Placeログ","sync.log.unsafe":"保存場所が未確定のためログを表示できません。","sync.log.unavailable":"Placeログを読み込めませんでした。再試行してください。","sync.log.loading":"Placeログを読み込み中…","sync.clear.selectedMessage":"{place}の共有Syncログを完全に削除します。","sync.overlay.title":"Roblox Studioプラグインが必要です","sync.overlay.message":"Roblox Studioプラグインが接続されると同期状態を確認できます。","sync.overlay.check1":"Roblox Studioは実行中ですか?","sync.overlay.check2":"WEPPY Pluginはインストール済みですか?","sync.status.title":"同期ステータス","sync.status.title.tooltip":"このプレイスのStudioとローカルファイルの同期状態です。","sync.status.forwardOnly":"順方向のみ","sync.status.forwardOnly.tooltip":"BasicティアではStudioからローカルへの順方向同期のみ利用できます。","sync.status.place":"プレイス","sync.status.place.tooltip":"接続中のRobloxプレイス名とプレイスIDです。","sync.status.path":"パス","sync.status.path.tooltip":"現在同期出力に使っているローカルファイルシステムのルートです。","sync.status.instances":"インスタンス","sync.status.instances.tooltip":"ローカルミラーで追跡中の同期済みRobloxインスタンス総数です。","sync.status.scripts":"スクリプト","sync.status.scripts.tooltip":"このプレイスで現在インデックスされている同期スクリプトファイル数です。","sync.status.state":"状態","sync.status.state.tooltip":"サーバーが報告した現在の同期ランタイム状態です。","sync.policy.title":"Syncポリシー","sync.policy.title.tooltip":"接続中のStudioプラグインが報告した実効Syncポリシーです。","sync.policy.activation":"有効状態","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"ワークフロー","sync.policy.preset.studio_first":"Studio優先","sync.policy.preset.bidirectional_review":"双方向","sync.policy.preset.local_code_studio_world":"ローカルコード、Studioワールド","sync.policy.preset.custom":"カスタム","sync.policy.apply.title":"ローカル変更をStudioに適用する方法","sync.policy.apply.description":"ローカルでの変更を確認してから適用するか、Studioに自動適用するかを表示します。","sync.policy.apply.content":"コンテンツ変更","sync.policy.apply.content.tooltip":"ローカルで変更したScriptソース、プロパティ、サービスプロパティです。インスタンスの作成、削除、名前変更、移動は構造変更です。","sync.policy.apply.structure":"構造変更","sync.policy.apply.structure.tooltip":"ローカルでのインスタンス作成、削除、名前変更、移動です。ローカル削除の自動適用には、下の別の削除オプションも必要です。","sync.policy.apply.manual":"レビュー後に適用","sync.policy.apply.auto":"自動適用","sync.policy.scope.disclosure":"スコープ別の方向","sync.policy.scope.scriptSource":"スクリプトソース","sync.policy.scope.properties":"プロパティ","sync.policy.scope.structure":"構造","sync.policy.scope.serviceProperties":"サービスプロパティ","sync.policy.endpoint.local":"ローカル","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → ローカル","sync.policy.direction.forward.tooltip":"Studioの変更をローカルファイルに書き込みます。","sync.policy.direction.reverse":"ローカル → Studio","sync.policy.direction.reverse.tooltip":"ローカルファイルの変更をStudioに適用します。","sync.policy.direction.bidirectional":"双方向","sync.policy.direction.bidirectional.tooltip":"Studioからローカルへの変更と、ローカルからStudioへの変更の両方を適用できます。","sync.policy.safety.localDeletes":"ローカル削除 → Studioインスタンス削除","sync.policy.safety.review":"削除前にレビュー","sync.policy.safety.review.tooltip":"ローカルファイルの削除は、対応するStudioインスタンスを削除する前にレビューを待ちます。UI Studioの自動クリーンアップとは別の機能です。","sync.policy.safety.auto":"Studioへ自動削除","sync.policy.safety.auto.tooltip":"ローカルファイルを削除すると、対応するStudioインスタンスが自動的に削除される場合があります。UI Studioの自動クリーンアップとは別の機能です。","sync.policy.reviewRequired":"Syncを開始する前にStudioプラグインでこのポリシーを確認してください。","sync.log.title":"同期ログ","sync.log.empty":"同期イベントなし","sync.log.type.write":"書き込み","sync.log.type.write.tooltip":"新しい同期出力がディスクに書き込まれました。","sync.log.type.update":"更新","sync.log.type.update.tooltip":"既存の同期ファイルまたはインスタンスが更新されました。","sync.log.type.delete":"削除","sync.log.type.delete.tooltip":"同期済みファイルまたはインスタンスが削除されました。","sync.log.type.idle":"待機","sync.log.type.idle.tooltip":"ファイル変更なしで同期イベントのみ記録されました。","sync.upgrade.title":"Proの完全同期機能を確認","sync.upgrade.benefit1":"双方向同期 — ファイルを編集するとStudioに自動反映","sync.upgrade.benefit2":"逆方向同期 — ファイルの変更をStudioに送信","sync.upgrade.benefit3":"完全な同期履歴と詳細な変更ログ","sync.upgrade.buy":"Proを確認","playtest.status.title":"プレイテストステータス","playtest.status.title.tooltip":"Studio が報告した現在の Roblox プレイテストセッション状態です。","playtest.status.mode":"モード","playtest.status.mode.tooltip":"現在のセッションで使われている Studio プレイテスト起動モードです。","playtest.status.mode.value.tooltip":"現在使用中の Roblox Studio プレイテストモードの具体的な値です。","playtest.status.mode.play":"プレイ","playtest.status.mode.run":"実行","playtest.status.mode.server":"サーバー","playtest.status.mode.edit":"編集","playtest.status.place.tooltip":"このプレイテストセッションに関連付けられた Roblox プレイスです。","playtest.status.state.running":"実行中","playtest.status.state.running.tooltip":"現在 Roblox プレイテストセッションが実行中です。","playtest.status.state.paused":"一時停止","playtest.status.state.paused.tooltip":"現在の Roblox プレイテストセッションは一時停止中です。","playtest.status.state.notRunning":"未実行","playtest.status.state.notRunning.tooltip":"現在実行中の Roblox プレイテストセッションはありません。","playtest.control.play":"プレイ","playtest.control.pause":"一時停止","playtest.control.resume":"再開","playtest.control.stop":"停止","playtest.history.title":"テスト履歴","playtest.history.search":"テスト結果を検索","playtest.history.filter":"結果","playtest.history.filterAll":"すべての結果","playtest.history.filteredCount":"{{total}}件中{{visible}}件","playtest.history.title.tooltip":"このプロジェクトで記録された自動プレイテスト実行履歴です。","playtest.history.empty":"テスト結果なし","playtest.history.mode":"モード","playtest.history.mode.tooltip":"この記録済みテスト実行で使われたプレイテストモードです。","playtest.history.status.passed":"成功","playtest.history.status.failed":"失敗","playtest.history.status.running":"実行中","playtest.history.status.unknown":"不明","playtest.history.status.tooltip":"この自動プレイテスト実行で記録された結果状態です。","playtest.empty.title":"プレイテスト結果がありません","playtest.empty.message":"AIエージェントがPlaytestを実行すると、結果がここに表示されます。","playtest.empty.message.before":"AIエージェントがPlaytestを実行すると、結果がここに表示されます。","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"Ask the AI Agent to run a Playtest when you need a fresh report.","playtest.report.title":"選択されたレポート","playtest.report.title.tooltip":"現在選択されている自動プレイテスト実行の詳細出力です。","playtest.detail.dialogLabel":"プレイテストレポートの詳細","playtest.detail.loading":"レポートを読み込み中...","playtest.detail.errorTitle":"レポートを表示できません","playtest.report.content":"レポート","playtest.report.content.tooltip":"選択された自動プレイテスト実行の Markdown 要約です。","playtest.report.logs":"ログ","playtest.report.logs.tooltip":"選択された自動プレイテスト実行で収集された実行ログです。","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"レポート内容なし","playtest.basic.icon":"🎮","playtest.basic.title":"プレイテストはPro専用機能です","playtest.basic.desc":"WEPPY Dashboardからプレイテストを制御し、自動テストを実行し、詳細なテストレポートを確認できます。","playtest.basic.benefit1":"ワンクリックのプレイ/一時停止/停止コントロール","playtest.basic.benefit2":"AIエージェントによる自動テスト実行","playtest.basic.benefit3":"成功/失敗追跡付きテスト履歴","playtest.basic.benefit4":"詳細なマークダウンテストレポート","playtest.sample.badge":"Proプレイテスト画面のプレビュー","playtest.sample.title":"現在表示しているのは、Proにアップグレード後に利用できるプレイテスト画面のプレビューです。","playtest.sample.message":"このプレビューはサンプルデータを使用しています。ライブのプレイテスト操作、履歴管理、実際のレポート保存はPro購入後に利用できます。","playtest.sample.clearDisabled":"実際のプレイテスト履歴の削除はProで利用できます。","playtest.sample.place":"アリーナプレビュー","playtest.sample.history.name":"サンプルアリーナスモークテスト","playtest.sample.context.why":"アリーナにスポーンし、開始直後を生き残り、HUDがすぐ反応するか確認します。","playtest.sample.context.expected":"プレイヤーが安全にスポーンし、1秒以内にカウントダウンUIが表示され、最初のウェーブがエラーなく始まること。","playtest.sample.context.observed":"スポーン保護が正常に動作し、HUDは時間どおり更新され、最初のウェーブは回帰なく完了しました。","playtest.sample.report.markdown":`# サンプルアリーナスモークテスト
149
+ - ソースの場所、変更したファイル、使用しているプロファイル、cleanupの動作、公開前に私が自分で確認する項目を示してください。`,"sidebar.overview":"概要","sidebar.changelog":"変更履歴","sidebar.connection":"接続","sidebar.sync":"同期","sidebar.playtest":"プレイテスト","sidebar.tools":"ツール","sidebar.settings":"設定","sidebar.ui_studio":"UI Studio","sidebar.gate.l1":"MCP サーバーへの接続が必要です。","sidebar.gate.l2":"Roblox Studio プラグインへの接続が必要です。","header.currentProject":"現在のプロジェクト","header.unknownProject":"不明なプロジェクト","header.projectRoot.label":"Project Root","header.currentProject.loading":"プロジェクトルートを読み込み中...","header.currentProject.unavailable":"プロジェクトルートを読み込めません","header.placeNotConnected":"プレイス未接続","header.currentProject.tooltip":"現在選択されているプロジェクトフォルダです。","header.currentProject.loading.tooltip":"プロジェクトルート情報をまだ読み込み中です。","header.currentProject.unavailable.tooltip":"現在のプロジェクトルート情報を読み込めません。","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Sync root を読み込み中...","header.currentProjectSyncRoot.unavailable":"Sync root 情報を読み込めません","header.currentProjectSyncRoot.tooltip":"選択中のプロジェクトに対応する現在の sync root フォルダです。","header.currentProjectSyncRoot.loading.tooltip":"Sync root 情報をまだ読み込み中です。","header.currentProjectSyncRoot.unavailable.tooltip":"現在の sync root 情報を読み込めません。","header.testFiles.label":"Test Files","header.testFiles.unavailable":"テストファイルのパスを確認できません。","header.testFiles.tooltip":"選択した place の現在の playtest ファイルディレクトリです。","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"プラグイン接続が必要です","header.places.liveRequired":"現在の active place を確認するにはプラグイン接続が必要です。","header.place.tooltip":"接続中の Roblox プレイスです。","header.placeNotConnected.tooltip":"プレイス未接続","placeScope.current.label":"現在の Place","placeScope.lastActive.label":"最後にアクティブだった Place","placeScope.selected.label":"選択中の Place","placeScope.unknownPlace":"不明な Place","placeScope.live":"ライブ","placeScope.connected":"Studio 接続中","placeScope.stored":"保存データ","placeScope.connectedGroup":"接続中の Studio","placeScope.storedGroup":"保存データ","placeScope.stored.note":"現在接続中の Studio では、この Place は開かれていません。","placeScope.pluginRequired":"プラグインが必要","placeScope.pluginRequired.note":"ライブのアクティブ Place を確認するには WEPPY Plugin を接続してください。","placeScope.noPlace.label":"Place スコープ","placeScope.noPlace.value":"まだ Place データがありません","placeScope.noPlace.badge":"Place なし","placeScope.noPlace.note":"WEPPY Plugin を接続して Place を同期すると、Place ごとのデータが作成されます。","placeScope.selected.note":"保存済みデータのみ表示しています。Studio のルーティングは変更されません。","placeScope.surface.sync":"同期ステータスとログはこの Place を使用します。","placeScope.surface.changelog":"変更履歴セッションはこの Place を使用します。","placeScope.surface.playtest":"プレイテストレポートはこの Place を使用します。","placeScope.surface.uiStudio":"UI キャプチャと変更履歴はこの Place を使用します。","placeScope.surface.tools":"ツール履歴と統計はこの Place を使用します。","placeScope.loading":"Place スコープを読み込み中...","placeScope.unavailable":"Place スコープを使用できません","placeScope.selector.label":"Place データ","placeScope.shortcuts.trigger":"ショートカット","placeScope.shortcuts.label":"Place ショートカット","placeScope.shortcuts.settings":"Place の設定","placeScope.shortcuts.experience":"エクスペリエンスを管理","placeScope.shortcuts.roblox":"Roblox で表示","placeScope.folder.duplicate":"重複フォルダー","placeScope.folder.unresolved":"代表フォルダー未確定","placeScope.folder.noSyncHistory":"同期履歴なし","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Place フォルダーの詳細","placeScope.folder.duplicateReason":"現在の保存先は {canonicalFolder} です。このフォルダーはフル同期が成功した後にバックアップされます。","placeScope.folder.unresolvedReason":"この Place は ID で引き続き選択できますが、代表フォルダーはまだ確定していません。","placeScope.folder.unknown":"不明","placeScope.selector.noneSelectable":"選択できる Place フォルダーがありません","header.changeProjectRoot":"プロジェクトルートを変更","header.changeProjectRoot.ariaLabel":"プロジェクトルートを変更","header.changeProjectRoot.tooltip":"現在の project root を変更します。","header.changeProjectRoot.disabledTooltip.l0":"プロジェクトルートを変更するには、まず MCP サーバー接続が必要です。","header.changeProjectRoot.disabledTooltip.loading":"プロジェクトルート情報をまだ読み込み中です。","header.changeProjectRoot.disabledTooltip.unavailable":"現在のプロジェクトルート情報を読み込めません。","header.projectRootModal.initial.title":"プロジェクトルートを変更","header.projectRootModal.initial.body.connected":"プロジェクトフォルダを選択すると、MCP は新しい project root に切り替わり、現在の Studio 内容が新しい <selected project folder>/weppy-project-sync にフル再同期されます。","header.projectRootModal.initial.body.disconnected":"プロジェクトフォルダを選択すると、MCP は新しい project root に切り替わり、<selected project folder>/weppy-project-sync を次の sync 対象として使用します。","header.projectRootModal.initial.nextSyncRoot":"選択後の新しい sync 先","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"現在の sync は直ちに停止します。","header.projectRootModal.initial.warningFreshSync":"現在の Studio 内容を基準に、新しい対象へ fresh full sync が作成されます。","header.projectRootModal.initial.warningNoMove":"既存の sync フォルダは自動では移動されません。","header.projectRootModal.initial.warningDeferredSync":"Studio が未接続の場合、full resync は次回 plugin 接続時に開始されます。","header.projectRootModal.confirm.title":"新しいプロジェクトルートを確認","header.projectRootModal.confirm.body":"適用前に選択したプロジェクトフォルダを確認してください。","header.projectRootModal.confirm.projectRoot":"選択したプロジェクトフォルダ","header.projectRootModal.confirm.syncRoot":"新しい sync 先","header.projectRootModal.confirm.warningNoMove":"既存の sync フォルダは自動では移動されません。","header.projectRootModal.pick":"フォルダを選択","header.projectRootModal.apply":"変更を適用","header.projectRootModal.cancel":"キャンセル","header.projectRootModal.error":"プロジェクトルートを変更できませんでした。","status.online":"オンライン","status.offline":"オフライン","status.idle":"待機中","status.syncing":"同期中","status.error":"エラー","status.initializing":"初期化中","level.l0.title":"サーバー切断","level.l0.message":"WEPPY Dashboard は開いていますが、MCPサーバーが停止したか応答していません。","level.l1.title":"サーバー接続済み","level.l1.hint":"確認: Roblox Studioは実行中?プラグインはインストール済み?","level.l2.ok":"Studio接続済み","tier.basic":"Basic","tier.basic.tooltip":"標準のWEPPY Dashboard機能を提供するBasicティアです。","tier.pro":"Pro","tier.pro.tooltip":"すべてのWEPPY Dashboard機能を提供するProティアです。","tier.mixed":"混合","tier.upgrade":"Proを確認","tier.banner.save":"ProでAIトークンを節約!","tier.tool.query_instances.desc":"インスタンス照会、子孫探索、クラス情報、名前・クラス検索。Pro: ファイルツリー、プロジェクト構造、プロパティ・タグ検索。","tier.tool.mutate_instances.desc":"インスタンスの作成、削除、複製、移動、名前変更、ピボット。Pro: ツリー作成、一括作成・削除・複製。","tier.tool.manage_properties.desc":"プロパティ、属性、タグの取得・設定。Pro: 計算・相対値設定、一括取得・設定、子の一括変更。","tier.tool.manage_scripts.desc":"スクリプトソースの読取・書込・作成・削除・行編集・検索。Pro: スクリプト間一括置換。","tier.tool.manage_ui.desc":"Pro専用。ゲームらしいメニュー、HUD、ボタン、ラベル、画像パネルを作成・改善し、画面キャプチャと改善提案を確認します。","tier.tool.manage_ui.action.design_brief":"UIの方向性を整理","tier.tool.manage_ui.action.create_tree":"新しいUIを作成","tier.tool.manage_ui.action.update":"既存UIを更新","tier.tool.manage_ui.action.delete":"UIを削除","tier.tool.manage_ui.action.preview":"UI画面をキャプチャ","tier.tool.manage_ui.action.check":"改善提案を確認","tier.tool.manage_lighting.desc":"Pro専用。照明、大気、空、テレイン属性、時間帯の環境設定。","tier.tool.manage_selection.desc":"選択の取得、設定、解除。Pro: コンテキスト、詳細、項目の追加・削除、変更監視。","tier.tool.manage_camera.desc":"カメラ情報取得、パスまたは座標でフォーカス、推奨ビュー提案。","tier.tool.manage_tween.desc":"Pro専用。滑らかなアニメーションのためのトゥイーン作成、再生、一時停止、キャンセル。","tier.tool.manage_audio.desc":"Pro専用。サウンドの再生、停止、一時停止、再開。オーディオリスナー設定。","tier.tool.manage_animation.desc":"Pro専用。アニメーションのロード、再生、停止。ヒューマノイド・コントローラーのトラック照会。","tier.tool.manage_physics.desc":"Pro専用。物理衝突グループの登録、グループ間衝突設定、一覧照会。","tier.tool.manage_effects.desc":"Pro専用。パーティクル放出、全消去、エフェクト有効化トグル。","tier.tool.manage_terrain.desc":"Pro専用。図形充填、領域消去、マテリアル置換、色管理、ボクセル読書、手続き生成、スムージング。","tier.tool.spatial_query.desc":"Pro専用。レイキャスト、地面検索、配置確認、領域スキャン、平地・スポーン位置探索、歩行分析、空間マップ、衝突確認。","tier.tool.manage_assets.desc":"Pro専用。モデル挿入、アセット情報照会、クリエイターストア検索、無料モデル・パッケージ挿入、エクスポート。","tier.tool.manage_sync.desc":"Pro専用。同期状態、設定、履歴、方向設定、同期ファイル読書。","tier.tool.workspace_state.desc":"Pro専用。フル同期、スナップショット、最近の変更、ビューポート情報、メタデータ、キャッシュ管理。","tier.tool.manage_logs.desc":"出力ログのフィルタリング照会、増分ポーリング、バッファ消去、最近のエラー照会。","tier.tool.system_info.desc":"接続状態、使用ティア確認。Pro: プレイス情報、サービス一覧、Studio設定、プレイテスト制御、自動テスト。","tier.tool.manage_studio.desc":"Pro専用。スクリーンショットやQAのためにUIプレビューなどStudioエディタの表示設定を切り替えます。ゲーム内UIオブジェクトは変更しません。","tier.tool.batch_execute.desc":"Pro専用。複数コマンドを一括実行。順次処理、エラー時続行オプション。","tier.tool.execute_luau.desc":"Pro専用。Roblox Studioサンドボックスで任意のLuauコードを実行。","connection.server.title":"Bridgeステータス","connection.server.version":"バージョン","connection.server.version.tooltip":"WEPPY Bridgeランタイムのバージョンです。","connection.server.pid":"PID","connection.server.pid.tooltip":"OSが使用するプロセス識別子です。","connection.server.uptime":"稼働時間","connection.server.uptime.tooltip":"WEPPY Bridgeの起動後に経過した時間です。","connection.server.session":"セッション","connection.server.session.tooltip":"現在のWEPPY Bridgeセッション識別子です。","connection.server.exec":"実行ファイル","connection.server.exec.tooltip":"WEPPY Bridgeを起動した実行ファイルのパスです。","connection.server.restart":"Bridgeを再起動","connection.server.restarting":"再起動中…","connection.server.restartUnavailable":"新しいBridgeを起動できるよう、1つ以上のAI AgentとMCP Adapterを接続してください。","connection.server.restartTitle":"WEPPY Bridgeを再起動しますか?","connection.server.restartMessage":"DashboardとStudio targetの接続が一時的に切れます。実行中のコマンドは結果が不明になる場合があり、アクティブなPlaytest sessionと保留中の制御はクリーンアップされます。接続済みのMCP Adapterが新しいBridgeを自動的に起動します。","connection.server.restartConfirm":"Bridgeを再起動","connection.server.restartRequesting":"Bridgeの再起動をリクエスト中…","connection.server.restartReconnecting":"WEPPY Bridgeに再接続中…","connection.server.restartWaiting":"新しいBridgeの準備が完了すると、DashboardとStudioは自動的に再接続されます。","connection.server.restartSucceeded":"WEPPY Bridgeを再起動しました","connection.server.restartFailed":"WEPPY Bridgeを再起動できませんでした","connection.server.restartTimeout":"時間内に新しいBridgeの準備が完了しませんでした。AIツールのMCP接続を確認してから再試行してください。","connection.server.restartStale":"再起動リクエストの受付前にBridgeが変更されました。現在の状態を更新して再試行してください。","connection.reconnect":"再接続","connection.checkSettings":"設定を確認","connection.agents.title":"AIエージェント","connection.agents.name":"エージェント","connection.agents.version":"バージョン","connection.agents.version.tooltip":"このエージェントセッションの MCP Adapter パッケージバージョンです。","connection.agents.cwd":"作業ディレクトリ","connection.agents.cwd.tooltip":"接続中のAIエージェントの現在の作業ディレクトリです。","connection.agents.projectRoot":"プロジェクトルート","connection.agents.projectRoot.tooltip":"同期オーナーシップの権威あるプロジェクトパス","connection.agents.projectRoot.unresolved":"未解決","connection.agents.connected":"接続時刻","connection.agents.unknown":"不明","connection.agents.none":"接続中のエージェントなし","connection.plugins.title":"プラグイン","connection.plugins.place":"プレイス","connection.plugins.clientId":"Connection ID","connection.plugins.clientId.tooltip":"Full connection ID for diagnostics","connection.plugins.lastSeen":"最終確認","connection.plugins.lastSeen.tooltip":"プラグインから最後に受信したハートビート時刻です。","connection.plugins.version":"バージョン","connection.plugins.version.tooltip":"Studioが報告したインストール済みプラグインのバージョンです。","connection.plugins.none":"接続中のプラグインなし","connection.targets.title":"Studio Targets","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"Short name for this Roblox Studio window","connection.targets.place":"Place","connection.targets.placeId":"Place ID","connection.targets.placeId.tooltip":"Roblox Place ID for this Studio window","connection.targets.clientId":"Connection ID","connection.targets.clientId.tooltip":"Full connection ID for diagnostics. Usually use Studio ID instead.","connection.targets.session":"Session","connection.targets.session.tooltip":"Command channel state for this Studio target","connection.targets.lastUsed":"Last Used","connection.targets.lastUsed.tooltip":"Most recent plugin-route request routed to this Studio target","connection.targets.lastSeen":"Last Seen","connection.targets.lastSeen.tooltip":"Most recent heartbeat received from this Studio target","connection.targets.version":"Version","connection.targets.version.tooltip":"Installed plugin version reported by Studio","connection.targets.routing":"Routing","connection.targets.routing.tooltip":"Default Studio window when the agent does not name one","connection.targets.inFlight":"In Flight","connection.targets.inFlight.tooltip":"Active command request currently routed to this Studio target","connection.targets.studioState":"Studio State","connection.targets.studioState.tooltip":"Current edit/play runtime state reported by this Studio window","connection.targets.studioState.edit":"Edit","connection.targets.studioState.running":"Running","connection.targets.studioState.paused":"Paused","connection.targets.studioState.unknown":"Unknown","connection.targets.studioState.source.thread":"WEPPY play command","connection.targets.studioState.source.pluginConnection":"Studio Play/Test 接続","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"Unknown source","connection.targets.studioState.updatedUnknown":"not reported","connection.targets.copyPlaceId":"Copy Place ID","connection.targets.copyTargetAlias":"Copy Studio ID","connection.targets.copyClientId":"Copy Connection ID","connection.targets.copied":"Copied value","connection.targets.copyFailed":"Failed to copy value","connection.targets.none":"No Studio targets connected. Open Roblox Studio and connect WEPPY Plugin.","connection.targets.help":"When multiple Studio windows are connected, tell the agent to use Studio ID studio-1 to choose one.","connection.topology.ariaLabel":"Connection topology","connection.topology.title":"Connection topology","connection.topology.description":"各AIエージェントは専用のMCP Adapterを介して1つの共有WEPPY Bridgeに接続し、BridgeがRoblox Studioとの接続を維持します。","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"Active","connection.topology.stale":"Stale","connection.topology.unknown":"Unknown","connection.topology.lastContact":"最終接続確認","connection.topology.noContact":"接続確認の記録なし","connection.topology.versionUnknown":"Version unknown","connection.topology.placeUnknown":"Place unknown","connection.topology.moreAgents":"+{count} more agents","connection.topology.moreStudios":"+{count} more studios","connection.topology.allAgentsVisible":"All agents visible","connection.topology.allStudiosVisible":"All studios visible","connection.topology.showAll":"Show all","connection.topology.showLess":"Show less","connection.topology.showAllAgents":"Show all AI agents","connection.topology.showAllStudios":"Show all Studio targets","connection.topology.showLessAgents":"Show less AI agents","connection.topology.showLessStudios":"Show less Studio targets","connection.routing.updateFailed":"Failed to update routing target","connection.log.title":"接続ログ","connection.log.empty":"イベントなし","connection.time.secondsAgo":"秒前","connection.time.minutesAgo":"分前","connection.time.hoursAgo":"時間前","common.loading":"読み込み中...","common.retry":"再試行","common.reconnecting":"再接続中...","common.expand":"展開","common.collapse":"折りたたむ","tools.tab.history":"履歴","tools.tab.statistics":"統計","tools.tab.failures":"失敗","tools.col.time":"時刻","tools.col.time.tooltip":"ツール実行が記録された時刻です。","tools.col.toolAction":"ツール.アクション","tools.col.toolAction.tooltip":"実行されたツール名とアクションです。","tools.col.duration":"所要時間","tools.col.duration.tooltip":"ツール完了までにかかった時間です。","tools.col.status":"ステータス","tools.col.status.tooltip":"記録されたツール実行の結果です。","tools.col.tier":"ティア","tools.col.tier.tooltip":"そのツールまたはアクションに必要なライセンスティアです。","tools.col.tierStats.tooltip":"ツール統計行がBasic、Pro、Mixedのどれに当たるかを示します。","tools.col.tool":"ツール","tools.col.tool.tooltip":"統計テーブルに表示される統合ツール名です。","tools.col.calls":"呼び出し数","tools.col.calls.tooltip":"このツールで記録された総呼び出し回数です。","tools.col.ok":"OK","tools.col.ok.tooltip":"直接成功した実行回数です。","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"fallback 実行で成功した回数です。","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"fallback なしでブロックされた実行回数です。","tools.col.warn":"WARN","tools.col.warn.tooltip":"入力、プロジェクト状態、Roblox ポリシー、ユーザーコードに起因する想定内の失敗回数です。","tools.col.err":"失敗","tools.col.err.tooltip":"失敗で終了した実行回数です。","tools.col.okRate":"成功率","tools.col.okRate.tooltip":"正常に完了した呼び出しの割合です。","tools.col.avgTime":"平均時間","tools.col.avgTime.tooltip":"記録された呼び出し全体の平均実行時間です。","tools.col.error":"エラー","tools.filter.tool":"ツール","tools.filter.all":"すべて","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"この項目はPro専用のツールまたはアクションを使用しました。","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"要求したProアクションがBasic fallbackで成功しました。","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"要求したProアクションはブロックされ、fallbackも実行されませんでした。","tools.badge.warn":"WARN","tools.badge.warn.tooltip":"入力、プロジェクト状態、ポリシー、ユーザーコードに起因する想定内の失敗です。","tools.badge.err":"失敗","tools.badge.err.tooltip":"ツール実行が失敗で終了しました。","tools.status.ok":"OK","tools.status.ok.tooltip":"ツール実行が正常に完了しました。","tools.tier.mixed.tooltip":"このツールにはBasicとProのアクションが両方含まれます。","tools.detail.params":"パラメータ","tools.detail.params.tooltip":"このツール実行に渡された入力パラメータです。","tools.detail.result":"結果","tools.detail.result.tooltip":"このツール実行から返された結果ペイロードです。","tools.detail.requestedCommand":"送信したコマンド","tools.detail.executedCommand":"実行コマンド","tools.detail.alternatives":"代替候補","tools.detail.blockedMessage":"ブロック理由","tools.detail.noFallback":"Fallback なし","tools.detail.noFallback.value":"実行された fallback はありません。","tools.detail.warningMessage":"警告メッセージ","tools.detail.errorMessage":"エラーメッセージ","tools.detail.open":"詳細","tools.detail.openLabel":"{command} の詳細を表示","tools.detail.dialogLabel":"ツール実行の詳細","tools.detail.title":"ツール実行","tools.history.routing":"Routing","tools.history.routing.mode":"Mode","tools.history.routing.requested":"Requested","tools.history.routing.actual":"Actual","tools.history.routing.none":"No Studio target named","tools.clear.history.title":"履歴を削除しますか?","tools.clear.history.message":"現在の place のツール履歴を完全に削除します。","tools.clear.statistics.title":"統計を削除しますか?","tools.clear.statistics.message":"現在の place のツール統計を完全にリセットします。","tools.detail.error":"エラー","tools.page.prev":"前へ","tools.page.prev.tooltip":"ツール履歴の前のページへ移動します。","tools.page.next":"次へ","tools.page.next.tooltip":"ツール履歴の次のページへ移動します。","tools.empty.history":"履歴なし","tools.empty.stats":"ツール統計なし","tools.empty.failures":"失敗なし","tools.summary.total":"合計","tools.summary.calls":"呼び出し","tools.summary.sessions":"セッション","settings.license.title":"ライセンス","settings.license.title.tooltip":"現在のライセンス状態とサブスクリプションティアです。","settings.license.status":"ステータス","settings.license.status.tooltip":"現在のライセンス有効化状態です。","settings.license.tier":"ティア","settings.license.tier.tooltip":"利用できるWEPPY Dashboard機能を決める現在のサブスクリプションティアです。","settings.license.key":"キー","settings.license.key.tooltip":"現在サーバーに読み込まれているマスク済みライセンスキーです。","settings.license.keyValue.tooltip":"現在サーバーに読み込まれているマスク済みライセンスキーです。","settings.license.provider":"プロバイダー","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"このキーを検証するライセンスプロバイダーです。","settings.license.providerValue.tooltip":"このキーを検証するライセンスプロバイダーです。","settings.license.active":"有効","settings.license.active.tooltip":"現在のライセンス有効化状態です。","settings.license.status.activeCancelPending.tooltip":"解約は予約済みですが、現在の請求期間が終了するまでは Pro アクセスが維持されます。","settings.license.inactive":"無効","settings.license.inactive.tooltip":"現在のライセンス有効化状態です。","settings.license.expired":"期限切れ","settings.license.expired.tooltip":"現在のライセンス有効化状態です。","settings.license.unavailable":"ライセンス情報を取得できません","settings.license.detail.cancelPending":"解約が予約されました。現在の請求期間が終了するまでは Pro アクセスが維持されます。","settings.license.reset":"ライセンスをリセット","settings.readOnly":"読み取り専用","settings.readOnly.tooltip":"このセクションの値はWEPPY Dashboardから編集できません。","settings.unavailable":"設定を取得できません","settings.general.title":"一般設定","settings.general.title.tooltip":"変更すると即時反映されるHot設定です。","settings.general.liveApply":"即時反映","settings.general.liveApply.tooltip":"このセクションの変更は別の保存ボタンなしですぐ適用されます。","settings.general.applied":"適用済み","settings.general.logLevel":"ログレベル","settings.general.logLevel.tooltip":"WEPPY Dashboardログに出力する詳細度を設定します。","settings.general.localHistory":"ツール履歴記録","settings.general.localHistory.tooltip":"WEPPY Dashboard履歴画面用にローカルのツール実行履歴を保存します。","settings.general.localStatistics":"ツール統計収集","settings.general.localStatistics.tooltip":"WEPPY Dashboard表示用にローカル利用統計を集計します。","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WEPPY Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"操作タイムアウト","settings.general.requestTimeout.tooltip":"操作を失敗扱いにするまでWEPPY Dashboardが待機する最大時間です。","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"操作タイムアウトの単位はミリ秒です。","settings.cold.title":"サーバー環境変数","settings.cold.title.tooltip":"サーバー起動時に読み込まれる読み取り専用の環境変数です。","settings.cold.httpPort.tooltip":"MCPWEPPY DashboardHTTPサーバーが使用するポート番号です。","settings.cold.httpHost.tooltip":"MCPWEPPY DashboardHTTPサーバーがバインドするホストインターフェースです。","settings.cold.hint":"環境変数で設定してください。","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"MCPサーバー起動時のWEPPY Dashboardの動作を選択します。","settings.dashboard.nextStartBadge":"次回起動から","settings.dashboard.autoOpen.label":"WEPPY起動時にDashboardを開く","settings.dashboard.autoOpen.description":"MCPサーバーの起動後にこのDashboardを自動で開きます。","settings.dashboard.autoOpen.nextStart":"次回のMCPサーバー起動時から適用されます。","settings.dashboard.settingsFile.label":"設定ファイル","settings.dashboard.agentExample.label":"Agentへの依頼例","settings.dashboard.agentExample.prompt":"「Dashboardの自動起動をオフにして」","settings.dashboard.autoOpen.saving":"保存中…","settings.dashboard.autoOpen.saved":"次回のサーバー起動用に保存しました。","settings.dashboard.autoOpen.error":"保存できなかったため、以前の設定に戻しました。","dashboardAutoOpenGuide.eyebrow":"Dashboard設定","dashboardAutoOpenGuide.title":"WEPPY Dashboardの開き方を選択してください","dashboardAutoOpenGuide.currentOn":"自動起動は現在オンです。MCPサーバーの起動後にこのDashboardが開きます。","dashboardAutoOpenGuide.currentOff":"自動起動は現在オフです。MCPサーバーの起動時に新しいDashboardタブは開きません。","dashboardAutoOpenGuide.changeAnytime":"Settingsでいつでも変更できます。","dashboardAutoOpenGuide.agentHint":"Agentに「Dashboardの自動起動をオフにして」と依頼することもできます。","dashboardAutoOpenGuide.statusOn":"自動起動 オン","dashboardAutoOpenGuide.statusOff":"自動起動 オフ","dashboardAutoOpenGuide.keep":"現在の設定を維持","dashboardAutoOpenGuide.turnOff":"自動起動をオフにする","dashboardAutoOpenGuide.openSettings":"Settingsを開く","dashboardAutoOpenGuide.close":"自動起動の案内を閉じる","dashboardAutoOpenGuide.saving":"保存中…","dashboardAutoOpenGuide.error":"選択を保存できませんでした。もう一度お試しください。","settings.language.title":"言語","settings.language.title.tooltip":"WEPPY DashboardUIテキストの表示言語を選択します。","settings.language.dashboard":"WEPPY Dashboard言語","settings.language.dashboard.tooltip":"Autoではシステム言語を使い、それ以外では選択した言語を強制します。","settings.language.auto":"自動","overview.l0.title":"MCPサーバー切断","overview.l0.message":"MCPサーバーが応答していません。WEPPY Dashboardが自動的に再接続を試みます。","overview.l0.step1":"MCPサーバープロセスが実行中か確認してください","overview.l0.step2":"必要に応じてMCPサーバーコマンドを再起動してください","overview.l0.reconnecting":"3秒ごとに自動再接続中...","overview.l0.reconnectBtn":"再接続","overview.l0.settingsBtn":"設定を確認","overview.l1.pluginGuide":"Roblox Studioプラグインが接続されていません","overview.l1.check1":"Roblox Studioは実行中ですか?","overview.l1.check2":"WEPPY Pluginはインストール済みですか?","overview.l1.feedHint":"プラグインが接続されると変更がここに表示されます","overview.metric.server":"サーバー","overview.metric.server.tooltip":"MCPサーバーの実行状態とプロセス状態です。","overview.metric.plugin":"プラグイン","overview.metric.plugin.tooltip":"Roblox Studioプラグインの接続状態とバージョン情報です。","overview.metric.agent":"エージェント","overview.metric.agent.tooltip":"接続中のAIコーディングエージェントと現在の実行状態です。","overview.metric.agent.instancesUnit":"インスタンス","overview.metric.sync":"同期","overview.metric.sync.tooltip":"現在のStudioとローカルファイル間の同期状態です。","overview.metric.noAgent":"エージェントなし","overview.meta.version":"バージョン","overview.meta.version.tooltip":"インストールされているMCPサーバーのバージョンです。","overview.meta.session":"セッション","overview.meta.session.tooltip":"現在のMCPセッション識別子です。","overview.meta.pid":"PID","overview.meta.pid.tooltip":"OSが使用するプロセス識別子です。","overview.meta.uptime":"稼働時間","overview.meta.uptime.tooltip":"MCPサーバーの起動後に経過した時間です。","overview.feed.title":"最近のゲーム変更","overview.feed.empty":"最近の変更なし","overview.changelog.title":"セッション変更サマリー","overview.changelog.entries":"合計","overview.changelog.scripts":"スクリプト","overview.changelog.instances":"インスタンス","overview.changelog.properties":"プロパティ","overview.changelog.assets":"アセット","overview.tier.title":"ティア使用状況","changelog.subtitle":"ゲーム変更履歴","changelog.filter.all":"すべて","changelog.filter.active":"アクティブ","changelog.filter.completed":"完了","changelog.empty":"変更履歴がありません","changelog.basic.limit.title":"Basicプレビューでは最新3セッションのみ表示されます","changelog.basic.limit.body":"Proにアップグレードすると、このプレイスの完全な変更履歴タイムラインを確認できます。","changelog.basic.metricLabel":"表示中の変更履歴 / 全体","changelog.basic.visible":"表示中","changelog.basic.total":"全体","changelog.card.active":"アクティブ","changelog.card.active.tooltip":"このセッションはまだ新しいゲーム変更を受信しています。","changelog.card.completed":"完了","changelog.card.completed.tooltip":"このセッションは終了しており、これ以上変更は追加されません。","changelog.card.bootstrapStatus":"初期化","changelog.card.bootstrapStatus.tooltip":"このセッションには初期同期ブートストラップのスナップショットのみが含まれます。","changelog.card.inProgress":"進行中","changelog.card.noChanges":"変更なし","changelog.card.noChanges.tooltip":"このセッションではまだ抽出されたゲーム変更がありません。","changelog.card.bootstrapSummary":"初期同期スナップショット","changelog.card.bootstrapSummary.tooltip":"初期ファイル同期の書き込みは 1 件のブートストラップスナップショット行にまとめられます。","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"スクリプト","changelog.card.scripts.tooltip":"このセッションで発生したスクリプト変更です。","changelog.card.instances":"インスタンス","changelog.card.instances.tooltip":"このセッションで発生したインスタンスの作成、削除、移動、複製です。","changelog.card.modified":"変更","changelog.card.created":"作成","changelog.card.deleted":"削除","changelog.card.moved":"移動","changelog.card.propertiesChanged":"プロパティ変更","changelog.card.propertiesChanged.tooltip":"このセッションで記録されたプロパティ値の変更です。","changelog.card.lightingConfigured":"ライティング設定済み","changelog.card.lightingConfigured.tooltip":"このセッションでライティングまたは大気設定が変更されました。","changelog.card.terrainConfigured":"テレイン設定済み","changelog.card.terrainConfigured.tooltip":"このセッションでテレインデータまたはテレイン設定が変更されました。","changelog.card.assetsInserted":"アセット挿入","changelog.card.assetsInserted.tooltip":"このセッション中にプレイスへ挿入されたアセットです。","changelog.category.script":"スクリプト","changelog.category.instance":"インスタンス","changelog.category.property":"プロパティ","changelog.category.lighting":"ライティング","changelog.category.terrain":"テレイン","changelog.category.asset":"アセット","changelog.detail.dialogLabel":"変更履歴の詳細","changelog.detail.changeSummary":"変更サマリー","changelog.detail.changeSummary.tooltip":"このセッションで抽出されたゲーム変更数をカテゴリ別に表示します。","changelog.detail.changeTimeline":"変更タイムライン","changelog.detail.changeTimeline.tooltip":"このセッションで抽出されたゲーム変更を時系列で表示します。","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"変更前後の比較","changelog.detail.filterCategory":"カテゴリ","changelog.detail.filterCategory.tooltip":"タイムラインを 1 つの変更カテゴリに絞り込みます。","changelog.detail.confidence.exact":"正確","changelog.detail.confidence.exact.tooltip":"この変更は変更前と変更後の状態が両方確認されています。","changelog.detail.confidence.partial":"部分確認","changelog.detail.confidence.partial.tooltip":"この変更は変更前後の状態の一部のみ確認されています。","changelog.detail.confidence.afterOnly":"結果のみ確認","changelog.detail.confidence.afterOnly.tooltip":"この変更は適用後の結果状態のみ確認されています。","changelog.detail.confidence.intentOnly":"意図のみ記録","changelog.detail.confidence.intentOnly.tooltip":"要求された操作意図のみが記録され、結果状態は確認されていません。","changelog.detail.confidence.unknown":"不明","changelog.detail.confidence.unknown.tooltip":"利用可能なデータだけではこの変更を確実に分類できませんでした。","changelog.detail.noChanges":"このカテゴリに変更なし","changelog.detail.backToList":"一覧に戻る","changelog.diff.empty":"差分なし","changelog.diff.unified":"統合","changelog.diff.sideBySide":"並列比較","changelog.diff.before":"変更前","changelog.diff.after":"変更後","sync.targets.title":"接続中のStudio","sync.targets.refresh":"更新","sync.targets.loading":"StudioのSync状態を読み込み中…","sync.targets.unavailable":"StudioのSync状態を取得できません。再試行してください。","sync.targets.empty":"接続中のStudioはありません。WEPPY Pluginを接続してください。","sync.targets.unknownPlace":"不明なPlace","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"接続中","sync.targets.notReported":"未報告","sync.targets.state.unknown":"不明","sync.targets.state.off":"Sync OFF","sync.targets.state.idle":"Sync ON · 待機中","sync.targets.state.initializing":"初期化中","sync.targets.state.syncing":"同期中","sync.targets.state.paused":"一時停止","sync.targets.state.error":"エラー","sync.forwardStatus.label":"変更の送信","sync.forwardStatus.tooltip":"Edit の変更を送信できるかを示します。有効でも、すべてのローカルファイルが最新とは限りません。","sync.forwardStatus.inactive":"オフ","sync.forwardStatus.active":"有効","sync.forwardStatus.paused_play":"Play 中は一時停止","sync.forwardStatus.reconciling":"Edit の変更を確認中","sync.forwardStatus.blocked":"確認が必要","sync.forwardStatus.unknown":"不明","sync.forwardStatus.observedAt":"確認時刻","sync.forwardStatus.reason.review":"Studio Plugin で変更を確認してください。","sync.forwardStatus.reason.editChanged":"確認中に Edit が変更されました。Studio Plugin で Sync を確認してください。","sync.forwardStatus.reason.failed":"変更を確認できませんでした。Studio Plugin で Sync を確認してください。","sync.forwardStatus.reason.fallback":"詳しくは Studio Plugin を確認してください。","sync.stored.title":"保存済みPlace","sync.stored.data":"保存データ","sync.stored.ambiguous":"保存場所未確定","sync.detail.scope":"Sync詳細の表示対象","sync.detail.readOnly":"詳細表示はStudioルーティングを変更しません。","sync.detail.empty":"接続中のStudioまたは保存済みPlaceを選択してください。","sync.detail.unknown":"このStudioはSync状態をまだ報告していません。","sync.detail.error":"Syncエラーが報告されました。Studio Pluginで詳細を確認してください。","sync.detail.placeFolder":"Placeフォルダー","sync.detail.placeFolder.tooltip":"このPlaceを開いているStudioで共有する保存フォルダーです。","sync.detail.sharedData":"パス・件数・ログはPlace単位で共有されます。","sync.log.shared":"共有Placeログ","sync.log.unsafe":"保存場所が未確定のためログを表示できません。","sync.log.unavailable":"Placeログを読み込めませんでした。再試行してください。","sync.log.loading":"Placeログを読み込み中…","sync.clear.selectedMessage":"{place}の共有Syncログを完全に削除します。","sync.overlay.title":"Roblox Studioプラグインが必要です","sync.overlay.message":"Roblox Studioプラグインが接続されると同期状態を確認できます。","sync.overlay.check1":"Roblox Studioは実行中ですか?","sync.overlay.check2":"WEPPY Pluginはインストール済みですか?","sync.status.title":"同期ステータス","sync.status.title.tooltip":"このプレイスのStudioとローカルファイルの同期状態です。","sync.status.forwardOnly":"順方向のみ","sync.status.forwardOnly.tooltip":"BasicティアではStudioからローカルへの順方向同期のみ利用できます。","sync.status.place":"プレイス","sync.status.place.tooltip":"接続中のRobloxプレイス名とプレイスIDです。","sync.status.path":"パス","sync.status.path.tooltip":"現在同期出力に使っているローカルファイルシステムのルートです。","sync.status.instances":"インスタンス","sync.status.instances.tooltip":"ローカルミラーで追跡中の同期済みRobloxインスタンス総数です。","sync.status.scripts":"スクリプト","sync.status.scripts.tooltip":"このプレイスで現在インデックスされている同期スクリプトファイル数です。","sync.status.state":"状態","sync.status.state.tooltip":"サーバーが報告した現在の同期ランタイム状態です。","sync.policy.title":"Syncポリシー","sync.policy.title.tooltip":"接続中のStudioプラグインが報告した実効Syncポリシーです。","sync.policy.activation":"有効状態","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"ワークフロー","sync.policy.preset.studio_first":"Studio優先","sync.policy.preset.bidirectional_review":"双方向","sync.policy.preset.local_code_studio_world":"ローカルコード、Studioワールド","sync.policy.preset.custom":"カスタム","sync.policy.apply.title":"ローカル変更をStudioに適用する方法","sync.policy.apply.description":"ローカルでの変更を確認してから適用するか、Studioに自動適用するかを表示します。","sync.policy.apply.content":"コンテンツ変更","sync.policy.apply.content.tooltip":"ローカルで変更したScriptソース、プロパティ、サービスプロパティです。インスタンスの作成、削除、名前変更、移動は構造変更です。","sync.policy.apply.structure":"構造変更","sync.policy.apply.structure.tooltip":"ローカルでのインスタンス作成、削除、名前変更、移動です。ローカル削除の自動適用には、下の別の削除オプションも必要です。","sync.policy.apply.manual":"レビュー後に適用","sync.policy.apply.auto":"自動適用","sync.policy.scope.disclosure":"スコープ別の方向","sync.policy.scope.scriptSource":"スクリプトソース","sync.policy.scope.properties":"プロパティ","sync.policy.scope.structure":"構造","sync.policy.scope.serviceProperties":"サービスプロパティ","sync.policy.endpoint.local":"ローカル","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → ローカル","sync.policy.direction.forward.tooltip":"Studioの変更をローカルファイルに書き込みます。","sync.policy.direction.reverse":"ローカル → Studio","sync.policy.direction.reverse.tooltip":"ローカルファイルの変更をStudioに適用します。","sync.policy.direction.bidirectional":"双方向","sync.policy.direction.bidirectional.tooltip":"Studioからローカルへの変更と、ローカルからStudioへの変更の両方を適用できます。","sync.policy.safety.localDeletes":"ローカル削除 → Studioインスタンス削除","sync.policy.safety.review":"削除前にレビュー","sync.policy.safety.review.tooltip":"ローカルファイルの削除は、対応するStudioインスタンスを削除する前にレビューを待ちます。UI Studioの自動クリーンアップとは別の機能です。","sync.policy.safety.auto":"Studioへ自動削除","sync.policy.safety.auto.tooltip":"ローカルファイルを削除すると、対応するStudioインスタンスが自動的に削除される場合があります。UI Studioの自動クリーンアップとは別の機能です。","sync.policy.reviewRequired":"Syncを開始する前にStudioプラグインでこのポリシーを確認してください。","sync.log.title":"同期ログ","sync.log.empty":"同期イベントなし","sync.log.type.fullSyncStart":"開始","sync.log.type.fullSyncStart.tooltip":"完全同期を開始しました。","sync.log.type.fullSyncProgress":"進行中","sync.log.type.fullSyncProgress.tooltip":"完全同期のデータを保存しています。","sync.log.type.fullSyncComplete":"完了","sync.log.type.fullSyncComplete.tooltip":"完全同期が完了しました。","sync.log.type.fullSyncFailed":"失敗","sync.log.type.fullSyncFailed.tooltip":"完全同期を完了できずに終了しました。","sync.log.type.write":"書き込み","sync.log.type.write.tooltip":"新しい同期出力がディスクに書き込まれました。","sync.log.type.update":"更新","sync.log.type.update.tooltip":"既存の同期ファイルまたはインスタンスが更新されました。","sync.log.type.delete":"削除","sync.log.type.delete.tooltip":"同期済みファイルまたはインスタンスが削除されました。","sync.log.type.idle":"待機","sync.log.type.idle.tooltip":"ファイル変更なしで同期イベントのみ記録されました。","sync.upgrade.title":"Proの完全同期機能を確認","sync.upgrade.benefit1":"双方向同期 — ファイルを編集するとStudioに自動反映","sync.upgrade.benefit2":"逆方向同期 — ファイルの変更をStudioに送信","sync.upgrade.benefit3":"完全な同期履歴と詳細な変更ログ","sync.upgrade.buy":"Proを確認","playtest.status.title":"プレイテストステータス","playtest.status.title.tooltip":"Studio が報告した現在の Roblox プレイテストセッション状態です。","playtest.status.mode":"モード","playtest.status.mode.tooltip":"現在のセッションで使われている Studio プレイテスト起動モードです。","playtest.status.mode.value.tooltip":"現在使用中の Roblox Studio プレイテストモードの具体的な値です。","playtest.status.mode.play":"プレイ","playtest.status.mode.run":"実行","playtest.status.mode.server":"サーバー","playtest.status.mode.edit":"編集","playtest.status.place.tooltip":"このプレイテストセッションに関連付けられた Roblox プレイスです。","playtest.status.state.running":"実行中","playtest.status.state.running.tooltip":"現在 Roblox プレイテストセッションが実行中です。","playtest.status.state.paused":"一時停止","playtest.status.state.paused.tooltip":"現在の Roblox プレイテストセッションは一時停止中です。","playtest.status.state.notRunning":"未実行","playtest.status.state.notRunning.tooltip":"現在実行中の Roblox プレイテストセッションはありません。","playtest.control.play":"プレイ","playtest.control.pause":"一時停止","playtest.control.resume":"再開","playtest.control.stop":"停止","playtest.history.title":"テスト履歴","playtest.history.search":"テスト結果を検索","playtest.history.filter":"結果","playtest.history.filterAll":"すべての結果","playtest.history.filteredCount":"{{total}}件中{{visible}}件","playtest.history.title.tooltip":"このプロジェクトで記録された自動プレイテスト実行履歴です。","playtest.history.empty":"テスト結果なし","playtest.history.mode":"モード","playtest.history.mode.tooltip":"この記録済みテスト実行で使われたプレイテストモードです。","playtest.history.status.passed":"成功","playtest.history.status.failed":"失敗","playtest.history.status.running":"実行中","playtest.history.status.unknown":"不明","playtest.history.status.tooltip":"この自動プレイテスト実行で記録された結果状態です。","playtest.empty.title":"プレイテスト結果がありません","playtest.empty.message":"AIエージェントがPlaytestを実行すると、結果がここに表示されます。","playtest.empty.message.before":"AIエージェントがPlaytestを実行すると、結果がここに表示されます。","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"Ask the AI Agent to run a Playtest when you need a fresh report.","playtest.report.title":"選択されたレポート","playtest.report.title.tooltip":"現在選択されている自動プレイテスト実行の詳細出力です。","playtest.detail.dialogLabel":"プレイテストレポートの詳細","playtest.detail.loading":"レポートを読み込み中...","playtest.detail.errorTitle":"レポートを表示できません","playtest.report.content":"レポート","playtest.report.content.tooltip":"選択された自動プレイテスト実行の Markdown 要約です。","playtest.report.logs":"ログ","playtest.report.logs.tooltip":"選択された自動プレイテスト実行で収集された実行ログです。","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"レポート内容なし","playtest.basic.icon":"🎮","playtest.basic.title":"プレイテストはPro専用機能です","playtest.basic.desc":"WEPPY Dashboardからプレイテストを制御し、自動テストを実行し、詳細なテストレポートを確認できます。","playtest.basic.benefit1":"ワンクリックのプレイ/一時停止/停止コントロール","playtest.basic.benefit2":"AIエージェントによる自動テスト実行","playtest.basic.benefit3":"成功/失敗追跡付きテスト履歴","playtest.basic.benefit4":"詳細なマークダウンテストレポート","playtest.sample.badge":"Proプレイテスト画面のプレビュー","playtest.sample.title":"現在表示しているのは、Proにアップグレード後に利用できるプレイテスト画面のプレビューです。","playtest.sample.message":"このプレビューはサンプルデータを使用しています。ライブのプレイテスト操作、履歴管理、実際のレポート保存はPro購入後に利用できます。","playtest.sample.clearDisabled":"実際のプレイテスト履歴の削除はProで利用できます。","playtest.sample.place":"アリーナプレビュー","playtest.sample.history.name":"サンプルアリーナスモークテスト","playtest.sample.context.why":"アリーナにスポーンし、開始直後を生き残り、HUDがすぐ反応するか確認します。","playtest.sample.context.expected":"プレイヤーが安全にスポーンし、1秒以内にカウントダウンUIが表示され、最初のウェーブがエラーなく始まること。","playtest.sample.context.observed":"スポーン保護が正常に動作し、HUDは時間どおり更新され、最初のウェーブは回帰なく完了しました。","playtest.sample.report.markdown":`# サンプルアリーナスモークテスト
150
150
 
151
151
  - スポーンフロー: PASS
152
152
  - HUDカウントダウン: PASS
@@ -164,7 +164,7 @@ Isto é uma prévia de amostra. Faça upgrade para Pro para executar playtests a
164
164
  - Pertahankan adapterStudioOnly=true agar source memeriksa RunService:IsStudio() sebelum mengakses kode game. Gunakan false hanya jika saya secara eksplisit meminta pemeriksaan itu dihilangkan dan tampilkan peringatan production dalam plan.
165
165
  - Pertahankan source pengembangan. Adapter kelolaan WEPPY dengan guard boleh tetap ada saat publikasi dari Studio; tinjau kode kustom atau tanpa guard dan objek tes.
166
166
  - Tinjau perubahan kode dengan manage_studio.playtest_adapter_plan, lalu jalankan manage_studio.playtest_adapter_apply menggunakan token yang dikembalikan hanya setelah meninjau diff dan penggunaannya.
167
- - Tampilkan lokasi kode sumber, file yang diubah, profil yang menggunakannya, perilaku cleanup, dan hal yang harus saya periksa secara manual sebelum publikasi.`,"sidebar.overview":"Ringkasan","sidebar.changelog":"Riwayat","sidebar.connection":"Koneksi","sidebar.sync":"Sinkronisasi","sidebar.playtest":"Playtest","sidebar.tools":"Alat","sidebar.settings":"Pengaturan","sidebar.ui_studio":"UI Studio","sidebar.gate.l1":"Koneksi server MCP diperlukan.","sidebar.gate.l2":"Koneksi plugin Roblox Studio diperlukan.","header.currentProject":"Proyek saat ini","header.unknownProject":"Proyek tidak dikenal","header.projectRoot.label":"Project Root","header.currentProject.loading":"Memuat project root...","header.currentProject.unavailable":"Project root tidak tersedia","header.placeNotConnected":"Place belum terhubung","header.currentProject.tooltip":"Folder proyek yang sedang dipilih.","header.currentProject.loading.tooltip":"Informasi project root masih dimuat.","header.currentProject.unavailable.tooltip":"Informasi project root saat ini tidak tersedia.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Memuat sync root...","header.currentProjectSyncRoot.unavailable":"Sync root tidak tersedia","header.currentProjectSyncRoot.tooltip":"Folder sync root saat ini untuk proyek yang dipilih.","header.currentProjectSyncRoot.loading.tooltip":"Informasi sync root masih dimuat.","header.currentProjectSyncRoot.unavailable.tooltip":"Informasi sync root saat ini tidak tersedia.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"Path file test tidak tersedia.","header.testFiles.tooltip":"Direktori file playtest saat ini untuk place yang dipilih.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Koneksi plugin diperlukan","header.places.liveRequired":"Koneksi plugin diperlukan untuk melihat place aktif secara live.","header.place.tooltip":"Place Roblox yang terhubung.","header.placeNotConnected.tooltip":"Place belum terhubung","placeScope.current.label":"Place saat ini","placeScope.lastActive.label":"Place aktif terakhir","placeScope.selected.label":"Place yang dipilih","placeScope.unknownPlace":"Place tidak dikenal","placeScope.live":"Live","placeScope.connected":"Studio terhubung","placeScope.stored":"Data tersimpan","placeScope.connectedGroup":"Studio terhubung","placeScope.storedGroup":"Data tersimpan","placeScope.stored.note":"Place ini saat ini tidak terbuka di Studio yang terhubung.","placeScope.pluginRequired":"Plugin diperlukan","placeScope.pluginRequired.note":"Hubungkan WEPPY Plugin untuk mengonfirmasi place aktif live.","placeScope.noPlace.label":"Cakupan place","placeScope.noPlace.value":"Belum ada data place","placeScope.noPlace.badge":"Tidak ada place","placeScope.noPlace.note":"Hubungkan WEPPY Plugin dan sinkronkan place untuk membuat data per place.","placeScope.selected.note":"Hanya menampilkan data tersimpan. Routing Studio tidak berubah.","placeScope.surface.sync":"Status sinkronisasi dan log memakai place ini.","placeScope.surface.changelog":"Sesi changelog memakai place ini.","placeScope.surface.playtest":"Laporan playtest memakai place ini.","placeScope.surface.uiStudio":"Capture UI dan riwayat perubahan memakai place ini.","placeScope.surface.tools":"Riwayat dan statistik tool memakai place ini.","placeScope.loading":"Memuat cakupan place...","placeScope.unavailable":"Cakupan place tidak tersedia","placeScope.selector.label":"Data place","placeScope.shortcuts.trigger":"Tautan cepat","placeScope.shortcuts.label":"Tautan place","placeScope.shortcuts.settings":"Pengaturan place","placeScope.shortcuts.experience":"Kelola pengalaman","placeScope.shortcuts.roblox":"Lihat di Roblox","placeScope.folder.duplicate":"Folder duplikat","placeScope.folder.unresolved":"Folder perwakilan belum dikonfirmasi","placeScope.folder.noSyncHistory":"Belum ada riwayat sinkronisasi","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Detail folder Place","placeScope.folder.duplicateReason":"Lokasi penyimpanan saat ini adalah {canonicalFolder}. Folder ini dicadangkan setelah sinkronisasi penuh berhasil.","placeScope.folder.unresolvedReason":"Place ini tetap dapat dipilih berdasarkan ID, tetapi belum ada folder tertentu yang dikonfirmasi sebagai perwakilan.","placeScope.folder.unknown":"tidak diketahui","placeScope.selector.noneSelectable":"Tidak ada folder Place yang dapat dipilih","header.changeProjectRoot":"Ubah project root","header.changeProjectRoot.ariaLabel":"Ubah project root","header.changeProjectRoot.tooltip":"Ubah project root saat ini.","header.changeProjectRoot.disabledTooltip.l0":"Koneksi server MCP diperlukan terlebih dahulu sebelum project root bisa diubah.","header.changeProjectRoot.disabledTooltip.loading":"Informasi project root masih dimuat.","header.changeProjectRoot.disabledTooltip.unavailable":"Informasi project root saat ini tidak tersedia.","header.projectRootModal.initial.title":"Ubah project root","header.projectRootModal.initial.body.connected":"Setelah Anda memilih folder proyek, MCP akan beralih ke project root baru dan konten Studio saat ini akan disinkronkan ulang sepenuhnya ke target baru <selected project folder>/weppy-project-sync.","header.projectRootModal.initial.body.disconnected":"Setelah Anda memilih folder proyek, MCP akan beralih ke project root baru dan menggunakan <selected project folder>/weppy-project-sync sebagai target sync berikutnya.","header.projectRootModal.initial.nextSyncRoot":"Target sync baru setelah pemilihan","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"Sync saat ini berhenti seketika.","header.projectRootModal.initial.warningFreshSync":"Konten Studio saat ini akan digunakan untuk membuat fresh full sync di target baru.","header.projectRootModal.initial.warningNoMove":"Folder sync lama tidak dipindahkan secara otomatis.","header.projectRootModal.initial.warningDeferredSync":"Jika Studio belum terhubung, full resync akan dimulai saat plugin terhubung berikutnya.","header.projectRootModal.confirm.title":"Konfirmasi project root baru","header.projectRootModal.confirm.body":"Tinjau folder proyek yang dipilih sebelum menerapkan perubahan.","header.projectRootModal.confirm.projectRoot":"Folder proyek yang dipilih","header.projectRootModal.confirm.syncRoot":"Target sync baru","header.projectRootModal.confirm.warningNoMove":"Folder sync yang ada tidak dipindahkan secara otomatis.","header.projectRootModal.pick":"Pilih folder","header.projectRootModal.apply":"Terapkan perubahan","header.projectRootModal.cancel":"Batal","header.projectRootModal.error":"Gagal mengubah project root.","status.online":"Online","status.offline":"Offline","status.idle":"Menunggu","status.syncing":"Menyinkronkan","status.error":"Error","status.initializing":"Menginisialisasi","level.l0.title":"Server terputus","level.l0.message":"WEPPY Dashboard terbuka tetapi server MCP telah berhenti atau tidak merespons.","level.l1.title":"Server terhubung","level.l1.hint":"Periksa: Apakah Roblox Studio berjalan? Apakah plugin terinstal?","level.l2.ok":"Studio terhubung","tier.basic":"Basic","tier.basic.tooltip":"Tier Basic dengan kumpulan fitur WEPPY Dashboard standar.","tier.pro":"Pro","tier.pro.tooltip":"Tier Pro dengan kumpulan fitur WEPPY Dashboard lengkap.","tier.mixed":"Campuran","tier.upgrade":"Lihat Pro","tier.banner.save":"Hemat token AI dengan Pro!","tier.tool.query_instances.desc":"Kueri instance, jelajahi anak/keturunan, info kelas, cari berdasarkan nama dan kelas. Pro: pohon file, struktur proyek, pencarian berdasarkan properti dan tag.","tier.tool.mutate_instances.desc":"Buat, hapus, klon, pindah, ganti nama, dan pivot instance. Pro: pembuatan pohon, pembuatan/penghapusan/duplikasi massal.","tier.tool.manage_properties.desc":"Lihat dan atur properti, atribut, dan tag. Pro: nilai kalkulasi dan relatif, lihat/atur massal, modifikasi massal anak.","tier.tool.manage_scripts.desc":"Baca, tulis, buat, hapus, edit baris, dan cari di script. Pro: penggantian massal antar script.","tier.tool.manage_ui.desc":"Khusus Pro. Buat atau perbaiki menu, HUD, tombol, label, dan panel gambar bergaya game, lalu tangkap layar dan tinjau saran peningkatan.","tier.tool.manage_ui.action.design_brief":"Rencanakan arah UI","tier.tool.manage_ui.action.create_tree":"Buat UI baru","tier.tool.manage_ui.action.update":"Perbarui UI yang ada","tier.tool.manage_ui.action.delete":"Hapus UI","tier.tool.manage_ui.action.preview":"Tangkap layar UI","tier.tool.manage_ui.action.check":"Tinjau saran peningkatan","tier.tool.manage_lighting.desc":"Khusus Pro. Pengaturan pencahayaan, atmosfer, langit, properti terrain, dan waktu.","tier.tool.manage_selection.desc":"Lihat, atur, dan hapus seleksi. Pro: konteks, detail, tambah/hapus item, pantau perubahan.","tier.tool.manage_camera.desc":"Info kamera, fokus berdasarkan jalur atau koordinat, saran tampilan.","tier.tool.manage_tween.desc":"Khusus Pro. Buat, putar, jeda, dan batalkan tween untuk animasi halus.","tier.tool.manage_audio.desc":"Khusus Pro. Putar, hentikan, jeda, dan lanjutkan suara. Atur listener audio.","tier.tool.manage_animation.desc":"Khusus Pro. Muat, putar, dan hentikan animasi. Lihat track humanoid/pengontrol.","tier.tool.manage_physics.desc":"Khusus Pro. Daftarkan grup tabrakan, atur tabrakan antar grup, daftar grup.","tier.tool.manage_effects.desc":"Khusus Pro. Pancarkan partikel, hapus semua, aktifkan/nonaktifkan efek.","tier.tool.manage_terrain.desc":"Khusus Pro. Isi bentuk, hapus wilayah, ganti material, kelola warna, baca/tulis voxel, pembuatan prosedural, pemulusan.","tier.tool.spatial_query.desc":"Khusus Pro. Raycast, cari tanah, periksa penempatan, pindai area, cari area datar dan titik spawn, analisis kemampuan jalan, peta spasial, deteksi tabrakan.","tier.tool.manage_assets.desc":"Khusus Pro. Sisipkan model, lihat info aset, cari di toko kreator, sisipkan model/paket gratis, ekspor.","tier.tool.manage_sync.desc":"Khusus Pro. Status sinkronisasi, konfigurasi, riwayat, arah, baca/tulis file tersinkronisasi.","tier.tool.workspace_state.desc":"Khusus Pro. Sinkronisasi penuh, tangkapan layar, perubahan terbaru, info viewport, metadata, manajemen cache.","tier.tool.manage_logs.desc":"Kueri log terfilter, polling inkremental, hapus buffer, kueri error terbaru.","tier.tool.system_info.desc":"Status koneksi, verifikasi tier. Pro: info tempat, daftar layanan, pengaturan Studio, kontrol playtest, pengujian otomatis.","tier.tool.manage_studio.desc":"Khusus Pro. Alihkan pengaturan tampilan editor Studio seperti preview UI untuk screenshot dan QA; ini mengubah sesi Studio, bukan objek UI game.","tier.tool.batch_execute.desc":"Khusus Pro. Eksekusi beberapa perintah sekaligus. Pemrosesan berurutan dengan opsi lanjut saat error.","tier.tool.execute_luau.desc":"Khusus Pro. Jalankan kode Luau di sandbox Roblox Studio.","connection.server.title":"Status Bridge","connection.server.version":"Versi","connection.server.version.tooltip":"Versi runtime WEPPY Bridge.","connection.server.pid":"PID","connection.server.pid.tooltip":"Pengenal proses dari sistem operasi.","connection.server.uptime":"Waktu aktif","connection.server.uptime.tooltip":"Waktu yang berlalu sejak WEPPY Bridge dimulai.","connection.server.session":"Sesi","connection.server.session.tooltip":"Pengenal sesi WEPPY Bridge saat ini.","connection.server.exec":"Eksekutabel","connection.server.exec.tooltip":"Path eksekutabel yang digunakan untuk menjalankan WEPPY Bridge.","connection.server.restart":"Mulai ulang Bridge","connection.server.restarting":"Memulai ulang…","connection.server.restartUnavailable":"Hubungkan setidaknya satu AI Agent agar MCP Adapter-nya dapat menjalankan Bridge baru.","connection.server.restartTitle":"Mulai ulang WEPPY Bridge?","connection.server.restartMessage":"Dashboard dan target Studio akan terputus sebentar. Hasil perintah yang sedang berjalan mungkin tidak dapat dipastikan, dan sesi Playtest aktif atau kontrol tertunda akan dibersihkan. MCP Adapter yang terhubung akan menjalankan Bridge baru secara otomatis.","connection.server.restartConfirm":"Mulai ulang Bridge","connection.server.restartRequesting":"Meminta mulai ulang Bridge…","connection.server.restartReconnecting":"Menghubungkan kembali ke WEPPY Bridge…","connection.server.restartWaiting":"Dashboard dan Studio akan terhubung kembali secara otomatis setelah Bridge baru siap.","connection.server.restartSucceeded":"WEPPY Bridge telah dimulai ulang","connection.server.restartFailed":"WEPPY Bridge tidak dapat dimulai ulang","connection.server.restartTimeout":"Bridge baru tidak siap tepat waktu. Periksa koneksi MCP di alat AI Anda, lalu coba lagi.","connection.server.restartStale":"Bridge berubah sebelum permintaan diterima. Segarkan status saat ini lalu coba lagi.","connection.reconnect":"Hubungkan ulang","connection.checkSettings":"Periksa pengaturan","connection.agents.title":"Agen AI","connection.agents.name":"Agen","connection.agents.version":"Versi","connection.agents.version.tooltip":"Versi paket MCP Adapter untuk sesi agen ini.","connection.agents.cwd":"Direktori kerja","connection.agents.cwd.tooltip":"Direktori kerja saat ini milik agen AI yang terhubung.","connection.agents.projectRoot":"Root Proyek","connection.agents.projectRoot.tooltip":"Jalur proyek otoritatif untuk kepemilikan sinkronisasi","connection.agents.projectRoot.unresolved":"Belum terselesaikan","connection.agents.connected":"Terhubung","connection.agents.unknown":"Tidak diketahui","connection.agents.none":"Tidak ada agen terhubung","connection.plugins.title":"Plugin","connection.plugins.place":"Place","connection.plugins.clientId":"Connection ID","connection.plugins.clientId.tooltip":"Full connection ID for diagnostics","connection.plugins.lastSeen":"Terakhir terlihat","connection.plugins.lastSeen.tooltip":"Heartbeat terbaru yang diterima dari plugin.","connection.plugins.version":"Versi","connection.plugins.version.tooltip":"Versi plugin terpasang yang dilaporkan oleh Studio.","connection.plugins.none":"Tidak ada plugin terhubung","connection.targets.title":"Studio Targets","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"Short name for this Roblox Studio window","connection.targets.place":"Place","connection.targets.placeId":"Place ID","connection.targets.placeId.tooltip":"Roblox Place ID for this Studio window","connection.targets.clientId":"Connection ID","connection.targets.clientId.tooltip":"Full connection ID for diagnostics. Usually use Studio ID instead.","connection.targets.session":"Session","connection.targets.session.tooltip":"Command channel state for this Studio target","connection.targets.lastUsed":"Last Used","connection.targets.lastUsed.tooltip":"Most recent plugin-route request routed to this Studio target","connection.targets.lastSeen":"Last Seen","connection.targets.lastSeen.tooltip":"Most recent heartbeat received from this Studio target","connection.targets.version":"Version","connection.targets.version.tooltip":"Installed plugin version reported by Studio","connection.targets.routing":"Routing","connection.targets.routing.tooltip":"Default Studio window when the agent does not name one","connection.targets.inFlight":"In Flight","connection.targets.inFlight.tooltip":"Active command request currently routed to this Studio target","connection.targets.studioState":"Studio State","connection.targets.studioState.tooltip":"Current edit/play runtime state reported by this Studio window","connection.targets.studioState.edit":"Edit","connection.targets.studioState.running":"Running","connection.targets.studioState.paused":"Paused","connection.targets.studioState.unknown":"Unknown","connection.targets.studioState.source.thread":"WEPPY play command","connection.targets.studioState.source.pluginConnection":"Koneksi Play/Test Studio","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"Unknown source","connection.targets.studioState.updatedUnknown":"not reported","connection.targets.copyPlaceId":"Copy Place ID","connection.targets.copyTargetAlias":"Copy Studio ID","connection.targets.copyClientId":"Copy Connection ID","connection.targets.copied":"Copied value","connection.targets.copyFailed":"Failed to copy value","connection.targets.none":"No Studio targets connected. Open Roblox Studio and connect WEPPY Plugin.","connection.targets.help":"When multiple Studio windows are connected, tell the agent to use Studio ID studio-1 to choose one.","connection.topology.ariaLabel":"Connection topology","connection.topology.title":"Connection topology","connection.topology.description":"Setiap agen AI terhubung melalui MCP Adapter miliknya ke WEPPY Bridge bersama, yang menjaga koneksi Roblox Studio.","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"Active","connection.topology.stale":"Stale","connection.topology.unknown":"Unknown","connection.topology.lastContact":"Kontak terakhir","connection.topology.noContact":"Belum ada kontak terbaru","connection.topology.versionUnknown":"Version unknown","connection.topology.placeUnknown":"Place unknown","connection.topology.moreAgents":"+{count} more agents","connection.topology.moreStudios":"+{count} more studios","connection.topology.allAgentsVisible":"All agents visible","connection.topology.allStudiosVisible":"All studios visible","connection.topology.showAll":"Show all","connection.topology.showLess":"Show less","connection.topology.showAllAgents":"Show all AI agents","connection.topology.showAllStudios":"Show all Studio targets","connection.topology.showLessAgents":"Show less AI agents","connection.topology.showLessStudios":"Show less Studio targets","connection.routing.updateFailed":"Failed to update routing target","connection.log.title":"Log Koneksi","connection.log.empty":"Belum ada event","connection.time.secondsAgo":"dtk lalu","connection.time.minutesAgo":"mnt lalu","connection.time.hoursAgo":"jam lalu","common.loading":"Memuat...","common.retry":"Coba lagi","common.reconnecting":"Menghubungkan ulang...","common.expand":"Perluas","common.collapse":"Ciutkan","tools.tab.history":"Riwayat","tools.tab.statistics":"Statistik","tools.tab.failures":"Kegagalan","tools.col.time":"Waktu","tools.col.time.tooltip":"Waktu ketika eksekusi alat dicatat.","tools.col.toolAction":"Alat.Aksi","tools.col.toolAction.tooltip":"Nama alat dan aksi yang dijalankan.","tools.col.duration":"Durasi","tools.col.duration.tooltip":"Berapa lama alat menyelesaikan eksekusi.","tools.col.status":"Status","tools.col.status.tooltip":"Hasil dari eksekusi alat yang tercatat.","tools.col.tier":"Tier","tools.col.tier.tooltip":"Tier lisensi yang dibutuhkan untuk alat atau aksi ini.","tools.col.tierStats.tooltip":"Ringkasan Basic, Pro, atau Mixed untuk baris statistik alat ini.","tools.col.tool":"Alat","tools.col.tool.tooltip":"Nama alat konsolidasi pada tabel statistik.","tools.col.calls":"Panggilan","tools.col.calls.tooltip":"Jumlah total panggilan yang tercatat untuk alat ini.","tools.col.ok":"OK","tools.col.ok.tooltip":"Jumlah eksekusi sukses langsung.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Jumlah eksekusi yang berhasil melalui fallback.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Jumlah eksekusi yang diblokir tanpa fallback.","tools.col.warn":"WARN","tools.col.warn.tooltip":"Jumlah kegagalan yang diperkirakan karena input, status proyek, kebijakan Roblox, atau kode pengguna.","tools.col.err":"GAGAL","tools.col.err.tooltip":"Jumlah eksekusi yang berakhir gagal.","tools.col.okRate":"% Sukses","tools.col.okRate.tooltip":"Persentase panggilan yang selesai dengan sukses.","tools.col.avgTime":"Waktu rata-rata","tools.col.avgTime.tooltip":"Rata-rata waktu eksekusi dari panggilan yang tercatat.","tools.col.error":"Error","tools.filter.tool":"Alat","tools.filter.all":"Semua","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Entri ini menggunakan alat atau aksi khusus Pro.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"Aksi Pro yang diminta berhasil melalui fallback Basic.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"Aksi Pro yang diminta diblokir dan tidak ada fallback yang dijalankan.","tools.badge.warn":"WARN","tools.badge.warn.tooltip":"Panggilan alat gagal karena masalah input, proyek, kebijakan, atau kode pengguna yang diperkirakan.","tools.badge.err":"GAGAL","tools.badge.err.tooltip":"Eksekusi alat berakhir gagal.","tools.status.ok":"OK","tools.status.ok.tooltip":"Eksekusi alat selesai dengan sukses.","tools.tier.mixed.tooltip":"Alat ini memiliki campuran aksi Basic dan Pro.","tools.detail.params":"Parameter","tools.detail.params.tooltip":"Parameter input yang dikirim pada eksekusi alat ini.","tools.detail.result":"Hasil","tools.detail.result.tooltip":"Payload hasil yang dikembalikan dari eksekusi alat ini.","tools.detail.requestedCommand":"Perintah dikirim","tools.detail.executedCommand":"Perintah dijalankan","tools.detail.alternatives":"Alternatif","tools.detail.blockedMessage":"Alasan diblokir","tools.detail.noFallback":"Tanpa fallback","tools.detail.noFallback.value":"Tidak ada fallback yang dijalankan.","tools.detail.warningMessage":"Pesan peringatan","tools.detail.errorMessage":"Pesan error","tools.detail.open":"Detail","tools.detail.openLabel":"Lihat detail untuk {command}","tools.detail.dialogLabel":"Detail eksekusi alat","tools.detail.title":"Eksekusi alat","tools.history.routing":"Routing","tools.history.routing.mode":"Mode","tools.history.routing.requested":"Requested","tools.history.routing.actual":"Actual","tools.history.routing.none":"No Studio target named","tools.clear.history.title":"Hapus riwayat?","tools.clear.history.message":"Tindakan ini akan menghapus permanen riwayat alat untuk place saat ini.","tools.clear.statistics.title":"Hapus statistik?","tools.clear.statistics.message":"Tindakan ini akan mereset permanen statistik alat untuk place saat ini.","tools.detail.error":"Error","tools.page.prev":"Sebelumnya","tools.page.prev.tooltip":"Pindah ke halaman sebelumnya pada riwayat alat.","tools.page.next":"Selanjutnya","tools.page.next.tooltip":"Pindah ke halaman berikutnya pada riwayat alat.","tools.empty.history":"Tidak ada entri riwayat","tools.empty.stats":"Tidak ada statistik alat","tools.empty.failures":"Tidak ada kegagalan","tools.summary.total":"Total","tools.summary.calls":"panggilan","tools.summary.sessions":"Sesi","settings.license.title":"Lisensi","settings.license.title.tooltip":"Status lisensi dan tier langganan saat ini.","settings.license.status":"Status","settings.license.status.tooltip":"Status aktivasi lisensi saat ini.","settings.license.tier":"Tier","settings.license.tier.tooltip":"Tier langganan saat ini untuk fitur WEPPY Dashboard yang tersedia.","settings.license.key":"Kunci","settings.license.key.tooltip":"Kunci lisensi tersamarkan yang saat ini dimuat oleh server.","settings.license.keyValue.tooltip":"Kunci lisensi tersamarkan yang saat ini dimuat oleh server.","settings.license.provider":"Penyedia","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"Penyedia lisensi yang digunakan untuk memvalidasi kunci ini.","settings.license.providerValue.tooltip":"Penyedia lisensi yang digunakan untuk memvalidasi kunci ini.","settings.license.active":"Aktif","settings.license.active.tooltip":"Status aktivasi lisensi saat ini.","settings.license.status.activeCancelPending.tooltip":"Pembatalan sedang menunggu, tetapi akses Pro tetap aktif hingga periode penagihan saat ini berakhir.","settings.license.inactive":"Tidak aktif","settings.license.inactive.tooltip":"Status aktivasi lisensi saat ini.","settings.license.expired":"Kedaluwarsa","settings.license.expired.tooltip":"Status aktivasi lisensi saat ini.","settings.license.unavailable":"Info lisensi tidak tersedia","settings.license.detail.cancelPending":"Pembatalan telah dijadwalkan. Akses Pro tetap aktif hingga periode penagihan saat ini berakhir.","settings.license.reset":"Reset Lisensi","settings.readOnly":"Hanya baca","settings.readOnly.tooltip":"Bagian ini menampilkan nilai yang tidak bisa diedit dari WEPPY Dashboard.","settings.unavailable":"Pengaturan tidak tersedia","settings.general.title":"Pengaturan umum","settings.general.title.tooltip":"Pengaturan panas yang langsung diterapkan saat diubah.","settings.general.liveApply":"Terapkan langsung","settings.general.liveApply.tooltip":"Perubahan di bagian ini langsung diterapkan tanpa tombol simpan terpisah.","settings.general.applied":"Diterapkan","settings.general.logLevel":"Level log","settings.general.logLevel.tooltip":"Menetapkan seberapa detail WEPPY Dashboard menulis lognya.","settings.general.localHistory":"Perekaman riwayat alat","settings.general.localHistory.tooltip":"Menyimpan riwayat eksekusi alat lokal untuk tampilan riwayat WEPPY Dashboard.","settings.general.localStatistics":"Pengumpulan statistik alat","settings.general.localStatistics.tooltip":"Mengumpulkan statistik penggunaan lokal untuk pelaporan WEPPY Dashboard.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WEPPY Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"Batas waktu tindakan","settings.general.requestTimeout.tooltip":"Waktu maksimum WEPPY Dashboard menunggu tindakan sebelum dianggap gagal.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"Batas waktu tindakan diukur dalam milidetik.","settings.cold.title":"Lingkungan server","settings.cold.title.tooltip":"Nilai lingkungan server hanya-baca yang dimuat saat startup.","settings.cold.httpPort.tooltip":"Nomor port yang digunakan oleh server HTTP WEPPY Dashboard MCP.","settings.cold.httpHost.tooltip":"Antarmuka host yang diikat oleh server HTTP WEPPY Dashboard MCP.","settings.cold.hint":"Atur melalui variabel lingkungan.","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"Pilih perilaku WEPPY Dashboard saat server MCP dimulai.","settings.dashboard.nextStartBadge":"Mulai berikutnya","settings.dashboard.autoOpen.label":"Buka Dashboard saat WEPPY dimulai","settings.dashboard.autoOpen.description":"Membuka Dashboard ini secara otomatis setelah server MCP dimulai.","settings.dashboard.autoOpen.nextStart":"Berlaku saat server MCP dimulai berikutnya.","settings.dashboard.settingsFile.label":"File pengaturan","settings.dashboard.agentExample.label":"Minta Agent Anda","settings.dashboard.agentExample.prompt":"“Nonaktifkan buka otomatis Dashboard”.","settings.dashboard.autoOpen.saving":"Menyimpan…","settings.dashboard.autoOpen.saved":"Disimpan untuk startup server berikutnya.","settings.dashboard.autoOpen.error":"Tidak dapat menyimpan. Pengaturan sebelumnya telah dipulihkan.","dashboardAutoOpenGuide.eyebrow":"Preferensi Dashboard","dashboardAutoOpenGuide.title":"Pilih cara WEPPY Dashboard dibuka","dashboardAutoOpenGuide.currentOn":"Buka otomatis sedang aktif. Dashboard ini dibuka setelah server MCP dimulai.","dashboardAutoOpenGuide.currentOff":"Buka otomatis sedang nonaktif. WEPPY tidak akan membuka tab Dashboard baru saat server MCP dimulai.","dashboardAutoOpenGuide.changeAnytime":"Anda dapat mengubahnya kapan saja di Settings.","dashboardAutoOpenGuide.agentHint":"Anda juga dapat meminta Agent, “Nonaktifkan buka otomatis Dashboard”.","dashboardAutoOpenGuide.statusOn":"Buka otomatis aktif","dashboardAutoOpenGuide.statusOff":"Buka otomatis nonaktif","dashboardAutoOpenGuide.keep":"Pertahankan pengaturan saat ini","dashboardAutoOpenGuide.turnOff":"Nonaktifkan buka otomatis","dashboardAutoOpenGuide.openSettings":"Buka Settings","dashboardAutoOpenGuide.close":"Tutup panduan buka otomatis","dashboardAutoOpenGuide.saving":"Menyimpan…","dashboardAutoOpenGuide.error":"Pilihan Anda tidak dapat disimpan. Coba lagi.","settings.language.title":"Bahasa","settings.language.title.tooltip":"Pilih cara teks antarmuka WEPPY Dashboard dilokalkan.","settings.language.dashboard":"Bahasa WEPPY Dashboard","settings.language.dashboard.tooltip":"Mengganti bahasa WEPPY Dashboard atau mengikuti bahasa sistem saat disetel ke Otomatis.","settings.language.auto":"Otomatis","overview.l0.title":"Server MCP terputus","overview.l0.message":"Server MCP tidak merespons. WEPPY Dashboard akan mencoba menghubungkan ulang secara otomatis.","overview.l0.step1":"Periksa apakah proses server MCP sedang berjalan","overview.l0.step2":"Mulai ulang perintah server MCP jika diperlukan","overview.l0.reconnecting":"Menghubungkan ulang otomatis setiap 3 detik...","overview.l0.reconnectBtn":"Hubungkan ulang","overview.l0.settingsBtn":"Periksa pengaturan","overview.l1.pluginGuide":"Plugin Roblox Studio tidak terhubung","overview.l1.check1":"Apakah Roblox Studio sedang berjalan?","overview.l1.check2":"Apakah WEPPY Plugin sudah terinstal?","overview.l1.feedHint":"Perubahan akan muncul di sini setelah plugin terhubung","overview.metric.server":"Server","overview.metric.server.tooltip":"Status runtime dan proses server MCP.","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Status koneksi dan versi plugin Roblox Studio.","overview.metric.agent":"Agen","overview.metric.agent.tooltip":"Agen coding AI yang terhubung dan status runtime-nya.","overview.metric.agent.instancesUnit":"instansi","overview.metric.sync":"Sinkronisasi","overview.metric.sync.tooltip":"Aktivitas sinkronisasi saat ini antara Studio dan file lokal.","overview.metric.noAgent":"Tidak ada agen","overview.meta.version":"Versi","overview.meta.version.tooltip":"Versi server MCP yang terpasang.","overview.meta.session":"Sesi","overview.meta.session.tooltip":"Pengenal sesi MCP saat ini.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Pengenal proses dari sistem operasi.","overview.meta.uptime":"Waktu aktif","overview.meta.uptime.tooltip":"Waktu yang berlalu sejak server MCP dimulai.","overview.feed.title":"Perubahan game terbaru","overview.feed.empty":"Tidak ada perubahan terbaru","overview.changelog.title":"Ringkasan perubahan sesi","overview.changelog.entries":"Total","overview.changelog.scripts":"skrip","overview.changelog.instances":"instansi","overview.changelog.properties":"properti","overview.changelog.assets":"aset","overview.tier.title":"Penggunaan tier","changelog.subtitle":"Riwayat perubahan game","changelog.filter.all":"Semua","changelog.filter.active":"Aktif","changelog.filter.completed":"Selesai","changelog.empty":"Belum ada entri riwayat","changelog.basic.limit.title":"Pratinjau Basic hanya menampilkan 3 sesi terbaru","changelog.basic.limit.body":"Upgrade ke Pro untuk melihat timeline changelog lengkap untuk place ini.","changelog.basic.metricLabel":"Changelog terlihat / Total","changelog.basic.visible":"terlihat","changelog.basic.total":"total","changelog.card.active":"Aktif","changelog.card.active.tooltip":"Sesi ini masih menerima perubahan game baru.","changelog.card.completed":"Selesai","changelog.card.completed.tooltip":"Sesi ini sudah berakhir dan tidak ada perubahan baru yang diharapkan.","changelog.card.bootstrapStatus":"Inisialisasi","changelog.card.bootstrapStatus.tooltip":"Sesi ini hanya berisi tangkapan layar bootstrap sinkronisasi awal.","changelog.card.inProgress":"sedang berlangsung","changelog.card.noChanges":"Belum ada perubahan","changelog.card.noChanges.tooltip":"Belum ada perubahan game yang diekstrak untuk sesi ini.","changelog.card.bootstrapSummary":"Snapshot sinkronisasi awal","changelog.card.bootstrapSummary.tooltip":"Penulisan sinkronisasi file awal diringkas menjadi satu baris tangkapan layar bootstrap.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"skrip","changelog.card.scripts.tooltip":"Perubahan skrip yang terjadi di sesi ini.","changelog.card.instances":"instansi","changelog.card.instances.tooltip":"Perubahan pembuatan, penghapusan, pemindahan, atau kloning instansi di sesi ini.","changelog.card.modified":"diubah","changelog.card.created":"dibuat","changelog.card.deleted":"dihapus","changelog.card.moved":"dipindahkan","changelog.card.propertiesChanged":"properti diubah","changelog.card.propertiesChanged.tooltip":"Perubahan nilai properti yang tercatat untuk sesi ini.","changelog.card.lightingConfigured":"Pencahayaan dikonfigurasi","changelog.card.lightingConfigured.tooltip":"Pencahayaan atau pengaturan atmosfer berubah di sesi ini.","changelog.card.terrainConfigured":"Terrain dikonfigurasi","changelog.card.terrainConfigured.tooltip":"Data terrain atau pengaturan terrain berubah di sesi ini.","changelog.card.assetsInserted":"aset disisipkan","changelog.card.assetsInserted.tooltip":"Aset yang dimasukkan ke place selama sesi ini.","changelog.category.script":"Skrip","changelog.category.instance":"Instansi","changelog.category.property":"Properti","changelog.category.lighting":"Pencahayaan","changelog.category.terrain":"Terrain","changelog.category.asset":"Aset","changelog.detail.dialogLabel":"Detail riwayat perubahan","changelog.detail.changeSummary":"Ringkasan perubahan","changelog.detail.changeSummary.tooltip":"Jumlah perubahan game yang diekstrak dan dikelompokkan per kategori untuk sesi ini.","changelog.detail.changeTimeline":"Timeline perubahan","changelog.detail.changeTimeline.tooltip":"Daftar kronologis perubahan game yang diekstrak untuk sesi ini.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Sebelum & Sesudah","changelog.detail.filterCategory":"Kategori","changelog.detail.filterCategory.tooltip":"Filter timeline ke satu kategori perubahan.","changelog.detail.confidence.exact":"Tepat","changelog.detail.confidence.exact.tooltip":"Status sebelum dan sesudah perubahan ini sama-sama terkonfirmasi.","changelog.detail.confidence.partial":"Parsial","changelog.detail.confidence.partial.tooltip":"Hanya sebagian status sebelum dan sesudah perubahan ini yang bisa dikonfirmasi.","changelog.detail.confidence.afterOnly":"Hanya sesudah","changelog.detail.confidence.afterOnly.tooltip":"Hanya status hasil setelah perubahan yang bisa dikonfirmasi.","changelog.detail.confidence.intentOnly":"Hanya niat","changelog.detail.confidence.intentOnly.tooltip":"Hanya aksi yang diminta yang tercatat, bukan status hasilnya.","changelog.detail.confidence.unknown":"Tidak diketahui","changelog.detail.confidence.unknown.tooltip":"Perubahan ini tidak dapat diklasifikasikan dengan yakin dari data yang tersedia.","changelog.detail.noChanges":"Tidak ada perubahan di kategori ini","changelog.detail.backToList":"Kembali ke daftar","changelog.diff.empty":"Tidak ada perbedaan","changelog.diff.unified":"Terpadu","changelog.diff.sideBySide":"Berdampingan","changelog.diff.before":"Sebelum","changelog.diff.after":"Sesudah","sync.targets.title":"Studio terhubung","sync.targets.refresh":"Segarkan","sync.targets.loading":"Memuat status Sync Studio…","sync.targets.unavailable":"Status Sync Studio tidak tersedia. Coba lagi.","sync.targets.empty":"Tidak ada Studio terhubung. Hubungkan WEPPY Plugin untuk melihat status Sync langsung.","sync.targets.unknownPlace":"Place tidak diketahui","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"Terhubung","sync.targets.notReported":"Belum dilaporkan","sync.targets.state.unknown":"Tidak diketahui","sync.targets.state.off":"Sync NONAKTIF","sync.targets.state.idle":"Sync AKTIF · menunggu","sync.targets.state.initializing":"Menginisialisasi","sync.targets.state.syncing":"Menyinkronkan","sync.targets.state.paused":"Dijeda","sync.targets.state.error":"Kesalahan","sync.forwardStatus.label":"Pengiriman perubahan","sync.forwardStatus.tooltip":"Menunjukkan apakah perubahan Edit dapat dikirim. Aktif tidak menjamin semua file lokal sudah terbaru.","sync.forwardStatus.inactive":"Nonaktif","sync.forwardStatus.active":"Aktif","sync.forwardStatus.paused_play":"Dijeda saat Play","sync.forwardStatus.reconciling":"Memeriksa perubahan Edit","sync.forwardStatus.blocked":"Perlu perhatian","sync.forwardStatus.unknown":"Tidak diketahui","sync.forwardStatus.observedAt":"Diamati","sync.forwardStatus.reason.review":"Tinjau perubahan di Studio Plugin.","sync.forwardStatus.reason.editChanged":"Edit berubah selama pemeriksaan. Periksa Sync di Studio Plugin.","sync.forwardStatus.reason.failed":"Perubahan tidak dapat dikonfirmasi. Periksa Sync di Studio Plugin.","sync.forwardStatus.reason.fallback":"Periksa detailnya di Studio Plugin.","sync.stored.title":"Place tersimpan","sync.stored.data":"Data tersimpan","sync.stored.ambiguous":"Lokasi penyimpanan belum dikonfirmasi","sync.detail.scope":"Melihat detail Sync untuk","sync.detail.readOnly":"Melihat detail tidak mengubah perutean Studio.","sync.detail.empty":"Pilih Studio terhubung atau Place tersimpan.","sync.detail.unknown":"Studio ini belum melaporkan status Sync.","sync.detail.error":"Sync melaporkan kesalahan. Periksa Studio Plugin untuk detailnya.","sync.detail.placeFolder":"Folder Place","sync.detail.placeFolder.tooltip":"Folder tersimpan yang dibagikan Studio yang membuka Place ini.","sync.detail.sharedData":"Path, jumlah, dan log milik Place dan dibagikan oleh Studio yang membukanya.","sync.log.shared":"Log Place bersama","sync.log.unsafe":"Lokasi penyimpanan Place ini belum dikonfirmasi untuk akses log.","sync.log.unavailable":"Log Place tidak dapat dimuat. Coba lagi.","sync.log.loading":"Memuat log Place…","sync.clear.selectedMessage":"Ini menghapus permanen log Sync bersama untuk {place}.","sync.overlay.title":"Plugin Roblox Studio diperlukan","sync.overlay.message":"Status sinkronisasi akan tersedia setelah plugin Roblox Studio terhubung.","sync.overlay.check1":"Apakah Roblox Studio sedang berjalan?","sync.overlay.check2":"Apakah WEPPY Plugin sudah terinstal?","sync.status.title":"Status sinkronisasi","sync.status.title.tooltip":"Status sinkronisasi Studio dan file lokal untuk place ini.","sync.status.forwardOnly":"Hanya maju","sync.status.forwardOnly.tooltip":"Tier Basic hanya mengizinkan sinkronisasi maju dari Studio ke lokal.","sync.status.place":"Place","sync.status.place.tooltip":"Nama place Roblox yang terhubung beserta ID place-nya.","sync.status.path":"Path","sync.status.path.tooltip":"Root sistem file lokal yang saat ini dipakai untuk output sinkronisasi.","sync.status.instances":"Instansi","sync.status.instances.tooltip":"Jumlah total instance Roblox yang disinkronkan di mirror lokal.","sync.status.scripts":"Skrip","sync.status.scripts.tooltip":"Jumlah total file skrip yang saat ini diindeks untuk place ini.","sync.status.state":"Status","sync.status.state.tooltip":"Status runtime sinkronisasi saat ini yang dilaporkan server.","sync.policy.title":"Kebijakan Sync","sync.policy.title.tooltip":"Kebijakan Sync efektif yang dilaporkan oleh plugin Studio yang terhubung.","sync.policy.activation":"Aktivasi","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"Alur kerja","sync.policy.preset.studio_first":"Studio lebih dahulu","sync.policy.preset.bidirectional_review":"Dua arah","sync.policy.preset.local_code_studio_world":"Kode lokal, dunia Studio","sync.policy.preset.custom":"Kustom","sync.policy.apply.title":"Cara menerapkan perubahan lokal ke Studio","sync.policy.apply.description":"Menampilkan apakah perubahan lokal ditinjau lebih dulu atau diterapkan otomatis ke Studio.","sync.policy.apply.content":"Perubahan konten","sync.policy.apply.content.tooltip":"Perubahan lokal pada Sumber Script, properti, dan properti layanan. Membuat, menghapus, mengganti nama, dan memindahkan adalah perubahan struktur.","sync.policy.apply.structure":"Perubahan struktur","sync.policy.apply.structure.tooltip":"Pembuatan, penghapusan, penggantian nama, dan pemindahan instance secara lokal. Penghapusan lokal otomatis juga memerlukan opsi penghapusan terpisah di bawah.","sync.policy.apply.manual":"Tinjau dahulu","sync.policy.apply.auto":"Terapkan otomatis","sync.policy.scope.disclosure":"Arah per cakupan","sync.policy.scope.scriptSource":"Sumber script","sync.policy.scope.properties":"Properti","sync.policy.scope.structure":"Struktur","sync.policy.scope.serviceProperties":"Properti layanan","sync.policy.endpoint.local":"Lokal","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → Lokal","sync.policy.direction.forward.tooltip":"Perubahan Studio ditulis ke file lokal.","sync.policy.direction.reverse":"Lokal → Studio","sync.policy.direction.reverse.tooltip":"Perubahan file lokal diterapkan ke Studio.","sync.policy.direction.bidirectional":"Dua arah","sync.policy.direction.bidirectional.tooltip":"Perubahan dapat bergerak dari Studio ke file lokal dan dari file lokal ke Studio.","sync.policy.safety.localDeletes":"Hapus lokal → hapus instance Studio","sync.policy.safety.review":"Tinjau sebelum menghapus","sync.policy.safety.review.tooltip":"Penghapusan file lokal menunggu tinjauan sebelum instance Studio yang sesuai dihapus. Ini terpisah dari pembersihan otomatis UI Studio.","sync.policy.safety.auto":"Hapus otomatis di Studio","sync.policy.safety.auto.tooltip":"Menghapus file lokal dapat secara otomatis menghapus instance Studio yang sesuai. Ini terpisah dari pembersihan otomatis UI Studio.","sync.policy.reviewRequired":"Tinjau kebijakan ini di plugin Studio sebelum memulai Sync.","sync.log.title":"Log sinkronisasi","sync.log.empty":"Tidak ada event sinkronisasi","sync.log.type.write":"TULIS","sync.log.type.write.tooltip":"Output sinkronisasi baru ditulis ke disk.","sync.log.type.update":"PERBARUI","sync.log.type.update.tooltip":"File atau instance yang sudah tersinkron diperbarui.","sync.log.type.delete":"HAPUS","sync.log.type.delete.tooltip":"File atau instance tersinkron telah dihapus.","sync.log.type.idle":"IDLE","sync.log.type.idle.tooltip":"Event sinkronisasi dicatat tanpa perubahan file.","sync.upgrade.title":"Lihat sinkronisasi penuh dengan Pro","sync.upgrade.benefit1":"Sinkronisasi dua arah — edit file, otomatis diterapkan ke Studio","sync.upgrade.benefit2":"Sinkronisasi mundur — kirim perubahan file ke Studio","sync.upgrade.benefit3":"Riwayat sinkronisasi lengkap dan log perubahan detail","sync.upgrade.buy":"Lihat Pro","playtest.status.title":"Status playtest","playtest.status.title.tooltip":"Status sesi playtest Roblox saat ini yang dilaporkan oleh Studio.","playtest.status.mode":"Mode","playtest.status.mode.tooltip":"Mode peluncuran playtest Studio untuk sesi saat ini.","playtest.status.mode.value.tooltip":"Mode playtest Roblox Studio spesifik yang sedang dipakai saat ini.","playtest.status.mode.play":"Main","playtest.status.mode.run":"Jalankan","playtest.status.mode.server":"Server","playtest.status.mode.edit":"Edit","playtest.status.place.tooltip":"Place Roblox yang saat ini terkait dengan sesi playtest ini.","playtest.status.state.running":"Berjalan","playtest.status.state.running.tooltip":"Sesi playtest Roblox saat ini sedang berjalan.","playtest.status.state.paused":"Dijeda","playtest.status.state.paused.tooltip":"Sesi playtest Roblox saat ini sedang dijeda.","playtest.status.state.notRunning":"Tidak berjalan","playtest.status.state.notRunning.tooltip":"Saat ini tidak ada sesi playtest Roblox yang sedang berjalan.","playtest.control.play":"Main","playtest.control.pause":"Jeda","playtest.control.resume":"Lanjutkan","playtest.control.stop":"Berhenti","playtest.history.title":"Riwayat tes","playtest.history.search":"Cari hasil pengujian","playtest.history.filter":"Hasil","playtest.history.filterAll":"Semua hasil","playtest.history.filteredCount":"{{visible}} dari {{total}} hasil","playtest.history.title.tooltip":"Riwayat eksekusi playtest otomatis yang tercatat untuk proyek ini.","playtest.history.empty":"Belum ada hasil tes","playtest.history.mode":"Mode","playtest.history.mode.tooltip":"Mode playtest yang digunakan pada eksekusi tes yang tercatat ini.","playtest.history.status.passed":"Berhasil","playtest.history.status.failed":"Gagal","playtest.history.status.running":"Berjalan","playtest.history.status.unknown":"Tidak diketahui","playtest.history.status.tooltip":"Status hasil yang tercatat untuk eksekusi playtest otomatis ini.","playtest.empty.title":"Belum ada hasil playtest","playtest.empty.message":"Hasil akan muncul di sini setelah agen AI menjalankan Playtest.","playtest.empty.message.before":"Hasil akan muncul di sini setelah agen AI menjalankan Playtest.","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"Ask the AI Agent to run a Playtest when you need a fresh report.","playtest.report.title":"Laporan terpilih","playtest.report.title.tooltip":"Output detail untuk eksekusi playtest otomatis yang sedang dipilih.","playtest.detail.dialogLabel":"Detail laporan playtest","playtest.detail.loading":"Memuat laporan...","playtest.detail.errorTitle":"Laporan tidak tersedia","playtest.report.content":"Laporan","playtest.report.content.tooltip":"Ringkasan Markdown untuk eksekusi playtest otomatis yang dipilih.","playtest.report.logs":"Log","playtest.report.logs.tooltip":"Log eksekusi yang ditangkap untuk eksekusi playtest otomatis yang dipilih.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"Tidak ada konten laporan","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest adalah fitur khusus Pro","playtest.basic.desc":"Kontrol playtest dari WEPPY Dashboard, jalankan tes otomatis, dan lihat laporan tes detail.","playtest.basic.benefit1":"Kontrol main/jeda/berhenti sekali klik","playtest.basic.benefit2":"Eksekusi tes otomatis via agen AI","playtest.basic.benefit3":"Riwayat tes dengan pelacakan berhasil/gagal","playtest.basic.benefit4":"Laporan tes detail dalam markdown","playtest.sample.badge":"Pratinjau tampilan playtest Pro","playtest.sample.title":"Anda sedang melihat pratinjau layar playtest yang tersedia setelah upgrade ke Pro.","playtest.sample.message":"Pratinjau ini menggunakan data sampel. Kontrol playtest langsung, pengelolaan riwayat, dan laporan nyata tersedia setelah upgrade ke Pro.","playtest.sample.clearDisabled":"Upgrade ke Pro untuk menghapus riwayat playtest nyata.","playtest.sample.place":"Pratinjau Arena","playtest.sample.history.name":"Sample Arena Smoke Test","playtest.sample.context.why":"Masuk ke arena, bertahan pada fase awal, dan pastikan HUD merespons segera.","playtest.sample.context.expected":"Pemain spawn dengan aman, UI hitung mundur muncul dalam satu detik, dan wave pertama dimulai tanpa error.","playtest.sample.context.observed":"Proteksi spawn bekerja, HUD diperbarui tepat waktu, dan wave pertama selesai tanpa regresi.","playtest.sample.report.markdown":`# Sample Arena Smoke Test
167
+ - Tampilkan lokasi kode sumber, file yang diubah, profil yang menggunakannya, perilaku cleanup, dan hal yang harus saya periksa secara manual sebelum publikasi.`,"sidebar.overview":"Ringkasan","sidebar.changelog":"Riwayat","sidebar.connection":"Koneksi","sidebar.sync":"Sinkronisasi","sidebar.playtest":"Playtest","sidebar.tools":"Alat","sidebar.settings":"Pengaturan","sidebar.ui_studio":"UI Studio","sidebar.gate.l1":"Koneksi server MCP diperlukan.","sidebar.gate.l2":"Koneksi plugin Roblox Studio diperlukan.","header.currentProject":"Proyek saat ini","header.unknownProject":"Proyek tidak dikenal","header.projectRoot.label":"Project Root","header.currentProject.loading":"Memuat project root...","header.currentProject.unavailable":"Project root tidak tersedia","header.placeNotConnected":"Place belum terhubung","header.currentProject.tooltip":"Folder proyek yang sedang dipilih.","header.currentProject.loading.tooltip":"Informasi project root masih dimuat.","header.currentProject.unavailable.tooltip":"Informasi project root saat ini tidak tersedia.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Memuat sync root...","header.currentProjectSyncRoot.unavailable":"Sync root tidak tersedia","header.currentProjectSyncRoot.tooltip":"Folder sync root saat ini untuk proyek yang dipilih.","header.currentProjectSyncRoot.loading.tooltip":"Informasi sync root masih dimuat.","header.currentProjectSyncRoot.unavailable.tooltip":"Informasi sync root saat ini tidak tersedia.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"Path file test tidak tersedia.","header.testFiles.tooltip":"Direktori file playtest saat ini untuk place yang dipilih.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Koneksi plugin diperlukan","header.places.liveRequired":"Koneksi plugin diperlukan untuk melihat place aktif secara live.","header.place.tooltip":"Place Roblox yang terhubung.","header.placeNotConnected.tooltip":"Place belum terhubung","placeScope.current.label":"Place saat ini","placeScope.lastActive.label":"Place aktif terakhir","placeScope.selected.label":"Place yang dipilih","placeScope.unknownPlace":"Place tidak dikenal","placeScope.live":"Live","placeScope.connected":"Studio terhubung","placeScope.stored":"Data tersimpan","placeScope.connectedGroup":"Studio terhubung","placeScope.storedGroup":"Data tersimpan","placeScope.stored.note":"Place ini saat ini tidak terbuka di Studio yang terhubung.","placeScope.pluginRequired":"Plugin diperlukan","placeScope.pluginRequired.note":"Hubungkan WEPPY Plugin untuk mengonfirmasi place aktif live.","placeScope.noPlace.label":"Cakupan place","placeScope.noPlace.value":"Belum ada data place","placeScope.noPlace.badge":"Tidak ada place","placeScope.noPlace.note":"Hubungkan WEPPY Plugin dan sinkronkan place untuk membuat data per place.","placeScope.selected.note":"Hanya menampilkan data tersimpan. Routing Studio tidak berubah.","placeScope.surface.sync":"Status sinkronisasi dan log memakai place ini.","placeScope.surface.changelog":"Sesi changelog memakai place ini.","placeScope.surface.playtest":"Laporan playtest memakai place ini.","placeScope.surface.uiStudio":"Capture UI dan riwayat perubahan memakai place ini.","placeScope.surface.tools":"Riwayat dan statistik tool memakai place ini.","placeScope.loading":"Memuat cakupan place...","placeScope.unavailable":"Cakupan place tidak tersedia","placeScope.selector.label":"Data place","placeScope.shortcuts.trigger":"Tautan cepat","placeScope.shortcuts.label":"Tautan place","placeScope.shortcuts.settings":"Pengaturan place","placeScope.shortcuts.experience":"Kelola pengalaman","placeScope.shortcuts.roblox":"Lihat di Roblox","placeScope.folder.duplicate":"Folder duplikat","placeScope.folder.unresolved":"Folder perwakilan belum dikonfirmasi","placeScope.folder.noSyncHistory":"Belum ada riwayat sinkronisasi","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Detail folder Place","placeScope.folder.duplicateReason":"Lokasi penyimpanan saat ini adalah {canonicalFolder}. Folder ini dicadangkan setelah sinkronisasi penuh berhasil.","placeScope.folder.unresolvedReason":"Place ini tetap dapat dipilih berdasarkan ID, tetapi belum ada folder tertentu yang dikonfirmasi sebagai perwakilan.","placeScope.folder.unknown":"tidak diketahui","placeScope.selector.noneSelectable":"Tidak ada folder Place yang dapat dipilih","header.changeProjectRoot":"Ubah project root","header.changeProjectRoot.ariaLabel":"Ubah project root","header.changeProjectRoot.tooltip":"Ubah project root saat ini.","header.changeProjectRoot.disabledTooltip.l0":"Koneksi server MCP diperlukan terlebih dahulu sebelum project root bisa diubah.","header.changeProjectRoot.disabledTooltip.loading":"Informasi project root masih dimuat.","header.changeProjectRoot.disabledTooltip.unavailable":"Informasi project root saat ini tidak tersedia.","header.projectRootModal.initial.title":"Ubah project root","header.projectRootModal.initial.body.connected":"Setelah Anda memilih folder proyek, MCP akan beralih ke project root baru dan konten Studio saat ini akan disinkronkan ulang sepenuhnya ke target baru <selected project folder>/weppy-project-sync.","header.projectRootModal.initial.body.disconnected":"Setelah Anda memilih folder proyek, MCP akan beralih ke project root baru dan menggunakan <selected project folder>/weppy-project-sync sebagai target sync berikutnya.","header.projectRootModal.initial.nextSyncRoot":"Target sync baru setelah pemilihan","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/weppy-project-sync","header.projectRootModal.initial.warningStop":"Sync saat ini berhenti seketika.","header.projectRootModal.initial.warningFreshSync":"Konten Studio saat ini akan digunakan untuk membuat fresh full sync di target baru.","header.projectRootModal.initial.warningNoMove":"Folder sync lama tidak dipindahkan secara otomatis.","header.projectRootModal.initial.warningDeferredSync":"Jika Studio belum terhubung, full resync akan dimulai saat plugin terhubung berikutnya.","header.projectRootModal.confirm.title":"Konfirmasi project root baru","header.projectRootModal.confirm.body":"Tinjau folder proyek yang dipilih sebelum menerapkan perubahan.","header.projectRootModal.confirm.projectRoot":"Folder proyek yang dipilih","header.projectRootModal.confirm.syncRoot":"Target sync baru","header.projectRootModal.confirm.warningNoMove":"Folder sync yang ada tidak dipindahkan secara otomatis.","header.projectRootModal.pick":"Pilih folder","header.projectRootModal.apply":"Terapkan perubahan","header.projectRootModal.cancel":"Batal","header.projectRootModal.error":"Gagal mengubah project root.","status.online":"Online","status.offline":"Offline","status.idle":"Menunggu","status.syncing":"Menyinkronkan","status.error":"Error","status.initializing":"Menginisialisasi","level.l0.title":"Server terputus","level.l0.message":"WEPPY Dashboard terbuka tetapi server MCP telah berhenti atau tidak merespons.","level.l1.title":"Server terhubung","level.l1.hint":"Periksa: Apakah Roblox Studio berjalan? Apakah plugin terinstal?","level.l2.ok":"Studio terhubung","tier.basic":"Basic","tier.basic.tooltip":"Tier Basic dengan kumpulan fitur WEPPY Dashboard standar.","tier.pro":"Pro","tier.pro.tooltip":"Tier Pro dengan kumpulan fitur WEPPY Dashboard lengkap.","tier.mixed":"Campuran","tier.upgrade":"Lihat Pro","tier.banner.save":"Hemat token AI dengan Pro!","tier.tool.query_instances.desc":"Kueri instance, jelajahi anak/keturunan, info kelas, cari berdasarkan nama dan kelas. Pro: pohon file, struktur proyek, pencarian berdasarkan properti dan tag.","tier.tool.mutate_instances.desc":"Buat, hapus, klon, pindah, ganti nama, dan pivot instance. Pro: pembuatan pohon, pembuatan/penghapusan/duplikasi massal.","tier.tool.manage_properties.desc":"Lihat dan atur properti, atribut, dan tag. Pro: nilai kalkulasi dan relatif, lihat/atur massal, modifikasi massal anak.","tier.tool.manage_scripts.desc":"Baca, tulis, buat, hapus, edit baris, dan cari di script. Pro: penggantian massal antar script.","tier.tool.manage_ui.desc":"Khusus Pro. Buat atau perbaiki menu, HUD, tombol, label, dan panel gambar bergaya game, lalu tangkap layar dan tinjau saran peningkatan.","tier.tool.manage_ui.action.design_brief":"Rencanakan arah UI","tier.tool.manage_ui.action.create_tree":"Buat UI baru","tier.tool.manage_ui.action.update":"Perbarui UI yang ada","tier.tool.manage_ui.action.delete":"Hapus UI","tier.tool.manage_ui.action.preview":"Tangkap layar UI","tier.tool.manage_ui.action.check":"Tinjau saran peningkatan","tier.tool.manage_lighting.desc":"Khusus Pro. Pengaturan pencahayaan, atmosfer, langit, properti terrain, dan waktu.","tier.tool.manage_selection.desc":"Lihat, atur, dan hapus seleksi. Pro: konteks, detail, tambah/hapus item, pantau perubahan.","tier.tool.manage_camera.desc":"Info kamera, fokus berdasarkan jalur atau koordinat, saran tampilan.","tier.tool.manage_tween.desc":"Khusus Pro. Buat, putar, jeda, dan batalkan tween untuk animasi halus.","tier.tool.manage_audio.desc":"Khusus Pro. Putar, hentikan, jeda, dan lanjutkan suara. Atur listener audio.","tier.tool.manage_animation.desc":"Khusus Pro. Muat, putar, dan hentikan animasi. Lihat track humanoid/pengontrol.","tier.tool.manage_physics.desc":"Khusus Pro. Daftarkan grup tabrakan, atur tabrakan antar grup, daftar grup.","tier.tool.manage_effects.desc":"Khusus Pro. Pancarkan partikel, hapus semua, aktifkan/nonaktifkan efek.","tier.tool.manage_terrain.desc":"Khusus Pro. Isi bentuk, hapus wilayah, ganti material, kelola warna, baca/tulis voxel, pembuatan prosedural, pemulusan.","tier.tool.spatial_query.desc":"Khusus Pro. Raycast, cari tanah, periksa penempatan, pindai area, cari area datar dan titik spawn, analisis kemampuan jalan, peta spasial, deteksi tabrakan.","tier.tool.manage_assets.desc":"Khusus Pro. Sisipkan model, lihat info aset, cari di toko kreator, sisipkan model/paket gratis, ekspor.","tier.tool.manage_sync.desc":"Khusus Pro. Status sinkronisasi, konfigurasi, riwayat, arah, baca/tulis file tersinkronisasi.","tier.tool.workspace_state.desc":"Khusus Pro. Sinkronisasi penuh, tangkapan layar, perubahan terbaru, info viewport, metadata, manajemen cache.","tier.tool.manage_logs.desc":"Kueri log terfilter, polling inkremental, hapus buffer, kueri error terbaru.","tier.tool.system_info.desc":"Status koneksi, verifikasi tier. Pro: info tempat, daftar layanan, pengaturan Studio, kontrol playtest, pengujian otomatis.","tier.tool.manage_studio.desc":"Khusus Pro. Alihkan pengaturan tampilan editor Studio seperti preview UI untuk screenshot dan QA; ini mengubah sesi Studio, bukan objek UI game.","tier.tool.batch_execute.desc":"Khusus Pro. Eksekusi beberapa perintah sekaligus. Pemrosesan berurutan dengan opsi lanjut saat error.","tier.tool.execute_luau.desc":"Khusus Pro. Jalankan kode Luau di sandbox Roblox Studio.","connection.server.title":"Status Bridge","connection.server.version":"Versi","connection.server.version.tooltip":"Versi runtime WEPPY Bridge.","connection.server.pid":"PID","connection.server.pid.tooltip":"Pengenal proses dari sistem operasi.","connection.server.uptime":"Waktu aktif","connection.server.uptime.tooltip":"Waktu yang berlalu sejak WEPPY Bridge dimulai.","connection.server.session":"Sesi","connection.server.session.tooltip":"Pengenal sesi WEPPY Bridge saat ini.","connection.server.exec":"Eksekutabel","connection.server.exec.tooltip":"Path eksekutabel yang digunakan untuk menjalankan WEPPY Bridge.","connection.server.restart":"Mulai ulang Bridge","connection.server.restarting":"Memulai ulang…","connection.server.restartUnavailable":"Hubungkan setidaknya satu AI Agent agar MCP Adapter-nya dapat menjalankan Bridge baru.","connection.server.restartTitle":"Mulai ulang WEPPY Bridge?","connection.server.restartMessage":"Dashboard dan target Studio akan terputus sebentar. Hasil perintah yang sedang berjalan mungkin tidak dapat dipastikan, dan sesi Playtest aktif atau kontrol tertunda akan dibersihkan. MCP Adapter yang terhubung akan menjalankan Bridge baru secara otomatis.","connection.server.restartConfirm":"Mulai ulang Bridge","connection.server.restartRequesting":"Meminta mulai ulang Bridge…","connection.server.restartReconnecting":"Menghubungkan kembali ke WEPPY Bridge…","connection.server.restartWaiting":"Dashboard dan Studio akan terhubung kembali secara otomatis setelah Bridge baru siap.","connection.server.restartSucceeded":"WEPPY Bridge telah dimulai ulang","connection.server.restartFailed":"WEPPY Bridge tidak dapat dimulai ulang","connection.server.restartTimeout":"Bridge baru tidak siap tepat waktu. Periksa koneksi MCP di alat AI Anda, lalu coba lagi.","connection.server.restartStale":"Bridge berubah sebelum permintaan diterima. Segarkan status saat ini lalu coba lagi.","connection.reconnect":"Hubungkan ulang","connection.checkSettings":"Periksa pengaturan","connection.agents.title":"Agen AI","connection.agents.name":"Agen","connection.agents.version":"Versi","connection.agents.version.tooltip":"Versi paket MCP Adapter untuk sesi agen ini.","connection.agents.cwd":"Direktori kerja","connection.agents.cwd.tooltip":"Direktori kerja saat ini milik agen AI yang terhubung.","connection.agents.projectRoot":"Root Proyek","connection.agents.projectRoot.tooltip":"Jalur proyek otoritatif untuk kepemilikan sinkronisasi","connection.agents.projectRoot.unresolved":"Belum terselesaikan","connection.agents.connected":"Terhubung","connection.agents.unknown":"Tidak diketahui","connection.agents.none":"Tidak ada agen terhubung","connection.plugins.title":"Plugin","connection.plugins.place":"Place","connection.plugins.clientId":"Connection ID","connection.plugins.clientId.tooltip":"Full connection ID for diagnostics","connection.plugins.lastSeen":"Terakhir terlihat","connection.plugins.lastSeen.tooltip":"Heartbeat terbaru yang diterima dari plugin.","connection.plugins.version":"Versi","connection.plugins.version.tooltip":"Versi plugin terpasang yang dilaporkan oleh Studio.","connection.plugins.none":"Tidak ada plugin terhubung","connection.targets.title":"Studio Targets","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"Short name for this Roblox Studio window","connection.targets.place":"Place","connection.targets.placeId":"Place ID","connection.targets.placeId.tooltip":"Roblox Place ID for this Studio window","connection.targets.clientId":"Connection ID","connection.targets.clientId.tooltip":"Full connection ID for diagnostics. Usually use Studio ID instead.","connection.targets.session":"Session","connection.targets.session.tooltip":"Command channel state for this Studio target","connection.targets.lastUsed":"Last Used","connection.targets.lastUsed.tooltip":"Most recent plugin-route request routed to this Studio target","connection.targets.lastSeen":"Last Seen","connection.targets.lastSeen.tooltip":"Most recent heartbeat received from this Studio target","connection.targets.version":"Version","connection.targets.version.tooltip":"Installed plugin version reported by Studio","connection.targets.routing":"Routing","connection.targets.routing.tooltip":"Default Studio window when the agent does not name one","connection.targets.inFlight":"In Flight","connection.targets.inFlight.tooltip":"Active command request currently routed to this Studio target","connection.targets.studioState":"Studio State","connection.targets.studioState.tooltip":"Current edit/play runtime state reported by this Studio window","connection.targets.studioState.edit":"Edit","connection.targets.studioState.running":"Running","connection.targets.studioState.paused":"Paused","connection.targets.studioState.unknown":"Unknown","connection.targets.studioState.source.thread":"WEPPY play command","connection.targets.studioState.source.pluginConnection":"Koneksi Play/Test Studio","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"Unknown source","connection.targets.studioState.updatedUnknown":"not reported","connection.targets.copyPlaceId":"Copy Place ID","connection.targets.copyTargetAlias":"Copy Studio ID","connection.targets.copyClientId":"Copy Connection ID","connection.targets.copied":"Copied value","connection.targets.copyFailed":"Failed to copy value","connection.targets.none":"No Studio targets connected. Open Roblox Studio and connect WEPPY Plugin.","connection.targets.help":"When multiple Studio windows are connected, tell the agent to use Studio ID studio-1 to choose one.","connection.topology.ariaLabel":"Connection topology","connection.topology.title":"Connection topology","connection.topology.description":"Setiap agen AI terhubung melalui MCP Adapter miliknya ke WEPPY Bridge bersama, yang menjaga koneksi Roblox Studio.","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"Active","connection.topology.stale":"Stale","connection.topology.unknown":"Unknown","connection.topology.lastContact":"Kontak terakhir","connection.topology.noContact":"Belum ada kontak terbaru","connection.topology.versionUnknown":"Version unknown","connection.topology.placeUnknown":"Place unknown","connection.topology.moreAgents":"+{count} more agents","connection.topology.moreStudios":"+{count} more studios","connection.topology.allAgentsVisible":"All agents visible","connection.topology.allStudiosVisible":"All studios visible","connection.topology.showAll":"Show all","connection.topology.showLess":"Show less","connection.topology.showAllAgents":"Show all AI agents","connection.topology.showAllStudios":"Show all Studio targets","connection.topology.showLessAgents":"Show less AI agents","connection.topology.showLessStudios":"Show less Studio targets","connection.routing.updateFailed":"Failed to update routing target","connection.log.title":"Log Koneksi","connection.log.empty":"Belum ada event","connection.time.secondsAgo":"dtk lalu","connection.time.minutesAgo":"mnt lalu","connection.time.hoursAgo":"jam lalu","common.loading":"Memuat...","common.retry":"Coba lagi","common.reconnecting":"Menghubungkan ulang...","common.expand":"Perluas","common.collapse":"Ciutkan","tools.tab.history":"Riwayat","tools.tab.statistics":"Statistik","tools.tab.failures":"Kegagalan","tools.col.time":"Waktu","tools.col.time.tooltip":"Waktu ketika eksekusi alat dicatat.","tools.col.toolAction":"Alat.Aksi","tools.col.toolAction.tooltip":"Nama alat dan aksi yang dijalankan.","tools.col.duration":"Durasi","tools.col.duration.tooltip":"Berapa lama alat menyelesaikan eksekusi.","tools.col.status":"Status","tools.col.status.tooltip":"Hasil dari eksekusi alat yang tercatat.","tools.col.tier":"Tier","tools.col.tier.tooltip":"Tier lisensi yang dibutuhkan untuk alat atau aksi ini.","tools.col.tierStats.tooltip":"Ringkasan Basic, Pro, atau Mixed untuk baris statistik alat ini.","tools.col.tool":"Alat","tools.col.tool.tooltip":"Nama alat konsolidasi pada tabel statistik.","tools.col.calls":"Panggilan","tools.col.calls.tooltip":"Jumlah total panggilan yang tercatat untuk alat ini.","tools.col.ok":"OK","tools.col.ok.tooltip":"Jumlah eksekusi sukses langsung.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Jumlah eksekusi yang berhasil melalui fallback.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Jumlah eksekusi yang diblokir tanpa fallback.","tools.col.warn":"WARN","tools.col.warn.tooltip":"Jumlah kegagalan yang diperkirakan karena input, status proyek, kebijakan Roblox, atau kode pengguna.","tools.col.err":"GAGAL","tools.col.err.tooltip":"Jumlah eksekusi yang berakhir gagal.","tools.col.okRate":"% Sukses","tools.col.okRate.tooltip":"Persentase panggilan yang selesai dengan sukses.","tools.col.avgTime":"Waktu rata-rata","tools.col.avgTime.tooltip":"Rata-rata waktu eksekusi dari panggilan yang tercatat.","tools.col.error":"Error","tools.filter.tool":"Alat","tools.filter.all":"Semua","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Entri ini menggunakan alat atau aksi khusus Pro.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"Aksi Pro yang diminta berhasil melalui fallback Basic.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"Aksi Pro yang diminta diblokir dan tidak ada fallback yang dijalankan.","tools.badge.warn":"WARN","tools.badge.warn.tooltip":"Panggilan alat gagal karena masalah input, proyek, kebijakan, atau kode pengguna yang diperkirakan.","tools.badge.err":"GAGAL","tools.badge.err.tooltip":"Eksekusi alat berakhir gagal.","tools.status.ok":"OK","tools.status.ok.tooltip":"Eksekusi alat selesai dengan sukses.","tools.tier.mixed.tooltip":"Alat ini memiliki campuran aksi Basic dan Pro.","tools.detail.params":"Parameter","tools.detail.params.tooltip":"Parameter input yang dikirim pada eksekusi alat ini.","tools.detail.result":"Hasil","tools.detail.result.tooltip":"Payload hasil yang dikembalikan dari eksekusi alat ini.","tools.detail.requestedCommand":"Perintah dikirim","tools.detail.executedCommand":"Perintah dijalankan","tools.detail.alternatives":"Alternatif","tools.detail.blockedMessage":"Alasan diblokir","tools.detail.noFallback":"Tanpa fallback","tools.detail.noFallback.value":"Tidak ada fallback yang dijalankan.","tools.detail.warningMessage":"Pesan peringatan","tools.detail.errorMessage":"Pesan error","tools.detail.open":"Detail","tools.detail.openLabel":"Lihat detail untuk {command}","tools.detail.dialogLabel":"Detail eksekusi alat","tools.detail.title":"Eksekusi alat","tools.history.routing":"Routing","tools.history.routing.mode":"Mode","tools.history.routing.requested":"Requested","tools.history.routing.actual":"Actual","tools.history.routing.none":"No Studio target named","tools.clear.history.title":"Hapus riwayat?","tools.clear.history.message":"Tindakan ini akan menghapus permanen riwayat alat untuk place saat ini.","tools.clear.statistics.title":"Hapus statistik?","tools.clear.statistics.message":"Tindakan ini akan mereset permanen statistik alat untuk place saat ini.","tools.detail.error":"Error","tools.page.prev":"Sebelumnya","tools.page.prev.tooltip":"Pindah ke halaman sebelumnya pada riwayat alat.","tools.page.next":"Selanjutnya","tools.page.next.tooltip":"Pindah ke halaman berikutnya pada riwayat alat.","tools.empty.history":"Tidak ada entri riwayat","tools.empty.stats":"Tidak ada statistik alat","tools.empty.failures":"Tidak ada kegagalan","tools.summary.total":"Total","tools.summary.calls":"panggilan","tools.summary.sessions":"Sesi","settings.license.title":"Lisensi","settings.license.title.tooltip":"Status lisensi dan tier langganan saat ini.","settings.license.status":"Status","settings.license.status.tooltip":"Status aktivasi lisensi saat ini.","settings.license.tier":"Tier","settings.license.tier.tooltip":"Tier langganan saat ini untuk fitur WEPPY Dashboard yang tersedia.","settings.license.key":"Kunci","settings.license.key.tooltip":"Kunci lisensi tersamarkan yang saat ini dimuat oleh server.","settings.license.keyValue.tooltip":"Kunci lisensi tersamarkan yang saat ini dimuat oleh server.","settings.license.provider":"Penyedia","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"Penyedia lisensi yang digunakan untuk memvalidasi kunci ini.","settings.license.providerValue.tooltip":"Penyedia lisensi yang digunakan untuk memvalidasi kunci ini.","settings.license.active":"Aktif","settings.license.active.tooltip":"Status aktivasi lisensi saat ini.","settings.license.status.activeCancelPending.tooltip":"Pembatalan sedang menunggu, tetapi akses Pro tetap aktif hingga periode penagihan saat ini berakhir.","settings.license.inactive":"Tidak aktif","settings.license.inactive.tooltip":"Status aktivasi lisensi saat ini.","settings.license.expired":"Kedaluwarsa","settings.license.expired.tooltip":"Status aktivasi lisensi saat ini.","settings.license.unavailable":"Info lisensi tidak tersedia","settings.license.detail.cancelPending":"Pembatalan telah dijadwalkan. Akses Pro tetap aktif hingga periode penagihan saat ini berakhir.","settings.license.reset":"Reset Lisensi","settings.readOnly":"Hanya baca","settings.readOnly.tooltip":"Bagian ini menampilkan nilai yang tidak bisa diedit dari WEPPY Dashboard.","settings.unavailable":"Pengaturan tidak tersedia","settings.general.title":"Pengaturan umum","settings.general.title.tooltip":"Pengaturan panas yang langsung diterapkan saat diubah.","settings.general.liveApply":"Terapkan langsung","settings.general.liveApply.tooltip":"Perubahan di bagian ini langsung diterapkan tanpa tombol simpan terpisah.","settings.general.applied":"Diterapkan","settings.general.logLevel":"Level log","settings.general.logLevel.tooltip":"Menetapkan seberapa detail WEPPY Dashboard menulis lognya.","settings.general.localHistory":"Perekaman riwayat alat","settings.general.localHistory.tooltip":"Menyimpan riwayat eksekusi alat lokal untuk tampilan riwayat WEPPY Dashboard.","settings.general.localStatistics":"Pengumpulan statistik alat","settings.general.localStatistics.tooltip":"Mengumpulkan statistik penggunaan lokal untuk pelaporan WEPPY Dashboard.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WEPPY Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"Batas waktu tindakan","settings.general.requestTimeout.tooltip":"Waktu maksimum WEPPY Dashboard menunggu tindakan sebelum dianggap gagal.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"Batas waktu tindakan diukur dalam milidetik.","settings.cold.title":"Lingkungan server","settings.cold.title.tooltip":"Nilai lingkungan server hanya-baca yang dimuat saat startup.","settings.cold.httpPort.tooltip":"Nomor port yang digunakan oleh server HTTP WEPPY Dashboard MCP.","settings.cold.httpHost.tooltip":"Antarmuka host yang diikat oleh server HTTP WEPPY Dashboard MCP.","settings.cold.hint":"Atur melalui variabel lingkungan.","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"Pilih perilaku WEPPY Dashboard saat server MCP dimulai.","settings.dashboard.nextStartBadge":"Mulai berikutnya","settings.dashboard.autoOpen.label":"Buka Dashboard saat WEPPY dimulai","settings.dashboard.autoOpen.description":"Membuka Dashboard ini secara otomatis setelah server MCP dimulai.","settings.dashboard.autoOpen.nextStart":"Berlaku saat server MCP dimulai berikutnya.","settings.dashboard.settingsFile.label":"File pengaturan","settings.dashboard.agentExample.label":"Minta Agent Anda","settings.dashboard.agentExample.prompt":"“Nonaktifkan buka otomatis Dashboard”.","settings.dashboard.autoOpen.saving":"Menyimpan…","settings.dashboard.autoOpen.saved":"Disimpan untuk startup server berikutnya.","settings.dashboard.autoOpen.error":"Tidak dapat menyimpan. Pengaturan sebelumnya telah dipulihkan.","dashboardAutoOpenGuide.eyebrow":"Preferensi Dashboard","dashboardAutoOpenGuide.title":"Pilih cara WEPPY Dashboard dibuka","dashboardAutoOpenGuide.currentOn":"Buka otomatis sedang aktif. Dashboard ini dibuka setelah server MCP dimulai.","dashboardAutoOpenGuide.currentOff":"Buka otomatis sedang nonaktif. WEPPY tidak akan membuka tab Dashboard baru saat server MCP dimulai.","dashboardAutoOpenGuide.changeAnytime":"Anda dapat mengubahnya kapan saja di Settings.","dashboardAutoOpenGuide.agentHint":"Anda juga dapat meminta Agent, “Nonaktifkan buka otomatis Dashboard”.","dashboardAutoOpenGuide.statusOn":"Buka otomatis aktif","dashboardAutoOpenGuide.statusOff":"Buka otomatis nonaktif","dashboardAutoOpenGuide.keep":"Pertahankan pengaturan saat ini","dashboardAutoOpenGuide.turnOff":"Nonaktifkan buka otomatis","dashboardAutoOpenGuide.openSettings":"Buka Settings","dashboardAutoOpenGuide.close":"Tutup panduan buka otomatis","dashboardAutoOpenGuide.saving":"Menyimpan…","dashboardAutoOpenGuide.error":"Pilihan Anda tidak dapat disimpan. Coba lagi.","settings.language.title":"Bahasa","settings.language.title.tooltip":"Pilih cara teks antarmuka WEPPY Dashboard dilokalkan.","settings.language.dashboard":"Bahasa WEPPY Dashboard","settings.language.dashboard.tooltip":"Mengganti bahasa WEPPY Dashboard atau mengikuti bahasa sistem saat disetel ke Otomatis.","settings.language.auto":"Otomatis","overview.l0.title":"Server MCP terputus","overview.l0.message":"Server MCP tidak merespons. WEPPY Dashboard akan mencoba menghubungkan ulang secara otomatis.","overview.l0.step1":"Periksa apakah proses server MCP sedang berjalan","overview.l0.step2":"Mulai ulang perintah server MCP jika diperlukan","overview.l0.reconnecting":"Menghubungkan ulang otomatis setiap 3 detik...","overview.l0.reconnectBtn":"Hubungkan ulang","overview.l0.settingsBtn":"Periksa pengaturan","overview.l1.pluginGuide":"Plugin Roblox Studio tidak terhubung","overview.l1.check1":"Apakah Roblox Studio sedang berjalan?","overview.l1.check2":"Apakah WEPPY Plugin sudah terinstal?","overview.l1.feedHint":"Perubahan akan muncul di sini setelah plugin terhubung","overview.metric.server":"Server","overview.metric.server.tooltip":"Status runtime dan proses server MCP.","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Status koneksi dan versi plugin Roblox Studio.","overview.metric.agent":"Agen","overview.metric.agent.tooltip":"Agen coding AI yang terhubung dan status runtime-nya.","overview.metric.agent.instancesUnit":"instansi","overview.metric.sync":"Sinkronisasi","overview.metric.sync.tooltip":"Aktivitas sinkronisasi saat ini antara Studio dan file lokal.","overview.metric.noAgent":"Tidak ada agen","overview.meta.version":"Versi","overview.meta.version.tooltip":"Versi server MCP yang terpasang.","overview.meta.session":"Sesi","overview.meta.session.tooltip":"Pengenal sesi MCP saat ini.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Pengenal proses dari sistem operasi.","overview.meta.uptime":"Waktu aktif","overview.meta.uptime.tooltip":"Waktu yang berlalu sejak server MCP dimulai.","overview.feed.title":"Perubahan game terbaru","overview.feed.empty":"Tidak ada perubahan terbaru","overview.changelog.title":"Ringkasan perubahan sesi","overview.changelog.entries":"Total","overview.changelog.scripts":"skrip","overview.changelog.instances":"instansi","overview.changelog.properties":"properti","overview.changelog.assets":"aset","overview.tier.title":"Penggunaan tier","changelog.subtitle":"Riwayat perubahan game","changelog.filter.all":"Semua","changelog.filter.active":"Aktif","changelog.filter.completed":"Selesai","changelog.empty":"Belum ada entri riwayat","changelog.basic.limit.title":"Pratinjau Basic hanya menampilkan 3 sesi terbaru","changelog.basic.limit.body":"Upgrade ke Pro untuk melihat timeline changelog lengkap untuk place ini.","changelog.basic.metricLabel":"Changelog terlihat / Total","changelog.basic.visible":"terlihat","changelog.basic.total":"total","changelog.card.active":"Aktif","changelog.card.active.tooltip":"Sesi ini masih menerima perubahan game baru.","changelog.card.completed":"Selesai","changelog.card.completed.tooltip":"Sesi ini sudah berakhir dan tidak ada perubahan baru yang diharapkan.","changelog.card.bootstrapStatus":"Inisialisasi","changelog.card.bootstrapStatus.tooltip":"Sesi ini hanya berisi tangkapan layar bootstrap sinkronisasi awal.","changelog.card.inProgress":"sedang berlangsung","changelog.card.noChanges":"Belum ada perubahan","changelog.card.noChanges.tooltip":"Belum ada perubahan game yang diekstrak untuk sesi ini.","changelog.card.bootstrapSummary":"Snapshot sinkronisasi awal","changelog.card.bootstrapSummary.tooltip":"Penulisan sinkronisasi file awal diringkas menjadi satu baris tangkapan layar bootstrap.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"skrip","changelog.card.scripts.tooltip":"Perubahan skrip yang terjadi di sesi ini.","changelog.card.instances":"instansi","changelog.card.instances.tooltip":"Perubahan pembuatan, penghapusan, pemindahan, atau kloning instansi di sesi ini.","changelog.card.modified":"diubah","changelog.card.created":"dibuat","changelog.card.deleted":"dihapus","changelog.card.moved":"dipindahkan","changelog.card.propertiesChanged":"properti diubah","changelog.card.propertiesChanged.tooltip":"Perubahan nilai properti yang tercatat untuk sesi ini.","changelog.card.lightingConfigured":"Pencahayaan dikonfigurasi","changelog.card.lightingConfigured.tooltip":"Pencahayaan atau pengaturan atmosfer berubah di sesi ini.","changelog.card.terrainConfigured":"Terrain dikonfigurasi","changelog.card.terrainConfigured.tooltip":"Data terrain atau pengaturan terrain berubah di sesi ini.","changelog.card.assetsInserted":"aset disisipkan","changelog.card.assetsInserted.tooltip":"Aset yang dimasukkan ke place selama sesi ini.","changelog.category.script":"Skrip","changelog.category.instance":"Instansi","changelog.category.property":"Properti","changelog.category.lighting":"Pencahayaan","changelog.category.terrain":"Terrain","changelog.category.asset":"Aset","changelog.detail.dialogLabel":"Detail riwayat perubahan","changelog.detail.changeSummary":"Ringkasan perubahan","changelog.detail.changeSummary.tooltip":"Jumlah perubahan game yang diekstrak dan dikelompokkan per kategori untuk sesi ini.","changelog.detail.changeTimeline":"Timeline perubahan","changelog.detail.changeTimeline.tooltip":"Daftar kronologis perubahan game yang diekstrak untuk sesi ini.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Sebelum & Sesudah","changelog.detail.filterCategory":"Kategori","changelog.detail.filterCategory.tooltip":"Filter timeline ke satu kategori perubahan.","changelog.detail.confidence.exact":"Tepat","changelog.detail.confidence.exact.tooltip":"Status sebelum dan sesudah perubahan ini sama-sama terkonfirmasi.","changelog.detail.confidence.partial":"Parsial","changelog.detail.confidence.partial.tooltip":"Hanya sebagian status sebelum dan sesudah perubahan ini yang bisa dikonfirmasi.","changelog.detail.confidence.afterOnly":"Hanya sesudah","changelog.detail.confidence.afterOnly.tooltip":"Hanya status hasil setelah perubahan yang bisa dikonfirmasi.","changelog.detail.confidence.intentOnly":"Hanya niat","changelog.detail.confidence.intentOnly.tooltip":"Hanya aksi yang diminta yang tercatat, bukan status hasilnya.","changelog.detail.confidence.unknown":"Tidak diketahui","changelog.detail.confidence.unknown.tooltip":"Perubahan ini tidak dapat diklasifikasikan dengan yakin dari data yang tersedia.","changelog.detail.noChanges":"Tidak ada perubahan di kategori ini","changelog.detail.backToList":"Kembali ke daftar","changelog.diff.empty":"Tidak ada perbedaan","changelog.diff.unified":"Terpadu","changelog.diff.sideBySide":"Berdampingan","changelog.diff.before":"Sebelum","changelog.diff.after":"Sesudah","sync.targets.title":"Studio terhubung","sync.targets.refresh":"Segarkan","sync.targets.loading":"Memuat status Sync Studio…","sync.targets.unavailable":"Status Sync Studio tidak tersedia. Coba lagi.","sync.targets.empty":"Tidak ada Studio terhubung. Hubungkan WEPPY Plugin untuk melihat status Sync langsung.","sync.targets.unknownPlace":"Place tidak diketahui","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"Terhubung","sync.targets.notReported":"Belum dilaporkan","sync.targets.state.unknown":"Tidak diketahui","sync.targets.state.off":"Sync NONAKTIF","sync.targets.state.idle":"Sync AKTIF · menunggu","sync.targets.state.initializing":"Menginisialisasi","sync.targets.state.syncing":"Menyinkronkan","sync.targets.state.paused":"Dijeda","sync.targets.state.error":"Kesalahan","sync.forwardStatus.label":"Pengiriman perubahan","sync.forwardStatus.tooltip":"Menunjukkan apakah perubahan Edit dapat dikirim. Aktif tidak menjamin semua file lokal sudah terbaru.","sync.forwardStatus.inactive":"Nonaktif","sync.forwardStatus.active":"Aktif","sync.forwardStatus.paused_play":"Dijeda saat Play","sync.forwardStatus.reconciling":"Memeriksa perubahan Edit","sync.forwardStatus.blocked":"Perlu perhatian","sync.forwardStatus.unknown":"Tidak diketahui","sync.forwardStatus.observedAt":"Diamati","sync.forwardStatus.reason.review":"Tinjau perubahan di Studio Plugin.","sync.forwardStatus.reason.editChanged":"Edit berubah selama pemeriksaan. Periksa Sync di Studio Plugin.","sync.forwardStatus.reason.failed":"Perubahan tidak dapat dikonfirmasi. Periksa Sync di Studio Plugin.","sync.forwardStatus.reason.fallback":"Periksa detailnya di Studio Plugin.","sync.stored.title":"Place tersimpan","sync.stored.data":"Data tersimpan","sync.stored.ambiguous":"Lokasi penyimpanan belum dikonfirmasi","sync.detail.scope":"Melihat detail Sync untuk","sync.detail.readOnly":"Melihat detail tidak mengubah perutean Studio.","sync.detail.empty":"Pilih Studio terhubung atau Place tersimpan.","sync.detail.unknown":"Studio ini belum melaporkan status Sync.","sync.detail.error":"Sync melaporkan kesalahan. Periksa Studio Plugin untuk detailnya.","sync.detail.placeFolder":"Folder Place","sync.detail.placeFolder.tooltip":"Folder tersimpan yang dibagikan Studio yang membuka Place ini.","sync.detail.sharedData":"Path, jumlah, dan log milik Place dan dibagikan oleh Studio yang membukanya.","sync.log.shared":"Log Place bersama","sync.log.unsafe":"Lokasi penyimpanan Place ini belum dikonfirmasi untuk akses log.","sync.log.unavailable":"Log Place tidak dapat dimuat. Coba lagi.","sync.log.loading":"Memuat log Place…","sync.clear.selectedMessage":"Ini menghapus permanen log Sync bersama untuk {place}.","sync.overlay.title":"Plugin Roblox Studio diperlukan","sync.overlay.message":"Status sinkronisasi akan tersedia setelah plugin Roblox Studio terhubung.","sync.overlay.check1":"Apakah Roblox Studio sedang berjalan?","sync.overlay.check2":"Apakah WEPPY Plugin sudah terinstal?","sync.status.title":"Status sinkronisasi","sync.status.title.tooltip":"Status sinkronisasi Studio dan file lokal untuk place ini.","sync.status.forwardOnly":"Hanya maju","sync.status.forwardOnly.tooltip":"Tier Basic hanya mengizinkan sinkronisasi maju dari Studio ke lokal.","sync.status.place":"Place","sync.status.place.tooltip":"Nama place Roblox yang terhubung beserta ID place-nya.","sync.status.path":"Path","sync.status.path.tooltip":"Root sistem file lokal yang saat ini dipakai untuk output sinkronisasi.","sync.status.instances":"Instansi","sync.status.instances.tooltip":"Jumlah total instance Roblox yang disinkronkan di mirror lokal.","sync.status.scripts":"Skrip","sync.status.scripts.tooltip":"Jumlah total file skrip yang saat ini diindeks untuk place ini.","sync.status.state":"Status","sync.status.state.tooltip":"Status runtime sinkronisasi saat ini yang dilaporkan server.","sync.policy.title":"Kebijakan Sync","sync.policy.title.tooltip":"Kebijakan Sync efektif yang dilaporkan oleh plugin Studio yang terhubung.","sync.policy.activation":"Aktivasi","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"Alur kerja","sync.policy.preset.studio_first":"Studio lebih dahulu","sync.policy.preset.bidirectional_review":"Dua arah","sync.policy.preset.local_code_studio_world":"Kode lokal, dunia Studio","sync.policy.preset.custom":"Kustom","sync.policy.apply.title":"Cara menerapkan perubahan lokal ke Studio","sync.policy.apply.description":"Menampilkan apakah perubahan lokal ditinjau lebih dulu atau diterapkan otomatis ke Studio.","sync.policy.apply.content":"Perubahan konten","sync.policy.apply.content.tooltip":"Perubahan lokal pada Sumber Script, properti, dan properti layanan. Membuat, menghapus, mengganti nama, dan memindahkan adalah perubahan struktur.","sync.policy.apply.structure":"Perubahan struktur","sync.policy.apply.structure.tooltip":"Pembuatan, penghapusan, penggantian nama, dan pemindahan instance secara lokal. Penghapusan lokal otomatis juga memerlukan opsi penghapusan terpisah di bawah.","sync.policy.apply.manual":"Tinjau dahulu","sync.policy.apply.auto":"Terapkan otomatis","sync.policy.scope.disclosure":"Arah per cakupan","sync.policy.scope.scriptSource":"Sumber script","sync.policy.scope.properties":"Properti","sync.policy.scope.structure":"Struktur","sync.policy.scope.serviceProperties":"Properti layanan","sync.policy.endpoint.local":"Lokal","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → Lokal","sync.policy.direction.forward.tooltip":"Perubahan Studio ditulis ke file lokal.","sync.policy.direction.reverse":"Lokal → Studio","sync.policy.direction.reverse.tooltip":"Perubahan file lokal diterapkan ke Studio.","sync.policy.direction.bidirectional":"Dua arah","sync.policy.direction.bidirectional.tooltip":"Perubahan dapat bergerak dari Studio ke file lokal dan dari file lokal ke Studio.","sync.policy.safety.localDeletes":"Hapus lokal → hapus instance Studio","sync.policy.safety.review":"Tinjau sebelum menghapus","sync.policy.safety.review.tooltip":"Penghapusan file lokal menunggu tinjauan sebelum instance Studio yang sesuai dihapus. Ini terpisah dari pembersihan otomatis UI Studio.","sync.policy.safety.auto":"Hapus otomatis di Studio","sync.policy.safety.auto.tooltip":"Menghapus file lokal dapat secara otomatis menghapus instance Studio yang sesuai. Ini terpisah dari pembersihan otomatis UI Studio.","sync.policy.reviewRequired":"Tinjau kebijakan ini di plugin Studio sebelum memulai Sync.","sync.log.title":"Log sinkronisasi","sync.log.empty":"Tidak ada event sinkronisasi","sync.log.type.fullSyncStart":"MULAI","sync.log.type.fullSyncStart.tooltip":"Sinkronisasi penuh dimulai.","sync.log.type.fullSyncProgress":"BERLANGSUNG","sync.log.type.fullSyncProgress.tooltip":"Sinkronisasi penuh sedang menyimpan data.","sync.log.type.fullSyncComplete":"SELESAI","sync.log.type.fullSyncComplete.tooltip":"Sinkronisasi penuh berhasil diselesaikan.","sync.log.type.fullSyncFailed":"GAGAL","sync.log.type.fullSyncFailed.tooltip":"Sinkronisasi penuh berhenti sebelum semua data selesai disimpan.","sync.log.type.write":"TULIS","sync.log.type.write.tooltip":"Output sinkronisasi baru ditulis ke disk.","sync.log.type.update":"PERBARUI","sync.log.type.update.tooltip":"File atau instance yang sudah tersinkron diperbarui.","sync.log.type.delete":"HAPUS","sync.log.type.delete.tooltip":"File atau instance tersinkron telah dihapus.","sync.log.type.idle":"IDLE","sync.log.type.idle.tooltip":"Event sinkronisasi dicatat tanpa perubahan file.","sync.upgrade.title":"Lihat sinkronisasi penuh dengan Pro","sync.upgrade.benefit1":"Sinkronisasi dua arah — edit file, otomatis diterapkan ke Studio","sync.upgrade.benefit2":"Sinkronisasi mundur — kirim perubahan file ke Studio","sync.upgrade.benefit3":"Riwayat sinkronisasi lengkap dan log perubahan detail","sync.upgrade.buy":"Lihat Pro","playtest.status.title":"Status playtest","playtest.status.title.tooltip":"Status sesi playtest Roblox saat ini yang dilaporkan oleh Studio.","playtest.status.mode":"Mode","playtest.status.mode.tooltip":"Mode peluncuran playtest Studio untuk sesi saat ini.","playtest.status.mode.value.tooltip":"Mode playtest Roblox Studio spesifik yang sedang dipakai saat ini.","playtest.status.mode.play":"Main","playtest.status.mode.run":"Jalankan","playtest.status.mode.server":"Server","playtest.status.mode.edit":"Edit","playtest.status.place.tooltip":"Place Roblox yang saat ini terkait dengan sesi playtest ini.","playtest.status.state.running":"Berjalan","playtest.status.state.running.tooltip":"Sesi playtest Roblox saat ini sedang berjalan.","playtest.status.state.paused":"Dijeda","playtest.status.state.paused.tooltip":"Sesi playtest Roblox saat ini sedang dijeda.","playtest.status.state.notRunning":"Tidak berjalan","playtest.status.state.notRunning.tooltip":"Saat ini tidak ada sesi playtest Roblox yang sedang berjalan.","playtest.control.play":"Main","playtest.control.pause":"Jeda","playtest.control.resume":"Lanjutkan","playtest.control.stop":"Berhenti","playtest.history.title":"Riwayat tes","playtest.history.search":"Cari hasil pengujian","playtest.history.filter":"Hasil","playtest.history.filterAll":"Semua hasil","playtest.history.filteredCount":"{{visible}} dari {{total}} hasil","playtest.history.title.tooltip":"Riwayat eksekusi playtest otomatis yang tercatat untuk proyek ini.","playtest.history.empty":"Belum ada hasil tes","playtest.history.mode":"Mode","playtest.history.mode.tooltip":"Mode playtest yang digunakan pada eksekusi tes yang tercatat ini.","playtest.history.status.passed":"Berhasil","playtest.history.status.failed":"Gagal","playtest.history.status.running":"Berjalan","playtest.history.status.unknown":"Tidak diketahui","playtest.history.status.tooltip":"Status hasil yang tercatat untuk eksekusi playtest otomatis ini.","playtest.empty.title":"Belum ada hasil playtest","playtest.empty.message":"Hasil akan muncul di sini setelah agen AI menjalankan Playtest.","playtest.empty.message.before":"Hasil akan muncul di sini setelah agen AI menjalankan Playtest.","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"Ask the AI Agent to run a Playtest when you need a fresh report.","playtest.report.title":"Laporan terpilih","playtest.report.title.tooltip":"Output detail untuk eksekusi playtest otomatis yang sedang dipilih.","playtest.detail.dialogLabel":"Detail laporan playtest","playtest.detail.loading":"Memuat laporan...","playtest.detail.errorTitle":"Laporan tidak tersedia","playtest.report.content":"Laporan","playtest.report.content.tooltip":"Ringkasan Markdown untuk eksekusi playtest otomatis yang dipilih.","playtest.report.logs":"Log","playtest.report.logs.tooltip":"Log eksekusi yang ditangkap untuk eksekusi playtest otomatis yang dipilih.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"Tidak ada konten laporan","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest adalah fitur khusus Pro","playtest.basic.desc":"Kontrol playtest dari WEPPY Dashboard, jalankan tes otomatis, dan lihat laporan tes detail.","playtest.basic.benefit1":"Kontrol main/jeda/berhenti sekali klik","playtest.basic.benefit2":"Eksekusi tes otomatis via agen AI","playtest.basic.benefit3":"Riwayat tes dengan pelacakan berhasil/gagal","playtest.basic.benefit4":"Laporan tes detail dalam markdown","playtest.sample.badge":"Pratinjau tampilan playtest Pro","playtest.sample.title":"Anda sedang melihat pratinjau layar playtest yang tersedia setelah upgrade ke Pro.","playtest.sample.message":"Pratinjau ini menggunakan data sampel. Kontrol playtest langsung, pengelolaan riwayat, dan laporan nyata tersedia setelah upgrade ke Pro.","playtest.sample.clearDisabled":"Upgrade ke Pro untuk menghapus riwayat playtest nyata.","playtest.sample.place":"Pratinjau Arena","playtest.sample.history.name":"Sample Arena Smoke Test","playtest.sample.context.why":"Masuk ke arena, bertahan pada fase awal, dan pastikan HUD merespons segera.","playtest.sample.context.expected":"Pemain spawn dengan aman, UI hitung mundur muncul dalam satu detik, dan wave pertama dimulai tanpa error.","playtest.sample.context.observed":"Proteksi spawn bekerja, HUD diperbarui tepat waktu, dan wave pertama selesai tanpa regresi.","playtest.sample.report.markdown":`# Sample Arena Smoke Test
168
168
 
169
169
  - Alur spawn: PASS
170
170
  - Hitung mundur HUD: PASS
@@ -182,7 +182,7 @@ Ini adalah pratinjau sampel. Upgrade ke Pro untuk menjalankan playtest langsung
182
182
  - Behalten Sie adapterStudioOnly=true bei, damit der erzeugte source vor Spielcodezugriff RunService:IsStudio() prüft. Verwenden Sie false nur, wenn ich ausdrücklich das Weglassen verlange, und zeigen Sie die production-Warnung im plan.
183
183
  - Bewahren Sie den Entwicklungs-source auf. Geschützte WEPPY-Adapter können bei direkter Studio-Veröffentlichung enthalten bleiben; prüfen Sie ungeschützten oder benutzerdefinierten Testcode und Testobjekte.
184
184
  - Prüfe die Quellcodeänderungen mit manage_studio.playtest_adapter_plan und führe manage_studio.playtest_adapter_apply mit dem zurückgegebenen Token erst aus, nachdem du den diff und die Verwendungsstellen geprüft hast.
185
- - Zeige den Speicherort des Quellcodes, geänderte Dateien, verwendende Profile, das cleanup-Verhalten und die Punkte, die ich vor der Veröffentlichung selbst prüfen muss.`,"sidebar.overview":"Übersicht","sidebar.changelog":"Änderungsprotokoll","sidebar.connection":"Verbindung","sidebar.sync":"Sync","sidebar.playtest":"Playtest","sidebar.tools":"Tools","sidebar.settings":"Einstellungen","sidebar.ui_studio":"UI Studio","sidebar.gate.l1":"MCP-Server-Verbindung erforderlich","sidebar.gate.l2":"Roblox Studio Plugin-Verbindung erforderlich","header.currentProject":"Aktuelles Projekt","header.unknownProject":"Unbekanntes Projekt","header.projectRoot.label":"Projektstamm","header.currentProject.loading":"Lade Projektstamm...","header.currentProject.unavailable":"Projektstamm nicht verfügbar","header.placeNotConnected":"Place nicht verbunden","header.currentProject.tooltip":"Aktuell ausgewählter Projektordner","header.currentProject.loading.tooltip":"Projektstamm-Informationen werden noch geladen","header.currentProject.unavailable.tooltip":"Aktuelle Projektstamm-Informationen sind nicht verfügbar","header.currentProjectSyncRoot.label":"Sync-Stamm","header.currentProjectSyncRoot.loading":"Lade Sync-Stamm...","header.currentProjectSyncRoot.unavailable":"Sync-Stamm nicht verfügbar","header.currentProjectSyncRoot.tooltip":"Aktueller Sync-Stamm-Ordner für das ausgewählte Projekt","header.currentProjectSyncRoot.loading.tooltip":"Sync-Stamm-Informationen werden noch geladen","header.currentProjectSyncRoot.unavailable.tooltip":"Aktuelle Sync-Stamm-Informationen sind nicht verfügbar","header.testFiles.label":"Testdateien","header.testFiles.unavailable":"Testdateien nicht verfügbar","header.testFiles.tooltip":"Aktuelles Playtest-Dateiverzeichnis für den ausgewählten Place","header.places.title":"Places","header.places.active":"Aktiv","header.places.inactive":"Inaktiv","header.places.pluginRequired":"Plugin-Verbindung erforderlich","header.places.liveRequired":"Plugin-Verbindung für Live Active Place erforderlich","header.place.tooltip":"Verbundener Roblox Place","header.placeNotConnected.tooltip":"Place nicht verbunden","placeScope.current.label":"Aktueller Place","placeScope.lastActive.label":"Zuletzt aktiver Place","placeScope.selected.label":"Ausgewählter Place","placeScope.unknownPlace":"Unbekannter Place","placeScope.live":"Live","placeScope.connected":"Studio verbunden","placeScope.stored":"Gespeicherte Daten","placeScope.connectedGroup":"Verbundene Studios","placeScope.storedGroup":"Gespeicherte Daten","placeScope.stored.note":"Dieser Place ist derzeit in keinem verbundenen Studio geöffnet.","placeScope.pluginRequired":"Plugin erforderlich","placeScope.pluginRequired.note":"Verbinde das WEPPY Plugin, um den live aktiven Place zu bestätigen.","placeScope.noPlace.label":"Place-Bereich","placeScope.noPlace.value":"Noch keine Place-Daten verfügbar","placeScope.noPlace.badge":"Kein Place","placeScope.noPlace.note":"Verbinde das WEPPY Plugin und synchronisiere einen Place, um Place-bezogene Daten zu erstellen.","placeScope.selected.note":"Es werden nur gespeicherte Daten angezeigt. Das Studio-Routing bleibt unverändert.","placeScope.surface.sync":"Sync-Status und Logs verwenden diesen Place.","placeScope.surface.changelog":"Changelog-Sitzungen verwenden diesen Place.","placeScope.surface.playtest":"Playtest-Berichte verwenden diesen Place.","placeScope.surface.uiStudio":"UI-Aufnahmen und Änderungsverlauf verwenden diesen Place.","placeScope.surface.tools":"Tool-Verlauf und Statistiken verwenden diesen Place.","placeScope.loading":"Place-Bereich wird geladen...","placeScope.unavailable":"Place-Bereich nicht verfügbar","placeScope.selector.label":"Place-Daten","placeScope.shortcuts.trigger":"Schnellzugriffe","placeScope.shortcuts.label":"Place-Schnellzugriffe","placeScope.shortcuts.settings":"Place-Einstellungen","placeScope.shortcuts.experience":"Erlebnis verwalten","placeScope.shortcuts.roblox":"Auf Roblox ansehen","placeScope.folder.duplicate":"Doppelter Ordner","placeScope.folder.unresolved":"Repräsentativer Ordner nicht bestätigt","placeScope.folder.noSyncHistory":"Kein Synchronisierungsverlauf","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Details zu Place-Ordnern","placeScope.folder.duplicateReason":"Der aktuelle Speicherort ist {canonicalFolder}. Dieser Ordner wird nach einer erfolgreichen vollständigen Synchronisierung gesichert.","placeScope.folder.unresolvedReason":"Dieser Place bleibt über seine ID auswählbar, aber es wurde noch kein bestimmter Ordner als repräsentativ bestätigt.","placeScope.folder.unknown":"unbekannt","placeScope.selector.noneSelectable":"Kein auswählbarer Place-Ordner","header.changeProjectRoot":"Projektstamm ändern","header.changeProjectRoot.ariaLabel":"Projektstamm ändern","header.changeProjectRoot.tooltip":"Den aktuellen Projektstamm ändern","header.changeProjectRoot.disabledTooltip.l0":"MCP-Server-Verbindung erforderlich, bevor der Projektstamm geändert werden kann","header.changeProjectRoot.disabledTooltip.loading":"Projektstamm-Informationen werden noch geladen","header.changeProjectRoot.disabledTooltip.unavailable":"Aktuelle Projektstamm-Informationen sind nicht verfügbar","header.projectRootModal.initial.title":"Projektstamm ändern","header.projectRootModal.initial.body.connected":"Nachdem Sie einen Projektordner ausgewählt haben, wechselt MCP zum neuen Projektstamm und der aktuelle Studio-Inhalt wird vollständig in das neue <ausgewählter Projektordner>/weppy-project-sync-Ziel resynced.","header.projectRootModal.initial.body.disconnected":"Nachdem Sie einen Projektordner ausgewählt haben, wechselt MCP zum neuen Projektstamm und verwendet <ausgewählter Projektordner>/weppy-project-sync als nächstes Sync-Ziel.","header.projectRootModal.initial.nextSyncRoot":"Neues Sync-Ziel nach Auswahl","header.projectRootModal.initial.nextSyncRoot.placeholder":"<ausgewählter Projektordner>/weppy-project-sync","header.projectRootModal.initial.warningStop":"Aktueller Sync wird sofort gestoppt.","header.projectRootModal.initial.warningFreshSync":"Der aktuelle Studio-Inhalt wird verwendet, um einen neuen Full-Sync im neuen Ziel zu erstellen.","header.projectRootModal.initial.warningNoMove":"Alte Sync-Ordner werden nicht automatisch verschoben.","header.projectRootModal.initial.warningDeferredSync":"Wenn Studio nicht verbunden ist, startet der Full Resync beim nächsten Verbinden des Plugins.","header.projectRootModal.confirm.title":"Neuen Projektstamm bestätigen","header.projectRootModal.confirm.body":"Überprüfen Sie den ausgewählten Projektordner, bevor Sie ihn anwenden.","header.projectRootModal.confirm.projectRoot":"Ausgewählter Projektordner","header.projectRootModal.confirm.syncRoot":"Neues Sync-Ziel","header.projectRootModal.confirm.warningNoMove":"Bestehende Sync-Ordner werden nicht automatisch verschoben.","header.projectRootModal.pick":"Ordner auswählen","header.projectRootModal.apply":"Änderung anwenden","header.projectRootModal.cancel":"Abbrechen","header.projectRootModal.error":"Projektstamm-Änderung fehlgeschlagen","status.online":"Online","status.offline":"Offline","status.idle":"Inaktiv","status.syncing":"Synchronisiere","status.error":"Fehler","status.initializing":"Initialisiere","level.l0.title":"Server getrennt","level.l0.message":"WEPPY Dashboard wurde geöffnet, aber der MCP-Server wurde gestoppt oder antwortet nicht.","level.l1.title":"Server verbunden","level.l1.hint":"Prüfen: Läuft Roblox Studio? Ist das Plugin installiert?","level.l2.ok":"Studio verbunden","tier.basic":"Basic","tier.basic.tooltip":"Basic-Tier mit dem Standard-Funktionsumfang des WEPPY Dashboards.","tier.pro":"Pro","tier.pro.tooltip":"Pro-Tier mit dem vollständigen Funktionsumfang des WEPPY Dashboards.","tier.mixed":"Gemischt","tier.upgrade":"Pro ansehen","tier.banner.save":"Sparen Sie KI-Token mit Pro!","tier.tool.query_instances.desc":"Inspizieren Sie Instanzen, durchsuchen Sie Children und Descendants und prüfen Sie Klasseninformationen. Pro fügt File Tree, Projektstruktur sowie Eigenschafts- oder Tag-Suche hinzu.","tier.tool.mutate_instances.desc":"Erstellen, löschen, klonen und verschieben Sie Instanzen. Pro fügt Tree-Erstellung und Massenerstellung, -löschung oder -klonierung hinzu.","tier.tool.manage_properties.desc":"Lesen und setzen Sie Eigenschaften, Attribute und Tags. Pro fügt berechnete Updates, relative Änderungen und Massen-Eigenschaftsoperationen hinzu.","tier.tool.manage_scripts.desc":"Lesen, schreiben, erstellen, löschen, bearbeiten und durchsuchen Sie Skript-Quelltext. Pro fügt Massenersetzung über mehrere Skripte hinzu.","tier.tool.manage_ui.desc":"Nur Pro. Spieltypische Menüs, HUDs, Buttons, Labels und Bildpanels erstellen oder verfeinern, dann Screenshots aufnehmen und Verbesserungsvorschläge prüfen.","tier.tool.manage_ui.action.design_brief":"UI-Richtung planen","tier.tool.manage_ui.action.create_tree":"Neue UI erstellen","tier.tool.manage_ui.action.update":"Bestehende UI aktualisieren","tier.tool.manage_ui.action.delete":"UI entfernen","tier.tool.manage_ui.action.preview":"UI-Bildschirm aufnehmen","tier.tool.manage_ui.action.check":"Verbesserungsvorschläge prüfen","tier.tool.manage_lighting.desc":"Nur Pro. Konfigurieren Sie Beleuchtung, Atmosphäre, Himmel, Terrain-Eigenschaften und Tageszeit-Einstellungen.","tier.tool.manage_selection.desc":"Lesen, setzen und löschen Sie die aktuelle Studio-Auswahl. Pro fügt Kontext, Details, Hinzufügen oder Entfernen sowie Auswahl-Watch-Unterstützung hinzu.","tier.tool.manage_camera.desc":"Inspizieren Sie Kamerastatus, fokussieren Sie nach Pfad oder Position und fordern Sie vorgeschlagene Ansichten an.","tier.tool.manage_tween.desc":"Nur Pro. Erstellen, abspielen, pausieren und abbrechen von Tweens für sanfte Animationen.","tier.tool.manage_audio.desc":"Nur Pro. Sounds abspielen, stoppen, pausieren und fortsetzen sowie den Audio-Listener konfigurieren.","tier.tool.manage_animation.desc":"Nur Pro. Animationen laden, abspielen und stoppen sowie aktive Animationstracks inspizieren.","tier.tool.manage_physics.desc":"Nur Pro. Kollisionsgruppen registrieren, Gruppenkollisionen konfigurieren und verfügbare Gruppen inspizieren.","tier.tool.manage_effects.desc":"Nur Pro. Partikel emittieren, Effekte löschen und Effektstatus umschalten.","tier.tool.manage_terrain.desc":"Nur Pro. Terrain-Formen füllen, Regionen löschen, Materialien ersetzen, Terrain-Farben verwalten, Voxel lesen oder schreiben, Terrain generieren und Terrain glätten.","tier.tool.spatial_query.desc":"Nur Pro. Raycasts ausführen, Boden finden, Platzierung validieren, Bereiche scannen, nach flachen oder Spawn-Positionen suchen, Begehbarkeit analysieren, Raum kartieren und Kollisionen inspizieren.","tier.tool.manage_assets.desc":"Nur Pro. Modelle einfügen, Asset-Informationen inspizieren, im Creator Store suchen, freie Assets oder Pakete einfügen und Assets exportieren.","tier.tool.manage_sync.desc":"Nur Pro. Sync-Status, -Konfiguration, -Verlauf, -Richtungen inspizieren und synchronisierte Dateien lesen oder schreiben.","tier.tool.workspace_state.desc":"Nur Pro. Full Sync ausführen, Screenshots erfassen, kürzliche Änderungen und Viewport-Status inspizieren und zugehörige Metadaten verwalten.","tier.tool.manage_logs.desc":"Inspizieren Sie Output-Logs mit Filterung, inkrementellem Polling, Buffer-Löschung und kürzlicher Fehlersuche.","tier.tool.system_info.desc":"Verbindungsstatus und aktuellen Tier inspizieren. Pro fügt Place-Info, Services, Studio-Einstellungen, Playtest-Steuerung und automatisierte Tests hinzu.","tier.tool.manage_studio.desc":"Nur Pro. Studio-Editor-Ansichtseinstellungen wie UI Preview für Screenshots und QA umschalten; es ändert Studio-Sitzungseinstellungen, nicht die UI-Objekte des Spiels.","tier.tool.batch_execute.desc":"Nur Pro. Mehrere Befehle in einem Batch ausführen, mit sequentieller Ausführung und optionalem Continue-on-Error-Verhalten.","tier.tool.execute_luau.desc":"Nur Pro. Beliebigen Luau-Code in der Roblox Studio Sandbox ausführen.","connection.server.title":"Bridge-Status","connection.server.version":"Version","connection.server.version.tooltip":"Laufzeitversion der WEPPY Bridge","connection.server.pid":"PID","connection.server.pid.tooltip":"Betriebssystem-Prozesskennung","connection.server.uptime":"Uptime","connection.server.uptime.tooltip":"Verstrichene Zeit seit dem Start der WEPPY Bridge","connection.server.session":"Session","connection.server.session.tooltip":"Aktuelle Session-Kennung der WEPPY Bridge","connection.server.exec":"Exec","connection.server.exec.tooltip":"Pfad der ausführbaren Datei zum Starten der WEPPY Bridge","connection.server.restart":"Bridge neu starten","connection.server.restarting":"Neustart…","connection.server.restartUnavailable":"Verbinde mindestens einen KI-Agenten, damit dessen MCP Adapter die neue Bridge starten kann.","connection.server.restartTitle":"WEPPY Bridge neu starten?","connection.server.restartMessage":"Dashboard und Studio-Ziele werden kurz getrennt. Das Ergebnis laufender Befehle kann unbestimmt sein, und aktive Playtest-Sitzungen oder ausstehende Steuerungen werden bereinigt. Ein verbundener MCP Adapter startet automatisch eine neue Bridge.","connection.server.restartConfirm":"Bridge neu starten","connection.server.restartRequesting":"Bridge-Neustart wird angefordert…","connection.server.restartReconnecting":"Verbindung zu WEPPY Bridge wird wiederhergestellt…","connection.server.restartWaiting":"Dashboard und Studio verbinden sich automatisch wieder, sobald die neue Bridge bereit ist.","connection.server.restartSucceeded":"WEPPY Bridge wurde neu gestartet","connection.server.restartFailed":"WEPPY Bridge konnte nicht neu gestartet werden","connection.server.restartTimeout":"Die neue Bridge wurde nicht rechtzeitig bereit. Prüfe die MCP-Verbindung in deinem KI-Werkzeug und versuche es erneut.","connection.server.restartStale":"Die Bridge hat sich geändert, bevor die Anfrage angenommen wurde. Aktualisiere den Status und versuche es erneut.","connection.reconnect":"Erneut verbinden","connection.checkSettings":"Einstellungen prüfen","connection.agents.title":"KI-Agenten","connection.agents.name":"Agent","connection.agents.version":"Version","connection.agents.version.tooltip":"Paketversion des MCP Adapters für diese Agent-Sitzung.","connection.agents.cwd":"Arbeitsverzeichnis","connection.agents.cwd.tooltip":"Aktuelles Arbeitsverzeichnis für den verbundenen KI-Agent","connection.agents.projectRoot":"Projektstamm","connection.agents.projectRoot.tooltip":"Maßgeblicher Projektstamm für die Sync-Eigentümerschaft","connection.agents.projectRoot.unresolved":"Nicht aufgelöst","connection.agents.connected":"Verbunden","connection.agents.unknown":"Unbekannt","connection.agents.none":"Keine Agenten verbunden","connection.plugins.title":"Plugins","connection.plugins.place":"Place","connection.plugins.clientId":"Connection ID","connection.plugins.clientId.tooltip":"Full connection ID for diagnostics","connection.plugins.lastSeen":"Zuletzt gesehen","connection.plugins.lastSeen.tooltip":"Zuletzt empfangener Heartbeat vom Plugin","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Vom Studio gemeldete installierte Plugin-Version","connection.plugins.none":"Keine Plugins verbunden","connection.targets.title":"Studio Targets","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"Short name for this Roblox Studio window","connection.targets.place":"Place","connection.targets.placeId":"Place ID","connection.targets.placeId.tooltip":"Roblox Place ID for this Studio window","connection.targets.clientId":"Connection ID","connection.targets.clientId.tooltip":"Full connection ID for diagnostics. Usually use Studio ID instead.","connection.targets.session":"Session","connection.targets.session.tooltip":"Command channel state for this Studio target","connection.targets.lastUsed":"Last Used","connection.targets.lastUsed.tooltip":"Most recent plugin-route request routed to this Studio target","connection.targets.lastSeen":"Last Seen","connection.targets.lastSeen.tooltip":"Most recent heartbeat received from this Studio target","connection.targets.version":"Version","connection.targets.version.tooltip":"Installed plugin version reported by Studio","connection.targets.routing":"Routing","connection.targets.routing.tooltip":"Default Studio window when the agent does not name one","connection.targets.inFlight":"In Flight","connection.targets.inFlight.tooltip":"Active command request currently routed to this Studio target","connection.targets.studioState":"Studio State","connection.targets.studioState.tooltip":"Current edit/play runtime state reported by this Studio window","connection.targets.studioState.edit":"Edit","connection.targets.studioState.running":"Running","connection.targets.studioState.paused":"Paused","connection.targets.studioState.unknown":"Unknown","connection.targets.studioState.source.thread":"WEPPY play command","connection.targets.studioState.source.pluginConnection":"Studio Play/Test-Verbindung","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"Unknown source","connection.targets.studioState.updatedUnknown":"not reported","connection.targets.copyPlaceId":"Copy Place ID","connection.targets.copyTargetAlias":"Copy Studio ID","connection.targets.copyClientId":"Copy Connection ID","connection.targets.copied":"Copied value","connection.targets.copyFailed":"Failed to copy value","connection.targets.none":"No Studio targets connected. Open Roblox Studio and connect WEPPY Plugin.","connection.targets.help":"When multiple Studio windows are connected, tell the agent to use Studio ID studio-1 to choose one.","connection.topology.ariaLabel":"Connection topology","connection.topology.title":"Connection topology","connection.topology.description":"Jeder KI-Agent verbindet sich über seinen eigenen MCP Adapter mit einer gemeinsamen WEPPY Bridge, die die Verbindung zu Roblox Studio aufrechterhält.","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"Active","connection.topology.stale":"Stale","connection.topology.unknown":"Unknown","connection.topology.lastContact":"Letzter Kontakt","connection.topology.noContact":"Kein kürzlicher Kontakt","connection.topology.versionUnknown":"Version unknown","connection.topology.placeUnknown":"Place unknown","connection.topology.moreAgents":"+{count} more agents","connection.topology.moreStudios":"+{count} more studios","connection.topology.allAgentsVisible":"All agents visible","connection.topology.allStudiosVisible":"All studios visible","connection.topology.showAll":"Show all","connection.topology.showLess":"Show less","connection.topology.showAllAgents":"Show all AI agents","connection.topology.showAllStudios":"Show all Studio targets","connection.topology.showLessAgents":"Show less AI agents","connection.topology.showLessStudios":"Show less Studio targets","connection.routing.updateFailed":"Failed to update routing target","connection.log.title":"Verbindungsprotokoll","connection.log.empty":"Noch keine Ereignisse","connection.time.secondsAgo":"s","connection.time.minutesAgo":"min","connection.time.hoursAgo":"Std","common.loading":"Lade...","common.retry":"Wiederholen","common.reconnecting":"Verbinde erneut...","common.expand":"Ausklappen","common.collapse":"Einklappen","tools.tab.history":"Verlauf","tools.tab.statistics":"Statistik","tools.tab.failures":"Fehler","tools.col.time":"Zeit","tools.col.time.tooltip":"Wann der Tool-Lauf aufgezeichnet wurde.","tools.col.toolAction":"Tool.Action","tools.col.toolAction.tooltip":"Name des Tools und ausgeführte Action.","tools.col.duration":"Dauer","tools.col.duration.tooltip":"Wie lange das Tool zum Beenden brauchte.","tools.col.status":"Status","tools.col.status.tooltip":"Ergebnis des aufgezeichneten Tool-Laufs.","tools.col.tier":"Tier","tools.col.tier.tooltip":"Erforderlicher Lizenz-Tier für das Tool oder die Action.","tools.col.tierStats.tooltip":"Basic-, Pro- oder Mixed-Zusammenfassung für die Statistikzeile.","tools.col.tool":"Tool","tools.col.tool.tooltip":"Konsolidierter Tool-Name in der Statistiktabelle.","tools.col.calls":"Aufrufe","tools.col.calls.tooltip":"Gesamtzahl der aufgezeichneten Aufrufe für dieses Tool.","tools.col.ok":"OK","tools.col.ok.tooltip":"Anzahl direkt erfolgreicher Läufe.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Anzahl der Läufe, die durch Fallback-Ausführung erfolgreich waren.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Anzahl blockierter Läufe ohne Fallback-Ausführung.","tools.col.warn":"WARN","tools.col.warn.tooltip":"Anzahl erwarteter Fehler durch Eingabe, Projektstatus, Roblox-Richtlinie oder Benutzercode.","tools.col.err":"FAILED","tools.col.err.tooltip":"Anzahl fehlgeschlagener Läufe.","tools.col.okRate":"OK%","tools.col.okRate.tooltip":"Prozentsatz der erfolgreich abgeschlossenen Aufrufe.","tools.col.avgTime":"Durchschnittszeit","tools.col.avgTime.tooltip":"Durchschnittliche Ausführungszeit über alle aufgezeichneten Aufrufe.","tools.col.error":"Fehler","tools.filter.tool":"Tool","tools.filter.all":"Alle","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Dieser Eintrag verwendete ein Pro-exklusives Tool oder eine Action.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"Die angeforderte Pro-Action wurde über einen Basic-Fallback erfolgreich ausgeführt.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"Die angeforderte Pro-Action wurde blockiert und kein Fallback wurde ausgeführt.","tools.badge.warn":"WARN","tools.badge.warn.tooltip":"Der Tool-Aufruf ist wegen eines erwarteten Eingabe-, Projekt-, Richtlinien- oder Benutzercode-Problems fehlgeschlagen.","tools.badge.err":"FAILED","tools.badge.err.tooltip":"Der Tool-Lauf ist fehlgeschlagen.","tools.status.ok":"OK","tools.status.ok.tooltip":"Der Tool-Lauf wurde erfolgreich abgeschlossen.","tools.tier.mixed.tooltip":"Dieses Tool enthält sowohl Basic- als auch Pro-Actions.","tools.detail.params":"Parameter","tools.detail.params.tooltip":"Eingabeparameter, die an diesen Tool-Lauf übergeben wurden.","tools.detail.result":"Ergebnis","tools.detail.result.tooltip":"Zurückgegebenes Ergebnis-Payload für diesen Tool-Lauf.","tools.detail.requestedCommand":"Gesendeter Befehl","tools.detail.executedCommand":"Ausgeführter Befehl","tools.detail.alternatives":"Alternativen","tools.detail.blockedMessage":"Blockierungsgrund","tools.detail.noFallback":"Kein Fallback","tools.detail.noFallback.value":"Kein Fallback ausgeführt.","tools.detail.warningMessage":"Warnmeldung","tools.detail.errorMessage":"Fehlermeldung","tools.detail.open":"Details","tools.detail.openLabel":"Details für {command} anzeigen","tools.detail.dialogLabel":"Details zur Werkzeugausführung","tools.detail.title":"Werkzeugausführung","tools.history.routing":"Routing","tools.history.routing.mode":"Mode","tools.history.routing.requested":"Requested","tools.history.routing.actual":"Actual","tools.history.routing.none":"No Studio target named","tools.clear.history.title":"Verlauf löschen?","tools.clear.history.message":"Dies entfernt den aktuellen Place-Tools-Verlauf dauerhaft.","tools.clear.statistics.title":"Statistik löschen?","tools.clear.statistics.message":"Dies setzt die aktuelle Place-Tool-Statistik dauerhaft zurück.","tools.detail.error":"Fehler","tools.page.prev":"Zurück","tools.page.prev.tooltip":"Zur vorherigen Seite der Tool-Verlaufsergebnisse.","tools.page.next":"Weiter","tools.page.next.tooltip":"Zur nächsten Seite der Tool-Verlaufsergebnisse.","tools.empty.history":"Keine Verlaufseinträge","tools.empty.stats":"Keine Tool-Statistik","tools.empty.failures":"Keine Fehler","tools.summary.total":"Gesamt","tools.summary.calls":"Aufrufe","tools.summary.sessions":"Sessions","settings.license.title":"Lizenz","settings.license.title.tooltip":"Aktueller Lizenzstatus und Abonnement-Tier.","settings.license.status":"Status","settings.license.status.tooltip":"Aktueller Lizenz-Aktivierungsstatus.","settings.license.tier":"Tier","settings.license.tier.tooltip":"Aktueller Abonnement-Tier für verfügbare WEPPY Dashboard-Funktionen.","settings.license.key":"Schlüssel","settings.license.key.tooltip":"Maskierter Lizenzschlüssel, der derzeit vom Server geladen ist.","settings.license.keyValue.tooltip":"Maskierter Lizenzschlüssel, der derzeit vom Server geladen ist.","settings.license.provider":"Anbieter","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"Lizenzanbieter zur Validierung dieses Schlüssels.","settings.license.providerValue.tooltip":"Lizenzanbieter zur Validierung dieses Schlüssels.","settings.license.active":"Aktiv","settings.license.active.tooltip":"Aktueller Lizenz-Aktivierungsstatus.","settings.license.status.activeCancelPending.tooltip":"Kündigung steht aus, aber Pro-Zugang bleibt bis zum Ende der aktuellen Abrechnungsperiode aktiv.","settings.license.inactive":"Inaktiv","settings.license.inactive.tooltip":"Aktueller Lizenz-Aktivierungsstatus.","settings.license.expired":"Abgelaufen","settings.license.expired.tooltip":"Aktueller Lizenz-Aktivierungsstatus.","settings.license.unavailable":"Lizenzinformationen nicht verfügbar","settings.license.detail.cancelPending":"Kündigung ist geplant. Pro-Zugang bleibt bis zum Ende der aktuellen Abrechnungsperiode aktiv.","settings.license.reset":"Lizenz zurücksetzen","settings.readOnly":"Schreibgeschützt","settings.readOnly.tooltip":"Dieser Abschnitt zeigt Werte, die nicht über das WEPPY Dashboard bearbeitet werden können.","settings.unavailable":"Einstellungen nicht verfügbar","settings.general.title":"Allgemeine Einstellungen","settings.general.title.tooltip":"Hot-Settings, die sofort beim Ändern angewendet werden.","settings.general.liveApply":"Live anwenden","settings.general.liveApply.tooltip":"Änderungen in diesem Abschnitt werden sofort ohne separate Speichern-Schaltfläche angewendet.","settings.general.applied":"Angewendet","settings.general.logLevel":"Log-Level","settings.general.logLevel.tooltip":"Legt fest, wie detailliert das WEPPY Dashboard in seine Logs schreibt.","settings.general.localHistory":"Tool-Verlaufsaufzeichnung","settings.general.localHistory.tooltip":"Speichert lokalen Tool-Ausführungsverlauf für die WEPPY Dashboard-Verlaufsansichten.","settings.general.localStatistics":"Tool-Statistiksammlung","settings.general.localStatistics.tooltip":"Aggregiert lokale Nutzungsstatistiken für WEPPY Dashboard-Berichte.","settings.general.contextCapture":"Kontext-Erfassung","settings.general.contextCapture.tooltip":"Wenn aktiviert, zeichnet das WEPPY Dashboard strukturierte Ausführungskontexte für Changelog- und Playtest-Ansichten auf.","settings.general.requestTimeout":"Aktions-Timeout","settings.general.requestTimeout.tooltip":"Maximale Wartezeit des WEPPY Dashboards auf eine Aktion, bevor sie fehlschlägt.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"Aktions-Timeout wird in Millisekunden gemessen.","settings.cold.title":"Server-Umgebung","settings.cold.title.tooltip":"Schreibgeschützte Server-Umgebungswerte, die beim Start geladen werden.","settings.cold.httpPort.tooltip":"Portnummer, die vom MCP WEPPY Dashboard HTTP-Server verwendet wird.","settings.cold.httpHost.tooltip":"Host-Schnittstelle, an die sich der MCP WEPPY Dashboard HTTP-Server bindet.","settings.cold.hint":"Über Umgebungsvariablen setzen, um diese Werte zu ändern.","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"Legen Sie fest, wie sich das WEPPY Dashboard beim Start des MCP-Servers verhält.","settings.dashboard.nextStartBadge":"Nächster Start","settings.dashboard.autoOpen.label":"Dashboard beim Start von WEPPY öffnen","settings.dashboard.autoOpen.description":"Öffnet dieses Dashboard nach dem Start des MCP-Servers automatisch.","settings.dashboard.autoOpen.nextStart":"Wird beim nächsten Start des MCP-Servers angewendet.","settings.dashboard.settingsFile.label":"Einstellungsdatei","settings.dashboard.agentExample.label":"Fragen Sie Ihren Agent","settings.dashboard.agentExample.prompt":"„Automatisches Öffnen des Dashboards ausschalten.“","settings.dashboard.autoOpen.saving":"Wird gespeichert…","settings.dashboard.autoOpen.saved":"Für den nächsten Serverstart gespeichert.","settings.dashboard.autoOpen.error":"Speichern fehlgeschlagen. Die vorherige Einstellung wurde wiederhergestellt.","dashboardAutoOpenGuide.eyebrow":"Dashboard-Einstellung","dashboardAutoOpenGuide.title":"Festlegen, wie das WEPPY Dashboard geöffnet wird","dashboardAutoOpenGuide.currentOn":"Das automatische Öffnen ist derzeit aktiviert. Dieses Dashboard wird nach dem Start des MCP-Servers geöffnet.","dashboardAutoOpenGuide.currentOff":"Das automatische Öffnen ist derzeit deaktiviert. WEPPY öffnet beim Start des MCP-Servers keinen neuen Dashboard-Tab.","dashboardAutoOpenGuide.changeAnytime":"Sie können dies jederzeit in den Settings ändern.","dashboardAutoOpenGuide.agentHint":"Sie können Ihren Agent auch bitten: „Automatisches Öffnen des Dashboards ausschalten“.","dashboardAutoOpenGuide.statusOn":"Automatisches Öffnen an","dashboardAutoOpenGuide.statusOff":"Automatisches Öffnen aus","dashboardAutoOpenGuide.keep":"Aktuelle Einstellung beibehalten","dashboardAutoOpenGuide.turnOff":"Automatisches Öffnen ausschalten","dashboardAutoOpenGuide.openSettings":"Settings öffnen","dashboardAutoOpenGuide.close":"Hinweis zum automatischen Öffnen schließen","dashboardAutoOpenGuide.saving":"Wird gespeichert…","dashboardAutoOpenGuide.error":"Ihre Auswahl konnte nicht gespeichert werden. Versuchen Sie es erneut.","settings.language.title":"Sprache","settings.language.title.tooltip":"Wählen Sie, wie der WEPPY Dashboard-Oberflächentext lokalisiert wird.","settings.language.dashboard":"WEPPY Dashboard-Sprache","settings.language.dashboard.tooltip":"Überschreibt die WEPPY Dashboard-Sprache oder folgt der Systemsprache, wenn auf Auto eingestellt.","settings.language.auto":"Auto","overview.l0.title":"MCP-Server getrennt","overview.l0.message":"Der MCP-Server antwortet nicht. Das WEPPY Dashboard versucht automatisch, die Verbindung wiederherzustellen.","overview.l0.step1":"Prüfen Sie, ob der MCP-Server-Prozess läuft","overview.l0.step2":"Starten Sie den MCP-Server-Befehl bei Bedarf neu","overview.l0.reconnecting":"Automatische Wiederverbindung alle 3s...","overview.l0.reconnectBtn":"Erneut verbinden","overview.l0.settingsBtn":"Einstellungen prüfen","overview.l1.pluginGuide":"Roblox Studio Plugin ist nicht verbunden","overview.l1.check1":"Läuft Roblox Studio?","overview.l1.check2":"Ist das WEPPY Plugin installiert?","overview.l1.feedHint":"Änderungen erscheinen hier, sobald das Plugin verbunden ist","overview.metric.server":"Server","overview.metric.server.tooltip":"MCP-Server-Laufzeit und Prozessstatus","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Roblox Studio Plugin-Verbindungs- und Versionsstatus","overview.metric.agent":"Agent","overview.metric.agent.tooltip":"Verbundene KI-Coding-Agenten und ihr Laufzeitstatus","overview.metric.agent.instancesUnit":"Instanzen","overview.metric.sync":"Sync","overview.metric.sync.tooltip":"Aktuelle Studio-zu-Lokal-Sync-Aktivität","overview.metric.noAgent":"Kein Agent","overview.meta.version":"Version","overview.meta.version.tooltip":"Installierte MCP-Server-Version","overview.meta.session":"Session","overview.meta.session.tooltip":"Aktuelle MCP-Session-Kennung","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Betriebssystem-Prozesskennung","overview.meta.uptime":"Uptime","overview.meta.uptime.tooltip":"Verstrichene Zeit seit dem Start des MCP-Servers","overview.feed.title":"Letzte Spieländerungen","overview.feed.empty":"Keine kürzlichen Änderungen","overview.changelog.title":"Session-Änderungszusammenfassung","overview.changelog.entries":"Gesamt","overview.changelog.scripts":"Skripte","overview.changelog.instances":"Instanzen","overview.changelog.properties":"Eigenschaften","overview.changelog.assets":"Assets","overview.tier.title":"Tier-Nutzung","changelog.subtitle":"Spieländerungsverlauf","changelog.filter.all":"Alle","changelog.filter.active":"Aktiv","changelog.filter.completed":"Abgeschlossen","changelog.empty":"Noch keine Changelog-Einträge","changelog.basic.limit.title":"Basic-Vorschau zeigt die letzten 3 Sessions","changelog.basic.limit.body":"Upgraden Sie auf Pro, um die vollständige Changelog-Timeline für diesen Place zu durchsuchen.","changelog.basic.metricLabel":"Sichtbares Changelog / Gesamt","changelog.basic.visible":"sichtbar","changelog.basic.total":"gesamt","changelog.card.active":"Aktiv","changelog.card.active.tooltip":"Diese Session empfängt noch neue Spieländerungen.","changelog.card.completed":"Abgeschlossen","changelog.card.completed.tooltip":"Diese Session ist beendet und es werden keine weiteren Änderungen erwartet.","changelog.card.bootstrapStatus":"Bootstrap","changelog.card.bootstrapStatus.tooltip":"Diese Session enthält nur den anfänglichen Sync-Bootstrap-Snapshot.","changelog.card.inProgress":"in Bearbeitung","changelog.card.noChanges":"Noch keine Änderungen","changelog.card.noChanges.tooltip":"Für diese Session wurden noch keine Spieländerungen extrahiert.","changelog.card.bootstrapSummary":"Anfänglicher Sync-Snapshot","changelog.card.bootstrapSummary.tooltip":"Anfängliche Datei-Sync-Schreibvorgänge werden zu einer einzigen Bootstrap-Snapshot-Zeile zusammengefasst.","changelog.card.sessionIntent":"Session-Absicht","changelog.card.scripts":"Skripte","changelog.card.scripts.tooltip":"In dieser Session vorgenommene Skript-Änderungen.","changelog.card.instances":"Instanzen","changelog.card.instances.tooltip":"Instanz-Erstellungs-, Lösch-, Verschiebe- oder Klonänderungen in dieser Session.","changelog.card.modified":"geändert","changelog.card.created":"erstellt","changelog.card.deleted":"gelöscht","changelog.card.moved":"verschoben","changelog.card.propertiesChanged":"Eigenschaften geändert","changelog.card.propertiesChanged.tooltip":"Für diese Session aufgezeichnete Eigenschaftswertänderungen.","changelog.card.lightingConfigured":"Beleuchtung konfiguriert","changelog.card.lightingConfigured.tooltip":"Beleuchtungs- oder Atmosphäreneinstellungen wurden in dieser Session geändert.","changelog.card.terrainConfigured":"Terrain konfiguriert","changelog.card.terrainConfigured.tooltip":"Terrain-Daten oder Terrain-Einstellungen wurden in dieser Session geändert.","changelog.card.assetsInserted":"Assets eingefügt","changelog.card.assetsInserted.tooltip":"In dieser Session in den Place eingefügte Assets.","changelog.category.script":"Skripte","changelog.category.instance":"Instanzen","changelog.category.property":"Eigenschaften","changelog.category.lighting":"Beleuchtung","changelog.category.terrain":"Terrain","changelog.category.asset":"Assets","changelog.detail.dialogLabel":"Changelog-Details","changelog.detail.changeSummary":"Änderungszusammenfassung","changelog.detail.changeSummary.tooltip":"Anzahl der extrahierten Spieländerungen, gruppiert nach Kategorie für diese Session.","changelog.detail.changeTimeline":"Änderungs-Timeline","changelog.detail.changeTimeline.tooltip":"Chronologische Liste der extrahierten Spieländerungen für diese Session.","changelog.detail.context.title":"Kontextzusammenfassung","changelog.detail.context.tooltip":"Strukturierter Ausführungskontext, der für diese Changelog-Session erfasst wurde.","changelog.detail.verification.title":"Verifikation","changelog.detail.verification.tooltip":"Mit dieser Changelog-Session verknüpfte Verifikationssignale.","changelog.detail.verification.label":"Ergebnis","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Aufgezeichnet am","changelog.detail.beforeAfter":"Vorher & Nachher","changelog.detail.filterCategory":"Kategorie","changelog.detail.filterCategory.tooltip":"Filtert die Timeline nach einer einzigen Änderungskategorie.","changelog.detail.confidence.exact":"Exakt","changelog.detail.confidence.exact.tooltip":"Sowohl der Vorher- als auch der Nachher-Zustand wurden für diese Änderung bestätigt.","changelog.detail.confidence.partial":"Teilweise","changelog.detail.confidence.partial.tooltip":"Nur ein Teil des Vorher- und Nachher-Zustands konnte für diese Änderung bestätigt werden.","changelog.detail.confidence.afterOnly":"Nur nachher","changelog.detail.confidence.afterOnly.tooltip":"Nur der resultierende Zustand nach der Änderung konnte bestätigt werden.","changelog.detail.confidence.intentOnly":"Nur Absicht","changelog.detail.confidence.intentOnly.tooltip":"Nur die angeforderte Aktion wurde aufgezeichnet, nicht der resultierende Zustand.","changelog.detail.confidence.unknown":"Unbekannt","changelog.detail.confidence.unknown.tooltip":"Diese Änderung konnte aus den verfügbaren Daten nicht zuverlässig klassifiziert werden.","changelog.detail.noChanges":"Keine Änderungen in dieser Kategorie","changelog.detail.backToList":"Zurück zur Liste","changelog.diff.empty":"Kein Diff verfügbar","changelog.diff.unified":"Vereinheitlicht","changelog.diff.sideBySide":"Nebeneinander","changelog.diff.before":"Vorher","changelog.diff.after":"Nachher","sync.targets.title":"Verbundene Studios","sync.targets.refresh":"Aktualisieren","sync.targets.loading":"Studio-Sync-Status wird geladen…","sync.targets.unavailable":"Studio-Sync-Status nicht verfügbar. Bitte erneut versuchen.","sync.targets.empty":"Keine Studios verbunden. Verbinde das WEPPY Plugin für den Live-Sync-Status.","sync.targets.unknownPlace":"Unbekannter Place","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"Verbunden","sync.targets.notReported":"Noch nicht gemeldet","sync.targets.state.unknown":"Unbekannt","sync.targets.state.off":"Sync AUS","sync.targets.state.idle":"Sync AN · wartet","sync.targets.state.initializing":"Initialisierung","sync.targets.state.syncing":"Synchronisierung","sync.targets.state.paused":"Pausiert","sync.targets.state.error":"Fehler","sync.forwardStatus.label":"Änderungsübertragung","sync.forwardStatus.tooltip":"Zeigt, ob Edit-Änderungen gesendet werden können. Aktiv bedeutet nicht, dass alle lokalen Dateien aktuell sind.","sync.forwardStatus.inactive":"Aus","sync.forwardStatus.active":"Aktiv","sync.forwardStatus.paused_play":"Während Play pausiert","sync.forwardStatus.reconciling":"Prüft Edit-Änderungen","sync.forwardStatus.blocked":"Prüfung nötig","sync.forwardStatus.unknown":"Unbekannt","sync.forwardStatus.observedAt":"Beobachtet","sync.forwardStatus.reason.review":"Prüfe die Änderungen im Studio Plugin.","sync.forwardStatus.reason.editChanged":"Edit wurde während der Prüfung geändert. Prüfe Sync im Studio Plugin.","sync.forwardStatus.reason.failed":"Änderungen konnten nicht bestätigt werden. Prüfe Sync im Studio Plugin.","sync.forwardStatus.reason.fallback":"Weitere Details stehen im Studio Plugin.","sync.stored.title":"Gespeicherte Places","sync.stored.data":"Gespeicherte Daten","sync.stored.ambiguous":"Speicherort nicht bestätigt","sync.detail.scope":"Sync-Details für","sync.detail.readOnly":"Die Detailansicht ändert das Studio-Routing nicht.","sync.detail.empty":"Wähle ein verbundenes Studio oder einen gespeicherten Place.","sync.detail.unknown":"Dieses Studio hat seinen Sync-Status noch nicht gemeldet.","sync.detail.error":"Sync hat einen Fehler gemeldet. Details im Studio Plugin prüfen.","sync.detail.placeFolder":"Place-Ordner","sync.detail.placeFolder.tooltip":"Gespeicherter Ordner, den Studios mit diesem Place gemeinsam nutzen.","sync.detail.sharedData":"Pfad, Anzahl und Protokoll gehören zum Place und werden von seinen Studios geteilt.","sync.log.shared":"Geteiltes Place-Protokoll","sync.log.unsafe":"Der Speicherort ist für den Protokollzugriff nicht bestätigt.","sync.log.unavailable":"Place-Protokoll konnte nicht geladen werden. Bitte erneut versuchen.","sync.log.loading":"Place-Protokoll wird geladen…","sync.clear.selectedMessage":"Das geteilte Sync-Protokoll für {place} wird dauerhaft gelöscht.","sync.overlay.title":"Roblox Studio Plugin erforderlich","sync.overlay.message":"Sync-Status ist verfügbar, sobald das Roblox Studio Plugin verbunden ist.","sync.overlay.check1":"Läuft Roblox Studio?","sync.overlay.check2":"Ist das WEPPY Plugin installiert?","sync.status.title":"Sync-Status","sync.status.title.tooltip":"Aktueller Studio- und lokaler Datei-Sync-Status für diesen Place.","sync.status.forwardOnly":"Nur vorwärts","sync.status.forwardOnly.tooltip":"Basic-Tier erlaubt nur Studio-zu-Lokal-Vorwärts-Sync.","sync.status.place":"Place","sync.status.place.tooltip":"Verbundener Roblox Place-Name und Place-ID.","sync.status.path":"Pfad","sync.status.path.tooltip":"Lokaler Dateisystem-Stamm, der derzeit für die Sync-Ausgabe verwendet wird.","sync.status.instances":"Instanzen","sync.status.instances.tooltip":"Gesamtzahl synchronisierter Roblox-Instanzen, die im lokalen Spiegel verfolgt werden.","sync.status.scripts":"Skripte","sync.status.scripts.tooltip":"Gesamtzahl synchronisierter Skript-Dateien, die derzeit für diesen Place indiziert sind.","sync.status.state":"Status","sync.status.state.tooltip":"Aktueller Laufzeit-Sync-Status, der vom Server gemeldet wird.","sync.policy.title":"Sync-Richtlinie","sync.policy.title.tooltip":"Effektive Sync-Richtlinie, die vom verbundenen Studio-Plugin gemeldet wurde.","sync.policy.activation":"Aktivierung","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"Arbeitsablauf","sync.policy.preset.studio_first":"Studio zuerst","sync.policy.preset.bidirectional_review":"Bidirektional","sync.policy.preset.local_code_studio_world":"Lokaler Code, Studio-Welt","sync.policy.preset.custom":"Benutzerdefiniert","sync.policy.apply.title":"Wie lokale Änderungen auf Studio angewendet werden","sync.policy.apply.description":"Zeigt, ob lokale Änderungen zuerst geprüft oder automatisch auf Studio angewendet werden.","sync.policy.apply.content":"Inhaltsänderungen","sync.policy.apply.content.tooltip":"Lokale Änderungen an Script-Quelltext, Eigenschaften und Service-Eigenschaften. Das Erstellen, Löschen, Umbenennen und Verschieben sind Strukturänderungen.","sync.policy.apply.structure":"Strukturänderungen","sync.policy.apply.structure.tooltip":"Lokales Erstellen, Löschen, Umbenennen und Verschieben von Instanzen. Automatisches lokales Löschen benötigt zusätzlich die separate Löschoption unten.","sync.policy.apply.manual":"Zuerst prüfen","sync.policy.apply.auto":"Automatisch anwenden","sync.policy.scope.disclosure":"Richtungen nach Bereich","sync.policy.scope.scriptSource":"Script-Quelltext","sync.policy.scope.properties":"Eigenschaften","sync.policy.scope.structure":"Struktur","sync.policy.scope.serviceProperties":"Service-Eigenschaften","sync.policy.endpoint.local":"Lokal","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → Lokal","sync.policy.direction.forward.tooltip":"Änderungen aus Studio werden in lokale Dateien geschrieben.","sync.policy.direction.reverse":"Lokal → Studio","sync.policy.direction.reverse.tooltip":"Änderungen lokaler Dateien werden in Studio angewendet.","sync.policy.direction.bidirectional":"Beide Richtungen","sync.policy.direction.bidirectional.tooltip":"Änderungen können von Studio zu lokalen Dateien und von lokalen Dateien zu Studio übertragen werden.","sync.policy.safety.localDeletes":"Lokal löschen → Studio-Instanz löschen","sync.policy.safety.review":"Vor dem Löschen prüfen","sync.policy.safety.review.tooltip":"Lokale Dateilöschungen warten auf eine Prüfung, bevor passende Studio-Instanzen entfernt werden. Dies ist von der automatischen UI-Studio-Bereinigung getrennt.","sync.policy.safety.auto":"Automatisch in Studio löschen","sync.policy.safety.auto.tooltip":"Das Löschen lokaler Dateien kann passende Studio-Instanzen automatisch entfernen. Dies ist von der automatischen UI-Studio-Bereinigung getrennt.","sync.policy.reviewRequired":"Prüfen Sie diese Richtlinie im Studio-Plugin, bevor Sie Sync starten.","sync.log.title":"Sync-Protokoll","sync.log.empty":"Noch keine Sync-Ereignisse","sync.log.type.write":"WRITE","sync.log.type.write.tooltip":"Eine neue Sync-Ausgabe wurde auf die Festplatte geschrieben.","sync.log.type.update":"UPDATE","sync.log.type.update.tooltip":"Eine bestehende synchronisierte Datei oder Instanz wurde aktualisiert.","sync.log.type.delete":"DELETE","sync.log.type.delete.tooltip":"Eine synchronisierte Datei oder Instanz wurde entfernt.","sync.log.type.idle":"IDLE","sync.log.type.idle.tooltip":"Ein Sync-Ereignis wurde ohne Dateimutation aufgezeichnet.","sync.upgrade.title":"Vollständigen Sync mit Pro ansehen","sync.upgrade.benefit1":"Bidirektionaler Sync — Dateien bearbeiten, automatisch auf Studio anwenden","sync.upgrade.benefit2":"Reverse-Sync — Dateiänderungen zurück zu Studio pushen","sync.upgrade.benefit3":"Vollständiger Sync-Verlauf und detailliertes Änderungsprotokoll","sync.upgrade.buy":"Pro ansehen","playtest.status.title":"Playtest-Status","playtest.status.title.tooltip":"Aktueller Roblox Playtest-Sessionstatus, der von Studio gemeldet wird.","playtest.status.mode":"Modus","playtest.status.mode.tooltip":"Studio-Playtest-Startmodus für die aktuelle Session.","playtest.status.mode.value.tooltip":"Spezifischer Roblox Studio Playtest-Modus, der derzeit verwendet wird.","playtest.status.mode.play":"Play","playtest.status.mode.run":"Run","playtest.status.mode.server":"Server","playtest.status.mode.edit":"Edit","playtest.status.place.tooltip":"Roblox Place, der derzeit mit dieser Playtest-Session verknüpft ist.","playtest.status.state.running":"Läuft","playtest.status.state.running.tooltip":"Eine Roblox Playtest-Session läuft derzeit.","playtest.status.state.paused":"Pausiert","playtest.status.state.paused.tooltip":"Die aktuelle Roblox Playtest-Session ist pausiert.","playtest.status.state.notRunning":"Läuft nicht","playtest.status.state.notRunning.tooltip":"Es läuft derzeit keine Roblox Playtest-Session.","playtest.control.play":"Play","playtest.control.pause":"Pause","playtest.control.resume":"Resume","playtest.control.stop":"Stop","playtest.history.title":"Testverlauf","playtest.history.search":"Testergebnisse suchen","playtest.history.filter":"Ergebnis","playtest.history.filterAll":"Alle Ergebnisse","playtest.history.filteredCount":"{{visible}} von {{total}} Ergebnissen","playtest.history.title.tooltip":"Aufgezeichnete automatisierte Playtest-Läufe für dieses Projekt.","playtest.history.empty":"Noch keine Testergebnisse","playtest.history.mode":"Modus","playtest.history.mode.tooltip":"Playtest-Modus, der für diesen aufgezeichneten Testlauf verwendet wurde.","playtest.history.status.passed":"Bestanden","playtest.history.status.failed":"Fehlgeschlagen","playtest.history.status.running":"Läuft","playtest.history.status.unknown":"Unbekannt","playtest.history.status.tooltip":"Aufgezeichneter Ergebnisstatus für diesen automatisierten Playtest-Lauf.","playtest.empty.title":"Noch keine Playtest-Ergebnisse","playtest.empty.message":"Testergebnisse erscheinen hier, nachdem der KI-Agent einen Playtest ausgeführt hat.","playtest.empty.message.before":"Testergebnisse erscheinen hier, nachdem der KI-Agent einen Playtest ausgeführt hat.","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"Ask the AI Agent to run a Playtest when you need a fresh report.","playtest.report.title":"Ausgewählter Bericht","playtest.report.title.tooltip":"Detaillierte Ausgabe für den derzeit ausgewählten automatisierten Playtest-Lauf.","playtest.detail.dialogLabel":"Details zum Playtest-Bericht","playtest.detail.loading":"Bericht wird geladen...","playtest.detail.errorTitle":"Bericht nicht verfügbar","playtest.report.content":"Bericht","playtest.report.content.tooltip":"Markdown-Zusammenfassung für den ausgewählten automatisierten Playtest-Lauf.","playtest.report.logs":"Logs","playtest.report.logs.tooltip":"Ausführungs-Logs, die für den ausgewählten automatisierten Playtest-Lauf erfasst wurden.","playtest.context.contextId":"Kontext-ID","playtest.context.why":"Warum dieser Test ausgeführt wurde","playtest.context.expected":"Erwartet","playtest.context.observed":"Beobachtet","playtest.report.empty":"Kein Berichtsinhalt verfügbar","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest ist eine Pro-exklusive Funktion","playtest.basic.desc":"Steuern Sie Playtesting vom WEPPY Dashboard aus, führen Sie automatisierte Tests aus und sehen Sie detaillierte Testberichte.","playtest.basic.benefit1":"Ein-Klick-Play/Pause/Stop-Steuerung","playtest.basic.benefit2":"Automatisierte Testausführung über KI-Agent","playtest.basic.benefit3":"Testverlauf mit Bestanden/Fehlgeschlagen-Verfolgung","playtest.basic.benefit4":"Detaillierte Markdown-Testberichte","playtest.sample.badge":"Vorschau der Pro-Playtest-Ansicht","playtest.sample.title":"Sie sehen eine Vorschau des Playtest-Bildschirms, der nach dem Upgrade auf Pro verfügbar wird.","playtest.sample.message":"Diese Vorschau verwendet Beispieldaten. Live-Playtest-Steuerung, Verlaufsverwaltung und echte Berichte werden mit Pro freigeschaltet.","playtest.sample.clearDisabled":"Upgraden Sie auf Pro, um den Live-Playtest-Verlauf zu löschen.","playtest.sample.place":"Arena-Vorschau","playtest.sample.history.name":"Beispiel-Arena-Smoke-Test","playtest.sample.context.why":"In die Arena spawnen, den Eröffnungsangriff überleben und prüfen, ob das HUD sofort reagiert.","playtest.sample.context.expected":"Der Spieler spawnt sicher, die Countdown-UI erscheint innerhalb einer Sekunde und die erste Welle startet ohne Fehler.","playtest.sample.context.observed":"Spawn-Schutz hielt, das HUD wurde rechtzeitig aktualisiert und Welle eins wurde ohne Gameplay-Regressionen abgeschlossen.","playtest.sample.report.markdown":`# Beispiel-Arena-Smoke-Test
185
+ - Zeige den Speicherort des Quellcodes, geänderte Dateien, verwendende Profile, das cleanup-Verhalten und die Punkte, die ich vor der Veröffentlichung selbst prüfen muss.`,"sidebar.overview":"Übersicht","sidebar.changelog":"Änderungsprotokoll","sidebar.connection":"Verbindung","sidebar.sync":"Sync","sidebar.playtest":"Playtest","sidebar.tools":"Tools","sidebar.settings":"Einstellungen","sidebar.ui_studio":"UI Studio","sidebar.gate.l1":"MCP-Server-Verbindung erforderlich","sidebar.gate.l2":"Roblox Studio Plugin-Verbindung erforderlich","header.currentProject":"Aktuelles Projekt","header.unknownProject":"Unbekanntes Projekt","header.projectRoot.label":"Projektstamm","header.currentProject.loading":"Lade Projektstamm...","header.currentProject.unavailable":"Projektstamm nicht verfügbar","header.placeNotConnected":"Place nicht verbunden","header.currentProject.tooltip":"Aktuell ausgewählter Projektordner","header.currentProject.loading.tooltip":"Projektstamm-Informationen werden noch geladen","header.currentProject.unavailable.tooltip":"Aktuelle Projektstamm-Informationen sind nicht verfügbar","header.currentProjectSyncRoot.label":"Sync-Stamm","header.currentProjectSyncRoot.loading":"Lade Sync-Stamm...","header.currentProjectSyncRoot.unavailable":"Sync-Stamm nicht verfügbar","header.currentProjectSyncRoot.tooltip":"Aktueller Sync-Stamm-Ordner für das ausgewählte Projekt","header.currentProjectSyncRoot.loading.tooltip":"Sync-Stamm-Informationen werden noch geladen","header.currentProjectSyncRoot.unavailable.tooltip":"Aktuelle Sync-Stamm-Informationen sind nicht verfügbar","header.testFiles.label":"Testdateien","header.testFiles.unavailable":"Testdateien nicht verfügbar","header.testFiles.tooltip":"Aktuelles Playtest-Dateiverzeichnis für den ausgewählten Place","header.places.title":"Places","header.places.active":"Aktiv","header.places.inactive":"Inaktiv","header.places.pluginRequired":"Plugin-Verbindung erforderlich","header.places.liveRequired":"Plugin-Verbindung für Live Active Place erforderlich","header.place.tooltip":"Verbundener Roblox Place","header.placeNotConnected.tooltip":"Place nicht verbunden","placeScope.current.label":"Aktueller Place","placeScope.lastActive.label":"Zuletzt aktiver Place","placeScope.selected.label":"Ausgewählter Place","placeScope.unknownPlace":"Unbekannter Place","placeScope.live":"Live","placeScope.connected":"Studio verbunden","placeScope.stored":"Gespeicherte Daten","placeScope.connectedGroup":"Verbundene Studios","placeScope.storedGroup":"Gespeicherte Daten","placeScope.stored.note":"Dieser Place ist derzeit in keinem verbundenen Studio geöffnet.","placeScope.pluginRequired":"Plugin erforderlich","placeScope.pluginRequired.note":"Verbinde das WEPPY Plugin, um den live aktiven Place zu bestätigen.","placeScope.noPlace.label":"Place-Bereich","placeScope.noPlace.value":"Noch keine Place-Daten verfügbar","placeScope.noPlace.badge":"Kein Place","placeScope.noPlace.note":"Verbinde das WEPPY Plugin und synchronisiere einen Place, um Place-bezogene Daten zu erstellen.","placeScope.selected.note":"Es werden nur gespeicherte Daten angezeigt. Das Studio-Routing bleibt unverändert.","placeScope.surface.sync":"Sync-Status und Logs verwenden diesen Place.","placeScope.surface.changelog":"Changelog-Sitzungen verwenden diesen Place.","placeScope.surface.playtest":"Playtest-Berichte verwenden diesen Place.","placeScope.surface.uiStudio":"UI-Aufnahmen und Änderungsverlauf verwenden diesen Place.","placeScope.surface.tools":"Tool-Verlauf und Statistiken verwenden diesen Place.","placeScope.loading":"Place-Bereich wird geladen...","placeScope.unavailable":"Place-Bereich nicht verfügbar","placeScope.selector.label":"Place-Daten","placeScope.shortcuts.trigger":"Schnellzugriffe","placeScope.shortcuts.label":"Place-Schnellzugriffe","placeScope.shortcuts.settings":"Place-Einstellungen","placeScope.shortcuts.experience":"Erlebnis verwalten","placeScope.shortcuts.roblox":"Auf Roblox ansehen","placeScope.folder.duplicate":"Doppelter Ordner","placeScope.folder.unresolved":"Repräsentativer Ordner nicht bestätigt","placeScope.folder.noSyncHistory":"Kein Synchronisierungsverlauf","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Details zu Place-Ordnern","placeScope.folder.duplicateReason":"Der aktuelle Speicherort ist {canonicalFolder}. Dieser Ordner wird nach einer erfolgreichen vollständigen Synchronisierung gesichert.","placeScope.folder.unresolvedReason":"Dieser Place bleibt über seine ID auswählbar, aber es wurde noch kein bestimmter Ordner als repräsentativ bestätigt.","placeScope.folder.unknown":"unbekannt","placeScope.selector.noneSelectable":"Kein auswählbarer Place-Ordner","header.changeProjectRoot":"Projektstamm ändern","header.changeProjectRoot.ariaLabel":"Projektstamm ändern","header.changeProjectRoot.tooltip":"Den aktuellen Projektstamm ändern","header.changeProjectRoot.disabledTooltip.l0":"MCP-Server-Verbindung erforderlich, bevor der Projektstamm geändert werden kann","header.changeProjectRoot.disabledTooltip.loading":"Projektstamm-Informationen werden noch geladen","header.changeProjectRoot.disabledTooltip.unavailable":"Aktuelle Projektstamm-Informationen sind nicht verfügbar","header.projectRootModal.initial.title":"Projektstamm ändern","header.projectRootModal.initial.body.connected":"Nachdem Sie einen Projektordner ausgewählt haben, wechselt MCP zum neuen Projektstamm und der aktuelle Studio-Inhalt wird vollständig in das neue <ausgewählter Projektordner>/weppy-project-sync-Ziel resynced.","header.projectRootModal.initial.body.disconnected":"Nachdem Sie einen Projektordner ausgewählt haben, wechselt MCP zum neuen Projektstamm und verwendet <ausgewählter Projektordner>/weppy-project-sync als nächstes Sync-Ziel.","header.projectRootModal.initial.nextSyncRoot":"Neues Sync-Ziel nach Auswahl","header.projectRootModal.initial.nextSyncRoot.placeholder":"<ausgewählter Projektordner>/weppy-project-sync","header.projectRootModal.initial.warningStop":"Aktueller Sync wird sofort gestoppt.","header.projectRootModal.initial.warningFreshSync":"Der aktuelle Studio-Inhalt wird verwendet, um einen neuen Full-Sync im neuen Ziel zu erstellen.","header.projectRootModal.initial.warningNoMove":"Alte Sync-Ordner werden nicht automatisch verschoben.","header.projectRootModal.initial.warningDeferredSync":"Wenn Studio nicht verbunden ist, startet der Full Resync beim nächsten Verbinden des Plugins.","header.projectRootModal.confirm.title":"Neuen Projektstamm bestätigen","header.projectRootModal.confirm.body":"Überprüfen Sie den ausgewählten Projektordner, bevor Sie ihn anwenden.","header.projectRootModal.confirm.projectRoot":"Ausgewählter Projektordner","header.projectRootModal.confirm.syncRoot":"Neues Sync-Ziel","header.projectRootModal.confirm.warningNoMove":"Bestehende Sync-Ordner werden nicht automatisch verschoben.","header.projectRootModal.pick":"Ordner auswählen","header.projectRootModal.apply":"Änderung anwenden","header.projectRootModal.cancel":"Abbrechen","header.projectRootModal.error":"Projektstamm-Änderung fehlgeschlagen","status.online":"Online","status.offline":"Offline","status.idle":"Inaktiv","status.syncing":"Synchronisiere","status.error":"Fehler","status.initializing":"Initialisiere","level.l0.title":"Server getrennt","level.l0.message":"WEPPY Dashboard wurde geöffnet, aber der MCP-Server wurde gestoppt oder antwortet nicht.","level.l1.title":"Server verbunden","level.l1.hint":"Prüfen: Läuft Roblox Studio? Ist das Plugin installiert?","level.l2.ok":"Studio verbunden","tier.basic":"Basic","tier.basic.tooltip":"Basic-Tier mit dem Standard-Funktionsumfang des WEPPY Dashboards.","tier.pro":"Pro","tier.pro.tooltip":"Pro-Tier mit dem vollständigen Funktionsumfang des WEPPY Dashboards.","tier.mixed":"Gemischt","tier.upgrade":"Pro ansehen","tier.banner.save":"Sparen Sie KI-Token mit Pro!","tier.tool.query_instances.desc":"Inspizieren Sie Instanzen, durchsuchen Sie Children und Descendants und prüfen Sie Klasseninformationen. Pro fügt File Tree, Projektstruktur sowie Eigenschafts- oder Tag-Suche hinzu.","tier.tool.mutate_instances.desc":"Erstellen, löschen, klonen und verschieben Sie Instanzen. Pro fügt Tree-Erstellung und Massenerstellung, -löschung oder -klonierung hinzu.","tier.tool.manage_properties.desc":"Lesen und setzen Sie Eigenschaften, Attribute und Tags. Pro fügt berechnete Updates, relative Änderungen und Massen-Eigenschaftsoperationen hinzu.","tier.tool.manage_scripts.desc":"Lesen, schreiben, erstellen, löschen, bearbeiten und durchsuchen Sie Skript-Quelltext. Pro fügt Massenersetzung über mehrere Skripte hinzu.","tier.tool.manage_ui.desc":"Nur Pro. Spieltypische Menüs, HUDs, Buttons, Labels und Bildpanels erstellen oder verfeinern, dann Screenshots aufnehmen und Verbesserungsvorschläge prüfen.","tier.tool.manage_ui.action.design_brief":"UI-Richtung planen","tier.tool.manage_ui.action.create_tree":"Neue UI erstellen","tier.tool.manage_ui.action.update":"Bestehende UI aktualisieren","tier.tool.manage_ui.action.delete":"UI entfernen","tier.tool.manage_ui.action.preview":"UI-Bildschirm aufnehmen","tier.tool.manage_ui.action.check":"Verbesserungsvorschläge prüfen","tier.tool.manage_lighting.desc":"Nur Pro. Konfigurieren Sie Beleuchtung, Atmosphäre, Himmel, Terrain-Eigenschaften und Tageszeit-Einstellungen.","tier.tool.manage_selection.desc":"Lesen, setzen und löschen Sie die aktuelle Studio-Auswahl. Pro fügt Kontext, Details, Hinzufügen oder Entfernen sowie Auswahl-Watch-Unterstützung hinzu.","tier.tool.manage_camera.desc":"Inspizieren Sie Kamerastatus, fokussieren Sie nach Pfad oder Position und fordern Sie vorgeschlagene Ansichten an.","tier.tool.manage_tween.desc":"Nur Pro. Erstellen, abspielen, pausieren und abbrechen von Tweens für sanfte Animationen.","tier.tool.manage_audio.desc":"Nur Pro. Sounds abspielen, stoppen, pausieren und fortsetzen sowie den Audio-Listener konfigurieren.","tier.tool.manage_animation.desc":"Nur Pro. Animationen laden, abspielen und stoppen sowie aktive Animationstracks inspizieren.","tier.tool.manage_physics.desc":"Nur Pro. Kollisionsgruppen registrieren, Gruppenkollisionen konfigurieren und verfügbare Gruppen inspizieren.","tier.tool.manage_effects.desc":"Nur Pro. Partikel emittieren, Effekte löschen und Effektstatus umschalten.","tier.tool.manage_terrain.desc":"Nur Pro. Terrain-Formen füllen, Regionen löschen, Materialien ersetzen, Terrain-Farben verwalten, Voxel lesen oder schreiben, Terrain generieren und Terrain glätten.","tier.tool.spatial_query.desc":"Nur Pro. Raycasts ausführen, Boden finden, Platzierung validieren, Bereiche scannen, nach flachen oder Spawn-Positionen suchen, Begehbarkeit analysieren, Raum kartieren und Kollisionen inspizieren.","tier.tool.manage_assets.desc":"Nur Pro. Modelle einfügen, Asset-Informationen inspizieren, im Creator Store suchen, freie Assets oder Pakete einfügen und Assets exportieren.","tier.tool.manage_sync.desc":"Nur Pro. Sync-Status, -Konfiguration, -Verlauf, -Richtungen inspizieren und synchronisierte Dateien lesen oder schreiben.","tier.tool.workspace_state.desc":"Nur Pro. Full Sync ausführen, Screenshots erfassen, kürzliche Änderungen und Viewport-Status inspizieren und zugehörige Metadaten verwalten.","tier.tool.manage_logs.desc":"Inspizieren Sie Output-Logs mit Filterung, inkrementellem Polling, Buffer-Löschung und kürzlicher Fehlersuche.","tier.tool.system_info.desc":"Verbindungsstatus und aktuellen Tier inspizieren. Pro fügt Place-Info, Services, Studio-Einstellungen, Playtest-Steuerung und automatisierte Tests hinzu.","tier.tool.manage_studio.desc":"Nur Pro. Studio-Editor-Ansichtseinstellungen wie UI Preview für Screenshots und QA umschalten; es ändert Studio-Sitzungseinstellungen, nicht die UI-Objekte des Spiels.","tier.tool.batch_execute.desc":"Nur Pro. Mehrere Befehle in einem Batch ausführen, mit sequentieller Ausführung und optionalem Continue-on-Error-Verhalten.","tier.tool.execute_luau.desc":"Nur Pro. Beliebigen Luau-Code in der Roblox Studio Sandbox ausführen.","connection.server.title":"Bridge-Status","connection.server.version":"Version","connection.server.version.tooltip":"Laufzeitversion der WEPPY Bridge","connection.server.pid":"PID","connection.server.pid.tooltip":"Betriebssystem-Prozesskennung","connection.server.uptime":"Uptime","connection.server.uptime.tooltip":"Verstrichene Zeit seit dem Start der WEPPY Bridge","connection.server.session":"Session","connection.server.session.tooltip":"Aktuelle Session-Kennung der WEPPY Bridge","connection.server.exec":"Exec","connection.server.exec.tooltip":"Pfad der ausführbaren Datei zum Starten der WEPPY Bridge","connection.server.restart":"Bridge neu starten","connection.server.restarting":"Neustart…","connection.server.restartUnavailable":"Verbinde mindestens einen KI-Agenten, damit dessen MCP Adapter die neue Bridge starten kann.","connection.server.restartTitle":"WEPPY Bridge neu starten?","connection.server.restartMessage":"Dashboard und Studio-Ziele werden kurz getrennt. Das Ergebnis laufender Befehle kann unbestimmt sein, und aktive Playtest-Sitzungen oder ausstehende Steuerungen werden bereinigt. Ein verbundener MCP Adapter startet automatisch eine neue Bridge.","connection.server.restartConfirm":"Bridge neu starten","connection.server.restartRequesting":"Bridge-Neustart wird angefordert…","connection.server.restartReconnecting":"Verbindung zu WEPPY Bridge wird wiederhergestellt…","connection.server.restartWaiting":"Dashboard und Studio verbinden sich automatisch wieder, sobald die neue Bridge bereit ist.","connection.server.restartSucceeded":"WEPPY Bridge wurde neu gestartet","connection.server.restartFailed":"WEPPY Bridge konnte nicht neu gestartet werden","connection.server.restartTimeout":"Die neue Bridge wurde nicht rechtzeitig bereit. Prüfe die MCP-Verbindung in deinem KI-Werkzeug und versuche es erneut.","connection.server.restartStale":"Die Bridge hat sich geändert, bevor die Anfrage angenommen wurde. Aktualisiere den Status und versuche es erneut.","connection.reconnect":"Erneut verbinden","connection.checkSettings":"Einstellungen prüfen","connection.agents.title":"KI-Agenten","connection.agents.name":"Agent","connection.agents.version":"Version","connection.agents.version.tooltip":"Paketversion des MCP Adapters für diese Agent-Sitzung.","connection.agents.cwd":"Arbeitsverzeichnis","connection.agents.cwd.tooltip":"Aktuelles Arbeitsverzeichnis für den verbundenen KI-Agent","connection.agents.projectRoot":"Projektstamm","connection.agents.projectRoot.tooltip":"Maßgeblicher Projektstamm für die Sync-Eigentümerschaft","connection.agents.projectRoot.unresolved":"Nicht aufgelöst","connection.agents.connected":"Verbunden","connection.agents.unknown":"Unbekannt","connection.agents.none":"Keine Agenten verbunden","connection.plugins.title":"Plugins","connection.plugins.place":"Place","connection.plugins.clientId":"Connection ID","connection.plugins.clientId.tooltip":"Full connection ID for diagnostics","connection.plugins.lastSeen":"Zuletzt gesehen","connection.plugins.lastSeen.tooltip":"Zuletzt empfangener Heartbeat vom Plugin","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Vom Studio gemeldete installierte Plugin-Version","connection.plugins.none":"Keine Plugins verbunden","connection.targets.title":"Studio Targets","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"Short name for this Roblox Studio window","connection.targets.place":"Place","connection.targets.placeId":"Place ID","connection.targets.placeId.tooltip":"Roblox Place ID for this Studio window","connection.targets.clientId":"Connection ID","connection.targets.clientId.tooltip":"Full connection ID for diagnostics. Usually use Studio ID instead.","connection.targets.session":"Session","connection.targets.session.tooltip":"Command channel state for this Studio target","connection.targets.lastUsed":"Last Used","connection.targets.lastUsed.tooltip":"Most recent plugin-route request routed to this Studio target","connection.targets.lastSeen":"Last Seen","connection.targets.lastSeen.tooltip":"Most recent heartbeat received from this Studio target","connection.targets.version":"Version","connection.targets.version.tooltip":"Installed plugin version reported by Studio","connection.targets.routing":"Routing","connection.targets.routing.tooltip":"Default Studio window when the agent does not name one","connection.targets.inFlight":"In Flight","connection.targets.inFlight.tooltip":"Active command request currently routed to this Studio target","connection.targets.studioState":"Studio State","connection.targets.studioState.tooltip":"Current edit/play runtime state reported by this Studio window","connection.targets.studioState.edit":"Edit","connection.targets.studioState.running":"Running","connection.targets.studioState.paused":"Paused","connection.targets.studioState.unknown":"Unknown","connection.targets.studioState.source.thread":"WEPPY play command","connection.targets.studioState.source.pluginConnection":"Studio Play/Test-Verbindung","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"Unknown source","connection.targets.studioState.updatedUnknown":"not reported","connection.targets.copyPlaceId":"Copy Place ID","connection.targets.copyTargetAlias":"Copy Studio ID","connection.targets.copyClientId":"Copy Connection ID","connection.targets.copied":"Copied value","connection.targets.copyFailed":"Failed to copy value","connection.targets.none":"No Studio targets connected. Open Roblox Studio and connect WEPPY Plugin.","connection.targets.help":"When multiple Studio windows are connected, tell the agent to use Studio ID studio-1 to choose one.","connection.topology.ariaLabel":"Connection topology","connection.topology.title":"Connection topology","connection.topology.description":"Jeder KI-Agent verbindet sich über seinen eigenen MCP Adapter mit einer gemeinsamen WEPPY Bridge, die die Verbindung zu Roblox Studio aufrechterhält.","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"Active","connection.topology.stale":"Stale","connection.topology.unknown":"Unknown","connection.topology.lastContact":"Letzter Kontakt","connection.topology.noContact":"Kein kürzlicher Kontakt","connection.topology.versionUnknown":"Version unknown","connection.topology.placeUnknown":"Place unknown","connection.topology.moreAgents":"+{count} more agents","connection.topology.moreStudios":"+{count} more studios","connection.topology.allAgentsVisible":"All agents visible","connection.topology.allStudiosVisible":"All studios visible","connection.topology.showAll":"Show all","connection.topology.showLess":"Show less","connection.topology.showAllAgents":"Show all AI agents","connection.topology.showAllStudios":"Show all Studio targets","connection.topology.showLessAgents":"Show less AI agents","connection.topology.showLessStudios":"Show less Studio targets","connection.routing.updateFailed":"Failed to update routing target","connection.log.title":"Verbindungsprotokoll","connection.log.empty":"Noch keine Ereignisse","connection.time.secondsAgo":"s","connection.time.minutesAgo":"min","connection.time.hoursAgo":"Std","common.loading":"Lade...","common.retry":"Wiederholen","common.reconnecting":"Verbinde erneut...","common.expand":"Ausklappen","common.collapse":"Einklappen","tools.tab.history":"Verlauf","tools.tab.statistics":"Statistik","tools.tab.failures":"Fehler","tools.col.time":"Zeit","tools.col.time.tooltip":"Wann der Tool-Lauf aufgezeichnet wurde.","tools.col.toolAction":"Tool.Action","tools.col.toolAction.tooltip":"Name des Tools und ausgeführte Action.","tools.col.duration":"Dauer","tools.col.duration.tooltip":"Wie lange das Tool zum Beenden brauchte.","tools.col.status":"Status","tools.col.status.tooltip":"Ergebnis des aufgezeichneten Tool-Laufs.","tools.col.tier":"Tier","tools.col.tier.tooltip":"Erforderlicher Lizenz-Tier für das Tool oder die Action.","tools.col.tierStats.tooltip":"Basic-, Pro- oder Mixed-Zusammenfassung für die Statistikzeile.","tools.col.tool":"Tool","tools.col.tool.tooltip":"Konsolidierter Tool-Name in der Statistiktabelle.","tools.col.calls":"Aufrufe","tools.col.calls.tooltip":"Gesamtzahl der aufgezeichneten Aufrufe für dieses Tool.","tools.col.ok":"OK","tools.col.ok.tooltip":"Anzahl direkt erfolgreicher Läufe.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Anzahl der Läufe, die durch Fallback-Ausführung erfolgreich waren.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Anzahl blockierter Läufe ohne Fallback-Ausführung.","tools.col.warn":"WARN","tools.col.warn.tooltip":"Anzahl erwarteter Fehler durch Eingabe, Projektstatus, Roblox-Richtlinie oder Benutzercode.","tools.col.err":"FAILED","tools.col.err.tooltip":"Anzahl fehlgeschlagener Läufe.","tools.col.okRate":"OK%","tools.col.okRate.tooltip":"Prozentsatz der erfolgreich abgeschlossenen Aufrufe.","tools.col.avgTime":"Durchschnittszeit","tools.col.avgTime.tooltip":"Durchschnittliche Ausführungszeit über alle aufgezeichneten Aufrufe.","tools.col.error":"Fehler","tools.filter.tool":"Tool","tools.filter.all":"Alle","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Dieser Eintrag verwendete ein Pro-exklusives Tool oder eine Action.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"Die angeforderte Pro-Action wurde über einen Basic-Fallback erfolgreich ausgeführt.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"Die angeforderte Pro-Action wurde blockiert und kein Fallback wurde ausgeführt.","tools.badge.warn":"WARN","tools.badge.warn.tooltip":"Der Tool-Aufruf ist wegen eines erwarteten Eingabe-, Projekt-, Richtlinien- oder Benutzercode-Problems fehlgeschlagen.","tools.badge.err":"FAILED","tools.badge.err.tooltip":"Der Tool-Lauf ist fehlgeschlagen.","tools.status.ok":"OK","tools.status.ok.tooltip":"Der Tool-Lauf wurde erfolgreich abgeschlossen.","tools.tier.mixed.tooltip":"Dieses Tool enthält sowohl Basic- als auch Pro-Actions.","tools.detail.params":"Parameter","tools.detail.params.tooltip":"Eingabeparameter, die an diesen Tool-Lauf übergeben wurden.","tools.detail.result":"Ergebnis","tools.detail.result.tooltip":"Zurückgegebenes Ergebnis-Payload für diesen Tool-Lauf.","tools.detail.requestedCommand":"Gesendeter Befehl","tools.detail.executedCommand":"Ausgeführter Befehl","tools.detail.alternatives":"Alternativen","tools.detail.blockedMessage":"Blockierungsgrund","tools.detail.noFallback":"Kein Fallback","tools.detail.noFallback.value":"Kein Fallback ausgeführt.","tools.detail.warningMessage":"Warnmeldung","tools.detail.errorMessage":"Fehlermeldung","tools.detail.open":"Details","tools.detail.openLabel":"Details für {command} anzeigen","tools.detail.dialogLabel":"Details zur Werkzeugausführung","tools.detail.title":"Werkzeugausführung","tools.history.routing":"Routing","tools.history.routing.mode":"Mode","tools.history.routing.requested":"Requested","tools.history.routing.actual":"Actual","tools.history.routing.none":"No Studio target named","tools.clear.history.title":"Verlauf löschen?","tools.clear.history.message":"Dies entfernt den aktuellen Place-Tools-Verlauf dauerhaft.","tools.clear.statistics.title":"Statistik löschen?","tools.clear.statistics.message":"Dies setzt die aktuelle Place-Tool-Statistik dauerhaft zurück.","tools.detail.error":"Fehler","tools.page.prev":"Zurück","tools.page.prev.tooltip":"Zur vorherigen Seite der Tool-Verlaufsergebnisse.","tools.page.next":"Weiter","tools.page.next.tooltip":"Zur nächsten Seite der Tool-Verlaufsergebnisse.","tools.empty.history":"Keine Verlaufseinträge","tools.empty.stats":"Keine Tool-Statistik","tools.empty.failures":"Keine Fehler","tools.summary.total":"Gesamt","tools.summary.calls":"Aufrufe","tools.summary.sessions":"Sessions","settings.license.title":"Lizenz","settings.license.title.tooltip":"Aktueller Lizenzstatus und Abonnement-Tier.","settings.license.status":"Status","settings.license.status.tooltip":"Aktueller Lizenz-Aktivierungsstatus.","settings.license.tier":"Tier","settings.license.tier.tooltip":"Aktueller Abonnement-Tier für verfügbare WEPPY Dashboard-Funktionen.","settings.license.key":"Schlüssel","settings.license.key.tooltip":"Maskierter Lizenzschlüssel, der derzeit vom Server geladen ist.","settings.license.keyValue.tooltip":"Maskierter Lizenzschlüssel, der derzeit vom Server geladen ist.","settings.license.provider":"Anbieter","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"Lizenzanbieter zur Validierung dieses Schlüssels.","settings.license.providerValue.tooltip":"Lizenzanbieter zur Validierung dieses Schlüssels.","settings.license.active":"Aktiv","settings.license.active.tooltip":"Aktueller Lizenz-Aktivierungsstatus.","settings.license.status.activeCancelPending.tooltip":"Kündigung steht aus, aber Pro-Zugang bleibt bis zum Ende der aktuellen Abrechnungsperiode aktiv.","settings.license.inactive":"Inaktiv","settings.license.inactive.tooltip":"Aktueller Lizenz-Aktivierungsstatus.","settings.license.expired":"Abgelaufen","settings.license.expired.tooltip":"Aktueller Lizenz-Aktivierungsstatus.","settings.license.unavailable":"Lizenzinformationen nicht verfügbar","settings.license.detail.cancelPending":"Kündigung ist geplant. Pro-Zugang bleibt bis zum Ende der aktuellen Abrechnungsperiode aktiv.","settings.license.reset":"Lizenz zurücksetzen","settings.readOnly":"Schreibgeschützt","settings.readOnly.tooltip":"Dieser Abschnitt zeigt Werte, die nicht über das WEPPY Dashboard bearbeitet werden können.","settings.unavailable":"Einstellungen nicht verfügbar","settings.general.title":"Allgemeine Einstellungen","settings.general.title.tooltip":"Hot-Settings, die sofort beim Ändern angewendet werden.","settings.general.liveApply":"Live anwenden","settings.general.liveApply.tooltip":"Änderungen in diesem Abschnitt werden sofort ohne separate Speichern-Schaltfläche angewendet.","settings.general.applied":"Angewendet","settings.general.logLevel":"Log-Level","settings.general.logLevel.tooltip":"Legt fest, wie detailliert das WEPPY Dashboard in seine Logs schreibt.","settings.general.localHistory":"Tool-Verlaufsaufzeichnung","settings.general.localHistory.tooltip":"Speichert lokalen Tool-Ausführungsverlauf für die WEPPY Dashboard-Verlaufsansichten.","settings.general.localStatistics":"Tool-Statistiksammlung","settings.general.localStatistics.tooltip":"Aggregiert lokale Nutzungsstatistiken für WEPPY Dashboard-Berichte.","settings.general.contextCapture":"Kontext-Erfassung","settings.general.contextCapture.tooltip":"Wenn aktiviert, zeichnet das WEPPY Dashboard strukturierte Ausführungskontexte für Changelog- und Playtest-Ansichten auf.","settings.general.requestTimeout":"Aktions-Timeout","settings.general.requestTimeout.tooltip":"Maximale Wartezeit des WEPPY Dashboards auf eine Aktion, bevor sie fehlschlägt.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"Aktions-Timeout wird in Millisekunden gemessen.","settings.cold.title":"Server-Umgebung","settings.cold.title.tooltip":"Schreibgeschützte Server-Umgebungswerte, die beim Start geladen werden.","settings.cold.httpPort.tooltip":"Portnummer, die vom MCP WEPPY Dashboard HTTP-Server verwendet wird.","settings.cold.httpHost.tooltip":"Host-Schnittstelle, an die sich der MCP WEPPY Dashboard HTTP-Server bindet.","settings.cold.hint":"Über Umgebungsvariablen setzen, um diese Werte zu ändern.","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"Legen Sie fest, wie sich das WEPPY Dashboard beim Start des MCP-Servers verhält.","settings.dashboard.nextStartBadge":"Nächster Start","settings.dashboard.autoOpen.label":"Dashboard beim Start von WEPPY öffnen","settings.dashboard.autoOpen.description":"Öffnet dieses Dashboard nach dem Start des MCP-Servers automatisch.","settings.dashboard.autoOpen.nextStart":"Wird beim nächsten Start des MCP-Servers angewendet.","settings.dashboard.settingsFile.label":"Einstellungsdatei","settings.dashboard.agentExample.label":"Fragen Sie Ihren Agent","settings.dashboard.agentExample.prompt":"„Automatisches Öffnen des Dashboards ausschalten.“","settings.dashboard.autoOpen.saving":"Wird gespeichert…","settings.dashboard.autoOpen.saved":"Für den nächsten Serverstart gespeichert.","settings.dashboard.autoOpen.error":"Speichern fehlgeschlagen. Die vorherige Einstellung wurde wiederhergestellt.","dashboardAutoOpenGuide.eyebrow":"Dashboard-Einstellung","dashboardAutoOpenGuide.title":"Festlegen, wie das WEPPY Dashboard geöffnet wird","dashboardAutoOpenGuide.currentOn":"Das automatische Öffnen ist derzeit aktiviert. Dieses Dashboard wird nach dem Start des MCP-Servers geöffnet.","dashboardAutoOpenGuide.currentOff":"Das automatische Öffnen ist derzeit deaktiviert. WEPPY öffnet beim Start des MCP-Servers keinen neuen Dashboard-Tab.","dashboardAutoOpenGuide.changeAnytime":"Sie können dies jederzeit in den Settings ändern.","dashboardAutoOpenGuide.agentHint":"Sie können Ihren Agent auch bitten: „Automatisches Öffnen des Dashboards ausschalten“.","dashboardAutoOpenGuide.statusOn":"Automatisches Öffnen an","dashboardAutoOpenGuide.statusOff":"Automatisches Öffnen aus","dashboardAutoOpenGuide.keep":"Aktuelle Einstellung beibehalten","dashboardAutoOpenGuide.turnOff":"Automatisches Öffnen ausschalten","dashboardAutoOpenGuide.openSettings":"Settings öffnen","dashboardAutoOpenGuide.close":"Hinweis zum automatischen Öffnen schließen","dashboardAutoOpenGuide.saving":"Wird gespeichert…","dashboardAutoOpenGuide.error":"Ihre Auswahl konnte nicht gespeichert werden. Versuchen Sie es erneut.","settings.language.title":"Sprache","settings.language.title.tooltip":"Wählen Sie, wie der WEPPY Dashboard-Oberflächentext lokalisiert wird.","settings.language.dashboard":"WEPPY Dashboard-Sprache","settings.language.dashboard.tooltip":"Überschreibt die WEPPY Dashboard-Sprache oder folgt der Systemsprache, wenn auf Auto eingestellt.","settings.language.auto":"Auto","overview.l0.title":"MCP-Server getrennt","overview.l0.message":"Der MCP-Server antwortet nicht. Das WEPPY Dashboard versucht automatisch, die Verbindung wiederherzustellen.","overview.l0.step1":"Prüfen Sie, ob der MCP-Server-Prozess läuft","overview.l0.step2":"Starten Sie den MCP-Server-Befehl bei Bedarf neu","overview.l0.reconnecting":"Automatische Wiederverbindung alle 3s...","overview.l0.reconnectBtn":"Erneut verbinden","overview.l0.settingsBtn":"Einstellungen prüfen","overview.l1.pluginGuide":"Roblox Studio Plugin ist nicht verbunden","overview.l1.check1":"Läuft Roblox Studio?","overview.l1.check2":"Ist das WEPPY Plugin installiert?","overview.l1.feedHint":"Änderungen erscheinen hier, sobald das Plugin verbunden ist","overview.metric.server":"Server","overview.metric.server.tooltip":"MCP-Server-Laufzeit und Prozessstatus","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Roblox Studio Plugin-Verbindungs- und Versionsstatus","overview.metric.agent":"Agent","overview.metric.agent.tooltip":"Verbundene KI-Coding-Agenten und ihr Laufzeitstatus","overview.metric.agent.instancesUnit":"Instanzen","overview.metric.sync":"Sync","overview.metric.sync.tooltip":"Aktuelle Studio-zu-Lokal-Sync-Aktivität","overview.metric.noAgent":"Kein Agent","overview.meta.version":"Version","overview.meta.version.tooltip":"Installierte MCP-Server-Version","overview.meta.session":"Session","overview.meta.session.tooltip":"Aktuelle MCP-Session-Kennung","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Betriebssystem-Prozesskennung","overview.meta.uptime":"Uptime","overview.meta.uptime.tooltip":"Verstrichene Zeit seit dem Start des MCP-Servers","overview.feed.title":"Letzte Spieländerungen","overview.feed.empty":"Keine kürzlichen Änderungen","overview.changelog.title":"Session-Änderungszusammenfassung","overview.changelog.entries":"Gesamt","overview.changelog.scripts":"Skripte","overview.changelog.instances":"Instanzen","overview.changelog.properties":"Eigenschaften","overview.changelog.assets":"Assets","overview.tier.title":"Tier-Nutzung","changelog.subtitle":"Spieländerungsverlauf","changelog.filter.all":"Alle","changelog.filter.active":"Aktiv","changelog.filter.completed":"Abgeschlossen","changelog.empty":"Noch keine Changelog-Einträge","changelog.basic.limit.title":"Basic-Vorschau zeigt die letzten 3 Sessions","changelog.basic.limit.body":"Upgraden Sie auf Pro, um die vollständige Changelog-Timeline für diesen Place zu durchsuchen.","changelog.basic.metricLabel":"Sichtbares Changelog / Gesamt","changelog.basic.visible":"sichtbar","changelog.basic.total":"gesamt","changelog.card.active":"Aktiv","changelog.card.active.tooltip":"Diese Session empfängt noch neue Spieländerungen.","changelog.card.completed":"Abgeschlossen","changelog.card.completed.tooltip":"Diese Session ist beendet und es werden keine weiteren Änderungen erwartet.","changelog.card.bootstrapStatus":"Bootstrap","changelog.card.bootstrapStatus.tooltip":"Diese Session enthält nur den anfänglichen Sync-Bootstrap-Snapshot.","changelog.card.inProgress":"in Bearbeitung","changelog.card.noChanges":"Noch keine Änderungen","changelog.card.noChanges.tooltip":"Für diese Session wurden noch keine Spieländerungen extrahiert.","changelog.card.bootstrapSummary":"Anfänglicher Sync-Snapshot","changelog.card.bootstrapSummary.tooltip":"Anfängliche Datei-Sync-Schreibvorgänge werden zu einer einzigen Bootstrap-Snapshot-Zeile zusammengefasst.","changelog.card.sessionIntent":"Session-Absicht","changelog.card.scripts":"Skripte","changelog.card.scripts.tooltip":"In dieser Session vorgenommene Skript-Änderungen.","changelog.card.instances":"Instanzen","changelog.card.instances.tooltip":"Instanz-Erstellungs-, Lösch-, Verschiebe- oder Klonänderungen in dieser Session.","changelog.card.modified":"geändert","changelog.card.created":"erstellt","changelog.card.deleted":"gelöscht","changelog.card.moved":"verschoben","changelog.card.propertiesChanged":"Eigenschaften geändert","changelog.card.propertiesChanged.tooltip":"Für diese Session aufgezeichnete Eigenschaftswertänderungen.","changelog.card.lightingConfigured":"Beleuchtung konfiguriert","changelog.card.lightingConfigured.tooltip":"Beleuchtungs- oder Atmosphäreneinstellungen wurden in dieser Session geändert.","changelog.card.terrainConfigured":"Terrain konfiguriert","changelog.card.terrainConfigured.tooltip":"Terrain-Daten oder Terrain-Einstellungen wurden in dieser Session geändert.","changelog.card.assetsInserted":"Assets eingefügt","changelog.card.assetsInserted.tooltip":"In dieser Session in den Place eingefügte Assets.","changelog.category.script":"Skripte","changelog.category.instance":"Instanzen","changelog.category.property":"Eigenschaften","changelog.category.lighting":"Beleuchtung","changelog.category.terrain":"Terrain","changelog.category.asset":"Assets","changelog.detail.dialogLabel":"Changelog-Details","changelog.detail.changeSummary":"Änderungszusammenfassung","changelog.detail.changeSummary.tooltip":"Anzahl der extrahierten Spieländerungen, gruppiert nach Kategorie für diese Session.","changelog.detail.changeTimeline":"Änderungs-Timeline","changelog.detail.changeTimeline.tooltip":"Chronologische Liste der extrahierten Spieländerungen für diese Session.","changelog.detail.context.title":"Kontextzusammenfassung","changelog.detail.context.tooltip":"Strukturierter Ausführungskontext, der für diese Changelog-Session erfasst wurde.","changelog.detail.verification.title":"Verifikation","changelog.detail.verification.tooltip":"Mit dieser Changelog-Session verknüpfte Verifikationssignale.","changelog.detail.verification.label":"Ergebnis","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Aufgezeichnet am","changelog.detail.beforeAfter":"Vorher & Nachher","changelog.detail.filterCategory":"Kategorie","changelog.detail.filterCategory.tooltip":"Filtert die Timeline nach einer einzigen Änderungskategorie.","changelog.detail.confidence.exact":"Exakt","changelog.detail.confidence.exact.tooltip":"Sowohl der Vorher- als auch der Nachher-Zustand wurden für diese Änderung bestätigt.","changelog.detail.confidence.partial":"Teilweise","changelog.detail.confidence.partial.tooltip":"Nur ein Teil des Vorher- und Nachher-Zustands konnte für diese Änderung bestätigt werden.","changelog.detail.confidence.afterOnly":"Nur nachher","changelog.detail.confidence.afterOnly.tooltip":"Nur der resultierende Zustand nach der Änderung konnte bestätigt werden.","changelog.detail.confidence.intentOnly":"Nur Absicht","changelog.detail.confidence.intentOnly.tooltip":"Nur die angeforderte Aktion wurde aufgezeichnet, nicht der resultierende Zustand.","changelog.detail.confidence.unknown":"Unbekannt","changelog.detail.confidence.unknown.tooltip":"Diese Änderung konnte aus den verfügbaren Daten nicht zuverlässig klassifiziert werden.","changelog.detail.noChanges":"Keine Änderungen in dieser Kategorie","changelog.detail.backToList":"Zurück zur Liste","changelog.diff.empty":"Kein Diff verfügbar","changelog.diff.unified":"Vereinheitlicht","changelog.diff.sideBySide":"Nebeneinander","changelog.diff.before":"Vorher","changelog.diff.after":"Nachher","sync.targets.title":"Verbundene Studios","sync.targets.refresh":"Aktualisieren","sync.targets.loading":"Studio-Sync-Status wird geladen…","sync.targets.unavailable":"Studio-Sync-Status nicht verfügbar. Bitte erneut versuchen.","sync.targets.empty":"Keine Studios verbunden. Verbinde das WEPPY Plugin für den Live-Sync-Status.","sync.targets.unknownPlace":"Unbekannter Place","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"Verbunden","sync.targets.notReported":"Noch nicht gemeldet","sync.targets.state.unknown":"Unbekannt","sync.targets.state.off":"Sync AUS","sync.targets.state.idle":"Sync AN · wartet","sync.targets.state.initializing":"Initialisierung","sync.targets.state.syncing":"Synchronisierung","sync.targets.state.paused":"Pausiert","sync.targets.state.error":"Fehler","sync.forwardStatus.label":"Änderungsübertragung","sync.forwardStatus.tooltip":"Zeigt, ob Edit-Änderungen gesendet werden können. Aktiv bedeutet nicht, dass alle lokalen Dateien aktuell sind.","sync.forwardStatus.inactive":"Aus","sync.forwardStatus.active":"Aktiv","sync.forwardStatus.paused_play":"Während Play pausiert","sync.forwardStatus.reconciling":"Prüft Edit-Änderungen","sync.forwardStatus.blocked":"Prüfung nötig","sync.forwardStatus.unknown":"Unbekannt","sync.forwardStatus.observedAt":"Beobachtet","sync.forwardStatus.reason.review":"Prüfe die Änderungen im Studio Plugin.","sync.forwardStatus.reason.editChanged":"Edit wurde während der Prüfung geändert. Prüfe Sync im Studio Plugin.","sync.forwardStatus.reason.failed":"Änderungen konnten nicht bestätigt werden. Prüfe Sync im Studio Plugin.","sync.forwardStatus.reason.fallback":"Weitere Details stehen im Studio Plugin.","sync.stored.title":"Gespeicherte Places","sync.stored.data":"Gespeicherte Daten","sync.stored.ambiguous":"Speicherort nicht bestätigt","sync.detail.scope":"Sync-Details für","sync.detail.readOnly":"Die Detailansicht ändert das Studio-Routing nicht.","sync.detail.empty":"Wähle ein verbundenes Studio oder einen gespeicherten Place.","sync.detail.unknown":"Dieses Studio hat seinen Sync-Status noch nicht gemeldet.","sync.detail.error":"Sync hat einen Fehler gemeldet. Details im Studio Plugin prüfen.","sync.detail.placeFolder":"Place-Ordner","sync.detail.placeFolder.tooltip":"Gespeicherter Ordner, den Studios mit diesem Place gemeinsam nutzen.","sync.detail.sharedData":"Pfad, Anzahl und Protokoll gehören zum Place und werden von seinen Studios geteilt.","sync.log.shared":"Geteiltes Place-Protokoll","sync.log.unsafe":"Der Speicherort ist für den Protokollzugriff nicht bestätigt.","sync.log.unavailable":"Place-Protokoll konnte nicht geladen werden. Bitte erneut versuchen.","sync.log.loading":"Place-Protokoll wird geladen…","sync.clear.selectedMessage":"Das geteilte Sync-Protokoll für {place} wird dauerhaft gelöscht.","sync.overlay.title":"Roblox Studio Plugin erforderlich","sync.overlay.message":"Sync-Status ist verfügbar, sobald das Roblox Studio Plugin verbunden ist.","sync.overlay.check1":"Läuft Roblox Studio?","sync.overlay.check2":"Ist das WEPPY Plugin installiert?","sync.status.title":"Sync-Status","sync.status.title.tooltip":"Aktueller Studio- und lokaler Datei-Sync-Status für diesen Place.","sync.status.forwardOnly":"Nur vorwärts","sync.status.forwardOnly.tooltip":"Basic-Tier erlaubt nur Studio-zu-Lokal-Vorwärts-Sync.","sync.status.place":"Place","sync.status.place.tooltip":"Verbundener Roblox Place-Name und Place-ID.","sync.status.path":"Pfad","sync.status.path.tooltip":"Lokaler Dateisystem-Stamm, der derzeit für die Sync-Ausgabe verwendet wird.","sync.status.instances":"Instanzen","sync.status.instances.tooltip":"Gesamtzahl synchronisierter Roblox-Instanzen, die im lokalen Spiegel verfolgt werden.","sync.status.scripts":"Skripte","sync.status.scripts.tooltip":"Gesamtzahl synchronisierter Skript-Dateien, die derzeit für diesen Place indiziert sind.","sync.status.state":"Status","sync.status.state.tooltip":"Aktueller Laufzeit-Sync-Status, der vom Server gemeldet wird.","sync.policy.title":"Sync-Richtlinie","sync.policy.title.tooltip":"Effektive Sync-Richtlinie, die vom verbundenen Studio-Plugin gemeldet wurde.","sync.policy.activation":"Aktivierung","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"Arbeitsablauf","sync.policy.preset.studio_first":"Studio zuerst","sync.policy.preset.bidirectional_review":"Bidirektional","sync.policy.preset.local_code_studio_world":"Lokaler Code, Studio-Welt","sync.policy.preset.custom":"Benutzerdefiniert","sync.policy.apply.title":"Wie lokale Änderungen auf Studio angewendet werden","sync.policy.apply.description":"Zeigt, ob lokale Änderungen zuerst geprüft oder automatisch auf Studio angewendet werden.","sync.policy.apply.content":"Inhaltsänderungen","sync.policy.apply.content.tooltip":"Lokale Änderungen an Script-Quelltext, Eigenschaften und Service-Eigenschaften. Das Erstellen, Löschen, Umbenennen und Verschieben sind Strukturänderungen.","sync.policy.apply.structure":"Strukturänderungen","sync.policy.apply.structure.tooltip":"Lokales Erstellen, Löschen, Umbenennen und Verschieben von Instanzen. Automatisches lokales Löschen benötigt zusätzlich die separate Löschoption unten.","sync.policy.apply.manual":"Zuerst prüfen","sync.policy.apply.auto":"Automatisch anwenden","sync.policy.scope.disclosure":"Richtungen nach Bereich","sync.policy.scope.scriptSource":"Script-Quelltext","sync.policy.scope.properties":"Eigenschaften","sync.policy.scope.structure":"Struktur","sync.policy.scope.serviceProperties":"Service-Eigenschaften","sync.policy.endpoint.local":"Lokal","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → Lokal","sync.policy.direction.forward.tooltip":"Änderungen aus Studio werden in lokale Dateien geschrieben.","sync.policy.direction.reverse":"Lokal → Studio","sync.policy.direction.reverse.tooltip":"Änderungen lokaler Dateien werden in Studio angewendet.","sync.policy.direction.bidirectional":"Beide Richtungen","sync.policy.direction.bidirectional.tooltip":"Änderungen können von Studio zu lokalen Dateien und von lokalen Dateien zu Studio übertragen werden.","sync.policy.safety.localDeletes":"Lokal löschen → Studio-Instanz löschen","sync.policy.safety.review":"Vor dem Löschen prüfen","sync.policy.safety.review.tooltip":"Lokale Dateilöschungen warten auf eine Prüfung, bevor passende Studio-Instanzen entfernt werden. Dies ist von der automatischen UI-Studio-Bereinigung getrennt.","sync.policy.safety.auto":"Automatisch in Studio löschen","sync.policy.safety.auto.tooltip":"Das Löschen lokaler Dateien kann passende Studio-Instanzen automatisch entfernen. Dies ist von der automatischen UI-Studio-Bereinigung getrennt.","sync.policy.reviewRequired":"Prüfen Sie diese Richtlinie im Studio-Plugin, bevor Sie Sync starten.","sync.log.title":"Sync-Protokoll","sync.log.empty":"Noch keine Sync-Ereignisse","sync.log.type.fullSyncStart":"START","sync.log.type.fullSyncStart.tooltip":"Die vollständige Synchronisierung wurde gestartet.","sync.log.type.fullSyncProgress":"FORTSCHRITT","sync.log.type.fullSyncProgress.tooltip":"Die vollständige Synchronisierung speichert die Daten.","sync.log.type.fullSyncComplete":"ABGESCHLOSSEN","sync.log.type.fullSyncComplete.tooltip":"Die vollständige Synchronisierung wurde erfolgreich abgeschlossen.","sync.log.type.fullSyncFailed":"FEHLER","sync.log.type.fullSyncFailed.tooltip":"Die vollständige Synchronisierung wurde vor dem Abschluss beendet.","sync.log.type.write":"WRITE","sync.log.type.write.tooltip":"Eine neue Sync-Ausgabe wurde auf die Festplatte geschrieben.","sync.log.type.update":"UPDATE","sync.log.type.update.tooltip":"Eine bestehende synchronisierte Datei oder Instanz wurde aktualisiert.","sync.log.type.delete":"DELETE","sync.log.type.delete.tooltip":"Eine synchronisierte Datei oder Instanz wurde entfernt.","sync.log.type.idle":"IDLE","sync.log.type.idle.tooltip":"Ein Sync-Ereignis wurde ohne Dateimutation aufgezeichnet.","sync.upgrade.title":"Vollständigen Sync mit Pro ansehen","sync.upgrade.benefit1":"Bidirektionaler Sync — Dateien bearbeiten, automatisch auf Studio anwenden","sync.upgrade.benefit2":"Reverse-Sync — Dateiänderungen zurück zu Studio pushen","sync.upgrade.benefit3":"Vollständiger Sync-Verlauf und detailliertes Änderungsprotokoll","sync.upgrade.buy":"Pro ansehen","playtest.status.title":"Playtest-Status","playtest.status.title.tooltip":"Aktueller Roblox Playtest-Sessionstatus, der von Studio gemeldet wird.","playtest.status.mode":"Modus","playtest.status.mode.tooltip":"Studio-Playtest-Startmodus für die aktuelle Session.","playtest.status.mode.value.tooltip":"Spezifischer Roblox Studio Playtest-Modus, der derzeit verwendet wird.","playtest.status.mode.play":"Play","playtest.status.mode.run":"Run","playtest.status.mode.server":"Server","playtest.status.mode.edit":"Edit","playtest.status.place.tooltip":"Roblox Place, der derzeit mit dieser Playtest-Session verknüpft ist.","playtest.status.state.running":"Läuft","playtest.status.state.running.tooltip":"Eine Roblox Playtest-Session läuft derzeit.","playtest.status.state.paused":"Pausiert","playtest.status.state.paused.tooltip":"Die aktuelle Roblox Playtest-Session ist pausiert.","playtest.status.state.notRunning":"Läuft nicht","playtest.status.state.notRunning.tooltip":"Es läuft derzeit keine Roblox Playtest-Session.","playtest.control.play":"Play","playtest.control.pause":"Pause","playtest.control.resume":"Resume","playtest.control.stop":"Stop","playtest.history.title":"Testverlauf","playtest.history.search":"Testergebnisse suchen","playtest.history.filter":"Ergebnis","playtest.history.filterAll":"Alle Ergebnisse","playtest.history.filteredCount":"{{visible}} von {{total}} Ergebnissen","playtest.history.title.tooltip":"Aufgezeichnete automatisierte Playtest-Läufe für dieses Projekt.","playtest.history.empty":"Noch keine Testergebnisse","playtest.history.mode":"Modus","playtest.history.mode.tooltip":"Playtest-Modus, der für diesen aufgezeichneten Testlauf verwendet wurde.","playtest.history.status.passed":"Bestanden","playtest.history.status.failed":"Fehlgeschlagen","playtest.history.status.running":"Läuft","playtest.history.status.unknown":"Unbekannt","playtest.history.status.tooltip":"Aufgezeichneter Ergebnisstatus für diesen automatisierten Playtest-Lauf.","playtest.empty.title":"Noch keine Playtest-Ergebnisse","playtest.empty.message":"Testergebnisse erscheinen hier, nachdem der KI-Agent einen Playtest ausgeführt hat.","playtest.empty.message.before":"Testergebnisse erscheinen hier, nachdem der KI-Agent einen Playtest ausgeführt hat.","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"Ask the AI Agent to run a Playtest when you need a fresh report.","playtest.report.title":"Ausgewählter Bericht","playtest.report.title.tooltip":"Detaillierte Ausgabe für den derzeit ausgewählten automatisierten Playtest-Lauf.","playtest.detail.dialogLabel":"Details zum Playtest-Bericht","playtest.detail.loading":"Bericht wird geladen...","playtest.detail.errorTitle":"Bericht nicht verfügbar","playtest.report.content":"Bericht","playtest.report.content.tooltip":"Markdown-Zusammenfassung für den ausgewählten automatisierten Playtest-Lauf.","playtest.report.logs":"Logs","playtest.report.logs.tooltip":"Ausführungs-Logs, die für den ausgewählten automatisierten Playtest-Lauf erfasst wurden.","playtest.context.contextId":"Kontext-ID","playtest.context.why":"Warum dieser Test ausgeführt wurde","playtest.context.expected":"Erwartet","playtest.context.observed":"Beobachtet","playtest.report.empty":"Kein Berichtsinhalt verfügbar","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest ist eine Pro-exklusive Funktion","playtest.basic.desc":"Steuern Sie Playtesting vom WEPPY Dashboard aus, führen Sie automatisierte Tests aus und sehen Sie detaillierte Testberichte.","playtest.basic.benefit1":"Ein-Klick-Play/Pause/Stop-Steuerung","playtest.basic.benefit2":"Automatisierte Testausführung über KI-Agent","playtest.basic.benefit3":"Testverlauf mit Bestanden/Fehlgeschlagen-Verfolgung","playtest.basic.benefit4":"Detaillierte Markdown-Testberichte","playtest.sample.badge":"Vorschau der Pro-Playtest-Ansicht","playtest.sample.title":"Sie sehen eine Vorschau des Playtest-Bildschirms, der nach dem Upgrade auf Pro verfügbar wird.","playtest.sample.message":"Diese Vorschau verwendet Beispieldaten. Live-Playtest-Steuerung, Verlaufsverwaltung und echte Berichte werden mit Pro freigeschaltet.","playtest.sample.clearDisabled":"Upgraden Sie auf Pro, um den Live-Playtest-Verlauf zu löschen.","playtest.sample.place":"Arena-Vorschau","playtest.sample.history.name":"Beispiel-Arena-Smoke-Test","playtest.sample.context.why":"In die Arena spawnen, den Eröffnungsangriff überleben und prüfen, ob das HUD sofort reagiert.","playtest.sample.context.expected":"Der Spieler spawnt sicher, die Countdown-UI erscheint innerhalb einer Sekunde und die erste Welle startet ohne Fehler.","playtest.sample.context.observed":"Spawn-Schutz hielt, das HUD wurde rechtzeitig aktualisiert und Welle eins wurde ohne Gameplay-Regressionen abgeschlossen.","playtest.sample.report.markdown":`# Beispiel-Arena-Smoke-Test
186
186
 
187
187
  - Spawn-Ablauf: BESTANDEN
188
188
  - HUD-Countdown: BESTANDEN
@@ -200,7 +200,7 @@ Dies ist eine Beispielvorschau. Upgraden Sie auf Pro, um Live-Playtests auszufü
200
200
  - Conserve adapterStudioOnly=true afin que le source vérifie RunService:IsStudio() avant d’accéder au code du jeu. Utilise false uniquement si je demande explicitement d’omettre cette vérification et affiche l’avertissement production dans le plan.
201
201
  - Conserve le source de développement. Les Adapter WEPPY avec guard peuvent rester lors d’une publication Studio directe ; vérifie le code personnalisé ou sans guard et les objets de test.
202
202
  - Examine les modifications du code avec manage_studio.playtest_adapter_plan, puis exécute manage_studio.playtest_adapter_apply avec le jeton renvoyé uniquement après avoir vérifié le diff et les utilisations.
203
- - Indique l’emplacement du code, les fichiers modifiés, les profils qui l’utilisent, le comportement de cleanup et ce que je dois vérifier manuellement avant de publier.`,"sidebar.overview":"Aperçu","sidebar.changelog":"Journal des modifications","sidebar.connection":"Connexion","sidebar.sync":"Synchroniser","sidebar.playtest":"Test de jeu","sidebar.tools":"Outils","sidebar.settings":"Paramètres","sidebar.ui_studio":"UI Studio","sidebar.gate.l1":"Connexion au serveur MCP requise","sidebar.gate.l2":"Connexion au plugin Roblox Studio requise","header.currentProject":"Projet actuel","header.unknownProject":"Projet inconnu","header.projectRoot.label":"Racine du projet","header.currentProject.loading":"Chargement de la racine du projet...","header.currentProject.unavailable":"Racine Project indisponible","header.placeNotConnected":"Lieu non connecté","header.currentProject.tooltip":"Dossier de projet actuellement sélectionné","header.currentProject.loading.tooltip":"Les informations racine de Project sont toujours en cours de chargement","header.currentProject.unavailable.tooltip":"Les informations sur la racine du projet actuel ne sont pas disponibles","header.currentProjectSyncRoot.label":"Synchroniser la racine","header.currentProjectSyncRoot.loading":"Chargement de la racine de synchronisation...","header.currentProjectSyncRoot.unavailable":"Racine de synchronisation indisponible","header.currentProjectSyncRoot.tooltip":"Dossier racine de synchronisation actuel pour le projet sélectionné","header.currentProjectSyncRoot.loading.tooltip":"Les informations sur la racine de synchronisation sont toujours en cours de chargement","header.currentProjectSyncRoot.unavailable.tooltip":"Les informations actuelles sur la racine de synchronisation ne sont pas disponibles","header.testFiles.label":"Fichiers de test","header.testFiles.unavailable":"Fichiers de test indisponibles","header.testFiles.tooltip":"Répertoire actuel des fichiers de test de lecture pour l'endroit sélectionné","header.places.title":"Lieux","header.places.active":"Actif","header.places.inactive":"Inactif","header.places.pluginRequired":"Connexion plug-in requise","header.places.liveRequired":"Connexion plug-in requise pour le lieu actif en direct","header.place.tooltip":"Lieu Roblox connecté","header.placeNotConnected.tooltip":"Lieu non connecté","placeScope.current.label":"Place actuel","placeScope.lastActive.label":"Dernier place actif","placeScope.selected.label":"Place sélectionné","placeScope.unknownPlace":"Place inconnu","placeScope.live":"En direct","placeScope.connected":"Studio connecté","placeScope.stored":"Données enregistrées","placeScope.connectedGroup":"Studios connectés","placeScope.storedGroup":"Données enregistrées","placeScope.stored.note":"Ce place n’est actuellement ouvert dans aucun Studio connecté.","placeScope.pluginRequired":"Plugin requis","placeScope.pluginRequired.note":"Connectez le WEPPY Plugin pour confirmer le place actif en direct.","placeScope.noPlace.label":"Portée du place","placeScope.noPlace.value":"Aucune donnée de place disponible pour le moment","placeScope.noPlace.badge":"Aucun place","placeScope.noPlace.note":"Connectez le WEPPY Plugin et synchronisez un place pour créer des données par place.","placeScope.selected.note":"Seules les données enregistrées sont affichées. Le routage Studio reste inchangé.","placeScope.surface.sync":"L'état de synchronisation et les journaux utilisent ce place.","placeScope.surface.changelog":"Les sessions du journal des changements utilisent ce place.","placeScope.surface.playtest":"Les rapports de playtest utilisent ce place.","placeScope.surface.uiStudio":"Les captures UI et l'historique des changements utilisent ce place.","placeScope.surface.tools":"L'historique et les statistiques des outils utilisent ce place.","placeScope.loading":"Chargement de la portée du place...","placeScope.unavailable":"Portée du place indisponible","placeScope.selector.label":"Données du place","placeScope.shortcuts.trigger":"Raccourcis","placeScope.shortcuts.label":"Raccourcis du place","placeScope.shortcuts.settings":"Paramètres du place","placeScope.shortcuts.experience":"Gérer l’expérience","placeScope.shortcuts.roblox":"Voir sur Roblox","placeScope.folder.duplicate":"Dossier en double","placeScope.folder.unresolved":"Dossier représentatif non confirmé","placeScope.folder.noSyncHistory":"Aucun historique de synchronisation","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Détails des dossiers du Place","placeScope.folder.duplicateReason":"L’emplacement de stockage actuel est {canonicalFolder}. Ce dossier est sauvegardé après une synchronisation complète réussie.","placeScope.folder.unresolvedReason":"Ce Place reste sélectionnable par son ID, mais aucun dossier n’est encore confirmé comme représentatif.","placeScope.folder.unknown":"inconnu","placeScope.selector.noneSelectable":"Aucun dossier de Place sélectionnable","header.changeProjectRoot":"Changer la racine du projet Project","header.changeProjectRoot.ariaLabel":"Changer la racine du projet","header.changeProjectRoot.tooltip":"Changer la racine actuelle du projet","header.changeProjectRoot.disabledTooltip.l0":"Connexion au serveur MCP requise avant que la racine du projet puisse être modifiée","header.changeProjectRoot.disabledTooltip.loading":"Les informations racine de Project sont toujours en cours de chargement","header.changeProjectRoot.disabledTooltip.unavailable":"Les informations sur la racine du projet actuel ne sont pas disponibles","header.projectRootModal.initial.title":"Changer la racine du projet","header.projectRootModal.initial.body.connected":"Après avoir choisi un dossier de projet, MCP basculera vers la nouvelle racine du projet et le contenu actuel du Studio sera entièrement resynchronisé dans la nouvelle cible <dossier de projet sélectionné>/weppy-project-sync.","header.projectRootModal.initial.body.disconnected":"Après avoir choisi un dossier de projet, MCP basculera vers la nouvelle racine du projet et utilisera <dossier de projet sélectionné>/weppy-project-sync comme prochaine cible de synchronisation.","header.projectRootModal.initial.nextSyncRoot":"Nouvelle cible de synchronisation après sélection","header.projectRootModal.initial.nextSyncRoot.placeholder":"<dossier de projet sélectionné>/weppy-project-sync","header.projectRootModal.initial.warningStop":"La synchronisation actuelle s'arrête immédiatement.","header.projectRootModal.initial.warningFreshSync":"Le contenu actuel du Studio sera utilisé pour créer une nouvelle synchronisation complète dans la nouvelle cible.","header.projectRootModal.initial.warningNoMove":"Les anciens dossiers de synchronisation ne sont pas déplacés automatiquement.","header.projectRootModal.initial.warningDeferredSync":"Si Studio n'est pas connecté, la resynchronisation complète démarre à la prochaine connexion du plugin.","header.projectRootModal.confirm.title":"Confirmer la nouvelle racine du projet","header.projectRootModal.confirm.body":"Examinez le dossier de projet sélectionné avant de postuler.","header.projectRootModal.confirm.projectRoot":"Dossier de projet sélectionné","header.projectRootModal.confirm.syncRoot":"Nouvelle cible de synchronisation","header.projectRootModal.confirm.warningNoMove":"Les dossiers de synchronisation existants ne sont pas déplacés automatiquement.","header.projectRootModal.pick":"Choisir un dossier","header.projectRootModal.apply":"Appliquer le changement","header.projectRootModal.cancel":"Annuler","header.projectRootModal.error":"Échec de la modification de la racine du projet","status.online":"En ligne","status.offline":"Hors ligne","status.idle":"Inactif","status.syncing":"Synchronisation","status.error":"Erreur","status.initializing":"Initialisation","level.l0.title":"Serveur déconnecté","level.l0.message":"WEPPY Dashboard ouvert mais le serveur MCP s'est arrêté ou ne répond pas.","level.l1.title":"Serveur connecté","level.l1.hint":"Vérifiez : Roblox Studio est-il en cours d'exécution ? Le plugin est-il installé ?","level.l2.ok":"Studio connecté","tier.basic":"Basic","tier.basic.tooltip":"Niveau Basic avec l'ensemble de fonctionnalités standard WEPPY Dashboard.","tier.pro":"Pro","tier.pro.tooltip":"Niveau Pro avec l'ensemble complet de fonctionnalités WEPPY Dashboard.","tier.mixed":"Mixte","tier.upgrade":"Voir Pro","tier.banner.save":"Enregistrez les jetons IA avec Pro !","tier.tool.query_instances.desc":"Inspectez les instances, recherchez les enfants et les descendants et inspectez les données de classe. Pro ajoute une arborescence de fichiers, une structure de projet et une recherche de propriétés ou de balises.","tier.tool.mutate_instances.desc":"Créez, supprimez, clonez et déplacez des instances. Pro ajoute la création d'arborescence et les opérations de création, de suppression ou de clonage en masse.","tier.tool.manage_properties.desc":"Lisez et définissez les propriétés, les attributs et les balises. Pro ajoute des mises à jour calculées, des modifications relatives et des opérations de propriété en masse.","tier.tool.manage_scripts.desc":"Lisez, écrivez, créez, supprimez, modifiez et recherchez la source du script. Pro ajoute un remplacement groupé entre les scripts.","tier.tool.manage_ui.desc":"Pro uniquement. Créez ou affinez des menus de style jeu, des HUD, des boutons, des étiquettes et des panneaux d'images, puis capturez des écrans et examinez les suggestions d'amélioration.","tier.tool.manage_ui.action.design_brief":"Planifier l'orientation de l'interface utilisateur","tier.tool.manage_ui.action.create_tree":"Créer une nouvelle interface utilisateur","tier.tool.manage_ui.action.update":"Mettre à jour l'interface utilisateur existante","tier.tool.manage_ui.action.delete":"Supprimer l'interface utilisateur","tier.tool.manage_ui.action.preview":"Capturer l'écran de l'interface utilisateur","tier.tool.manage_ui.action.check":"Examiner les suggestions d'amélioration","tier.tool.manage_lighting.desc":"Pro uniquement. Configurez l'éclairage, l'atmosphère, le ciel, les propriétés du terrain et les paramètres d'heure.","tier.tool.manage_selection.desc":"Lisez, définissez et effacez la sélection actuelle de Studio. Pro ajoute le contexte, les détails, l'ajout ou la suppression et la prise en charge de la surveillance de la sélection.","tier.tool.manage_camera.desc":"Inspectez l’état de la caméra, faites la mise au point par chemin ou position et demandez des suggestions de vues.","tier.tool.manage_tween.desc":"Pro uniquement. Créez, lisez, mettez en pause et annulez des interpolations pour une animation fluide.","tier.tool.manage_audio.desc":"Pro uniquement. Jouez, arrêtez, mettez en pause et reprenez les sons, et configurez l'écouteur audio.","tier.tool.manage_animation.desc":"Pro uniquement. Chargez, lisez et arrêtez des animations, et inspectez les pistes d'animation actives.","tier.tool.manage_physics.desc":"Pro uniquement. Enregistrez les groupes de collision, configurez les collisions de groupe et inspectez les groupes disponibles.","tier.tool.manage_effects.desc":"Pro uniquement. Émettez des particules, supprimez les effets et basculez l'état de l'effet.","tier.tool.manage_terrain.desc":"Pro uniquement. Remplissez les formes du terrain, effacez les régions, remplacez les matériaux, gérez les couleurs du terrain, lisez ou écrivez des voxels, générez du terrain et lissez le terrain.","tier.tool.spatial_query.desc":"Pro uniquement. Exécutez des raycasts, trouvez le terrain, validez le placement, scannez des zones, recherchez des positions plates ou d'apparition, analysez la possibilité de marcher, cartographiez l'espace et inspectez les collisions.","tier.tool.manage_assets.desc":"Pro uniquement. Insérez des modèles, inspectez les informations sur les actifs, recherchez dans la boutique du créateur, insérez des actifs ou des packages gratuits et exportez des actifs.","tier.tool.manage_sync.desc":"Pro uniquement. Inspectez l’état de synchronisation, la configuration, l’historique, les instructions et lisez ou écrivez les fichiers synchronisés.","tier.tool.workspace_state.desc":"Pro uniquement. Exécutez une synchronisation complète, capturez des instantanés, inspectez les modifications récentes et l'état de la fenêtre d'affichage, et gérez les métadonnées associées.","tier.tool.manage_logs.desc":"Inspectez les journaux de sortie avec filtrage, interrogation incrémentielle, effacement de la mémoire tampon et recherche d'erreurs récentes.","tier.tool.system_info.desc":"Inspectez l’état de la connexion et le niveau actuel. Pro ajoute des informations sur le lieu, des services, des paramètres de Studio, un contrôle de test de jeu et des tests automatisés.","tier.tool.manage_studio.desc":"Pro uniquement. Basculez les paramètres d'affichage de l'éditeur Studio tels que l'aperçu de l'interface utilisateur pour les flux de capture d'écran et d'assurance qualité ; il modifie les paramètres de session Studio, pas les objets de l'interface utilisateur du jeu.","tier.tool.batch_execute.desc":"Pro uniquement. Exécutez plusieurs commandes par lots, avec une exécution séquentielle et un comportement facultatif de poursuite en cas d'erreur.","tier.tool.execute_luau.desc":"Pro uniquement. Exécutez du code Luau arbitraire dans le bac à sable Roblox Studio.","connection.server.title":"État du Bridge","connection.server.version":"Version","connection.server.version.tooltip":"Version de l'environnement d'exécution de WEPPY Bridge","connection.server.pid":"PID","connection.server.pid.tooltip":"Identificateur de processus du système d'exploitation","connection.server.uptime":"Temps de disponibilité","connection.server.uptime.tooltip":"Temps écoulé depuis le démarrage de WEPPY Bridge","connection.server.session":"Session","connection.server.session.tooltip":"Identifiant de session actuel de WEPPY Bridge","connection.server.exec":"Exécutif","connection.server.exec.tooltip":"Chemin de l'exécutable utilisé pour lancer WEPPY Bridge","connection.server.restart":"Redémarrer Bridge","connection.server.restarting":"Redémarrage…","connection.server.restartUnavailable":"Connectez au moins un agent IA afin que son MCP Adapter puisse lancer le nouveau Bridge.","connection.server.restartTitle":"Redémarrer WEPPY Bridge ?","connection.server.restartMessage":"Dashboard et les cibles Studio seront brièvement déconnectés. Le résultat des commandes en cours peut devenir indéterminé, et les sessions Playtest actives ou les contrôles en attente seront nettoyés. Un MCP Adapter connecté lancera automatiquement un nouveau Bridge.","connection.server.restartConfirm":"Redémarrer Bridge","connection.server.restartRequesting":"Demande de redémarrage de Bridge…","connection.server.restartReconnecting":"Reconnexion à WEPPY Bridge…","connection.server.restartWaiting":"Dashboard et Studio se reconnecteront automatiquement lorsque le nouveau Bridge sera prêt.","connection.server.restartSucceeded":"WEPPY Bridge a redémarré","connection.server.restartFailed":"Impossible de redémarrer WEPPY Bridge","connection.server.restartTimeout":"Le nouveau Bridge n’a pas été prêt à temps. Vérifiez la connexion MCP dans votre outil IA, puis réessayez.","connection.server.restartStale":"Bridge a changé avant l’acceptation de la demande. Actualisez l’état, puis réessayez.","connection.reconnect":"Reconnecter","connection.checkSettings":"Vérifier les paramètres","connection.agents.title":"Agents IA","connection.agents.name":"Agent","connection.agents.version":"Version","connection.agents.version.tooltip":"Version du package MCP Adapter pour cette session d’agent.","connection.agents.cwd":"Directeur de travail","connection.agents.cwd.tooltip":"Répertoire de travail actuel pour l'agent AI connecté","connection.agents.projectRoot":"Racine du projet","connection.agents.projectRoot.tooltip":"Racine de projet faisant autorité pour la propriété de synchronisation","connection.agents.projectRoot.unresolved":"Non résolu","connection.agents.connected":"Connecté","connection.agents.unknown":"Inconnu","connection.agents.none":"Aucun agent connecté","connection.plugins.title":"Plugins","connection.plugins.place":"Lieu","connection.plugins.clientId":"Connection ID","connection.plugins.clientId.tooltip":"Full connection ID for diagnostics","connection.plugins.lastSeen":"Vu pour la dernière fois","connection.plugins.lastSeen.tooltip":"Battement de cœur le plus récent reçu du plugin","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Version du plugin installé signalée par Studio","connection.plugins.none":"Aucun plugin connecté","connection.targets.title":"Studio Targets","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"Short name for this Roblox Studio window","connection.targets.place":"Place","connection.targets.placeId":"Place ID","connection.targets.placeId.tooltip":"Roblox Place ID for this Studio window","connection.targets.clientId":"Connection ID","connection.targets.clientId.tooltip":"Full connection ID for diagnostics. Usually use Studio ID instead.","connection.targets.session":"Session","connection.targets.session.tooltip":"Command channel state for this Studio target","connection.targets.lastUsed":"Last Used","connection.targets.lastUsed.tooltip":"Most recent plugin-route request routed to this Studio target","connection.targets.lastSeen":"Last Seen","connection.targets.lastSeen.tooltip":"Most recent heartbeat received from this Studio target","connection.targets.version":"Version","connection.targets.version.tooltip":"Installed plugin version reported by Studio","connection.targets.routing":"Routing","connection.targets.routing.tooltip":"Default Studio window when the agent does not name one","connection.targets.inFlight":"In Flight","connection.targets.inFlight.tooltip":"Active command request currently routed to this Studio target","connection.targets.studioState":"Studio State","connection.targets.studioState.tooltip":"Current edit/play runtime state reported by this Studio window","connection.targets.studioState.edit":"Edit","connection.targets.studioState.running":"Running","connection.targets.studioState.paused":"Paused","connection.targets.studioState.unknown":"Unknown","connection.targets.studioState.source.thread":"WEPPY play command","connection.targets.studioState.source.pluginConnection":"Connexion Play/Test de Studio","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"Unknown source","connection.targets.studioState.updatedUnknown":"not reported","connection.targets.copyPlaceId":"Copy Place ID","connection.targets.copyTargetAlias":"Copy Studio ID","connection.targets.copyClientId":"Copy Connection ID","connection.targets.copied":"Copied value","connection.targets.copyFailed":"Failed to copy value","connection.targets.none":"No Studio targets connected. Open Roblox Studio and connect WEPPY Plugin.","connection.targets.help":"When multiple Studio windows are connected, tell the agent to use Studio ID studio-1 to choose one.","connection.topology.ariaLabel":"Connection topology","connection.topology.title":"Connection topology","connection.topology.description":"Chaque agent IA se connecte via son propre MCP Adapter à un WEPPY Bridge partagé, qui maintient la connexion avec Roblox Studio.","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"Active","connection.topology.stale":"Stale","connection.topology.unknown":"Unknown","connection.topology.lastContact":"Dernier contact","connection.topology.noContact":"Aucun contact récent","connection.topology.versionUnknown":"Version unknown","connection.topology.placeUnknown":"Place unknown","connection.topology.moreAgents":"+{count} more agents","connection.topology.moreStudios":"+{count} more studios","connection.topology.allAgentsVisible":"All agents visible","connection.topology.allStudiosVisible":"All studios visible","connection.topology.showAll":"Show all","connection.topology.showLess":"Show less","connection.topology.showAllAgents":"Show all AI agents","connection.topology.showAllStudios":"Show all Studio targets","connection.topology.showLessAgents":"Show less AI agents","connection.topology.showLessStudios":"Show less Studio targets","connection.routing.updateFailed":"Failed to update routing target","connection.log.title":"Journal de connexion","connection.log.empty":"Aucun événement pour l'instant","connection.time.secondsAgo":"il y a","connection.time.minutesAgo":"il y a m","connection.time.hoursAgo":"il y a h","common.loading":"Chargement...","common.retry":"Réessayer","common.reconnecting":"Reconnexion...","common.expand":"Développer","common.collapse":"Effondrement","tools.tab.history":"Histoire","tools.tab.statistics":"Statistiques","tools.tab.failures":"Échecs","tools.col.time":"Temps","tools.col.time.tooltip":"Date à laquelle l'exécution de l'outil a été enregistrée.","tools.col.toolAction":"Outil.Action","tools.col.toolAction.tooltip":"Nom de l’outil et action exécutée.","tools.col.duration":"Durée","tools.col.duration.tooltip":"Combien de temps l'outil a mis pour terminer.","tools.col.status":"Statut","tools.col.status.tooltip":"Résultat de l'exécution de l'outil enregistrée.","tools.col.tier":"Étage","tools.col.tier.tooltip":"Niveau de licence requis pour l’outil ou l’action.","tools.col.tierStats.tooltip":"Basic, Pro ou résumé mixte pour la ligne de statistiques de l'outil.","tools.col.tool":"Outil","tools.col.tool.tooltip":"Nom de l'outil consolidé dans le tableau des statistiques.","tools.col.calls":"Appels","tools.col.calls.tooltip":"Nombre total d'appels enregistrés pour cet outil.","tools.col.ok":"OK","tools.col.ok.tooltip":"Nombre d'exécutions directes réussies.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Nombre d'exécutions réussies grâce à une exécution de secours.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Nombre d'exécutions bloquées sans exécution de secours.","tools.col.warn":"WARN","tools.col.warn.tooltip":"Nombre d'échecs attendus provoqués par l'entrée de l'appelant, l'état du projet, la stratégie Roblox ou le code utilisateur.","tools.col.err":"FAILED","tools.col.err.tooltip":"Nombre d'exécutions ayant échoué.","tools.col.okRate":"D'ACCORD%","tools.col.okRate.tooltip":"Pourcentage d'appels terminés avec succès.","tools.col.avgTime":"Temps moyen","tools.col.avgTime.tooltip":"Temps d'exécution moyen sur les appels enregistrés.","tools.col.error":"Erreur","tools.filter.tool":"Outil","tools.filter.all":"Tous","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Cette entrée utilisait un outil ou une action uniquement Pro.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"L'action Pro demandée a réussi via un repli Basic.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"L'action Pro demandée a été bloquée et aucune solution de secours n'a été exécutée.","tools.badge.warn":"WARN","tools.badge.warn.tooltip":"L’appel de l’outil a échoué en raison d’un problème attendu d’appelant, de projet, de stratégie ou de code utilisateur.","tools.badge.err":"FAILED","tools.badge.err.tooltip":"L’exécution de l’outil a échoué.","tools.status.ok":"OK","tools.status.ok.tooltip":"L’exécution de l’outil s’est terminée avec succès.","tools.tier.mixed.tooltip":"Cet outil comprend à la fois les actions Basic et Pro.","tools.detail.params":"Paramètres","tools.detail.params.tooltip":"Paramètres d’entrée transmis à cette exécution d’outil.","tools.detail.result":"Résultat","tools.detail.result.tooltip":"Charge utile du résultat renvoyé pour cette exécution de cet outil.","tools.detail.requestedCommand":"Commande envoyée","tools.detail.executedCommand":"Commande exécutée","tools.detail.alternatives":"Alternatives","tools.detail.blockedMessage":"Raison du blocage","tools.detail.noFallback":"Pas de solution de repli","tools.detail.noFallback.value":"Aucune solution de secours n'a été exécutée.","tools.detail.warningMessage":"Message d'avertissement","tools.detail.errorMessage":"Message d'erreur","tools.detail.open":"Détails","tools.detail.openLabel":"Voir les détails de {command}","tools.detail.dialogLabel":"Détail de l’exécution de l’outil","tools.detail.title":"Exécution de l’outil","tools.history.routing":"Routing","tools.history.routing.mode":"Mode","tools.history.routing.requested":"Requested","tools.history.routing.actual":"Actual","tools.history.routing.none":"No Studio target named","tools.clear.history.title":"Effacer l'historique ?","tools.clear.history.message":"Cela supprime définitivement l’historique actuel des outils de lieu.","tools.clear.statistics.title":"Des statistiques claires ?","tools.clear.statistics.message":"Cela réinitialise définitivement les statistiques actuelles de l'outil de placement.","tools.detail.error":"Erreur","tools.page.prev":"Précédent","tools.page.prev.tooltip":"Accédez à la page précédente des résultats de l’historique des outils.","tools.page.next":"Suivant","tools.page.next.tooltip":"Accédez à la page suivante des résultats de l’historique des outils.","tools.empty.history":"Aucune entrée dans l'historique","tools.empty.stats":"Aucune statistique sur les outils","tools.empty.failures":"Aucun échec","tools.summary.total":"Total","tools.summary.calls":"appels","tools.summary.sessions":"Séances","settings.license.title":"Licence","settings.license.title.tooltip":"Statut actuel de la licence et niveau d'abonnement.","settings.license.status":"Statut","settings.license.status.tooltip":"État d'activation actuel de la licence.","settings.license.tier":"Étage","settings.license.tier.tooltip":"Niveau d'abonnement actuel pour les fonctionnalités WEPPY Dashboard disponibles.","settings.license.key":"Clé","settings.license.key.tooltip":"Clé de licence masquée actuellement chargée par le serveur.","settings.license.keyValue.tooltip":"Clé de licence masquée actuellement chargée par le serveur.","settings.license.provider":"Provider","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"Fournisseur de licence utilisé pour valider cette clé.","settings.license.providerValue.tooltip":"Fournisseur de licence utilisé pour valider cette clé.","settings.license.active":"Actif","settings.license.active.tooltip":"État d'activation actuel de la licence.","settings.license.status.activeCancelPending.tooltip":"L'annulation est en attente, mais l'accès Pro reste actif jusqu'à la fin de la période de facturation en cours.","settings.license.inactive":"Inactif","settings.license.inactive.tooltip":"État d'activation actuel de la licence.","settings.license.expired":"Expiré","settings.license.expired.tooltip":"État d'activation actuel de la licence.","settings.license.unavailable":"Informations de licence indisponibles","settings.license.detail.cancelPending":"L'annulation est programmée. L'accès Pro reste actif jusqu'à la fin de la période de facturation en cours.","settings.license.reset":"Réinitialiser la licence","settings.readOnly":"Lecture seule","settings.readOnly.tooltip":"Cette section affiche les valeurs qui ne peuvent pas être modifiées à partir du WEPPY Dashboard.","settings.unavailable":"Paramètres indisponibles","settings.general.title":"Paramètres généraux","settings.general.title.tooltip":"Paramètres chauds qui s’appliquent immédiatement lorsqu’ils sont modifiés.","settings.general.liveApply":"Postuler en direct","settings.general.liveApply.tooltip":"Les modifications apportées à cette section sont appliquées immédiatement sans bouton de sauvegarde séparé.","settings.general.applied":"Appliqué","settings.general.logLevel":"Niveau de journalisation","settings.general.logLevel.tooltip":"Choisissez la quantité de détails que le serveur MCP écrit dans les journaux. Réduisez à « debug » lors de la recherche d’un problème.","settings.general.localHistory":"Enregistrement de l'historique des outils","settings.general.localHistory.tooltip":"Enregistrez les exécutions de l’outil AI sur le disque. Obligatoire pour les pages Outils et Historique.","settings.general.localStatistics":"Collecte de statistiques sur les outils","settings.general.localStatistics.tooltip":"Comptes agrégés d’utilisation des outils. Utilisé par les statistiques de présentation.","settings.general.contextCapture":"Capture de contexte","settings.general.contextCapture.tooltip":"Enregistrez le contexte d'exécution structuré afin que les vues Changelog et Playtest puissent le restituer.","settings.general.requestTimeout":"Expiration du délai d'action","settings.general.requestTimeout.tooltip":"Temps maximum (en ms) d'attente pour une seule action de l'outil avant d'échouer.","settings.general.requestTimeout.unit":"MS","settings.general.requestTimeout.unit.tooltip":"Le délai d’expiration de l’action est mesuré en millisecondes.","settings.cold.title":"Environnement serveur","settings.cold.title.tooltip":"Valeurs d'environnement de serveur en lecture seule chargées au démarrage.","settings.cold.httpPort.tooltip":"Numéro de port utilisé par le serveur HTTP MCP WEPPY Dashboard.","settings.cold.httpHost.tooltip":"Interface hôte à laquelle le serveur HTTP MCP WEPPY Dashboard se lie.","settings.cold.hint":"Définissez via des variables d’environnement pour modifier ces valeurs.","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"Choisissez le comportement du WEPPY Dashboard au démarrage du serveur MCP.","settings.dashboard.nextStartBadge":"Prochain démarrage","settings.dashboard.autoOpen.label":"Ouvrir le Dashboard au démarrage de WEPPY","settings.dashboard.autoOpen.description":"Ouvre automatiquement ce Dashboard après le démarrage du serveur MCP.","settings.dashboard.autoOpen.nextStart":"S’applique au prochain démarrage du serveur MCP.","settings.dashboard.settingsFile.label":"Fichier de réglages","settings.dashboard.agentExample.label":"Demandez à votre Agent","settings.dashboard.agentExample.prompt":"« Désactive l’ouverture automatique du Dashboard. »","settings.dashboard.autoOpen.saving":"Enregistrement…","settings.dashboard.autoOpen.saved":"Enregistré pour le prochain démarrage du serveur.","settings.dashboard.autoOpen.error":"Échec de l’enregistrement. Le réglage précédent a été restauré.","dashboardAutoOpenGuide.eyebrow":"Préférence du Dashboard","dashboardAutoOpenGuide.title":"Choisissez comment ouvrir WEPPY Dashboard","dashboardAutoOpenGuide.currentOn":"L’ouverture automatique est activée. Ce Dashboard s’ouvre après le démarrage du serveur MCP.","dashboardAutoOpenGuide.currentOff":"L’ouverture automatique est désactivée. WEPPY n’ouvrira pas de nouvel onglet Dashboard au démarrage du serveur MCP.","dashboardAutoOpenGuide.changeAnytime":"Vous pouvez modifier ce choix à tout moment dans Settings.","dashboardAutoOpenGuide.agentHint":"Vous pouvez aussi demander à votre Agent : « Désactive l’ouverture automatique du Dashboard ».","dashboardAutoOpenGuide.statusOn":"Ouverture automatique activée","dashboardAutoOpenGuide.statusOff":"Ouverture automatique désactivée","dashboardAutoOpenGuide.keep":"Conserver le réglage actuel","dashboardAutoOpenGuide.turnOff":"Désactiver l’ouverture automatique","dashboardAutoOpenGuide.openSettings":"Ouvrir Settings","dashboardAutoOpenGuide.close":"Fermer le guide d’ouverture automatique","dashboardAutoOpenGuide.saving":"Enregistrement…","dashboardAutoOpenGuide.error":"Impossible d’enregistrer votre choix. Réessayez.","settings.language.title":"Langue","settings.language.title.tooltip":"Choisissez comment le texte de l'interface WEPPY Dashboard est localisé.","settings.language.dashboard":"WEPPY Dashboard Langue","settings.language.dashboard.tooltip":"Remplace la langue WEPPY Dashboard ou suit la langue du système lorsqu'elle est définie sur Auto.","settings.language.auto":"Auto","overview.l0.title":"Serveur MCP déconnecté","overview.l0.message":"Le serveur MCP ne répond pas. Le WEPPY Dashboard tentera automatiquement de se reconnecter.","overview.l0.step1":"Vérifiez que le processus serveur MCP est en cours d'exécution","overview.l0.step2":"Redémarrez la commande du serveur MCP si nécessaire","overview.l0.reconnecting":"Reconnexion automatique toutes les 3 secondes...","overview.l0.reconnectBtn":"Reconnecter","overview.l0.settingsBtn":"Vérifier les paramètres","overview.l1.pluginGuide":"Le plugin Roblox Studio n'est pas connecté","overview.l1.check1":"Roblox Studio est-il en cours d'exécution ?","overview.l1.check2":"Le WEPPY Plugin est-il installé ?","overview.l1.feedHint":"Les modifications apparaîtront ici une fois le plugin connecté","overview.metric.server":"Serveur","overview.metric.server.tooltip":"État d'exécution du serveur MCP et état du processus","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Connexion du plugin Roblox Studio et état de la version","overview.metric.agent":"Agent","overview.metric.agent.tooltip":"Agents de codage IA connectés et leur état d'exécution","overview.metric.agent.instancesUnit":"cas","overview.metric.sync":"Synchroniser","overview.metric.sync.tooltip":"Activité actuelle de synchronisation entre Studio et local","overview.metric.noAgent":"Aucun agent","overview.meta.version":"Version","overview.meta.version.tooltip":"Version du serveur MCP installée","overview.meta.session":"Session","overview.meta.session.tooltip":"Identifiant de session MCP actuel","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Identificateur de processus du système d'exploitation","overview.meta.uptime":"Temps de disponibilité","overview.meta.uptime.tooltip":"Temps écoulé depuis le démarrage du serveur MCP","overview.feed.title":"Modifications récentes du jeu","overview.feed.empty":"Aucun changement récent","overview.changelog.title":"Résumé des modifications de session","overview.changelog.entries":"Total","overview.changelog.scripts":"scripts","overview.changelog.instances":"cas","overview.changelog.properties":"propriétés","overview.changelog.assets":"actifs","overview.tier.title":"Utilisation du niveau","changelog.subtitle":"Historique des changements de jeu","changelog.filter.all":"Tous","changelog.filter.active":"Actif","changelog.filter.completed":"Complété","changelog.empty":"Aucune entrée du journal des modifications pour l'instant","changelog.basic.limit.title":"L'aperçu Basic affiche les 3 dernières sessions","changelog.basic.limit.body":"Passez à Pro pour parcourir la chronologie complète du journal des modifications pour ce lieu.","changelog.basic.metricLabel":"Journal des modifications visible / Total","changelog.basic.visible":"visible","changelog.basic.total":"total","changelog.card.active":"Actif","changelog.card.active.tooltip":"Cette session reçoit toujours de nouveaux changements de jeu.","changelog.card.completed":"Complété","changelog.card.completed.tooltip":"Cette session est terminée et aucun autre changement n'est attendu.","changelog.card.bootstrapStatus":"Amorçage","changelog.card.bootstrapStatus.tooltip":"Cette session contient uniquement l'instantané d'amorçage de synchronisation initial.","changelog.card.inProgress":"en cours","changelog.card.noChanges":"Aucun changement pour l'instant","changelog.card.noChanges.tooltip":"Aucun changement de jeu n'a encore été extrait pour cette session.","changelog.card.bootstrapSummary":"Instantané de synchronisation initial","changelog.card.bootstrapSummary.tooltip":"Les écritures initiales de synchronisation de fichiers sont regroupées en une seule ligne d'instantané d'amorçage.","changelog.card.sessionIntent":"Intention de session","changelog.card.scripts":"scripts","changelog.card.scripts.tooltip":"Modifications du script apportées au cours de cette session.","changelog.card.instances":"cas","changelog.card.instances.tooltip":"Instance créer, supprimer, déplacer ou cloner les modifications dans cette session.","changelog.card.modified":"modifié","changelog.card.created":"créé","changelog.card.deleted":"supprimé","changelog.card.moved":"déplacé","changelog.card.propertiesChanged":"propriétés modifiées","changelog.card.propertiesChanged.tooltip":"Modifications de la valeur Property enregistrées pour cette session.","changelog.card.lightingConfigured":"Éclairage configuré","changelog.card.lightingConfigured.tooltip":"Les paramètres d'éclairage ou d'ambiance ont été modifiés au cours de cette session.","changelog.card.terrainConfigured":"Terrain configuré","changelog.card.terrainConfigured.tooltip":"Les données de terrain ou les paramètres de terrain ont été modifiés au cours de cette session.","changelog.card.assetsInserted":"éléments insérés","changelog.card.assetsInserted.tooltip":"Actifs insérés dans le lieu lors de cette séance.","changelog.category.script":"Scripts","changelog.category.instance":"Instances","changelog.category.property":"Properties","changelog.category.lighting":"Éclairage","changelog.category.terrain":"Terrain","changelog.category.asset":"Actifs","changelog.detail.dialogLabel":"Détails du journal des modifications","changelog.detail.changeSummary":"Résumé des modifications","changelog.detail.changeSummary.tooltip":"Nombre de modifications de jeu extraites regroupées par catégorie pour cette session.","changelog.detail.changeTimeline":"Modifier la chronologie","changelog.detail.changeTimeline.tooltip":"Liste chronologique des modifications de jeu extraites pour cette session.","changelog.detail.context.title":"Résumé du contexte","changelog.detail.context.tooltip":"Contexte d'exécution structuré capturé pour cette session de journal des modifications.","changelog.detail.verification.title":"Vérification","changelog.detail.verification.tooltip":"Signaux de vérification liés à cette session de changelog.","changelog.detail.verification.label":"Résultat","changelog.detail.verification.status":"Statut","changelog.detail.verification.timestamp":"Enregistré à","changelog.detail.beforeAfter":"Avant et après","changelog.detail.filterCategory":"Catégorie","changelog.detail.filterCategory.tooltip":"Filtrez la chronologie sur une seule catégorie de changement.","changelog.detail.confidence.exact":"Exact","changelog.detail.confidence.exact.tooltip":"Les états avant et après ont été confirmés pour ce changement.","changelog.detail.confidence.partial":"Partiel","changelog.detail.confidence.partial.tooltip":"Seule une partie de l’état avant et après a pu être confirmée pour ce changement.","changelog.detail.confidence.afterOnly":"Après seulement","changelog.detail.confidence.afterOnly.tooltip":"Seul l'état résultant après le changement a pu être confirmé.","changelog.detail.confidence.intentOnly":"Intention uniquement","changelog.detail.confidence.intentOnly.tooltip":"Seule l'action demandée a été enregistrée, pas l'état résultant.","changelog.detail.confidence.unknown":"Inconnu","changelog.detail.confidence.unknown.tooltip":"Ce changement n’a pas pu être classé avec certitude à partir des données disponibles.","changelog.detail.noChanges":"Aucun changement dans cette catégorie","changelog.detail.backToList":"Retour à la liste","changelog.diff.empty":"Aucune différence disponible","changelog.diff.unified":"Unifié","changelog.diff.sideBySide":"Côte à côte","changelog.diff.before":"Avant","changelog.diff.after":"Après","sync.targets.title":"Studios connectés","sync.targets.refresh":"Actualiser","sync.targets.loading":"Chargement de l’état Sync des Studios…","sync.targets.unavailable":"L’état Sync des Studios est indisponible. Réessayez.","sync.targets.empty":"Aucun Studio connecté. Connectez WEPPY Plugin pour voir l’état Sync en direct.","sync.targets.unknownPlace":"Place inconnu","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"Connecté","sync.targets.notReported":"Pas encore signalé","sync.targets.state.unknown":"Inconnu","sync.targets.state.off":"Sync désactivé","sync.targets.state.idle":"Sync activé · en attente","sync.targets.state.initializing":"Initialisation","sync.targets.state.syncing":"Synchronisation","sync.targets.state.paused":"En pause","sync.targets.state.error":"Erreur","sync.forwardStatus.label":"Envoi des modifications","sync.forwardStatus.tooltip":"Indique si les modifications en mode Edit peuvent être envoyées. Actif ne garantit pas que tous les fichiers locaux sont à jour.","sync.forwardStatus.inactive":"Désactivé","sync.forwardStatus.active":"Actif","sync.forwardStatus.paused_play":"Suspendu pendant Play","sync.forwardStatus.reconciling":"Vérification des modifications Edit","sync.forwardStatus.blocked":"Attention requise","sync.forwardStatus.unknown":"Inconnu","sync.forwardStatus.observedAt":"Observé","sync.forwardStatus.reason.review":"Vérifiez les modifications dans Studio Plugin.","sync.forwardStatus.reason.editChanged":"Edit a changé pendant la vérification. Vérifiez Sync dans Studio Plugin.","sync.forwardStatus.reason.failed":"Les modifications n'ont pas pu être confirmées. Vérifiez Sync dans Studio Plugin.","sync.forwardStatus.reason.fallback":"Consultez Studio Plugin pour plus de détails.","sync.stored.title":"Places enregistrés","sync.stored.data":"Données enregistrées","sync.stored.ambiguous":"Emplacement de stockage non confirmé","sync.detail.scope":"Détails Sync pour","sync.detail.readOnly":"La consultation ne modifie pas le routage Studio.","sync.detail.empty":"Sélectionnez un Studio connecté ou un Place enregistré.","sync.detail.unknown":"Ce Studio n’a pas encore signalé son état Sync.","sync.detail.error":"Sync a signalé une erreur. Consultez Studio Plugin pour les détails.","sync.detail.placeFolder":"Dossier du Place","sync.detail.placeFolder.tooltip":"Dossier partagé par les Studios qui ouvrent ce Place.","sync.detail.sharedData":"Le chemin, les nombres et le journal appartiennent au Place et sont partagés entre ses Studios.","sync.log.shared":"Journal partagé du Place","sync.log.unsafe":"L’emplacement de stockage n’est pas confirmé pour accéder au journal.","sync.log.unavailable":"Impossible de charger le journal du Place. Réessayez.","sync.log.loading":"Chargement du journal du Place…","sync.clear.selectedMessage":"Cette action supprime définitivement le journal Sync partagé de {place}.","sync.overlay.title":"Plugin Roblox Studio requis","sync.overlay.message":"L'état de synchronisation sera disponible une fois le plugin Roblox Studio connecté.","sync.overlay.check1":"Roblox Studio est-il en cours d'exécution ?","sync.overlay.check2":"Le WEPPY Plugin est-il installé ?","sync.status.title":"Statut de synchronisation","sync.status.title.tooltip":"État actuel de synchronisation du Studio et des fichiers locaux pour cet emplacement.","sync.status.forwardOnly":"Transférer uniquement","sync.status.forwardOnly.tooltip":"Le niveau Basic permet à Studio d'effectuer une synchronisation directe locale uniquement.","sync.status.place":"Lieu","sync.status.place.tooltip":"Nom et identifiant du lieu Roblox connecté.","sync.status.path":"Chemin","sync.status.path.tooltip":"Racine du système de fichiers local actuellement utilisée pour la sortie de synchronisation.","sync.status.instances":"Instances","sync.status.instances.tooltip":"Nombre total d'instances Roblox synchronisées suivies dans le miroir local.","sync.status.scripts":"Scripts","sync.status.scripts.tooltip":"Nombre total de fichiers de script synchronisés actuellement indexés pour cet emplacement.","sync.status.state":"État","sync.status.state.tooltip":"État de synchronisation d'exécution actuel signalé par le serveur.","sync.policy.title":"Politique Sync","sync.policy.title.tooltip":"Politique Sync effective signalée par le plugin Studio connecté.","sync.policy.activation":"Activation","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"Flux de travail","sync.policy.preset.studio_first":"Studio d'abord","sync.policy.preset.bidirectional_review":"Bidirectionnel","sync.policy.preset.local_code_studio_world":"Code local, monde Studio","sync.policy.preset.custom":"Personnalisé","sync.policy.apply.title":"Application des changements locaux à Studio","sync.policy.apply.description":"Indique si les changements locaux sont vérifiés d’abord ou appliqués automatiquement à Studio.","sync.policy.apply.content":"Modifications du contenu","sync.policy.apply.content.tooltip":"Changements locaux du code Script, des propriétés et des propriétés de service. Créer, supprimer, renommer et déplacer relèvent de la structure.","sync.policy.apply.structure":"Modifications de la structure","sync.policy.apply.structure.tooltip":"Création, suppression, renommage et déplacement locaux d’instances. La suppression locale automatique exige aussi l’option de suppression séparée ci-dessous.","sync.policy.apply.manual":"Vérifier d'abord","sync.policy.apply.auto":"Application automatique","sync.policy.scope.disclosure":"Directions par périmètre","sync.policy.scope.scriptSource":"Source des scripts","sync.policy.scope.properties":"Propriétés","sync.policy.scope.structure":"Structure","sync.policy.scope.serviceProperties":"Propriétés des services","sync.policy.endpoint.local":"Local","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → Local","sync.policy.direction.forward.tooltip":"Les modifications de Studio sont écrites dans les fichiers locaux.","sync.policy.direction.reverse":"Local → Studio","sync.policy.direction.reverse.tooltip":"Les modifications des fichiers locaux sont appliquées dans Studio.","sync.policy.direction.bidirectional":"Dans les deux sens","sync.policy.direction.bidirectional.tooltip":"Les modifications peuvent aller de Studio vers les fichiers locaux et des fichiers locaux vers Studio.","sync.policy.safety.localDeletes":"Suppression locale → supprimer l’instance Studio","sync.policy.safety.review":"Vérifier avant suppression","sync.policy.safety.review.tooltip":"Les suppressions de fichiers locaux attendent une vérification avant de retirer les instances Studio correspondantes. Cette fonction est distincte du nettoyage automatique de UI Studio.","sync.policy.safety.auto":"Suppression automatique dans Studio","sync.policy.safety.auto.tooltip":"La suppression de fichiers locaux peut retirer automatiquement les instances Studio correspondantes. Cette fonction est distincte du nettoyage automatique de UI Studio.","sync.policy.reviewRequired":"Vérifiez cette politique dans le plugin Studio avant de lancer Sync.","sync.log.title":"Journal de synchronisation","sync.log.empty":"Aucun événement de synchronisation pour l'instant","sync.log.type.write":"WRITE","sync.log.type.write.tooltip":"Une nouvelle sortie de synchronisation a été écrite sur le disque.","sync.log.type.update":"UPDATE","sync.log.type.update.tooltip":"Un fichier ou une instance synchronisée existante a été mise à jour.","sync.log.type.delete":"DELETE","sync.log.type.delete.tooltip":"Un fichier ou une instance synchronisé a été supprimé.","sync.log.type.idle":"IDLE","sync.log.type.idle.tooltip":"Un événement de synchronisation a été enregistré sans mutation de fichier.","sync.upgrade.title":"Découvrir la synchronisation complète avec Pro","sync.upgrade.benefit1":"Synchronisation bidirectionnelle : modifiez des fichiers, appliquez-les automatiquement à Studio","sync.upgrade.benefit2":"Synchronisation inversée : renvoyer les modifications de fichiers vers Studio","sync.upgrade.benefit3":"Historique de synchronisation complet et journal des modifications détaillé","sync.upgrade.buy":"Voir Pro","playtest.status.title":"Statut du test de jeu","playtest.status.title.tooltip":"État actuel de la session de test de jeu Roblox signalé par Studio.","playtest.status.mode":"Mode","playtest.status.mode.tooltip":"Mode de lancement du playtest Studio pour la session en cours.","playtest.status.mode.value.tooltip":"Mode de test de jeu Roblox Studio spécifique actuellement utilisé.","playtest.status.mode.play":"Jouer","playtest.status.mode.run":"Courir","playtest.status.mode.server":"Serveur","playtest.status.mode.edit":"Modifier","playtest.status.place.tooltip":"Lieu Roblox actuellement associé à cette session de playtest.","playtest.status.state.running":"En cours d'exécution","playtest.status.state.running.tooltip":"Une session de test de jeu Roblox est actuellement en cours.","playtest.status.state.paused":"En pause","playtest.status.state.paused.tooltip":"La session de test de jeu Roblox en cours est suspendue.","playtest.status.state.notRunning":"Ne fonctionne pas","playtest.status.state.notRunning.tooltip":"Aucune session de test de jeu Roblox n'est actuellement en cours.","playtest.control.play":"Jouer","playtest.control.pause":"Pause","playtest.control.resume":"CV","playtest.control.stop":"Arrêt","playtest.history.title":"Historique des tests","playtest.history.search":"Rechercher les résultats de test","playtest.history.filter":"Résultat","playtest.history.filterAll":"Tous les résultats","playtest.history.filteredCount":"{{visible}} résultats sur {{total}}","playtest.history.title.tooltip":"Exécutions de tests de jeu automatisés enregistrés pour ce projet.","playtest.history.empty":"Aucun résultat de test pour l'instant","playtest.history.mode":"Mode","playtest.history.mode.tooltip":"Mode Playtest utilisé pour ce test enregistré.","playtest.history.status.passed":"Passé","playtest.history.status.failed":"Échoué","playtest.history.status.running":"En cours d'exécution","playtest.history.status.unknown":"Inconnu","playtest.history.status.tooltip":"État des résultats enregistrés pour cette exécution de test de jeu automatisé.","playtest.empty.title":"Aucun résultat de test de jeu pour l'instant","playtest.empty.message":"Les résultats apparaîtront ici après l’exécution d’un Playtest par l’agent IA.","playtest.empty.message.before":"Les résultats apparaîtront ici après l’exécution d’un Playtest par l’agent IA.","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"Ask the AI Agent to run a Playtest when you need a fresh report.","playtest.report.title":"Rapport sélectionné","playtest.report.title.tooltip":"Sortie détaillée pour l’exécution de test de jeu automatisé actuellement sélectionnée.","playtest.detail.dialogLabel":"Détail du rapport de playtest","playtest.detail.loading":"Chargement du rapport...","playtest.detail.errorTitle":"Rapport indisponible","playtest.report.content":"Rapport","playtest.report.content.tooltip":"Résumé de la démarque pour l'exécution du test de jeu automatisé sélectionné.","playtest.report.logs":"Journaux","playtest.report.logs.tooltip":"Journaux d'exécution capturés pour l'exécution du test de lecture automatisé sélectionné.","playtest.context.contextId":"ID de contexte","playtest.context.why":"Pourquoi ce test a été exécuté","playtest.context.expected":"Attendu","playtest.context.observed":"Observé","playtest.report.empty":"Aucun contenu de rapport disponible","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest est une fonctionnalité réservée à Pro","playtest.basic.desc":"Contrôlez les tests de jeu à partir de WEPPY Dashboard, exécutez des tests automatisés et consultez des rapports de test détaillés.","playtest.basic.benefit1":"Commandes de lecture/pause/arrêt en un clic","playtest.basic.benefit2":"Exécution de tests automatisés via un agent IA","playtest.basic.benefit3":"Historique des tests avec suivi des réussites/échecs","playtest.basic.benefit4":"Rapports de tests de démarque détaillés","playtest.sample.badge":"Aperçu de la vue du playtest Pro","playtest.sample.title":"Vous prévisualisez l'écran de test de jeu qui devient disponible après la mise à niveau vers Pro.","playtest.sample.message":"Cet aperçu utilise des exemples de données. Le contrôle des tests de jeu en direct, la gestion de l'historique et les rapports réels sont débloqués avec Pro.","playtest.sample.clearDisabled":"Passez à Pro pour effacer l'historique des tests de jeu en direct.","playtest.sample.place":"Aperçu de l'arène","playtest.sample.history.name":"Exemple de test de fumée dans une arène","playtest.sample.context.why":"Apparaissez dans l'arène, survivez à l'ouverture et vérifiez que le HUD répond immédiatement.","playtest.sample.context.expected":"Le joueur apparaît en toute sécurité, l'interface utilisateur du compte à rebours apparaît en une seconde et la première vague démarre sans erreur.","playtest.sample.context.observed":"Protection contre l'apparition maintenue, le HUD mis à jour à temps et la première vague terminée sans régression de gameplay.","playtest.sample.report.markdown":`# Exemple de test de fumée d'arène
203
+ - Indique l’emplacement du code, les fichiers modifiés, les profils qui l’utilisent, le comportement de cleanup et ce que je dois vérifier manuellement avant de publier.`,"sidebar.overview":"Aperçu","sidebar.changelog":"Journal des modifications","sidebar.connection":"Connexion","sidebar.sync":"Synchroniser","sidebar.playtest":"Test de jeu","sidebar.tools":"Outils","sidebar.settings":"Paramètres","sidebar.ui_studio":"UI Studio","sidebar.gate.l1":"Connexion au serveur MCP requise","sidebar.gate.l2":"Connexion au plugin Roblox Studio requise","header.currentProject":"Projet actuel","header.unknownProject":"Projet inconnu","header.projectRoot.label":"Racine du projet","header.currentProject.loading":"Chargement de la racine du projet...","header.currentProject.unavailable":"Racine Project indisponible","header.placeNotConnected":"Lieu non connecté","header.currentProject.tooltip":"Dossier de projet actuellement sélectionné","header.currentProject.loading.tooltip":"Les informations racine de Project sont toujours en cours de chargement","header.currentProject.unavailable.tooltip":"Les informations sur la racine du projet actuel ne sont pas disponibles","header.currentProjectSyncRoot.label":"Synchroniser la racine","header.currentProjectSyncRoot.loading":"Chargement de la racine de synchronisation...","header.currentProjectSyncRoot.unavailable":"Racine de synchronisation indisponible","header.currentProjectSyncRoot.tooltip":"Dossier racine de synchronisation actuel pour le projet sélectionné","header.currentProjectSyncRoot.loading.tooltip":"Les informations sur la racine de synchronisation sont toujours en cours de chargement","header.currentProjectSyncRoot.unavailable.tooltip":"Les informations actuelles sur la racine de synchronisation ne sont pas disponibles","header.testFiles.label":"Fichiers de test","header.testFiles.unavailable":"Fichiers de test indisponibles","header.testFiles.tooltip":"Répertoire actuel des fichiers de test de lecture pour l'endroit sélectionné","header.places.title":"Lieux","header.places.active":"Actif","header.places.inactive":"Inactif","header.places.pluginRequired":"Connexion plug-in requise","header.places.liveRequired":"Connexion plug-in requise pour le lieu actif en direct","header.place.tooltip":"Lieu Roblox connecté","header.placeNotConnected.tooltip":"Lieu non connecté","placeScope.current.label":"Place actuel","placeScope.lastActive.label":"Dernier place actif","placeScope.selected.label":"Place sélectionné","placeScope.unknownPlace":"Place inconnu","placeScope.live":"En direct","placeScope.connected":"Studio connecté","placeScope.stored":"Données enregistrées","placeScope.connectedGroup":"Studios connectés","placeScope.storedGroup":"Données enregistrées","placeScope.stored.note":"Ce place n’est actuellement ouvert dans aucun Studio connecté.","placeScope.pluginRequired":"Plugin requis","placeScope.pluginRequired.note":"Connectez le WEPPY Plugin pour confirmer le place actif en direct.","placeScope.noPlace.label":"Portée du place","placeScope.noPlace.value":"Aucune donnée de place disponible pour le moment","placeScope.noPlace.badge":"Aucun place","placeScope.noPlace.note":"Connectez le WEPPY Plugin et synchronisez un place pour créer des données par place.","placeScope.selected.note":"Seules les données enregistrées sont affichées. Le routage Studio reste inchangé.","placeScope.surface.sync":"L'état de synchronisation et les journaux utilisent ce place.","placeScope.surface.changelog":"Les sessions du journal des changements utilisent ce place.","placeScope.surface.playtest":"Les rapports de playtest utilisent ce place.","placeScope.surface.uiStudio":"Les captures UI et l'historique des changements utilisent ce place.","placeScope.surface.tools":"L'historique et les statistiques des outils utilisent ce place.","placeScope.loading":"Chargement de la portée du place...","placeScope.unavailable":"Portée du place indisponible","placeScope.selector.label":"Données du place","placeScope.shortcuts.trigger":"Raccourcis","placeScope.shortcuts.label":"Raccourcis du place","placeScope.shortcuts.settings":"Paramètres du place","placeScope.shortcuts.experience":"Gérer l’expérience","placeScope.shortcuts.roblox":"Voir sur Roblox","placeScope.folder.duplicate":"Dossier en double","placeScope.folder.unresolved":"Dossier représentatif non confirmé","placeScope.folder.noSyncHistory":"Aucun historique de synchronisation","placeScope.folder.unresolvedPlace":"Place {placeId}","placeScope.folder.details":"Détails des dossiers du Place","placeScope.folder.duplicateReason":"L’emplacement de stockage actuel est {canonicalFolder}. Ce dossier est sauvegardé après une synchronisation complète réussie.","placeScope.folder.unresolvedReason":"Ce Place reste sélectionnable par son ID, mais aucun dossier n’est encore confirmé comme représentatif.","placeScope.folder.unknown":"inconnu","placeScope.selector.noneSelectable":"Aucun dossier de Place sélectionnable","header.changeProjectRoot":"Changer la racine du projet Project","header.changeProjectRoot.ariaLabel":"Changer la racine du projet","header.changeProjectRoot.tooltip":"Changer la racine actuelle du projet","header.changeProjectRoot.disabledTooltip.l0":"Connexion au serveur MCP requise avant que la racine du projet puisse être modifiée","header.changeProjectRoot.disabledTooltip.loading":"Les informations racine de Project sont toujours en cours de chargement","header.changeProjectRoot.disabledTooltip.unavailable":"Les informations sur la racine du projet actuel ne sont pas disponibles","header.projectRootModal.initial.title":"Changer la racine du projet","header.projectRootModal.initial.body.connected":"Après avoir choisi un dossier de projet, MCP basculera vers la nouvelle racine du projet et le contenu actuel du Studio sera entièrement resynchronisé dans la nouvelle cible <dossier de projet sélectionné>/weppy-project-sync.","header.projectRootModal.initial.body.disconnected":"Après avoir choisi un dossier de projet, MCP basculera vers la nouvelle racine du projet et utilisera <dossier de projet sélectionné>/weppy-project-sync comme prochaine cible de synchronisation.","header.projectRootModal.initial.nextSyncRoot":"Nouvelle cible de synchronisation après sélection","header.projectRootModal.initial.nextSyncRoot.placeholder":"<dossier de projet sélectionné>/weppy-project-sync","header.projectRootModal.initial.warningStop":"La synchronisation actuelle s'arrête immédiatement.","header.projectRootModal.initial.warningFreshSync":"Le contenu actuel du Studio sera utilisé pour créer une nouvelle synchronisation complète dans la nouvelle cible.","header.projectRootModal.initial.warningNoMove":"Les anciens dossiers de synchronisation ne sont pas déplacés automatiquement.","header.projectRootModal.initial.warningDeferredSync":"Si Studio n'est pas connecté, la resynchronisation complète démarre à la prochaine connexion du plugin.","header.projectRootModal.confirm.title":"Confirmer la nouvelle racine du projet","header.projectRootModal.confirm.body":"Examinez le dossier de projet sélectionné avant de postuler.","header.projectRootModal.confirm.projectRoot":"Dossier de projet sélectionné","header.projectRootModal.confirm.syncRoot":"Nouvelle cible de synchronisation","header.projectRootModal.confirm.warningNoMove":"Les dossiers de synchronisation existants ne sont pas déplacés automatiquement.","header.projectRootModal.pick":"Choisir un dossier","header.projectRootModal.apply":"Appliquer le changement","header.projectRootModal.cancel":"Annuler","header.projectRootModal.error":"Échec de la modification de la racine du projet","status.online":"En ligne","status.offline":"Hors ligne","status.idle":"Inactif","status.syncing":"Synchronisation","status.error":"Erreur","status.initializing":"Initialisation","level.l0.title":"Serveur déconnecté","level.l0.message":"WEPPY Dashboard ouvert mais le serveur MCP s'est arrêté ou ne répond pas.","level.l1.title":"Serveur connecté","level.l1.hint":"Vérifiez : Roblox Studio est-il en cours d'exécution ? Le plugin est-il installé ?","level.l2.ok":"Studio connecté","tier.basic":"Basic","tier.basic.tooltip":"Niveau Basic avec l'ensemble de fonctionnalités standard WEPPY Dashboard.","tier.pro":"Pro","tier.pro.tooltip":"Niveau Pro avec l'ensemble complet de fonctionnalités WEPPY Dashboard.","tier.mixed":"Mixte","tier.upgrade":"Voir Pro","tier.banner.save":"Enregistrez les jetons IA avec Pro !","tier.tool.query_instances.desc":"Inspectez les instances, recherchez les enfants et les descendants et inspectez les données de classe. Pro ajoute une arborescence de fichiers, une structure de projet et une recherche de propriétés ou de balises.","tier.tool.mutate_instances.desc":"Créez, supprimez, clonez et déplacez des instances. Pro ajoute la création d'arborescence et les opérations de création, de suppression ou de clonage en masse.","tier.tool.manage_properties.desc":"Lisez et définissez les propriétés, les attributs et les balises. Pro ajoute des mises à jour calculées, des modifications relatives et des opérations de propriété en masse.","tier.tool.manage_scripts.desc":"Lisez, écrivez, créez, supprimez, modifiez et recherchez la source du script. Pro ajoute un remplacement groupé entre les scripts.","tier.tool.manage_ui.desc":"Pro uniquement. Créez ou affinez des menus de style jeu, des HUD, des boutons, des étiquettes et des panneaux d'images, puis capturez des écrans et examinez les suggestions d'amélioration.","tier.tool.manage_ui.action.design_brief":"Planifier l'orientation de l'interface utilisateur","tier.tool.manage_ui.action.create_tree":"Créer une nouvelle interface utilisateur","tier.tool.manage_ui.action.update":"Mettre à jour l'interface utilisateur existante","tier.tool.manage_ui.action.delete":"Supprimer l'interface utilisateur","tier.tool.manage_ui.action.preview":"Capturer l'écran de l'interface utilisateur","tier.tool.manage_ui.action.check":"Examiner les suggestions d'amélioration","tier.tool.manage_lighting.desc":"Pro uniquement. Configurez l'éclairage, l'atmosphère, le ciel, les propriétés du terrain et les paramètres d'heure.","tier.tool.manage_selection.desc":"Lisez, définissez et effacez la sélection actuelle de Studio. Pro ajoute le contexte, les détails, l'ajout ou la suppression et la prise en charge de la surveillance de la sélection.","tier.tool.manage_camera.desc":"Inspectez l’état de la caméra, faites la mise au point par chemin ou position et demandez des suggestions de vues.","tier.tool.manage_tween.desc":"Pro uniquement. Créez, lisez, mettez en pause et annulez des interpolations pour une animation fluide.","tier.tool.manage_audio.desc":"Pro uniquement. Jouez, arrêtez, mettez en pause et reprenez les sons, et configurez l'écouteur audio.","tier.tool.manage_animation.desc":"Pro uniquement. Chargez, lisez et arrêtez des animations, et inspectez les pistes d'animation actives.","tier.tool.manage_physics.desc":"Pro uniquement. Enregistrez les groupes de collision, configurez les collisions de groupe et inspectez les groupes disponibles.","tier.tool.manage_effects.desc":"Pro uniquement. Émettez des particules, supprimez les effets et basculez l'état de l'effet.","tier.tool.manage_terrain.desc":"Pro uniquement. Remplissez les formes du terrain, effacez les régions, remplacez les matériaux, gérez les couleurs du terrain, lisez ou écrivez des voxels, générez du terrain et lissez le terrain.","tier.tool.spatial_query.desc":"Pro uniquement. Exécutez des raycasts, trouvez le terrain, validez le placement, scannez des zones, recherchez des positions plates ou d'apparition, analysez la possibilité de marcher, cartographiez l'espace et inspectez les collisions.","tier.tool.manage_assets.desc":"Pro uniquement. Insérez des modèles, inspectez les informations sur les actifs, recherchez dans la boutique du créateur, insérez des actifs ou des packages gratuits et exportez des actifs.","tier.tool.manage_sync.desc":"Pro uniquement. Inspectez l’état de synchronisation, la configuration, l’historique, les instructions et lisez ou écrivez les fichiers synchronisés.","tier.tool.workspace_state.desc":"Pro uniquement. Exécutez une synchronisation complète, capturez des instantanés, inspectez les modifications récentes et l'état de la fenêtre d'affichage, et gérez les métadonnées associées.","tier.tool.manage_logs.desc":"Inspectez les journaux de sortie avec filtrage, interrogation incrémentielle, effacement de la mémoire tampon et recherche d'erreurs récentes.","tier.tool.system_info.desc":"Inspectez l’état de la connexion et le niveau actuel. Pro ajoute des informations sur le lieu, des services, des paramètres de Studio, un contrôle de test de jeu et des tests automatisés.","tier.tool.manage_studio.desc":"Pro uniquement. Basculez les paramètres d'affichage de l'éditeur Studio tels que l'aperçu de l'interface utilisateur pour les flux de capture d'écran et d'assurance qualité ; il modifie les paramètres de session Studio, pas les objets de l'interface utilisateur du jeu.","tier.tool.batch_execute.desc":"Pro uniquement. Exécutez plusieurs commandes par lots, avec une exécution séquentielle et un comportement facultatif de poursuite en cas d'erreur.","tier.tool.execute_luau.desc":"Pro uniquement. Exécutez du code Luau arbitraire dans le bac à sable Roblox Studio.","connection.server.title":"État du Bridge","connection.server.version":"Version","connection.server.version.tooltip":"Version de l'environnement d'exécution de WEPPY Bridge","connection.server.pid":"PID","connection.server.pid.tooltip":"Identificateur de processus du système d'exploitation","connection.server.uptime":"Temps de disponibilité","connection.server.uptime.tooltip":"Temps écoulé depuis le démarrage de WEPPY Bridge","connection.server.session":"Session","connection.server.session.tooltip":"Identifiant de session actuel de WEPPY Bridge","connection.server.exec":"Exécutif","connection.server.exec.tooltip":"Chemin de l'exécutable utilisé pour lancer WEPPY Bridge","connection.server.restart":"Redémarrer Bridge","connection.server.restarting":"Redémarrage…","connection.server.restartUnavailable":"Connectez au moins un agent IA afin que son MCP Adapter puisse lancer le nouveau Bridge.","connection.server.restartTitle":"Redémarrer WEPPY Bridge ?","connection.server.restartMessage":"Dashboard et les cibles Studio seront brièvement déconnectés. Le résultat des commandes en cours peut devenir indéterminé, et les sessions Playtest actives ou les contrôles en attente seront nettoyés. Un MCP Adapter connecté lancera automatiquement un nouveau Bridge.","connection.server.restartConfirm":"Redémarrer Bridge","connection.server.restartRequesting":"Demande de redémarrage de Bridge…","connection.server.restartReconnecting":"Reconnexion à WEPPY Bridge…","connection.server.restartWaiting":"Dashboard et Studio se reconnecteront automatiquement lorsque le nouveau Bridge sera prêt.","connection.server.restartSucceeded":"WEPPY Bridge a redémarré","connection.server.restartFailed":"Impossible de redémarrer WEPPY Bridge","connection.server.restartTimeout":"Le nouveau Bridge n’a pas été prêt à temps. Vérifiez la connexion MCP dans votre outil IA, puis réessayez.","connection.server.restartStale":"Bridge a changé avant l’acceptation de la demande. Actualisez l’état, puis réessayez.","connection.reconnect":"Reconnecter","connection.checkSettings":"Vérifier les paramètres","connection.agents.title":"Agents IA","connection.agents.name":"Agent","connection.agents.version":"Version","connection.agents.version.tooltip":"Version du package MCP Adapter pour cette session d’agent.","connection.agents.cwd":"Directeur de travail","connection.agents.cwd.tooltip":"Répertoire de travail actuel pour l'agent AI connecté","connection.agents.projectRoot":"Racine du projet","connection.agents.projectRoot.tooltip":"Racine de projet faisant autorité pour la propriété de synchronisation","connection.agents.projectRoot.unresolved":"Non résolu","connection.agents.connected":"Connecté","connection.agents.unknown":"Inconnu","connection.agents.none":"Aucun agent connecté","connection.plugins.title":"Plugins","connection.plugins.place":"Lieu","connection.plugins.clientId":"Connection ID","connection.plugins.clientId.tooltip":"Full connection ID for diagnostics","connection.plugins.lastSeen":"Vu pour la dernière fois","connection.plugins.lastSeen.tooltip":"Battement de cœur le plus récent reçu du plugin","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Version du plugin installé signalée par Studio","connection.plugins.none":"Aucun plugin connecté","connection.targets.title":"Studio Targets","connection.targets.target":"Studio ID","connection.targets.target.tooltip":"Short name for this Roblox Studio window","connection.targets.place":"Place","connection.targets.placeId":"Place ID","connection.targets.placeId.tooltip":"Roblox Place ID for this Studio window","connection.targets.clientId":"Connection ID","connection.targets.clientId.tooltip":"Full connection ID for diagnostics. Usually use Studio ID instead.","connection.targets.session":"Session","connection.targets.session.tooltip":"Command channel state for this Studio target","connection.targets.lastUsed":"Last Used","connection.targets.lastUsed.tooltip":"Most recent plugin-route request routed to this Studio target","connection.targets.lastSeen":"Last Seen","connection.targets.lastSeen.tooltip":"Most recent heartbeat received from this Studio target","connection.targets.version":"Version","connection.targets.version.tooltip":"Installed plugin version reported by Studio","connection.targets.routing":"Routing","connection.targets.routing.tooltip":"Default Studio window when the agent does not name one","connection.targets.inFlight":"In Flight","connection.targets.inFlight.tooltip":"Active command request currently routed to this Studio target","connection.targets.studioState":"Studio State","connection.targets.studioState.tooltip":"Current edit/play runtime state reported by this Studio window","connection.targets.studioState.edit":"Edit","connection.targets.studioState.running":"Running","connection.targets.studioState.paused":"Paused","connection.targets.studioState.unknown":"Unknown","connection.targets.studioState.source.thread":"WEPPY play command","connection.targets.studioState.source.pluginConnection":"Connexion Play/Test de Studio","connection.targets.studioState.source.runService":"Studio RunService","connection.targets.studioState.source.unknown":"Unknown source","connection.targets.studioState.updatedUnknown":"not reported","connection.targets.copyPlaceId":"Copy Place ID","connection.targets.copyTargetAlias":"Copy Studio ID","connection.targets.copyClientId":"Copy Connection ID","connection.targets.copied":"Copied value","connection.targets.copyFailed":"Failed to copy value","connection.targets.none":"No Studio targets connected. Open Roblox Studio and connect WEPPY Plugin.","connection.targets.help":"When multiple Studio windows are connected, tell the agent to use Studio ID studio-1 to choose one.","connection.topology.ariaLabel":"Connection topology","connection.topology.title":"Connection topology","connection.topology.description":"Chaque agent IA se connecte via son propre MCP Adapter à un WEPPY Bridge partagé, qui maintient la connexion avec Roblox Studio.","connection.topology.serverTitle":"WEPPY Bridge","connection.topology.adapterRole":"MCP Adapter","connection.topology.active":"Active","connection.topology.stale":"Stale","connection.topology.unknown":"Unknown","connection.topology.lastContact":"Dernier contact","connection.topology.noContact":"Aucun contact récent","connection.topology.versionUnknown":"Version unknown","connection.topology.placeUnknown":"Place unknown","connection.topology.moreAgents":"+{count} more agents","connection.topology.moreStudios":"+{count} more studios","connection.topology.allAgentsVisible":"All agents visible","connection.topology.allStudiosVisible":"All studios visible","connection.topology.showAll":"Show all","connection.topology.showLess":"Show less","connection.topology.showAllAgents":"Show all AI agents","connection.topology.showAllStudios":"Show all Studio targets","connection.topology.showLessAgents":"Show less AI agents","connection.topology.showLessStudios":"Show less Studio targets","connection.routing.updateFailed":"Failed to update routing target","connection.log.title":"Journal de connexion","connection.log.empty":"Aucun événement pour l'instant","connection.time.secondsAgo":"il y a","connection.time.minutesAgo":"il y a m","connection.time.hoursAgo":"il y a h","common.loading":"Chargement...","common.retry":"Réessayer","common.reconnecting":"Reconnexion...","common.expand":"Développer","common.collapse":"Effondrement","tools.tab.history":"Histoire","tools.tab.statistics":"Statistiques","tools.tab.failures":"Échecs","tools.col.time":"Temps","tools.col.time.tooltip":"Date à laquelle l'exécution de l'outil a été enregistrée.","tools.col.toolAction":"Outil.Action","tools.col.toolAction.tooltip":"Nom de l’outil et action exécutée.","tools.col.duration":"Durée","tools.col.duration.tooltip":"Combien de temps l'outil a mis pour terminer.","tools.col.status":"Statut","tools.col.status.tooltip":"Résultat de l'exécution de l'outil enregistrée.","tools.col.tier":"Étage","tools.col.tier.tooltip":"Niveau de licence requis pour l’outil ou l’action.","tools.col.tierStats.tooltip":"Basic, Pro ou résumé mixte pour la ligne de statistiques de l'outil.","tools.col.tool":"Outil","tools.col.tool.tooltip":"Nom de l'outil consolidé dans le tableau des statistiques.","tools.col.calls":"Appels","tools.col.calls.tooltip":"Nombre total d'appels enregistrés pour cet outil.","tools.col.ok":"OK","tools.col.ok.tooltip":"Nombre d'exécutions directes réussies.","tools.col.fallback":"FALLBACK","tools.col.fallback.tooltip":"Nombre d'exécutions réussies grâce à une exécution de secours.","tools.col.unsupported":"UNSUPPORTED","tools.col.unsupported.tooltip":"Nombre d'exécutions bloquées sans exécution de secours.","tools.col.warn":"WARN","tools.col.warn.tooltip":"Nombre d'échecs attendus provoqués par l'entrée de l'appelant, l'état du projet, la stratégie Roblox ou le code utilisateur.","tools.col.err":"FAILED","tools.col.err.tooltip":"Nombre d'exécutions ayant échoué.","tools.col.okRate":"D'ACCORD%","tools.col.okRate.tooltip":"Pourcentage d'appels terminés avec succès.","tools.col.avgTime":"Temps moyen","tools.col.avgTime.tooltip":"Temps d'exécution moyen sur les appels enregistrés.","tools.col.error":"Erreur","tools.filter.tool":"Outil","tools.filter.all":"Tous","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Cette entrée utilisait un outil ou une action uniquement Pro.","tools.badge.fallback":"FALLBACK","tools.badge.fallback.tooltip":"L'action Pro demandée a réussi via un repli Basic.","tools.badge.unsupported":"UNSUPPORTED","tools.badge.unsupported.tooltip":"L'action Pro demandée a été bloquée et aucune solution de secours n'a été exécutée.","tools.badge.warn":"WARN","tools.badge.warn.tooltip":"L’appel de l’outil a échoué en raison d’un problème attendu d’appelant, de projet, de stratégie ou de code utilisateur.","tools.badge.err":"FAILED","tools.badge.err.tooltip":"L’exécution de l’outil a échoué.","tools.status.ok":"OK","tools.status.ok.tooltip":"L’exécution de l’outil s’est terminée avec succès.","tools.tier.mixed.tooltip":"Cet outil comprend à la fois les actions Basic et Pro.","tools.detail.params":"Paramètres","tools.detail.params.tooltip":"Paramètres d’entrée transmis à cette exécution d’outil.","tools.detail.result":"Résultat","tools.detail.result.tooltip":"Charge utile du résultat renvoyé pour cette exécution de cet outil.","tools.detail.requestedCommand":"Commande envoyée","tools.detail.executedCommand":"Commande exécutée","tools.detail.alternatives":"Alternatives","tools.detail.blockedMessage":"Raison du blocage","tools.detail.noFallback":"Pas de solution de repli","tools.detail.noFallback.value":"Aucune solution de secours n'a été exécutée.","tools.detail.warningMessage":"Message d'avertissement","tools.detail.errorMessage":"Message d'erreur","tools.detail.open":"Détails","tools.detail.openLabel":"Voir les détails de {command}","tools.detail.dialogLabel":"Détail de l’exécution de l’outil","tools.detail.title":"Exécution de l’outil","tools.history.routing":"Routing","tools.history.routing.mode":"Mode","tools.history.routing.requested":"Requested","tools.history.routing.actual":"Actual","tools.history.routing.none":"No Studio target named","tools.clear.history.title":"Effacer l'historique ?","tools.clear.history.message":"Cela supprime définitivement l’historique actuel des outils de lieu.","tools.clear.statistics.title":"Des statistiques claires ?","tools.clear.statistics.message":"Cela réinitialise définitivement les statistiques actuelles de l'outil de placement.","tools.detail.error":"Erreur","tools.page.prev":"Précédent","tools.page.prev.tooltip":"Accédez à la page précédente des résultats de l’historique des outils.","tools.page.next":"Suivant","tools.page.next.tooltip":"Accédez à la page suivante des résultats de l’historique des outils.","tools.empty.history":"Aucune entrée dans l'historique","tools.empty.stats":"Aucune statistique sur les outils","tools.empty.failures":"Aucun échec","tools.summary.total":"Total","tools.summary.calls":"appels","tools.summary.sessions":"Séances","settings.license.title":"Licence","settings.license.title.tooltip":"Statut actuel de la licence et niveau d'abonnement.","settings.license.status":"Statut","settings.license.status.tooltip":"État d'activation actuel de la licence.","settings.license.tier":"Étage","settings.license.tier.tooltip":"Niveau d'abonnement actuel pour les fonctionnalités WEPPY Dashboard disponibles.","settings.license.key":"Clé","settings.license.key.tooltip":"Clé de licence masquée actuellement chargée par le serveur.","settings.license.keyValue.tooltip":"Clé de licence masquée actuellement chargée par le serveur.","settings.license.provider":"Provider","settings.license.provider.auto":"auto","settings.license.provider.polar":"polar","settings.license.provider.gumroad":"gumroad","settings.license.provider.tooltip":"Fournisseur de licence utilisé pour valider cette clé.","settings.license.providerValue.tooltip":"Fournisseur de licence utilisé pour valider cette clé.","settings.license.active":"Actif","settings.license.active.tooltip":"État d'activation actuel de la licence.","settings.license.status.activeCancelPending.tooltip":"L'annulation est en attente, mais l'accès Pro reste actif jusqu'à la fin de la période de facturation en cours.","settings.license.inactive":"Inactif","settings.license.inactive.tooltip":"État d'activation actuel de la licence.","settings.license.expired":"Expiré","settings.license.expired.tooltip":"État d'activation actuel de la licence.","settings.license.unavailable":"Informations de licence indisponibles","settings.license.detail.cancelPending":"L'annulation est programmée. L'accès Pro reste actif jusqu'à la fin de la période de facturation en cours.","settings.license.reset":"Réinitialiser la licence","settings.readOnly":"Lecture seule","settings.readOnly.tooltip":"Cette section affiche les valeurs qui ne peuvent pas être modifiées à partir du WEPPY Dashboard.","settings.unavailable":"Paramètres indisponibles","settings.general.title":"Paramètres généraux","settings.general.title.tooltip":"Paramètres chauds qui s’appliquent immédiatement lorsqu’ils sont modifiés.","settings.general.liveApply":"Postuler en direct","settings.general.liveApply.tooltip":"Les modifications apportées à cette section sont appliquées immédiatement sans bouton de sauvegarde séparé.","settings.general.applied":"Appliqué","settings.general.logLevel":"Niveau de journalisation","settings.general.logLevel.tooltip":"Choisissez la quantité de détails que le serveur MCP écrit dans les journaux. Réduisez à « debug » lors de la recherche d’un problème.","settings.general.localHistory":"Enregistrement de l'historique des outils","settings.general.localHistory.tooltip":"Enregistrez les exécutions de l’outil AI sur le disque. Obligatoire pour les pages Outils et Historique.","settings.general.localStatistics":"Collecte de statistiques sur les outils","settings.general.localStatistics.tooltip":"Comptes agrégés d’utilisation des outils. Utilisé par les statistiques de présentation.","settings.general.contextCapture":"Capture de contexte","settings.general.contextCapture.tooltip":"Enregistrez le contexte d'exécution structuré afin que les vues Changelog et Playtest puissent le restituer.","settings.general.requestTimeout":"Expiration du délai d'action","settings.general.requestTimeout.tooltip":"Temps maximum (en ms) d'attente pour une seule action de l'outil avant d'échouer.","settings.general.requestTimeout.unit":"MS","settings.general.requestTimeout.unit.tooltip":"Le délai d’expiration de l’action est mesuré en millisecondes.","settings.cold.title":"Environnement serveur","settings.cold.title.tooltip":"Valeurs d'environnement de serveur en lecture seule chargées au démarrage.","settings.cold.httpPort.tooltip":"Numéro de port utilisé par le serveur HTTP MCP WEPPY Dashboard.","settings.cold.httpHost.tooltip":"Interface hôte à laquelle le serveur HTTP MCP WEPPY Dashboard se lie.","settings.cold.hint":"Définissez via des variables d’environnement pour modifier ces valeurs.","settings.dashboard.title":"Dashboard","settings.dashboard.title.tooltip":"Choisissez le comportement du WEPPY Dashboard au démarrage du serveur MCP.","settings.dashboard.nextStartBadge":"Prochain démarrage","settings.dashboard.autoOpen.label":"Ouvrir le Dashboard au démarrage de WEPPY","settings.dashboard.autoOpen.description":"Ouvre automatiquement ce Dashboard après le démarrage du serveur MCP.","settings.dashboard.autoOpen.nextStart":"S’applique au prochain démarrage du serveur MCP.","settings.dashboard.settingsFile.label":"Fichier de réglages","settings.dashboard.agentExample.label":"Demandez à votre Agent","settings.dashboard.agentExample.prompt":"« Désactive l’ouverture automatique du Dashboard. »","settings.dashboard.autoOpen.saving":"Enregistrement…","settings.dashboard.autoOpen.saved":"Enregistré pour le prochain démarrage du serveur.","settings.dashboard.autoOpen.error":"Échec de l’enregistrement. Le réglage précédent a été restauré.","dashboardAutoOpenGuide.eyebrow":"Préférence du Dashboard","dashboardAutoOpenGuide.title":"Choisissez comment ouvrir WEPPY Dashboard","dashboardAutoOpenGuide.currentOn":"L’ouverture automatique est activée. Ce Dashboard s’ouvre après le démarrage du serveur MCP.","dashboardAutoOpenGuide.currentOff":"L’ouverture automatique est désactivée. WEPPY n’ouvrira pas de nouvel onglet Dashboard au démarrage du serveur MCP.","dashboardAutoOpenGuide.changeAnytime":"Vous pouvez modifier ce choix à tout moment dans Settings.","dashboardAutoOpenGuide.agentHint":"Vous pouvez aussi demander à votre Agent : « Désactive l’ouverture automatique du Dashboard ».","dashboardAutoOpenGuide.statusOn":"Ouverture automatique activée","dashboardAutoOpenGuide.statusOff":"Ouverture automatique désactivée","dashboardAutoOpenGuide.keep":"Conserver le réglage actuel","dashboardAutoOpenGuide.turnOff":"Désactiver l’ouverture automatique","dashboardAutoOpenGuide.openSettings":"Ouvrir Settings","dashboardAutoOpenGuide.close":"Fermer le guide d’ouverture automatique","dashboardAutoOpenGuide.saving":"Enregistrement…","dashboardAutoOpenGuide.error":"Impossible d’enregistrer votre choix. Réessayez.","settings.language.title":"Langue","settings.language.title.tooltip":"Choisissez comment le texte de l'interface WEPPY Dashboard est localisé.","settings.language.dashboard":"WEPPY Dashboard Langue","settings.language.dashboard.tooltip":"Remplace la langue WEPPY Dashboard ou suit la langue du système lorsqu'elle est définie sur Auto.","settings.language.auto":"Auto","overview.l0.title":"Serveur MCP déconnecté","overview.l0.message":"Le serveur MCP ne répond pas. Le WEPPY Dashboard tentera automatiquement de se reconnecter.","overview.l0.step1":"Vérifiez que le processus serveur MCP est en cours d'exécution","overview.l0.step2":"Redémarrez la commande du serveur MCP si nécessaire","overview.l0.reconnecting":"Reconnexion automatique toutes les 3 secondes...","overview.l0.reconnectBtn":"Reconnecter","overview.l0.settingsBtn":"Vérifier les paramètres","overview.l1.pluginGuide":"Le plugin Roblox Studio n'est pas connecté","overview.l1.check1":"Roblox Studio est-il en cours d'exécution ?","overview.l1.check2":"Le WEPPY Plugin est-il installé ?","overview.l1.feedHint":"Les modifications apparaîtront ici une fois le plugin connecté","overview.metric.server":"Serveur","overview.metric.server.tooltip":"État d'exécution du serveur MCP et état du processus","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Connexion du plugin Roblox Studio et état de la version","overview.metric.agent":"Agent","overview.metric.agent.tooltip":"Agents de codage IA connectés et leur état d'exécution","overview.metric.agent.instancesUnit":"cas","overview.metric.sync":"Synchroniser","overview.metric.sync.tooltip":"Activité actuelle de synchronisation entre Studio et local","overview.metric.noAgent":"Aucun agent","overview.meta.version":"Version","overview.meta.version.tooltip":"Version du serveur MCP installée","overview.meta.session":"Session","overview.meta.session.tooltip":"Identifiant de session MCP actuel","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Identificateur de processus du système d'exploitation","overview.meta.uptime":"Temps de disponibilité","overview.meta.uptime.tooltip":"Temps écoulé depuis le démarrage du serveur MCP","overview.feed.title":"Modifications récentes du jeu","overview.feed.empty":"Aucun changement récent","overview.changelog.title":"Résumé des modifications de session","overview.changelog.entries":"Total","overview.changelog.scripts":"scripts","overview.changelog.instances":"cas","overview.changelog.properties":"propriétés","overview.changelog.assets":"actifs","overview.tier.title":"Utilisation du niveau","changelog.subtitle":"Historique des changements de jeu","changelog.filter.all":"Tous","changelog.filter.active":"Actif","changelog.filter.completed":"Complété","changelog.empty":"Aucune entrée du journal des modifications pour l'instant","changelog.basic.limit.title":"L'aperçu Basic affiche les 3 dernières sessions","changelog.basic.limit.body":"Passez à Pro pour parcourir la chronologie complète du journal des modifications pour ce lieu.","changelog.basic.metricLabel":"Journal des modifications visible / Total","changelog.basic.visible":"visible","changelog.basic.total":"total","changelog.card.active":"Actif","changelog.card.active.tooltip":"Cette session reçoit toujours de nouveaux changements de jeu.","changelog.card.completed":"Complété","changelog.card.completed.tooltip":"Cette session est terminée et aucun autre changement n'est attendu.","changelog.card.bootstrapStatus":"Amorçage","changelog.card.bootstrapStatus.tooltip":"Cette session contient uniquement l'instantané d'amorçage de synchronisation initial.","changelog.card.inProgress":"en cours","changelog.card.noChanges":"Aucun changement pour l'instant","changelog.card.noChanges.tooltip":"Aucun changement de jeu n'a encore été extrait pour cette session.","changelog.card.bootstrapSummary":"Instantané de synchronisation initial","changelog.card.bootstrapSummary.tooltip":"Les écritures initiales de synchronisation de fichiers sont regroupées en une seule ligne d'instantané d'amorçage.","changelog.card.sessionIntent":"Intention de session","changelog.card.scripts":"scripts","changelog.card.scripts.tooltip":"Modifications du script apportées au cours de cette session.","changelog.card.instances":"cas","changelog.card.instances.tooltip":"Instance créer, supprimer, déplacer ou cloner les modifications dans cette session.","changelog.card.modified":"modifié","changelog.card.created":"créé","changelog.card.deleted":"supprimé","changelog.card.moved":"déplacé","changelog.card.propertiesChanged":"propriétés modifiées","changelog.card.propertiesChanged.tooltip":"Modifications de la valeur Property enregistrées pour cette session.","changelog.card.lightingConfigured":"Éclairage configuré","changelog.card.lightingConfigured.tooltip":"Les paramètres d'éclairage ou d'ambiance ont été modifiés au cours de cette session.","changelog.card.terrainConfigured":"Terrain configuré","changelog.card.terrainConfigured.tooltip":"Les données de terrain ou les paramètres de terrain ont été modifiés au cours de cette session.","changelog.card.assetsInserted":"éléments insérés","changelog.card.assetsInserted.tooltip":"Actifs insérés dans le lieu lors de cette séance.","changelog.category.script":"Scripts","changelog.category.instance":"Instances","changelog.category.property":"Properties","changelog.category.lighting":"Éclairage","changelog.category.terrain":"Terrain","changelog.category.asset":"Actifs","changelog.detail.dialogLabel":"Détails du journal des modifications","changelog.detail.changeSummary":"Résumé des modifications","changelog.detail.changeSummary.tooltip":"Nombre de modifications de jeu extraites regroupées par catégorie pour cette session.","changelog.detail.changeTimeline":"Modifier la chronologie","changelog.detail.changeTimeline.tooltip":"Liste chronologique des modifications de jeu extraites pour cette session.","changelog.detail.context.title":"Résumé du contexte","changelog.detail.context.tooltip":"Contexte d'exécution structuré capturé pour cette session de journal des modifications.","changelog.detail.verification.title":"Vérification","changelog.detail.verification.tooltip":"Signaux de vérification liés à cette session de changelog.","changelog.detail.verification.label":"Résultat","changelog.detail.verification.status":"Statut","changelog.detail.verification.timestamp":"Enregistré à","changelog.detail.beforeAfter":"Avant et après","changelog.detail.filterCategory":"Catégorie","changelog.detail.filterCategory.tooltip":"Filtrez la chronologie sur une seule catégorie de changement.","changelog.detail.confidence.exact":"Exact","changelog.detail.confidence.exact.tooltip":"Les états avant et après ont été confirmés pour ce changement.","changelog.detail.confidence.partial":"Partiel","changelog.detail.confidence.partial.tooltip":"Seule une partie de l’état avant et après a pu être confirmée pour ce changement.","changelog.detail.confidence.afterOnly":"Après seulement","changelog.detail.confidence.afterOnly.tooltip":"Seul l'état résultant après le changement a pu être confirmé.","changelog.detail.confidence.intentOnly":"Intention uniquement","changelog.detail.confidence.intentOnly.tooltip":"Seule l'action demandée a été enregistrée, pas l'état résultant.","changelog.detail.confidence.unknown":"Inconnu","changelog.detail.confidence.unknown.tooltip":"Ce changement n’a pas pu être classé avec certitude à partir des données disponibles.","changelog.detail.noChanges":"Aucun changement dans cette catégorie","changelog.detail.backToList":"Retour à la liste","changelog.diff.empty":"Aucune différence disponible","changelog.diff.unified":"Unifié","changelog.diff.sideBySide":"Côte à côte","changelog.diff.before":"Avant","changelog.diff.after":"Après","sync.targets.title":"Studios connectés","sync.targets.refresh":"Actualiser","sync.targets.loading":"Chargement de l’état Sync des Studios…","sync.targets.unavailable":"L’état Sync des Studios est indisponible. Réessayez.","sync.targets.empty":"Aucun Studio connecté. Connectez WEPPY Plugin pour voir l’état Sync en direct.","sync.targets.unknownPlace":"Place inconnu","sync.targets.placeId":"Place ID","sync.targets.studioId":"Studio ID","sync.targets.connectionId":"Connection ID","sync.targets.connected":"Connecté","sync.targets.notReported":"Pas encore signalé","sync.targets.state.unknown":"Inconnu","sync.targets.state.off":"Sync désactivé","sync.targets.state.idle":"Sync activé · en attente","sync.targets.state.initializing":"Initialisation","sync.targets.state.syncing":"Synchronisation","sync.targets.state.paused":"En pause","sync.targets.state.error":"Erreur","sync.forwardStatus.label":"Envoi des modifications","sync.forwardStatus.tooltip":"Indique si les modifications en mode Edit peuvent être envoyées. Actif ne garantit pas que tous les fichiers locaux sont à jour.","sync.forwardStatus.inactive":"Désactivé","sync.forwardStatus.active":"Actif","sync.forwardStatus.paused_play":"Suspendu pendant Play","sync.forwardStatus.reconciling":"Vérification des modifications Edit","sync.forwardStatus.blocked":"Attention requise","sync.forwardStatus.unknown":"Inconnu","sync.forwardStatus.observedAt":"Observé","sync.forwardStatus.reason.review":"Vérifiez les modifications dans Studio Plugin.","sync.forwardStatus.reason.editChanged":"Edit a changé pendant la vérification. Vérifiez Sync dans Studio Plugin.","sync.forwardStatus.reason.failed":"Les modifications n'ont pas pu être confirmées. Vérifiez Sync dans Studio Plugin.","sync.forwardStatus.reason.fallback":"Consultez Studio Plugin pour plus de détails.","sync.stored.title":"Places enregistrés","sync.stored.data":"Données enregistrées","sync.stored.ambiguous":"Emplacement de stockage non confirmé","sync.detail.scope":"Détails Sync pour","sync.detail.readOnly":"La consultation ne modifie pas le routage Studio.","sync.detail.empty":"Sélectionnez un Studio connecté ou un Place enregistré.","sync.detail.unknown":"Ce Studio n’a pas encore signalé son état Sync.","sync.detail.error":"Sync a signalé une erreur. Consultez Studio Plugin pour les détails.","sync.detail.placeFolder":"Dossier du Place","sync.detail.placeFolder.tooltip":"Dossier partagé par les Studios qui ouvrent ce Place.","sync.detail.sharedData":"Le chemin, les nombres et le journal appartiennent au Place et sont partagés entre ses Studios.","sync.log.shared":"Journal partagé du Place","sync.log.unsafe":"L’emplacement de stockage n’est pas confirmé pour accéder au journal.","sync.log.unavailable":"Impossible de charger le journal du Place. Réessayez.","sync.log.loading":"Chargement du journal du Place…","sync.clear.selectedMessage":"Cette action supprime définitivement le journal Sync partagé de {place}.","sync.overlay.title":"Plugin Roblox Studio requis","sync.overlay.message":"L'état de synchronisation sera disponible une fois le plugin Roblox Studio connecté.","sync.overlay.check1":"Roblox Studio est-il en cours d'exécution ?","sync.overlay.check2":"Le WEPPY Plugin est-il installé ?","sync.status.title":"Statut de synchronisation","sync.status.title.tooltip":"État actuel de synchronisation du Studio et des fichiers locaux pour cet emplacement.","sync.status.forwardOnly":"Transférer uniquement","sync.status.forwardOnly.tooltip":"Le niveau Basic permet à Studio d'effectuer une synchronisation directe locale uniquement.","sync.status.place":"Lieu","sync.status.place.tooltip":"Nom et identifiant du lieu Roblox connecté.","sync.status.path":"Chemin","sync.status.path.tooltip":"Racine du système de fichiers local actuellement utilisée pour la sortie de synchronisation.","sync.status.instances":"Instances","sync.status.instances.tooltip":"Nombre total d'instances Roblox synchronisées suivies dans le miroir local.","sync.status.scripts":"Scripts","sync.status.scripts.tooltip":"Nombre total de fichiers de script synchronisés actuellement indexés pour cet emplacement.","sync.status.state":"État","sync.status.state.tooltip":"État de synchronisation d'exécution actuel signalé par le serveur.","sync.policy.title":"Politique Sync","sync.policy.title.tooltip":"Politique Sync effective signalée par le plugin Studio connecté.","sync.policy.activation":"Activation","sync.policy.activation.on":"Sync ON","sync.policy.activation.off":"Sync OFF","sync.policy.preset":"Flux de travail","sync.policy.preset.studio_first":"Studio d'abord","sync.policy.preset.bidirectional_review":"Bidirectionnel","sync.policy.preset.local_code_studio_world":"Code local, monde Studio","sync.policy.preset.custom":"Personnalisé","sync.policy.apply.title":"Application des changements locaux à Studio","sync.policy.apply.description":"Indique si les changements locaux sont vérifiés d’abord ou appliqués automatiquement à Studio.","sync.policy.apply.content":"Modifications du contenu","sync.policy.apply.content.tooltip":"Changements locaux du code Script, des propriétés et des propriétés de service. Créer, supprimer, renommer et déplacer relèvent de la structure.","sync.policy.apply.structure":"Modifications de la structure","sync.policy.apply.structure.tooltip":"Création, suppression, renommage et déplacement locaux d’instances. La suppression locale automatique exige aussi l’option de suppression séparée ci-dessous.","sync.policy.apply.manual":"Vérifier d'abord","sync.policy.apply.auto":"Application automatique","sync.policy.scope.disclosure":"Directions par périmètre","sync.policy.scope.scriptSource":"Source des scripts","sync.policy.scope.properties":"Propriétés","sync.policy.scope.structure":"Structure","sync.policy.scope.serviceProperties":"Propriétés des services","sync.policy.endpoint.local":"Local","sync.policy.endpoint.studio":"Studio","sync.policy.direction.forward":"Studio → Local","sync.policy.direction.forward.tooltip":"Les modifications de Studio sont écrites dans les fichiers locaux.","sync.policy.direction.reverse":"Local → Studio","sync.policy.direction.reverse.tooltip":"Les modifications des fichiers locaux sont appliquées dans Studio.","sync.policy.direction.bidirectional":"Dans les deux sens","sync.policy.direction.bidirectional.tooltip":"Les modifications peuvent aller de Studio vers les fichiers locaux et des fichiers locaux vers Studio.","sync.policy.safety.localDeletes":"Suppression locale → supprimer l’instance Studio","sync.policy.safety.review":"Vérifier avant suppression","sync.policy.safety.review.tooltip":"Les suppressions de fichiers locaux attendent une vérification avant de retirer les instances Studio correspondantes. Cette fonction est distincte du nettoyage automatique de UI Studio.","sync.policy.safety.auto":"Suppression automatique dans Studio","sync.policy.safety.auto.tooltip":"La suppression de fichiers locaux peut retirer automatiquement les instances Studio correspondantes. Cette fonction est distincte du nettoyage automatique de UI Studio.","sync.policy.reviewRequired":"Vérifiez cette politique dans le plugin Studio avant de lancer Sync.","sync.log.title":"Journal de synchronisation","sync.log.empty":"Aucun événement de synchronisation pour l'instant","sync.log.type.fullSyncStart":"DÉBUT","sync.log.type.fullSyncStart.tooltip":"La synchronisation complète a commencé.","sync.log.type.fullSyncProgress":"EN COURS","sync.log.type.fullSyncProgress.tooltip":"La synchronisation complète enregistre les données.","sync.log.type.fullSyncComplete":"TERMINÉ","sync.log.type.fullSyncComplete.tooltip":"La synchronisation complète est terminée.","sync.log.type.fullSyncFailed":"ÉCHEC","sync.log.type.fullSyncFailed.tooltip":"La synchronisation complète s’est arrêtée avant la fin.","sync.log.type.write":"WRITE","sync.log.type.write.tooltip":"Une nouvelle sortie de synchronisation a été écrite sur le disque.","sync.log.type.update":"UPDATE","sync.log.type.update.tooltip":"Un fichier ou une instance synchronisée existante a été mise à jour.","sync.log.type.delete":"DELETE","sync.log.type.delete.tooltip":"Un fichier ou une instance synchronisé a été supprimé.","sync.log.type.idle":"IDLE","sync.log.type.idle.tooltip":"Un événement de synchronisation a été enregistré sans mutation de fichier.","sync.upgrade.title":"Découvrir la synchronisation complète avec Pro","sync.upgrade.benefit1":"Synchronisation bidirectionnelle : modifiez des fichiers, appliquez-les automatiquement à Studio","sync.upgrade.benefit2":"Synchronisation inversée : renvoyer les modifications de fichiers vers Studio","sync.upgrade.benefit3":"Historique de synchronisation complet et journal des modifications détaillé","sync.upgrade.buy":"Voir Pro","playtest.status.title":"Statut du test de jeu","playtest.status.title.tooltip":"État actuel de la session de test de jeu Roblox signalé par Studio.","playtest.status.mode":"Mode","playtest.status.mode.tooltip":"Mode de lancement du playtest Studio pour la session en cours.","playtest.status.mode.value.tooltip":"Mode de test de jeu Roblox Studio spécifique actuellement utilisé.","playtest.status.mode.play":"Jouer","playtest.status.mode.run":"Courir","playtest.status.mode.server":"Serveur","playtest.status.mode.edit":"Modifier","playtest.status.place.tooltip":"Lieu Roblox actuellement associé à cette session de playtest.","playtest.status.state.running":"En cours d'exécution","playtest.status.state.running.tooltip":"Une session de test de jeu Roblox est actuellement en cours.","playtest.status.state.paused":"En pause","playtest.status.state.paused.tooltip":"La session de test de jeu Roblox en cours est suspendue.","playtest.status.state.notRunning":"Ne fonctionne pas","playtest.status.state.notRunning.tooltip":"Aucune session de test de jeu Roblox n'est actuellement en cours.","playtest.control.play":"Jouer","playtest.control.pause":"Pause","playtest.control.resume":"CV","playtest.control.stop":"Arrêt","playtest.history.title":"Historique des tests","playtest.history.search":"Rechercher les résultats de test","playtest.history.filter":"Résultat","playtest.history.filterAll":"Tous les résultats","playtest.history.filteredCount":"{{visible}} résultats sur {{total}}","playtest.history.title.tooltip":"Exécutions de tests de jeu automatisés enregistrés pour ce projet.","playtest.history.empty":"Aucun résultat de test pour l'instant","playtest.history.mode":"Mode","playtest.history.mode.tooltip":"Mode Playtest utilisé pour ce test enregistré.","playtest.history.status.passed":"Passé","playtest.history.status.failed":"Échoué","playtest.history.status.running":"En cours d'exécution","playtest.history.status.unknown":"Inconnu","playtest.history.status.tooltip":"État des résultats enregistrés pour cette exécution de test de jeu automatisé.","playtest.empty.title":"Aucun résultat de test de jeu pour l'instant","playtest.empty.message":"Les résultats apparaîtront ici après l’exécution d’un Playtest par l’agent IA.","playtest.empty.message.before":"Les résultats apparaîtront ici après l’exécution d’un Playtest par l’agent IA.","playtest.empty.message.after":"","playtest.empty.runTest.tooltip":"Ask the AI Agent to run a Playtest when you need a fresh report.","playtest.report.title":"Rapport sélectionné","playtest.report.title.tooltip":"Sortie détaillée pour l’exécution de test de jeu automatisé actuellement sélectionnée.","playtest.detail.dialogLabel":"Détail du rapport de playtest","playtest.detail.loading":"Chargement du rapport...","playtest.detail.errorTitle":"Rapport indisponible","playtest.report.content":"Rapport","playtest.report.content.tooltip":"Résumé de la démarque pour l'exécution du test de jeu automatisé sélectionné.","playtest.report.logs":"Journaux","playtest.report.logs.tooltip":"Journaux d'exécution capturés pour l'exécution du test de lecture automatisé sélectionné.","playtest.context.contextId":"ID de contexte","playtest.context.why":"Pourquoi ce test a été exécuté","playtest.context.expected":"Attendu","playtest.context.observed":"Observé","playtest.report.empty":"Aucun contenu de rapport disponible","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest est une fonctionnalité réservée à Pro","playtest.basic.desc":"Contrôlez les tests de jeu à partir de WEPPY Dashboard, exécutez des tests automatisés et consultez des rapports de test détaillés.","playtest.basic.benefit1":"Commandes de lecture/pause/arrêt en un clic","playtest.basic.benefit2":"Exécution de tests automatisés via un agent IA","playtest.basic.benefit3":"Historique des tests avec suivi des réussites/échecs","playtest.basic.benefit4":"Rapports de tests de démarque détaillés","playtest.sample.badge":"Aperçu de la vue du playtest Pro","playtest.sample.title":"Vous prévisualisez l'écran de test de jeu qui devient disponible après la mise à niveau vers Pro.","playtest.sample.message":"Cet aperçu utilise des exemples de données. Le contrôle des tests de jeu en direct, la gestion de l'historique et les rapports réels sont débloqués avec Pro.","playtest.sample.clearDisabled":"Passez à Pro pour effacer l'historique des tests de jeu en direct.","playtest.sample.place":"Aperçu de l'arène","playtest.sample.history.name":"Exemple de test de fumée dans une arène","playtest.sample.context.why":"Apparaissez dans l'arène, survivez à l'ouverture et vérifiez que le HUD répond immédiatement.","playtest.sample.context.expected":"Le joueur apparaît en toute sécurité, l'interface utilisateur du compte à rebours apparaît en une seconde et la première vague démarre sans erreur.","playtest.sample.context.observed":"Protection contre l'apparition maintenue, le HUD mis à jour à temps et la première vague terminée sans régression de gameplay.","playtest.sample.report.markdown":`# Exemple de test de fumée d'arène
204
204
 
205
205
  - Flux d'apparition : PASS
206
206
  - Compte à rebours HUD : PASS
@@ -375,7 +375,7 @@ Ceci est un exemple d’aperçu. Passez à Pro pour exécuter des tests de jeu e
375
375
  *
376
376
  * This source code is licensed under the ISC license.
377
377
  * See the LICENSE file in the root directory of this source tree.
378
- */const fv=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],vv=Fe("x",fv),Kp=[{labelKey:"sidebar.overview",route:"/",icon:Jf,minLevel:"disconnected",lazy:()=>ia(()=>import("./OverviewPage-DAHV_J9P.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]))},{labelKey:"sidebar.connection",route:"/connection",icon:dv,minLevel:"disconnected",lazy:()=>ia(()=>import("./ConnectionPage-B3NzHXCM.js"),__vite__mapDeps([10,1,2,3,4,5,6,11,12,13,14,15,16,17]))},{labelKey:"sidebar.sync",route:"/sync",icon:Gp,minLevel:"serverOnly",lazy:()=>ia(()=>import("./SyncPage-DTwGdjCc.js"),__vite__mapDeps([18,2,3,1,6,11,12,13,19,20,21]))},{labelKey:"sidebar.assets",route:"/assets",icon:rv,minLevel:"serverOnly",lazy:()=>ia(()=>import("./AssetsPage-DGSoVLnO.js"),__vite__mapDeps([22,11,12,13,2,3,23,24,6,25,15,26,14,27,28]))},{labelKey:"sidebar.changelog",route:"/changelog",icon:Gf,minLevel:"serverOnly",lazy:()=>ia(()=>import("./ChangelogPage-B9dCtQOo.js"),__vite__mapDeps([29,2,3,11,12,13,30,23,24,31,6,1,7,8,32]))},{labelKey:"sidebar.playtest",route:"/playtest",icon:Vf,minLevel:"serverOnly",lazy:()=>ia(()=>import("./PlaytestPage-DoyKVZGe.js"),__vite__mapDeps([33,19,20,2,3,1,30,23,24,31,6,11,12,13,34,25,15,26,14,16,27,35,36]))},{labelKey:"sidebar.ui_studio",route:"/ui-studio",icon:Kf,minLevel:"serverOnly",lazy:()=>ia(()=>import("./UiStudioPage-Sg9Sc7dA.js"),__vite__mapDeps([37,1,6,2,3,38,39,30,23,24,31,25,15,26,14,40]))},{labelKey:"sidebar.tools",route:"/tools",icon:mv,minLevel:"serverOnly",lazy:()=>ia(()=>import("./ToolsPage-BYlAjTDF.js"),__vite__mapDeps([41,2,3,6,11,12,13,30,23,24,31,42]))}],Fl=[{labelKey:"sidebar.controls",route:"/controls",icon:Yp,minLevel:"serverOnly",lazy:()=>ia(()=>import("./ControlsPage-dQj67_QM.js"),__vite__mapDeps([43,2,3,1,12,13,6,44,45,35,15]))},{labelKey:"sidebar.whatsNew",route:"/whats-new",icon:If,minLevel:"disconnected",lazy:()=>ia(()=>import("./WhatsNewPage-Xu9jN9ei.js"),__vite__mapDeps([46,2,3,34,25,15,26,47]))}],Ml="https://github.com/hope1026/weppy-roblox-mcp",Sv="https://weppyai.com";function Gl(i){return i?/Mac OS X|Macintosh/i.test(i)?"macOS":/Windows NT/i.test(i)?"Windows":/Linux/i.test(i)?"Linux":"":""}function $p(i){var S,k,b,E,z;const s=Gl(typeof navigator<"u"?navigator.userAgent:""),r=i.status,d=(r==null?void 0:r.version)??"",u=((k=(S=r==null?void 0:r.pluginClients)==null?void 0:S[0])==null?void 0:k.pluginVersion)??"",p=((E=(b=r==null?void 0:r.pluginClients)==null?void 0:b[0])==null?void 0:E.studioVersion)??"",g=d||u||p?[d?`MCP ${d}`:"",u?`Plugin ${u}`:"",p?`Studio ${p}`:""].filter(Boolean).join(" / "):"",m=((z=r==null?void 0:r.aiClientNames)==null?void 0:z[0])??"",y=(r==null?void 0:r.nodeVersion)??"";return{os:s,nodeVersion:y,aiClient:m,pluginVersionLabel:g}}function bv(i){const{os:s,nodeVersion:r,aiClient:d,pluginVersionLabel:u}=$p(i),p=new URLSearchParams;return p.set("template","bug_report.yml"),s&&p.set("os",s),r&&p.set("node",r),d&&p.set("ai-client",d),u&&p.set("plugin-version",u),p.toString()}function Pv(i){const{os:s,nodeVersion:r,aiClient:d,pluginVersionLabel:u}=$p(i),p=new URLSearchParams;return p.set("template","install_help.yml"),s&&p.set("os",s),r&&p.set("node",r),d&&p.set("ai-client",d),u&&p.set("plugin-version",u),p.toString()}const kv=[{id:"bug",labelKey:"sidebar.help.bug",tooltipKey:"sidebar.help.bug.tooltip",icon:Tf,buildUrl:i=>`${Ml}/issues/new?${bv(i)}`},{id:"feature",labelKey:"sidebar.help.feature",tooltipKey:"sidebar.help.feature.tooltip",icon:Qf,buildUrl:()=>`${Ml}/issues/new?template=feature_request.yml`},{id:"discussions",labelKey:"sidebar.help.discussions",tooltipKey:"sidebar.help.discussions.tooltip",icon:ov,buildUrl:i=>`${Ml}/issues/new?${Pv(i)}`},{id:"troubleshooting",labelKey:"sidebar.help.troubleshooting",tooltipKey:"sidebar.help.troubleshooting.tooltip",icon:Ef,buildUrl:i=>`${Sv}/${i.locale}/docs/troubleshooting/`}];function wv(){const[i,s]=A.useState("basic"),[r,d]=A.useState(0),[u,p]=A.useState(0),[g,m]=A.useState(0),[y,S]=A.useState(!0);A.useEffect(()=>{let b=!1;async function E(){try{return await Wp("auto")}catch{return null}}async function z(){var M,le;try{const[W,ae]=await Promise.all([E(),Pt.get("/api/dashboard/tool-stats").catch(()=>null)]);if(b)return;if(W!=null&&W.tier&&s(W.tier),ae!=null&&ae.tierSummary){const G=((M=ae.tierSummary.basic)==null?void 0:M.totalCalls)??0,ue=((le=ae.tierSummary.pro)==null?void 0:le.totalCalls)??0;m(G),p(ue),d(G+ue)}}catch{}finally{b||S(!1)}}z();const O=new td;O.connect();const L=O.on("license",()=>{E().then(M=>{!b&&(M!=null&&M.tier)&&s(M.tier)})});return()=>{b=!0,L(),O.disconnect()}},[]);const k=r>0?u/r*100:0;return{tier:i,proUsagePercent:k,totalCalls:r,proCalls:u,basicCalls:g,loading:y}}const Cv="https://weppyai.com/plans/";function Do(i){const s=new URLSearchParams({utm_source:"weppy_dashboard",utm_medium:"app",utm_campaign:"pro_upgrade",utm_content:i});return`${Cv}?${s.toString()}`}const Av={sidebarUpgrade:Do("sidebar_upgrade"),settingsLicense:Do("settings_license"),sync:Do("sync_tier_panel"),changelog:Do("changelog_limit_notice"),playtest:Do("playtest_sample_banner"),uiStudioAnalysis:Do("ui_studio_analysis_banner"),uiStudioHistory:Do("ui_studio_history_banner")},Rv=5e3,xv=5;function Iv(i){return i.replace(/^\//,"").split("/")[0]||"overview"}function Dv(i,s){const r=new URLSearchParams(s);if(i==="ui-studio")return r.get("tab")==="history"?"ui_studio_history":"ui_studio_analysis";if(i==="tools")return"tools_history";if(i==="changelog")return"changelog_all"}function ps(i,s){const r=Iv(i);if(s===void 0)return r;const d=Dv(r,s);return d?{page:r,tab:d}:{page:r}}let yi=[],up=null;function Xp(){if(yi.length===0)return;const i=yi.splice(0),s=`${Bn}/api/dashboard/analytics`,r=JSON.stringify({events:i});fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:r}).catch(()=>{})}function Ev(){up||(up=setInterval(Xp,Rv))}function cp(i){yi.push(i),Ev(),yi.length>=xv&&Xp()}typeof window<"u"&&window.addEventListener("beforeunload",()=>{if(yi.length===0)return;const i=`${Bn}/api/dashboard/analytics`,s=JSON.stringify({events:yi.splice(0)});navigator.sendBeacon(i,new Blob([s],{type:"application/json"}))});function gs(){const i=A.useCallback((r,d)=>{cp({name:r,params:d})},[]),s=A.useCallback(r=>{cp({name:"dashboard_page_view",params:{...typeof r=="string"?{page:r}:r}})},[]);return{trackEvent:i,trackPageView:s}}const jv="_widget_1q1ab_1",Tv="_header_1q1ab_12",zv="_sparkle_1q1ab_18",Uv="_title_1q1ab_23",Lv="_actions_1q1ab_31",Mv="_cta_1q1ab_37",Hv="_licenseCta_1q1ab_38",Nv="_collapsedGroup_1q1ab_70",qv="_collapsed_1q1ab_70",Ov="_collapsedSecondary_1q1ab_91",oa={widget:jv,header:Tv,sparkle:zv,title:Uv,actions:Lv,cta:Mv,licenseCta:Hv,collapsedGroup:Nv,collapsed:qv,collapsedSecondary:Ov};function Bv({collapsed:i=!1}){const{tier:s}=wv(),{t:r}=ma(),{trackEvent:d}=gs(),{pathname:u,search:p}=Kt();if(s==="pro")return null;const g=Av.sidebarUpgrade,m="/settings?section=license",y=ps(u,p),S=()=>{d("dashboard_click_event",{click_target:"upgrade_cta",placement:"sidebar_upgrade",...y})},k=()=>{d("dashboard_click_event",{click_target:"license_shortcut",placement:"sidebar_license",...y})};return i?w.jsxs("div",{className:oa.collapsedGroup,children:[w.jsx("a",{href:g,target:"_blank",rel:"noopener noreferrer",className:oa.collapsed,title:r("upgrade.title","View Pro"),"aria-label":r("upgrade.title","View Pro"),onClick:S,children:w.jsx(dp,{size:18,strokeWidth:1.75})}),w.jsx(zo,{to:m,className:`${oa.collapsed} ${oa.collapsedSecondary}`,title:r("upgrade.licenseShortcut","Enter License"),"aria-label":r("upgrade.licenseShortcut","Enter License"),onClick:k,children:w.jsx(lp,{size:18,strokeWidth:1.75})})]}):w.jsxs("div",{className:oa.widget,children:[w.jsxs("div",{className:oa.header,children:[w.jsx(dp,{size:16,strokeWidth:1.75,className:oa.sparkle}),w.jsx("span",{className:oa.title,children:r("upgrade.tagline","Check Pro features")})]}),w.jsxs("div",{className:oa.actions,children:[w.jsxs("a",{href:g,target:"_blank",rel:"noopener noreferrer",className:oa.cta,onClick:S,children:[r("upgrade.cta","View Pro")," →"]}),w.jsxs(zo,{to:m,className:oa.licenseCta,onClick:k,children:[w.jsx(lp,{size:14,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"}),w.jsx("span",{children:r("upgrade.licenseShortcut","Enter License")})]})]})]})}const _v="_backdrop_1wgux_1",Wv="_dialog_1wgux_11",Vv="_header_1wgux_21",Fv="_titleBlock_1wgux_30",Gv="_title_1wgux_30",Yv="_subtitle_1wgux_42",Kv="_closeButton_1wgux_49",$v="_body_1wgux_67",Xv="_statusBox_1wgux_73",Jv="_errorBox_1wgux_74",Zv="_spin_1wgux_92",Qv="_bundleBlock_1wgux_102",eS="_label_1wgux_107",tS="_bundleName_1wgux_115",aS="_guidanceBox_1wgux_127",oS="_includedList_1wgux_143",iS="_includedItem_1wgux_152",sS="_actions_1wgux_163",nS="_button_1wgux_169",rS="_primaryLink_1wgux_170",lS="_hint_1wgux_206",We={backdrop:_v,dialog:Wv,header:Vv,titleBlock:Fv,title:Gv,subtitle:Yv,closeButton:Kv,body:$v,statusBox:Xv,errorBox:Jv,spin:Zv,bundleBlock:Qv,label:eS,bundleName:tS,guidanceBox:aS,includedList:oS,includedItem:iS,actions:sS,button:nS,primaryLink:rS,hint:lS};function Hl(){return typeof navigator<"u"?navigator.userAgent:""}function dS(i){window.open(i,"_blank","noopener,noreferrer")}function uS({open:i,fallbackHref:s,onClose:r}){const{locale:d,t:u}=ma(),p=A.useId(),[g,m]=A.useState(!1),[y,S]=A.useState(null),[k,b]=A.useState(null),[E,z]=A.useState("idle");if(A.useEffect(()=>{if(!i)return;let G=!1;const ue=Hl();return m(!0),S(null),b(null),z("idle"),Pt.post("/api/dashboard/support/bug-report",{os:Gl(ue),userAgent:ue,locale:d}).then(De=>{G||(S(De),m(!1))}).catch(()=>{G||(b(u("bugReportDialog.error","Could not create the diagnostics bundle. You can still open GitHub without diagnostics.")),m(!1))}),()=>{G=!0}},[i,d]),A.useEffect(()=>{if(!i||g)return;function G(ue){ue.key==="Escape"&&r()}return window.addEventListener("keydown",G),()=>window.removeEventListener("keydown",G)},[i,g,r]),!i)return null;async function O(){if(y)try{z("opening"),await Pt.post("/api/dashboard/support/bug-report/reveal",{bundleName:y.bundleName}),z("opened")}catch{z("failed")}}const L=y!==null,M=(y==null?void 0:y.issueUrl)??s,le=(y==null?void 0:y.includedFiles)??[],W=E==="opening"?u("bugReportDialog.reveal.opening","Opening..."):E==="opened"?u("bugReportDialog.reveal.opened","Opened location"):u("bugReportDialog.reveal","Reveal in Finder"),ae=w.jsx("div",{className:We.backdrop,onClick:g?void 0:r,children:w.jsxs("section",{className:We.dialog,role:"dialog","aria-modal":"true","aria-labelledby":p,onClick:G=>G.stopPropagation(),children:[w.jsxs("div",{className:We.header,children:[w.jsxs("div",{className:We.titleBlock,children:[w.jsx("h2",{id:p,className:We.title,children:u("bugReportDialog.title","diagnostics.zip can help us investigate")}),w.jsx("p",{className:We.subtitle,children:u("bugReportDialog.subtitle","WEPPY created a diagnostics zip on your computer. It includes Studio, plugin, Sync, and tool logs that can help us understand what happened.")})]}),w.jsx("button",{type:"button",className:We.closeButton,"aria-label":u("bugReportDialog.close","Close"),onClick:r,disabled:g,children:w.jsx(vv,{size:16,strokeWidth:1.75,"aria-hidden":"true"})})]}),w.jsxs("div",{className:We.body,children:[g&&w.jsxs("div",{className:We.statusBox,role:"status",children:[w.jsx(tv,{className:We.spin,size:18,strokeWidth:1.75,"aria-hidden":"true"}),w.jsx("span",{children:u("bugReportDialog.loading","Preparing diagnostics.zip...")})]}),k&&w.jsxs("div",{className:We.errorBox,role:"alert",children:[w.jsx(qf,{size:18,strokeWidth:1.75,"aria-hidden":"true"}),w.jsx("span",{children:k})]}),L&&w.jsxs(w.Fragment,{children:[w.jsxs("div",{className:We.guidanceBox,children:[w.jsx("p",{children:u("bugReportDialog.optional","You can submit the bug report without this file, but attaching it usually helps us find the cause faster.")}),w.jsx("p",{children:u("bugReportDialog.attachHow","To attach it, download or reveal the zip, then add it to the Diagnostics ZIP (optional) upload field on GitHub before you submit.")})]}),w.jsxs("div",{className:We.bundleBlock,children:[w.jsx("span",{className:We.label,children:u("bugReportDialog.bundle","Bundle")}),w.jsx("code",{className:We.bundleName,children:y.bundleName})]}),w.jsxs("div",{className:We.bundleBlock,children:[w.jsx("span",{className:We.label,children:u("bugReportDialog.included","Included")}),w.jsx("ul",{className:We.includedList,children:le.length>0?le.map(G=>w.jsx("li",{className:We.includedItem,children:G.label},`${G.label}:${G.archivePath??G.path}`)):w.jsx("li",{className:We.includedItem,children:u("bugReportDialog.included.none","No log files found")})})]}),E==="failed"&&w.jsxs("div",{className:We.errorBox,role:"alert",children:[w.jsx(rp,{size:18,strokeWidth:1.75,"aria-hidden":"true"}),w.jsx("span",{children:u("bugReportDialog.reveal.failed","Could not open the file location.")})]})]}),w.jsxs("div",{className:We.actions,children:[L&&w.jsxs(w.Fragment,{children:[w.jsxs("a",{className:We.primaryLink,href:y.downloadUrl,download:y.bundleName,children:[w.jsx(Mf,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),u("bugReportDialog.download","1. Download diagnostics.zip")]}),w.jsxs("button",{type:"button",className:We.button,onClick:()=>void O(),disabled:E==="opening",children:[w.jsx(rp,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),W]})]}),k&&!L&&w.jsxs("button",{type:"button",className:We.button,onClick:()=>{b(null),m(!0),Pt.post("/api/dashboard/support/bug-report",{os:Gl(Hl()),userAgent:Hl(),locale:d}).then(G=>{S(G),m(!1)}).catch(()=>{b(u("bugReportDialog.error","Could not create the diagnostics bundle. You can still open GitHub without diagnostics.")),m(!1)})},children:[w.jsx(Gp,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),u("bugReportDialog.retry","Try again")]}),w.jsxs("button",{type:"button",className:We.button,onClick:()=>dS(M),disabled:g,children:[w.jsx(Fp,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),L?u("bugReportDialog.openGithub","2. Open GitHub issue"):u("bugReportDialog.openGithubFallback","Open GitHub without diagnostics")]})]}),w.jsx("p",{className:We.hint,children:u("bugReportDialog.hint","The zip can contain local logs and project context. Review it before attaching if you want to share it.")})]})]})});return typeof document>"u"?ae:Mn.createPortal(ae,document.body)}const cS="_sidebar_19hyu_2",pS="_brand_19hyu_17",gS="_brandIcon_19hyu_28",yS="_brandText_19hyu_33",hS="_brandTextPro_19hyu_44",mS="_nav_19hyu_50",fS="_spacer_19hyu_57",vS="_navLink_19hyu_63",SS="_active_19hyu_84",bS="_disabled_19hyu_91",PS="_icon_19hyu_102",kS="_label_19hyu_113",wS="_secondaryDivider_19hyu_120",CS="_secondaryNav_19hyu_127",AS="_secondaryNavEntry_19hyu_134",RS="_secondaryItemDivider_19hyu_140",xS="_helpDivider_19hyu_147",IS="_helpGroupTitle_19hyu_154",DS="_helpNav_19hyu_165",ES="_externalIcon_19hyu_172",et={sidebar:cS,brand:pS,brandIcon:gS,brandText:yS,brandTextPro:hS,nav:mS,spacer:fS,navLink:vS,active:SS,disabled:bS,icon:PS,label:kS,secondaryDivider:wS,secondaryNav:CS,secondaryNavEntry:AS,secondaryItemDivider:RS,helpDivider:xS,helpGroupTitle:IS,helpNav:DS,externalIcon:ES},jS={bug:"sidebar_help_bug",feature:"sidebar_help_feature",discussions:"sidebar_help_community",troubleshooting:"sidebar_help_troubleshooting"};function TS(){const[i,s]=A.useState(!1);return A.useEffect(()=>{if(typeof window>"u"||!window.matchMedia)return;const r=window.matchMedia("(max-width: 768px)"),d=()=>s(r.matches);return d(),r.addEventListener("change",d),()=>r.removeEventListener("change",d)},[]),i}const pp={disconnected:0,serverOnly:1,studioConnected:2};function zS(i,s){return pp[i]>=pp[s]}function US(i,s){return i==="serverOnly"?s("sidebar.gate.l1","MCP server connection required"):i==="studioConnected"?s("sidebar.gate.l2","Roblox Studio plugin connection required"):""}function gp({item:i}){const{level:s}=_n(),{t:r}=ma(),d=zS(s,i.minLevel),u=i.icon,p=w.jsxs(zm,{to:i.route,end:i.route==="/",className:({isActive:g})=>[et.navLink,g?et.active:"",d?"":et.disabled].filter(Boolean).join(" "),onClick:g=>{d||g.preventDefault()},children:[w.jsx("span",{className:et.icon,children:w.jsx(u,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})}),w.jsx("span",{className:et.label,children:r(i.labelKey)})]});return d?p:w.jsx(Yt,{text:US(i.minLevel,r),children:p})}function LS({item:i,ctx:s}){const{t:r}=ma(),{trackEvent:d}=gs(),{pathname:u,search:p}=Kt(),g=i.icon,m=i.buildUrl(s),y=r(i.tooltipKey,""),S=ps(u,p),[k,b]=A.useState(!1),E=w.jsxs("a",{href:m,target:"_blank",rel:"noopener noreferrer",className:et.navLink,"data-testid":`sidebar-help-${i.id}`,onClick:O=>{d("dashboard_click_event",{click_target:jS[i.id],placement:"sidebar_help",...S}),i.id==="bug"&&(O.preventDefault(),b(!0))},children:[w.jsx("span",{className:et.icon,children:w.jsx(g,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})}),w.jsx("span",{className:et.label,children:r(i.labelKey)}),w.jsx("span",{className:et.externalIcon,"aria-hidden":"true",children:w.jsx(Fp,{size:12,strokeWidth:1.75})})]}),z=y?w.jsx(Yt,{text:y,children:E}):E;return w.jsxs(w.Fragment,{children:[z,i.id==="bug"&&w.jsx(uS,{open:k,fallbackHref:m,onClose:()=>b(!1)})]})}function MS(){const[i,s]=A.useState("basic"),r=TS(),{status:d}=_n(),{locale:u,t:p}=ma(),g={locale:u,status:d};return A.useEffect(()=>{let m=!1;async function y(){try{const b=await Wp("auto");!m&&(b!=null&&b.tier)&&s(b.tier)}catch{m||s("basic")}}y();const S=new td;S.connect();const k=S.on("license",()=>{y()});return()=>{m=!0,k(),S.disconnect()}},[]),w.jsxs("aside",{className:et.sidebar,children:[w.jsxs("div",{className:et.brand,children:[w.jsx("span",{className:et.brandIcon,children:w.jsx(Uf,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})}),w.jsx("span",{"data-testid":"sidebar-brand-text",className:[et.brandText,i==="pro"?et.brandTextPro:""].filter(Boolean).join(" "),children:"WEPPY"})]}),w.jsx("nav",{className:et.nav,children:Kp.map(m=>w.jsx(gp,{item:m},m.route))}),w.jsx("div",{className:et.secondaryDivider}),w.jsx("nav",{className:et.secondaryNav,children:Fl.map((m,y)=>w.jsxs("div",{className:et.secondaryNavEntry,children:[w.jsx(gp,{item:m}),y<Fl.length-1?w.jsx("div",{className:et.secondaryItemDivider,"data-testid":"sidebar-controls-whats-new-divider","aria-hidden":"true"}):null]},m.route))}),w.jsx("div",{className:et.helpDivider,"aria-hidden":"true"}),w.jsx("div",{className:et.helpGroupTitle,"aria-label":p("sidebar.help.group"),children:p("sidebar.help.group")}),w.jsx("nav",{className:et.helpNav,"aria-label":p("sidebar.help.group"),children:kv.map(m=>w.jsx(LS,{item:m,ctx:g},m.id))}),w.jsx("div",{className:et.spacer}),w.jsx(Bv,{collapsed:r})]})}async function HS(){return Pt.get("/api/dashboard/place-summary")}const Yl=new Set;function NS(i){return Yl.add(i),()=>Yl.delete(i)}async function qS(){return Pt.get("/api/dashboard/sync-root")}async function rP(){return Pt.post("/api/dashboard/sync-root/pick")}async function lP(i){const s=await Pt.patch("/api/dashboard/sync-root",{projectRoot:i});return Yl.forEach(r=>r(s)),s}const OS=[{id:"2026-09-26-sync-status-and-review",date:"2026-09-26",title:{en:"Sync status across Studios and change review have been improved",ko:"여러 Studio의 Sync 상태와 변경 검토가 개선되었습니다",es:"Se mejoraron el estado de Sync de varios Studios y la revisión de cambios","pt-br":"O estado do Sync em vários Studios e a revisão de alterações foram aprimorados",ja:"複数のStudioのSync状態と変更内容の確認を改善しました",id:"Status Sync di beberapa Studio dan peninjauan perubahan telah ditingkatkan",de:"Sync-Status mehrerer Studios und die Änderungsprüfung wurden verbessert","fr-fr":"L’état de Sync des différents Studios et la revue des modifications ont été améliorés"},body:{en:`On the Dashboard Sync page, you can see the Sync status of each connected Studio and select one to view its settings and details. Selecting or refreshing a Studio does not start or stop Sync or change which Studio an AI Agent uses.
378
+ */const fv=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],vv=Fe("x",fv),Kp=[{labelKey:"sidebar.overview",route:"/",icon:Jf,minLevel:"disconnected",lazy:()=>ia(()=>import("./OverviewPage-DaR6Zf4N.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]))},{labelKey:"sidebar.connection",route:"/connection",icon:dv,minLevel:"disconnected",lazy:()=>ia(()=>import("./ConnectionPage-j6oGLSEC.js"),__vite__mapDeps([10,1,2,3,4,5,6,11,12,13,14,15,16,17]))},{labelKey:"sidebar.sync",route:"/sync",icon:Gp,minLevel:"serverOnly",lazy:()=>ia(()=>import("./SyncPage-CZ3NhJOo.js"),__vite__mapDeps([18,2,3,1,6,11,12,13,19,20,21]))},{labelKey:"sidebar.assets",route:"/assets",icon:rv,minLevel:"serverOnly",lazy:()=>ia(()=>import("./AssetsPage-Cd1Ir_6o.js"),__vite__mapDeps([22,11,12,13,2,3,23,24,6,25,15,26,14,27,28]))},{labelKey:"sidebar.changelog",route:"/changelog",icon:Gf,minLevel:"serverOnly",lazy:()=>ia(()=>import("./ChangelogPage-BPP9_53U.js"),__vite__mapDeps([29,2,3,11,12,13,30,23,24,31,6,1,7,8,32]))},{labelKey:"sidebar.playtest",route:"/playtest",icon:Vf,minLevel:"serverOnly",lazy:()=>ia(()=>import("./PlaytestPage-BoKMpsGY.js"),__vite__mapDeps([33,19,20,2,3,1,30,23,24,31,6,11,12,13,34,25,15,26,14,16,27,35,36]))},{labelKey:"sidebar.ui_studio",route:"/ui-studio",icon:Kf,minLevel:"serverOnly",lazy:()=>ia(()=>import("./UiStudioPage-DZUmNIp2.js"),__vite__mapDeps([37,1,6,2,3,38,39,30,23,24,31,25,15,26,14,40]))},{labelKey:"sidebar.tools",route:"/tools",icon:mv,minLevel:"serverOnly",lazy:()=>ia(()=>import("./ToolsPage-DC8hKMbq.js"),__vite__mapDeps([41,2,3,6,11,12,13,30,23,24,31,42]))}],Fl=[{labelKey:"sidebar.controls",route:"/controls",icon:Yp,minLevel:"serverOnly",lazy:()=>ia(()=>import("./ControlsPage-CkU_Xz6W.js"),__vite__mapDeps([43,2,3,1,12,13,6,44,45,35,15]))},{labelKey:"sidebar.whatsNew",route:"/whats-new",icon:If,minLevel:"disconnected",lazy:()=>ia(()=>import("./WhatsNewPage-EVjYD3ti.js"),__vite__mapDeps([46,2,3,34,25,15,26,47]))}],Ml="https://github.com/hope1026/weppy-roblox-mcp",Sv="https://weppyai.com";function Gl(i){return i?/Mac OS X|Macintosh/i.test(i)?"macOS":/Windows NT/i.test(i)?"Windows":/Linux/i.test(i)?"Linux":"":""}function $p(i){var S,k,b,E,z;const s=Gl(typeof navigator<"u"?navigator.userAgent:""),r=i.status,d=(r==null?void 0:r.version)??"",u=((k=(S=r==null?void 0:r.pluginClients)==null?void 0:S[0])==null?void 0:k.pluginVersion)??"",p=((E=(b=r==null?void 0:r.pluginClients)==null?void 0:b[0])==null?void 0:E.studioVersion)??"",g=d||u||p?[d?`MCP ${d}`:"",u?`Plugin ${u}`:"",p?`Studio ${p}`:""].filter(Boolean).join(" / "):"",m=((z=r==null?void 0:r.aiClientNames)==null?void 0:z[0])??"",y=(r==null?void 0:r.nodeVersion)??"";return{os:s,nodeVersion:y,aiClient:m,pluginVersionLabel:g}}function bv(i){const{os:s,nodeVersion:r,aiClient:d,pluginVersionLabel:u}=$p(i),p=new URLSearchParams;return p.set("template","bug_report.yml"),s&&p.set("os",s),r&&p.set("node",r),d&&p.set("ai-client",d),u&&p.set("plugin-version",u),p.toString()}function Pv(i){const{os:s,nodeVersion:r,aiClient:d,pluginVersionLabel:u}=$p(i),p=new URLSearchParams;return p.set("template","install_help.yml"),s&&p.set("os",s),r&&p.set("node",r),d&&p.set("ai-client",d),u&&p.set("plugin-version",u),p.toString()}const kv=[{id:"bug",labelKey:"sidebar.help.bug",tooltipKey:"sidebar.help.bug.tooltip",icon:Tf,buildUrl:i=>`${Ml}/issues/new?${bv(i)}`},{id:"feature",labelKey:"sidebar.help.feature",tooltipKey:"sidebar.help.feature.tooltip",icon:Qf,buildUrl:()=>`${Ml}/issues/new?template=feature_request.yml`},{id:"discussions",labelKey:"sidebar.help.discussions",tooltipKey:"sidebar.help.discussions.tooltip",icon:ov,buildUrl:i=>`${Ml}/issues/new?${Pv(i)}`},{id:"troubleshooting",labelKey:"sidebar.help.troubleshooting",tooltipKey:"sidebar.help.troubleshooting.tooltip",icon:Ef,buildUrl:i=>`${Sv}/${i.locale}/docs/troubleshooting/`}];function wv(){const[i,s]=A.useState("basic"),[r,d]=A.useState(0),[u,p]=A.useState(0),[g,m]=A.useState(0),[y,S]=A.useState(!0);A.useEffect(()=>{let b=!1;async function E(){try{return await Wp("auto")}catch{return null}}async function z(){var M,le;try{const[W,ae]=await Promise.all([E(),Pt.get("/api/dashboard/tool-stats").catch(()=>null)]);if(b)return;if(W!=null&&W.tier&&s(W.tier),ae!=null&&ae.tierSummary){const G=((M=ae.tierSummary.basic)==null?void 0:M.totalCalls)??0,ue=((le=ae.tierSummary.pro)==null?void 0:le.totalCalls)??0;m(G),p(ue),d(G+ue)}}catch{}finally{b||S(!1)}}z();const O=new td;O.connect();const L=O.on("license",()=>{E().then(M=>{!b&&(M!=null&&M.tier)&&s(M.tier)})});return()=>{b=!0,L(),O.disconnect()}},[]);const k=r>0?u/r*100:0;return{tier:i,proUsagePercent:k,totalCalls:r,proCalls:u,basicCalls:g,loading:y}}const Cv="https://weppyai.com/plans/";function Do(i){const s=new URLSearchParams({utm_source:"weppy_dashboard",utm_medium:"app",utm_campaign:"pro_upgrade",utm_content:i});return`${Cv}?${s.toString()}`}const Av={sidebarUpgrade:Do("sidebar_upgrade"),settingsLicense:Do("settings_license"),sync:Do("sync_tier_panel"),changelog:Do("changelog_limit_notice"),playtest:Do("playtest_sample_banner"),uiStudioAnalysis:Do("ui_studio_analysis_banner"),uiStudioHistory:Do("ui_studio_history_banner")},Rv=5e3,xv=5;function Iv(i){return i.replace(/^\//,"").split("/")[0]||"overview"}function Dv(i,s){const r=new URLSearchParams(s);if(i==="ui-studio")return r.get("tab")==="history"?"ui_studio_history":"ui_studio_analysis";if(i==="tools")return"tools_history";if(i==="changelog")return"changelog_all"}function ps(i,s){const r=Iv(i);if(s===void 0)return r;const d=Dv(r,s);return d?{page:r,tab:d}:{page:r}}let yi=[],up=null;function Xp(){if(yi.length===0)return;const i=yi.splice(0),s=`${Bn}/api/dashboard/analytics`,r=JSON.stringify({events:i});fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:r}).catch(()=>{})}function Ev(){up||(up=setInterval(Xp,Rv))}function cp(i){yi.push(i),Ev(),yi.length>=xv&&Xp()}typeof window<"u"&&window.addEventListener("beforeunload",()=>{if(yi.length===0)return;const i=`${Bn}/api/dashboard/analytics`,s=JSON.stringify({events:yi.splice(0)});navigator.sendBeacon(i,new Blob([s],{type:"application/json"}))});function gs(){const i=A.useCallback((r,d)=>{cp({name:r,params:d})},[]),s=A.useCallback(r=>{cp({name:"dashboard_page_view",params:{...typeof r=="string"?{page:r}:r}})},[]);return{trackEvent:i,trackPageView:s}}const jv="_widget_1q1ab_1",Tv="_header_1q1ab_12",zv="_sparkle_1q1ab_18",Uv="_title_1q1ab_23",Lv="_actions_1q1ab_31",Mv="_cta_1q1ab_37",Hv="_licenseCta_1q1ab_38",Nv="_collapsedGroup_1q1ab_70",qv="_collapsed_1q1ab_70",Ov="_collapsedSecondary_1q1ab_91",oa={widget:jv,header:Tv,sparkle:zv,title:Uv,actions:Lv,cta:Mv,licenseCta:Hv,collapsedGroup:Nv,collapsed:qv,collapsedSecondary:Ov};function Bv({collapsed:i=!1}){const{tier:s}=wv(),{t:r}=ma(),{trackEvent:d}=gs(),{pathname:u,search:p}=Kt();if(s==="pro")return null;const g=Av.sidebarUpgrade,m="/settings?section=license",y=ps(u,p),S=()=>{d("dashboard_click_event",{click_target:"upgrade_cta",placement:"sidebar_upgrade",...y})},k=()=>{d("dashboard_click_event",{click_target:"license_shortcut",placement:"sidebar_license",...y})};return i?w.jsxs("div",{className:oa.collapsedGroup,children:[w.jsx("a",{href:g,target:"_blank",rel:"noopener noreferrer",className:oa.collapsed,title:r("upgrade.title","View Pro"),"aria-label":r("upgrade.title","View Pro"),onClick:S,children:w.jsx(dp,{size:18,strokeWidth:1.75})}),w.jsx(zo,{to:m,className:`${oa.collapsed} ${oa.collapsedSecondary}`,title:r("upgrade.licenseShortcut","Enter License"),"aria-label":r("upgrade.licenseShortcut","Enter License"),onClick:k,children:w.jsx(lp,{size:18,strokeWidth:1.75})})]}):w.jsxs("div",{className:oa.widget,children:[w.jsxs("div",{className:oa.header,children:[w.jsx(dp,{size:16,strokeWidth:1.75,className:oa.sparkle}),w.jsx("span",{className:oa.title,children:r("upgrade.tagline","Check Pro features")})]}),w.jsxs("div",{className:oa.actions,children:[w.jsxs("a",{href:g,target:"_blank",rel:"noopener noreferrer",className:oa.cta,onClick:S,children:[r("upgrade.cta","View Pro")," →"]}),w.jsxs(zo,{to:m,className:oa.licenseCta,onClick:k,children:[w.jsx(lp,{size:14,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"}),w.jsx("span",{children:r("upgrade.licenseShortcut","Enter License")})]})]})]})}const _v="_backdrop_1wgux_1",Wv="_dialog_1wgux_11",Vv="_header_1wgux_21",Fv="_titleBlock_1wgux_30",Gv="_title_1wgux_30",Yv="_subtitle_1wgux_42",Kv="_closeButton_1wgux_49",$v="_body_1wgux_67",Xv="_statusBox_1wgux_73",Jv="_errorBox_1wgux_74",Zv="_spin_1wgux_92",Qv="_bundleBlock_1wgux_102",eS="_label_1wgux_107",tS="_bundleName_1wgux_115",aS="_guidanceBox_1wgux_127",oS="_includedList_1wgux_143",iS="_includedItem_1wgux_152",sS="_actions_1wgux_163",nS="_button_1wgux_169",rS="_primaryLink_1wgux_170",lS="_hint_1wgux_206",We={backdrop:_v,dialog:Wv,header:Vv,titleBlock:Fv,title:Gv,subtitle:Yv,closeButton:Kv,body:$v,statusBox:Xv,errorBox:Jv,spin:Zv,bundleBlock:Qv,label:eS,bundleName:tS,guidanceBox:aS,includedList:oS,includedItem:iS,actions:sS,button:nS,primaryLink:rS,hint:lS};function Hl(){return typeof navigator<"u"?navigator.userAgent:""}function dS(i){window.open(i,"_blank","noopener,noreferrer")}function uS({open:i,fallbackHref:s,onClose:r}){const{locale:d,t:u}=ma(),p=A.useId(),[g,m]=A.useState(!1),[y,S]=A.useState(null),[k,b]=A.useState(null),[E,z]=A.useState("idle");if(A.useEffect(()=>{if(!i)return;let G=!1;const ue=Hl();return m(!0),S(null),b(null),z("idle"),Pt.post("/api/dashboard/support/bug-report",{os:Gl(ue),userAgent:ue,locale:d}).then(De=>{G||(S(De),m(!1))}).catch(()=>{G||(b(u("bugReportDialog.error","Could not create the diagnostics bundle. You can still open GitHub without diagnostics.")),m(!1))}),()=>{G=!0}},[i,d]),A.useEffect(()=>{if(!i||g)return;function G(ue){ue.key==="Escape"&&r()}return window.addEventListener("keydown",G),()=>window.removeEventListener("keydown",G)},[i,g,r]),!i)return null;async function O(){if(y)try{z("opening"),await Pt.post("/api/dashboard/support/bug-report/reveal",{bundleName:y.bundleName}),z("opened")}catch{z("failed")}}const L=y!==null,M=(y==null?void 0:y.issueUrl)??s,le=(y==null?void 0:y.includedFiles)??[],W=E==="opening"?u("bugReportDialog.reveal.opening","Opening..."):E==="opened"?u("bugReportDialog.reveal.opened","Opened location"):u("bugReportDialog.reveal","Reveal in Finder"),ae=w.jsx("div",{className:We.backdrop,onClick:g?void 0:r,children:w.jsxs("section",{className:We.dialog,role:"dialog","aria-modal":"true","aria-labelledby":p,onClick:G=>G.stopPropagation(),children:[w.jsxs("div",{className:We.header,children:[w.jsxs("div",{className:We.titleBlock,children:[w.jsx("h2",{id:p,className:We.title,children:u("bugReportDialog.title","diagnostics.zip can help us investigate")}),w.jsx("p",{className:We.subtitle,children:u("bugReportDialog.subtitle","WEPPY created a diagnostics zip on your computer. It includes Studio, plugin, Sync, and tool logs that can help us understand what happened.")})]}),w.jsx("button",{type:"button",className:We.closeButton,"aria-label":u("bugReportDialog.close","Close"),onClick:r,disabled:g,children:w.jsx(vv,{size:16,strokeWidth:1.75,"aria-hidden":"true"})})]}),w.jsxs("div",{className:We.body,children:[g&&w.jsxs("div",{className:We.statusBox,role:"status",children:[w.jsx(tv,{className:We.spin,size:18,strokeWidth:1.75,"aria-hidden":"true"}),w.jsx("span",{children:u("bugReportDialog.loading","Preparing diagnostics.zip...")})]}),k&&w.jsxs("div",{className:We.errorBox,role:"alert",children:[w.jsx(qf,{size:18,strokeWidth:1.75,"aria-hidden":"true"}),w.jsx("span",{children:k})]}),L&&w.jsxs(w.Fragment,{children:[w.jsxs("div",{className:We.guidanceBox,children:[w.jsx("p",{children:u("bugReportDialog.optional","You can submit the bug report without this file, but attaching it usually helps us find the cause faster.")}),w.jsx("p",{children:u("bugReportDialog.attachHow","To attach it, download or reveal the zip, then add it to the Diagnostics ZIP (optional) upload field on GitHub before you submit.")})]}),w.jsxs("div",{className:We.bundleBlock,children:[w.jsx("span",{className:We.label,children:u("bugReportDialog.bundle","Bundle")}),w.jsx("code",{className:We.bundleName,children:y.bundleName})]}),w.jsxs("div",{className:We.bundleBlock,children:[w.jsx("span",{className:We.label,children:u("bugReportDialog.included","Included")}),w.jsx("ul",{className:We.includedList,children:le.length>0?le.map(G=>w.jsx("li",{className:We.includedItem,children:G.label},`${G.label}:${G.archivePath??G.path}`)):w.jsx("li",{className:We.includedItem,children:u("bugReportDialog.included.none","No log files found")})})]}),E==="failed"&&w.jsxs("div",{className:We.errorBox,role:"alert",children:[w.jsx(rp,{size:18,strokeWidth:1.75,"aria-hidden":"true"}),w.jsx("span",{children:u("bugReportDialog.reveal.failed","Could not open the file location.")})]})]}),w.jsxs("div",{className:We.actions,children:[L&&w.jsxs(w.Fragment,{children:[w.jsxs("a",{className:We.primaryLink,href:y.downloadUrl,download:y.bundleName,children:[w.jsx(Mf,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),u("bugReportDialog.download","1. Download diagnostics.zip")]}),w.jsxs("button",{type:"button",className:We.button,onClick:()=>void O(),disabled:E==="opening",children:[w.jsx(rp,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),W]})]}),k&&!L&&w.jsxs("button",{type:"button",className:We.button,onClick:()=>{b(null),m(!0),Pt.post("/api/dashboard/support/bug-report",{os:Gl(Hl()),userAgent:Hl(),locale:d}).then(G=>{S(G),m(!1)}).catch(()=>{b(u("bugReportDialog.error","Could not create the diagnostics bundle. You can still open GitHub without diagnostics.")),m(!1)})},children:[w.jsx(Gp,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),u("bugReportDialog.retry","Try again")]}),w.jsxs("button",{type:"button",className:We.button,onClick:()=>dS(M),disabled:g,children:[w.jsx(Fp,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),L?u("bugReportDialog.openGithub","2. Open GitHub issue"):u("bugReportDialog.openGithubFallback","Open GitHub without diagnostics")]})]}),w.jsx("p",{className:We.hint,children:u("bugReportDialog.hint","The zip can contain local logs and project context. Review it before attaching if you want to share it.")})]})]})});return typeof document>"u"?ae:Mn.createPortal(ae,document.body)}const cS="_sidebar_19hyu_2",pS="_brand_19hyu_17",gS="_brandIcon_19hyu_28",yS="_brandText_19hyu_33",hS="_brandTextPro_19hyu_44",mS="_nav_19hyu_50",fS="_spacer_19hyu_57",vS="_navLink_19hyu_63",SS="_active_19hyu_84",bS="_disabled_19hyu_91",PS="_icon_19hyu_102",kS="_label_19hyu_113",wS="_secondaryDivider_19hyu_120",CS="_secondaryNav_19hyu_127",AS="_secondaryNavEntry_19hyu_134",RS="_secondaryItemDivider_19hyu_140",xS="_helpDivider_19hyu_147",IS="_helpGroupTitle_19hyu_154",DS="_helpNav_19hyu_165",ES="_externalIcon_19hyu_172",et={sidebar:cS,brand:pS,brandIcon:gS,brandText:yS,brandTextPro:hS,nav:mS,spacer:fS,navLink:vS,active:SS,disabled:bS,icon:PS,label:kS,secondaryDivider:wS,secondaryNav:CS,secondaryNavEntry:AS,secondaryItemDivider:RS,helpDivider:xS,helpGroupTitle:IS,helpNav:DS,externalIcon:ES},jS={bug:"sidebar_help_bug",feature:"sidebar_help_feature",discussions:"sidebar_help_community",troubleshooting:"sidebar_help_troubleshooting"};function TS(){const[i,s]=A.useState(!1);return A.useEffect(()=>{if(typeof window>"u"||!window.matchMedia)return;const r=window.matchMedia("(max-width: 768px)"),d=()=>s(r.matches);return d(),r.addEventListener("change",d),()=>r.removeEventListener("change",d)},[]),i}const pp={disconnected:0,serverOnly:1,studioConnected:2};function zS(i,s){return pp[i]>=pp[s]}function US(i,s){return i==="serverOnly"?s("sidebar.gate.l1","MCP server connection required"):i==="studioConnected"?s("sidebar.gate.l2","Roblox Studio plugin connection required"):""}function gp({item:i}){const{level:s}=_n(),{t:r}=ma(),d=zS(s,i.minLevel),u=i.icon,p=w.jsxs(zm,{to:i.route,end:i.route==="/",className:({isActive:g})=>[et.navLink,g?et.active:"",d?"":et.disabled].filter(Boolean).join(" "),onClick:g=>{d||g.preventDefault()},children:[w.jsx("span",{className:et.icon,children:w.jsx(u,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})}),w.jsx("span",{className:et.label,children:r(i.labelKey)})]});return d?p:w.jsx(Yt,{text:US(i.minLevel,r),children:p})}function LS({item:i,ctx:s}){const{t:r}=ma(),{trackEvent:d}=gs(),{pathname:u,search:p}=Kt(),g=i.icon,m=i.buildUrl(s),y=r(i.tooltipKey,""),S=ps(u,p),[k,b]=A.useState(!1),E=w.jsxs("a",{href:m,target:"_blank",rel:"noopener noreferrer",className:et.navLink,"data-testid":`sidebar-help-${i.id}`,onClick:O=>{d("dashboard_click_event",{click_target:jS[i.id],placement:"sidebar_help",...S}),i.id==="bug"&&(O.preventDefault(),b(!0))},children:[w.jsx("span",{className:et.icon,children:w.jsx(g,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})}),w.jsx("span",{className:et.label,children:r(i.labelKey)}),w.jsx("span",{className:et.externalIcon,"aria-hidden":"true",children:w.jsx(Fp,{size:12,strokeWidth:1.75})})]}),z=y?w.jsx(Yt,{text:y,children:E}):E;return w.jsxs(w.Fragment,{children:[z,i.id==="bug"&&w.jsx(uS,{open:k,fallbackHref:m,onClose:()=>b(!1)})]})}function MS(){const[i,s]=A.useState("basic"),r=TS(),{status:d}=_n(),{locale:u,t:p}=ma(),g={locale:u,status:d};return A.useEffect(()=>{let m=!1;async function y(){try{const b=await Wp("auto");!m&&(b!=null&&b.tier)&&s(b.tier)}catch{m||s("basic")}}y();const S=new td;S.connect();const k=S.on("license",()=>{y()});return()=>{m=!0,k(),S.disconnect()}},[]),w.jsxs("aside",{className:et.sidebar,children:[w.jsxs("div",{className:et.brand,children:[w.jsx("span",{className:et.brandIcon,children:w.jsx(Uf,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})}),w.jsx("span",{"data-testid":"sidebar-brand-text",className:[et.brandText,i==="pro"?et.brandTextPro:""].filter(Boolean).join(" "),children:"WEPPY"})]}),w.jsx("nav",{className:et.nav,children:Kp.map(m=>w.jsx(gp,{item:m},m.route))}),w.jsx("div",{className:et.secondaryDivider}),w.jsx("nav",{className:et.secondaryNav,children:Fl.map((m,y)=>w.jsxs("div",{className:et.secondaryNavEntry,children:[w.jsx(gp,{item:m}),y<Fl.length-1?w.jsx("div",{className:et.secondaryItemDivider,"data-testid":"sidebar-controls-whats-new-divider","aria-hidden":"true"}):null]},m.route))}),w.jsx("div",{className:et.helpDivider,"aria-hidden":"true"}),w.jsx("div",{className:et.helpGroupTitle,"aria-label":p("sidebar.help.group"),children:p("sidebar.help.group")}),w.jsx("nav",{className:et.helpNav,"aria-label":p("sidebar.help.group"),children:kv.map(m=>w.jsx(LS,{item:m,ctx:g},m.id))}),w.jsx("div",{className:et.spacer}),w.jsx(Bv,{collapsed:r})]})}async function HS(){return Pt.get("/api/dashboard/place-summary")}const Yl=new Set;function NS(i){return Yl.add(i),()=>Yl.delete(i)}async function qS(){return Pt.get("/api/dashboard/sync-root")}async function rP(){return Pt.post("/api/dashboard/sync-root/pick")}async function lP(i){const s=await Pt.patch("/api/dashboard/sync-root",{projectRoot:i});return Yl.forEach(r=>r(s)),s}const OS=[{id:"2026-09-26-sync-status-and-review",date:"2026-09-26",title:{en:"Sync status across Studios and change review have been improved",ko:"여러 Studio의 Sync 상태와 변경 검토가 개선되었습니다",es:"Se mejoraron el estado de Sync de varios Studios y la revisión de cambios","pt-br":"O estado do Sync em vários Studios e a revisão de alterações foram aprimorados",ja:"複数のStudioのSync状態と変更内容の確認を改善しました",id:"Status Sync di beberapa Studio dan peninjauan perubahan telah ditingkatkan",de:"Sync-Status mehrerer Studios und die Änderungsprüfung wurden verbessert","fr-fr":"L’état de Sync des différents Studios et la revue des modifications ont été améliorés"},body:{en:`On the Dashboard Sync page, you can see the Sync status of each connected Studio and select one to view its settings and details. Selecting or refreshing a Studio does not start or stop Sync or change which Studio an AI Agent uses.
379
379
 
380
380
  In the Studio Plugin, Review Changes now makes pending counts and full change paths easier to inspect. Review Conflicts shows conflicts separately, and the same conflict no longer opens the review window repeatedly.
381
381
 
@@ -743,4 +743,4 @@ Choisissez All assets pour afficher dans une seule liste les assets correspondan
743
743
 
744
744
  Les filtres de catégorie Images, Decals et RBXM restent disponibles. Les affichages Grid et List ainsi que les tailles de miniature Small, Medium et Large peuvent être modifiés séparément. Vos choix sont conservés à la prochaine ouverture d’Assets.
745
745
 
746
- Vos données Asset Library et vos chemins de dossiers existants restent inchangés. Aucune migration n’est nécessaire.`},severity:"info",category:"release"}],od="weppy-dashboard.whatsNew.readIds";function Jp(){try{const i=localStorage.getItem(od);if(!i)return new Set;const s=JSON.parse(i);return Array.isArray(s)?new Set(s.filter(r=>typeof r=="string")):new Set}catch{return new Set}}function BS(i){try{localStorage.setItem(od,JSON.stringify([...i]))}catch{}}let pi=Jp(),Zp=pi;const Kl=new Set;function Qp(){Zp=new Set(pi);for(const i of Kl)i()}const Nl={subscribe(i){return Kl.add(i),()=>{Kl.delete(i)}},getSnapshot(){return Zp},markRead(i){let s=!1;for(const r of i)pi.has(r)||(pi.add(r),s=!0);s&&(BS(pi),Qp())}};typeof window<"u"&&window.addEventListener("storage",i=>{i.key===od&&(pi=Jp(),Qp())});function _S(){const i=A.useSyncExternalStore(Nl.subscribe,Nl.getSnapshot),s=OS.filter(r=>!i.has(r.id)).length;return{readSet:i,unreadCount:s,markRead:Nl.markRead}}const WS="_header_1do17_2",VS="_row1_1do17_17",FS="_contextGroups_1do17_25",GS="_projectGroup_1do17_33",YS="_studioGroup_1do17_34",KS="_groupTitleRow_1do17_52",$S="_groupLabel_1do17_59",XS="_groupIcon_1do17_73",JS="_projectName_1do17_78",ZS="_placeChips_1do17_90",QS="_metaActions_1do17_99",eb="_placeChip_1do17_90",tb="_placeChipStatic_1do17_122",ab="_placeChipMuted_1do17_123",ob="_placeChipActive_1do17_127",ib="_placeChipInactive_1do17_134",sb="_placeChipId_1do17_145",nb="_placeChipClient_1do17_160",rb="_placeChipState_1do17_166",lb="_placeChipBadge_1do17_172",db="_placeDot_1do17_180",ub="_placeChipName_1do17_188",cb="_row2_1do17_196",pb="_pathRow_1do17_208",gb="_auxiliaryPath_1do17_209",yb="_pathLabel_1do17_221",hb="_projectPath_1do17_232",mb="_changeButton_1do17_242",fb="_iconButton_1do17_276",ke={header:WS,row1:VS,contextGroups:FS,projectGroup:GS,studioGroup:YS,groupTitleRow:KS,groupLabel:$S,groupIcon:XS,projectName:JS,placeChips:ZS,metaActions:QS,placeChip:eb,placeChipStatic:tb,placeChipMuted:ab,placeChipActive:ob,placeChipInactive:ib,placeChipId:sb,placeChipClient:nb,placeChipState:rb,placeChipBadge:lb,placeDot:db,placeChipName:ub,row2:cb,pathRow:pb,auxiliaryPath:gb,pathLabel:yb,projectPath:hb,changeButton:mb,iconButton:fb},vb="_bellWrapper_tae21_2",Sb="_unreadDot_tae21_8",yp={bellWrapper:vb,unreadDot:Sb};function bb(){const{t:i}=ma(),{unreadCount:s}=_S(),{trackEvent:r}=gs(),{pathname:d,search:u}=Kt(),p=ps(d,u),g=s>0?`${i("header.whatsNew","What's New")} (${s})`:i("header.whatsNew","What's New");return w.jsx(Yt,{text:i("header.whatsNew.tooltip","What's New"),children:w.jsxs("span",{className:yp.bellWrapper,children:[w.jsx(zo,{to:"/whats-new","aria-label":g,className:ke.iconButton,onClick:()=>r("dashboard_click_event",{click_target:"top_header_notification_bell",placement:"top_header",...p}),children:"🔔"}),s>0&&w.jsx("span",{className:yp.unreadDot,"data-testid":"unread-dot","aria-hidden":"true"})]})})}function eg(i,s,r){const d=s==="pinned"?r:null;return[...i].sort((u,p)=>Pb(u,p,d))}function dP(i,s,r){return eg(i,s,r)[0]}function Pb(i,s,r){if(r){const y=i.clientId===r,S=s.clientId===r;if(y!==S)return y?-1:1}const d=i.lastRoutedAt,u=s.lastRoutedAt,p=d!==void 0;if(p!==(u!==void 0))return p?-1:1;if(d!==void 0&&u!==void 0&&d!==u)return u-d;const m=(i.connectedAt??0)-(s.connectedAt??0);return m!==0?m:i.clientId.localeCompare(s.clientId)}function lo(i){if(typeof i!="string")return null;const s=i.trim();return s.length>0?s:null}function kb(i,s){if(i.pluginConnected&&i.activePlaceId===s){const r=lo(i.activePlaceName);if(r)return r}return i.lastActivePlaceId===s?lo(i.lastActivePlaceName):null}function uP(i){const s=new Map;if(i.lastActivePlaceId!==null){const r=lo(i.lastActivePlaceName);r&&s.set(i.lastActivePlaceId,r)}if(i.pluginConnected&&i.activePlaceId!==null){const r=lo(i.activePlaceName);r&&s.set(i.activePlaceId,r)}return s}function wb(i,s,r){if(ja(s)==="duplicate")return lo(s.placeName);const d=lo(r);if(d)return d;if(s.placeId<=0||ja(s)!=="unresolved")return lo(s.placeName);const u=new Set(i.filter(p=>p.placeId===s.placeId).map(p=>lo(p.placeName)).filter(p=>p!==null));return u.size===1?[...u][0]??null:null}function ja(i){return i.folderStatus??"canonical"}function Cb(i){return ja(i)==="duplicate"}function tg(i,s){if(s===null)return null;const r=i.filter(d=>d.placeId===s);return r.find(d=>ja(d)==="canonical")??r.find(d=>ja(d)==="unresolved")??null}function cP(i){return i.find(s=>!Cb(s))??null}function Ab(i){const s=new Set;return i.flatMap(r=>{if(r.placeId<=0)return[r];if(s.has(r.placeId))return[];s.add(r.placeId);const d=tg(i,r.placeId);return d?[d]:[]})}function pP(i,s){return s>0&&i.filter(r=>r.placeId===s).some(r=>ja(r)==="unresolved")}function gP(i,s){if(s.placeId<=0||ja(s)!=="unresolved")return s.hasSyncMetadata;const r=i.filter(d=>d.placeId===s.placeId&&ja(d)==="unresolved");if(r.length===0)return s.hasSyncMetadata;if(r.every(d=>d.hasSyncMetadata===!1))return!1;if(r.some(d=>d.hasSyncMetadata===!0))return!0}function hp(i){if(!i)return"";const s=i.split(/[\\/]/).filter(Boolean);return s[s.length-1]??""}function Rb(i){var d,u;const s=((d=i==null?void 0:i.mcpInstances)==null?void 0:d.filter(p=>!p.isServer&&p.aiClientName))??[];if(s.length===0){const p=((u=i==null?void 0:i.mcpInstances)==null?void 0:u.find(g=>!!g.aiClientName))??null;return(p==null?void 0:p.projectRoot)??(p==null?void 0:p.cwd)??null}s.sort((p,g)=>(g.lastCommandAt??g.connectedAt)-(p.lastCommandAt??p.connectedAt));const r=s[0];return r.projectRoot??r.cwd??null}function mp(i,s){return i??s}function xb(i){const s=i.replace(/^\//,"").split("/")[0];return s===""||s==="overview"}function Ib(i){return i.replace(/^\//,"").split("/")[0]==="whats-new"}function Db(i){return i.replace(/^\//,"").split("/")[0]||"overview"}function fp(i,s){return Object.entries(s).reduce((r,[d,u])=>r.split(`{${d}}`).join(u||"-"),i)}function Eb(i,s){const r=i.studioState??"unknown",d={edit:s("connection.targets.studioState.edit","Edit"),running:s("connection.targets.studioState.running","Running"),paused:s("connection.targets.studioState.paused","Paused"),unknown:s("connection.targets.studioState.unknown","Unknown")},u=i.playtestMode&&i.playtestMode!=="unknown"?`/${i.playtestMode}`:"";return`${d[r]}${u}`}function jb(){var Se,fe;const{pathname:i,search:s}=Kt(),{level:r,status:d}=_n(),{t:u}=ma(),{trackEvent:p}=gs(),[g,m]=A.useState(null),[y,S]=A.useState(null),[k,b]=A.useState(null),[E,z]=A.useState(!1),O=u("header.placeNotConnected","Place not connected"),L=(d==null?void 0:d.studioRoutingMode)??"recentPriority",M=(d==null?void 0:d.pinnedTargetClientId)??null,le=eg((d==null?void 0:d.pluginClients)??[],L,M),W=le[0],ae=xb(i),G=Ib(i),ue=ps(i,s);A.useEffect(()=>{let F=!1;async function pe(){if(r==="disconnected"){m(null);return}try{const he=await Pt.get("/connection-info");F||m(he)}catch{F||m(null)}}return pe(),()=>{F=!0}},[r,d==null?void 0:d.sessionId,d==null?void 0:d.connectedClients]),A.useEffect(()=>{let F=!1;async function pe(){if(r==="disconnected"){S(null),z(!1);return}S(null),z(!1);try{const he=await qS();F||(S(he),z(!1))}catch{F||(S(null),z(!0))}}return pe(),()=>{F=!0}},[ae,r,d==null?void 0:d.sessionId,d==null?void 0:d.connectedClients]),A.useEffect(()=>NS(F=>{S(F),z(!1)}),[]),A.useEffect(()=>{let F=!1;async function pe(){if(r==="disconnected"){b(null);return}try{const he=await HS();F||b(he)}catch{F||b(null)}}return pe(),()=>{F=!0}},[r,d==null?void 0:d.sessionId,d==null?void 0:d.connectedClients]);const De=Rb(g)??"",D=r==="disconnected"?"blocked":y?"ready":E?"error":"loading",X=D==="ready"?(y==null?void 0:y.projectRoot)??"":D==="loading"?u("header.currentProject.loading","Loading project root..."):u("header.currentProject.unavailable","Project root unavailable"),be=D==="ready"?(y==null?void 0:y.projectRoot)??"":ae?"":De,de=ae||D==="ready"?D==="ready"?hp(be)||u("header.unknownProject","Unknown project"):D==="loading"?u("header.currentProject.loading","Loading project root..."):u("header.currentProject.unavailable","Project root unavailable"):hp(be)||u("header.unknownProject","Unknown project"),ze=mp((fe=(Se=d==null?void 0:d.pluginClients)==null?void 0:Se[0])==null?void 0:fe.placeName,O),Ce=k!=null&&k.pluginConnected?k.activePlaceId:(k==null?void 0:k.lastActivePlaceId)??null,xe=[...(k==null?void 0:k.places)??[]].sort((F,pe)=>{const he=F.placeId===Ce,Ee=pe.placeId===Ce;return he!==Ee?he?-1:1:F.isConnected!==pe.isConnected?F.isConnected?-1:1:F.placeName.localeCompare(pe.placeName)}),He=Ab(xe),Je=le.length>0?He.filter(F=>!le.some(pe=>pe.placeId!==void 0&&pe.placeId===F.placeId)):He,ot=ae?D==="loading"?u("header.currentProject.loading.tooltip","Project root information is still loading"):D==="error"?u("header.currentProject.unavailable.tooltip","Current project root information is unavailable"):u("header.currentProject.tooltip","Currently selected project folder"):u("header.currentProject.tooltip","Currently selected project folder"),Ne=u("header.manageProjectRoot.tooltip","Open Project Root controls"),_=u("header.activeStudio.tooltip","Connected Studio targets that MCP can route requests to. Studio Routing changes the priority for requests without a named Studio target."),oe=tg(He,Ce),K=oe?ja(oe)!=="unresolved":!1,C=Db(i),U=y!=null&&y.projectSyncRoot&&oe&&K?`${y.projectSyncRoot}/${oe.placeDirName}`:null,ce=C==="playtest"?K&&(oe!=null&&oe.testsPath)?{label:u("header.testFiles.label","Test Files"),value:oe.testsPath,tooltip:u("header.testFiles.tooltip","Current playtest files directory for the selected place")}:null:["sync","changelog","ui-studio"].includes(C)&&U?{label:u("header.placeData.label","Place Data"),value:U,tooltip:u("header.placeData.tooltip","Current place data directory")}:null;return w.jsx(w.Fragment,{children:w.jsxs("header",{className:ke.header,children:[w.jsxs("div",{className:ke.row1,children:[w.jsxs("div",{className:ke.contextGroups,children:[w.jsxs("section",{className:ke.projectGroup,"aria-label":u("header.projectGroup.label","Project"),children:[w.jsxs("div",{className:ke.groupTitleRow,children:[w.jsxs("span",{className:ke.groupLabel,children:[w.jsx(_f,{size:14,strokeWidth:1.75,"aria-hidden":"true",focusable:"false",className:ke.groupIcon}),u("header.projectGroup.label","Project")]}),w.jsx(Yt,{text:ot,children:w.jsx("h1",{className:ke.projectName,children:de})}),w.jsx(Yt,{text:Ne,children:w.jsx(zo,{to:"/controls?section=project-root",className:ke.changeButton,onClick:()=>p("dashboard_click_event",{click_target:"project_root_manage",placement:"top_header",...ue}),children:u("header.manageProjectRoot","Manage Project Root")})})]}),w.jsxs("div",{className:ke.pathRow,children:[w.jsx("span",{className:ke.pathLabel,children:u("header.projectRoot.label","Project Root")}),w.jsx("span",{className:ke.projectPath,title:X,children:X})]})]}),w.jsxs("section",{className:ke.studioGroup,"aria-label":u("header.activeStudio.label","Active Studio"),children:[w.jsx(Yt,{text:_,children:w.jsxs("span",{className:ke.groupLabel,children:[w.jsx(sv,{size:14,strokeWidth:1.75,"aria-hidden":"true",focusable:"false",className:ke.groupIcon}),u("header.activeStudio.label","Active Studio")]})}),w.jsxs("div",{className:ke.placeChips,children:[le.map(F=>{const pe=F.targetAlias,he=mp(F.placeName,O),Ee=F.connectionState??"connected",rt=le.filter(Ct=>Ct.placeId!==void 0&&Ct.placeId===F.placeId).length>1,qt=L==="pinned"&&M===F.clientId?u("connection.routing.pinnedBadge","Pinned"):L==="recentPriority"&&(W==null?void 0:W.clientId)===F.clientId?u("connection.routing.priorityBadge","Priority"):"-",tt=fp(u("header.studioTarget.tooltip","Studio ID: {studioId} · Connection ID: {connectionId} · Place: {placeName} · Place ID: {placeId} · State: {state} · Runtime: {runtimeState} · Routing: {routing}"),{studioId:pe,connectionId:F.clientId,placeName:he,placeId:F.placeId!==void 0?String(F.placeId):"-",state:Ee,runtimeState:Eb(F,u),routing:qt});return w.jsx(Yt,{text:tt,children:w.jsxs("span",{className:`${ke.placeChip} ${ke.placeChipStatic} ${ke.placeChipActive}`,children:[w.jsx("span",{className:ke.placeDot,"aria-hidden":"true"}),w.jsx("span",{className:ke.placeChipName,children:he}),F.placeId!==void 0?w.jsx("span",{className:ke.placeChipId,children:F.placeId}):null,w.jsx("span",{className:ke.placeChipState,children:Ee}),rt?w.jsx("span",{className:ke.placeChipClient,children:pe}):null,qt!=="-"?w.jsx("span",{className:ke.placeChipBadge,children:qt}):null]})},F.clientId)}),le.length===0&&Je.length===0?w.jsx(Yt,{text:u("header.activeStudio.emptyTooltip","No Studio plugin is connected. Open Roblox Studio and connect the WEPPY Plugin."),children:w.jsx("span",{className:`${ke.placeChip} ${ke.placeChipMuted}`,children:w.jsx("span",{className:ke.placeChipName,children:ze})})}):Je.map(F=>{const pe=F.placeId===Ce,he=!!(k!=null&&k.pluginConnected)&&F.isConnected,Ee=k?wb(k.places,F,kb(k,F.placeId))??u("placeScope.folder.unresolvedPlace","Place {placeId}").replace("{placeId}",String(F.placeId)):F.placeName,rt=he?u("header.places.active","Active"):u("header.places.inactive","Inactive"),qt=fp(u("header.storedPlace.tooltip","Stored project place: {placeName} · Place ID: {placeId} · State: {state}"),{placeName:Ee,placeId:String(F.placeId),state:rt}),tt=[ke.placeChip,ke.placeChipStatic,pe&&he?ke.placeChipActive:ke.placeChipInactive].filter(Boolean).join(" ");return w.jsx(Yt,{text:qt,children:w.jsxs("span",{className:tt,children:[pe&&he?w.jsx("span",{className:ke.placeDot,"aria-hidden":"true"}):null,w.jsx("span",{className:ke.placeChipName,children:Ee}),w.jsx("span",{className:ke.placeChipId,children:F.placeId})]})},`${F.placeId}:${F.placeDirName}`)})]})]})]}),w.jsxs("div",{className:ke.metaActions,children:[!G&&w.jsx(bb,{}),w.jsx(Yt,{text:u("sidebar.controls","Controls"),children:w.jsx(zo,{to:"/controls","aria-label":u("sidebar.controls","Controls"),className:ke.iconButton,onClick:()=>p("dashboard_click_event",{click_target:"top_header_controls",placement:"top_header",...ue}),children:w.jsx(Yp,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})})}),w.jsx(Yt,{text:u("sidebar.settings","Settings"),children:w.jsx(zo,{to:"/settings","aria-label":u("sidebar.settings","Settings"),className:ke.iconButton,onClick:()=>p("dashboard_click_event",{click_target:"top_header_settings",placement:"top_header",...ue}),children:w.jsx(pv,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})})})]})]}),w.jsx("div",{className:ke.row2,"data-testid":"top-header-auxiliary-slot","data-state":ce?"visible":"empty","aria-hidden":ce?void 0:!0,children:ce?w.jsx(Yt,{text:ce.tooltip,children:w.jsxs("div",{className:ke.auxiliaryPath,children:[w.jsx("span",{className:ke.pathLabel,children:ce.label}),w.jsx("span",{className:ke.projectPath,title:ce.value,children:ce.value})]})}):null})]})})}const Tb="_guide_1s78j_1",zb="_headingRow_1s78j_14",Ub="_bodyRow_1s78j_15",Lb="_actionRow_1s78j_16",Mb="_headingCopy_1s78j_26",Hb="_eyebrow_1s78j_32",Nb="_closeButton_1s78j_50",qb="_primaryButton_1s78j_73",Ob="_secondaryButton_1s78j_74",Bb="_linkButton_1s78j_75",_b="_message_1s78j_87",Wb="_statusBadge_1s78j_101",Vb="_feedback_1s78j_169",Fb="_feedbackError_1s78j_177",jt={guide:Tb,headingRow:zb,bodyRow:Ub,actionRow:Lb,headingCopy:Mb,eyebrow:Hb,closeButton:Nb,primaryButton:qb,secondaryButton:Ob,linkButton:Bb,message:_b,statusBadge:Wb,feedback:Vb,feedbackError:Fb};function Gb(){const{t:i}=ma(),s=qn(),r=A.useId(),[d,u]=A.useState(null),[p,g]=A.useState(!1),[m,y]=A.useState(!1);if(A.useEffect(()=>{let k=!1;return Pt.get("/api/dashboard/settings").then(b=>{!k&&!b.dashboard.autoOpenGuideSeen&&u({autoOpen:b.dashboard.autoOpen})}).catch(()=>{}),()=>{k=!0}},[]),!d)return null;const S=async(k,b=!1)=>{g(!0),y(!1);try{await Pt.patch("/api/dashboard/preferences",k),u(null),b&&s("/settings?section=dashboard")}catch{y(!0)}finally{g(!1)}};return w.jsxs("section",{className:jt.guide,role:"region","aria-labelledby":r,children:[w.jsxs("div",{className:jt.headingRow,children:[w.jsxs("div",{className:jt.headingCopy,children:[w.jsx("span",{className:jt.eyebrow,children:i("dashboardAutoOpenGuide.eyebrow","Dashboard preference")}),w.jsx("h2",{id:r,children:i("dashboardAutoOpenGuide.title","Choose how WEPPY Dashboard opens")})]}),w.jsx("button",{type:"button",className:jt.closeButton,"aria-label":i("dashboardAutoOpenGuide.close","Close auto-open guide"),disabled:p,onClick:()=>{S({autoOpenGuideSeen:!0})},children:"×"})]}),w.jsxs("div",{className:jt.bodyRow,children:[w.jsxs("div",{className:jt.message,children:[w.jsx("p",{children:d.autoOpen?i("dashboardAutoOpenGuide.currentOn","Auto-open is currently On. This Dashboard opens after the MCP Server starts."):i("dashboardAutoOpenGuide.currentOff","Auto-open is currently Off. WEPPY will not open a new Dashboard tab when the MCP Server starts.")}),w.jsxs("p",{children:[i("dashboardAutoOpenGuide.changeAnytime","You can change this anytime in Settings.")," ",i("dashboardAutoOpenGuide.agentHint","You can also ask your Agent, “Turn off Dashboard auto-open.”")]})]}),w.jsx("span",{className:jt.statusBadge,children:d.autoOpen?i("dashboardAutoOpenGuide.statusOn","Auto-open On"):i("dashboardAutoOpenGuide.statusOff","Auto-open Off")})]}),w.jsxs("div",{className:jt.actionRow,children:[w.jsx("button",{type:"button",className:jt.primaryButton,disabled:p,onClick:()=>{S({autoOpenGuideSeen:!0})},children:i("dashboardAutoOpenGuide.keep","Keep current setting")}),w.jsx("button",{type:"button",className:jt.secondaryButton,disabled:p,onClick:()=>{S({autoOpen:!1,autoOpenGuideSeen:!0})},children:i("dashboardAutoOpenGuide.turnOff","Turn off auto-open")}),w.jsx("button",{type:"button",className:jt.linkButton,disabled:p,onClick:()=>{S({autoOpenGuideSeen:!0},!0)},children:i("dashboardAutoOpenGuide.openSettings","Open Settings")}),w.jsx("span",{className:`${jt.feedback} ${m?jt.feedbackError:""}`,"aria-live":"polite",children:p?i("dashboardAutoOpenGuide.saving","Saving…"):m?i("dashboardAutoOpenGuide.error","Could not save your choice. Please try again."):" "})]})]})}const Yb="_layout_19mmz_2",Kb="_mainShell_19mmz_8",$b="_content_19mmz_17",Xb="_loading_19mmz_26",jn={layout:Yb,mainShell:Kb,content:$b,loading:Xb};function Jb(){const{pathname:i,search:s}=Kt(),{trackPageView:r}=gs();return A.useEffect(()=>{r(ps(i,s))},[i,s,r]),null}function Zb(){const{t:i}=ma();return w.jsx("div",{className:jn.loading,children:i("common.loading","Loading...")})}function Qb(){return w.jsx(of,{children:w.jsx(gf,{children:w.jsxs(Gm,{children:[w.jsx(hf,{}),w.jsx(Jb,{}),w.jsxs("div",{className:jn.layout,children:[w.jsx(MS,{}),w.jsxs("div",{className:jn.mainShell,children:[w.jsx(jb,{}),w.jsxs("main",{className:jn.content,children:[w.jsx(Gb,{}),w.jsx(A.Suspense,{fallback:w.jsx(Zb,{}),children:w.jsx(cm,{})})]})]})]})]})})})}function vp(i){return i.route==="/"?{index:!0,lazy:i.lazy}:i.route==="/changelog"?{path:"changelog/:id?",lazy:i.lazy}:{path:i.route.slice(1),lazy:i.lazy}}const eP=bm([{path:"/",element:w.jsx(Qb,{}),children:[...Kp.map(vp),...Fl.map(vp),{path:"settings",lazy:()=>ia(()=>import("./SettingsPage-DmuhCaCs.js"),__vite__mapDeps([48,2,3,1,6,44,45,11,12,13,38,39,49]))}]}]);Gy.createRoot(document.getElementById("root")).render(w.jsx(Im,{router:eP}));export{Uo as A,uP as B,ja as C,td as D,Fp as E,_f as F,Cb as G,wb as H,Kf as I,qS as J,lP as K,zo as L,sv as M,rP as N,dP as O,rv as P,aP as Q,Gp as R,tf as S,Av as T,Wp as U,iP as V,sP as W,vv as X,nP as Y,_S as Z,OS as _,gs as a,Pt as b,Kt as c,_n as d,wv as e,Fe as f,HS as g,Bm as h,Yt as i,w as j,yf as k,Bn as l,Mf as m,pv as n,tg as o,pP as p,gP as q,A as r,eg as s,kb as t,ma as u,cP as v,qn as w,Mn as x,ps as y,oP as z};
746
+ Vos données Asset Library et vos chemins de dossiers existants restent inchangés. Aucune migration n’est nécessaire.`},severity:"info",category:"release"}],od="weppy-dashboard.whatsNew.readIds";function Jp(){try{const i=localStorage.getItem(od);if(!i)return new Set;const s=JSON.parse(i);return Array.isArray(s)?new Set(s.filter(r=>typeof r=="string")):new Set}catch{return new Set}}function BS(i){try{localStorage.setItem(od,JSON.stringify([...i]))}catch{}}let pi=Jp(),Zp=pi;const Kl=new Set;function Qp(){Zp=new Set(pi);for(const i of Kl)i()}const Nl={subscribe(i){return Kl.add(i),()=>{Kl.delete(i)}},getSnapshot(){return Zp},markRead(i){let s=!1;for(const r of i)pi.has(r)||(pi.add(r),s=!0);s&&(BS(pi),Qp())}};typeof window<"u"&&window.addEventListener("storage",i=>{i.key===od&&(pi=Jp(),Qp())});function _S(){const i=A.useSyncExternalStore(Nl.subscribe,Nl.getSnapshot),s=OS.filter(r=>!i.has(r.id)).length;return{readSet:i,unreadCount:s,markRead:Nl.markRead}}const WS="_header_1do17_2",VS="_row1_1do17_17",FS="_contextGroups_1do17_25",GS="_projectGroup_1do17_33",YS="_studioGroup_1do17_34",KS="_groupTitleRow_1do17_52",$S="_groupLabel_1do17_59",XS="_groupIcon_1do17_73",JS="_projectName_1do17_78",ZS="_placeChips_1do17_90",QS="_metaActions_1do17_99",eb="_placeChip_1do17_90",tb="_placeChipStatic_1do17_122",ab="_placeChipMuted_1do17_123",ob="_placeChipActive_1do17_127",ib="_placeChipInactive_1do17_134",sb="_placeChipId_1do17_145",nb="_placeChipClient_1do17_160",rb="_placeChipState_1do17_166",lb="_placeChipBadge_1do17_172",db="_placeDot_1do17_180",ub="_placeChipName_1do17_188",cb="_row2_1do17_196",pb="_pathRow_1do17_208",gb="_auxiliaryPath_1do17_209",yb="_pathLabel_1do17_221",hb="_projectPath_1do17_232",mb="_changeButton_1do17_242",fb="_iconButton_1do17_276",ke={header:WS,row1:VS,contextGroups:FS,projectGroup:GS,studioGroup:YS,groupTitleRow:KS,groupLabel:$S,groupIcon:XS,projectName:JS,placeChips:ZS,metaActions:QS,placeChip:eb,placeChipStatic:tb,placeChipMuted:ab,placeChipActive:ob,placeChipInactive:ib,placeChipId:sb,placeChipClient:nb,placeChipState:rb,placeChipBadge:lb,placeDot:db,placeChipName:ub,row2:cb,pathRow:pb,auxiliaryPath:gb,pathLabel:yb,projectPath:hb,changeButton:mb,iconButton:fb},vb="_bellWrapper_tae21_2",Sb="_unreadDot_tae21_8",yp={bellWrapper:vb,unreadDot:Sb};function bb(){const{t:i}=ma(),{unreadCount:s}=_S(),{trackEvent:r}=gs(),{pathname:d,search:u}=Kt(),p=ps(d,u),g=s>0?`${i("header.whatsNew","What's New")} (${s})`:i("header.whatsNew","What's New");return w.jsx(Yt,{text:i("header.whatsNew.tooltip","What's New"),children:w.jsxs("span",{className:yp.bellWrapper,children:[w.jsx(zo,{to:"/whats-new","aria-label":g,className:ke.iconButton,onClick:()=>r("dashboard_click_event",{click_target:"top_header_notification_bell",placement:"top_header",...p}),children:"🔔"}),s>0&&w.jsx("span",{className:yp.unreadDot,"data-testid":"unread-dot","aria-hidden":"true"})]})})}function eg(i,s,r){const d=s==="pinned"?r:null;return[...i].sort((u,p)=>Pb(u,p,d))}function dP(i,s,r){return eg(i,s,r)[0]}function Pb(i,s,r){if(r){const y=i.clientId===r,S=s.clientId===r;if(y!==S)return y?-1:1}const d=i.lastRoutedAt,u=s.lastRoutedAt,p=d!==void 0;if(p!==(u!==void 0))return p?-1:1;if(d!==void 0&&u!==void 0&&d!==u)return u-d;const m=(i.connectedAt??0)-(s.connectedAt??0);return m!==0?m:i.clientId.localeCompare(s.clientId)}function lo(i){if(typeof i!="string")return null;const s=i.trim();return s.length>0?s:null}function kb(i,s){if(i.pluginConnected&&i.activePlaceId===s){const r=lo(i.activePlaceName);if(r)return r}return i.lastActivePlaceId===s?lo(i.lastActivePlaceName):null}function uP(i){const s=new Map;if(i.lastActivePlaceId!==null){const r=lo(i.lastActivePlaceName);r&&s.set(i.lastActivePlaceId,r)}if(i.pluginConnected&&i.activePlaceId!==null){const r=lo(i.activePlaceName);r&&s.set(i.activePlaceId,r)}return s}function wb(i,s,r){if(ja(s)==="duplicate")return lo(s.placeName);const d=lo(r);if(d)return d;if(s.placeId<=0||ja(s)!=="unresolved")return lo(s.placeName);const u=new Set(i.filter(p=>p.placeId===s.placeId).map(p=>lo(p.placeName)).filter(p=>p!==null));return u.size===1?[...u][0]??null:null}function ja(i){return i.folderStatus??"canonical"}function Cb(i){return ja(i)==="duplicate"}function tg(i,s){if(s===null)return null;const r=i.filter(d=>d.placeId===s);return r.find(d=>ja(d)==="canonical")??r.find(d=>ja(d)==="unresolved")??null}function cP(i){return i.find(s=>!Cb(s))??null}function Ab(i){const s=new Set;return i.flatMap(r=>{if(r.placeId<=0)return[r];if(s.has(r.placeId))return[];s.add(r.placeId);const d=tg(i,r.placeId);return d?[d]:[]})}function pP(i,s){return s>0&&i.filter(r=>r.placeId===s).some(r=>ja(r)==="unresolved")}function gP(i,s){if(s.placeId<=0||ja(s)!=="unresolved")return s.hasSyncMetadata;const r=i.filter(d=>d.placeId===s.placeId&&ja(d)==="unresolved");if(r.length===0)return s.hasSyncMetadata;if(r.every(d=>d.hasSyncMetadata===!1))return!1;if(r.some(d=>d.hasSyncMetadata===!0))return!0}function hp(i){if(!i)return"";const s=i.split(/[\\/]/).filter(Boolean);return s[s.length-1]??""}function Rb(i){var d,u;const s=((d=i==null?void 0:i.mcpInstances)==null?void 0:d.filter(p=>!p.isServer&&p.aiClientName))??[];if(s.length===0){const p=((u=i==null?void 0:i.mcpInstances)==null?void 0:u.find(g=>!!g.aiClientName))??null;return(p==null?void 0:p.projectRoot)??(p==null?void 0:p.cwd)??null}s.sort((p,g)=>(g.lastCommandAt??g.connectedAt)-(p.lastCommandAt??p.connectedAt));const r=s[0];return r.projectRoot??r.cwd??null}function mp(i,s){return i??s}function xb(i){const s=i.replace(/^\//,"").split("/")[0];return s===""||s==="overview"}function Ib(i){return i.replace(/^\//,"").split("/")[0]==="whats-new"}function Db(i){return i.replace(/^\//,"").split("/")[0]||"overview"}function fp(i,s){return Object.entries(s).reduce((r,[d,u])=>r.split(`{${d}}`).join(u||"-"),i)}function Eb(i,s){const r=i.studioState??"unknown",d={edit:s("connection.targets.studioState.edit","Edit"),running:s("connection.targets.studioState.running","Running"),paused:s("connection.targets.studioState.paused","Paused"),unknown:s("connection.targets.studioState.unknown","Unknown")},u=i.playtestMode&&i.playtestMode!=="unknown"?`/${i.playtestMode}`:"";return`${d[r]}${u}`}function jb(){var Se,fe;const{pathname:i,search:s}=Kt(),{level:r,status:d}=_n(),{t:u}=ma(),{trackEvent:p}=gs(),[g,m]=A.useState(null),[y,S]=A.useState(null),[k,b]=A.useState(null),[E,z]=A.useState(!1),O=u("header.placeNotConnected","Place not connected"),L=(d==null?void 0:d.studioRoutingMode)??"recentPriority",M=(d==null?void 0:d.pinnedTargetClientId)??null,le=eg((d==null?void 0:d.pluginClients)??[],L,M),W=le[0],ae=xb(i),G=Ib(i),ue=ps(i,s);A.useEffect(()=>{let F=!1;async function pe(){if(r==="disconnected"){m(null);return}try{const he=await Pt.get("/connection-info");F||m(he)}catch{F||m(null)}}return pe(),()=>{F=!0}},[r,d==null?void 0:d.sessionId,d==null?void 0:d.connectedClients]),A.useEffect(()=>{let F=!1;async function pe(){if(r==="disconnected"){S(null),z(!1);return}S(null),z(!1);try{const he=await qS();F||(S(he),z(!1))}catch{F||(S(null),z(!0))}}return pe(),()=>{F=!0}},[ae,r,d==null?void 0:d.sessionId,d==null?void 0:d.connectedClients]),A.useEffect(()=>NS(F=>{S(F),z(!1)}),[]),A.useEffect(()=>{let F=!1;async function pe(){if(r==="disconnected"){b(null);return}try{const he=await HS();F||b(he)}catch{F||b(null)}}return pe(),()=>{F=!0}},[r,d==null?void 0:d.sessionId,d==null?void 0:d.connectedClients]);const De=Rb(g)??"",D=r==="disconnected"?"blocked":y?"ready":E?"error":"loading",X=D==="ready"?(y==null?void 0:y.projectRoot)??"":D==="loading"?u("header.currentProject.loading","Loading project root..."):u("header.currentProject.unavailable","Project root unavailable"),be=D==="ready"?(y==null?void 0:y.projectRoot)??"":ae?"":De,de=ae||D==="ready"?D==="ready"?hp(be)||u("header.unknownProject","Unknown project"):D==="loading"?u("header.currentProject.loading","Loading project root..."):u("header.currentProject.unavailable","Project root unavailable"):hp(be)||u("header.unknownProject","Unknown project"),ze=mp((fe=(Se=d==null?void 0:d.pluginClients)==null?void 0:Se[0])==null?void 0:fe.placeName,O),Ce=k!=null&&k.pluginConnected?k.activePlaceId:(k==null?void 0:k.lastActivePlaceId)??null,xe=[...(k==null?void 0:k.places)??[]].sort((F,pe)=>{const he=F.placeId===Ce,Ee=pe.placeId===Ce;return he!==Ee?he?-1:1:F.isConnected!==pe.isConnected?F.isConnected?-1:1:F.placeName.localeCompare(pe.placeName)}),He=Ab(xe),Je=le.length>0?He.filter(F=>!le.some(pe=>pe.placeId!==void 0&&pe.placeId===F.placeId)):He,ot=ae?D==="loading"?u("header.currentProject.loading.tooltip","Project root information is still loading"):D==="error"?u("header.currentProject.unavailable.tooltip","Current project root information is unavailable"):u("header.currentProject.tooltip","Currently selected project folder"):u("header.currentProject.tooltip","Currently selected project folder"),Ne=u("header.manageProjectRoot.tooltip","Open Project Root controls"),_=u("header.activeStudio.tooltip","Connected Studio targets that MCP can route requests to. Studio Routing changes the priority for requests without a named Studio target."),oe=tg(He,Ce),K=oe?ja(oe)!=="unresolved":!1,C=Db(i),U=y!=null&&y.projectSyncRoot&&oe&&K?`${y.projectSyncRoot}/${oe.placeDirName}`:null,ce=C==="playtest"?K&&(oe!=null&&oe.testsPath)?{label:u("header.testFiles.label","Test Files"),value:oe.testsPath,tooltip:u("header.testFiles.tooltip","Current playtest files directory for the selected place")}:null:["sync","changelog","ui-studio"].includes(C)&&U?{label:u("header.placeData.label","Place Data"),value:U,tooltip:u("header.placeData.tooltip","Current place data directory")}:null;return w.jsx(w.Fragment,{children:w.jsxs("header",{className:ke.header,children:[w.jsxs("div",{className:ke.row1,children:[w.jsxs("div",{className:ke.contextGroups,children:[w.jsxs("section",{className:ke.projectGroup,"aria-label":u("header.projectGroup.label","Project"),children:[w.jsxs("div",{className:ke.groupTitleRow,children:[w.jsxs("span",{className:ke.groupLabel,children:[w.jsx(_f,{size:14,strokeWidth:1.75,"aria-hidden":"true",focusable:"false",className:ke.groupIcon}),u("header.projectGroup.label","Project")]}),w.jsx(Yt,{text:ot,children:w.jsx("h1",{className:ke.projectName,children:de})}),w.jsx(Yt,{text:Ne,children:w.jsx(zo,{to:"/controls?section=project-root",className:ke.changeButton,onClick:()=>p("dashboard_click_event",{click_target:"project_root_manage",placement:"top_header",...ue}),children:u("header.manageProjectRoot","Manage Project Root")})})]}),w.jsxs("div",{className:ke.pathRow,children:[w.jsx("span",{className:ke.pathLabel,children:u("header.projectRoot.label","Project Root")}),w.jsx("span",{className:ke.projectPath,title:X,children:X})]})]}),w.jsxs("section",{className:ke.studioGroup,"aria-label":u("header.activeStudio.label","Active Studio"),children:[w.jsx(Yt,{text:_,children:w.jsxs("span",{className:ke.groupLabel,children:[w.jsx(sv,{size:14,strokeWidth:1.75,"aria-hidden":"true",focusable:"false",className:ke.groupIcon}),u("header.activeStudio.label","Active Studio")]})}),w.jsxs("div",{className:ke.placeChips,children:[le.map(F=>{const pe=F.targetAlias,he=mp(F.placeName,O),Ee=F.connectionState??"connected",rt=le.filter(Ct=>Ct.placeId!==void 0&&Ct.placeId===F.placeId).length>1,qt=L==="pinned"&&M===F.clientId?u("connection.routing.pinnedBadge","Pinned"):L==="recentPriority"&&(W==null?void 0:W.clientId)===F.clientId?u("connection.routing.priorityBadge","Priority"):"-",tt=fp(u("header.studioTarget.tooltip","Studio ID: {studioId} · Connection ID: {connectionId} · Place: {placeName} · Place ID: {placeId} · State: {state} · Runtime: {runtimeState} · Routing: {routing}"),{studioId:pe,connectionId:F.clientId,placeName:he,placeId:F.placeId!==void 0?String(F.placeId):"-",state:Ee,runtimeState:Eb(F,u),routing:qt});return w.jsx(Yt,{text:tt,children:w.jsxs("span",{className:`${ke.placeChip} ${ke.placeChipStatic} ${ke.placeChipActive}`,children:[w.jsx("span",{className:ke.placeDot,"aria-hidden":"true"}),w.jsx("span",{className:ke.placeChipName,children:he}),F.placeId!==void 0?w.jsx("span",{className:ke.placeChipId,children:F.placeId}):null,w.jsx("span",{className:ke.placeChipState,children:Ee}),rt?w.jsx("span",{className:ke.placeChipClient,children:pe}):null,qt!=="-"?w.jsx("span",{className:ke.placeChipBadge,children:qt}):null]})},F.clientId)}),le.length===0&&Je.length===0?w.jsx(Yt,{text:u("header.activeStudio.emptyTooltip","No Studio plugin is connected. Open Roblox Studio and connect the WEPPY Plugin."),children:w.jsx("span",{className:`${ke.placeChip} ${ke.placeChipMuted}`,children:w.jsx("span",{className:ke.placeChipName,children:ze})})}):Je.map(F=>{const pe=F.placeId===Ce,he=!!(k!=null&&k.pluginConnected)&&F.isConnected,Ee=k?wb(k.places,F,kb(k,F.placeId))??u("placeScope.folder.unresolvedPlace","Place {placeId}").replace("{placeId}",String(F.placeId)):F.placeName,rt=he?u("header.places.active","Active"):u("header.places.inactive","Inactive"),qt=fp(u("header.storedPlace.tooltip","Stored project place: {placeName} · Place ID: {placeId} · State: {state}"),{placeName:Ee,placeId:String(F.placeId),state:rt}),tt=[ke.placeChip,ke.placeChipStatic,pe&&he?ke.placeChipActive:ke.placeChipInactive].filter(Boolean).join(" ");return w.jsx(Yt,{text:qt,children:w.jsxs("span",{className:tt,children:[pe&&he?w.jsx("span",{className:ke.placeDot,"aria-hidden":"true"}):null,w.jsx("span",{className:ke.placeChipName,children:Ee}),w.jsx("span",{className:ke.placeChipId,children:F.placeId})]})},`${F.placeId}:${F.placeDirName}`)})]})]})]}),w.jsxs("div",{className:ke.metaActions,children:[!G&&w.jsx(bb,{}),w.jsx(Yt,{text:u("sidebar.controls","Controls"),children:w.jsx(zo,{to:"/controls","aria-label":u("sidebar.controls","Controls"),className:ke.iconButton,onClick:()=>p("dashboard_click_event",{click_target:"top_header_controls",placement:"top_header",...ue}),children:w.jsx(Yp,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})})}),w.jsx(Yt,{text:u("sidebar.settings","Settings"),children:w.jsx(zo,{to:"/settings","aria-label":u("sidebar.settings","Settings"),className:ke.iconButton,onClick:()=>p("dashboard_click_event",{click_target:"top_header_settings",placement:"top_header",...ue}),children:w.jsx(pv,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})})})]})]}),w.jsx("div",{className:ke.row2,"data-testid":"top-header-auxiliary-slot","data-state":ce?"visible":"empty","aria-hidden":ce?void 0:!0,children:ce?w.jsx(Yt,{text:ce.tooltip,children:w.jsxs("div",{className:ke.auxiliaryPath,children:[w.jsx("span",{className:ke.pathLabel,children:ce.label}),w.jsx("span",{className:ke.projectPath,title:ce.value,children:ce.value})]})}):null})]})})}const Tb="_guide_1s78j_1",zb="_headingRow_1s78j_14",Ub="_bodyRow_1s78j_15",Lb="_actionRow_1s78j_16",Mb="_headingCopy_1s78j_26",Hb="_eyebrow_1s78j_32",Nb="_closeButton_1s78j_50",qb="_primaryButton_1s78j_73",Ob="_secondaryButton_1s78j_74",Bb="_linkButton_1s78j_75",_b="_message_1s78j_87",Wb="_statusBadge_1s78j_101",Vb="_feedback_1s78j_169",Fb="_feedbackError_1s78j_177",jt={guide:Tb,headingRow:zb,bodyRow:Ub,actionRow:Lb,headingCopy:Mb,eyebrow:Hb,closeButton:Nb,primaryButton:qb,secondaryButton:Ob,linkButton:Bb,message:_b,statusBadge:Wb,feedback:Vb,feedbackError:Fb};function Gb(){const{t:i}=ma(),s=qn(),r=A.useId(),[d,u]=A.useState(null),[p,g]=A.useState(!1),[m,y]=A.useState(!1);if(A.useEffect(()=>{let k=!1;return Pt.get("/api/dashboard/settings").then(b=>{!k&&!b.dashboard.autoOpenGuideSeen&&u({autoOpen:b.dashboard.autoOpen})}).catch(()=>{}),()=>{k=!0}},[]),!d)return null;const S=async(k,b=!1)=>{g(!0),y(!1);try{await Pt.patch("/api/dashboard/preferences",k),u(null),b&&s("/settings?section=dashboard")}catch{y(!0)}finally{g(!1)}};return w.jsxs("section",{className:jt.guide,role:"region","aria-labelledby":r,children:[w.jsxs("div",{className:jt.headingRow,children:[w.jsxs("div",{className:jt.headingCopy,children:[w.jsx("span",{className:jt.eyebrow,children:i("dashboardAutoOpenGuide.eyebrow","Dashboard preference")}),w.jsx("h2",{id:r,children:i("dashboardAutoOpenGuide.title","Choose how WEPPY Dashboard opens")})]}),w.jsx("button",{type:"button",className:jt.closeButton,"aria-label":i("dashboardAutoOpenGuide.close","Close auto-open guide"),disabled:p,onClick:()=>{S({autoOpenGuideSeen:!0})},children:"×"})]}),w.jsxs("div",{className:jt.bodyRow,children:[w.jsxs("div",{className:jt.message,children:[w.jsx("p",{children:d.autoOpen?i("dashboardAutoOpenGuide.currentOn","Auto-open is currently On. This Dashboard opens after the MCP Server starts."):i("dashboardAutoOpenGuide.currentOff","Auto-open is currently Off. WEPPY will not open a new Dashboard tab when the MCP Server starts.")}),w.jsxs("p",{children:[i("dashboardAutoOpenGuide.changeAnytime","You can change this anytime in Settings.")," ",i("dashboardAutoOpenGuide.agentHint","You can also ask your Agent, “Turn off Dashboard auto-open.”")]})]}),w.jsx("span",{className:jt.statusBadge,children:d.autoOpen?i("dashboardAutoOpenGuide.statusOn","Auto-open On"):i("dashboardAutoOpenGuide.statusOff","Auto-open Off")})]}),w.jsxs("div",{className:jt.actionRow,children:[w.jsx("button",{type:"button",className:jt.primaryButton,disabled:p,onClick:()=>{S({autoOpenGuideSeen:!0})},children:i("dashboardAutoOpenGuide.keep","Keep current setting")}),w.jsx("button",{type:"button",className:jt.secondaryButton,disabled:p,onClick:()=>{S({autoOpen:!1,autoOpenGuideSeen:!0})},children:i("dashboardAutoOpenGuide.turnOff","Turn off auto-open")}),w.jsx("button",{type:"button",className:jt.linkButton,disabled:p,onClick:()=>{S({autoOpenGuideSeen:!0},!0)},children:i("dashboardAutoOpenGuide.openSettings","Open Settings")}),w.jsx("span",{className:`${jt.feedback} ${m?jt.feedbackError:""}`,"aria-live":"polite",children:p?i("dashboardAutoOpenGuide.saving","Saving…"):m?i("dashboardAutoOpenGuide.error","Could not save your choice. Please try again."):" "})]})]})}const Yb="_layout_19mmz_2",Kb="_mainShell_19mmz_8",$b="_content_19mmz_17",Xb="_loading_19mmz_26",jn={layout:Yb,mainShell:Kb,content:$b,loading:Xb};function Jb(){const{pathname:i,search:s}=Kt(),{trackPageView:r}=gs();return A.useEffect(()=>{r(ps(i,s))},[i,s,r]),null}function Zb(){const{t:i}=ma();return w.jsx("div",{className:jn.loading,children:i("common.loading","Loading...")})}function Qb(){return w.jsx(of,{children:w.jsx(gf,{children:w.jsxs(Gm,{children:[w.jsx(hf,{}),w.jsx(Jb,{}),w.jsxs("div",{className:jn.layout,children:[w.jsx(MS,{}),w.jsxs("div",{className:jn.mainShell,children:[w.jsx(jb,{}),w.jsxs("main",{className:jn.content,children:[w.jsx(Gb,{}),w.jsx(A.Suspense,{fallback:w.jsx(Zb,{}),children:w.jsx(cm,{})})]})]})]})]})})})}function vp(i){return i.route==="/"?{index:!0,lazy:i.lazy}:i.route==="/changelog"?{path:"changelog/:id?",lazy:i.lazy}:{path:i.route.slice(1),lazy:i.lazy}}const eP=bm([{path:"/",element:w.jsx(Qb,{}),children:[...Kp.map(vp),...Fl.map(vp),{path:"settings",lazy:()=>ia(()=>import("./SettingsPage-Cgnm6p8V.js"),__vite__mapDeps([48,2,3,1,6,44,45,11,12,13,38,39,49]))}]}]);Gy.createRoot(document.getElementById("root")).render(w.jsx(Im,{router:eP}));export{Uo as A,uP as B,ja as C,td as D,Fp as E,_f as F,Cb as G,wb as H,Kf as I,qS as J,lP as K,zo as L,sv as M,rP as N,dP as O,rv as P,aP as Q,Gp as R,tf as S,Av as T,Wp as U,iP as V,sP as W,vv as X,nP as Y,_S as Z,OS as _,gs as a,Pt as b,Kt as c,_n as d,wv as e,Fe as f,HS as g,Bm as h,Yt as i,w as j,yf as k,Bn as l,Mf as m,pv as n,tg as o,pP as p,gP as q,A as r,eg as s,kb as t,ma as u,cP as v,qn as w,Mn as x,ps as y,oP as z};