tycono 0.1.95-beta.0 → 0.1.95-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tycono",
3
- "version": "0.1.95-beta.0",
3
+ "version": "0.1.95-beta.1",
4
4
  "description": "Build an AI company. Watch them work.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -477,7 +477,7 @@ export class ClaudeCliRunner implements ExecutionRunner {
477
477
  '--output-format', 'stream-json',
478
478
  '--verbose',
479
479
  '--dangerously-skip-permissions',
480
- '--model', config.model ?? 'claude-sonnet-4-5',
480
+ '--model', config.model ?? 'claude-opus-4-6',
481
481
  '--max-turns', String(maxTurns),
482
482
  '--mcp-config', mcpConfig,
483
483
  '--strict-mcp-config',
@@ -516,7 +516,7 @@ export class ClaudeCliRunner implements ExecutionRunner {
516
516
  cleanEnv.SUPERVISION_CMD = supervisionScript;
517
517
  }
518
518
 
519
- const modelName = config.model ?? 'claude-sonnet-4-5';
519
+ const modelName = config.model ?? 'claude-opus-4-6';
520
520
  // Use codeRoot as cwd — auto-creates ../{name}-code/ if not configured
521
521
  const codeRoot = resolveCodeRoot(companyRoot);
522
522
  const cwd = codeRoot;
@@ -296,15 +296,18 @@ ${recoveryContext}
296
296
 
297
297
  ## Quality Gate (CRITICAL — G-09)
298
298
  ⛔ **"Subordinate said done" ≠ "Work is actually done."**
299
- ⛔ **"Code exists" ≠ "Code works."** You MUST run and test the output, not just read files.
299
+ ⛔ **"Code exists" ≠ "Code works."**
300
+
301
+ ⛔ **You are a SUPERVISOR. You do NOT run code, servers, npm install, or builds yourself.**
302
+ ⛔ **Dispatch QA (Tester) to run and test. Read QA's report to judge quality.**
300
303
 
301
304
  Before declaring yourself done, you MUST:
302
305
 
303
306
  1. **Read the actual output files** — don't trust status reports. Check the code yourself.
304
- 2. **RUN it and test it** — this is the most important step:
305
- - For web apps/games: \`cd <code-dir> && python3 -m http.server 9999\` then open in browser
306
- - Actually try the core interactions (click buttons, press keys, navigate)
307
- - If basic interactions fail (can't move, can't click, blank screen) it's NOT done
307
+ 2. **Dispatch QA to test it** — QA runs the server, opens browser, clicks buttons, reports bugs.
308
+ - Do NOT run \`npm install\`, \`npm run build\`, \`python3 -m http.server\` yourself.
309
+ - Do NOT run \`agent-browser\` yourself. That is QA's job.
310
+ - Your job: read QA's report, decide if it passes, re-dispatch if not.
308
311
  3. **Count against requirements** — if the directive says "15 monsters, 7 maps", count them.
309
312
  4. **Check the directive's specific tech requirements** — if it mentions a specific library/engine, verify it's actually used in the code (grep for it).
310
313
  5. **If quality is insufficient → re-dispatch** with specific, actionable feedback:
@@ -1 +1 @@
1
- import{r as i,c as v,j as e,d as g,O as C,A as b}from"./index-C9U34tT1.js";const x=["#FFE0BD","#F1C27D","#E0AC69","#C68642","#8D5524","#6B4423"],y=["#2C1B18","#724133","#C68642","#E6BE8A","#D4AF37","#B94E48"];function j(){return"#"+Math.floor(Math.random()*16777215).toString(16).padStart(6,"0")}function h(r){return r[Math.floor(Math.random()*r.length)]}function A({onComplete:r}){const t=i.useRef(null),[a,c]=i.useState("플레이어"),[n,o]=i.useState({skinColor:x[0],hairColor:y[0],shirtColor:"#3498db",pantsColor:"#2C3E50",shoeColor:"#34495E",hairStyle:"short",outfitStyle:"tshirt",accessory:"none"});i.useEffect(()=>{if(!t.current)return;t.current.innerHTML="";const s=v(n,{scale:6});t.current.appendChild(s)},[n]);const l=()=>{o({skinColor:h(x),hairColor:h(y),shirtColor:j(),pantsColor:j(),shoeColor:j(),hairStyle:h(g),outfitStyle:h(C),accessory:h(b)})},p=()=>{r({appearance:n,stats:{name:a,level:1,hp:100,maxHp:100,mp:80,maxMp:80,attack:20,defense:10}})};return e.jsxs("div",{className:"character-creator",children:[e.jsx("h1",{children:"캐릭터 생성"}),e.jsxs("div",{className:"creator-layout",children:[e.jsx("div",{className:"preview-section",children:e.jsx("div",{className:"preview-canvas",ref:t})}),e.jsxs("div",{className:"customization-section",children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:"이름"}),e.jsx("input",{type:"text",value:a,onChange:s=>c(s.target.value),maxLength:10})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:"피부색"}),e.jsx("div",{className:"color-palette",children:x.map(s=>e.jsx("button",{className:`color-btn ${n.skinColor===s?"active":""}`,style:{backgroundColor:s},onClick:()=>o({...n,skinColor:s})},s))})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:"헤어스타일"}),e.jsx("select",{value:n.hairStyle,onChange:s=>o({...n,hairStyle:s.target.value}),children:g.map(s=>e.jsx("option",{value:s,children:s},s))})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:"헤어 색상"}),e.jsx("div",{className:"color-palette",children:y.map(s=>e.jsx("button",{className:`color-btn ${n.hairColor===s?"active":""}`,style:{backgroundColor:s},onClick:()=>o({...n,hairColor:s})},s))})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:"의상"}),e.jsx("select",{value:n.outfitStyle,onChange:s=>o({...n,outfitStyle:s.target.value}),children:C.map(s=>e.jsx("option",{value:s,children:s},s))})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:"액세서리"}),e.jsx("select",{value:n.accessory,onChange:s=>o({...n,accessory:s.target.value}),children:b.slice(0,15).map(s=>e.jsx("option",{value:s,children:s},s))})]}),e.jsxs("div",{className:"button-group",children:[e.jsx("button",{onClick:l,className:"btn-secondary",children:"🎲 랜덤 생성"}),e.jsx("button",{onClick:p,className:"btn-primary",children:"⚔️ 게임 시작!"})]})]})]})]})}const m={attack:{name:"공격",emoji:"⚔️"},defend:{name:"방어",emoji:"🛡️"},heal:{name:"회복",mpCost:20,emoji:"💚"},flee:{name:"도망",emoji:"🏃"}};function H(){const r=[{name:"슬라임",hp:50,attack:8,defense:3},{name:"고블린",hp:70,attack:12,defense:5},{name:"해골",hp:60,attack:15,defense:2},{name:"오크",hp:100,attack:18,defense:8}],t=r[Math.floor(Math.random()*r.length)];return{name:t.name,level:1,hp:t.hp,maxHp:t.hp,mp:0,maxMp:0,attack:t.attack,defense:t.defense}}function N(r,t,a){const c=r.attack-t.defense/2,n=Math.max(1,Math.floor(c));return a?Math.floor(n*.5):n}function T(r,t){const a={...r};if(t==="heal"&&a.player.mp<m.heal.mpCost)return{newState:a,continueToEnemyTurn:!1};let c;switch(t){case"attack":{const n=N(a.player,a.enemy,!1);a.enemy.hp=Math.max(0,a.enemy.hp-n),c={actorName:a.player.name,skill:"attack",damage:n,message:`${a.player.name}의 공격! ${n} 데미지!`},a.defendActive=!1;break}case"defend":{a.defendActive=!0,c={actorName:a.player.name,skill:"defend",message:`${a.player.name}이(가) 방어 태세를 취했다!`};break}case"heal":{const o=Math.min(30,a.player.maxHp-a.player.hp);a.player.hp=Math.min(a.player.maxHp,a.player.hp+30),a.player.mp-=m.heal.mpCost,c={actorName:a.player.name,skill:"heal",heal:o,message:`${a.player.name}이(가) 회복! HP +${o}`},a.defendActive=!1;break}case"flee":{Math.random()<.5?(a.status="fled",c={actorName:a.player.name,skill:"flee",message:`${a.player.name}이(가) 도망쳤다!`}):c={actorName:a.player.name,skill:"flee",message:"도망에 실패했다!"},a.defendActive=!1;break}}return a.log=[...a.log,c],a.enemy.hp<=0?(a.status="victory",{newState:a,continueToEnemyTurn:!1}):a.status==="fled"?{newState:a,continueToEnemyTurn:!1}:{newState:a,continueToEnemyTurn:!0}}function R(r){const t={...r},a=N(t.enemy,t.player,t.defendActive);t.player.hp=Math.max(0,t.player.hp-a);const c={actorName:t.enemy.name,skill:"attack",damage:a,message:`${t.enemy.name}의 공격! ${a} 데미지!`};return t.log=[...t.log,c],t.defendActive=!1,t.player.hp<=0&&(t.status="defeat"),t}function $(r,t){return{player:r,enemy:t,turn:"player",log:[],defendActive:!1,status:"ongoing"}}function P(){return{skinColor:"#6B8E23",hairColor:"#2F4F2F",shirtColor:"#8B4513",pantsColor:"#654321",shoeColor:"#3E2723",hairStyle:"messy",outfitStyle:"vest",accessory:"horns"}}function B({player:r,onRestart:t}){const a=i.useRef(null),c=i.useRef(null),n=i.useRef(null),[o]=i.useState(P()),[l,p]=i.useState(()=>$(r.stats,H()));i.useEffect(()=>{if(a.current){a.current.innerHTML="";const d=v(r.appearance,{scale:6});a.current.appendChild(d)}if(c.current){c.current.innerHTML="";const d=v(o,{scale:6});c.current.appendChild(d)}},[r.appearance,o]),i.useEffect(()=>{n.current&&(n.current.scrollTop=n.current.scrollHeight)},[l.log]);const s=d=>{if(l.status!=="ongoing")return;const{newState:u,continueToEnemyTurn:M}=T(l,d);p(u),M&&u.status==="ongoing"&&setTimeout(()=>{p(f=>f.status!=="ongoing"?f:R(f))},800)},k=l.player.hp/l.player.maxHp*100,S=l.enemy.hp/l.enemy.maxHp*100,E=l.player.mp/l.player.maxMp*100;return e.jsxs("div",{className:"battle-screen",children:[e.jsx("h1",{children:"⚔️ 배틀!"}),e.jsxs("div",{className:"battle-characters",children:[e.jsxs("div",{className:"character-box",children:[e.jsx("div",{className:"character-canvas",ref:a}),e.jsx("div",{className:"character-name",children:l.player.name}),e.jsxs("div",{className:"stat-bar",children:[e.jsxs("div",{className:"stat-label",children:["HP: ",l.player.hp,"/",l.player.maxHp]}),e.jsx("div",{className:"stat-bar-bg",children:e.jsx("div",{className:"stat-bar-fill hp",style:{width:`${k}%`}})})]}),e.jsxs("div",{className:"stat-bar",children:[e.jsxs("div",{className:"stat-label",children:["MP: ",l.player.mp,"/",l.player.maxMp]}),e.jsx("div",{className:"stat-bar-bg",children:e.jsx("div",{className:"stat-bar-fill mp",style:{width:`${E}%`}})})]})]}),e.jsx("div",{className:"vs-text",children:"VS"}),e.jsxs("div",{className:"character-box",children:[e.jsx("div",{className:"character-canvas",ref:c}),e.jsx("div",{className:"character-name",children:l.enemy.name}),e.jsxs("div",{className:"stat-bar",children:[e.jsxs("div",{className:"stat-label",children:["HP: ",l.enemy.hp,"/",l.enemy.maxHp]}),e.jsx("div",{className:"stat-bar-bg",children:e.jsx("div",{className:"stat-bar-fill hp",style:{width:`${S}%`}})})]})]})]}),e.jsxs("div",{className:"battle-log",ref:n,children:[l.log.length===0&&e.jsx("div",{className:"log-entry",children:"배틀 시작!"}),l.log.map((d,u)=>e.jsxs("div",{className:"log-entry",children:["> ",d.message]},u))]}),l.status!=="ongoing"&&e.jsxs("div",{className:"battle-result",children:[l.status==="victory"&&e.jsx("h2",{children:"🎉 승리!"}),l.status==="defeat"&&e.jsx("h2",{children:"💀 패배..."}),l.status==="fled"&&e.jsx("h2",{children:"🏃 도망쳤다!"}),e.jsx("button",{onClick:t,className:"btn-primary",children:"다시 시작"})]}),l.status==="ongoing"&&e.jsxs("div",{className:"skill-buttons",children:[e.jsxs("button",{onClick:()=>s("attack"),className:"skill-btn",children:[m.attack.emoji," ",m.attack.name]}),e.jsxs("button",{onClick:()=>s("defend"),className:"skill-btn",children:[m.defend.emoji," ",m.defend.name]}),e.jsxs("button",{onClick:()=>s("heal"),className:"skill-btn",disabled:l.player.mp<m.heal.mpCost,children:[m.heal.emoji," ",m.heal.name,e.jsxs("span",{className:"mp-cost",children:["(MP ",m.heal.mpCost,")"]})]}),e.jsxs("button",{onClick:()=>s("flee"),className:"skill-btn",children:[m.flee.emoji," ",m.flee.name]})]})]})}function L(){const[r,t]=i.useState("create"),[a,c]=i.useState(null),n=l=>{c(l),t("battle")},o=()=>{c(null),t("create")};return e.jsxs("div",{className:"rpg-game",children:[r==="create"&&e.jsx(A,{onComplete:n}),r==="battle"&&a&&e.jsx(B,{player:a,onRestart:o})]})}export{L as default};
1
+ import{r as i,c as v,j as e,d as g,O as C,A as b}from"./index-M48dx91a.js";const x=["#FFE0BD","#F1C27D","#E0AC69","#C68642","#8D5524","#6B4423"],y=["#2C1B18","#724133","#C68642","#E6BE8A","#D4AF37","#B94E48"];function j(){return"#"+Math.floor(Math.random()*16777215).toString(16).padStart(6,"0")}function h(r){return r[Math.floor(Math.random()*r.length)]}function A({onComplete:r}){const t=i.useRef(null),[a,c]=i.useState("플레이어"),[n,o]=i.useState({skinColor:x[0],hairColor:y[0],shirtColor:"#3498db",pantsColor:"#2C3E50",shoeColor:"#34495E",hairStyle:"short",outfitStyle:"tshirt",accessory:"none"});i.useEffect(()=>{if(!t.current)return;t.current.innerHTML="";const s=v(n,{scale:6});t.current.appendChild(s)},[n]);const l=()=>{o({skinColor:h(x),hairColor:h(y),shirtColor:j(),pantsColor:j(),shoeColor:j(),hairStyle:h(g),outfitStyle:h(C),accessory:h(b)})},p=()=>{r({appearance:n,stats:{name:a,level:1,hp:100,maxHp:100,mp:80,maxMp:80,attack:20,defense:10}})};return e.jsxs("div",{className:"character-creator",children:[e.jsx("h1",{children:"캐릭터 생성"}),e.jsxs("div",{className:"creator-layout",children:[e.jsx("div",{className:"preview-section",children:e.jsx("div",{className:"preview-canvas",ref:t})}),e.jsxs("div",{className:"customization-section",children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:"이름"}),e.jsx("input",{type:"text",value:a,onChange:s=>c(s.target.value),maxLength:10})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:"피부색"}),e.jsx("div",{className:"color-palette",children:x.map(s=>e.jsx("button",{className:`color-btn ${n.skinColor===s?"active":""}`,style:{backgroundColor:s},onClick:()=>o({...n,skinColor:s})},s))})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:"헤어스타일"}),e.jsx("select",{value:n.hairStyle,onChange:s=>o({...n,hairStyle:s.target.value}),children:g.map(s=>e.jsx("option",{value:s,children:s},s))})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:"헤어 색상"}),e.jsx("div",{className:"color-palette",children:y.map(s=>e.jsx("button",{className:`color-btn ${n.hairColor===s?"active":""}`,style:{backgroundColor:s},onClick:()=>o({...n,hairColor:s})},s))})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:"의상"}),e.jsx("select",{value:n.outfitStyle,onChange:s=>o({...n,outfitStyle:s.target.value}),children:C.map(s=>e.jsx("option",{value:s,children:s},s))})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:"액세서리"}),e.jsx("select",{value:n.accessory,onChange:s=>o({...n,accessory:s.target.value}),children:b.slice(0,15).map(s=>e.jsx("option",{value:s,children:s},s))})]}),e.jsxs("div",{className:"button-group",children:[e.jsx("button",{onClick:l,className:"btn-secondary",children:"🎲 랜덤 생성"}),e.jsx("button",{onClick:p,className:"btn-primary",children:"⚔️ 게임 시작!"})]})]})]})]})}const m={attack:{name:"공격",emoji:"⚔️"},defend:{name:"방어",emoji:"🛡️"},heal:{name:"회복",mpCost:20,emoji:"💚"},flee:{name:"도망",emoji:"🏃"}};function H(){const r=[{name:"슬라임",hp:50,attack:8,defense:3},{name:"고블린",hp:70,attack:12,defense:5},{name:"해골",hp:60,attack:15,defense:2},{name:"오크",hp:100,attack:18,defense:8}],t=r[Math.floor(Math.random()*r.length)];return{name:t.name,level:1,hp:t.hp,maxHp:t.hp,mp:0,maxMp:0,attack:t.attack,defense:t.defense}}function N(r,t,a){const c=r.attack-t.defense/2,n=Math.max(1,Math.floor(c));return a?Math.floor(n*.5):n}function T(r,t){const a={...r};if(t==="heal"&&a.player.mp<m.heal.mpCost)return{newState:a,continueToEnemyTurn:!1};let c;switch(t){case"attack":{const n=N(a.player,a.enemy,!1);a.enemy.hp=Math.max(0,a.enemy.hp-n),c={actorName:a.player.name,skill:"attack",damage:n,message:`${a.player.name}의 공격! ${n} 데미지!`},a.defendActive=!1;break}case"defend":{a.defendActive=!0,c={actorName:a.player.name,skill:"defend",message:`${a.player.name}이(가) 방어 태세를 취했다!`};break}case"heal":{const o=Math.min(30,a.player.maxHp-a.player.hp);a.player.hp=Math.min(a.player.maxHp,a.player.hp+30),a.player.mp-=m.heal.mpCost,c={actorName:a.player.name,skill:"heal",heal:o,message:`${a.player.name}이(가) 회복! HP +${o}`},a.defendActive=!1;break}case"flee":{Math.random()<.5?(a.status="fled",c={actorName:a.player.name,skill:"flee",message:`${a.player.name}이(가) 도망쳤다!`}):c={actorName:a.player.name,skill:"flee",message:"도망에 실패했다!"},a.defendActive=!1;break}}return a.log=[...a.log,c],a.enemy.hp<=0?(a.status="victory",{newState:a,continueToEnemyTurn:!1}):a.status==="fled"?{newState:a,continueToEnemyTurn:!1}:{newState:a,continueToEnemyTurn:!0}}function R(r){const t={...r},a=N(t.enemy,t.player,t.defendActive);t.player.hp=Math.max(0,t.player.hp-a);const c={actorName:t.enemy.name,skill:"attack",damage:a,message:`${t.enemy.name}의 공격! ${a} 데미지!`};return t.log=[...t.log,c],t.defendActive=!1,t.player.hp<=0&&(t.status="defeat"),t}function $(r,t){return{player:r,enemy:t,turn:"player",log:[],defendActive:!1,status:"ongoing"}}function P(){return{skinColor:"#6B8E23",hairColor:"#2F4F2F",shirtColor:"#8B4513",pantsColor:"#654321",shoeColor:"#3E2723",hairStyle:"messy",outfitStyle:"vest",accessory:"horns"}}function B({player:r,onRestart:t}){const a=i.useRef(null),c=i.useRef(null),n=i.useRef(null),[o]=i.useState(P()),[l,p]=i.useState(()=>$(r.stats,H()));i.useEffect(()=>{if(a.current){a.current.innerHTML="";const d=v(r.appearance,{scale:6});a.current.appendChild(d)}if(c.current){c.current.innerHTML="";const d=v(o,{scale:6});c.current.appendChild(d)}},[r.appearance,o]),i.useEffect(()=>{n.current&&(n.current.scrollTop=n.current.scrollHeight)},[l.log]);const s=d=>{if(l.status!=="ongoing")return;const{newState:u,continueToEnemyTurn:M}=T(l,d);p(u),M&&u.status==="ongoing"&&setTimeout(()=>{p(f=>f.status!=="ongoing"?f:R(f))},800)},k=l.player.hp/l.player.maxHp*100,S=l.enemy.hp/l.enemy.maxHp*100,E=l.player.mp/l.player.maxMp*100;return e.jsxs("div",{className:"battle-screen",children:[e.jsx("h1",{children:"⚔️ 배틀!"}),e.jsxs("div",{className:"battle-characters",children:[e.jsxs("div",{className:"character-box",children:[e.jsx("div",{className:"character-canvas",ref:a}),e.jsx("div",{className:"character-name",children:l.player.name}),e.jsxs("div",{className:"stat-bar",children:[e.jsxs("div",{className:"stat-label",children:["HP: ",l.player.hp,"/",l.player.maxHp]}),e.jsx("div",{className:"stat-bar-bg",children:e.jsx("div",{className:"stat-bar-fill hp",style:{width:`${k}%`}})})]}),e.jsxs("div",{className:"stat-bar",children:[e.jsxs("div",{className:"stat-label",children:["MP: ",l.player.mp,"/",l.player.maxMp]}),e.jsx("div",{className:"stat-bar-bg",children:e.jsx("div",{className:"stat-bar-fill mp",style:{width:`${E}%`}})})]})]}),e.jsx("div",{className:"vs-text",children:"VS"}),e.jsxs("div",{className:"character-box",children:[e.jsx("div",{className:"character-canvas",ref:c}),e.jsx("div",{className:"character-name",children:l.enemy.name}),e.jsxs("div",{className:"stat-bar",children:[e.jsxs("div",{className:"stat-label",children:["HP: ",l.enemy.hp,"/",l.enemy.maxHp]}),e.jsx("div",{className:"stat-bar-bg",children:e.jsx("div",{className:"stat-bar-fill hp",style:{width:`${S}%`}})})]})]})]}),e.jsxs("div",{className:"battle-log",ref:n,children:[l.log.length===0&&e.jsx("div",{className:"log-entry",children:"배틀 시작!"}),l.log.map((d,u)=>e.jsxs("div",{className:"log-entry",children:["> ",d.message]},u))]}),l.status!=="ongoing"&&e.jsxs("div",{className:"battle-result",children:[l.status==="victory"&&e.jsx("h2",{children:"🎉 승리!"}),l.status==="defeat"&&e.jsx("h2",{children:"💀 패배..."}),l.status==="fled"&&e.jsx("h2",{children:"🏃 도망쳤다!"}),e.jsx("button",{onClick:t,className:"btn-primary",children:"다시 시작"})]}),l.status==="ongoing"&&e.jsxs("div",{className:"skill-buttons",children:[e.jsxs("button",{onClick:()=>s("attack"),className:"skill-btn",children:[m.attack.emoji," ",m.attack.name]}),e.jsxs("button",{onClick:()=>s("defend"),className:"skill-btn",children:[m.defend.emoji," ",m.defend.name]}),e.jsxs("button",{onClick:()=>s("heal"),className:"skill-btn",disabled:l.player.mp<m.heal.mpCost,children:[m.heal.emoji," ",m.heal.name,e.jsxs("span",{className:"mp-cost",children:["(MP ",m.heal.mpCost,")"]})]}),e.jsxs("button",{onClick:()=>s("flee"),className:"skill-btn",children:[m.flee.emoji," ",m.flee.name]})]})]})}function L(){const[r,t]=i.useState("create"),[a,c]=i.useState(null),n=l=>{c(l),t("battle")},o=()=>{c(null),t("create")};return e.jsxs("div",{className:"rpg-game",children:[r==="create"&&e.jsx(A,{onComplete:n}),r==="battle"&&a&&e.jsx(B,{player:a,onRestart:o})]})}export{L as default};