diff --git a/public/castledEngine/CastledEngine.d.ts b/public/castledEngine/CastledEngine.d.ts new file mode 100644 index 0000000..e7042be --- /dev/null +++ b/public/castledEngine/CastledEngine.d.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +export function init_wasm(): void; +export function main_wasm(command: string): void; + +export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; + +export interface InitOutput { + readonly memory: WebAssembly.Memory; + readonly init_wasm: () => void; + readonly main_wasm: (a: number, b: number) => void; + readonly __wbindgen_export_0: WebAssembly.Table; + readonly __wbindgen_malloc: (a: number, b: number) => number; + readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; + readonly __wbindgen_start: () => void; +} + +export type SyncInitInput = BufferSource | WebAssembly.Module; +/** +* Instantiates the given `module`, which can either be bytes or +* a precompiled `WebAssembly.Module`. +* +* @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated. +* +* @returns {InitOutput} +*/ +export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput; + +/** +* If `module_or_path` is {RequestInfo} or {URL}, makes a request and +* for everything else, calls `WebAssembly.instantiate` directly. +* +* @param {{ module_or_path: InitInput | Promise }} module_or_path - Passing `InitInput` directly is deprecated. +* +* @returns {Promise} +*/ +export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise } | InitInput | Promise): Promise; diff --git a/public/castledEngine/CastledEngine.js b/public/castledEngine/CastledEngine.js new file mode 100644 index 0000000..c235060 --- /dev/null +++ b/public/castledEngine/CastledEngine.js @@ -0,0 +1,234 @@ +let wasm; + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +let cachedUint8ArrayMemory0 = null; + +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} + +export function init_wasm() { + wasm.init_wasm(); +} + +let WASM_VECTOR_LEN = 0; + +const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); + +const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' + ? function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +} + : function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; +}); + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} +/** + * @param {string} command + */ +export function main_wasm(command) { + const ptr0 = passStringToWasm0(command, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.main_wasm(ptr0, len0); +} + +async function __wbg_load(module, imports) { + if (typeof Response === 'function' && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === 'function') { + try { + return await WebAssembly.instantiateStreaming(module, imports); + + } catch (e) { + if (module.headers.get('Content-Type') != 'application/wasm') { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + + } else { + throw e; + } + } + } + + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + + } else { + const instance = await WebAssembly.instantiate(module, imports); + + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + + } else { + return instance; + } + } +} + +function __wbg_get_imports() { + const imports = {}; + imports.wbg = {}; + imports.wbg.__wbg_getTime_46267b1c24877e30 = function(arg0) { + const ret = arg0.getTime(); + return ret; + }; + imports.wbg.__wbg_getTimezoneOffset_6b5752021c499c47 = function(arg0) { + const ret = arg0.getTimezoneOffset(); + return ret; + }; + imports.wbg.__wbg_log_502a084075e07659 = function(arg0, arg1) { + console.log(getStringFromWasm0(arg0, arg1)); + }; + imports.wbg.__wbg_new0_f788a2397c7ca929 = function() { + const ret = new Date(); + return ret; + }; + imports.wbg.__wbg_new_31a97dac4f10fab7 = function(arg0) { + const ret = new Date(arg0); + return ret; + }; + imports.wbg.__wbg_postMessage_fa2bc6ec1693a12f = function(arg0, arg1) { + self.postMessage(getStringFromWasm0(arg0, arg1)); + }; + imports.wbg.__wbindgen_init_externref_table = function() { + const table = wasm.__wbindgen_export_0; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + ; + }; + imports.wbg.__wbindgen_number_new = function(arg0) { + const ret = arg0; + return ret; + }; + imports.wbg.__wbindgen_throw = function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }; + + return imports; +} + +function __wbg_init_memory(imports, memory) { + +} + +function __wbg_finalize_init(instance, module) { + wasm = instance.exports; + __wbg_init.__wbindgen_wasm_module = module; + cachedUint8ArrayMemory0 = null; + + + wasm.__wbindgen_start(); + return wasm; +} + +function initSync(module) { + if (wasm !== undefined) return wasm; + + + if (typeof module !== 'undefined') { + if (Object.getPrototypeOf(module) === Object.prototype) { + ({module} = module) + } else { + console.warn('using deprecated parameters for `initSync()`; pass a single object instead') + } + } + + const imports = __wbg_get_imports(); + + __wbg_init_memory(imports); + + if (!(module instanceof WebAssembly.Module)) { + module = new WebAssembly.Module(module); + } + + const instance = new WebAssembly.Instance(module, imports); + + return __wbg_finalize_init(instance, module); +} + +async function __wbg_init(module_or_path) { + if (wasm !== undefined) return wasm; + + + if (typeof module_or_path !== 'undefined') { + if (Object.getPrototypeOf(module_or_path) === Object.prototype) { + ({module_or_path} = module_or_path) + } else { + console.warn('using deprecated parameters for the initialization function; pass a single object instead') + } + } + + if (typeof module_or_path === 'undefined') { + module_or_path = new URL('CastledEngine_bg.wasm', import.meta.url); + } + const imports = __wbg_get_imports(); + + if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) { + module_or_path = fetch(module_or_path); + } + + __wbg_init_memory(imports); + + const { instance, module } = await __wbg_load(await module_or_path, imports); + + return __wbg_finalize_init(instance, module); +} + +export { initSync }; +export default __wbg_init; diff --git a/public/castledEngine/CastledEngine_bg.wasm b/public/castledEngine/CastledEngine_bg.wasm new file mode 100644 index 0000000..5d71dee Binary files /dev/null and b/public/castledEngine/CastledEngine_bg.wasm differ diff --git a/public/castledEngine/CastledEngine_bg.wasm.d.ts b/public/castledEngine/CastledEngine_bg.wasm.d.ts new file mode 100644 index 0000000..c863022 --- /dev/null +++ b/public/castledEngine/CastledEngine_bg.wasm.d.ts @@ -0,0 +1,9 @@ +/* tslint:disable */ +/* eslint-disable */ +export const memory: WebAssembly.Memory; +export const init_wasm: () => void; +export const main_wasm: (a: number, b: number) => void; +export const __wbindgen_export_0: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; +export const __wbindgen_start: () => void; diff --git a/public/castledEngine/README.md b/public/castledEngine/README.md new file mode 100644 index 0000000..0d4c6b7 --- /dev/null +++ b/public/castledEngine/README.md @@ -0,0 +1,75 @@ + +# Castled Engine + +by [Castled Org](https://github.com/CastledChess) + +--- + +## Table of Contents + +- [About](#about) +- [Features](#features) +- [Building](#building) +- [Usage](#usage) +- [Documentation](#documentation) + +--- + +## About + +**Castled Engine** is a UCI-compatible chess engine written in **Rust**, leveraging the [Shakmaty Chess Library](https://github.com/niklasf/shakmaty). It was primarily designed for analyzing chess games as part of the **Castled Chess Project**. + +--- + +## Features + +### Core Features + +- UCI Compatibility +- Move Generation powered by [Shakmaty](https://github.com/niklasf/shakmaty) + +### Search Techniques + +- **Negamax** +- **Alpha-Beta Pruning** +- **Iterative Deepening** +- **Transposition Tables** +- **Move Ordering** +- **Principal Variation Search** +- **Reverse Futility Pruning** +- **Quiescence Search** +- **Draw & Checkmate Detection** + +### Evaluation + +- **Pesto Evaluation** + +--- + +## Building + +To build the engine, clone the repository and run the following command in your terminal: + +```bash +cargo build --release +``` + +This will compile the engine in release mode for optimal performance. + +--- + +## Usage + +Castled Engine communicates using the [UCI protocol](http://wbec-ridderkerk.nl/html/UCIProtocol.html), so it can be used with any UCI-compatible GUI. Alternatively, you can run the engine directly in the terminal by executing: + +```bash +cargo run --release +``` + +This will start the engine and you can interact with it through the terminal. + +--- + +## Documentation + +Comprehensive documentation for Castled Engine can be found [here](./docs/README.md). diff --git a/public/castledEngine/package.json b/public/castledEngine/package.json new file mode 100644 index 0000000..567ede9 --- /dev/null +++ b/public/castledEngine/package.json @@ -0,0 +1,25 @@ +{ + "name": "castled_engine", + "type": "module", + "collaborators": [ + "Ludovic Debever ludovicdebever0@gmail.com", + "Eliott Reigner", + "Mahdi Aribi" + ], + "description": "The Castled org chess engine", + "version": "0.1.0", + "repository": { + "type": "git", + "url": "https://github.com/CastledChess/engine" + }, + "files": [ + "CastledEngine_bg.wasm", + "CastledEngine.js", + "CastledEngine.d.ts" + ], + "main": "CastledEngine.js", + "types": "CastledEngine.d.ts", + "sideEffects": [ + "./snippets/*" + ] +} \ No newline at end of file diff --git a/src/components/joyride/tooltip.tsx b/src/components/joyride/tooltip.tsx deleted file mode 100644 index 7527df6..0000000 --- a/src/components/joyride/tooltip.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { TooltipRenderProps } from 'react-joyride'; -import { Button } from '@/components/ui/button.tsx'; - -export const CustomJoyrideTooltip = (props: TooltipRenderProps) => { - const { backProps, continuous, index, primaryProps, skipProps, step, tooltipProps } = props; - - return ( -
- {step.title &&

{step.title}

} -
{step.content}
-
- -
- {index > 0 && } - {continuous && } -
-
-
- ); -}; diff --git a/src/workers/engine.ts b/src/workers/engine.ts index aa849ed..2765a2a 100644 --- a/src/workers/engine.ts +++ b/src/workers/engine.ts @@ -1,4 +1,4 @@ -import init, { init_wasm, main_wasm } from '../../public/castledEngine/CastledEngine'; +import init, { init_wasm, main_wasm } from '@/../public/castledEngine/CastledEngine'; let isReady = false; diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo index 8fde194..f1527a9 100644 --- a/tsconfig.tsbuildinfo +++ b/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"root":["./src/app.tsx","./src/i18n.config.ts","./src/main.tsx","./src/vite-env.d.ts","./src/api/analysis.ts","./src/api/auth.ts","./src/api/chesscom.ts","./src/api/database.ts","./src/api/history.ts","./src/api/index.ts","./src/api/lichessorg.ts","./src/assets/themes/piece-css/index.ts","./src/components/theme-provider.tsx","./src/components/chessboard/analysis-chessboard.tsx","./src/components/chessboard/chessboard-tooltip.tsx","./src/components/chessboard/chessboard.tsx","./src/components/evalbar/evalbar.tsx","./src/components/evalchart/evalchart.tsx","./src/components/navbar/navbar.tsx","./src/components/playerinfo/playerinfo.tsx","./src/components/squareHighlight/square-highlight.tsx","./src/components/ui/accordion.tsx","./src/components/ui/avatar.stories.tsx","./src/components/ui/avatar.tsx","./src/components/ui/button.stories.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.stories.tsx","./src/components/ui/calendar.tsx","./src/components/ui/card.stories.tsx","./src/components/ui/card.tsx","./src/components/ui/checkbox.stories.tsx","./src/components/ui/checkbox.tsx","./src/components/ui/collapsible.tsx","./src/components/ui/command.stories.tsx","./src/components/ui/command.tsx","./src/components/ui/dialog.stories.tsx","./src/components/ui/dialog.tsx","./src/components/ui/dropdown-menu.stories.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/form.tsx","./src/components/ui/form_button.tsx","./src/components/ui/input.stories.tsx","./src/components/ui/input.tsx","./src/components/ui/label.stories.tsx","./src/components/ui/label.tsx","./src/components/ui/navigation-menu.tsx","./src/components/ui/popover.tsx","./src/components/ui/progress.tsx","./src/components/ui/resizable.tsx","./src/components/ui/select.stories.tsx","./src/components/ui/select.tsx","./src/components/ui/slider.tsx","./src/components/ui/sonner.tsx","./src/components/ui/switch.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/components/ui/textarea.tsx","./src/components/ui/toggle-group.tsx","./src/components/ui/toggle.tsx","./src/components/ui/tooltip.tsx","./src/data/classifications.ts","./src/lib/analysis.ts","./src/lib/format.test.ts","./src/lib/format.ts","./src/lib/interpretation.ts","./src/lib/opening.test.ts","./src/lib/opening.ts","./src/lib/utils.ts","./src/pages/documentation.tsx","./src/pages/not-found.tsx","./src/pages/analysis/analysis-old.tsx","./src/pages/analysis/analysis.tsx","./src/pages/analysis/droppable-panel.tsx","./src/pages/analysis/layout-sidebar-item.tsx","./src/pages/analysis/layout-sidebar.tsx","./src/pages/analysis/panels/chessboard/chessboard-panel.tsx","./src/pages/analysis/panels/controls/controls.tsx","./src/pages/analysis/panels/database/database.tsx","./src/pages/analysis/panels/engineLines/engine-lines.tsx","./src/pages/analysis/panels/evalHistory/eval-history.tsx","./src/pages/analysis/panels/interpretation/interpretation.tsx","./src/pages/analysis/panels/moveList/move-list.tsx","./src/pages/dashboard/columns.tsx","./src/pages/dashboard/dashboard.tsx","./src/pages/dashboard/data-table.tsx","./src/pages/login/login.tsx","./src/pages/profile/profile.tsx","./src/pages/register/register.tsx","./src/pages/start-analysis/chesscom-select.tsx","./src/pages/start-analysis/lichessorg-select.tsx","./src/pages/start-analysis/start-analysis.tsx","./src/pages/theme/theme.tsx","./src/pages/theme/themes.ts","./src/schema/analysis.ts","./src/schema/auth.ts","./src/schema/profile.ts","./src/services/cache/cache.service.ts","./src/services/stockfish/stockfish.service.ts","./src/services/stockfish/uci-parser.service.ts","./src/store/analysis.ts","./src/store/auth.ts","./src/store/history.ts","./src/store/layout.ts","./src/store/move-list.ts","./src/store/theme.ts","./src/types/analysis.ts","./src/types/interpretation.ts","./src/types/layout.ts","./src/types/opening.ts","./src/workers/opening.ts"],"errors":true,"version":"5.7.2"} \ No newline at end of file +{"root":["./src/app.tsx","./src/i18n.config.ts","./src/main.tsx","./src/vite-env.d.ts","./src/api/analysis.ts","./src/api/auth.ts","./src/api/chesscom.ts","./src/api/database.ts","./src/api/history.ts","./src/api/index.ts","./src/api/lichessorg.ts","./src/assets/themes/piece-css/index.ts","./src/components/theme-provider.tsx","./src/components/chessboard/analysis-chessboard.tsx","./src/components/chessboard/chessboard-tooltip.tsx","./src/components/chessboard/chessboard.tsx","./src/components/evalbar/evalbar.tsx","./src/components/evalchart/evalchart.tsx","./src/components/navbar/navbar.tsx","./src/components/playerinfo/playerinfo.tsx","./src/components/reactour/content.tsx","./src/components/squareHighlight/square-highlight.tsx","./src/components/ui/accordion.tsx","./src/components/ui/avatar.stories.tsx","./src/components/ui/avatar.tsx","./src/components/ui/button.stories.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.stories.tsx","./src/components/ui/calendar.tsx","./src/components/ui/card.stories.tsx","./src/components/ui/card.tsx","./src/components/ui/checkbox.stories.tsx","./src/components/ui/checkbox.tsx","./src/components/ui/collapsible.tsx","./src/components/ui/command.stories.tsx","./src/components/ui/command.tsx","./src/components/ui/dialog.stories.tsx","./src/components/ui/dialog.tsx","./src/components/ui/dropdown-menu.stories.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/form.tsx","./src/components/ui/form_button.tsx","./src/components/ui/input.stories.tsx","./src/components/ui/input.tsx","./src/components/ui/label.stories.tsx","./src/components/ui/label.tsx","./src/components/ui/navigation-menu.tsx","./src/components/ui/popover.tsx","./src/components/ui/progress.tsx","./src/components/ui/resizable.tsx","./src/components/ui/select.stories.tsx","./src/components/ui/select.tsx","./src/components/ui/slider.tsx","./src/components/ui/sonner.tsx","./src/components/ui/switch.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/components/ui/textarea.tsx","./src/components/ui/toggle-group.tsx","./src/components/ui/toggle.tsx","./src/components/ui/tooltip.tsx","./src/data/classifications.ts","./src/data/layout.tsx","./src/data/tutorial.ts","./src/lib/analysis.ts","./src/lib/format.test.ts","./src/lib/format.ts","./src/lib/interpretation.ts","./src/lib/opening.test.ts","./src/lib/opening.ts","./src/lib/utils.ts","./src/pages/documentation.tsx","./src/pages/not-found.tsx","./src/pages/analysis/analysis.tsx","./src/pages/analysis/panels/chessboard/chessboard-panel.tsx","./src/pages/analysis/panels/controls/controls.tsx","./src/pages/analysis/panels/database/database.tsx","./src/pages/analysis/panels/engineLines/engine-lines.tsx","./src/pages/analysis/panels/evalHistory/eval-history.tsx","./src/pages/analysis/panels/interpretation/interpretation.tsx","./src/pages/analysis/panels/moveList/move-list.tsx","./src/pages/dashboard/columns.tsx","./src/pages/dashboard/dashboard.tsx","./src/pages/dashboard/data-table.tsx","./src/pages/login/login.tsx","./src/pages/profile/profile.tsx","./src/pages/register/register.tsx","./src/pages/start-analysis/chesscom-select.tsx","./src/pages/start-analysis/lichessorg-select.tsx","./src/pages/start-analysis/start-analysis.tsx","./src/pages/theme/theme.tsx","./src/pages/theme/themes.ts","./src/schema/analysis.ts","./src/schema/auth.ts","./src/schema/profile.ts","./src/services/cache/cache.service.ts","./src/services/engine/engine.service.ts","./src/services/engine/uci-parser.service.ts","./src/store/analysis.ts","./src/store/auth.ts","./src/store/history.ts","./src/store/layout.ts","./src/store/move-list.ts","./src/store/theme.ts","./src/types/analysis.ts","./src/types/interpretation.ts","./src/types/layout.ts","./src/types/opening.ts","./src/workers/engine.ts","./src/workers/opening.ts"],"version":"5.7.2"} \ No newline at end of file