From a75cf55fb6412b52b39956c98575155dc689f602 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 30 Mar 2026 19:06:50 -0700 Subject: [PATCH 1/3] Fix CI test failure and add GitHub Packages publishing - Fix exit-127 preflight test: accept both "Test command not found" and generic failure message (Linux returns 127, Windows may differ) - Add GitHub Packages publish step to release workflow: publishes as @that-github-user/thinktank-ai to npm.pkg.github.com alongside the existing npmjs.org publish - Add packages:write permission to release workflow Fixes CI failure from #160. Resolves "No packages published" on GitHub. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/release.yml | 16 +++++++++++++++- src/commands/run.test.ts | 6 +++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b89dac9..6fd0a9d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,6 +8,7 @@ on: permissions: contents: write id-token: write + packages: write jobs: release: @@ -36,11 +37,24 @@ jobs: - name: Test run: npm test - - name: Publish to npm (trusted publishing via OIDC) + - name: Publish to npm run: npm publish --provenance --access public env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + - name: Configure GitHub Packages registry + uses: actions/setup-node@v4 + with: + node-version: 22 + registry-url: https://npm.pkg.github.com/ + + - name: Publish to GitHub Packages + run: | + npm pkg set "name=@that-github-user/thinktank-ai" + npm publish --access public + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: diff --git a/src/commands/run.test.ts b/src/commands/run.test.ts index c8ffd72..6bdbf67 100644 --- a/src/commands/run.test.ts +++ b/src/commands/run.test.ts @@ -465,6 +465,10 @@ describe("preflightTestRun", () => { it("returns warning when command is not found", async () => { const result = await preflightTestRun("nonexistent-command-xyz", process.cwd()); assert.ok(result); - assert.ok(result.includes("failed on the current branch")); + // Exit 127 (command not found) gets a specific message + assert.ok( + result.includes("Test command not found") || result.includes("failed on the current branch"), + `Expected exit-127 or generic failure message, got: ${result.substring(0, 100)}` + ); }); }); From 1747cb26c8cf895aab656fb82f88b8a97b758744 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 30 Mar 2026 19:09:29 -0700 Subject: [PATCH 2/3] Fix formatting (trailing comma) --- .../__pycache__/grid.cpython-312.pyc | Bin 0 -> 1667 bytes ...t_pathfinding.cpython-312-pytest-7.4.4.pyc | Bin 0 -> 6215 bytes examples/astar/package-lock.json | 590 ++++++++++++++++++ .../__pycache__/classifier.cpython-312.pyc | Bin 0 -> 1698 bytes ...lassification.cpython-312-pytest-7.4.4.pyc | Bin 0 -> 7559 bytes .../__pycache__/model.cpython-312.pyc | Bin 0 -> 1604 bytes ...st_regression.cpython-312-pytest-7.4.4.pyc | Bin 0 -> 6152 bytes scripts/batch-runs-ml.sh | 72 +++ scripts/batch-runs-v2.sh | 110 ++++ scripts/batch-runs-v3.sh | 33 + scripts/batch-runs.sh | 99 +++ src/commands/run.test.ts | 2 +- 12 files changed, 905 insertions(+), 1 deletion(-) create mode 100644 examples/astar-python/__pycache__/grid.cpython-312.pyc create mode 100644 examples/astar-python/__pycache__/test_pathfinding.cpython-312-pytest-7.4.4.pyc create mode 100644 examples/astar/package-lock.json create mode 100644 examples/ml-classification/__pycache__/classifier.cpython-312.pyc create mode 100644 examples/ml-classification/__pycache__/test_classification.cpython-312-pytest-7.4.4.pyc create mode 100644 examples/ml-regression/__pycache__/model.cpython-312.pyc create mode 100644 examples/ml-regression/__pycache__/test_regression.cpython-312-pytest-7.4.4.pyc create mode 100644 scripts/batch-runs-ml.sh create mode 100644 scripts/batch-runs-v2.sh create mode 100644 scripts/batch-runs-v3.sh create mode 100644 scripts/batch-runs.sh diff --git a/examples/astar-python/__pycache__/grid.cpython-312.pyc b/examples/astar-python/__pycache__/grid.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9a34d96fb367d4d3314fcf8e25a3283cd7dfd1cc GIT binary patch literal 1667 zcma)6&1)M+6rWwKzE=K76Nh|I%*#z`W!H&w5^=#eO(>;KaGXPgU>R#h($=dTb!Ik> zatb8{`<9yz{R@gu{WD50Dd{0B6bwD}rs9-BPknFo;TCe}Nc;A^-8VCD-tYI@pXTR% zhQt5v$FS)!_8SG$QJy$wPtiGMf;E|Ngc~`1x9K|M=b~KSYkCfod0CK!j(ZI=n?>ol z>^>9TOD6Is?s%1x$zsitD9AGY3Y1HiD9WNJ;Z>HdEYXurN%$|lra!FI=J=X}<=xkz zSlQ!73K($P>x8ig<1Vy&Jc?x8mC#WdY%h%WEsys>#zyw{A_-O+i;1hgzuS}0#Z@3Q zz~R!8DK&(>C9TY(69my*n?|2s9i=A@+uxDP!;zbrT% zha1zTx6_fEIA>LKj+tal2Z44UGntbffg$t4xkL8?dMFR=uB1ee&S(4(x6| z`l12n)Wp*p=p=DQ6_^o@pqa>JHJiNEQ_4sfszd`433@Woh(OpzVj)A2w>oL#@uaCE zRmGU9;qx&fNKLAJQ+ExiW<02}21$w>sIF~Hg;a-|8&eh4X6acY8}NwqL8?ILLV_Er zS{>A(t)lZ>>~;fox$a7o)_d}@MRzhZ{#DR9HQ@jS^`0)%!7{qSl&*D>=C+C@gdIp? zEjfN%#vcQK=NEUWyZF!AX1UqFfs(qkt?Uc{DL&I$=~_--Lf|!VOJ7D~h!xl!c9Den4{@S}ThFLxT0GFxQ{{R30 literal 0 HcmV?d00001 diff --git a/examples/astar-python/__pycache__/test_pathfinding.cpython-312-pytest-7.4.4.pyc b/examples/astar-python/__pycache__/test_pathfinding.cpython-312-pytest-7.4.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1769060499179d13001939b22eb2c93feb81cf75 GIT binary patch literal 6215 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 literal 0 HcmV?d00001 diff --git a/examples/astar/package-lock.json b/examples/astar/package-lock.json new file mode 100644 index 0000000..51e526c --- /dev/null +++ b/examples/astar/package-lock.json @@ -0,0 +1,590 @@ +{ + "name": "astar-showcase", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "astar-showcase", + "version": "1.0.0", + "devDependencies": { + "@types/node": "^25.5.0", + "tsx": "^4.21.0", + "typescript": "^6.0.2" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", + "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", + "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", + "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", + "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", + "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", + "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", + "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", + "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", + "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", + "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", + "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", + "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", + "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", + "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", + "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", + "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", + "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", + "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", + "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", + "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", + "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", + "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", + "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", + "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", + "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", + "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@types/node": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", + "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/esbuild": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", + "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.4", + "@esbuild/android-arm": "0.27.4", + "@esbuild/android-arm64": "0.27.4", + "@esbuild/android-x64": "0.27.4", + "@esbuild/darwin-arm64": "0.27.4", + "@esbuild/darwin-x64": "0.27.4", + "@esbuild/freebsd-arm64": "0.27.4", + "@esbuild/freebsd-x64": "0.27.4", + "@esbuild/linux-arm": "0.27.4", + "@esbuild/linux-arm64": "0.27.4", + "@esbuild/linux-ia32": "0.27.4", + "@esbuild/linux-loong64": "0.27.4", + "@esbuild/linux-mips64el": "0.27.4", + "@esbuild/linux-ppc64": "0.27.4", + "@esbuild/linux-riscv64": "0.27.4", + "@esbuild/linux-s390x": "0.27.4", + "@esbuild/linux-x64": "0.27.4", + "@esbuild/netbsd-arm64": "0.27.4", + "@esbuild/netbsd-x64": "0.27.4", + "@esbuild/openbsd-arm64": "0.27.4", + "@esbuild/openbsd-x64": "0.27.4", + "@esbuild/openharmony-arm64": "0.27.4", + "@esbuild/sunos-x64": "0.27.4", + "@esbuild/win32-arm64": "0.27.4", + "@esbuild/win32-ia32": "0.27.4", + "@esbuild/win32-x64": "0.27.4" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.7", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz", + "integrity": "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/typescript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/examples/ml-classification/__pycache__/classifier.cpython-312.pyc b/examples/ml-classification/__pycache__/classifier.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4bc497545151e91a1a00112ac683ac90d1b33514 GIT binary patch literal 1698 zcmaJ>&u=3&6!zqIC(VMk%P$F)$E}05J_8F&z?-0rPW%A?RkFh`SbTa`Q13EZHbgnz_>}@K8RMDvT!)?yxU~wz*^7b^*5Gp-dp6DW+f`l4zD% zltHKwqtC#n+)ubYhz5iMR4Me9Gp2Imj?Ho)p>zM(Cec%lj0nK9Qh}a`O2LO801trdR|i3zC4-A>;5FQet=4ktq%&dvY)RqReljEc!y;QX|hf8}^3`m2!=VB627b7gt2C@mJ$ zL_NI!;0TWQJ~?c|g@O({okA^z5=Tl#pna^IKUrwTmVA+BPmQf8OiF;oS=(@Iq-gXt zViZrv^i9wcI%BXUau#la7!+%s1!UqE6s^Qt+Al|Yc_l&-voRLm>OC)!UM9a!mgRkrVL6 z_2WsX0e`7X@X}K~eG`?m(UI}8LM*telvG|t8ObPo5{asru8y5HHbdjTAMdyOcwLn4 z>yS&)KahT6o(SDnY$kPo`JnXK=lOHckNEbpZ&1JZWNK%YX4fyjF3P-^8)oAdvHOxd zeTy_VA8o$3ED#|!!^%0je zzI`jJVr_9K<6!ssk*F3rsHX91yc5YF;p{#23Vxbfp#^sHvg0^UO6yML{B`1N{7GPb zja+--$=XZKt>0TWzCSwco%GIHFfXIwFKg(YbkACw^C}wVHG-x)r}s|oovptyuNzZ? cG@5f0K6gp2_07?D-EX^R)t8?((PZ)b2cj7A#sB~S literal 0 HcmV?d00001 diff --git a/examples/ml-classification/__pycache__/test_classification.cpython-312-pytest-7.4.4.pyc b/examples/ml-classification/__pycache__/test_classification.cpython-312-pytest-7.4.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9cca493f04b2c7b2b627ad19441f561ed8449f0f GIT binary patch literal 7559 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 Gf&K*!nRwj* literal 0 HcmV?d00001 diff --git a/examples/ml-regression/__pycache__/model.cpython-312.pyc b/examples/ml-regression/__pycache__/model.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b87d97924e2ee01c31e59d2af2dd119277bf840 GIT binary patch literal 1604 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 Q*H3)&&1 || echo "[WARN] Run failed — continuing" + + echo "--- Completed: $desc ---" +} + +# ═══════════════════════════════════════════════════════════ +# Linear Regression (Python, numpy only, no sklearn) +# ═══════════════════════════════════════════════════════════ + +run_task "Linear Regression #1 (standard)" \ + "Implement the train_and_predict function in examples/ml-regression/model.py. Use the normal equation (closed-form least squares) to fit a linear regression model. Use numpy only, not sklearn. Return predictions as a 1D numpy array." \ + "cd examples/ml-regression && python -m pytest test_regression.py -v" \ + 5 sonnet + +run_task "Linear Regression #2 (gradient descent)" \ + "Implement train_and_predict in examples/ml-regression/model.py using gradient descent optimization. Do NOT use the normal equation or sklearn. Implement batch gradient descent with a reasonable learning rate and convergence criterion. Use numpy only." \ + "cd examples/ml-regression && python -m pytest test_regression.py -v" \ + 5 sonnet + +run_task "Linear Regression #3 (creative freedom)" \ + "Implement the train_and_predict function in examples/ml-regression/model.py. Choose any approach to fit a linear model: normal equation, gradient descent, QR decomposition, or SVD. Optimize for numerical stability. Use numpy only, no sklearn." \ + "cd examples/ml-regression && python -m pytest test_regression.py -v" \ + 3 sonnet + +# ═══════════════════════════════════════════════════════════ +# KNN Classification (Python, numpy only, no sklearn) +# ═══════════════════════════════════════════════════════════ + +run_task "KNN Classification #1 (standard)" \ + "Implement the train_and_classify function in examples/ml-classification/classifier.py. Use k-nearest neighbors with Euclidean distance and majority voting. Use numpy only, not sklearn. Return predictions as a 1D numpy array." \ + "cd examples/ml-classification && python -m pytest test_classification.py -v" \ + 5 sonnet + +run_task "KNN Classification #2 (optimized)" \ + "Implement train_and_classify in examples/ml-classification/classifier.py using KNN with Euclidean distance. Focus on efficiency: use numpy broadcasting to compute distances without Python loops. Handle ties by picking the smallest label. Use numpy only." \ + "cd examples/ml-classification && python -m pytest test_classification.py -v" \ + 5 sonnet + +run_task "KNN Classification #3 (creative freedom)" \ + "Implement the train_and_classify function in examples/ml-classification/classifier.py. Use any nearest-neighbor approach: brute force KNN, weighted KNN, or any variant. Prioritize correctness and clean code. Use numpy only, no sklearn." \ + "cd examples/ml-classification && python -m pytest test_classification.py -v" \ + 3 sonnet + +echo "" +echo "================================================================" +echo "ML RUNS COMPLETE" +echo "================================================================" diff --git a/scripts/batch-runs-v2.sh b/scripts/batch-runs-v2.sh new file mode 100644 index 0000000..392825a --- /dev/null +++ b/scripts/batch-runs-v2.sh @@ -0,0 +1,110 @@ +#!/bin/bash +# Rerun all failed runs with wrapper scripts + add ML runs +set -e + +REPO="C:/Users/silon/Documents/repos/thinktank" +cd "$REPO" + +run_task() { + local desc="$1" + local prompt="$2" + local test_cmd="$3" + local agents="${4:-5}" + local model="${5:-sonnet}" + + echo "" + echo "================================================================" + echo "RUN: $desc" + echo "================================================================" + + npx tsx src/cli.ts run "$prompt" \ + -n "$agents" \ + -t "$test_cmd" \ + --model "$model" \ + --timeout 300 \ + 2>&1 || echo "[WARN] Run failed — continuing" +} + +# ═══════ A* Python (re-runs with wrapper) ═══════ + +run_task "Python A* #1" \ + "Implement A* pathfinding in examples/astar-python/grid.py. Use Manhattan distance heuristic and a min-heap priority queue." \ + "bash examples/astar-python/run-tests.sh" \ + 5 sonnet + +run_task "Python A* #2 (creative)" \ + "Implement find_path in examples/astar-python/grid.py using any optimal pathfinding algorithm. Optimize for clarity and efficiency." \ + "bash examples/astar-python/run-tests.sh" \ + 5 sonnet + +run_task "Python A* #3 (performance)" \ + "Implement A* in examples/astar-python/grid.py. Focus on performance: efficient data structures, minimize allocations, add heap tiebreaking." \ + "bash examples/astar-python/run-tests.sh" \ + 3 sonnet + +# ═══════ A* TypeScript (re-runs with wrapper) ═══════ + +run_task "TypeScript A* #1" \ + "Implement findPath in examples/astar/src/grid.ts using A* with Manhattan distance heuristic. Use a priority queue." \ + "bash examples/astar/run-tests.sh" \ + 5 sonnet + +run_task "TypeScript A* #2 (creative)" \ + "Implement findPath in examples/astar/src/grid.ts. Use any optimal pathfinding approach. Write clean, idiomatic TypeScript." \ + "bash examples/astar/run-tests.sh" \ + 5 sonnet + +# ═══════ Linear Regression ═══════ + +run_task "Regression #1 (normal equation)" \ + "Implement train_and_predict in examples/ml-regression/model.py using the normal equation (closed-form least squares). Use numpy only, not sklearn." \ + "bash examples/ml-regression/run-tests.sh" \ + 5 sonnet + +run_task "Regression #2 (gradient descent)" \ + "Implement train_and_predict in examples/ml-regression/model.py using batch gradient descent. Do NOT use the normal equation or sklearn. Use numpy only." \ + "bash examples/ml-regression/run-tests.sh" \ + 5 sonnet + +run_task "Regression #3 (creative)" \ + "Implement train_and_predict in examples/ml-regression/model.py. Choose any approach: normal equation, gradient descent, QR decomposition, or SVD. Optimize for numerical stability. Numpy only." \ + "bash examples/ml-regression/run-tests.sh" \ + 3 sonnet + +# ═══════ KNN Classification ═══════ + +run_task "KNN #1 (standard)" \ + "Implement train_and_classify in examples/ml-classification/classifier.py using k-nearest neighbors with Euclidean distance and majority voting. Numpy only, not sklearn." \ + "bash examples/ml-classification/run-tests.sh" \ + 5 sonnet + +run_task "KNN #2 (optimized)" \ + "Implement train_and_classify in examples/ml-classification/classifier.py using KNN with numpy broadcasting for distance computation. Handle ties by smallest label. Numpy only." \ + "bash examples/ml-classification/run-tests.sh" \ + 5 sonnet + +run_task "KNN #3 (creative)" \ + "Implement train_and_classify in examples/ml-classification/classifier.py using any nearest-neighbor variant. Prioritize correctness and clean code. Numpy only, no sklearn." \ + "bash examples/ml-classification/run-tests.sh" \ + 3 sonnet + +# ═══════ Main repo (re-run the ones that needed cd) ═══════ + +run_task "Main repo: improve error messages" \ + "Improve error handling in src/runners/claude-code.ts: when claude CLI is not found (ENOENT), print a helpful message with install link. When agent times out, include timeout duration in error." \ + "npm test" \ + 5 sonnet + +run_task "Main repo: config list" \ + "Add a thinktank config list subcommand that prints all current configuration values from .thinktank/config.json in a readable format. If no config exists, print defaults. Register in src/cli.ts." \ + "npm test" \ + 5 sonnet + +echo "" +echo "================================================================" +echo "ALL V2 RUNS COMPLETE — running evaluate" +echo "================================================================" +npx tsx src/cli.ts evaluate 2>&1 +echo "" +ls .thinktank/run-*.json | wc -l +echo " total run files" diff --git a/scripts/batch-runs-v3.sh b/scripts/batch-runs-v3.sh new file mode 100644 index 0000000..3dcee69 --- /dev/null +++ b/scripts/batch-runs-v3.sh @@ -0,0 +1,33 @@ +#!/bin/bash +# v3: Re-run A* examples with fixed test_maze assertion +set -e +cd C:/Users/silon/Documents/repos/thinktank + +run_task() { + local desc="$1"; local prompt="$2"; local test_cmd="$3" + local agents="${4:-5}"; local model="${5:-sonnet}" + echo ""; echo "=== RUN: $desc ===" + npx tsx src/cli.ts run "$prompt" -n "$agents" -t "$test_cmd" --model "$model" --timeout 300 2>&1 || echo "[WARN] Run failed" +} + +# Python A* +run_task "Python A* #1" \ + "Implement A* pathfinding in examples/astar-python/grid.py. Use Manhattan distance heuristic and a min-heap priority queue." \ + "bash examples/astar-python/run-tests.sh" 5 sonnet + +run_task "Python A* #2 (creative)" \ + "Implement find_path in examples/astar-python/grid.py using any optimal pathfinding algorithm. Optimize for clarity and efficiency." \ + "bash examples/astar-python/run-tests.sh" 5 sonnet + +# TypeScript A* +run_task "TS A* #1" \ + "Implement findPath in examples/astar/src/grid.ts using A* with Manhattan distance heuristic. Use a priority queue." \ + "bash examples/astar/run-tests.sh" 5 sonnet + +run_task "TS A* #2 (creative)" \ + "Implement findPath in examples/astar/src/grid.ts. Use any optimal pathfinding approach. Write clean, idiomatic TypeScript." \ + "bash examples/astar/run-tests.sh" 5 sonnet + +echo ""; echo "=== V3 COMPLETE ==="; echo "" +ls .thinktank/run-*.json | wc -l; echo " total runs" +npx tsx src/cli.ts evaluate 2>&1 | grep -E "Usable|All three|Weighted|Copeland" diff --git a/scripts/batch-runs.sh b/scripts/batch-runs.sh new file mode 100644 index 0000000..25b7e94 --- /dev/null +++ b/scripts/batch-runs.sh @@ -0,0 +1,99 @@ +#!/bin/bash +# Batch thinktank runs for scoring evaluation diversity +# Each run generates scoring data in .thinktank/ +set -e + +REPO="C:/Users/silon/Documents/repos/thinktank" +cd "$REPO" + +run_task() { + local desc="$1" + local prompt="$2" + local test_cmd="$3" + local agents="${4:-5}" + local model="${5:-sonnet}" + + echo "" + echo "================================================================" + echo "RUN: $desc" + echo "Agents: $agents | Model: $model | Test: $test_cmd" + echo "================================================================" + + npx tsx src/cli.ts run "$prompt" \ + -n "$agents" \ + -t "$test_cmd" \ + --model "$model" \ + --timeout 300 \ + 2>&1 || echo "[WARN] Run failed or had errors — continuing" + + echo "--- Completed: $desc ---" +} + +# ═══════════════════════════════════════════════════════════ +# ROUND 1: A* Pathfinding — Python (known good test suite) +# ═══════════════════════════════════════════════════════════ + +run_task "Python A* #1" \ + "Implement A* pathfinding in examples/astar-python/grid.py. Use Manhattan distance heuristic and a min-heap priority queue. The function should return a PathResult with the shortest path and nodes_explored count, or None if unreachable." \ + "cd examples/astar-python && python -m pytest test_pathfinding.py -v" \ + 5 sonnet + +run_task "Python A* #2 (creative freedom)" \ + "Implement the find_path function in examples/astar-python/grid.py using any optimal pathfinding algorithm. You may use A*, Dijkstra, or any approach that finds shortest paths. Optimize for clarity and efficiency." \ + "cd examples/astar-python && python -m pytest test_pathfinding.py -v" \ + 5 sonnet + +run_task "Python A* #3 (performance focus)" \ + "Implement A* pathfinding in examples/astar-python/grid.py. Focus on performance: use efficient data structures, minimize memory allocations, and add heap tiebreaking to reduce explored nodes." \ + "cd examples/astar-python && python -m pytest test_pathfinding.py -v" \ + 3 sonnet + +# ═══════════════════════════════════════════════════════════ +# ROUND 2: A* Pathfinding — TypeScript (different language) +# ═══════════════════════════════════════════════════════════ + +run_task "TypeScript A* #1" \ + "Implement the findPath function in examples/astar/src/grid.ts using A* pathfinding with Manhattan distance heuristic. Use a min-heap or priority queue. Return a PathResult with path and nodesExplored, or null if unreachable." \ + "cd examples/astar && npx tsx --test tests/pathfinding.test.ts" \ + 5 sonnet + +run_task "TypeScript A* #2 (creative freedom)" \ + "Implement findPath in examples/astar/src/grid.ts. Use any optimal pathfinding approach. Prioritize clean, idiomatic TypeScript." \ + "cd examples/astar && npx tsx --test tests/pathfinding.test.ts" \ + 5 sonnet + +# ═══════════════════════════════════════════════════════════ +# ROUND 3: Main repo tasks — varied complexity +# ═══════════════════════════════════════════════════════════ + +run_task "Main repo: add --quiet flag" \ + "Add a --quiet flag to the run command (src/commands/run.ts) that suppresses all output except the final recommended agent line. Wire it through the CLI options in src/cli.ts. Make sure existing tests still pass." \ + "npm test" \ + 5 sonnet + +run_task "Main repo: validate attempts range" \ + "Add input validation to the run command: the --attempts value must be between 1 and 20 inclusive. If out of range, print an actionable error message and exit with code 1. Add a test for this validation." \ + "npm test" \ + 3 sonnet + +run_task "Main repo: improve error messages" \ + "Improve error handling in src/runners/claude-code.ts: when the claude CLI is not found (ENOENT), print a helpful message telling the user to install Claude Code CLI with a link to docs. When the agent times out, include the timeout duration in the error message." \ + "npm test" \ + 5 sonnet + +run_task "Main repo: add run duration to JSON output" \ + "When --output-format json is used, include a totalDuration field (in seconds) in the JSON output that measures the wall-clock time from start to finish of the entire ensemble run. Also include a startTime ISO timestamp." \ + "npm test" \ + 3 sonnet + +run_task "Main repo: config list subcommand" \ + "Add a 'thinktank config list' subcommand that prints all current configuration values (from .thinktank/config.json) in a readable format. If no config exists, print defaults. Register it in src/cli.ts." \ + "npm test" \ + 5 sonnet + +echo "" +echo "================================================================" +echo "ALL RUNS COMPLETE" +echo "================================================================" +echo "" +npx tsx src/cli.ts evaluate 2>&1 diff --git a/src/commands/run.test.ts b/src/commands/run.test.ts index 6bdbf67..5006de2 100644 --- a/src/commands/run.test.ts +++ b/src/commands/run.test.ts @@ -468,7 +468,7 @@ describe("preflightTestRun", () => { // Exit 127 (command not found) gets a specific message assert.ok( result.includes("Test command not found") || result.includes("failed on the current branch"), - `Expected exit-127 or generic failure message, got: ${result.substring(0, 100)}` + `Expected exit-127 or generic failure message, got: ${result.substring(0, 100)}`, ); }); }); From ed66e9e730b56b27e0863e01a641b81510a30cc4 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 30 Mar 2026 19:09:56 -0700 Subject: [PATCH 3/3] Remove accidentally committed artifacts, update .gitignore --- .gitignore | 5 + .../__pycache__/grid.cpython-312.pyc | Bin 1667 -> 0 bytes ...t_pathfinding.cpython-312-pytest-7.4.4.pyc | Bin 6215 -> 0 bytes examples/astar/package-lock.json | 590 ------------------ .../__pycache__/classifier.cpython-312.pyc | Bin 1698 -> 0 bytes ...lassification.cpython-312-pytest-7.4.4.pyc | Bin 7559 -> 0 bytes .../__pycache__/model.cpython-312.pyc | Bin 1604 -> 0 bytes ...st_regression.cpython-312-pytest-7.4.4.pyc | Bin 6152 -> 0 bytes scripts/batch-runs-ml.sh | 72 --- scripts/batch-runs-v2.sh | 110 ---- scripts/batch-runs-v3.sh | 33 - scripts/batch-runs.sh | 99 --- 12 files changed, 5 insertions(+), 904 deletions(-) delete mode 100644 examples/astar-python/__pycache__/grid.cpython-312.pyc delete mode 100644 examples/astar-python/__pycache__/test_pathfinding.cpython-312-pytest-7.4.4.pyc delete mode 100644 examples/astar/package-lock.json delete mode 100644 examples/ml-classification/__pycache__/classifier.cpython-312.pyc delete mode 100644 examples/ml-classification/__pycache__/test_classification.cpython-312-pytest-7.4.4.pyc delete mode 100644 examples/ml-regression/__pycache__/model.cpython-312.pyc delete mode 100644 examples/ml-regression/__pycache__/test_regression.cpython-312-pytest-7.4.4.pyc delete mode 100644 scripts/batch-runs-ml.sh delete mode 100644 scripts/batch-runs-v2.sh delete mode 100644 scripts/batch-runs-v3.sh delete mode 100644 scripts/batch-runs.sh diff --git a/.gitignore b/.gitignore index 811705e..8067465 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,8 @@ node_modules/ dist/ .thinktank/ *.tgz + +__pycache__/ +*.pyc +examples/*/package-lock.json +scripts/batch-runs*.sh diff --git a/examples/astar-python/__pycache__/grid.cpython-312.pyc b/examples/astar-python/__pycache__/grid.cpython-312.pyc deleted file mode 100644 index 9a34d96fb367d4d3314fcf8e25a3283cd7dfd1cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1667 zcma)6&1)M+6rWwKzE=K76Nh|I%*#z`W!H&w5^=#eO(>;KaGXPgU>R#h($=dTb!Ik> zatb8{`<9yz{R@gu{WD50Dd{0B6bwD}rs9-BPknFo;TCe}Nc;A^-8VCD-tYI@pXTR% zhQt5v$FS)!_8SG$QJy$wPtiGMf;E|Ngc~`1x9K|M=b~KSYkCfod0CK!j(ZI=n?>ol z>^>9TOD6Is?s%1x$zsitD9AGY3Y1HiD9WNJ;Z>HdEYXurN%$|lra!FI=J=X}<=xkz zSlQ!73K($P>x8ig<1Vy&Jc?x8mC#WdY%h%WEsys>#zyw{A_-O+i;1hgzuS}0#Z@3Q zz~R!8DK&(>C9TY(69my*n?|2s9i=A@+uxDP!;zbrT% zha1zTx6_fEIA>LKj+tal2Z44UGntbffg$t4xkL8?dMFR=uB1ee&S(4(x6| z`l12n)Wp*p=p=DQ6_^o@pqa>JHJiNEQ_4sfszd`433@Woh(OpzVj)A2w>oL#@uaCE zRmGU9;qx&fNKLAJQ+ExiW<02}21$w>sIF~Hg;a-|8&eh4X6acY8}NwqL8?ILLV_Er zS{>A(t)lZ>>~;fox$a7o)_d}@MRzhZ{#DR9HQ@jS^`0)%!7{qSl&*D>=C+C@gdIp? zEjfN%#vcQK=NEUWyZF!AX1UqFfs(qkt?Uc{DL&I$=~_--Lf|!VOJ7D~h!xl!c9Den4{@S}ThFLxT0GFxQ{{R30 diff --git a/examples/astar-python/__pycache__/test_pathfinding.cpython-312-pytest-7.4.4.pyc b/examples/astar-python/__pycache__/test_pathfinding.cpython-312-pytest-7.4.4.pyc deleted file mode 100644 index 1769060499179d13001939b22eb2c93feb81cf75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6215 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 diff --git a/examples/astar/package-lock.json b/examples/astar/package-lock.json deleted file mode 100644 index 51e526c..0000000 --- a/examples/astar/package-lock.json +++ /dev/null @@ -1,590 +0,0 @@ -{ - "name": "astar-showcase", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "astar-showcase", - "version": "1.0.0", - "devDependencies": { - "@types/node": "^25.5.0", - "tsx": "^4.21.0", - "typescript": "^6.0.2" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", - "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", - "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", - "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", - "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", - "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", - "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", - "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", - "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", - "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", - "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", - "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", - "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", - "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", - "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", - "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", - "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", - "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", - "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", - "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", - "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", - "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", - "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", - "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", - "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", - "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", - "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", - "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/esbuild": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", - "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.4", - "@esbuild/android-arm": "0.27.4", - "@esbuild/android-arm64": "0.27.4", - "@esbuild/android-x64": "0.27.4", - "@esbuild/darwin-arm64": "0.27.4", - "@esbuild/darwin-x64": "0.27.4", - "@esbuild/freebsd-arm64": "0.27.4", - "@esbuild/freebsd-x64": "0.27.4", - "@esbuild/linux-arm": "0.27.4", - "@esbuild/linux-arm64": "0.27.4", - "@esbuild/linux-ia32": "0.27.4", - "@esbuild/linux-loong64": "0.27.4", - "@esbuild/linux-mips64el": "0.27.4", - "@esbuild/linux-ppc64": "0.27.4", - "@esbuild/linux-riscv64": "0.27.4", - "@esbuild/linux-s390x": "0.27.4", - "@esbuild/linux-x64": "0.27.4", - "@esbuild/netbsd-arm64": "0.27.4", - "@esbuild/netbsd-x64": "0.27.4", - "@esbuild/openbsd-arm64": "0.27.4", - "@esbuild/openbsd-x64": "0.27.4", - "@esbuild/openharmony-arm64": "0.27.4", - "@esbuild/sunos-x64": "0.27.4", - "@esbuild/win32-arm64": "0.27.4", - "@esbuild/win32-ia32": "0.27.4", - "@esbuild/win32-x64": "0.27.4" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/get-tsconfig": { - "version": "4.13.7", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz", - "integrity": "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/tsx": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", - "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "~0.27.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - } - } -} diff --git a/examples/ml-classification/__pycache__/classifier.cpython-312.pyc b/examples/ml-classification/__pycache__/classifier.cpython-312.pyc deleted file mode 100644 index 4bc497545151e91a1a00112ac683ac90d1b33514..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1698 zcmaJ>&u=3&6!zqIC(VMk%P$F)$E}05J_8F&z?-0rPW%A?RkFh`SbTa`Q13EZHbgnz_>}@K8RMDvT!)?yxU~wz*^7b^*5Gp-dp6DW+f`l4zD% zltHKwqtC#n+)ubYhz5iMR4Me9Gp2Imj?Ho)p>zM(Cec%lj0nK9Qh}a`O2LO801trdR|i3zC4-A>;5FQet=4ktq%&dvY)RqReljEc!y;QX|hf8}^3`m2!=VB627b7gt2C@mJ$ zL_NI!;0TWQJ~?c|g@O({okA^z5=Tl#pna^IKUrwTmVA+BPmQf8OiF;oS=(@Iq-gXt zViZrv^i9wcI%BXUau#la7!+%s1!UqE6s^Qt+Al|Yc_l&-voRLm>OC)!UM9a!mgRkrVL6 z_2WsX0e`7X@X}K~eG`?m(UI}8LM*telvG|t8ObPo5{asru8y5HHbdjTAMdyOcwLn4 z>yS&)KahT6o(SDnY$kPo`JnXK=lOHckNEbpZ&1JZWNK%YX4fyjF3P-^8)oAdvHOxd zeTy_VA8o$3ED#|!!^%0je zzI`jJVr_9K<6!ssk*F3rsHX91yc5YF;p{#23Vxbfp#^sHvg0^UO6yML{B`1N{7GPb zja+--$=XZKt>0TWzCSwco%GIHFfXIwFKg(YbkACw^C}wVHG-x)r}s|oovptyuNzZ? cG@5f0K6gp2_07?D-EX^R)t8?((PZ)b2cj7A#sB~S diff --git a/examples/ml-classification/__pycache__/test_classification.cpython-312-pytest-7.4.4.pyc b/examples/ml-classification/__pycache__/test_classification.cpython-312-pytest-7.4.4.pyc deleted file mode 100644 index 9cca493f04b2c7b2b627ad19441f561ed8449f0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7559 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 Gf&K*!nRwj* diff --git a/examples/ml-regression/__pycache__/model.cpython-312.pyc b/examples/ml-regression/__pycache__/model.cpython-312.pyc deleted file mode 100644 index 0b87d97924e2ee01c31e59d2af2dd119277bf840..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1604 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 Q*H3)&&1 || echo "[WARN] Run failed — continuing" - - echo "--- Completed: $desc ---" -} - -# ═══════════════════════════════════════════════════════════ -# Linear Regression (Python, numpy only, no sklearn) -# ═══════════════════════════════════════════════════════════ - -run_task "Linear Regression #1 (standard)" \ - "Implement the train_and_predict function in examples/ml-regression/model.py. Use the normal equation (closed-form least squares) to fit a linear regression model. Use numpy only, not sklearn. Return predictions as a 1D numpy array." \ - "cd examples/ml-regression && python -m pytest test_regression.py -v" \ - 5 sonnet - -run_task "Linear Regression #2 (gradient descent)" \ - "Implement train_and_predict in examples/ml-regression/model.py using gradient descent optimization. Do NOT use the normal equation or sklearn. Implement batch gradient descent with a reasonable learning rate and convergence criterion. Use numpy only." \ - "cd examples/ml-regression && python -m pytest test_regression.py -v" \ - 5 sonnet - -run_task "Linear Regression #3 (creative freedom)" \ - "Implement the train_and_predict function in examples/ml-regression/model.py. Choose any approach to fit a linear model: normal equation, gradient descent, QR decomposition, or SVD. Optimize for numerical stability. Use numpy only, no sklearn." \ - "cd examples/ml-regression && python -m pytest test_regression.py -v" \ - 3 sonnet - -# ═══════════════════════════════════════════════════════════ -# KNN Classification (Python, numpy only, no sklearn) -# ═══════════════════════════════════════════════════════════ - -run_task "KNN Classification #1 (standard)" \ - "Implement the train_and_classify function in examples/ml-classification/classifier.py. Use k-nearest neighbors with Euclidean distance and majority voting. Use numpy only, not sklearn. Return predictions as a 1D numpy array." \ - "cd examples/ml-classification && python -m pytest test_classification.py -v" \ - 5 sonnet - -run_task "KNN Classification #2 (optimized)" \ - "Implement train_and_classify in examples/ml-classification/classifier.py using KNN with Euclidean distance. Focus on efficiency: use numpy broadcasting to compute distances without Python loops. Handle ties by picking the smallest label. Use numpy only." \ - "cd examples/ml-classification && python -m pytest test_classification.py -v" \ - 5 sonnet - -run_task "KNN Classification #3 (creative freedom)" \ - "Implement the train_and_classify function in examples/ml-classification/classifier.py. Use any nearest-neighbor approach: brute force KNN, weighted KNN, or any variant. Prioritize correctness and clean code. Use numpy only, no sklearn." \ - "cd examples/ml-classification && python -m pytest test_classification.py -v" \ - 3 sonnet - -echo "" -echo "================================================================" -echo "ML RUNS COMPLETE" -echo "================================================================" diff --git a/scripts/batch-runs-v2.sh b/scripts/batch-runs-v2.sh deleted file mode 100644 index 392825a..0000000 --- a/scripts/batch-runs-v2.sh +++ /dev/null @@ -1,110 +0,0 @@ -#!/bin/bash -# Rerun all failed runs with wrapper scripts + add ML runs -set -e - -REPO="C:/Users/silon/Documents/repos/thinktank" -cd "$REPO" - -run_task() { - local desc="$1" - local prompt="$2" - local test_cmd="$3" - local agents="${4:-5}" - local model="${5:-sonnet}" - - echo "" - echo "================================================================" - echo "RUN: $desc" - echo "================================================================" - - npx tsx src/cli.ts run "$prompt" \ - -n "$agents" \ - -t "$test_cmd" \ - --model "$model" \ - --timeout 300 \ - 2>&1 || echo "[WARN] Run failed — continuing" -} - -# ═══════ A* Python (re-runs with wrapper) ═══════ - -run_task "Python A* #1" \ - "Implement A* pathfinding in examples/astar-python/grid.py. Use Manhattan distance heuristic and a min-heap priority queue." \ - "bash examples/astar-python/run-tests.sh" \ - 5 sonnet - -run_task "Python A* #2 (creative)" \ - "Implement find_path in examples/astar-python/grid.py using any optimal pathfinding algorithm. Optimize for clarity and efficiency." \ - "bash examples/astar-python/run-tests.sh" \ - 5 sonnet - -run_task "Python A* #3 (performance)" \ - "Implement A* in examples/astar-python/grid.py. Focus on performance: efficient data structures, minimize allocations, add heap tiebreaking." \ - "bash examples/astar-python/run-tests.sh" \ - 3 sonnet - -# ═══════ A* TypeScript (re-runs with wrapper) ═══════ - -run_task "TypeScript A* #1" \ - "Implement findPath in examples/astar/src/grid.ts using A* with Manhattan distance heuristic. Use a priority queue." \ - "bash examples/astar/run-tests.sh" \ - 5 sonnet - -run_task "TypeScript A* #2 (creative)" \ - "Implement findPath in examples/astar/src/grid.ts. Use any optimal pathfinding approach. Write clean, idiomatic TypeScript." \ - "bash examples/astar/run-tests.sh" \ - 5 sonnet - -# ═══════ Linear Regression ═══════ - -run_task "Regression #1 (normal equation)" \ - "Implement train_and_predict in examples/ml-regression/model.py using the normal equation (closed-form least squares). Use numpy only, not sklearn." \ - "bash examples/ml-regression/run-tests.sh" \ - 5 sonnet - -run_task "Regression #2 (gradient descent)" \ - "Implement train_and_predict in examples/ml-regression/model.py using batch gradient descent. Do NOT use the normal equation or sklearn. Use numpy only." \ - "bash examples/ml-regression/run-tests.sh" \ - 5 sonnet - -run_task "Regression #3 (creative)" \ - "Implement train_and_predict in examples/ml-regression/model.py. Choose any approach: normal equation, gradient descent, QR decomposition, or SVD. Optimize for numerical stability. Numpy only." \ - "bash examples/ml-regression/run-tests.sh" \ - 3 sonnet - -# ═══════ KNN Classification ═══════ - -run_task "KNN #1 (standard)" \ - "Implement train_and_classify in examples/ml-classification/classifier.py using k-nearest neighbors with Euclidean distance and majority voting. Numpy only, not sklearn." \ - "bash examples/ml-classification/run-tests.sh" \ - 5 sonnet - -run_task "KNN #2 (optimized)" \ - "Implement train_and_classify in examples/ml-classification/classifier.py using KNN with numpy broadcasting for distance computation. Handle ties by smallest label. Numpy only." \ - "bash examples/ml-classification/run-tests.sh" \ - 5 sonnet - -run_task "KNN #3 (creative)" \ - "Implement train_and_classify in examples/ml-classification/classifier.py using any nearest-neighbor variant. Prioritize correctness and clean code. Numpy only, no sklearn." \ - "bash examples/ml-classification/run-tests.sh" \ - 3 sonnet - -# ═══════ Main repo (re-run the ones that needed cd) ═══════ - -run_task "Main repo: improve error messages" \ - "Improve error handling in src/runners/claude-code.ts: when claude CLI is not found (ENOENT), print a helpful message with install link. When agent times out, include timeout duration in error." \ - "npm test" \ - 5 sonnet - -run_task "Main repo: config list" \ - "Add a thinktank config list subcommand that prints all current configuration values from .thinktank/config.json in a readable format. If no config exists, print defaults. Register in src/cli.ts." \ - "npm test" \ - 5 sonnet - -echo "" -echo "================================================================" -echo "ALL V2 RUNS COMPLETE — running evaluate" -echo "================================================================" -npx tsx src/cli.ts evaluate 2>&1 -echo "" -ls .thinktank/run-*.json | wc -l -echo " total run files" diff --git a/scripts/batch-runs-v3.sh b/scripts/batch-runs-v3.sh deleted file mode 100644 index 3dcee69..0000000 --- a/scripts/batch-runs-v3.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -# v3: Re-run A* examples with fixed test_maze assertion -set -e -cd C:/Users/silon/Documents/repos/thinktank - -run_task() { - local desc="$1"; local prompt="$2"; local test_cmd="$3" - local agents="${4:-5}"; local model="${5:-sonnet}" - echo ""; echo "=== RUN: $desc ===" - npx tsx src/cli.ts run "$prompt" -n "$agents" -t "$test_cmd" --model "$model" --timeout 300 2>&1 || echo "[WARN] Run failed" -} - -# Python A* -run_task "Python A* #1" \ - "Implement A* pathfinding in examples/astar-python/grid.py. Use Manhattan distance heuristic and a min-heap priority queue." \ - "bash examples/astar-python/run-tests.sh" 5 sonnet - -run_task "Python A* #2 (creative)" \ - "Implement find_path in examples/astar-python/grid.py using any optimal pathfinding algorithm. Optimize for clarity and efficiency." \ - "bash examples/astar-python/run-tests.sh" 5 sonnet - -# TypeScript A* -run_task "TS A* #1" \ - "Implement findPath in examples/astar/src/grid.ts using A* with Manhattan distance heuristic. Use a priority queue." \ - "bash examples/astar/run-tests.sh" 5 sonnet - -run_task "TS A* #2 (creative)" \ - "Implement findPath in examples/astar/src/grid.ts. Use any optimal pathfinding approach. Write clean, idiomatic TypeScript." \ - "bash examples/astar/run-tests.sh" 5 sonnet - -echo ""; echo "=== V3 COMPLETE ==="; echo "" -ls .thinktank/run-*.json | wc -l; echo " total runs" -npx tsx src/cli.ts evaluate 2>&1 | grep -E "Usable|All three|Weighted|Copeland" diff --git a/scripts/batch-runs.sh b/scripts/batch-runs.sh deleted file mode 100644 index 25b7e94..0000000 --- a/scripts/batch-runs.sh +++ /dev/null @@ -1,99 +0,0 @@ -#!/bin/bash -# Batch thinktank runs for scoring evaluation diversity -# Each run generates scoring data in .thinktank/ -set -e - -REPO="C:/Users/silon/Documents/repos/thinktank" -cd "$REPO" - -run_task() { - local desc="$1" - local prompt="$2" - local test_cmd="$3" - local agents="${4:-5}" - local model="${5:-sonnet}" - - echo "" - echo "================================================================" - echo "RUN: $desc" - echo "Agents: $agents | Model: $model | Test: $test_cmd" - echo "================================================================" - - npx tsx src/cli.ts run "$prompt" \ - -n "$agents" \ - -t "$test_cmd" \ - --model "$model" \ - --timeout 300 \ - 2>&1 || echo "[WARN] Run failed or had errors — continuing" - - echo "--- Completed: $desc ---" -} - -# ═══════════════════════════════════════════════════════════ -# ROUND 1: A* Pathfinding — Python (known good test suite) -# ═══════════════════════════════════════════════════════════ - -run_task "Python A* #1" \ - "Implement A* pathfinding in examples/astar-python/grid.py. Use Manhattan distance heuristic and a min-heap priority queue. The function should return a PathResult with the shortest path and nodes_explored count, or None if unreachable." \ - "cd examples/astar-python && python -m pytest test_pathfinding.py -v" \ - 5 sonnet - -run_task "Python A* #2 (creative freedom)" \ - "Implement the find_path function in examples/astar-python/grid.py using any optimal pathfinding algorithm. You may use A*, Dijkstra, or any approach that finds shortest paths. Optimize for clarity and efficiency." \ - "cd examples/astar-python && python -m pytest test_pathfinding.py -v" \ - 5 sonnet - -run_task "Python A* #3 (performance focus)" \ - "Implement A* pathfinding in examples/astar-python/grid.py. Focus on performance: use efficient data structures, minimize memory allocations, and add heap tiebreaking to reduce explored nodes." \ - "cd examples/astar-python && python -m pytest test_pathfinding.py -v" \ - 3 sonnet - -# ═══════════════════════════════════════════════════════════ -# ROUND 2: A* Pathfinding — TypeScript (different language) -# ═══════════════════════════════════════════════════════════ - -run_task "TypeScript A* #1" \ - "Implement the findPath function in examples/astar/src/grid.ts using A* pathfinding with Manhattan distance heuristic. Use a min-heap or priority queue. Return a PathResult with path and nodesExplored, or null if unreachable." \ - "cd examples/astar && npx tsx --test tests/pathfinding.test.ts" \ - 5 sonnet - -run_task "TypeScript A* #2 (creative freedom)" \ - "Implement findPath in examples/astar/src/grid.ts. Use any optimal pathfinding approach. Prioritize clean, idiomatic TypeScript." \ - "cd examples/astar && npx tsx --test tests/pathfinding.test.ts" \ - 5 sonnet - -# ═══════════════════════════════════════════════════════════ -# ROUND 3: Main repo tasks — varied complexity -# ═══════════════════════════════════════════════════════════ - -run_task "Main repo: add --quiet flag" \ - "Add a --quiet flag to the run command (src/commands/run.ts) that suppresses all output except the final recommended agent line. Wire it through the CLI options in src/cli.ts. Make sure existing tests still pass." \ - "npm test" \ - 5 sonnet - -run_task "Main repo: validate attempts range" \ - "Add input validation to the run command: the --attempts value must be between 1 and 20 inclusive. If out of range, print an actionable error message and exit with code 1. Add a test for this validation." \ - "npm test" \ - 3 sonnet - -run_task "Main repo: improve error messages" \ - "Improve error handling in src/runners/claude-code.ts: when the claude CLI is not found (ENOENT), print a helpful message telling the user to install Claude Code CLI with a link to docs. When the agent times out, include the timeout duration in the error message." \ - "npm test" \ - 5 sonnet - -run_task "Main repo: add run duration to JSON output" \ - "When --output-format json is used, include a totalDuration field (in seconds) in the JSON output that measures the wall-clock time from start to finish of the entire ensemble run. Also include a startTime ISO timestamp." \ - "npm test" \ - 3 sonnet - -run_task "Main repo: config list subcommand" \ - "Add a 'thinktank config list' subcommand that prints all current configuration values (from .thinktank/config.json) in a readable format. If no config exists, print defaults. Register it in src/cli.ts." \ - "npm test" \ - 5 sonnet - -echo "" -echo "================================================================" -echo "ALL RUNS COMPLETE" -echo "================================================================" -echo "" -npx tsx src/cli.ts evaluate 2>&1