@gui-chat-plugin/tictactoe 0.4.0 → 0.5.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/README.md CHANGED
@@ -98,4 +98,9 @@ yarn run dev
98
98
  | `yarn lint` | ESLintチェック |
99
99
  | `./check-plugin-structure.sh` | ファイル構成チェック |
100
100
  | `./check-mulmochat-integration.sh` | MulmoChat統合チェック |
101
- | `./refresh-in-mulmochat.sh` | MulmoChatに反映 |
101
+ | `./refresh-in-mulmochat.sh` | MulmoChatに反映 |
102
+
103
+ ## Related
104
+
105
+ - Protocol spec: [gui-chat-protocol](https://github.com/receptron/gui-chat-protocol)
106
+ - Reference implementations using this protocol: [mulmoclaude](https://github.com/receptron/mulmoclaude) · [MulmoChat](https://github.com/receptron/MulmoChat)
package/dist/core.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./samples-5nF6v9m_.cjs`);exports.SYSTEM_PROMPT=e.a,exports.TOOL_DEFINITION=e.o,exports.TOOL_NAME=e.s,exports.executeTicTacToe=e.n,exports.playTicTacToe=e.i,exports.pluginCore=e.r,exports.samples=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./samples-B9BeGeLU.cjs");exports.SYSTEM_PROMPT=e.a,exports.TOOL_DEFINITION=e.o,exports.TOOL_NAME=e.s,exports.executeTicTacToe=e.n,exports.playTicTacToe=e.i,exports.pluginCore=e.r,exports.samples=e.t;
package/dist/core.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./samples-C6NC1xAK.js";
1
+ import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./samples-Bdgd1mti.js";
2
2
  export { e as SYSTEM_PROMPT, r as TOOL_DEFINITION, a as TOOL_NAME, n as executeTicTacToe, t as playTicTacToe, i as pluginCore, o as samples };
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./samples-5nF6v9m_.cjs`);require(`./core.cjs`),exports.SYSTEM_PROMPT=e.a,exports.TOOL_DEFINITION=e.o,exports.TOOL_NAME=e.s,exports.executeTicTacToe=e.n,exports.playTicTacToe=e.i,exports.pluginCore=e.r,exports.samples=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./samples-B9BeGeLU.cjs");require("./core.cjs"),exports.SYSTEM_PROMPT=e.a,exports.TOOL_DEFINITION=e.o,exports.TOOL_NAME=e.s,exports.executeTicTacToe=e.n,exports.playTicTacToe=e.i,exports.pluginCore=e.r,exports.samples=e.t;
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./samples-C6NC1xAK.js";
1
+ import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./samples-Bdgd1mti.js";
2
2
  import "./core.js";
3
3
  export { e as SYSTEM_PROMPT, r as TOOL_DEFINITION, a as TOOL_NAME, n as executeTicTacToe, t as playTicTacToe, i as pluginCore, o as samples };
@@ -6,4 +6,4 @@ Game rules:
6
6
  1. Start a new game with action="new_game"
7
7
  2. For moves, use action="move" with row (0-2) and col (0-2), plus the current board state
8
8
  3. X always goes first. Win by getting 3 in a row (horizontal, vertical, or diagonal)
9
- 4. Positions: row=0 is top, row=2 is bottom; col=0 is left, col=2 is right`,r=[[{row:0,col:0},{row:0,col:1},{row:0,col:2}],[{row:1,col:0},{row:1,col:1},{row:1,col:2}],[{row:2,col:0},{row:2,col:1},{row:2,col:2}],[{row:0,col:0},{row:1,col:0},{row:2,col:0}],[{row:0,col:1},{row:1,col:1},{row:2,col:1}],[{row:0,col:2},{row:1,col:2},{row:2,col:2}],[{row:0,col:0},{row:1,col:1},{row:2,col:2}],[{row:0,col:2},{row:1,col:1},{row:2,col:0}]];function i(){let e=[];for(let t=0;t<3;t++)e[t]=[,,,].fill(`.`);return e}function a(e){return e.map(e=>[...e])}function o(e){return e===`X`?`O`:`X`}function s(e){let t=[];for(let n=0;n<3;n++)for(let r=0;r<3;r++)e[n][r]===`.`&&t.push({row:n,col:r});return t}function c(e,t,n,r){let i=a(e);return i[t][n]=r,i}function l(e){let t=0,n=0,r=0;for(let i=0;i<3;i++)for(let a=0;a<3;a++){let o=e[i][a];o===`X`?t++:o===`O`?n++:r++}return{X:t,O:n,empty:r}}function u(e){for(let t of r){let n=t.map(t=>e[t.row][t.col]);if(n[0]!==`.`&&n[0]===n[1]&&n[1]===n[2])return{winner:n[0],winningLine:t}}return{winner:null,winningLine:null}}function d(e){let{winner:t,winningLine:n}=u(e);return t?{isTerminal:!0,winner:t,winningLine:n}:l(e).empty===0?{isTerminal:!0,winner:`draw`,winningLine:null}:{isTerminal:!1,winner:null,winningLine:null}}function f(e){if(e.action===`new_game`){let{playerNames:t}=e,n=i();return{board:n,currentSide:`X`,playerNames:t,legalMoves:s(n),counts:l(n),isTerminal:!1,winner:null,winningLine:null,lastAction:{type:`new_game`}}}let{row:t,col:n,board:r,currentSide:a,playerNames:u}=e;if(t<0||t>2||n<0||n>2)return{board:r,currentSide:a,playerNames:u,legalMoves:s(r),counts:l(r),isTerminal:!1,winner:null,winningLine:null,lastAction:{type:`move`,row:t,col:n},error:`Invalid move: (${t}, ${n}) is out of bounds. Row and column must be 0-2.`};if(r[t][n]!==`.`)return{board:r,currentSide:a,playerNames:u,legalMoves:s(r),counts:l(r),isTerminal:!1,winner:null,winningLine:null,lastAction:{type:`move`,row:t,col:n},error:`Invalid move: (${t}, ${n}) is already occupied by ${r[t][n]}.`};let f=c(r,t,n,a),p=o(a),m=s(f),h=l(f),{isTerminal:g,winner:_,winningLine:v}=d(f);return{board:f,currentSide:p,playerNames:u,legalMoves:m,counts:h,isTerminal:g,winner:_,winningLine:v,lastAction:{type:`move`,row:t,col:n}}}var p=async(e,t)=>{try{let e;if(t.action===`new_game`){let n;n=t.firstPlayer?t.firstPlayer:Math.random()<.5?`computer`:`user`,e={action:`new_game`,playerNames:{X:n,O:n===`user`?`computer`:`user`}}}else if(t.action===`move`){if(typeof t.row!=`number`||typeof t.col!=`number`||!t.board||!t.currentSide||!t.playerNames)throw Error(`Move action requires row, col, board, currentSide, and playerNames parameters`);e={action:`move`,row:t.row,col:t.col,board:t.board,currentSide:t.currentSide,playerNames:t.playerNames}}else throw Error(`Unknown action: ${t.action}`);let n=f(e);if(n.error){let e=n.playerNames[n.currentSide]===`computer`,t=n.legalMoves.map(e=>`(row=${e.row}, col=${e.col})`).join(`, `),r=e?`Invalid move attempted. You must make a valid move. Legal moves are: ${t}. Choose one of these moves.`:`Invalid move attempted. Tell the user they must make a valid move. Legal moves are: ${t}.`;return{message:n.error,jsonData:n,instructions:r,updating:!0}}let r=``;if(n.lastAction.type===`new_game`)r=`Started a new Tic-Tac-Toe game! X goes first.`;else if(n.lastAction.type===`move`){let e=m(n.lastAction.row,n.lastAction.col);r=`Played ${n.board[n.lastAction.row][n.lastAction.col]===`X`?`O`:`X`} at ${e} (row=${n.lastAction.row}, col=${n.lastAction.col}).`}n.isTerminal&&(n.winner===`draw`?r+=` Game over - it's a draw!`:n.winner&&(r+=` Game over - ${n.winner} wins!`));let i=n.playerNames[n.currentSide]===`computer`,a=n.isTerminal?`The game is over. Briefly announce the result. Do NOT draw the board - the user can see it in the GUI.`:i?`It is your turn. You MUST call playTicTacToe with action='move' immediately. Do NOT describe the board or explain - just make your move.`:`It is the user's turn. Do NOT draw or describe the board - the user can see it in the GUI. Just say it's their turn briefly. When they specify a move, call playTicTacToe with action='move'.`;return{message:r,jsonData:n,instructions:a,instructionsRequired:n.isTerminal||i,updating:t.action!==`new_game`}}catch(e){return console.error(`ERR: TicTacToe game error`,e),{message:`TicTacToe game error: ${e instanceof Error?e.message:`Unknown error`}`,instructions:`Acknowledge that there was an error with the TicTacToe game and suggest trying again.`}}};function m(e,t){return`${[`Top`,`Middle`,`Bottom`][e]}-${[`Left`,`Center`,`Right`][t]}`}var h={toolDefinition:t,execute:p,generatingMessage:`Processing TicTacToe move...`,isEnabled:()=>!0,systemPrompt:n},g=[{name:`New Game (User plays X)`,args:{action:`new_game`,firstPlayer:`user`}},{name:`New Game (Computer plays X)`,args:{action:`new_game`,firstPlayer:`computer`}}];Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return g}});
9
+ 4. Positions: row=0 is top, row=2 is bottom; col=0 is left, col=2 is right`,r=[[{row:0,col:0},{row:0,col:1},{row:0,col:2}],[{row:1,col:0},{row:1,col:1},{row:1,col:2}],[{row:2,col:0},{row:2,col:1},{row:2,col:2}],[{row:0,col:0},{row:1,col:0},{row:2,col:0}],[{row:0,col:1},{row:1,col:1},{row:2,col:1}],[{row:0,col:2},{row:1,col:2},{row:2,col:2}],[{row:0,col:0},{row:1,col:1},{row:2,col:2}],[{row:0,col:2},{row:1,col:1},{row:2,col:0}]];function i(){let e=[];for(let t=0;t<3;t++)e[t]=[,,,].fill(`.`);return e}function a(e){return e.map(e=>[...e])}function o(e){return e===`X`?`O`:`X`}function s(e){let t=[];for(let n=0;n<3;n++)for(let r=0;r<3;r++)e[n][r]===`.`&&t.push({row:n,col:r});return t}function c(e,t,n,r){let i=a(e);return i[t][n]=r,i}function l(e){let t=0,n=0,r=0;for(let i=0;i<3;i++)for(let a=0;a<3;a++){let o=e[i][a];o===`X`?t++:o===`O`?n++:r++}return{X:t,O:n,empty:r}}function u(e){for(let t of r){let n=t.map(t=>e[t.row][t.col]);if(n[0]!==`.`&&n[0]===n[1]&&n[1]===n[2])return{winner:n[0],winningLine:t}}return{winner:null,winningLine:null}}function d(e){let{winner:t,winningLine:n}=u(e);return t?{isTerminal:!0,winner:t,winningLine:n}:l(e).empty===0?{isTerminal:!0,winner:`draw`,winningLine:null}:{isTerminal:!1,winner:null,winningLine:null}}function f(e){if(e.action===`new_game`){let{playerNames:t}=e,n=i();return{board:n,currentSide:`X`,playerNames:t,legalMoves:s(n),counts:l(n),isTerminal:!1,winner:null,winningLine:null,lastAction:{type:`new_game`}}}let{row:t,col:n,board:r,currentSide:a,playerNames:u}=e;if(t<0||t>2||n<0||n>2)return{board:r,currentSide:a,playerNames:u,legalMoves:s(r),counts:l(r),isTerminal:!1,winner:null,winningLine:null,lastAction:{type:`move`,row:t,col:n},error:`Invalid move: (${t}, ${n}) is out of bounds. Row and column must be 0-2.`};if(r[t][n]!==`.`)return{board:r,currentSide:a,playerNames:u,legalMoves:s(r),counts:l(r),isTerminal:!1,winner:null,winningLine:null,lastAction:{type:`move`,row:t,col:n},error:`Invalid move: (${t}, ${n}) is already occupied by ${r[t][n]}.`};let f=c(r,t,n,a),p=o(a),m=s(f),h=l(f),{isTerminal:g,winner:_,winningLine:v}=d(f);return{board:f,currentSide:p,playerNames:u,legalMoves:m,counts:h,isTerminal:g,winner:_,winningLine:v,lastAction:{type:`move`,row:t,col:n}}}var p=async(e,t)=>{try{let e;if(t.action===`new_game`){let n;n=t.firstPlayer?t.firstPlayer:Math.random()<.5?`computer`:`user`,e={action:`new_game`,playerNames:{X:n,O:n===`user`?`computer`:`user`}}}else if(t.action===`move`){if(typeof t.row!=`number`||typeof t.col!=`number`||!t.board||!t.currentSide||!t.playerNames)throw Error(`Move action requires row, col, board, currentSide, and playerNames parameters`);e={action:`move`,row:t.row,col:t.col,board:t.board,currentSide:t.currentSide,playerNames:t.playerNames}}else throw Error(`Unknown action: ${t.action}`);let n=f(e);if(n.error){let e=n.playerNames[n.currentSide]===`computer`,t=n.legalMoves.map(e=>`(row=${e.row}, col=${e.col})`).join(`, `),r=e?`Invalid move attempted. You must make a valid move. Legal moves are: ${t}. Choose one of these moves.`:`Invalid move attempted. Tell the user they must make a valid move. Legal moves are: ${t}.`;return{message:n.error,jsonData:n,instructions:r,updating:!0}}let r=``;if(n.lastAction.type===`new_game`)r=`Started a new Tic-Tac-Toe game! X goes first.`;else if(n.lastAction.type===`move`){let e=m(n.lastAction.row,n.lastAction.col);r=`Played ${n.board[n.lastAction.row][n.lastAction.col]===`X`?`O`:`X`} at ${e} (row=${n.lastAction.row}, col=${n.lastAction.col}).`}n.isTerminal&&(n.winner===`draw`?r+=` Game over - it's a draw!`:n.winner&&(r+=` Game over - ${n.winner} wins!`));let i=n.playerNames[n.currentSide]===`computer`,a=n.isTerminal?`The game is over. Briefly announce the result. Do NOT draw the board - the user can see it in the GUI.`:i?`It is your turn. You MUST call playTicTacToe with action='move' immediately. Do NOT describe the board or explain - just make your move.`:`It is the user's turn. Do NOT draw or describe the board - the user can see it in the GUI. Just say it's their turn briefly. When they specify a move, call playTicTacToe with action='move'.`;return{message:r,jsonData:n,instructions:a,instructionsRequired:n.isTerminal||i,updating:t.action!==`new_game`}}catch(e){return console.error(`ERR: TicTacToe game error`,e),{message:`TicTacToe game error: ${e instanceof Error?e.message:`Unknown error`}`,instructions:`Acknowledge that there was an error with the TicTacToe game and suggest trying again.`}}};function m(e,t){return`${[`Top`,`Middle`,`Bottom`][e]}-${[`Left`,`Center`,`Right`][t]}`}var h={toolDefinition:t,execute:p,generatingMessage:`Processing TicTacToe move...`,isEnabled:()=>!0,systemPrompt:n},g=[{name:`New Game (User plays X)`,args:{action:`new_game`,firstPlayer:`user`}},{name:`New Game (Computer plays X)`,args:{action:`new_game`,firstPlayer:`computer`}}];Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return g}});
package/dist/style.css CHANGED
@@ -1,3 +1,3 @@
1
- /*! tailwindcss v4.2.4 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-600:oklch(57.7% .245 27.325);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-400:oklch(85.2% .199 91.936);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-600:oklch(54.6% .245 262.881);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-700:oklch(45.7% .24 277.023);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-white:#fff;--spacing:.25rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.start{inset-inline-start:var(--spacing)}.mx-auto{margin-inline:auto}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-16{height:calc(var(--spacing) * 16)}.h-24{height:calc(var(--spacing) * 24)}.h-\[500px\]{height:500px}.h-full{height:100%}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[200px\]{max-width:200px}.cursor-pointer{cursor:pointer}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-gray-600{border-color:var(--color-gray-600)}.border-indigo-200{border-color:var(--color-indigo-200)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-white{background-color:var(--color-white)}.bg-yellow-200{background-color:var(--color-yellow-200)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-8{padding:calc(var(--spacing) * 8)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-2{padding-block:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-blue-400{color:var(--color-blue-400)}.text-blue-600{color:var(--color-blue-600)}.text-gray-200{color:var(--color-gray-200)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-indigo-700{color:var(--color-indigo-700)}.text-red-400{color:var(--color-red-400)}.text-red-600{color:var(--color-red-600)}.opacity-30{opacity:.3}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-yellow-400{--tw-ring-color:var(--color-yellow-400)}@media (hover:hover){.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-indigo-200:hover{background-color:var(--color-indigo-200)}}}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
1
+ /*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-600:oklch(57.7% .245 27.325);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-400:oklch(85.2% .199 91.936);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-600:oklch(54.6% .245 262.881);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-700:oklch(45.7% .24 277.023);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-white:#fff;--spacing:.25rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.mx-auto{margin-inline:auto}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.contents{display:contents}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-16{height:calc(var(--spacing) * 16)}.h-24{height:calc(var(--spacing) * 24)}.h-\[500px\]{height:500px}.h-full{height:100%}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[200px\]{max-width:200px}.cursor-pointer{cursor:pointer}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-gray-600{border-color:var(--color-gray-600)}.border-indigo-200{border-color:var(--color-indigo-200)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-white{background-color:var(--color-white)}.bg-yellow-200{background-color:var(--color-yellow-200)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-8{padding:calc(var(--spacing) * 8)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-2{padding-block:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-blue-400{color:var(--color-blue-400)}.text-blue-600{color:var(--color-blue-600)}.text-gray-200{color:var(--color-gray-200)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-indigo-700{color:var(--color-indigo-700)}.text-red-400{color:var(--color-red-400)}.text-red-600{color:var(--color-red-600)}.opacity-30{opacity:.3}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-yellow-400{--tw-ring-color:var(--color-yellow-400)}@media (hover:hover){.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-indigo-200:hover{background-color:var(--color-indigo-200)}}}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
3
3
  /*$vite$:1*/
package/dist/vue.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./samples-5nF6v9m_.cjs`);let t=require(`vue`);var n={class:`w-full h-full flex flex-col items-center justify-center p-4 bg-gray-100`},r={key:0,class:`flex flex-col items-center`},i={key:0},a={key:1},o={class:`grid grid-cols-3 gap-1 p-2 bg-gray-700 rounded-lg shadow-lg`},s=[`onClick`,`onMouseenter`,`onMouseleave`],c={key:0,class:`w-16 h-16 text-blue-600`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`,"stroke-linecap":`round`},l={key:1,class:`w-16 h-16 text-red-600`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`},u={key:1,cx:`12`,cy:`12`,r:`8`},d={class:`mt-4 flex gap-8 text-lg`},f={class:`flex items-center gap-2`},p={class:`text-gray-500 text-sm`},m={class:`flex items-center gap-2`},h={class:`text-gray-500 text-sm`},g=(0,t.defineComponent)({__name:`View`,props:{selectedResult:{},sendTextMessage:{type:Function}},setup(e){let g=e,_=(0,t.ref)(null),v=(0,t.ref)(null);(0,t.watch)(()=>g.selectedResult,e=>{e?.toolName===`playTicTacToe`&&e.jsonData&&(_.value=e.jsonData)},{immediate:!0});let y=(0,t.computed)(()=>{if(!_.value?.playerNames)return``;let e=_.value.playerNames[_.value.currentSide];return e.charAt(0).toUpperCase()+e.slice(1)}),b=(0,t.computed)(()=>_.value?.playerNames&&_.value.playerNames[_.value.currentSide]===`computer`),x=(0,t.computed)(()=>_.value?_.value.isTerminal?_.value.winner===`draw`?`text-gray-600`:_.value.winner===`X`?`text-blue-600`:`text-red-600`:_.value.currentSide===`X`?`text-blue-600`:`text-red-600`:``),S=(0,t.computed)(()=>{if(!_.value?.board)return[];let e=[];for(let t=0;t<3;t++)for(let n=0;n<3;n++){let r=_.value.board[t][n],i=_.value.legalMoves?.some(e=>e.row===t&&e.col===n),a=_.value.winningLine?.some(e=>e.row===t&&e.col===n);e.push({row:t,col:n,piece:r===`.`?null:r,isLegalMove:i??!1,isWinningCell:a??!1})}return e});function C(e,t){let n=``;return e.isWinningCell?n=`bg-yellow-200 ring-2 ring-yellow-400`:e.isLegalMove&&!b.value&&!_.value?.isTerminal&&(n=v.value===t?`bg-gray-200 cursor-pointer`:`hover:bg-gray-100 cursor-pointer`),`w-24 h-24 flex items-center justify-center bg-white rounded ${n}`}function w(e){if(!_.value||_.value.isTerminal||b.value)return;let t=S.value[e];if(!t.isLegalMove)return;let n=`${[`top`,`middle`,`bottom`][t.row]}-${[`left`,`center`,`right`][t.col]}`,r={row:t.row,col:t.col,currentState:_.value};g.sendTextMessage?.(`I want to play at ${n}, which is row=${t.row}, col=${t.col}`,{data:r})}function T(e,t){!_.value||_.value.isTerminal||b.value||S.value[e].isLegalMove&&(v.value=t?e:null)}return(e,g)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,n,[_.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,r,[g[6]||=(0,t.createElementVNode)(`h1`,{class:`text-2xl font-bold text-gray-800 mb-2`},`Tic-Tac-Toe`,-1),(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`text-lg font-semibold mb-4 text-center`,x.value])},[_.value.isTerminal?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[_.value.winner===`draw`?((0,t.openBlock)(),(0,t.createElementBlock)(`span`,i,`It's a Draw!`)):((0,t.openBlock)(),(0,t.createElementBlock)(`span`,a,(0,t.toDisplayString)(_.value.winner)+` Wins!`,1))],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)((0,t.toDisplayString)(y.value)+`'s Turn (`+(0,t.toDisplayString)(_.value.currentSide)+`) `,1)],64))],2),(0,t.createElementVNode)(`div`,o,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(S.value,(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:n,class:(0,t.normalizeClass)(C(e,n)),onClick:e=>w(n),onMouseenter:e=>T(n,!0),onMouseleave:e=>T(n,!1)},[e.piece===`X`?((0,t.openBlock)(),(0,t.createElementBlock)(`svg`,c,[...g[0]||=[(0,t.createElementVNode)(`line`,{x1:`4`,y1:`4`,x2:`20`,y2:`20`},null,-1),(0,t.createElementVNode)(`line`,{x1:`20`,y1:`4`,x2:`4`,y2:`20`},null,-1)]])):e.piece===`O`?((0,t.openBlock)(),(0,t.createElementBlock)(`svg`,l,[...g[1]||=[(0,t.createElementVNode)(`circle`,{cx:`12`,cy:`12`,r:`8`},null,-1)]])):e.isLegalMove&&!b.value&&v.value===n?((0,t.openBlock)(),(0,t.createElementBlock)(`svg`,{key:2,class:(0,t.normalizeClass)([`w-16 h-16 opacity-30`,_.value.currentSide===`X`?`text-blue-400`:`text-red-400`]),viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`,"stroke-linecap":`round`},[_.value.currentSide===`X`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[g[2]||=(0,t.createElementVNode)(`line`,{x1:`4`,y1:`4`,x2:`20`,y2:`20`},null,-1),g[3]||=(0,t.createElementVNode)(`line`,{x1:`20`,y1:`4`,x2:`4`,y2:`20`},null,-1)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(`circle`,u))],2)):(0,t.createCommentVNode)(``,!0)],42,s))),128))]),(0,t.createElementVNode)(`div`,d,[(0,t.createElementVNode)(`div`,f,[g[4]||=(0,t.createElementVNode)(`span`,{class:`text-blue-600 font-bold`},`X:`,-1),(0,t.createElementVNode)(`span`,null,(0,t.toDisplayString)(_.value.counts.X),1),(0,t.createElementVNode)(`span`,p,`(`+(0,t.toDisplayString)(_.value.playerNames.X)+`)`,1)]),(0,t.createElementVNode)(`div`,m,[g[5]||=(0,t.createElementVNode)(`span`,{class:`text-red-600 font-bold`},`O:`,-1),(0,t.createElementVNode)(`span`,null,(0,t.toDisplayString)(_.value.counts.O),1),(0,t.createElementVNode)(`span`,h,`(`+(0,t.toDisplayString)(_.value.playerNames.O)+`)`,1)])])])):(0,t.createCommentVNode)(``,!0)]))}}),_={class:`p-3 bg-gray-50 rounded`},v={key:0,class:`space-y-2`},y={class:`flex justify-center`},b={class:`inline-block bg-gray-600 p-0.5 rounded`},x={class:`grid grid-cols-3 gap-0.5`},S={key:0,class:`w-4 h-4 text-blue-600`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`,"stroke-linecap":`round`},C={key:1,class:`w-4 h-4 text-red-600`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`},w={class:`text-xs text-center space-y-1`},T={key:0,class:`text-gray-600`},E=(0,t.defineComponent)({__name:`Preview`,props:{result:{}},setup(e){let n=e;function r(e,t){return n.result.jsonData?.winningLine?.some(n=>n.row===e&&n.col===t)??!1}function i(e){return e.isTerminal?e.winner===`draw`?`Draw!`:e.winner===`X`?`X Wins!`:e.winner===`O`?`O Wins!`:`Game Over`:``}function a(){return n.result.jsonData?.isTerminal?n.result.jsonData.winner===`draw`?`text-gray-600`:n.result.jsonData.winner===`X`?`text-blue-600`:n.result.jsonData.winner===`O`?`text-red-600`:``:``}function o(e){return e.charAt(0).toUpperCase()+e.slice(1)}return(n,s)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,_,[e.result.jsonData?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,v,[(0,t.createElementVNode)(`div`,y,[(0,t.createElementVNode)(`div`,b,[(0,t.createElementVNode)(`div`,x,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.result.jsonData.board,(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:n},[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e,(e,i)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:`${n}-${i}`,class:(0,t.normalizeClass)([`w-6 h-6 flex items-center justify-center bg-white rounded-sm`,r(n,i)?`bg-yellow-200`:``])},[e===`X`?((0,t.openBlock)(),(0,t.createElementBlock)(`svg`,S,[...s[0]||=[(0,t.createElementVNode)(`line`,{x1:`4`,y1:`4`,x2:`20`,y2:`20`},null,-1),(0,t.createElementVNode)(`line`,{x1:`20`,y1:`4`,x2:`4`,y2:`20`},null,-1)]])):e===`O`?((0,t.openBlock)(),(0,t.createElementBlock)(`svg`,C,[...s[1]||=[(0,t.createElementVNode)(`circle`,{cx:`12`,cy:`12`,r:`8`},null,-1)]])):(0,t.createCommentVNode)(``,!0)],2))),128))],64))),128))])])]),(0,t.createElementVNode)(`div`,w,[e.result.jsonData.isTerminal?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:1,class:(0,t.normalizeClass)([`font-medium`,a()])},(0,t.toDisplayString)(i(e.result.jsonData)),3)):((0,t.openBlock)(),(0,t.createElementBlock)(`div`,T,[(0,t.createElementVNode)(`span`,{class:(0,t.normalizeClass)(e.result.jsonData.currentSide===`X`?`text-blue-600`:`text-red-600`)},(0,t.toDisplayString)(e.result.jsonData.currentSide),3),(0,t.createTextVNode)(` `+(0,t.toDisplayString)(o(e.result.jsonData.playerNames[e.result.jsonData.currentSide]))+` to play `,1)]))])])):(0,t.createCommentVNode)(``,!0)]))}}),D={...e.r,viewComponent:g,previewComponent:E,samples:e.t},O={plugin:D};exports.Preview=E,exports.SYSTEM_PROMPT=e.a,exports.TOOL_DEFINITION=e.o,exports.TOOL_NAME=e.s,exports.View=g,exports.default=O,exports.executeTicTacToe=e.n,exports.playTicTacToe=e.i,exports.plugin=D,exports.pluginCore=e.r,exports.samples=e.t;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./samples-B9BeGeLU.cjs");let t=require("vue");var n={class:`w-full h-full flex flex-col items-center justify-center p-4 bg-gray-100`},r={key:0,class:`flex flex-col items-center`},i={key:0},a={key:1},o={class:`grid grid-cols-3 gap-1 p-2 bg-gray-700 rounded-lg shadow-lg`},s=[`onClick`,`onMouseenter`,`onMouseleave`],c={key:0,class:`w-16 h-16 text-blue-600`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`,"stroke-linecap":`round`},l={key:1,class:`w-16 h-16 text-red-600`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`},u={key:1,cx:`12`,cy:`12`,r:`8`},d={class:`mt-4 flex gap-8 text-lg`},f={class:`flex items-center gap-2`},p={class:`text-gray-500 text-sm`},m={class:`flex items-center gap-2`},h={class:`text-gray-500 text-sm`},g=(0,t.defineComponent)({__name:`View`,props:{selectedResult:{},sendTextMessage:{type:Function}},setup(e){let g=e,_=(0,t.ref)(null),v=(0,t.ref)(null);(0,t.watch)(()=>g.selectedResult,e=>{e?.toolName===`playTicTacToe`&&e.jsonData&&(_.value=e.jsonData)},{immediate:!0});let y=(0,t.computed)(()=>{if(!_.value?.playerNames)return``;let e=_.value.playerNames[_.value.currentSide];return e.charAt(0).toUpperCase()+e.slice(1)}),b=(0,t.computed)(()=>_.value?.playerNames&&_.value.playerNames[_.value.currentSide]===`computer`),x=(0,t.computed)(()=>_.value?_.value.isTerminal?_.value.winner===`draw`?`text-gray-600`:_.value.winner===`X`?`text-blue-600`:`text-red-600`:_.value.currentSide===`X`?`text-blue-600`:`text-red-600`:``),S=(0,t.computed)(()=>{if(!_.value?.board)return[];let e=[];for(let t=0;t<3;t++)for(let n=0;n<3;n++){let r=_.value.board[t][n],i=_.value.legalMoves?.some(e=>e.row===t&&e.col===n),a=_.value.winningLine?.some(e=>e.row===t&&e.col===n);e.push({row:t,col:n,piece:r===`.`?null:r,isLegalMove:i??!1,isWinningCell:a??!1})}return e});function C(e,t){let n=``;return e.isWinningCell?n=`bg-yellow-200 ring-2 ring-yellow-400`:e.isLegalMove&&!b.value&&!_.value?.isTerminal&&(n=v.value===t?`bg-gray-200 cursor-pointer`:`hover:bg-gray-100 cursor-pointer`),`w-24 h-24 flex items-center justify-center bg-white rounded ${n}`}function w(e){if(!_.value||_.value.isTerminal||b.value)return;let t=S.value[e];if(!t.isLegalMove)return;let n=`${[`top`,`middle`,`bottom`][t.row]}-${[`left`,`center`,`right`][t.col]}`,r={row:t.row,col:t.col,currentState:_.value};g.sendTextMessage?.(`I want to play at ${n}, which is row=${t.row}, col=${t.col}`,{data:r})}function T(e,t){!_.value||_.value.isTerminal||b.value||S.value[e].isLegalMove&&(v.value=t?e:null)}return(e,g)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,n,[_.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,r,[g[6]||=(0,t.createElementVNode)(`h1`,{class:`text-2xl font-bold text-gray-800 mb-2`},`Tic-Tac-Toe`,-1),(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`text-lg font-semibold mb-4 text-center`,x.value])},[_.value.isTerminal?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[_.value.winner===`draw`?((0,t.openBlock)(),(0,t.createElementBlock)(`span`,i,`It's a Draw!`)):((0,t.openBlock)(),(0,t.createElementBlock)(`span`,a,(0,t.toDisplayString)(_.value.winner)+` Wins!`,1))],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)((0,t.toDisplayString)(y.value)+`'s Turn (`+(0,t.toDisplayString)(_.value.currentSide)+`) `,1)],64))],2),(0,t.createElementVNode)(`div`,o,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(S.value,(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:n,class:(0,t.normalizeClass)(C(e,n)),onClick:e=>w(n),onMouseenter:e=>T(n,!0),onMouseleave:e=>T(n,!1)},[e.piece===`X`?((0,t.openBlock)(),(0,t.createElementBlock)(`svg`,c,[...g[0]||=[(0,t.createElementVNode)(`line`,{x1:`4`,y1:`4`,x2:`20`,y2:`20`},null,-1),(0,t.createElementVNode)(`line`,{x1:`20`,y1:`4`,x2:`4`,y2:`20`},null,-1)]])):e.piece===`O`?((0,t.openBlock)(),(0,t.createElementBlock)(`svg`,l,[...g[1]||=[(0,t.createElementVNode)(`circle`,{cx:`12`,cy:`12`,r:`8`},null,-1)]])):e.isLegalMove&&!b.value&&v.value===n?((0,t.openBlock)(),(0,t.createElementBlock)(`svg`,{key:2,class:(0,t.normalizeClass)([`w-16 h-16 opacity-30`,_.value.currentSide===`X`?`text-blue-400`:`text-red-400`]),viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`,"stroke-linecap":`round`},[_.value.currentSide===`X`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[g[2]||=(0,t.createElementVNode)(`line`,{x1:`4`,y1:`4`,x2:`20`,y2:`20`},null,-1),g[3]||=(0,t.createElementVNode)(`line`,{x1:`20`,y1:`4`,x2:`4`,y2:`20`},null,-1)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(`circle`,u))],2)):(0,t.createCommentVNode)(``,!0)],42,s))),128))]),(0,t.createElementVNode)(`div`,d,[(0,t.createElementVNode)(`div`,f,[g[4]||=(0,t.createElementVNode)(`span`,{class:`text-blue-600 font-bold`},`X:`,-1),(0,t.createElementVNode)(`span`,null,(0,t.toDisplayString)(_.value.counts.X),1),(0,t.createElementVNode)(`span`,p,`(`+(0,t.toDisplayString)(_.value.playerNames.X)+`)`,1)]),(0,t.createElementVNode)(`div`,m,[g[5]||=(0,t.createElementVNode)(`span`,{class:`text-red-600 font-bold`},`O:`,-1),(0,t.createElementVNode)(`span`,null,(0,t.toDisplayString)(_.value.counts.O),1),(0,t.createElementVNode)(`span`,h,`(`+(0,t.toDisplayString)(_.value.playerNames.O)+`)`,1)])])])):(0,t.createCommentVNode)(``,!0)]))}}),_={class:`p-3 bg-gray-50 rounded`},v={key:0,class:`space-y-2`},y={class:`flex justify-center`},b={class:`inline-block bg-gray-600 p-0.5 rounded`},x={class:`grid grid-cols-3 gap-0.5`},S={key:0,class:`w-4 h-4 text-blue-600`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`,"stroke-linecap":`round`},C={key:1,class:`w-4 h-4 text-red-600`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`},w={class:`text-xs text-center space-y-1`},T={key:0,class:`text-gray-600`},E=(0,t.defineComponent)({__name:`Preview`,props:{result:{}},setup(e){let n=e;function r(e,t){return n.result.jsonData?.winningLine?.some(n=>n.row===e&&n.col===t)??!1}function i(e){return e.isTerminal?e.winner===`draw`?`Draw!`:e.winner===`X`?`X Wins!`:e.winner===`O`?`O Wins!`:`Game Over`:``}function a(){return n.result.jsonData?.isTerminal?n.result.jsonData.winner===`draw`?`text-gray-600`:n.result.jsonData.winner===`X`?`text-blue-600`:n.result.jsonData.winner===`O`?`text-red-600`:``:``}function o(e){return e.charAt(0).toUpperCase()+e.slice(1)}return(n,s)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,_,[e.result.jsonData?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,v,[(0,t.createElementVNode)(`div`,y,[(0,t.createElementVNode)(`div`,b,[(0,t.createElementVNode)(`div`,x,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.result.jsonData.board,(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:n},[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e,(e,i)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:`${n}-${i}`,class:(0,t.normalizeClass)([`w-6 h-6 flex items-center justify-center bg-white rounded-sm`,r(n,i)?`bg-yellow-200`:``])},[e===`X`?((0,t.openBlock)(),(0,t.createElementBlock)(`svg`,S,[...s[0]||=[(0,t.createElementVNode)(`line`,{x1:`4`,y1:`4`,x2:`20`,y2:`20`},null,-1),(0,t.createElementVNode)(`line`,{x1:`20`,y1:`4`,x2:`4`,y2:`20`},null,-1)]])):e===`O`?((0,t.openBlock)(),(0,t.createElementBlock)(`svg`,C,[...s[1]||=[(0,t.createElementVNode)(`circle`,{cx:`12`,cy:`12`,r:`8`},null,-1)]])):(0,t.createCommentVNode)(``,!0)],2))),128))],64))),128))])])]),(0,t.createElementVNode)(`div`,w,[e.result.jsonData.isTerminal?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:1,class:(0,t.normalizeClass)([`font-medium`,a()])},(0,t.toDisplayString)(i(e.result.jsonData)),3)):((0,t.openBlock)(),(0,t.createElementBlock)(`div`,T,[(0,t.createElementVNode)(`span`,{class:(0,t.normalizeClass)(e.result.jsonData.currentSide===`X`?`text-blue-600`:`text-red-600`)},(0,t.toDisplayString)(e.result.jsonData.currentSide),3),(0,t.createTextVNode)(` `+(0,t.toDisplayString)(o(e.result.jsonData.playerNames[e.result.jsonData.currentSide]))+` to play `,1)]))])])):(0,t.createCommentVNode)(``,!0)]))}}),D={...e.r,viewComponent:g,previewComponent:E,samples:e.t},O={plugin:D};exports.Preview=E,exports.SYSTEM_PROMPT=e.a,exports.TOOL_DEFINITION=e.o,exports.TOOL_NAME=e.s,exports.View=g,exports.default=O,exports.executeTicTacToe=e.n,exports.playTicTacToe=e.i,exports.plugin=D,exports.pluginCore=e.r,exports.samples=e.t;
package/dist/vue.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./samples-C6NC1xAK.js";
1
+ import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./samples-Bdgd1mti.js";
2
2
  import { Fragment as s, computed as c, createCommentVNode as l, createElementBlock as u, createElementVNode as d, createTextVNode as f, defineComponent as p, normalizeClass as m, openBlock as h, ref as g, renderList as _, toDisplayString as v, watch as y } from "vue";
3
3
  //#region src/vue/View.vue?vue&type=script&setup=true&lang.ts
4
4
  var b = { class: "w-full h-full flex flex-col items-center justify-center p-4 bg-gray-100" }, x = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gui-chat-plugin/tictactoe",
3
- "version": "0.4.0",
3
+ "version": "0.5.1",
4
4
  "description": "Tic-Tac-Toe game plugin for GUI Chat",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -34,25 +34,25 @@
34
34
  "lint": "eslint src demo"
35
35
  },
36
36
  "peerDependencies": {
37
- "gui-chat-protocol": "^0.3.3",
37
+ "gui-chat-protocol": "^0.4.0",
38
38
  "vue": "^3.5.0"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@eslint/js": "^10.0.1",
42
- "@tailwindcss/vite": "^4.2.4",
43
- "@typescript-eslint/eslint-plugin": "^8.59.2",
44
- "@typescript-eslint/parser": "^8.59.2",
45
- "@vitejs/plugin-vue": "^6.0.5",
46
- "eslint": "^10.3.0",
47
- "eslint-plugin-vue": "^10.9.1",
48
- "globals": "^17.6.0",
49
- "gui-chat-protocol": "^0.3.3",
50
- "tailwindcss": "^4.2.4",
42
+ "@tailwindcss/vite": "^4.3.2",
43
+ "@typescript-eslint/eslint-plugin": "^8.64.0",
44
+ "@typescript-eslint/parser": "^8.64.0",
45
+ "@vitejs/plugin-vue": "^6.0.8",
46
+ "eslint": "^10.7.0",
47
+ "eslint-plugin-vue": "^10.9.2",
48
+ "globals": "^17.7.0",
49
+ "gui-chat-protocol": "^0.4.0",
50
+ "tailwindcss": "^4.3.2",
51
51
  "typescript": "~6.0.3",
52
- "vite": "^8.0.11",
53
- "vue": "^3.5.34",
54
- "vue-eslint-parser": "^10.4.0",
55
- "vue-tsc": "^3.2.8"
52
+ "vite": "^8.1.4",
53
+ "vue": "^3.5.39",
54
+ "vue-eslint-parser": "^10.4.1",
55
+ "vue-tsc": "^3.3.7"
56
56
  },
57
57
  "keywords": [
58
58
  "guichat",