{"ok":true,"site":{"host":"hjow.github.io","url":"https://hjow.github.io/puyow/src/puyow.html","type":"live","desc":"Puyo W","tools":[{"name":"manual","kind":"act","impl":"imperative","description":"Return English instructions for playing Puyo W and using the other available game tools.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/puyow/src/puyow.html"},{"name":"now_screen","kind":"answer","impl":"imperative","description":"Get the exact visible Puyo W screen: initial title, main menu, rule or watch selection, together-mode selection or offline together guide, online login, signup, lobby or room, standard or FEVER opponent selection, practice or continuous-fever color selection, Puzzle Puyo stage selection, simulator modes, settings, gallery, tutorial phases, match countdown, playing, pause, ending animation, or the result screen (game_over). Also reports the match mode and rule, replay playback, ONNX model loading, confirmation-dialog state, and text-input-dialog state. playerCanControl is true only while the left human player (1P) controls an active pair.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"outputSchema":{"type":"object","properties":{"screen":{"type":"string","enum":["initial_title","main_menu","rule_select","watch_select","together_mode_select","together_guide","online_login","online_signup","online_lobby","online_room","practice_difficulty","puzzle_stage_select","opponent_select","fever_opponent_select","simulator_draw","simulator_simulation","simulator_complete","settings","settings_resetting","gallery","tutorial_intro","tutorial_demo","tutorial_result","tutorial_complete","countdown","playing","paused","ending","game_over"],"description":"The exact visible title, menu, together-mode selection or guide, online login, signup, lobby, or room, puzzle-stage selection, gallery, simulator, tutorial, or match screen. game_over is the match result screen."},"playerCanControl":{"type":"boolean","description":"True only while the left human player (1P) controls an active pair. Always false in watch mode and during replay playback. In together mode it describes 1P only."},"mode":{"type":["string","null"],"enum":["versus","together","practice","watch","continuous_fever","puzzle",null],"description":"Match mode, or null outside a match (menus, simulator, gallery, settings, tutorial)."},"rule":{"type":["string","null"],"enum":["standard","fever","fever_start","relaxed_fever","two_explosion","continuous_fever",null],"description":"Match rule, or null outside a match."},"replayPlayback":{"type":"boolean","description":"True while a recorded replay is played back. Only Escape is accepted, and it skips to the result screen."},"modelLoading":{"type":"boolean","description":"True while ONNX models of a deep-learning opponent are loading. The countdown waits until loading ends."},"confirmDialogOpen":{"type":"boolean","description":"True while a confirmation dialog covers the screen and captures all input. A match under the dialog is paused."},"textDialogOpen":{"type":"boolean","description":"True while a text input dialog covers the screen and captures all input. A match under the dialog is paused."}},"required":["screen","playerCanControl","mode","rule","replayPlayback","modelLoading","confirmDialogOpen","textDialogOpen"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/puyow/src/puyow.html"},{"name":"screen_layout","kind":"answer","impl":"imperative","description":"Get how the game canvas is laid out on the web page. fitMode 0 means page HTML/CSS sizes the game and it never rotates; fitMode 1 means the script fits the 16:9 game inside the viewport minus margin (px), touching the shorter side and centering it, and rotates it 90 degrees clockwise on a portrait viewport unless landscape lock is enabled. canvasRect is the on-screen box of the 2D canvas in CSS pixels. When rotated is true, logical game x (0-1280) runs from canvasRect.top downward and logical game y (0-720) runs from the right edge of canvasRect leftward.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"outputSchema":{"type":"object","properties":{"fitMode":{"type":"integer","enum":[0,1],"description":"0 = sized by page HTML/CSS without rotation, 1 = fitted to the viewport by the script."},"margin":{"type":"object","properties":{"top":{"type":"number"},"right":{"type":"number"},"bottom":{"type":"number"},"left":{"type":"number"}},"required":["top","right","bottom","left"],"description":"Space in CSS pixels kept empty between the viewport edges and the game area in fitMode 1."},"rotated":{"type":"boolean","description":"True while the canvas is rotated 90 degrees clockwise for a portrait viewport."},"viewport":{"type":"object","properties":{"width":{"type":"number"},"height":{"type":"number"}},"required":["width","height"]},"canvasRect":{"type":["object","null"],"properties":{"left":{"type":"number"},"top":{"type":"number"},"width":{"type":"number"},"height":{"type":"number"}},"description":"On-screen bounding box of the 2D canvas in CSS pixels, after rotation."}},"required":["fitMode","margin","rotated","viewport","canvasRect"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/puyow/src/puyow.html"},{"name":"now_game_status","kind":"answer","impl":"imperative","description":"Get complete JSON match state while a match is playing or paused, in any mode (CPU match, online, together, practice, continuous fever, Puzzle Puyo, watch, or replay playback): mode and rule, elapsed time, margin rate and time multiplier, colors, AI difficulty, both current, normal, and FEVER fields, scores, ATTACK and DAMAGE, all-clear tickets, the next two pairs, current-field warning puyos, deferred normal DAMAGE during FEVER, per-player and continuous FEVER state, Puzzle Puyo objective, together-mode win counts, online connection state, and both active pairs with coordinates. FEVER DAMAGE and current-round targeting priority are documented by manual and the status schema.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"outputSchema":{"type":"object","description":"Match mode and rule, time and ATTACK scaling, both current, normal, and FEVER fields, scores, ATTACK and DAMAGE, all-clear tickets, upcoming pairs, warning puyos, FEVER, Puzzle Puyo, together-mode and online-play state, and both active pairs. During FEVER, FEVER DAMAGE is offset before an ATTACK aimed at the current FEVER round, then reserved normal DAMAGE, then other ATTACK; a placement after the timer expires returns to the normal field before dropping reserved DAMAGE. Board coordinates start at the bottom-left.","properties":{"screen":{"type":"string","enum":["playing","paused"]},"playerCanControl":{"type":"boolean","description":"True only while the left human player (1P) controls an active pair. Always false in watch mode and during replay playback. In together mode it describes 1P only."},"mode":{"type":"string","enum":["versus","together","practice","watch","continuous_fever","puzzle"]},"rule":{"type":"string","enum":["standard","fever","fever_start","relaxed_fever","two_explosion","continuous_fever"]},"running":{"type":"boolean"},"paused":{"type":"boolean"},"countdown":{"type":"number","minimum":0,"description":"Remaining start countdown in milliseconds."},"elapsed":{"type":"number","minimum":0,"description":"Match time in milliseconds."},"marginRate":{"type":"number","exclusiveMinimum":0,"description":"Current margin rate. ATTACK is the score divided by this rate, and the rate drops as the match goes on."},"timeProgressMultiplier":{"type":"number","minimum":1,"description":"ATTACK multiplier from match time: 1 until 360 seconds, then doubling every 60 seconds from 360 seconds up to 4096."},"practice":{"type":"boolean"},"watch":{"type":"boolean","description":"True when two CPUs play each other, including watch replays."},"continuousFever":{"type":"boolean"},"feverRule":{"type":"boolean"},"feverStart":{"type":"boolean","description":"True for FEVER rule (start), where both players begin inside FEVER."},"twoExplosion":{"type":"boolean","description":"2-폭발 룰이면 true다."},"explosionCount":{"type":"integer","description":"같은 색 뿌요가 상하좌우로 연결되어 폭발하는 최소 수다. 2-폭발은 2, 다른 게임은 4다."},"allClearTicketEnabled":{"type":"boolean","description":"기본 룰·2-폭발·너랑 나랑·퍼즐뿌요는 싹쓸이 뒤 다음 색 뿌요 폭발에 쓰는 티켓을 지급한다. 연습은 즉시 2100점을 더하고 피버는 연쇄·시간 보상을 사용한다."},"colorCount":{"type":"integer","minimum":3,"maximum":5},"colors":{"type":"array","items":{"type":"string","enum":["red","green","yellow","blue","purple"]},"minItems":3,"maxItems":5},"aiDifficulty":{"type":"object","properties":{"key":{"type":"string","enum":["easy","normal","hard","extreme"]},"name":{"type":"string"},"fastDownDelay":{"type":["number","null"],"description":"CPU fast-drop delay in milliseconds, or null when the CPU never fast-drops."}},"required":["key","name","fastDownDelay"]},"winner":{"type":["string","null"],"enum":["player","opponent",null]},"ending":{"type":["object","null"],"properties":{"loser":{"type":["string","null"],"enum":["player","opponent",null]},"winner":{"type":["string","null"],"enum":["player","opponent",null]},"elapsed":{"type":"number","minimum":0},"duration":{"type":"number","minimum":0}},"required":["loser","winner","elapsed","duration"]},"replayPlayback":{"type":"boolean","description":"True while a recorded replay is played back. Only Escape is accepted, and it skips to the result screen."},"together":{"type":["object","null"],"description":"Together mode (two humans on one computer) state, or null. wins holds the 1P and 2P win counts of this session.","properties":{"rule":{"type":"string","enum":["standard","fever","feverStart"]},"wins":{"type":"array","items":{"type":"integer","minimum":0},"minItems":2,"maxItems":2}},"required":["rule","wins"]},"online":{"type":["object","null"],"description":"Online play state (two humans on different computers through this server), or null. youAreHost tells whether this client created the room.","properties":{"rule":{"type":"string","enum":["standard","fever","feverStart"]},"youAreHost":{"type":"boolean"},"opponentNickname":{"type":["string","null"]}},"required":["rule","youAreHost","opponentNickname"]},"puzzle":{"type":["object","null"],"properties":{"stageIndex":{"type":"integer","minimum":-1,"description":"Zero-based stage index, or -1 for an unregistered stage tested from the developer tools page."},"turn":{"type":"integer","minimum":1},"winConditionType":{"type":"string","enum":["combo","clear","multiple","color","attack"]},"winConditionValue":{"type":"number","minimum":0},"recommendedTurns":{"type":"number","minimum":0},"condition":{"type":"string"},"starEarned":{"type":"boolean"}},"required":["stageIndex","turn","winConditionType","winConditionValue","recommendedTurns","condition","starEarned"]},"fever":{"type":["object","null"],"properties":{"targetCombo":{"type":"integer","minimum":4,"maximum":12},"leftTime":{"type":"number","minimum":0,"description":"Remaining continuous-fever time in milliseconds."},"turn":{"type":"integer","minimum":0},"pendingCombo":{"type":"integer","minimum":0},"pendingAllClear":{"type":"boolean"},"selectedStageTarget":{"type":["integer","null"],"minimum":4,"maximum":12},"stageSuppliedPair":{"type":"array","items":{"type":"string","enum":["red","green","yellow","blue","purple"]},"minItems":0,"maxItems":2}},"required":["targetCombo","leftTime","turn","pendingCombo","pendingAllClear","selectedStageTarget","stageSuppliedPair"]},"player":{"type":"object","properties":{"name":{"type":"string","description":"Display name. Together mode uses 1P and 2P."},"isCpu":{"type":"boolean","description":"True when a CPU controller moves this side. Solo modes (practice, continuous fever, Puzzle Puyo) show a placeholder opponent on the right."},"phase":{"type":"string","description":"Turn phase such as idle, control, gravity, burst, check, garbage, feverWait, feverAllClearWait, or defeated. Moves are accepted only in control."},"point":{"type":"number","minimum":0},"attack":{"type":"number","minimum":0},"damage":{"type":"number","minimum":0,"description":"Unresolved DAMAGE for the currently active field; during FEVER this is FEVER DAMAGE."},"normalDamage":{"type":"number","minimum":0,"description":"Unresolved DAMAGE reserved for the normal field; during FEVER it is applied after the FEVER field ends."},"combo":{"type":"integer","minimum":0},"placedPairCount":{"type":"integer","minimum":0},"allClearTicket":{"type":"boolean","description":"Whether the player holds an all-clear ticket. In ticket-enabled modes it adds 2100 points and 30 ATTACK to the next colored-puyo explosion; FEVER rules and practice use different all-clear rewards."},"board":{"type":"object","properties":{"columns":{"type":"integer","const":6},"rows":{"type":"integer","const":25},"visibleRows":{"type":"integer","const":12},"puyos":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":5,"description":"Column from the left."},"y":{"type":"number","minimum":0,"maximum":24,"description":"Row from the bottom; active puyos may be fractional while falling."},"color":{"type":"string","enum":["red","green","yellow","blue","purple","garbage","hardGarbage","iron"]}},"required":["x","y","color"]},"description":"All fixed puyos, including hidden rows."}},"required":["columns","rows","visibleRows","puyos"]},"normalBoard":{"type":"object","properties":{"columns":{"type":"integer","const":6},"rows":{"type":"integer","const":25},"visibleRows":{"type":"integer","const":12},"puyos":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":5,"description":"Column from the left."},"y":{"type":"number","minimum":0,"maximum":24,"description":"Row from the bottom; active puyos may be fractional while falling."},"color":{"type":"string","enum":["red","green","yellow","blue","purple","garbage","hardGarbage","iron"]}},"required":["x","y","color"]},"description":"Fixed puyos in the normal field, including while FEVER is active."}},"required":["columns","rows","visibleRows","puyos"]},"nextPairs":{"type":"array","items":{"type":"array","items":{"type":"string","enum":["red","green","yellow","blue","purple"]},"minItems":2,"maxItems":2},"description":"The next two pairs; index 0 is the pair after the active one and each pair lists the bottom (pivot) color first."},"warningPuyos":{"type":"array","items":{"type":"string"},"maxItems":6,"description":"Warning-puyo icons shown above the field for pending garbage, largest first, at most six. Types with garbage counts: hexaact 140000000, penteract 20000000, tesseract 3000000, big-bang 500000, galaxy 80000, black-hole 13000, neutron-star 2000, sun 500, star 210, rock 30, drop 6, tiny 1."},"fever":{"type":["object","null"],"description":"Per-player FEVER state in FEVER rules; null in other rules.","properties":{"active":{"type":"boolean"},"gauge":{"type":"integer","minimum":0,"maximum":7,"description":"FEVER gauge; FEVER starts when it reaches 7."},"nextTime":{"type":"integer","minimum":15,"maximum":60,"description":"Seconds granted when FEVER next starts. FEVER rule (start) begins at 60."},"targetCombo":{"type":"integer","minimum":4,"maximum":12,"description":"Chain length of the next FEVER pattern."},"leftTime":{"type":"number","minimum":0,"description":"Remaining FEVER time in milliseconds. A placement made after this reaches zero finishes FEVER before pending normal DAMAGE is dropped."},"damage":{"type":"number","minimum":0,"description":"Unresolved DAMAGE reserved for this FEVER round."},"turn":{"type":"integer","minimum":0},"selectedStageTarget":{"type":["integer","null"],"minimum":4,"maximum":12},"stageSuppliedPair":{"type":"array","items":{"type":"string","enum":["red","green","yellow","blue","purple"]},"minItems":0,"maxItems":2},"field":{"type":["object","null"],"properties":{"columns":{"type":"integer","const":6},"rows":{"type":"integer","const":25},"visibleRows":{"type":"integer","const":12},"cells":{"type":"array","items":{"type":"array","items":{"type":["string","null"],"enum":["red","green","yellow","blue","purple","garbage","hardGarbage","iron",null]},"minItems":6,"maxItems":6},"minItems":25,"maxItems":25},"puyos":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":5,"description":"Column from the left."},"y":{"type":"number","minimum":0,"maximum":24,"description":"Row from the bottom; active puyos may be fractional while falling."},"color":{"type":"string","enum":["red","green","yellow","blue","purple","garbage","hardGarbage","iron"]}},"required":["x","y","color"]},"description":"Fixed puyos in the dedicated FEVER field."}},"required":["columns","rows","visibleRows","cells","puyos"]}},"required":["active","gauge","nextTime","targetCombo","leftTime","damage","turn","selectedStageTarget","stageSuppliedPair","field"]},"active":{"type":["object","null"],"properties":{"x":{"type":"integer","minimum":0,"maximum":5},"y":{"type":"number","minimum":0,"maximum":24},"rotation":{"type":"integer","minimum":0,"maximum":3},"colors":{"type":"array","items":{"type":"string","enum":["red","green","yellow","blue","purple"]},"minItems":2,"maxItems":2},"cells":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":5,"description":"Column from the left."},"y":{"type":"number","minimum":0,"maximum":24,"description":"Row from the bottom; active puyos may be fractional while falling."},"color":{"type":"string","enum":["red","green","yellow","blue","purple","garbage","hardGarbage","iron"]}},"required":["x","y","color"]},"minItems":2,"maxItems":2}},"required":["x","y","rotation","colors","cells"]}},"required":["name","isCpu","phase","point","attack","damage","normalDamage","combo","placedPairCount","allClearTicket","board","normalBoard","nextPairs","warningPuyos","fever","active"]},"opponent":{"type":"object","properties":{"name":{"type":"string","description":"Display name. Together mode uses 1P and 2P."},"isCpu":{"type":"boolean","description":"True when a CPU controller moves this side. Solo modes (practice, continuous fever, Puzzle Puyo) show a placeholder opponent on the right."},"phase":{"type":"string","description":"Turn phase such as idle, control, gravity, burst, check, garbage, feverWait, feverAllClearWait, or defeated. Moves are accepted only in control."},"point":{"type":"number","minimum":0},"attack":{"type":"number","minimum":0},"damage":{"type":"number","minimum":0,"description":"Unresolved DAMAGE for the currently active field; during FEVER this is FEVER DAMAGE."},"normalDamage":{"type":"number","minimum":0,"description":"Unresolved DAMAGE reserved for the normal field; during FEVER it is applied after the FEVER field ends."},"combo":{"type":"integer","minimum":0},"placedPairCount":{"type":"integer","minimum":0},"allClearTicket":{"type":"boolean","description":"Whether the player holds an all-clear ticket. In ticket-enabled modes it adds 2100 points and 30 ATTACK to the next colored-puyo explosion; FEVER rules and practice use different all-clear rewards."},"board":{"type":"object","properties":{"columns":{"type":"integer","const":6},"rows":{"type":"integer","const":25},"visibleRows":{"type":"integer","const":12},"puyos":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":5,"description":"Column from the left."},"y":{"type":"number","minimum":0,"maximum":24,"description":"Row from the bottom; active puyos may be fractional while falling."},"color":{"type":"string","enum":["red","green","yellow","blue","purple","garbage","hardGarbage","iron"]}},"required":["x","y","color"]},"description":"All fixed puyos, including hidden rows."}},"required":["columns","rows","visibleRows","puyos"]},"normalBoard":{"type":"object","properties":{"columns":{"type":"integer","const":6},"rows":{"type":"integer","const":25},"visibleRows":{"type":"integer","const":12},"puyos":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":5,"description":"Column from the left."},"y":{"type":"number","minimum":0,"maximum":24,"description":"Row from the bottom; active puyos may be fractional while falling."},"color":{"type":"string","enum":["red","green","yellow","blue","purple","garbage","hardGarbage","iron"]}},"required":["x","y","color"]},"description":"Fixed puyos in the normal field, including while FEVER is active."}},"required":["columns","rows","visibleRows","puyos"]},"nextPairs":{"type":"array","items":{"type":"array","items":{"type":"string","enum":["red","green","yellow","blue","purple"]},"minItems":2,"maxItems":2},"description":"The next two pairs; index 0 is the pair after the active one and each pair lists the bottom (pivot) color first."},"warningPuyos":{"type":"array","items":{"type":"string"},"maxItems":6,"description":"Warning-puyo icons shown above the field for pending garbage, largest first, at most six. Types with garbage counts: hexaact 140000000, penteract 20000000, tesseract 3000000, big-bang 500000, galaxy 80000, black-hole 13000, neutron-star 2000, sun 500, star 210, rock 30, drop 6, tiny 1."},"fever":{"type":["object","null"],"description":"Per-player FEVER state in FEVER rules; null in other rules.","properties":{"active":{"type":"boolean"},"gauge":{"type":"integer","minimum":0,"maximum":7,"description":"FEVER gauge; FEVER starts when it reaches 7."},"nextTime":{"type":"integer","minimum":15,"maximum":60,"description":"Seconds granted when FEVER next starts. FEVER rule (start) begins at 60."},"targetCombo":{"type":"integer","minimum":4,"maximum":12,"description":"Chain length of the next FEVER pattern."},"leftTime":{"type":"number","minimum":0,"description":"Remaining FEVER time in milliseconds. A placement made after this reaches zero finishes FEVER before pending normal DAMAGE is dropped."},"damage":{"type":"number","minimum":0,"description":"Unresolved DAMAGE reserved for this FEVER round."},"turn":{"type":"integer","minimum":0},"selectedStageTarget":{"type":["integer","null"],"minimum":4,"maximum":12},"stageSuppliedPair":{"type":"array","items":{"type":"string","enum":["red","green","yellow","blue","purple"]},"minItems":0,"maxItems":2},"field":{"type":["object","null"],"properties":{"columns":{"type":"integer","const":6},"rows":{"type":"integer","const":25},"visibleRows":{"type":"integer","const":12},"cells":{"type":"array","items":{"type":"array","items":{"type":["string","null"],"enum":["red","green","yellow","blue","purple","garbage","hardGarbage","iron",null]},"minItems":6,"maxItems":6},"minItems":25,"maxItems":25},"puyos":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":5,"description":"Column from the left."},"y":{"type":"number","minimum":0,"maximum":24,"description":"Row from the bottom; active puyos may be fractional while falling."},"color":{"type":"string","enum":["red","green","yellow","blue","purple","garbage","hardGarbage","iron"]}},"required":["x","y","color"]},"description":"Fixed puyos in the dedicated FEVER field."}},"required":["columns","rows","visibleRows","cells","puyos"]}},"required":["active","gauge","nextTime","targetCombo","leftTime","damage","turn","selectedStageTarget","stageSuppliedPair","field"]},"active":{"type":["object","null"],"properties":{"x":{"type":"integer","minimum":0,"maximum":5},"y":{"type":"number","minimum":0,"maximum":24},"rotation":{"type":"integer","minimum":0,"maximum":3},"colors":{"type":"array","items":{"type":"string","enum":["red","green","yellow","blue","purple"]},"minItems":2,"maxItems":2},"cells":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":5,"description":"Column from the left."},"y":{"type":"number","minimum":0,"maximum":24,"description":"Row from the bottom; active puyos may be fractional while falling."},"color":{"type":"string","enum":["red","green","yellow","blue","purple","garbage","hardGarbage","iron"]}},"required":["x","y","color"]},"minItems":2,"maxItems":2}},"required":["x","y","rotation","colors","cells"]}},"required":["name","isCpu","phase","point","attack","damage","normalDamage","combo","placedPairCount","allClearTicket","board","normalBoard","nextPairs","warningPuyos","fever","active"]},"recommendedPoint":{"type":["object","null"],"properties":{"x":{"type":"integer","minimum":0,"maximum":5},"y":{"type":"integer","minimum":0,"maximum":11}},"required":["x","y"]}},"required":["screen","playerCanControl","mode","rule","running","paused","countdown","elapsed","marginRate","timeProgressMultiplier","practice","watch","continuousFever","feverRule","feverStart","twoExplosion","explosionCount","allClearTicketEnabled","colorCount","colors","aiDifficulty","winner","ending","replayPlayback","together","online","puzzle","fever","player","opponent","recommendedPoint"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/puyow/src/puyow.html"},{"name":"point_recommend","kind":"act","impl":"imperative","description":"While now_screen reports playerCanControl, highlight exactly one recommended cell on the left (1P) field at the given integer x and y coordinate. The highlight disappears when that pair locks. It is unavailable in watch mode, during replay playback, pause, countdown, and while no pair is controlled.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":5,"description":"Board column from the left."},"y":{"type":"integer","minimum":0,"maximum":11,"description":"Board row from the bottom."}},"required":["x","y"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/puyow/src/puyow.html"},{"name":"show_message","kind":"act","impl":"imperative","description":"Display an already-localized message at the top of the current screen. It remains visible for duration milliseconds (default 2000), then fades out. An optional backgroundColor draws a rectangle behind the text. Do not use this tool for translation.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"message":{"type":"string","description":"The already-localized text to display."},"color":{"type":"string","default":"white","description":"CSS text color."},"duration":{"type":"number","minimum":0,"default":2000,"description":"Milliseconds to remain fully visible before fading out."},"backgroundColor":{"type":["string","null"],"default":null,"description":"Optional CSS background color behind the message text."}},"required":["message"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/puyow/src/puyow.html"}],"category":"Media & Personal","favicon":"/favicons/hjow.github.io.png","apiSurface":"spec","toolCount":6}}