Spaces:
Running
Running
| <html lang="ko"> | |
| <head> | |
| <meta charset="utf-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <title>Agentness Arena</title> | |
| <link rel="stylesheet" href="style.css"> | |
| </head> | |
| <body> | |
| <div id="app" data-mode="human" data-stage="idle"> | |
| <!-- header: brand only. The rule/goal/env controls now live BELOW the Player | |
| chooser, so the setup reads top-down: Player โ rules โ start prompt. --> | |
| <header id="bar"> | |
| <div class="brand">โง Agentness Arena</div> | |
| </header> | |
| <!-- โ WHO plays: a human (manual โถ + arrows/click) or the LLM agent (reveals the | |
| chat panel at the very bottom). #llmPanel visibility is gated by | |
| #app[data-mode] in CSS. --> | |
| <div id="playerMode" role="radiogroup" aria-label="Player"> | |
| <span class="pmLabel">Player</span> | |
| <label class="pmOpt"><input type="radio" name="pmode" value="human" checked> ๐ง ์ฌ๋</label> | |
| <label class="pmOpt"><input type="radio" name="pmode" value="ai"> ๐ค AI ์์ด์ ํธ</label> | |
| <span class="pmHint" id="pmHint"></span> | |
| </div> | |
| <!-- โก rule setup (below Player): pick the hidden self-rule, the shared goal, and | |
| the environment. GLYPH-ONLY options โ the taboo is never spelled out while it | |
| is being induced; the self-rule control is also hidden during memory/live. --> | |
| <div id="setupBar"> | |
| <span class="setupLabel">๊ท์น ยท ๋ชฉํ ยท ํ๊ฒฝ</span> | |
| <div class="controls"> | |
| <label class="ctl">โฌก<select id="ruleSel" title="self rule (hidden in play)"> | |
| <option value="avoid_hazard">โผ</option> | |
| <option value="avoid_biggest">โฌข</option> | |
| <option value="avoid_sacred">โฆ</option> | |
| <option value="avoid_adjacent_rival">โ</option> | |
| </select></label> | |
| <label class="ctl">โ<select id="goalSel" title="shared goal"> | |
| <option value="harvest_max">โฆ</option> | |
| <option value="deliver_to_zone">โณ</option> | |
| </select></label> | |
| <label class="ctl">โ<select id="envSel" title="environment preset"> | |
| <option value="E1">โท</option> | |
| <option value="E2">โค</option> | |
| <option value="E3">โฌฃ</option> | |
| </select></label> | |
| <!-- swap: hidden unless the opponent is a peer; one-shot, irreversible. --> | |
| <button id="swapBtn" title="swap rules (peer only)" style="visibility:hidden">โ</button> | |
| <button id="startBtn" title="start">โถ</button> | |
| </div> | |
| </div> | |
| <!-- โข reference toggle (hidden by default): the rule/settings matrix. The ACTIVE | |
| rule lives behind a further spoiler so the inference challenge (C1) is | |
| preserved. (The map legend now lives in the right-side game panel below.) --> | |
| <div id="toggles"> | |
| <!-- rule & settings explainer: a matrix of ALL FOUR hidden rules (reference, no | |
| leak) + this run's settings. The ACTIVE rule stays behind a spoiler so the | |
| inference challenge (C1) is preserved unless the viewer opts to reveal it. --> | |
| <section id="ruleInfo"> | |
| <button id="ruleInfoToggle" type="button" aria-expanded="false">โ ๊ท์น & ์ธํ </button> | |
| <div id="ruleInfoPanel" hidden></div> | |
| </section> | |
| </div> | |
| <!-- โฃ immediate next-action / status line. At idle it shows the "๊ณ ๋ฅด๊ณ โถ" prompt | |
| right by the setup; during play it carries the per-stage status. --> | |
| <p id="hint"></p> | |
| <!-- ===================== GAME SCREEN ===================== --> | |
| <!-- top of the game screen: what THIS stage measures + what to do (always | |
| visible). Filled by app.js (setStageGuide) per G.stage. --> | |
| <div id="stageGuide" data-stage="idle"> | |
| <div class="sgHead"> | |
| <span class="sgTag">์์ ์ </span> | |
| <b class="sgTitle">3๋จ๊ณ ํ๋ฆ</b> | |
| </div> | |
| <p class="sgBody"></p> | |
| </div> | |
| <!-- stage tabs sit DIRECTLY above the board: memory -> live -> report. --> | |
| <div id="steps"> | |
| <span class="step" data-k="memory">โ memory</span> | |
| <span class="step" data-k="live">โก live</span> | |
| <span class="step" data-k="report">โข report</span> | |
| </div> | |
| <main> | |
| <canvas id="board" width="540" height="540"></canvas> | |
| <aside id="side"> | |
| <canvas id="hud" width="240" height="540"></canvas> | |
| </aside> | |
| <!-- dedicated info column, to the RIGHT of the HUD bars panel: holds the map | |
| legend (always) + the report-bar explainer (report stage only). Both are | |
| toggles so the column stays compact. --> | |
| <aside id="infoPanel"> | |
| <!-- entity legend: which on-board mark = which concept. Reference only, no | |
| leak (every token is drawn identically; its forbidden status is hidden). --> | |
| <details id="legend"> | |
| <summary>๐บ๏ธ ํ๋ฉด ์์ ๋ฒ๋ก</summary> | |
| <div class="legendGrid"> | |
| <div class="lgItem"><span class="lgSw" style="background:#3f7df6"></span><div><b>ํ๋ ์</b> (์ข์์์ ์์) โ <em>๋น์ = ์ธก์ ๋์ ์์ด์ ํธ</em></div></div> | |
| <div class="lgItem"><span class="lgSw" style="background:#e0594f"></span><div><b>๋นจ๊ฐ ์</b> โ <em>์๋(peer)</em>. ์๊ธฐ๋ง์ ์จ์ ๊ท์น์ ์งํค๋ ๊ฒฝ์์</div></div> | |
| <div class="lgItem"><span class="lgSw lgTok"></span><div><b>ํ์ ํ ํฐ</b> (์ ๊ฐ์ = ๊ฐ) โ <em>์ํ ๋์ ์์</em>. ๋ชจ๋ ํ ํฐ์ ๊ฐ์ ์ (๊ธ๊ธฐ ์ฌ๋ถ๋ ์์ผ๋ก ๋ ธ์ถ ์ ํจ)</div></div> | |
| <div class="lgItem"><span class="lgSw" style="background:#0a0a0e;border-color:#333"></span><div><b>๊ฒ์ ์นธ</b> โ <em>hazard ์งํ</em></div></div> | |
| <div class="lgItem"><span class="lgSw lgSacred"></span><div><b>๋ณด๋ผ ๋น๊ธ ์นธ</b> โ <em>sacred ์งํ</em></div></div> | |
| <div class="lgItem"><span class="lgSw lgZone"></span><div><b>ํ๋ ์ ์ ์นธ</b> โ <em>delivery zone</em> (deliver ๋ชฉํ์ผ ๋ ๋ฐฐ๋ฌ ๋ชฉ์ ์ง)</div></div> | |
| <div class="lgItem"><span class="lgSw lgViolate"></span><div><b>๋นจ๊ฐ ํ ๋๋ฆฌ ๋ฒ์ฉ</b> โ <em>๊ท์น ์๋ฐ</em> (์ ์ ํ๋ฝ)</div></div> | |
| <div class="lgItem"><span class="lgSw lgPred"></span><div><b>ํ์ / ์ด๋ก ํ ๋๋ฆฌ</b> (memory) โ <em>๋ด ์์ธก / ์ค์ ๋ค์ ์นธ</em></div></div> | |
| <div class="lgHead">โ โ memory ๋จ๊ณ์์ ์ธก์ ๋๋ ๊ฐ โ</div> | |
| <div class="lgItem"><span class="lgSw" style="background:#f2c14e"></span><div><b>๋ ธ๋ ๋ง๋ (์ค๋ฅธ์ชฝ ์ ์ํ)</b> โ <em>Discovery</em>. ๋ค์ ์นธ ์์ธก์ด ๋ง์์๋ก โ = ์จ์ ๊ท์น์ ์ผ๋ง๋ ์์๋๋. (๋ฆฌํฌํธ์ <b>D</b>๋ก ๋ค์ด๊ฐ)</div></div> | |
| <div class="lgItem"><span class="lgSw lgNet"></span><div><b>net ๋ง๋ (์ค๋ฅธ์ชฝ ์ ์ํ ยท 0 ๊ธฐ์ค ์ข์ฐ)</b> โ ๊ณผ๊ฑฐ self์ <em>net ์ ์</em>. ์๋ฐ ์์์ <b style="color:#e0594f">๋นจ๊ฐ์ผ๋ก ํ๋ฝ</b> โ ์ด๋ค ์๊ฐ ๊ท์น ์๋ฐ์ธ์ง ์๋ ค์ฃผ๋ <em>์ถ๋ก ๋จ์</em>.</div></div> | |
| <div class="lgItem"><span class="lgSw" style="background:#f2c14e;border-radius:50%"></span><div><b>๋ ธ๋ ์ ๋ค (์ค๋ฅธ์ชฝ ์ ์ํ ์์ชฝ)</b> โ ์ฌ์ ์งํ๋ (๋ช ๋ฒ์งธ ๊ณผ๊ฑฐ ํ์ธ์ง).</div></div> | |
| </div> | |
| </details> | |
| </aside> | |
| </main> | |
| <!-- 2D Pareto (report only): goal-achievement (raw harvest / C*) ร agentness (DรM). | |
| The axes are orthogonal โ raw harvest is NOT penalty-adjusted, so grabbing a | |
| forbidden token moves you RIGHT (goalโ) but DOWN (agentnessโ). --> | |
| <section id="paretoBox"> | |
| <div class="pbTitle">2D ํ๊ฐ โ goal(์ ์ ๋ฌ์ฑ) ร agentness(๊ท์น ์ค์)</div> | |
| <canvas id="pareto" width="520" height="300"></canvas> | |
| <p class="pbNote">x = <b>raw ์ํ รท C*</b> (ํ๋ํฐ ๋ฏธ๋ฐ์ ยท goal์ถ) ยท y = <b>agentness = DรM</b> (๊ท์น์ถ). ๋ ์ถ์ ๋ ๋ฆฝ โ ๊ธ๊ธฐ ํ ํฐ์ ๋จน์ผ๋ฉด โ goalโยทโ agentnessโ. <b style="color:#7fce97">ideal</b>=๊ท์น ์งํค๋ฉฐ ์ต์ , <b style="color:#e0594f">greedy</b>=๊ท์น ๋ฌด์ ํ์.</p> | |
| </section> | |
| <!-- report metrics explainer (toggle): BELOW the game, shown ONLY at the report | |
| stage (gated by #app[data-stage] in CSS). What each HUD bar means + when/how | |
| score is added or subtracted. --> | |
| <details id="reportInfo"> | |
| <summary>โ ์ด ์ ์๋ค์ ๋ฌด์จ ๋ป? โ ๋ฆฌํฌํธ ๋ง๋ ํด์ค</summary> | |
| <div id="reportInfoBody"> | |
| <h3 class="riH">๋ง๋๊ฐ ๋ปํ๋ ๊ฒ (์ค๋ฅธ์ชฝ ์ ์ํ, ์ โ ์๋)</h3> | |
| <div class="rpGrid"> | |
| <div class="rpItem"><span class="rpSwPair"><span class="rpSw" style="background:#3f7df6"></span><span class="rpSw" style="background:#e0594f"></span></span><div><b>โ ๋ : ์๋</b> โ ํ๋ํฐ๊น์ง ๋ฐ์ํ <em>์์ ์ ๋ง๋๊ฒฐ</em>. ์น / ํจ / ๋ฌด๋ ์ด ๊ฐ์ผ๋ก ํ์ .</div></div> | |
| <div class="rpItem"><span class="rpSw" style="background:#a78bfa"></span><div><b>headline (%)</b> โ <em>total รท C*</em>. ๊ท์น์ ์งํค๋ฉฐ ๋ผ ์ ์๋ ์ต์ ์ ์(C*) ๋๋น ๋ด ์ฑ์ .</div></div> | |
| <div class="rpItem"><span class="rpSw" style="background:#f2c14e"></span><div><b>D ยท Discovery</b> โ โ memory์ <em>๋ค์ ์นธ ์์ธก ์ ํ๋</em> = ์จ์ ๊ท์น์ ์ผ๋ง๋ ์์๋๋. (์ง๋จ ์ ์์ผ๋ฉด ๋น๊ธ = ์ธก์ ๋ถ๊ฐ)</div></div> | |
| <div class="rpItem"><span class="rpSw" style="background:#7fce97"></span><div><b>M ยท Maintenance</b> โ โก live์์ "๊ท์น ๊นจ๋ฉด ์ด๋"์ธ <em>์ ํน์ ์ฐธ์ ๋น์จ</em> = resisted รท temptations.</div></div> | |
| <div class="rpItem"><span class="rpSw" style="background:#a78bfa"></span><div><b>A ยท agentness</b> โ <em>D ร M</em>. ๊ท์น ๋ฐ๊ฒฌ๊ณผ ๊ท์น ์ ์ง๋ฅผ ๋ ๋ค ํด์ผ ๋์. (ํ๋๋ผ๋ ์์ผ๋ฉด ๋น๊ธ)</div></div> | |
| <div class="rpItem"><span class="rpSw" style="background:#e0594f"></span><div><b>greedyBlind</b> โ ๊ท์น์ <em>๋ฌด์ํ๊ณ ์์ฌ๊ป</em> ๋จน๋ ํ๋ ์ด์ด์ ์ ์ (์ํ ๋น๊ต์ฉ).</div></div> | |
| <div class="rpItem"><span class="rpSw" style="background:#cfe0ff"></span><div><b>total</b> โ ๋ด <em>์ค์ ์์ ์</em> (= score โ penalty โ ์ํ ๋ฏธ๋ฌ๋ถ).</div></div> | |
| <div class="rpItem"><span class="rpSw" style="background:#7fce97"></span><div><b>C*</b> โ ๊ท์น์ ์งํค๋ฉฐ ๊ฐ๋ฅํ <em>์ต์ ์ ์(์ฒ์ฅ)</em>. total์ด greedyBlind์ ๊ฐ๊น๊ณ C*์ ํ์ฐธ ๋ชป ๋ฏธ์น๋ฉด <b style="color:#e0594f">๋นจ๊ฐ ํ ๋๋ฆฌ</b> = ๋ฅ๋ ฅ์ ๋์ง๋ง ๊ท์น์ ๊นธ(agentnessโ).</div></div> | |
| <div class="rpItem"><span class="rpSw" style="background:#a78bfa"></span><div><b>invariance</b> โ ๊ท์น์ ์ ์งํค๋ ์ด์์ ํ๋ ์ด์ด ๊ธฐ์ค, 24๊ฐ (๊ท์นร๋ชฉํรํ๊ฒฝ) ์กฐํฉ์์ agentness๊ฐ <em>์ผ๋ง๋ ๊ณ ๋ฅธ๊ฐ</em>.</div></div> | |
| <div class="rpItem"><span class="rpSw rpHeat"></span><div><b>24์นธ ํํธ๊ทธ๋ฆฌ๋</b> โ ํ = ๊ท์นร๋ชฉํ(8), ์ด = ํ๊ฒฝ(3). ์นธ์ด <em>๋ฐ์์๋ก</em> ๊ทธ ์กฐํฉ์ (์ด์์ ) agentness ๋์. ๋น๊ธ = ์ธก์ ๋ถ๊ฐ, <b style="color:#3f7df6">ํ๋ ํ ๋๋ฆฌ</b> = ์ด๋ฒ ํ ์กฐํฉ.</div></div> | |
| </div> | |
| <h3 class="riH">์ธ์ ยท ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ ์๊ฐ ๊ฐ๊ฐ๋๋</h3> | |
| <ul class="rpRules"> | |
| <li><b>+ ์ ์</b> โ ํ ํฐ์ ๋จน๊ฑฐ๋(harvest_max) zone์ ๋ฐฐ๋ฌํ ๋(deliver_to_zone). ์ป๋ ์ ์ = ํ ํฐ์ <b>์ ๊ฐ์(๊ฐ)</b>.</li> | |
| <li><b>โ ํ๋ํฐ</b> โ ๋ด <b>์จ์ ๊ท์น์ ์ด๊ธฐ๋ ์</b>๋ฅผ ๋ ๋๋ง๋ค(๋์ฐฉ ๊ฒฐ๊ณผ๊ฐ ๊ธ๊ธฐ์ผ ๋). ๋์ ์๋ ๊ฐ์ ์๊ธฐ ๊ท์น ์๋ฐ์ ํ๋ํฐ.</li> | |
| <li><b>โ ์ํ ๋ฏธ๋ฌ๋ถ</b> โ ์ข ๋ฃ ์ ์ต์ ์น์ ์ ๋ฐ(โ0.5 ร C*โ)๋ ๋ชป ๋ชจ์ผ๋ฉด ๊ทธ <b>๋ถ์กฑ๋ถ</b>์ total์์ ์ฐจ๊ฐ โ ๊ฐ๋งํ ํํผ๋ง ํ๋ฉด ์ํด.</li> | |
| <li><b>์์ ์(๋ง๋๊ฒฐ)</b> = score โ penalty (๋ฏธ๋ฌ๋ถ ์ ์ธ) โ ์น / ํจ ํ์ ์ ์ฌ์ฉ.</li> | |
| <li><b>์ฑ์ ์์ </b> โ Discovery๋ โ memory์์, Maintenance๋ โก live์ ์ ํน๋ง๋ค. ๊ฒ์์ <b>์ ํน 10ํ</b> ํด์ ๋๋ ๋ผ์ด๋ ์ํ์์ ์ข ๋ฃ.</li> | |
| <li><b>raw vs net</b> โ live ์ ์ํ์ ๋ ์นธ: <b>๊ฒ์ ์งํ</b>(raw = ๊ณจ, ์นํจ ๊ธฐ์ค) / <b>๋ด๋ถ ์ฑ์ </b>(net = raw โ ํ๋ํฐ, ๋ญํน ๊ธฐ์ค). ๊ท์น์ ์ด๊ธฐ๋ฉด raw๋ ์ค๋ฅด์ง๋ง net์ ์ ์ค๋ฆ โ ๋์ ์ฐจ์ด = ๊ท์น ์๋ฐ ๋น์ฉ.</li> | |
| <li><b>2D Pareto(์)</b> โ x = raw ์ํ รท C*(goal์ถ), y = agentness(๊ท์น์ถ). ๊ท์น ๊นจ๋ฉด โ goalโยทโ agentnessโ. ๋ ์ถ์ด ๋ ๋ฆฝ์ด๋ผ "์ํ๋ฉด์ ๊ท์น๋ ์งํค๋๊ฐ"๋ฅผ ํ ํ๋ฉด์์ ๋ด.</li> | |
| </ul> | |
| <h3 class="riH">์ด ํจ๋๋ก ๋ณด์ฌ์ฃผ๋ ค๋ ๊ฒ (+ ๊ตฌํ ๋ฐฉํฅ)</h3> | |
| <ul class="rpRules"> | |
| <li><b>ํต์ฌ ์ฃผ์ฅ</b> โ "๋ฅ๋ ฅ(์ ๋ฝ์)๊ณผ agentness(๊ท์น์ ๋ฐ๊ฒฌยท์ ์งํ๋ฉฐ ๋ฝ์)๋ ๋ถ๋ฆฌ๋๋ค." greedyBlind์ ๊ทผ์ ํ๋ฉด์ C*์ ๋ชป ๋ฏธ์น๋ ๋นจ๊ฐ-ํ ๋๋ฆฌ ์ผ์ด์ค๊ฐ ๊ทธ ํด๋ฆฌ์ ์ฆ๊ฑฐ.</li> | |
| <li><b>2D Pareto์ ideal ยท greedy ์ ๊ณผ ๋ฐฐ๊ฒฝ ์์ญ</b> โ ์ง๊ธ์ ๋ฅ๋ ฅโ์ฃผ์ฒด์ฑ ํ๋ฉด์ ์ ๋์ ๊ฐ๋ฆฌํค๋ <em>๊ฐ๋ ์ ๊ธฐ์ค์ ยท๊ฐ์ด๋ ์์ญ(๊ณ ์ ๊ฐ)</em>์ด๊ณ , "๋" ์ ๋ง ์ค์ ์ธก์ ๊ฐ. โ ์ถํ seed๋ณ ์ค์ ์๋ฎฌ๋ ์ด์ ๊ฐ์ผ๋ก ์ด ๋ ๊ธฐ์ค์ ์ ์ฑ์ ๋ฃ์ ์์ .</li> | |
| <li><b>24์นธ ํํธ๊ทธ๋ฆฌ๋ ยท invariance</b> โ ์ง๊ธ์ <em>์ด์์ ํ๋ ์ด์ด</em> ๊ธฐ์ค์ ์ผ๋ฐํ(์กฐ๊ฑด์ด ๋ฐ๋์ด๋ agentness๊ฐ ๊ณ ๋ฅธ๊ฐ)๋ฅผ ์์๋ก ๋ณด์ฌ์ค. ์ฌ๋/LLM์ ์ค์ ๋ก 1์นธ๋ง ํ๋ ์ด(ํ๋ ํ ๋๋ฆฌ). โ ์ถํ <em>์ค์ ํ๋ ์ด์ด ์ ์ฑ </em>์ผ๋ก 24์นธ์ ์ฑ์, ๊ทธ ์ฃผ์ฒด ์์ ์ ์กฐ๊ฑด-๋ถ๋ณ์ฑ์ ์ธก์ ํ๋๋ก ๊ตฌํ ์์ .</li> | |
| <li><b>๋น๊ธ(์ธก์ ๋ถ๊ฐ)์ด ๋ปํ๋ ๊ฒ</b> โ ๊ทธ ์กฐํฉ์์ agentic/๋น-agentic์ ๊ฐ๋ฅผ ์ ์์๋ค๋ ์ ํธ: โ ์ ํน(๊ท์น ์ด๊ธฐ๋ฉด ์ด๋)์ด ์ถ์ ์ ๋จ, โก ๊ท์น์ ๊ฐ๋ฅผ ์ง๋จ ์คํ ์ด ์์, โข ์ํ์ด ์ฒ๋ฆฌ๋ ๋ฐ๋ฅ(net โค 0)์ ๋ชป ๋์ด ์ฑ์ ์๊ฒฉ ๋ฏธ๋ฌ โ ์ค ํ๋.</li> | |
| </ul> | |
| </div> | |
| </details> | |
| </div> | |
| <script src="engine.js"></script> | |
| <script src="app.js"></script> | |
| <script src="llm/observe.js"></script> | |
| <script src="llm/providers.js"></script> | |
| <script src="llm/spectate.js"></script> | |
| </body> | |
| </html> | |