chore: update deps and extend read tool tests

This commit is contained in:
Peter Steinberger
2026-01-02 23:47:28 +01:00
parent fc54e905c0
commit 88ed58b3d0
4 changed files with 260 additions and 163 deletions

View File

@@ -5,6 +5,8 @@
### Fixed ### Fixed
- Media: preserve GIF animation when uploading to Discord/other providers (skip JPEG optimization for image/gif). - Media: preserve GIF animation when uploading to Discord/other providers (skip JPEG optimization for image/gif).
- Agent runtime: update pi-mono dependencies to 0.31.1 (agent-core split). - Agent runtime: update pi-mono dependencies to 0.31.1 (agent-core split).
- Dependencies: bump to latest compatible versions (TypeBox, grammY, Zod, Rolldown, oxlint-tsgolint).
- Tests: cover read tool image metadata + text output.
### Breaking ### Breaking
- Skills config schema moved under `skills.*`: - Skills config schema moved under `skills.*`:

View File

@@ -69,13 +69,13 @@
}, },
"packageManager": "pnpm@10.23.0", "packageManager": "pnpm@10.23.0",
"dependencies": { "dependencies": {
"@grammyjs/transformer-throttler": "^1.2.1",
"@clack/prompts": "^0.11.0", "@clack/prompts": "^0.11.0",
"@grammyjs/transformer-throttler": "^1.2.1",
"@homebridge/ciao": "^1.3.4", "@homebridge/ciao": "^1.3.4",
"@mariozechner/pi-agent-core": "^0.31.1", "@mariozechner/pi-agent-core": "^0.31.1",
"@mariozechner/pi-ai": "^0.31.1", "@mariozechner/pi-ai": "^0.31.1",
"@mariozechner/pi-coding-agent": "^0.31.1", "@mariozechner/pi-coding-agent": "^0.31.1",
"@sinclair/typebox": "^0.34.45", "@sinclair/typebox": "0.34.46",
"@whiskeysockets/baileys": "7.0.0-rc.9", "@whiskeysockets/baileys": "7.0.0-rc.9",
"ajv": "^8.17.1", "ajv": "^8.17.1",
"body-parser": "^2.2.1", "body-parser": "^2.2.1",
@@ -89,7 +89,7 @@
"dotenv": "^17.2.3", "dotenv": "^17.2.3",
"express": "^5.2.1", "express": "^5.2.1",
"file-type": "^21.2.0", "file-type": "^21.2.0",
"grammy": "^1.38.4", "grammy": "^1.39.2",
"json5": "^2.2.3", "json5": "^2.2.3",
"long": "5.3.2", "long": "5.3.2",
"playwright-core": "1.57.0", "playwright-core": "1.57.0",
@@ -98,7 +98,7 @@
"tslog": "^4.10.2", "tslog": "^4.10.2",
"undici": "^7.16.0", "undici": "^7.16.0",
"ws": "^8.18.3", "ws": "^8.18.3",
"zod": "^4.2.1" "zod": "^4.3.4"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "^2.3.10", "@biomejs/biome": "^2.3.10",
@@ -119,9 +119,9 @@
"markdown-it": "^14.1.0", "markdown-it": "^14.1.0",
"ollama": "^0.6.3", "ollama": "^0.6.3",
"oxlint": "^1.36.0", "oxlint": "^1.36.0",
"oxlint-tsgolint": "^0.10.0", "oxlint-tsgolint": "^0.10.1",
"quicktype-core": "^23.2.6", "quicktype-core": "^23.2.6",
"rolldown": "1.0.0-beta.57", "rolldown": "1.0.0-beta.58",
"signal-utils": "^0.21.1", "signal-utils": "^0.21.1",
"tsx": "^4.21.0", "tsx": "^4.21.0",
"typescript": "^5.9.3", "typescript": "^5.9.3",
@@ -130,7 +130,7 @@
}, },
"pnpm": { "pnpm": {
"overrides": { "overrides": {
"@sinclair/typebox": "0.34.45" "@sinclair/typebox": "0.34.46"
}, },
"patchedDependencies": { "patchedDependencies": {
"@mariozechner/pi-ai": "patches/@mariozechner__pi-ai.patch", "@mariozechner/pi-ai": "patches/@mariozechner__pi-ai.patch",

331
pnpm-lock.yaml generated
View File

@@ -24,22 +24,22 @@ importers:
version: 0.11.0 version: 0.11.0
'@grammyjs/transformer-throttler': '@grammyjs/transformer-throttler':
specifier: ^1.2.1 specifier: ^1.2.1
version: 1.2.1(grammy@1.38.4) version: 1.2.1(grammy@1.39.2)
'@homebridge/ciao': '@homebridge/ciao':
specifier: ^1.3.4 specifier: ^1.3.4
version: 1.3.4 version: 1.3.4
'@mariozechner/pi-agent-core': '@mariozechner/pi-agent-core':
specifier: ^0.31.1 specifier: ^0.31.1
version: 0.31.1(ws@8.18.3)(zod@4.2.1) version: 0.31.1(ws@8.18.3)(zod@4.3.4)
'@mariozechner/pi-ai': '@mariozechner/pi-ai':
specifier: ^0.31.1 specifier: ^0.31.1
version: 0.31.1(patch_hash=bf3e904ebaad236b8c3bb48c7d1150a1463735e783acaab6d15d6cd381b43832)(ws@8.18.3)(zod@4.2.1) version: 0.31.1(patch_hash=bf3e904ebaad236b8c3bb48c7d1150a1463735e783acaab6d15d6cd381b43832)(ws@8.18.3)(zod@4.3.4)
'@mariozechner/pi-coding-agent': '@mariozechner/pi-coding-agent':
specifier: ^0.31.1 specifier: ^0.31.1
version: 0.31.1(patch_hash=d0d5ffa1bfda8a0f9d14a5e73a074014346d3edbdb2ffc91444d3be5119f5745)(ws@8.18.3)(zod@4.2.1) version: 0.31.1(patch_hash=d0d5ffa1bfda8a0f9d14a5e73a074014346d3edbdb2ffc91444d3be5119f5745)(ws@8.18.3)(zod@4.3.4)
'@sinclair/typebox': '@sinclair/typebox':
specifier: 0.34.45 specifier: 0.34.46
version: 0.34.45 version: 0.34.46
'@whiskeysockets/baileys': '@whiskeysockets/baileys':
specifier: 7.0.0-rc.9 specifier: 7.0.0-rc.9
version: 7.0.0-rc.9(audio-decode@2.2.3)(sharp@0.34.5) version: 7.0.0-rc.9(audio-decode@2.2.3)(sharp@0.34.5)
@@ -80,8 +80,8 @@ importers:
specifier: ^21.2.0 specifier: ^21.2.0
version: 21.2.0 version: 21.2.0
grammy: grammy:
specifier: ^1.38.4 specifier: ^1.39.2
version: 1.38.4 version: 1.39.2
json5: json5:
specifier: ^2.2.3 specifier: ^2.2.3
version: 2.2.3 version: 2.2.3
@@ -107,8 +107,8 @@ importers:
specifier: ^8.18.3 specifier: ^8.18.3
version: 8.18.3 version: 8.18.3
zod: zod:
specifier: ^4.2.1 specifier: ^4.3.4
version: 4.2.1 version: 4.3.4
devDependencies: devDependencies:
'@biomejs/biome': '@biomejs/biome':
specifier: ^2.3.10 specifier: ^2.3.10
@@ -163,16 +163,16 @@ importers:
version: 0.6.3 version: 0.6.3
oxlint: oxlint:
specifier: ^1.36.0 specifier: ^1.36.0
version: 1.36.0(oxlint-tsgolint@0.10.0) version: 1.36.0(oxlint-tsgolint@0.10.1)
oxlint-tsgolint: oxlint-tsgolint:
specifier: ^0.10.0 specifier: ^0.10.1
version: 0.10.0 version: 0.10.1
quicktype-core: quicktype-core:
specifier: ^23.2.6 specifier: ^23.2.6
version: 23.2.6 version: 23.2.6
rolldown: rolldown:
specifier: 1.0.0-beta.57 specifier: 1.0.0-beta.58
version: 1.0.0-beta.57 version: 1.0.0-beta.58
signal-utils: signal-utils:
specifier: ^0.21.1 specifier: ^0.21.1
version: 0.21.1(signal-polyfill@0.2.2) version: 0.21.1(signal-polyfill@0.2.2)
@@ -304,9 +304,6 @@ packages:
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@borewit/text-codec@0.1.1':
resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==}
'@borewit/text-codec@0.2.1': '@borewit/text-codec@0.2.1':
resolution: {integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==} resolution: {integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==}
@@ -540,8 +537,8 @@ packages:
peerDependencies: peerDependencies:
grammy: ^1.0.0 grammy: ^1.0.0
'@grammyjs/types@3.22.2': '@grammyjs/types@3.23.0':
resolution: {integrity: sha512-uu7DX2ezhnBPozL3bXHmwhLvaFsh59E4QyviNH4Cij7EdVekYrs6mCzeXsa2pDk30l3uXo7DBahlZLzTPtpYZg==} resolution: {integrity: sha512-D3jQ4UWERPsyR3op/YFudMMIPNTU47vy7L51uO9/73tMELmjO/+LX5N36/Y0CG5IQfIsz43MxiHI5rgsK0/k+g==}
'@hapi/boom@9.1.4': '@hapi/boom@9.1.4':
resolution: {integrity: sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==} resolution: {integrity: sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==}
@@ -781,33 +778,36 @@ packages:
'@oxc-project/types@0.103.0': '@oxc-project/types@0.103.0':
resolution: {integrity: sha512-bkiYX5kaXWwUessFRSoXFkGIQTmc6dLGdxuRTrC+h8PSnIdZyuXHHlLAeTmOue5Br/a0/a7dHH0Gca6eXn9MKg==} resolution: {integrity: sha512-bkiYX5kaXWwUessFRSoXFkGIQTmc6dLGdxuRTrC+h8PSnIdZyuXHHlLAeTmOue5Br/a0/a7dHH0Gca6eXn9MKg==}
'@oxlint-tsgolint/darwin-arm64@0.10.0': '@oxc-project/types@0.106.0':
resolution: {integrity: sha512-mhBF/pjey0UdLL1ocU46Fqta+uJuRfqrLfDpcViRg17BtDiUNd8JY9iN2FOoS2HGSCAgCUjZ0AZkwkHwFs/VTw==} resolution: {integrity: sha512-QdsH3rZq480VnOHSHgPYOhjL8O8LBdcnSjM408BpPCCUc0JYYZPG9Gafl9i3OcGk/7137o+gweb4cCv3WAUykg==}
'@oxlint-tsgolint/darwin-arm64@0.10.1':
resolution: {integrity: sha512-KGC4++BeEqrIcmDHiJt/e6/860PWJmUJjjp0mE+smpBmRXMjmOFFjrPmN+ZyCyVgf1WdmhPkQXsRSPeTR+2omw==}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@oxlint-tsgolint/darwin-x64@0.10.0': '@oxlint-tsgolint/darwin-x64@0.10.1':
resolution: {integrity: sha512-roLi34mw/i1z+NS7luboix55SXyhVv38dNUTcRDkk+0lNPzI9ngrM+1y1N2oBSUmz5o9OZGnfJJ7BSGCw/fFEQ==} resolution: {integrity: sha512-tvmrDgj3Q0tdc+zMWfCVLVq8EQDEUqasm1zaWgSMYIszpID6qdgqbT+OpWWXV9fLZgtvrkoXGwxkHAUJzdVZXQ==}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@oxlint-tsgolint/linux-arm64@0.10.0': '@oxlint-tsgolint/linux-arm64@0.10.1':
resolution: {integrity: sha512-HL9NThPH1V2F6l9XhwNmhQZUknN4m4yQYEvQFFGfZTYN6cvEEBIiqfF4KvBUg8c0xadMbQlW+Ug7/ybA9Nn+CA==} resolution: {integrity: sha512-7kD28z6/ykGx8WetKTPRZt30pd+ziassxg/8cM24lhjUI+hNXyRHVtHes73dh9D6glJKno+1ut+3amUdZBZcpQ==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@oxlint-tsgolint/linux-x64@0.10.0': '@oxlint-tsgolint/linux-x64@0.10.1':
resolution: {integrity: sha512-Tw8QNq8ab+4+qE5krvJyMA66v6XE3GoiISRD5WmJ7YOxUnu//jSw/bBm7OYf/TNEZyeV0BTR7zXzhT5R+VFWlQ==} resolution: {integrity: sha512-NmJmiqdzYUTHIxteSTyX6IFFgnIsOAjRWXfrS6Jbo5xlB3g39WHniSF3asB/khLJNtwSg4InUS34NprYM7zrEw==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@oxlint-tsgolint/win32-arm64@0.10.0': '@oxlint-tsgolint/win32-arm64@0.10.1':
resolution: {integrity: sha512-LTogmTRwpwQqVaH1Ama8Wd5/VVZWBSF8v5qTbeT628+1F5Kt1V5eHBvyFh4oN18UCZlgqrh7DqkDhsieXUaC8Q==} resolution: {integrity: sha512-3KrT80vl3nXUkjuJI/z8dF6xWsKx0t9Tz4ZQHgQw3fYw+CoihBRWGklrdlmCz+EGfMyVaQLqBV9PZckhSqLe2A==}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@oxlint-tsgolint/win32-x64@0.10.0': '@oxlint-tsgolint/win32-x64@0.10.1':
resolution: {integrity: sha512-ygqxx8EmNWy9/wCQS5uXq9k/o2EyYNwNxY1ZHNzlmZC/kV06Aemx5OBDafefawBNqH7xTZPfccUrjdiy+QlTrw==} resolution: {integrity: sha512-hW1fSJZVxG51sLdGq1sQjOzb1tsQ23z/BquJfUwL7CqBobxr7TJvGmoINL+9KryOJt0jCoaiMfWe4yoYw5XfIA==}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@@ -900,8 +900,8 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [android] os: [android]
'@rolldown/binding-android-arm64@1.0.0-beta.57': '@rolldown/binding-android-arm64@1.0.0-beta.58':
resolution: {integrity: sha512-GoOVDy8bjw9z1K30Oo803nSzXJS/vWhFijFsW3kzvZCO8IZwFnNa6pGctmbbJstKl3Fv6UBwyjJQN6msejW0IQ==} resolution: {integrity: sha512-mWj5eE4Qc8TbPdGGaaLvBb9XfDPvE1EmZkJQgiGKwchkWH4oAJcRAKMTw7ZHnb1L+t7Ah41sBkAecaIsuUgsug==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64] cpu: [arm64]
os: [android] os: [android]
@@ -912,8 +912,8 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@rolldown/binding-darwin-arm64@1.0.0-beta.57': '@rolldown/binding-darwin-arm64@1.0.0-beta.58':
resolution: {integrity: sha512-9c4FOhRGpl+PX7zBK5p17c5efpF9aSpTPgyigv57hXf5NjQUaJOOiejPLAtFiKNBIfm5Uu6yFkvLKzOafNvlTw==} resolution: {integrity: sha512-wFxUymI/5R8bH8qZFYDfAxAN9CyISEIYke+95oZPiv6EWo88aa5rskjVcCpKA532R+klFmdqjbbaD56GNmTF4Q==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
@@ -924,8 +924,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@rolldown/binding-darwin-x64@1.0.0-beta.57': '@rolldown/binding-darwin-x64@1.0.0-beta.58':
resolution: {integrity: sha512-6RsB8Qy4LnGqNGJJC/8uWeLWGOvbRL/KG5aJ8XXpSEupg/KQtlBEiFaYU/Ma5Usj1s+bt3ItkqZYAI50kSplBA==} resolution: {integrity: sha512-ybp3MkPj23VDV9PhtRwdU5qrGhlViWRV5BjKwO6epaSlUD5lW0WyY+roN3ZAzbma/9RrMTgZ/a/gtQq8YXOcqw==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
@@ -936,8 +936,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
'@rolldown/binding-freebsd-x64@1.0.0-beta.57': '@rolldown/binding-freebsd-x64@1.0.0-beta.58':
resolution: {integrity: sha512-uA9kG7+MYkHTbqwv67Tx+5GV5YcKd33HCJIi0311iYBd25yuwyIqvJfBdt1VVB8tdOlyTb9cPAgfCki8nhwTQg==} resolution: {integrity: sha512-Evxj3yh7FWvyklUYZa0qTVT9N2zX9TPDqGF056hl8hlCZ9/ndQ2xMv6uw9PD1VlLpukbsqL+/C6M0qwipL0QMg==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
@@ -948,8 +948,8 @@ packages:
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.57': '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.58':
resolution: {integrity: sha512-3KkS0cHsllT2T+Te+VZMKHNw6FPQihYsQh+8J4jkzwgvAQpbsbXmrqhkw3YU/QGRrD8qgcOvBr6z5y6Jid+rmw==} resolution: {integrity: sha512-tYeXprDOrEgVHUbPXH6MPso4cM/c6RTkmJNICMQlYdki4hGMh92aj3yU6CKs+4X5gfG0yj5kVUw/L4M685SYag==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
@@ -960,8 +960,8 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@rolldown/binding-linux-arm64-gnu@1.0.0-beta.57': '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.58':
resolution: {integrity: sha512-A3/wu1RgsHhqP3rVH2+sM81bpk+Qd2XaHTl8LtX5/1LNR7QVBFBCpAoiXwjTdGnI5cMdBVi7Z1pi52euW760Fw==} resolution: {integrity: sha512-N78vmZzP6zG967Ohr+MasCjmKtis0geZ1SOVmxrA0/bklTQSzH5kHEjW5Qn+i1taFno6GEre1E40v0wuWsNOQw==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@@ -972,8 +972,8 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@rolldown/binding-linux-arm64-musl@1.0.0-beta.57': '@rolldown/binding-linux-arm64-musl@1.0.0-beta.58':
resolution: {integrity: sha512-d0kIVezTQtazpyWjiJIn5to8JlwfKITDqwsFv0Xc6s31N16CD2PC/Pl2OtKgS7n8WLOJbfqgIp5ixYzTAxCqMg==} resolution: {integrity: sha512-l+p4QVtG72C7wI2SIkNQw/KQtSjuYwS3rV6AKcWrRBF62ClsFUcif5vLaZIEbPrCXu5OFRXigXFJnxYsVVZqdQ==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@@ -984,8 +984,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@rolldown/binding-linux-x64-gnu@1.0.0-beta.57': '@rolldown/binding-linux-x64-gnu@1.0.0-beta.58':
resolution: {integrity: sha512-E199LPijo98yrLjPCmETx8EF43sZf9t3guSrLee/ej1rCCc3zDVTR4xFfN9BRAapGVl7/8hYqbbiQPTkv73kUg==} resolution: {integrity: sha512-urzJX0HrXxIh0FfxwWRjfPCMeInU9qsImLQxHBgLp5ivji1EEUnOfux8KxPPnRQthJyneBrN2LeqUix9DYrNaQ==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@@ -996,8 +996,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@rolldown/binding-linux-x64-musl@1.0.0-beta.57': '@rolldown/binding-linux-x64-musl@1.0.0-beta.58':
resolution: {integrity: sha512-++EQDpk/UJ33kY/BNsh7A7/P1sr/jbMuQ8cE554ZIy+tCUWCivo9zfyjDUoiMdnxqX6HLJEqqGnbGQOvzm2OMQ==} resolution: {integrity: sha512-7ijfVK3GISnXIwq/1FZo+KyAUJjL3kWPJ7rViAL6MWeEBhEgRzJ0yEd9I8N9aut8Y8ab+EKFJyRNMWZuUBwQ0A==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@@ -1008,8 +1008,8 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [openharmony] os: [openharmony]
'@rolldown/binding-openharmony-arm64@1.0.0-beta.57': '@rolldown/binding-openharmony-arm64@1.0.0-beta.58':
resolution: {integrity: sha512-voDEBcNqxbUv/GeXKFtxXVWA+H45P/8Dec4Ii/SbyJyGvCqV1j+nNHfnFUIiRQ2Q40DwPe/djvgYBs9PpETiMA==} resolution: {integrity: sha512-/m7sKZCS+cUULbzyJTIlv8JbjNohxbpAOA6cM+lgWgqVzPee3U6jpwydrib328JFN/gF9A99IZEnuGYqEDJdww==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64] cpu: [arm64]
os: [openharmony] os: [openharmony]
@@ -1019,8 +1019,8 @@ packages:
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
cpu: [wasm32] cpu: [wasm32]
'@rolldown/binding-wasm32-wasi@1.0.0-beta.57': '@rolldown/binding-wasm32-wasi@1.0.0-beta.58':
resolution: {integrity: sha512-bRhcF7NLlCnpkzLVlVhrDEd0KH22VbTPkPTbMjlYvqhSmarxNIq5vtlQS8qmV7LkPKHrNLWyJW/V/sOyFba26Q==} resolution: {integrity: sha512-6SZk7zMgv+y3wFFQ9qE5P9NnRHcRsptL1ypmudD26PDY+PvFCvfHRkJNfclWnvacVGxjowr7JOL3a9fd1wWhUw==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
cpu: [wasm32] cpu: [wasm32]
@@ -1030,8 +1030,8 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@rolldown/binding-win32-arm64-msvc@1.0.0-beta.57': '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.58':
resolution: {integrity: sha512-rnDVGRks2FQ2hgJ2g15pHtfxqkGFGjJQUDWzYznEkE8Ra2+Vag9OffxdbJMZqBWXHVM0iS4dv8qSiEn7bO+n1Q==} resolution: {integrity: sha512-sFqfYPnBZ6xBhMkadB7UD0yjEDRvs7ipR3nCggblN+N4ODCXY6qhg/bKL39+W+dgQybL7ErD4EGERVbW9DAWvg==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
@@ -1042,8 +1042,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@rolldown/binding-win32-x64-msvc@1.0.0-beta.57': '@rolldown/binding-win32-x64-msvc@1.0.0-beta.58':
resolution: {integrity: sha512-OqIUyNid1M4xTj6VRXp/Lht/qIP8fo25QyAZlCP+p6D2ATCEhyW4ZIFLnC9zAGN/HMbXoCzvwfa8Jjg/8J4YEg==} resolution: {integrity: sha512-AnFWJdAqB8+IDPcGrATYs67Kik/6tnndNJV2jGRmwlbeNiQQ8GhRJU8ETRlINfII0pqi9k4WWLnb00p1QCxw/Q==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@@ -1051,8 +1051,8 @@ packages:
'@rolldown/pluginutils@1.0.0-beta.55': '@rolldown/pluginutils@1.0.0-beta.55':
resolution: {integrity: sha512-vajw/B3qoi7aYnnD4BQ4VoCcXQWnF0roSwE2iynbNxgW4l9mFwtLmLmUhpDdcTBfKyZm1p/T0D13qG94XBLohA==} resolution: {integrity: sha512-vajw/B3qoi7aYnnD4BQ4VoCcXQWnF0roSwE2iynbNxgW4l9mFwtLmLmUhpDdcTBfKyZm1p/T0D13qG94XBLohA==}
'@rolldown/pluginutils@1.0.0-beta.57': '@rolldown/pluginutils@1.0.0-beta.58':
resolution: {integrity: sha512-aQNelgx14tGA+n2tNSa9x6/jeoCL9fkDeCei7nOKnHx0fEFRRMu5ReiITo+zZD5TzWDGGRjbSYCs93IfRIyTuQ==} resolution: {integrity: sha512-qWhDs6yFGR5xDfdrwiSa3CWGIHxD597uGE/A9xGqytBjANvh4rLCTTkq7szhMV4+Ygh+PMS90KVJ8xWG/TkX4w==}
'@rollup/rollup-android-arm-eabi@4.54.0': '@rollup/rollup-android-arm-eabi@4.54.0':
resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==} resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==}
@@ -1179,6 +1179,9 @@ packages:
'@sinclair/typebox@0.34.45': '@sinclair/typebox@0.34.45':
resolution: {integrity: sha512-qJcFVfCa5jxBFSuv7S5WYbA8XdeCPmhnaVVfX/2Y6L8WYg8sk3XY2+6W0zH+3mq1Cz+YC7Ki66HfqX6IHAwnkg==} resolution: {integrity: sha512-qJcFVfCa5jxBFSuv7S5WYbA8XdeCPmhnaVVfX/2Y6L8WYg8sk3XY2+6W0zH+3mq1Cz+YC7Ki66HfqX6IHAwnkg==}
'@sinclair/typebox@0.34.46':
resolution: {integrity: sha512-kiW7CtS/NkdvTUjkjUJo7d5JsFfbJ14YjdhDk9KoEgK6nFjKNXZPrX0jfLA8ZlET4cFLHxOZ/0vFKOP+bOxIOQ==}
'@standard-schema/spec@1.1.0': '@standard-schema/spec@1.1.0':
resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
@@ -1865,8 +1868,8 @@ packages:
graceful-fs@4.2.11: graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
grammy@1.38.4: grammy@1.39.2:
resolution: {integrity: sha512-z07Kin3HgRwMdy40KUs+c9fmNBvGlSxGwcqY8NAH0a8KULGFYEMQaFAo3ge0V5tvmgr02Jgubkf54KjHLAMCbw==} resolution: {integrity: sha512-7mLdNsNI2HBN1Gjombx7p3/Cjfgw/kErR/Qv3pDRw2qO/dYEdK8B9G9rpdZayNID+3qFQVTXNqxcGpG38mC2TQ==}
engines: {node: ^12.20.0 || >=14.13.1} engines: {node: ^12.20.0 || >=14.13.1}
gtoken@8.0.0: gtoken@8.0.0:
@@ -1881,8 +1884,8 @@ packages:
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
hashery@1.3.0: hashery@1.4.0:
resolution: {integrity: sha512-fWltioiy5zsSAs9ouEnvhsVJeAXRybGCNNv0lvzpzNOSDbULXRy7ivFWwCCv4I5Am6kSo75hmbsCduOoc2/K4w==} resolution: {integrity: sha512-Wn2i1In6XFxl8Az55kkgnFRiAlIAushzh26PTjL2AKtQcEfXrcLa7Hn5QOWGZEf3LU057P9TwwZjFyxfS1VuvQ==}
engines: {node: '>=20'} engines: {node: '>=20'}
hasown@2.0.2: hasown@2.0.2:
@@ -2229,8 +2232,8 @@ packages:
ms@2.1.3: ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
music-metadata@11.10.3: music-metadata@11.10.4:
resolution: {integrity: sha512-j0g/x4cNNZW6I5gdcPAY+GFkJY9WHTpkFDMBJKQLxJQyvSfQbXm57fTE3haGFFuOzCgtsTd4Plwc49Sn9RacDQ==} resolution: {integrity: sha512-W8ByTxUk3p2PHycZraD+XVOzho5zONRqP9XVDwK4kTDGwfDrAmsNXMxNgSii8bI/GDC86mtk5kwGh1Lv/imNlA==}
engines: {node: '>=18'} engines: {node: '>=18'}
mz@2.7.0: mz@2.7.0:
@@ -2314,8 +2317,8 @@ packages:
opus-decoder@0.7.11: opus-decoder@0.7.11:
resolution: {integrity: sha512-+e+Jz3vGQLxRTBHs8YJQPRPc1Tr+/aC6coV/DlZylriA29BdHQAYXhvNRKtjftof17OFng0+P4wsFIqQu3a48A==} resolution: {integrity: sha512-+e+Jz3vGQLxRTBHs8YJQPRPc1Tr+/aC6coV/DlZylriA29BdHQAYXhvNRKtjftof17OFng0+P4wsFIqQu3a48A==}
oxlint-tsgolint@0.10.0: oxlint-tsgolint@0.10.1:
resolution: {integrity: sha512-LDDSIu5J/4D4gFUuQQIEQpAC6maNEbMg4nC8JL/+Pe0cUDR86dtVZ09E2x5MwCh8f9yfktoaxt5x6UIVyzrajg==} resolution: {integrity: sha512-EEHNdo5cW2w1xwYdBQ7d3IXDqWAtMkfVFrh+9gQ4kYbYJwygY4QXSh1eH80/xVipZdVKujAwBgg/nNNHk56kxQ==}
hasBin: true hasBin: true
oxlint@1.36.0: oxlint@1.36.0:
@@ -2541,8 +2544,8 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true hasBin: true
rolldown@1.0.0-beta.57: rolldown@1.0.0-beta.58:
resolution: {integrity: sha512-lMMxcNN71GMsSko8RyeTaFoATHkCh4IWU7pYF73ziMYjhHZWfVesC6GQ+iaJCvZmVjvgSks9Ks1aaqEkBd8udg==} resolution: {integrity: sha512-v1FCjMZCan7f+xGAHBi+mqiE4MlH7I+SXEHSQSJoMOGNNB2UYtvMiejsq9YuUOiZjNeUeV/a21nSFbrUR+4ZCQ==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true hasBin: true
@@ -2756,8 +2759,8 @@ packages:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'} engines: {node: '>=0.6'}
token-types@6.1.1: token-types@6.1.2:
resolution: {integrity: sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==} resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==}
engines: {node: '>=14.16'} engines: {node: '>=14.16'}
totalist@3.0.1: totalist@3.0.1:
@@ -3028,16 +3031,16 @@ packages:
zod@3.25.76: zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
zod@4.2.1: zod@4.3.4:
resolution: {integrity: sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==} resolution: {integrity: sha512-Zw/uYiiyF6pUT1qmKbZziChgNPRu+ZRneAsMUDU6IwmXdWt5JwcUfy2bvLOCUtz5UniaN/Zx5aFttZYbYc7O/A==}
snapshots: snapshots:
'@anthropic-ai/sdk@0.71.2(zod@4.2.1)': '@anthropic-ai/sdk@0.71.2(zod@4.3.4)':
dependencies: dependencies:
json-schema-to-ts: 3.1.1 json-schema-to-ts: 3.1.1
optionalDependencies: optionalDependencies:
zod: 4.2.1 zod: 4.3.4
'@babel/code-frame@7.27.1': '@babel/code-frame@7.27.1':
dependencies: dependencies:
@@ -3098,8 +3101,6 @@ snapshots:
'@biomejs/cli-win32-x64@2.3.10': '@biomejs/cli-win32-x64@2.3.10':
optional: true optional: true
'@borewit/text-codec@0.1.1': {}
'@borewit/text-codec@0.2.1': {} '@borewit/text-codec@0.2.1': {}
'@cacheable/memory@2.0.7': '@cacheable/memory@2.0.7':
@@ -3117,7 +3118,7 @@ snapshots:
'@cacheable/utils@2.3.3': '@cacheable/utils@2.3.3':
dependencies: dependencies:
hashery: 1.3.0 hashery: 1.4.0
keyv: 5.5.5 keyv: 5.5.5
'@clack/core@0.5.0': '@clack/core@0.5.0':
@@ -3288,12 +3289,12 @@ snapshots:
- supports-color - supports-color
- utf-8-validate - utf-8-validate
'@grammyjs/transformer-throttler@1.2.1(grammy@1.38.4)': '@grammyjs/transformer-throttler@1.2.1(grammy@1.39.2)':
dependencies: dependencies:
bottleneck: 2.19.5 bottleneck: 2.19.5
grammy: 1.38.4 grammy: 1.39.2
'@grammyjs/types@3.22.2': {} '@grammyjs/types@3.23.0': {}
'@hapi/boom@9.1.4': '@hapi/boom@9.1.4':
dependencies: dependencies:
@@ -3432,7 +3433,7 @@ snapshots:
'@keyv/bigmap@1.3.0(keyv@5.5.5)': '@keyv/bigmap@1.3.0(keyv@5.5.5)':
dependencies: dependencies:
hashery: 1.3.0 hashery: 1.4.0
hookified: 1.14.0 hookified: 1.14.0
keyv: 5.5.5 keyv: 5.5.5
@@ -3470,9 +3471,9 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- tailwindcss - tailwindcss
'@mariozechner/pi-agent-core@0.31.1(ws@8.18.3)(zod@4.2.1)': '@mariozechner/pi-agent-core@0.31.1(ws@8.18.3)(zod@4.3.4)':
dependencies: dependencies:
'@mariozechner/pi-ai': 0.31.1(patch_hash=bf3e904ebaad236b8c3bb48c7d1150a1463735e783acaab6d15d6cd381b43832)(ws@8.18.3)(zod@4.2.1) '@mariozechner/pi-ai': 0.31.1(patch_hash=bf3e904ebaad236b8c3bb48c7d1150a1463735e783acaab6d15d6cd381b43832)(ws@8.18.3)(zod@4.3.4)
'@mariozechner/pi-tui': 0.31.1 '@mariozechner/pi-tui': 0.31.1
transitivePeerDependencies: transitivePeerDependencies:
- '@modelcontextprotocol/sdk' - '@modelcontextprotocol/sdk'
@@ -3482,18 +3483,18 @@ snapshots:
- ws - ws
- zod - zod
'@mariozechner/pi-ai@0.31.1(patch_hash=bf3e904ebaad236b8c3bb48c7d1150a1463735e783acaab6d15d6cd381b43832)(ws@8.18.3)(zod@4.2.1)': '@mariozechner/pi-ai@0.31.1(patch_hash=bf3e904ebaad236b8c3bb48c7d1150a1463735e783acaab6d15d6cd381b43832)(ws@8.18.3)(zod@4.3.4)':
dependencies: dependencies:
'@anthropic-ai/sdk': 0.71.2(zod@4.2.1) '@anthropic-ai/sdk': 0.71.2(zod@4.3.4)
'@google/genai': 1.34.0 '@google/genai': 1.34.0
'@mistralai/mistralai': 1.10.0 '@mistralai/mistralai': 1.10.0
'@sinclair/typebox': 0.34.45 '@sinclair/typebox': 0.34.45
ajv: 8.17.1 ajv: 8.17.1
ajv-formats: 3.0.1(ajv@8.17.1) ajv-formats: 3.0.1(ajv@8.17.1)
chalk: 5.6.2 chalk: 5.6.2
openai: 6.10.0(ws@8.18.3)(zod@4.2.1) openai: 6.10.0(ws@8.18.3)(zod@4.3.4)
partial-json: 0.1.7 partial-json: 0.1.7
zod-to-json-schema: 3.25.1(zod@4.2.1) zod-to-json-schema: 3.25.1(zod@4.3.4)
transitivePeerDependencies: transitivePeerDependencies:
- '@modelcontextprotocol/sdk' - '@modelcontextprotocol/sdk'
- bufferutil - bufferutil
@@ -3502,10 +3503,10 @@ snapshots:
- ws - ws
- zod - zod
'@mariozechner/pi-coding-agent@0.31.1(patch_hash=d0d5ffa1bfda8a0f9d14a5e73a074014346d3edbdb2ffc91444d3be5119f5745)(ws@8.18.3)(zod@4.2.1)': '@mariozechner/pi-coding-agent@0.31.1(patch_hash=d0d5ffa1bfda8a0f9d14a5e73a074014346d3edbdb2ffc91444d3be5119f5745)(ws@8.18.3)(zod@4.3.4)':
dependencies: dependencies:
'@mariozechner/pi-agent-core': 0.31.1(ws@8.18.3)(zod@4.2.1) '@mariozechner/pi-agent-core': 0.31.1(ws@8.18.3)(zod@4.3.4)
'@mariozechner/pi-ai': 0.31.1(patch_hash=bf3e904ebaad236b8c3bb48c7d1150a1463735e783acaab6d15d6cd381b43832)(ws@8.18.3)(zod@4.2.1) '@mariozechner/pi-ai': 0.31.1(patch_hash=bf3e904ebaad236b8c3bb48c7d1150a1463735e783acaab6d15d6cd381b43832)(ws@8.18.3)(zod@4.3.4)
'@mariozechner/pi-tui': 0.31.1 '@mariozechner/pi-tui': 0.31.1
chalk: 5.6.2 chalk: 5.6.2
cli-highlight: 2.1.11 cli-highlight: 2.1.11
@@ -3558,22 +3559,24 @@ snapshots:
'@oxc-project/types@0.103.0': {} '@oxc-project/types@0.103.0': {}
'@oxlint-tsgolint/darwin-arm64@0.10.0': '@oxc-project/types@0.106.0': {}
'@oxlint-tsgolint/darwin-arm64@0.10.1':
optional: true optional: true
'@oxlint-tsgolint/darwin-x64@0.10.0': '@oxlint-tsgolint/darwin-x64@0.10.1':
optional: true optional: true
'@oxlint-tsgolint/linux-arm64@0.10.0': '@oxlint-tsgolint/linux-arm64@0.10.1':
optional: true optional: true
'@oxlint-tsgolint/linux-x64@0.10.0': '@oxlint-tsgolint/linux-x64@0.10.1':
optional: true optional: true
'@oxlint-tsgolint/win32-arm64@0.10.0': '@oxlint-tsgolint/win32-arm64@0.10.1':
optional: true optional: true
'@oxlint-tsgolint/win32-x64@0.10.0': '@oxlint-tsgolint/win32-x64@0.10.1':
optional: true optional: true
'@oxlint/darwin-arm64@1.36.0': '@oxlint/darwin-arm64@1.36.0':
@@ -3635,61 +3638,61 @@ snapshots:
'@rolldown/binding-android-arm64@1.0.0-beta.55': '@rolldown/binding-android-arm64@1.0.0-beta.55':
optional: true optional: true
'@rolldown/binding-android-arm64@1.0.0-beta.57': '@rolldown/binding-android-arm64@1.0.0-beta.58':
optional: true optional: true
'@rolldown/binding-darwin-arm64@1.0.0-beta.55': '@rolldown/binding-darwin-arm64@1.0.0-beta.55':
optional: true optional: true
'@rolldown/binding-darwin-arm64@1.0.0-beta.57': '@rolldown/binding-darwin-arm64@1.0.0-beta.58':
optional: true optional: true
'@rolldown/binding-darwin-x64@1.0.0-beta.55': '@rolldown/binding-darwin-x64@1.0.0-beta.55':
optional: true optional: true
'@rolldown/binding-darwin-x64@1.0.0-beta.57': '@rolldown/binding-darwin-x64@1.0.0-beta.58':
optional: true optional: true
'@rolldown/binding-freebsd-x64@1.0.0-beta.55': '@rolldown/binding-freebsd-x64@1.0.0-beta.55':
optional: true optional: true
'@rolldown/binding-freebsd-x64@1.0.0-beta.57': '@rolldown/binding-freebsd-x64@1.0.0-beta.58':
optional: true optional: true
'@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.55': '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.55':
optional: true optional: true
'@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.57': '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.58':
optional: true optional: true
'@rolldown/binding-linux-arm64-gnu@1.0.0-beta.55': '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.55':
optional: true optional: true
'@rolldown/binding-linux-arm64-gnu@1.0.0-beta.57': '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.58':
optional: true optional: true
'@rolldown/binding-linux-arm64-musl@1.0.0-beta.55': '@rolldown/binding-linux-arm64-musl@1.0.0-beta.55':
optional: true optional: true
'@rolldown/binding-linux-arm64-musl@1.0.0-beta.57': '@rolldown/binding-linux-arm64-musl@1.0.0-beta.58':
optional: true optional: true
'@rolldown/binding-linux-x64-gnu@1.0.0-beta.55': '@rolldown/binding-linux-x64-gnu@1.0.0-beta.55':
optional: true optional: true
'@rolldown/binding-linux-x64-gnu@1.0.0-beta.57': '@rolldown/binding-linux-x64-gnu@1.0.0-beta.58':
optional: true optional: true
'@rolldown/binding-linux-x64-musl@1.0.0-beta.55': '@rolldown/binding-linux-x64-musl@1.0.0-beta.55':
optional: true optional: true
'@rolldown/binding-linux-x64-musl@1.0.0-beta.57': '@rolldown/binding-linux-x64-musl@1.0.0-beta.58':
optional: true optional: true
'@rolldown/binding-openharmony-arm64@1.0.0-beta.55': '@rolldown/binding-openharmony-arm64@1.0.0-beta.55':
optional: true optional: true
'@rolldown/binding-openharmony-arm64@1.0.0-beta.57': '@rolldown/binding-openharmony-arm64@1.0.0-beta.58':
optional: true optional: true
'@rolldown/binding-wasm32-wasi@1.0.0-beta.55': '@rolldown/binding-wasm32-wasi@1.0.0-beta.55':
@@ -3697,7 +3700,7 @@ snapshots:
'@napi-rs/wasm-runtime': 1.1.1 '@napi-rs/wasm-runtime': 1.1.1
optional: true optional: true
'@rolldown/binding-wasm32-wasi@1.0.0-beta.57': '@rolldown/binding-wasm32-wasi@1.0.0-beta.58':
dependencies: dependencies:
'@napi-rs/wasm-runtime': 1.1.1 '@napi-rs/wasm-runtime': 1.1.1
optional: true optional: true
@@ -3705,18 +3708,18 @@ snapshots:
'@rolldown/binding-win32-arm64-msvc@1.0.0-beta.55': '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.55':
optional: true optional: true
'@rolldown/binding-win32-arm64-msvc@1.0.0-beta.57': '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.58':
optional: true optional: true
'@rolldown/binding-win32-x64-msvc@1.0.0-beta.55': '@rolldown/binding-win32-x64-msvc@1.0.0-beta.55':
optional: true optional: true
'@rolldown/binding-win32-x64-msvc@1.0.0-beta.57': '@rolldown/binding-win32-x64-msvc@1.0.0-beta.58':
optional: true optional: true
'@rolldown/pluginutils@1.0.0-beta.55': {} '@rolldown/pluginutils@1.0.0-beta.55': {}
'@rolldown/pluginutils@1.0.0-beta.57': {} '@rolldown/pluginutils@1.0.0-beta.58': {}
'@rollup/rollup-android-arm-eabi@4.54.0': '@rollup/rollup-android-arm-eabi@4.54.0':
optional: true optional: true
@@ -3795,6 +3798,8 @@ snapshots:
'@sinclair/typebox@0.34.45': {} '@sinclair/typebox@0.34.45': {}
'@sinclair/typebox@0.34.46': {}
'@standard-schema/spec@1.1.0': {} '@standard-schema/spec@1.1.0': {}
'@testing-library/dom@10.4.1': '@testing-library/dom@10.4.1':
@@ -3825,7 +3830,7 @@ snapshots:
'@tokenizer/inflate@0.4.1': '@tokenizer/inflate@0.4.1':
dependencies: dependencies:
debug: 4.4.3 debug: 4.4.3
token-types: 6.1.1 token-types: 6.1.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -3912,6 +3917,20 @@ snapshots:
dependencies: dependencies:
'@types/node': 25.0.3 '@types/node': 25.0.3
'@vitest/browser-playwright@4.0.16(playwright@1.57.0)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.16)':
dependencies:
'@vitest/browser': 4.0.16(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.16)
'@vitest/mocker': 4.0.16(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))
playwright: 1.57.0
tinyrainbow: 3.0.3
vitest: 4.0.16(@types/node@25.0.3)(@vitest/browser-playwright@4.0.16)(@vitest/browser-preview@4.0.16)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
transitivePeerDependencies:
- bufferutil
- msw
- utf-8-validate
- vite
optional: true
'@vitest/browser-playwright@4.0.16(playwright@1.57.0)(vite@8.0.0-beta.3(@types/node@25.0.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.16)': '@vitest/browser-playwright@4.0.16(playwright@1.57.0)(vite@8.0.0-beta.3(@types/node@25.0.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.16)':
dependencies: dependencies:
'@vitest/browser': 4.0.16(vite@8.0.0-beta.3(@types/node@25.0.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.16) '@vitest/browser': 4.0.16(vite@8.0.0-beta.3(@types/node@25.0.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.16)
@@ -3925,11 +3944,11 @@ snapshots:
- utf-8-validate - utf-8-validate
- vite - vite
'@vitest/browser-preview@4.0.16(vite@8.0.0-beta.3(@types/node@25.0.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.16)': '@vitest/browser-preview@4.0.16(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.16)':
dependencies: dependencies:
'@testing-library/dom': 10.4.1 '@testing-library/dom': 10.4.1
'@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1)
'@vitest/browser': 4.0.16(vite@8.0.0-beta.3(@types/node@25.0.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.16) '@vitest/browser': 4.0.16(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.16)
vitest: 4.0.16(@types/node@25.0.3)(@vitest/browser-playwright@4.0.16)(@vitest/browser-preview@4.0.16)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) vitest: 4.0.16(@types/node@25.0.3)(@vitest/browser-playwright@4.0.16)(@vitest/browser-preview@4.0.16)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
transitivePeerDependencies: transitivePeerDependencies:
- bufferutil - bufferutil
@@ -4075,7 +4094,7 @@ snapshots:
async-mutex: 0.5.0 async-mutex: 0.5.0
libsignal: '@whiskeysockets/libsignal-node@https://codeload.github.com/whiskeysockets/libsignal-node/tar.gz/1c30d7d7e76a3b0aa120b04dc6a26f5a12dccf67' libsignal: '@whiskeysockets/libsignal-node@https://codeload.github.com/whiskeysockets/libsignal-node/tar.gz/1c30d7d7e76a3b0aa120b04dc6a26f5a12dccf67'
lru-cache: 11.2.4 lru-cache: 11.2.4
music-metadata: 11.10.3 music-metadata: 11.10.4
p-queue: 9.0.1 p-queue: 9.0.1
pino: 9.14.0 pino: 9.14.0
protobufjs: 7.5.4 protobufjs: 7.5.4
@@ -4528,7 +4547,7 @@ snapshots:
dependencies: dependencies:
'@tokenizer/inflate': 0.4.1 '@tokenizer/inflate': 0.4.1
strtok3: 10.3.4 strtok3: 10.3.4
token-types: 6.1.1 token-types: 6.1.2
uint8array-extras: 1.5.0 uint8array-extras: 1.5.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -4652,9 +4671,9 @@ snapshots:
graceful-fs@4.2.11: {} graceful-fs@4.2.11: {}
grammy@1.38.4: grammy@1.39.2:
dependencies: dependencies:
'@grammyjs/types': 3.22.2 '@grammyjs/types': 3.23.0
abort-controller: 3.0.0 abort-controller: 3.0.0
debug: 4.4.3 debug: 4.4.3
node-fetch: 2.7.0 node-fetch: 2.7.0
@@ -4673,7 +4692,7 @@ snapshots:
has-symbols@1.1.0: {} has-symbols@1.1.0: {}
hashery@1.3.0: hashery@1.4.0:
dependencies: dependencies:
hookified: 1.14.0 hookified: 1.14.0
@@ -4984,7 +5003,7 @@ snapshots:
ms@2.1.3: {} ms@2.1.3: {}
music-metadata@11.10.3: music-metadata@11.10.4:
dependencies: dependencies:
'@borewit/text-codec': 0.2.1 '@borewit/text-codec': 0.2.1
'@tokenizer/token': 0.3.0 '@tokenizer/token': 0.3.0
@@ -4993,7 +5012,7 @@ snapshots:
file-type: 21.2.0 file-type: 21.2.0
media-typer: 1.1.0 media-typer: 1.1.0
strtok3: 10.3.4 strtok3: 10.3.4
token-types: 6.1.1 token-types: 6.1.2
uint8array-extras: 1.5.0 uint8array-extras: 1.5.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -5053,26 +5072,26 @@ snapshots:
dependencies: dependencies:
wrappy: 1.0.2 wrappy: 1.0.2
openai@6.10.0(ws@8.18.3)(zod@4.2.1): openai@6.10.0(ws@8.18.3)(zod@4.3.4):
optionalDependencies: optionalDependencies:
ws: 8.18.3 ws: 8.18.3
zod: 4.2.1 zod: 4.3.4
opus-decoder@0.7.11: opus-decoder@0.7.11:
dependencies: dependencies:
'@wasm-audio-decoders/common': 9.0.7 '@wasm-audio-decoders/common': 9.0.7
optional: true optional: true
oxlint-tsgolint@0.10.0: oxlint-tsgolint@0.10.1:
optionalDependencies: optionalDependencies:
'@oxlint-tsgolint/darwin-arm64': 0.10.0 '@oxlint-tsgolint/darwin-arm64': 0.10.1
'@oxlint-tsgolint/darwin-x64': 0.10.0 '@oxlint-tsgolint/darwin-x64': 0.10.1
'@oxlint-tsgolint/linux-arm64': 0.10.0 '@oxlint-tsgolint/linux-arm64': 0.10.1
'@oxlint-tsgolint/linux-x64': 0.10.0 '@oxlint-tsgolint/linux-x64': 0.10.1
'@oxlint-tsgolint/win32-arm64': 0.10.0 '@oxlint-tsgolint/win32-arm64': 0.10.1
'@oxlint-tsgolint/win32-x64': 0.10.0 '@oxlint-tsgolint/win32-x64': 0.10.1
oxlint@1.36.0(oxlint-tsgolint@0.10.0): oxlint@1.36.0(oxlint-tsgolint@0.10.1):
optionalDependencies: optionalDependencies:
'@oxlint/darwin-arm64': 1.36.0 '@oxlint/darwin-arm64': 1.36.0
'@oxlint/darwin-x64': 1.36.0 '@oxlint/darwin-x64': 1.36.0
@@ -5082,7 +5101,7 @@ snapshots:
'@oxlint/linux-x64-musl': 1.36.0 '@oxlint/linux-x64-musl': 1.36.0
'@oxlint/win32-arm64': 1.36.0 '@oxlint/win32-arm64': 1.36.0
'@oxlint/win32-x64': 1.36.0 '@oxlint/win32-x64': 1.36.0
oxlint-tsgolint: 0.10.0 oxlint-tsgolint: 0.10.1
p-queue@9.0.1: p-queue@9.0.1:
dependencies: dependencies:
@@ -5339,24 +5358,24 @@ snapshots:
'@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.55 '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.55
'@rolldown/binding-win32-x64-msvc': 1.0.0-beta.55 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.55
rolldown@1.0.0-beta.57: rolldown@1.0.0-beta.58:
dependencies: dependencies:
'@oxc-project/types': 0.103.0 '@oxc-project/types': 0.106.0
'@rolldown/pluginutils': 1.0.0-beta.57 '@rolldown/pluginutils': 1.0.0-beta.58
optionalDependencies: optionalDependencies:
'@rolldown/binding-android-arm64': 1.0.0-beta.57 '@rolldown/binding-android-arm64': 1.0.0-beta.58
'@rolldown/binding-darwin-arm64': 1.0.0-beta.57 '@rolldown/binding-darwin-arm64': 1.0.0-beta.58
'@rolldown/binding-darwin-x64': 1.0.0-beta.57 '@rolldown/binding-darwin-x64': 1.0.0-beta.58
'@rolldown/binding-freebsd-x64': 1.0.0-beta.57 '@rolldown/binding-freebsd-x64': 1.0.0-beta.58
'@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.57 '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.58
'@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.57 '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.58
'@rolldown/binding-linux-arm64-musl': 1.0.0-beta.57 '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.58
'@rolldown/binding-linux-x64-gnu': 1.0.0-beta.57 '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.58
'@rolldown/binding-linux-x64-musl': 1.0.0-beta.57 '@rolldown/binding-linux-x64-musl': 1.0.0-beta.58
'@rolldown/binding-openharmony-arm64': 1.0.0-beta.57 '@rolldown/binding-openharmony-arm64': 1.0.0-beta.58
'@rolldown/binding-wasm32-wasi': 1.0.0-beta.57 '@rolldown/binding-wasm32-wasi': 1.0.0-beta.58
'@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.57 '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.58
'@rolldown/binding-win32-x64-msvc': 1.0.0-beta.57 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.58
rollup@4.54.0: rollup@4.54.0:
dependencies: dependencies:
@@ -5625,9 +5644,9 @@ snapshots:
toidentifier@1.0.1: {} toidentifier@1.0.1: {}
token-types@6.1.1: token-types@6.1.2:
dependencies: dependencies:
'@borewit/text-codec': 0.1.1 '@borewit/text-codec': 0.2.1
'@tokenizer/token': 0.3.0 '@tokenizer/token': 0.3.0
ieee754: 1.2.1 ieee754: 1.2.1
@@ -5746,8 +5765,8 @@ snapshots:
why-is-node-running: 2.3.0 why-is-node-running: 2.3.0
optionalDependencies: optionalDependencies:
'@types/node': 25.0.3 '@types/node': 25.0.3
'@vitest/browser-playwright': 4.0.16(playwright@1.57.0)(vite@8.0.0-beta.3(@types/node@25.0.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.16) '@vitest/browser-playwright': 4.0.16(playwright@1.57.0)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.16)
'@vitest/browser-preview': 4.0.16(vite@8.0.0-beta.3(@types/node@25.0.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.16) '@vitest/browser-preview': 4.0.16(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.16)
transitivePeerDependencies: transitivePeerDependencies:
- jiti - jiti
- less - less
@@ -5827,10 +5846,10 @@ snapshots:
dependencies: dependencies:
zod: 3.25.76 zod: 3.25.76
zod-to-json-schema@3.25.1(zod@4.2.1): zod-to-json-schema@3.25.1(zod@4.3.4):
dependencies: dependencies:
zod: 4.2.1 zod: 4.3.4
zod@3.25.76: {} zod@3.25.76: {}
zod@4.2.1: {} zod@4.3.4: {}

View File

@@ -1,3 +1,8 @@
import fs from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import sharp from "sharp";
import { describe, expect, it } from "vitest"; import { describe, expect, it } from "vitest";
import { createClawdisCodingTools } from "./pi-tools.js"; import { createClawdisCodingTools } from "./pi-tools.js";
@@ -77,4 +82,75 @@ describe("createClawdisCodingTools", () => {
expect(tools.some((tool) => tool.name === "bash")).toBe(true); expect(tools.some((tool) => tool.name === "bash")).toBe(true);
expect(tools.some((tool) => tool.name === "process")).toBe(true); expect(tools.some((tool) => tool.name === "process")).toBe(true);
}); });
it("keeps read tool image metadata intact", async () => {
const tools = createClawdisCodingTools();
const readTool = tools.find((tool) => tool.name === "read");
expect(readTool).toBeDefined();
const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "clawdis-read-"));
try {
const imagePath = path.join(tmpDir, "sample.png");
const png = await sharp({
create: {
width: 8,
height: 8,
channels: 3,
background: { r: 0, g: 128, b: 255 },
},
})
.png()
.toBuffer();
await fs.writeFile(imagePath, png);
const result = await readTool?.execute("tool-1", {
path: imagePath,
});
expect(result?.content?.some((block) => block.type === "image")).toBe(
true,
);
const text = result?.content?.find((block) => block.type === "text") as
| { text?: string }
| undefined;
expect(text?.text ?? "").toContain("Read image file [image/png]");
const image = result?.content?.find((block) => block.type === "image") as
| { mimeType?: string }
| undefined;
expect(image?.mimeType).toBe("image/png");
} finally {
await fs.rm(tmpDir, { recursive: true, force: true });
}
});
it("returns text content without image blocks for text files", async () => {
const tools = createClawdisCodingTools();
const readTool = tools.find((tool) => tool.name === "read");
expect(readTool).toBeDefined();
const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "clawdis-read-"));
try {
const textPath = path.join(tmpDir, "sample.txt");
const contents = "Hello from clawdis read tool.";
await fs.writeFile(textPath, contents, "utf8");
const result = await readTool?.execute("tool-2", {
path: textPath,
});
expect(result?.content?.some((block) => block.type === "image")).toBe(
false,
);
const textBlocks = result?.content?.filter(
(block) => block.type === "text",
) as Array<{ text?: string }> | undefined;
expect(textBlocks?.length ?? 0).toBeGreaterThan(0);
const combinedText = textBlocks
?.map((block) => block.text ?? "")
.join("\n");
expect(combinedText).toContain(contents);
} finally {
await fs.rm(tmpDir, { recursive: true, force: true });
}
});
}); });