From 303f001d118005b23b4a27cd8fb8703b6786fcfa Mon Sep 17 00:00:00 2001 From: Lanh Hoang Date: Mon, 27 Jul 2026 10:25:12 -0400 Subject: [PATCH 1/6] deps: update dependencies --- package.json | 8 +- pnpm-lock.yaml | 218 ++++++++++++++++++++++++------------------------- 2 files changed, 110 insertions(+), 116 deletions(-) diff --git a/package.json b/package.json index f11dcb4..332e0f4 100644 --- a/package.json +++ b/package.json @@ -48,13 +48,13 @@ "README.md" ], "devDependencies": { - "@biomejs/biome": "^2.5.2", - "@earendil-works/pi-coding-agent": "^0.80.3", - "@earendil-works/pi-tui": "^0.80.3", + "@biomejs/biome": "^2.5.5", + "@earendil-works/pi-coding-agent": "^0.82.0", + "@earendil-works/pi-tui": "^0.82.0", "@types/node": "^26.1.0", "typebox": "^1.3.3", "typescript": "^6.0.3", - "vitest": "^4.1.9" + "vitest": "^4.1.10" }, "peerDependencies": { "@earendil-works/pi-coding-agent": "*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 08063d9..8bdbaf8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,14 +9,14 @@ importers: .: devDependencies: '@biomejs/biome': - specifier: ^2.5.2 - version: 2.5.2 + specifier: ^2.5.5 + version: 2.5.5 '@earendil-works/pi-coding-agent': - specifier: ^0.80.3 - version: 0.80.3(ws@8.21.0)(zod@4.4.3) + specifier: ^0.82.0 + version: 0.82.1(ws@8.21.0)(zod@4.4.3) '@earendil-works/pi-tui': - specifier: ^0.80.3 - version: 0.80.3 + specifier: ^0.82.0 + version: 0.82.1 '@types/node': specifier: ^26.1.0 version: 26.1.0 @@ -27,8 +27,8 @@ importers: specifier: ^6.0.3 version: 6.0.3 vitest: - specifier: ^4.1.9 - version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@26.1.0)(vite@8.0.14(@types/node@26.1.0)(jiti@2.7.0)(yaml@2.9.0)) + specifier: ^4.1.10 + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@26.1.0)(vite@8.0.14(@types/node@26.1.0)(jiti@2.7.0)(yaml@2.9.0)) packages: @@ -146,79 +146,79 @@ packages: resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} engines: {node: '>=6.9.0'} - '@biomejs/biome@2.5.2': - resolution: {integrity: sha512-VQ3RCqr7JmDIX+w6stWYl+g/3bYofN3q2wDBHUKKc/c7i5QWrFKFBZYCYPWTE6agsUPMIZZe6/CMmVUfUAhkKA==} + '@biomejs/biome@2.5.5': + resolution: {integrity: sha512-r1S8nFsAG1MY+vJFZALzIvwXAJv6ejDQ0mxP21Tgr9YK3ZFtjrvbBwDdNhx1rUqvccEIeNg20cYCNzl6Cr69pQ==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.5.2': - resolution: {integrity: sha512-e7P3P7EkwFc/KiX2AHw4YDLIBOMfG9CPCAwy52k5Bp0dfhkozx9hf6wCmIr2QeXy2XeccJ3V/Sg+hDmzYEqxSg==} + '@biomejs/cli-darwin-arm64@2.5.5': + resolution: {integrity: sha512-kUrAhXVWUrwmAUnV2iXSK7umxKFysTwvqK+Ty6ptUcLY/7T3SnCAjUowE4uvwaEej6nXZ7hu/dTtbokKdsPeag==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.5.2': - resolution: {integrity: sha512-ymzMvjC1Jg0b9K0D26ZdARqFQXs7MocfLC5FOCGfkC0Ss+ACUJkX5364ZM5nT4NLZanHRZNVrZEy+Ibwcvux/g==} + '@biomejs/cli-darwin-x64@2.5.5': + resolution: {integrity: sha512-DamiYc5bUYZ2uxlfc+RLEPtz1Abb6PO5eTbOkufLpSGwd/7AMQAdxhFYiXmwwkJL8IsT8S7GvdgwDHqaMFAvKw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.5.2': - resolution: {integrity: sha512-w+ANG0ZvTu9IeEg9QnstoOnk6L0fpwJifW6aHR18+cb5Z39bkANItYjAfMrnvce5tmMK+IQ6nPX7/kQFdam5iw==} + '@biomejs/cli-linux-arm64-musl@2.5.5': + resolution: {integrity: sha512-U4WMl/sy/E/Q73vf15VspakLRRs2LDFcCeBxJnQfXzssb88zpV6PJPaQ3ezhQ7H6Ht2/8bvuZeHgJWzmoxllZg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.5.2': - resolution: {integrity: sha512-t7sseOmqND57uUWTwlawU6BYj+J06T/9EkydzBhkrgw/FK3QVhjU2wsJR0frljrKZ0/I8A/rYw7284QgqjQfIQ==} + '@biomejs/cli-linux-arm64@2.5.5': + resolution: {integrity: sha512-lRKF/pH/1RiYiBKExi3TCZVAtvzEm77aifrvcNiDFrR9WxeAnDUjDnseb6y2XV85mjitLs6SILGm2XG77cHtSQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.5.2': - resolution: {integrity: sha512-VArNLAzND063tF+XY0yPyM+DyahpzOMzOAvb7qs259nhjJWRjvjZdssuA+Rfl+l07+NOesKZ0Xu2yFrXyBMtzw==} + '@biomejs/cli-linux-x64-musl@2.5.5': + resolution: {integrity: sha512-m7wC7tjX5Lrmo69dc4md8FeKpPU1NTCY1v7xUoQQ2vadWwNnBS0KZOG8471otFPHrTHihQJAjQPgMObpLvDe6A==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.5.2': - resolution: {integrity: sha512-M/lOZrewzTCRDINbjhQ1gYYru37KlD3kJBQwwKCG0ckz5E9IZwIoJ3X0wBwRXA+yBDIwWUuPBHS67HzJY4dTfA==} + '@biomejs/cli-linux-x64@2.5.5': + resolution: {integrity: sha512-H/O39nJEw/2Zm/fm7hrmxxoF8kK/aU1uCoPp70ruXVbomaAdLpJJnCmL11Q2JotT8QVHH06So04Oq53lCSwSwQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.5.2': - resolution: {integrity: sha512-kbjFFKyZlzYnAuw7sRy5qDoFG6zrP40UK08oPQsWK0ct3NMnGSt+Bs1iviEEyEIP57N5MrykGXdO/wRiaR4lww==} + '@biomejs/cli-win32-arm64@2.5.5': + resolution: {integrity: sha512-7BryINPuYypLUAH3o/o5ZdgomJ4zn3EDR0ChZJst7n32S6ZhKbgHXuYydLu+YAnx59ehGFR0z/MG6qnzQi3Yyw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.5.2': - resolution: {integrity: sha512-4InchVpdVmdkkkgjQqKpgvyu+VPnoF/7RPSw5YATgEVpt2j72wcCAeV5TwaE9ZGJUZWZn7v2CwSAj6CrMJEx8A==} + '@biomejs/cli-win32-x64@2.5.5': + resolution: {integrity: sha512-bIBFo+n6MIxdNcVFy5CrurbKiZQiUciK3bt8+O9I4wjFZNTfXLpi+giq47522eXqW5NBc9ulx7dR1SlZKi2J5g==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] - '@earendil-works/pi-agent-core@0.80.3': - resolution: {integrity: sha512-3qw0/GeRQBU/nlGjDe5Yb7ePKTmoxefx2YxyKMFAviFUMXpFexBG/hS7mBtwFahFvzrrTPPoRT6sFIDjwoDWPQ==} + '@earendil-works/pi-agent-core@0.82.1': + resolution: {integrity: sha512-Z3kloziJIE2dmrisRckZX8zDca/gIv9/YdFAzeoqpHiLV2wsni6bL4hInNSjVKLbqT+4kqLIkph2JQLKvSepjg==} engines: {node: '>=22.19.0'} - '@earendil-works/pi-ai@0.80.3': - resolution: {integrity: sha512-jPZLMeGL5kkMSEAwAklfXTMHqZvfhsJtCCpKGIr5Duk7mc0n4skjB1dugk7y0z3z8ZHIUCmPAWHdyDqgUz5vdA==} + '@earendil-works/pi-ai@0.82.1': + resolution: {integrity: sha512-3WFYRhEp3lQB3444EhPMBcM7zSaEUE3eJgHOR7s4081NLqbw/FsWilIKWXSua0Gv3sRr7m9xMidR3pPDE7jI/A==} engines: {node: '>=22.19.0'} hasBin: true - '@earendil-works/pi-coding-agent@0.80.3': - resolution: {integrity: sha512-TIggw9gCXpA+Ph7OjdTA7ka2NPwTVuPmy39KDSyUzaKq8VvHfMGR7vtRz4JB7Um/RMRblmzhu4p9tUCk6MTgGA==} + '@earendil-works/pi-coding-agent@0.82.1': + resolution: {integrity: sha512-zbkAhoIuDPMF3pKuja0ajZabrMWU29FUMV9A/XMXT/XC1yXs5xt6t6t13GogQFsDrDqbFP4DkZQO1w8rWRAzYA==} engines: {node: '>=22.19.0'} hasBin: true - '@earendil-works/pi-tui@0.80.3': - resolution: {integrity: sha512-2BJI6qwRQfnM0Q7seL1+SbacU/jRRjBnN7Hu3n9BjAn7/s5FaBNnvdD1qBQYRsFTHfjqMaDsjYqanPyqwXj99w==} + '@earendil-works/pi-tui@0.82.1': + resolution: {integrity: sha512-9yN8hALfKaxZq7n54EMxqhFCWnMi6LHkraMJ/1YjHiATq75XrI6XDMVppn9EDtiK7Fks8hUe1SDXUTrIvwRWfQ==} engines: {node: '>=22.19.0'} '@emnapi/core@1.10.0': @@ -524,20 +524,17 @@ packages: '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/node@26.0.0': - resolution: {integrity: sha512-vf2YFi1iY9lHGwNJMs01biZFbKJkrZR1T6/MlzjhJLPdntOHLhTrDSnSVcdtvjihi4VQNlrFRIxLsDBlQpAipA==} - '@types/node@26.1.0': resolution: {integrity: sha512-O0A1G3xPGy4w7AgQdAQYUlQ+BKk2Oovw8eRpofyp5KdBZULnbe+WqaOVNrm705SHphCiG4XHsACrSmPu1f+Kgw==} '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - '@vitest/expect@4.1.9': - resolution: {integrity: sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==} + '@vitest/expect@4.1.10': + resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} - '@vitest/mocker@4.1.9': - resolution: {integrity: sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==} + '@vitest/mocker@4.1.10': + resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -547,20 +544,20 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.9': - resolution: {integrity: sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==} + '@vitest/pretty-format@4.1.10': + resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==} - '@vitest/runner@4.1.9': - resolution: {integrity: sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==} + '@vitest/runner@4.1.10': + resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==} - '@vitest/snapshot@4.1.9': - resolution: {integrity: sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==} + '@vitest/snapshot@4.1.10': + resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==} - '@vitest/spy@4.1.9': - resolution: {integrity: sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==} + '@vitest/spy@4.1.10': + resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==} - '@vitest/utils@4.1.9': - resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==} + '@vitest/utils@4.1.10': + resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} @@ -1036,20 +1033,20 @@ packages: yaml: optional: true - vitest@4.1.9: - resolution: {integrity: sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==} + vitest@4.1.10: + resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.9 - '@vitest/browser-preview': 4.1.9 - '@vitest/browser-webdriverio': 4.1.9 - '@vitest/coverage-istanbul': 4.1.9 - '@vitest/coverage-v8': 4.1.9 - '@vitest/ui': 4.1.9 + '@vitest/browser-playwright': 4.1.10 + '@vitest/browser-preview': 4.1.10 + '@vitest/browser-webdriverio': 4.1.10 + '@vitest/coverage-istanbul': 4.1.10 + '@vitest/coverage-v8': 4.1.10 + '@vitest/ui': 4.1.10 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1353,44 +1350,45 @@ snapshots: '@babel/runtime@7.29.7': {} - '@biomejs/biome@2.5.2': + '@biomejs/biome@2.5.5': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.5.2 - '@biomejs/cli-darwin-x64': 2.5.2 - '@biomejs/cli-linux-arm64': 2.5.2 - '@biomejs/cli-linux-arm64-musl': 2.5.2 - '@biomejs/cli-linux-x64': 2.5.2 - '@biomejs/cli-linux-x64-musl': 2.5.2 - '@biomejs/cli-win32-arm64': 2.5.2 - '@biomejs/cli-win32-x64': 2.5.2 - - '@biomejs/cli-darwin-arm64@2.5.2': + '@biomejs/cli-darwin-arm64': 2.5.5 + '@biomejs/cli-darwin-x64': 2.5.5 + '@biomejs/cli-linux-arm64': 2.5.5 + '@biomejs/cli-linux-arm64-musl': 2.5.5 + '@biomejs/cli-linux-x64': 2.5.5 + '@biomejs/cli-linux-x64-musl': 2.5.5 + '@biomejs/cli-win32-arm64': 2.5.5 + '@biomejs/cli-win32-x64': 2.5.5 + + '@biomejs/cli-darwin-arm64@2.5.5': optional: true - '@biomejs/cli-darwin-x64@2.5.2': + '@biomejs/cli-darwin-x64@2.5.5': optional: true - '@biomejs/cli-linux-arm64-musl@2.5.2': + '@biomejs/cli-linux-arm64-musl@2.5.5': optional: true - '@biomejs/cli-linux-arm64@2.5.2': + '@biomejs/cli-linux-arm64@2.5.5': optional: true - '@biomejs/cli-linux-x64-musl@2.5.2': + '@biomejs/cli-linux-x64-musl@2.5.5': optional: true - '@biomejs/cli-linux-x64@2.5.2': + '@biomejs/cli-linux-x64@2.5.5': optional: true - '@biomejs/cli-win32-arm64@2.5.2': + '@biomejs/cli-win32-arm64@2.5.5': optional: true - '@biomejs/cli-win32-x64@2.5.2': + '@biomejs/cli-win32-x64@2.5.5': optional: true - '@earendil-works/pi-agent-core@0.80.3(ws@8.21.0)(zod@4.4.3)': + '@earendil-works/pi-agent-core@0.82.1(ws@8.21.0)(zod@4.4.3)': dependencies: - '@earendil-works/pi-ai': 0.80.3(ws@8.21.0)(zod@4.4.3) + '@earendil-works/pi-ai': 0.82.1(ws@8.21.0)(zod@4.4.3) + diff: 8.0.4 ignore: 7.0.5 typebox: 1.1.38 yaml: 2.9.0 @@ -1402,7 +1400,7 @@ snapshots: - ws - zod - '@earendil-works/pi-ai@0.80.3(ws@8.21.0)(zod@4.4.3)': + '@earendil-works/pi-ai@0.82.1(ws@8.21.0)(zod@4.4.3)': dependencies: '@anthropic-ai/sdk': 0.91.1(zod@4.4.3) '@aws-sdk/client-bedrock-runtime': 3.1048.0 @@ -1423,11 +1421,11 @@ snapshots: - ws - zod - '@earendil-works/pi-coding-agent@0.80.3(ws@8.21.0)(zod@4.4.3)': + '@earendil-works/pi-coding-agent@0.82.1(ws@8.21.0)(zod@4.4.3)': dependencies: - '@earendil-works/pi-agent-core': 0.80.3(ws@8.21.0)(zod@4.4.3) - '@earendil-works/pi-ai': 0.80.3(ws@8.21.0)(zod@4.4.3) - '@earendil-works/pi-tui': 0.80.3 + '@earendil-works/pi-agent-core': 0.82.1(ws@8.21.0)(zod@4.4.3) + '@earendil-works/pi-ai': 0.82.1(ws@8.21.0)(zod@4.4.3) + '@earendil-works/pi-tui': 0.82.1 '@silvia-odwyer/photon-node': 0.3.4 chalk: 5.6.2 cross-spawn: 7.0.6 @@ -1453,7 +1451,7 @@ snapshots: - ws - zod - '@earendil-works/pi-tui@0.80.3': + '@earendil-works/pi-tui@0.82.1': dependencies: get-east-asian-width: 1.6.0 marked: 18.0.5 @@ -1703,54 +1701,50 @@ snapshots: '@types/estree@1.0.9': {} - '@types/node@26.0.0': - dependencies: - undici-types: 8.3.0 - '@types/node@26.1.0': dependencies: undici-types: 8.3.0 '@types/retry@0.12.0': {} - '@vitest/expect@4.1.9': + '@vitest/expect@4.1.10': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.9 - '@vitest/utils': 4.1.9 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.9(vite@8.0.14(@types/node@26.1.0)(jiti@2.7.0)(yaml@2.9.0))': + '@vitest/mocker@4.1.10(vite@8.0.14(@types/node@26.1.0)(jiti@2.7.0)(yaml@2.9.0))': dependencies: - '@vitest/spy': 4.1.9 + '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: vite: 8.0.14(@types/node@26.1.0)(jiti@2.7.0)(yaml@2.9.0) - '@vitest/pretty-format@4.1.9': + '@vitest/pretty-format@4.1.10': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.9': + '@vitest/runner@4.1.10': dependencies: - '@vitest/utils': 4.1.9 + '@vitest/utils': 4.1.10 pathe: 2.0.3 - '@vitest/snapshot@4.1.9': + '@vitest/snapshot@4.1.10': dependencies: - '@vitest/pretty-format': 4.1.9 - '@vitest/utils': 4.1.9 + '@vitest/pretty-format': 4.1.10 + '@vitest/utils': 4.1.10 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.9': {} + '@vitest/spy@4.1.10': {} - '@vitest/utils@4.1.9': + '@vitest/utils@4.1.10': dependencies: - '@vitest/pretty-format': 4.1.9 + '@vitest/pretty-format': 4.1.10 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 @@ -2051,7 +2045,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.1 - '@types/node': 26.0.0 + '@types/node': 26.1.0 long: 5.3.2 retry@0.12.0: {} @@ -2139,15 +2133,15 @@ snapshots: jiti: 2.7.0 yaml: 2.9.0 - vitest@4.1.9(@opentelemetry/api@1.9.0)(@types/node@26.1.0)(vite@8.0.14(@types/node@26.1.0)(jiti@2.7.0)(yaml@2.9.0)): + vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@26.1.0)(vite@8.0.14(@types/node@26.1.0)(jiti@2.7.0)(yaml@2.9.0)): dependencies: - '@vitest/expect': 4.1.9 - '@vitest/mocker': 4.1.9(vite@8.0.14(@types/node@26.1.0)(jiti@2.7.0)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.9 - '@vitest/runner': 4.1.9 - '@vitest/snapshot': 4.1.9 - '@vitest/spy': 4.1.9 - '@vitest/utils': 4.1.9 + '@vitest/expect': 4.1.10 + '@vitest/mocker': 4.1.10(vite@8.0.14(@types/node@26.1.0)(jiti@2.7.0)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/snapshot': 4.1.10 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 From d1525911d1d11a11a73d199608bad014e92fc568 Mon Sep 17 00:00:00 2001 From: Lanh Hoang Date: Mon, 27 Jul 2026 10:25:32 -0400 Subject: [PATCH 2/6] chore: upgrade biome schema to version 2.5.5 --- biome.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/biome.json b/biome.json index 2b9db4d..dc4ef09 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.5.2/schema.json", + "$schema": "https://biomejs.dev/schemas/2.5.5/schema.json", "vcs": { "enabled": true, "clientKind": "git", From e170b3ab887c106577dc58d8079251d929378e3b Mon Sep 17 00:00:00 2001 From: Lanh Hoang Date: Mon, 27 Jul 2026 10:28:09 -0400 Subject: [PATCH 3/6] chore: disable noNonNullAssertion rule for test files in biome config --- biome.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/biome.json b/biome.json index dc4ef09..2c7e084 100644 --- a/biome.json +++ b/biome.json @@ -34,5 +34,17 @@ "organizeImports": "on" } } - } + }, + "overrides": [ + { + "includes": ["tests/**/*.ts"], + "linter": { + "rules": { + "style": { + "noNonNullAssertion": "off" + } + } + } + } + ] } From 47d855233583cc08b5bf2cb0ee71d40b73a97840 Mon Sep 17 00:00:00 2001 From: Lanh Hoang Date: Mon, 27 Jul 2026 12:28:02 -0400 Subject: [PATCH 4/6] docs: update plan to pin direct Pi dependencies to 0.82.0 and restore environment baseline --- ...compact-insights-phase-1-pi-082-upgrade.md | 174 +++++++++++++----- 1 file changed, 130 insertions(+), 44 deletions(-) diff --git a/docs/superpowers/plans/2026-07-27-stepfun-credits-compact-insights-phase-1-pi-082-upgrade.md b/docs/superpowers/plans/2026-07-27-stepfun-credits-compact-insights-phase-1-pi-082-upgrade.md index ec7b503..7e78954 100644 --- a/docs/superpowers/plans/2026-07-27-stepfun-credits-compact-insights-phase-1-pi-082-upgrade.md +++ b/docs/superpowers/plans/2026-07-27-stepfun-credits-compact-insights-phase-1-pi-082-upgrade.md @@ -1,107 +1,193 @@ -# Phase 1: Pi 0.82.0 Upgrade Implementation Plan +# Phase 1: Pi 0.82 Compatibility and Toolchain Cleanup Implementation Plan > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. -**Parent plan:** `docs/superpowers/plans/2026-07-27-stepfun-credits-compact-insights-refactor.md` +**Goal:** Complete the Pi 0.82 dependency baseline by making the existing Biome 2.5.5 and Vitest 4.1.10 upgrades pass the project quality gate without changing application behavior. + +**Architecture:** Keep the current dependency metadata: `@earendil-works/pi-coding-agent` and `@earendil-works/pi-tui` remain declared as `^0.82.0` and resolve to 0.82.1 in the lockfile. Apply only behavior-preserving lint fixes in the overlay width calculation and runtime utility tests, and remove the unused test-only lint override. -**Goal:** Upgrade the project to `@earendil-works/pi-coding-agent` 0.82.0 and `@earendil-works/pi-tui` 0.82.0 without changing application behavior. +**Tech Stack:** pnpm, TypeScript 6, Node.js 24.15.0, Pi 0.82.x, Vitest 4.1.10, Biome 2.5.5. -**Architecture:** This phase changes only dependency metadata. It establishes the exact Pi API baseline used by all later provider and TUI phases. +--- -**Tech Stack:** pnpm, TypeScript 6, Node.js 24, Pi 0.82.0. +**Parent plan:** `docs/superpowers/plans/2026-07-27-stepfun-credits-compact-insights-refactor.md` -**Phase dependency:** The parent design specification must be approved before execution. +**Current baseline:** The branch already contains the Pi, Biome, and Vitest dependency upgrades. Direct Pi packages report 0.82.1 from the `^0.82.0` ranges; typecheck and all 247 tests pass. The remaining blocker is Biome’s one warning and two errors. -**Usable result:** The unchanged extension installs, typechecks, and passes its existing test suite against Pi 0.82.0. This phase can be released independently as a dependency-only maintenance update. +**Usable result:** The unchanged extension passes `pnpm check` under Node 24.15.0. This phase remains independent of StepFun behavior, Insights behavior, and all later feature work. -**Out of scope:** StepFun behavior, Insights behavior, README content, screenshots, and unrelated dependency updates. +**Out of scope:** Dependency version changes, public API changes, StepFun behavior, Insights behavior, README content, screenshots, and unrelated refactoring. --- -### Task 1: Pin the Pi packages to the 0.82 line +### Task 1: Resolve the Biome 2.5.5 diagnostics **Files:** -- Modify: `package.json` -- Modify: `pnpm-lock.yaml` +- Modify: `biome.json` +- Modify: `src/tui/overlay-render.ts` +- Modify: `tests/runtime-utilities.test.ts` -- [ ] **Step 1: Record the current dependency state** +- [ ] **Step 1: Reproduce the current quality-gate failure** Run: ```sh -pnpm list @earendil-works/pi-coding-agent @earendil-works/pi-tui --depth 0 +mise exec node@24.15.0 -- pnpm check ``` -Expected before the change: both packages report `0.80.3`. +Expected before the edits: Biome reports the non-null assertion at `src/tui/overlay-render.ts:113` and unsafe optional chaining at `tests/runtime-utilities.test.ts:23` and `tests/runtime-utilities.test.ts:38`; TypeScript and Vitest are not reached by the combined command. -- [ ] **Step 2: Update both Pi development dependencies** +- [ ] **Step 2: Remove the unused test-only lint override** -Run: +Replace `biome.json` with: -```sh -pnpm add -D '@earendil-works/pi-coding-agent@0.82.0' '@earendil-works/pi-tui@0.82.0' +```json +{ + "$schema": "https://biomejs.dev/schemas/2.5.5/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "ignoreUnknown": false, + "includes": ["src/**/*.ts", "tests/**/*.ts", "!**/node_modules"] + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2, + "lineWidth": 100 + }, + "linter": { + "enabled": true, + "rules": { + "preset": "recommended" + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double", + "semicolons": "always" + } + }, + "assist": { + "enabled": true, + "actions": { + "source": { + "organizeImports": "on" + } + } + } +} ``` -Expected: `package.json` contains: +The override is unnecessary because the test suite contains no non-null assertions; keep Biome’s recommended rules enabled for all project files. -```json -"@earendil-works/pi-coding-agent": "^0.82.0", -"@earendil-works/pi-tui": "^0.82.0" +- [ ] **Step 3: Replace the overlay width assertion with a bounds-safe reduction** + +In `src/tui/overlay-render.ts`, replace: + +```ts +let total = 0; +for (let i = s; i < e; i += 1) total += widths[i]!; +``` + +with: + +```ts +let total = widths.slice(s, e).reduce((sum, width) => sum + width, 0); +``` + +Leave the gap, indicator, and return calculations unchanged. The existing callers pass tab-derived bounds, so the reduction preserves the rendered width while removing the assertion. + +- [ ] **Step 4: Narrow the mocked fetch signals in the timeout tests** + +In the `"aborts after timeout expires"` test, replace the callback body with: + +```ts +deps.fetch = vi.fn(async (_url, init) => { + const signal = init?.signal; + if (!signal) throw new Error("fetch signal missing"); + await new Promise((_, reject) => { + signal.addEventListener("abort", () => + reject(new DOMException("aborted", "AbortError")), + ); + }); + return new Response(); +}); +``` + +In the `"respects external signal"` test, replace the callback with: + +```ts +deps.fetch = vi.fn(async (_url, init) => { + const signal = init?.signal; + if (!signal) throw new Error("fetch signal missing"); + signal.throwIfAborted(); + return new Response(); +}); ``` -Expected: the importer and package snapshots in `pnpm-lock.yaml` resolve both packages to exactly `0.82.0`. +The explicit guard preserves the test’s expectation that `fetchWithTimeout` supplies an abort signal and removes unsafe optional chaining. -- [ ] **Step 3: Verify only intended dependency metadata changed** +- [ ] **Step 5: Run the focused regression tests** Run: ```sh -git diff -- package.json pnpm-lock.yaml +mise exec node@24.15.0 -- pnpm test -- tests/overlay-render.test.ts tests/runtime-utilities.test.ts ``` -Expected: the two Pi package specifications and their transitive lockfile entries change; no unrelated direct dependency changes appear. +Expected: all tests in both files pass. -- [ ] **Step 4: Verify the installed versions** +- [ ] **Step 6: Run Biome against the changed files** Run: ```sh -pnpm list @earendil-works/pi-coding-agent @earendil-works/pi-tui --depth 0 +mise exec node@24.15.0 -- pnpm exec biome lint biome.json src/tui/overlay-render.ts tests/runtime-utilities.test.ts ``` -Expected: both direct dependencies report `0.82.0`. +Expected: no errors, warnings, or fixes requested. -- [ ] **Step 5: Verify the existing code against Pi 0.82.0** +- [ ] **Step 7: Commit the lint compatibility fixes** Run: ```sh -pnpm typecheck -pnpm test +git add biome.json src/tui/overlay-render.ts tests/runtime-utilities.test.ts +git commit -m "fix: satisfy Biome 2.5.5 lint rules" ``` -Expected: both commands PASS with no TypeScript diagnostics or failed tests. Do not add compatibility shims unless the typecheck exposes a concrete 0.82.0 API change. +Expected: the commit contains only the lint configuration cleanup and the behavior-preserving source/test edits. + +### Phase verification -- [ ] **Step 6: Commit the atomic upgrade** +- [ ] **Step 1: Run the complete quality gate** + +Run: ```sh -git add package.json pnpm-lock.yaml -git commit -m "chore: update Pi dependencies to 0.82.0" +mise exec node@24.15.0 -- pnpm check ``` ---- +Expected: Biome lint, TypeScript typecheck, and all 247 Vitest tests pass. -### Phase verification +- [ ] **Step 2: Confirm the dependency baseline was not changed** -- [ ] Run the project quality gate: +Run: ```sh -pnpm check +mise exec node@24.15.0 -- pnpm list @earendil-works/pi-coding-agent @earendil-works/pi-tui --depth 0 +git diff HEAD^ -- package.json pnpm-lock.yaml ``` -Expected: Biome lint, TypeScript typecheck, and Vitest all PASS. +Expected: both direct Pi packages report 0.82.1; the lint-fix commit contains no dependency metadata changes. + +- [ ] **Step 3: Verify the final worktree** -- [ ] Verify the phase diff and commit: +Run: ```sh git status --short @@ -109,6 +195,6 @@ git diff --check git log -1 --oneline ``` -Expected: no uncommitted Phase 1 files, no whitespace errors, and the latest commit is `chore: update Pi dependencies to 0.82.0`. +Expected: no uncommitted files, no whitespace errors, and the latest commit is `fix: satisfy Biome 2.5.5 lint rules`. -**Stop here.** Phase 2 starts from this passing Pi 0.82.0 baseline. \ No newline at end of file +**Stop here.** Phase 2 starts from this passing Pi 0.82.x and toolchain baseline. From 73b4f69b40fd499b46bf5fa68d88e7c719f03852 Mon Sep 17 00:00:00 2001 From: Lanh Hoang Date: Mon, 27 Jul 2026 13:29:10 -0400 Subject: [PATCH 5/6] fix: satisfy Biome 2.5.5 lint rules --- biome.json | 14 +------------- src/tui/overlay-render.ts | 3 +-- tests/runtime-utilities.test.ts | 8 ++++++-- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/biome.json b/biome.json index 2c7e084..dc4ef09 100644 --- a/biome.json +++ b/biome.json @@ -34,17 +34,5 @@ "organizeImports": "on" } } - }, - "overrides": [ - { - "includes": ["tests/**/*.ts"], - "linter": { - "rules": { - "style": { - "noNonNullAssertion": "off" - } - } - } - } - ] + } } diff --git a/src/tui/overlay-render.ts b/src/tui/overlay-render.ts index bf9f92e..129b95e 100644 --- a/src/tui/overlay-render.ts +++ b/src/tui/overlay-render.ts @@ -109,8 +109,7 @@ export function renderTabBar( const widths = tabs.map((tab) => visibleWidth(tab.label) + 2); // " label " const sliceWidth = (s: number, e: number): number => { - let total = 0; - for (let i = s; i < e; i += 1) total += widths[i]!; + let total = widths.slice(s, e).reduce((sum, width) => sum + width, 0); total += Math.max(0, e - s - 1); // single-space gaps total += s > 0 ? 2 : 0; // "‹ " total += e < tabs.length ? 2 : 0; // " ›" diff --git a/tests/runtime-utilities.test.ts b/tests/runtime-utilities.test.ts index 14ca4dc..b5c7484 100644 --- a/tests/runtime-utilities.test.ts +++ b/tests/runtime-utilities.test.ts @@ -19,8 +19,10 @@ describe("fetchWithTimeout", () => { it("aborts after timeout expires", async () => { const deps = createDefaultDeps(); deps.fetch = vi.fn(async (_url, init) => { + const signal = init?.signal; + if (!signal) throw new Error("fetch signal missing"); await new Promise((_, reject) => { - (init?.signal as AbortSignal).addEventListener("abort", () => + signal.addEventListener("abort", () => reject(new DOMException("aborted", "AbortError")), ); }); @@ -35,7 +37,9 @@ describe("fetchWithTimeout", () => { const deps = createDefaultDeps(); const external = AbortSignal.abort(); deps.fetch = vi.fn(async (_url, init) => { - (init?.signal as AbortSignal).throwIfAborted(); + const signal = init?.signal; + if (!signal) throw new Error("fetch signal missing"); + signal.throwIfAborted(); return new Response(); }); await expect( From afcb80adec87621ecd3c3f6696bff9cd8282302a Mon Sep 17 00:00:00 2001 From: Lanh Hoang Date: Mon, 27 Jul 2026 14:00:32 -0400 Subject: [PATCH 6/6] test: tighten Phase 1 verification --- ...stepfun-credits-compact-insights-phase-1-pi-082-upgrade.md | 2 +- tests/runtime-utilities.test.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/superpowers/plans/2026-07-27-stepfun-credits-compact-insights-phase-1-pi-082-upgrade.md b/docs/superpowers/plans/2026-07-27-stepfun-credits-compact-insights-phase-1-pi-082-upgrade.md index 7e78954..e953e5a 100644 --- a/docs/superpowers/plans/2026-07-27-stepfun-credits-compact-insights-phase-1-pi-082-upgrade.md +++ b/docs/superpowers/plans/2026-07-27-stepfun-credits-compact-insights-phase-1-pi-082-upgrade.md @@ -136,7 +136,7 @@ The explicit guard preserves the test’s expectation that `fetchWithTimeout` su Run: ```sh -mise exec node@24.15.0 -- pnpm test -- tests/overlay-render.test.ts tests/runtime-utilities.test.ts +mise exec node@24.15.0 -- pnpm exec vitest run tests/overlay-render.test.ts tests/runtime-utilities.test.ts ``` Expected: all tests in both files pass. diff --git a/tests/runtime-utilities.test.ts b/tests/runtime-utilities.test.ts index b5c7484..afba86f 100644 --- a/tests/runtime-utilities.test.ts +++ b/tests/runtime-utilities.test.ts @@ -30,7 +30,7 @@ describe("fetchWithTimeout", () => { }); await expect( fetchWithTimeout(deps, "https://example.com/slow", {}, 10), - ).rejects.toThrow(); + ).rejects.toMatchObject({ name: "AbortError" }); }); it("respects external signal", async () => { @@ -44,7 +44,7 @@ describe("fetchWithTimeout", () => { }); await expect( fetchWithTimeout(deps, "https://example.com", { signal: external }), - ).rejects.toThrow(); + ).rejects.toMatchObject({ name: "AbortError" }); }); it("cleans up timer on success", async () => {