diff --git a/package.json b/package.json index 72b0a54f..a6da1ff5 100644 --- a/package.json +++ b/package.json @@ -48,9 +48,9 @@ "vitest": "^4.0.18" }, "dependencies": { - "@mariozechner/pi-agent-core": "^0.50.3", - "@mariozechner/pi-ai": "^0.50.3", - "@mariozechner/pi-coding-agent": "^0.50.3", + "@mariozechner/pi-agent-core": "^0.52.9", + "@mariozechner/pi-ai": "^0.52.9", + "@mariozechner/pi-coding-agent": "^0.52.9", "@mozilla/readability": "^0.6.0", "@multica/sdk": "workspace:*", "@nestjs/common": "^11.1.12", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b2a30d9..84a3a2d7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,14 +33,14 @@ importers: .: dependencies: '@mariozechner/pi-agent-core': - specifier: ^0.50.3 - version: 0.50.3(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.18.3)(zod@4.3.6) + specifier: ^0.52.9 + version: 0.52.9(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.19.0)(zod@4.3.6) '@mariozechner/pi-ai': - specifier: ^0.50.3 - version: 0.50.3(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.18.3)(zod@4.3.6) + specifier: ^0.52.9 + version: 0.52.9(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.19.0)(zod@4.3.6) '@mariozechner/pi-coding-agent': - specifier: ^0.50.3 - version: 0.50.3(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.18.3)(zod@4.3.6) + specifier: ^0.52.9 + version: 0.52.9(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.19.0)(zod@4.3.6) '@mozilla/readability': specifier: ^0.6.0 version: 0.6.0 @@ -463,10 +463,10 @@ importers: devDependencies: '@mariozechner/pi-agent-core': specifier: ^0.50.3 - version: 0.50.3(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.18.3)(zod@4.3.6) + version: 0.50.3(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.19.0)(zod@4.3.6) '@mariozechner/pi-ai': specifier: ^0.50.3 - version: 0.50.3(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.18.3)(zod@4.3.6) + version: 0.50.3(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.19.0)(zod@4.3.6) '@types/uuid': specifier: ^11.0.0 version: 11.0.0 @@ -605,6 +605,15 @@ packages: zod: optional: true + '@anthropic-ai/sdk@0.73.0': + resolution: {integrity: sha512-URURVzhxXGJDGUGFunIOtBlSl7KWvZiAAKY/ttTkZAkXT9bTPqdk2eK0b8qqSxXpikh3QKPnPYpiyX98zf5ebw==} + hasBin: true + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + peerDependenciesMeta: + zod: + optional: true + '@aws-crypto/crc32@5.2.0': resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} engines: {node: '>=16.0.0'} @@ -626,74 +635,146 @@ packages: resolution: {integrity: sha512-N5zRvcpq/brl46Mnn3J1N4RFDeiOKU4hFNISFVawt3eT+WBPc74hbbd5b7aky+sreapkfeZ+MAXrQLdevZyMBw==} engines: {node: '>=20.0.0'} + '@aws-sdk/client-bedrock-runtime@3.985.0': + resolution: {integrity: sha512-jkQ+G+b/6Z6gUsn8jNSjJsFVgxnA4HtyOjrpHfmp8nHWLRFTOIw3HfY2vAlDgg/uUJ7cezVG0/tmbwujFqX25A==} + engines: {node: '>=20.0.0'} + '@aws-sdk/client-sso@3.975.0': resolution: {integrity: sha512-HpgJuleH7P6uILxzJKQOmlHdwaCY+xYC6VgRDzlwVEqU/HXjo4m2gOAyjUbpXlBOCWfGgMUzfBlNJ9z3MboqEQ==} engines: {node: '>=20.0.0'} + '@aws-sdk/client-sso@3.985.0': + resolution: {integrity: sha512-81J8iE8MuXhdbMfIz4sWFj64Pe41bFi/uqqmqOC5SlGv+kwoyLsyKS/rH2tW2t5buih4vTUxskRjxlqikTD4oQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/core@3.973.4': resolution: {integrity: sha512-8Rk+kPP74YiR47x54bxYlKZswsaSh0a4XvvRUMLvyS/koNawhsGu/+qSZxREqUeTO+GkKpFvSQIsAZR+deUP+g==} engines: {node: '>=20.0.0'} + '@aws-sdk/core@3.973.7': + resolution: {integrity: sha512-wNZZQQNlJ+hzD49cKdo+PY6rsTDElO8yDImnrI69p2PLBa7QomeUKAJWYp9xnaR38nlHqWhMHZuYLCQ3oSX+xg==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-env@3.972.2': resolution: {integrity: sha512-wzH1EdrZsytG1xN9UHaK12J9+kfrnd2+c8y0LVoS4O4laEjPoie1qVK3k8/rZe7KOtvULzyMnO3FT4Krr9Z0Dg==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-env@3.972.5': + resolution: {integrity: sha512-LxJ9PEO4gKPXzkufvIESUysykPIdrV7+Ocb9yAhbhJLE4TiAYqbCVUE+VuKP1leGR1bBfjWjYgSV5MxprlX3mQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-http@3.972.4': resolution: {integrity: sha512-OC7F3ipXV12QfDEWybQGHLzoeHBlAdx/nLzPfHP0Wsabu3JBffu5nlzSaJNf7to9HGtOW8Bpu8NX0ugmDrCbtw==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-http@3.972.7': + resolution: {integrity: sha512-L2uOGtvp2x3bTcxFTpSM+GkwFIPd8pHfGWO1764icMbo7e5xJh0nfhx1UwkXLnwvocTNEf8A7jISZLYjUSNaTg==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-ini@3.972.2': resolution: {integrity: sha512-Jrb8sLm6k8+L7520irBrvCtdLxNtrG7arIxe9TCeMJt/HxqMGJdbIjw8wILzkEHLMIi4MecF2FbXCln7OT1Tag==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-ini@3.972.5': + resolution: {integrity: sha512-SdDTYE6jkARzOeL7+kudMIM4DaFnP5dZVeatzw849k4bSXDdErDS188bgeNzc/RA2WGrlEpsqHUKP6G7sVXhZg==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-login@3.972.2': resolution: {integrity: sha512-mlaw2aiI3DrimW85ZMn3g7qrtHueidS58IGytZ+mbFpsYLK5wMjCAKZQtt7VatLMtSBG/dn/EY4njbnYXIDKeQ==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-login@3.972.5': + resolution: {integrity: sha512-uYq1ILyTSI6ZDCMY5+vUsRM0SOCVI7kaW4wBrehVVkhAxC6y+e9rvGtnoZqCOWL1gKjTMouvsf4Ilhc5NCg1Aw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-node@3.972.2': resolution: {integrity: sha512-Lz1J5IZdTjLYTVIcDP5DVDgi1xlgsF3p1cnvmbfKbjCRhQpftN2e2J4NFfRRvPD54W9+bZ8l5VipPXtTYK7aEg==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-node@3.972.6': + resolution: {integrity: sha512-DZ3CnAAtSVtVz+G+ogqecaErMLgzph4JH5nYbHoBMgBkwTUV+SUcjsjOJwdBJTHu3Dm6l5LBYekZoU2nDqQk2A==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-process@3.972.2': resolution: {integrity: sha512-NLKLTT7jnUe9GpQAVkPTJO+cs2FjlQDt5fArIYS7h/Iw/CvamzgGYGFRVD2SE05nOHCMwafUSi42If8esGFV+g==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-process@3.972.5': + resolution: {integrity: sha512-HDKF3mVbLnuqGg6dMnzBf1VUOywE12/N286msI9YaK9mEIzdsGCtLTvrDhe3Up0R9/hGFbB+9l21/TwF5L1C6g==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-sso@3.972.2': resolution: {integrity: sha512-YpwDn8g3gCGUl61cCV0sRxP2pFIwg+ZsMfWQ/GalSyjXtRkctCMFA+u0yPb/Q4uTfNEiya1Y4nm0C5rIHyPW5Q==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-sso@3.972.5': + resolution: {integrity: sha512-8urj3AoeNeQisjMmMBhFeiY2gxt6/7wQQbEGun0YV/OaOOiXrIudTIEYF8ZfD+NQI6X1FY5AkRsx6O/CaGiybA==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-web-identity@3.972.2': resolution: {integrity: sha512-x9DAiN9Qz+NjJ99ltDiVQ8d511M/tuF/9MFbe2jUgo7HZhD6+x4S3iT1YcP07ndwDUjmzKGmeOEgE24k4qvfdg==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-web-identity@3.972.5': + resolution: {integrity: sha512-OK3cULuJl6c+RcDZfPpaK5o3deTOnKZbxm7pzhFNGA3fI2hF9yDih17fGRazJzGGWaDVlR9ejZrpDef4DJCEsw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/eventstream-handler-node@3.972.2': resolution: {integrity: sha512-bYYftGahAQv90qJci/MvE/baqlxqUJ3urY0WpEux0Nd2bl2mh0t2M7mtnHa6pxU95UW2BeKSL6/LV6zLo00o4Q==} engines: {node: '>=20.0.0'} + '@aws-sdk/eventstream-handler-node@3.972.5': + resolution: {integrity: sha512-xEmd3dnyn83K6t4AJxBJA63wpEoCD45ERFG0XMTViD2E/Ohls9TLxjOWPb1PAxR9/46cKy/TImez1GoqP6xVNQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-eventstream@3.972.2': resolution: {integrity: sha512-cUxOy8hXPgNkKw0G0avq4nxJ2kyROTmBKaO8B4G84HguV3orxMMdwq7bdKkv4xV8RZr/Bd8lJDoVtgRjSBq83Q==} engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-eventstream@3.972.3': + resolution: {integrity: sha512-pbvZ6Ye/Ks6BAZPa3RhsNjHrvxU9li25PMhSdDpbX0jzdpKpAkIR65gXSNKmA/REnSdEMWSD4vKUW+5eMFzB6w==} + engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-host-header@3.972.2': resolution: {integrity: sha512-42hZ8jEXT2uR6YybCzNq9OomqHPw43YIfRfz17biZjMQA4jKSQUaHIl6VvqO2Ddl5904pXg2Yd/ku78S0Ikgog==} engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-host-header@3.972.3': + resolution: {integrity: sha512-aknPTb2M+G3s+0qLCx4Li/qGZH8IIYjugHMv15JTYMe6mgZO8VBpYgeGYsNMGCqCZOcWzuf900jFBG5bopfzmA==} + engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-logger@3.972.2': resolution: {integrity: sha512-iUzdXKOgi4JVDDEG/VvoNw50FryRCEm0qAudw12DcZoiNJWl0rN6SYVLcL1xwugMfQncCXieK5UBlG6mhH7iYA==} engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-logger@3.972.3': + resolution: {integrity: sha512-Ftg09xNNRqaz9QNzlfdQWfpqMCJbsQdnZVJP55jfhbKi1+FTWxGuvfPoBhDHIovqWKjqbuiew3HuhxbJ0+OjgA==} + engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-recursion-detection@3.972.2': resolution: {integrity: sha512-/mzlyzJDtngNFd/rAYvqx29a2d0VuiYKN84Y/Mu9mGw7cfMOCyRK+896tb9wV6MoPRHUX7IXuKCIL8nzz2Pz5A==} engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-recursion-detection@3.972.3': + resolution: {integrity: sha512-PY57QhzNuXHnwbJgbWYTrqIDHYSeOlhfYERTAuc16LKZpTZRJUjzBFokp9hF7u1fuGeE3D70ERXzdbMBOqQz7Q==} + engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-user-agent@3.972.4': resolution: {integrity: sha512-6sU8jrSJvY/lqSnU6IYsa8SrCKwOZ4Enl6O4xVJo8RCq9Bdr5Giuw2eUaJAk9GPcpr4OFcmSFv3JOLhpKGeRZA==} engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-user-agent@3.972.7': + resolution: {integrity: sha512-HUD+geASjXSCyL/DHPQc/Ua7JhldTcIglVAoCV8kiVm99IaFSlAbTvEnyhZwdE6bdFyTL+uIaWLaCFSRsglZBQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-websocket@3.972.2': resolution: {integrity: sha512-D4fFifl48BJ7fSGz33zJPrbKQ4DFD5mR73xTEs1JoxgsyskV/bR7h+QidE+Kyeps5GX7D1E4TKHimpoGSqAlRg==} engines: {node: '>= 14.0.0'} + '@aws-sdk/middleware-websocket@3.972.5': + resolution: {integrity: sha512-BN4A9K71WRIlpQ3+IYGdBC2wVyobZ95g6ZomodmJ8Te772GWo0iDk2Mv6JIHdr842tOTgi1b3npLIFDUS4hl4g==} + engines: {node: '>= 14.0.0'} + '@aws-sdk/nested-clients@3.975.0': resolution: {integrity: sha512-OkeFHPlQj2c/Y5bQGkX14pxhDWUGUFt3LRHhjcDKsSCw6lrxKcxN3WFZN0qbJwKNydP+knL5nxvfgKiCLpTLRA==} engines: {node: '>=20.0.0'} @@ -702,10 +783,18 @@ packages: resolution: {integrity: sha512-FyFiPp1SPt2JnspHlPO0LJyRwfYLBA27ToAoJAsbJIcd/Ytt9mFkRQ4kqUJQwnSl5JpdYzotNRqoRFCmx3uUfA==} engines: {node: '>=20.0.0'} + '@aws-sdk/nested-clients@3.985.0': + resolution: {integrity: sha512-TsWwKzb/2WHafAY0CE7uXgLj0FmnkBTgfioG9HO+7z/zCPcl1+YU+i7dW4o0y+aFxFgxTMG+ExBQpqT/k2ao8g==} + engines: {node: '>=20.0.0'} + '@aws-sdk/region-config-resolver@3.972.2': resolution: {integrity: sha512-/7vRBsfmiOlg2X67EdKrzzQGw5/SbkXb7ALHQmlQLkZh8qNgvS2G2dDC6NtF3hzFlpP3j2k+KIEtql/6VrI6JA==} engines: {node: '>=20.0.0'} + '@aws-sdk/region-config-resolver@3.972.3': + resolution: {integrity: sha512-v4J8qYAWfOMcZ4MJUyatntOicTzEMaU7j3OpkRCGGFSL2NgXQ5VbxauIyORA+pxdKZ0qQG2tCQjQjZDlXEC3Ow==} + engines: {node: '>=20.0.0'} + '@aws-sdk/token-providers@3.975.0': resolution: {integrity: sha512-AWQt64hkVbDQ+CmM09wnvSk2mVyH4iRROkmYkr3/lmUtFNbE2L/fnw26sckZnUcFCsHPqbkQrcsZAnTcBLbH4w==} engines: {node: '>=20.0.0'} @@ -714,6 +803,10 @@ packages: resolution: {integrity: sha512-WASLAiZAzGCIsr9Yqf0RW8Jpuwfw9RP6Dpuev1J+ewLKl5nr6JL5Y9PIfnRi7asG0QUxgu5smadfSuPDMEbJjA==} engines: {node: '>=20.0.0'} + '@aws-sdk/token-providers@3.985.0': + resolution: {integrity: sha512-+hwpHZyEq8k+9JL2PkE60V93v2kNhUIv7STFt+EAez1UJsJOQDhc5LpzEX66pNjclI5OTwBROs/DhJjC/BtMjQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/types@3.972.0': resolution: {integrity: sha512-U7xBIbLSetONxb2bNzHyDgND3oKGoIfmknrEVnoEU4GUSs+0augUOIn9DIWGUO2ETcRFdsRUnmx9KhPT9Ojbug==} engines: {node: '>=20.0.0'} @@ -726,10 +819,18 @@ packages: resolution: {integrity: sha512-6JHsl1V/a1ZW8D8AFfd4R52fwZPnZ5H4U6DS8m/bWT8qad72NvbOFAC7U2cDtFs2TShqUO3TEiX/EJibtY3ijg==} engines: {node: '>=20.0.0'} + '@aws-sdk/util-endpoints@3.985.0': + resolution: {integrity: sha512-vth7UfGSUR3ljvaq8V4Rc62FsM7GUTH/myxPWkaEgOrprz1/Pc72EgTXxj+cPPPDAfHFIpjhkB7T7Td0RJx+BA==} + engines: {node: '>=20.0.0'} + '@aws-sdk/util-format-url@3.972.2': resolution: {integrity: sha512-RCd8eur5wzDLgFBvbBhoFQ1bw1wxHJiN88MQ82IiJBs6OGXTWaf0oFgLbK06qJvnVUqL13t3jEnlYPHPNdgBWw==} engines: {node: '>=20.0.0'} + '@aws-sdk/util-format-url@3.972.3': + resolution: {integrity: sha512-n7F2ycckcKFXa01vAsT/SJdjFHfKH9s96QHcs5gn8AaaigASICeME8WdUL9uBp8XV/OVwEt8+6gzn6KFUgQa8g==} + engines: {node: '>=20.0.0'} + '@aws-sdk/util-locate-window@3.965.4': resolution: {integrity: sha512-H1onv5SkgPBK2P6JR2MjGgbOnttoNzSPIRoeZTNPZYyaplwGg50zS3amXvXqF0/qfXpWEC9rLWU564QTB9bSog==} engines: {node: '>=20.0.0'} @@ -737,6 +838,9 @@ packages: '@aws-sdk/util-user-agent-browser@3.972.2': resolution: {integrity: sha512-gz76bUyebPZRxIsBHJUd/v+yiyFzm9adHbr8NykP2nm+z/rFyvQneOHajrUejtmnc5tTBeaDPL4X25TnagRk4A==} + '@aws-sdk/util-user-agent-browser@3.972.3': + resolution: {integrity: sha512-JurOwkRUcXD/5MTDBcqdyQ9eVedtAsZgw5rBwktsPTN7QtPiS2Ld1jkJepNgYoCufz1Wcut9iup7GJDoIHp8Fw==} + '@aws-sdk/util-user-agent-node@3.972.2': resolution: {integrity: sha512-vnxOc4C6AR7hVbwyFo1YuH0GB6dgJlWt8nIOOJpnzJAWJPkUMPJ9Zv2lnKsSU7TTZbhP2hEO8OZ4PYH59XFv8Q==} engines: {node: '>=20.0.0'} @@ -746,10 +850,23 @@ packages: aws-crt: optional: true + '@aws-sdk/util-user-agent-node@3.972.5': + resolution: {integrity: sha512-GsUDF+rXyxDZkkJxUsDxnA67FG+kc5W1dnloCFLl6fWzceevsCYzJpASBzT+BPjwUgREE6FngfJYYYMQUY5fZQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + '@aws-sdk/xml-builder@3.972.2': resolution: {integrity: sha512-jGOOV/bV1DhkkUhHiZ3/1GZ67cZyOXaDb7d1rYD6ZiXf5V9tBNOcgqXwRRPvrCbYaFRa1pPMFb3ZjqjWpR3YfA==} engines: {node: '>=20.0.0'} + '@aws-sdk/xml-builder@3.972.4': + resolution: {integrity: sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==} + engines: {node: '>=20.0.0'} + '@aws/lambda-invoke-store@0.2.3': resolution: {integrity: sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==} engines: {node: '>=18.0.0'} @@ -1835,6 +1952,15 @@ packages: '@modelcontextprotocol/sdk': optional: true + '@google/genai@1.40.0': + resolution: {integrity: sha512-fhIww8smT0QYRX78qWOiz/nIQhHMF5wXOrlXvj33HBrz3vKDBb+wibLcEmTA+L9dmPD4KmfNr7UF3LDQVTXNjA==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.25.2 + peerDependenciesMeta: + '@modelcontextprotocol/sdk': + optional: true + '@grammyjs/types@3.23.0': resolution: {integrity: sha512-D3jQ4UWERPsyR3op/YFudMMIPNTU47vy7L51uO9/73tMELmjO/+LX5N36/Y0CG5IQfIsz43MxiHI5rgsK0/k+g==} @@ -2080,6 +2206,10 @@ packages: resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} engines: {node: 20 || >=22} + '@isaacs/brace-expansion@5.0.1': + resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==} + engines: {node: 20 || >=22} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -2155,65 +2285,72 @@ packages: resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} engines: {node: '>= 10.0.0'} - '@mariozechner/clipboard-darwin-arm64@0.3.0': - resolution: {integrity: sha512-7i4bitLzRSij0fj6q6tPmmf+JrwHqfBsBmf8mOcLVv0LVexD+4gEsyMait4i92exKYmCfna6uHKVS84G4nqehg==} + '@mariozechner/clipboard-darwin-arm64@0.3.2': + resolution: {integrity: sha512-uBf6K7Je1ihsgvmWxA8UCGCeI+nbRVRXoarZdLjl6slz94Zs1tNKFZqx7aCI5O1i3e0B6ja82zZ06BWrl0MCVw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@mariozechner/clipboard-darwin-universal@0.3.0': - resolution: {integrity: sha512-FVZLGdIkmvqtPQjD0GQwKLVheL+zV7DjA6I5NcsHGjBeWpG2nACS6COuelNf8ruMoPxJFw7RoB4fjw6mmjT+Nw==} + '@mariozechner/clipboard-darwin-universal@0.3.2': + resolution: {integrity: sha512-mxSheKTW2U9LsBdXy0SdmdCAE5HqNS9QUmpNHLnfJ+SsbFKALjEZc5oRrVMXxGQSirDvYf5bjmRyT0QYYonnlg==} engines: {node: '>= 10'} os: [darwin] - '@mariozechner/clipboard-darwin-x64@0.3.0': - resolution: {integrity: sha512-KuurQYEqRhalvBji3CH5xIq1Ts23IgVRE3rjanhqFDI77luOhCnlNbDtqv3No5OxJhEBLykQNrAzfgjqPsPWdA==} + '@mariozechner/clipboard-darwin-x64@0.3.2': + resolution: {integrity: sha512-U1BcVEoidvwIp95+HJswSW+xr28EQiHR7rZjH6pn8Sja5yO4Yoe3yCN0Zm8Lo72BbSOK/fTSq0je7CJpaPCspg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@mariozechner/clipboard-linux-arm64-gnu@0.3.0': - resolution: {integrity: sha512-nWpGMlk43bch7ztGfnALcSi5ZREVziPYzrFKjoJimbwaiULrfY0fGce0gWBynP9ak0nHgDLp0nSa7b4cCl+cIw==} + '@mariozechner/clipboard-linux-arm64-gnu@0.3.2': + resolution: {integrity: sha512-BsinwG3yWTIjdgNCxsFlip7LkfwPk+ruw/aFCXHUg/fb5XC/Ksp+YMQ7u0LUtiKzIv/7LMXgZInJQH6gxbAaqQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@mariozechner/clipboard-linux-riscv64-gnu@0.3.0': - resolution: {integrity: sha512-4BC08CIaOXSSAGRZLEjqJmQfioED8ohAzwt0k2amZPEbH96YKoBNorq5EdwPf5VT+odS0DeyCwhwtxokRLZIvQ==} + '@mariozechner/clipboard-linux-arm64-musl@0.3.2': + resolution: {integrity: sha512-0/Gi5Xq2V6goXBop19ePoHvXsmJD9SzFlO3S+d6+T2b+BlPcpOu3Oa0wTjl+cZrLAAEzA86aPNBI+VVAFDFPKw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@mariozechner/clipboard-linux-riscv64-gnu@0.3.2': + resolution: {integrity: sha512-2AFFiXB24qf0zOZsxI1GJGb9wQGlOJyN6UwoXqmKS3dpQi/l6ix30IzDDA4c4ZcCcx4D+9HLYXhC1w7Sov8pXA==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] libc: [glibc] - '@mariozechner/clipboard-linux-x64-gnu@0.3.0': - resolution: {integrity: sha512-GpNY5Y9nOzr0Vt0Qi5U88qwe6piiIHk44kSMexl8ns90LluN5UTNYmyfi7Xq3/lmPZCpnB2xvBTYbsXCxnopIA==} + '@mariozechner/clipboard-linux-x64-gnu@0.3.2': + resolution: {integrity: sha512-v6fVnsn7WMGg73Dab8QMwyFce7tzGfgEixKgzLP8f1GJqkJZi5zO4k4FOHzSgUufgLil63gnxvMpjWkgfeQN7A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@mariozechner/clipboard-linux-x64-musl@0.3.0': - resolution: {integrity: sha512-+PnR48/x9GMY5Kh8BLjzHMx6trOegMtxAuqTM9X/bhV3QuW6sLLd7nojDHSGj/ZueK6i0tcQxvOrgNLozVtNDA==} + '@mariozechner/clipboard-linux-x64-musl@0.3.2': + resolution: {integrity: sha512-xVUtnoMQ8v2JVyfJLKKXACA6avdnchdbBkTsZs8BgJQo29qwCp5NIHAUO8gbJ40iaEGToW5RlmVk2M9V0HsHEw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@mariozechner/clipboard-win32-arm64-msvc@0.3.0': - resolution: {integrity: sha512-+dy2vZ1Ph4EYj0cotB+bVUVk/uKl2bh9LOp/zlnFqoCCYDN6sm+L0VyIOPPo3hjoEVdGpHe1MUxp3qG/OLwXgg==} + '@mariozechner/clipboard-win32-arm64-msvc@0.3.2': + resolution: {integrity: sha512-AEgg95TNi8TGgak2wSXZkXKCvAUTjWoU1Pqb0ON7JHrX78p616XUFNTJohtIon3e0w6k0pYPZeCuqRCza/Tqeg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@mariozechner/clipboard-win32-x64-msvc@0.3.0': - resolution: {integrity: sha512-dfpHrUpKHl7ad3xVGE1+gIN3cEnjjPZa4I0BIYMuj2OKq07Gf1FKTXMypB41rDFv6XNzcfhYQnY+ZNgIu9FB8A==} + '@mariozechner/clipboard-win32-x64-msvc@0.3.2': + resolution: {integrity: sha512-tGRuYpZwDOD7HBrCpyRuhGnHHSCknELvqwKKUG4JSfSB7JIU7LKRh6zx6fMUOQd8uISK35TjFg5UcNih+vJhFA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@mariozechner/clipboard@0.3.0': - resolution: {integrity: sha512-tQrCRAtr58BLmWcvwCqlJo5GJgqBGb3zwOBFFBKCEKvRgD8y/EawhCyXsfOh9XOOde1NTAYsYuYyVOYw2tLnoQ==} + '@mariozechner/clipboard@0.3.2': + resolution: {integrity: sha512-IHQpksNjo7EAtGuHFU+tbWDp5LarH3HU/8WiB9O70ZEoBPHOg0/6afwSLK0QyNMMmx4Bpi/zl6+DcBXe95nWYA==} engines: {node: '>= 10'} '@mariozechner/jiti@2.6.5': @@ -2224,13 +2361,27 @@ packages: resolution: {integrity: sha512-OogyXMlnWse/r6Bvlou4SDY178LDzcVkG6KrqzPh5d89cyOoirnwFn7H3slSn/+0FIZEzHYfO6RaBPRwjtg5qg==} engines: {node: '>=20.0.0'} + '@mariozechner/pi-agent-core@0.52.9': + resolution: {integrity: sha512-x6OxWN5QnZGfK5TU822Xgcy5QeN3ZGIBaZiZISRI64BZYj5ENc40j4T+fbeRnAsrEkJoMC1Him8ixw68PRTovQ==} + engines: {node: '>=20.0.0'} + '@mariozechner/pi-ai@0.50.3': resolution: {integrity: sha512-IfA/rn+RuBHxZ1PMlH+pqMr3D7X/r6ArSS9TWprNQ/BEypH1aNXvr5u44/Nzs1X3hKyhWiLCcwbx7Hvl3s5qWg==} engines: {node: '>=20.0.0'} hasBin: true - '@mariozechner/pi-coding-agent@0.50.3': - resolution: {integrity: sha512-Bu4Qwdu2NbU6GFqI2TCQyr7u91TMA8g9ynSqzr5EvJSI1qxdDz8VWnN3uh+noKI9NtAX/YG8vmsSHuvLVXr3Tw==} + '@mariozechner/pi-ai@0.50.9': + resolution: {integrity: sha512-a6sLIHLH+wo5zTFoo/0AE/P6GPyJzaXnE86z89t6tINzeSdKMApZZ+B4Cy4U3GpsYfxuZ9gBJlcKbfj+oKP3wg==} + engines: {node: '>=20.0.0'} + hasBin: true + + '@mariozechner/pi-ai@0.52.9': + resolution: {integrity: sha512-sCdIVw7iomWcaEnVUFwq9e69Dat0ZCy/+XGkTtroY8H+GxHmDKUCrJV/yMpu8Jq9Oof11yCo7F/Vco7dvYCLZg==} + engines: {node: '>=20.0.0'} + hasBin: true + + '@mariozechner/pi-coding-agent@0.52.9': + resolution: {integrity: sha512-XZ0z2k8awEzKVj83Vwj64aO1rTaHe7xk3GppHVdjkvaDDXRWwUtTdm9benH3kuYQ9Po+vuGc9plcApTV9LXpZw==} engines: {node: '>=20.0.0'} hasBin: true @@ -2238,6 +2389,10 @@ packages: resolution: {integrity: sha512-kfigzWQtCKXTXlwdA7aMwhS6w8MqdLFUSOi3DoPOFaVQrphlMW0NF97zDq+kQgaQVEI6l0GF9HW/kyMoDh4OhA==} engines: {node: '>=20.0.0'} + '@mariozechner/pi-tui@0.52.9': + resolution: {integrity: sha512-YHVZLRz9ULVlubRi51P1AQj7oOb+caiTv/HsNa7r587ale8kLNBx2Sa99fRWuFhNPu+SniwVi4pgqvkrWAcd/w==} + engines: {node: '>=20.0.0'} + '@mistralai/mistralai@1.10.0': resolution: {integrity: sha512-tdIgWs4Le8vpvPiUEWne6tK0qbVc+jMenujnvTqOjogrJUsCSQhus0tHTU1avDDh5//Rq2dFgP9mWRAdIEoBqg==} @@ -2444,6 +2599,36 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@radix-ui/primitive@1.1.3': resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} @@ -3011,6 +3196,10 @@ packages: resolution: {integrity: sha512-6vjCHD6vaY8KubeNw2Fg3EK0KLGQYdldG4fYgQmA0xSW0dJ8G2xFhSOdrlUakWVoP5JuWHtFODg3PNd/DN3FDA==} engines: {node: '>=18.0.0'} + '@smithy/core@3.22.1': + resolution: {integrity: sha512-x3ie6Crr58MWrm4viHqqy2Du2rHYZjwu8BekasrQx4ca+Y24dzVAwq3yErdqIbc2G3I0kLQA13PQ+/rde+u65g==} + engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.2.8': resolution: {integrity: sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw==} engines: {node: '>=18.0.0'} @@ -3063,10 +3252,18 @@ packages: resolution: {integrity: sha512-9JMKHVJtW9RysTNjcBZQHDwB0p3iTP6B1IfQV4m+uCevkVd/VuLgwfqk5cnI4RHcp4cPwoIvxQqN4B1sxeHo8Q==} engines: {node: '>=18.0.0'} + '@smithy/middleware-endpoint@4.4.13': + resolution: {integrity: sha512-x6vn0PjYmGdNuKh/juUJJewZh7MoQ46jYaJ2mvekF4EesMuFfrl4LaW/k97Zjf8PTCPQmPgMvwewg7eNoH9n5w==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-retry@4.4.29': resolution: {integrity: sha512-bmTn75a4tmKRkC5w61yYQLb3DmxNzB8qSVu9SbTYqW6GAL0WXO2bDZuMAn/GJSbOdHEdjZvWxe+9Kk015bw6Cg==} engines: {node: '>=18.0.0'} + '@smithy/middleware-retry@4.4.30': + resolution: {integrity: sha512-CBGyFvN0f8hlnqKH/jckRDz78Snrp345+PVk8Ux7pnkUCW97Iinse59lY78hBt04h1GZ6hjBN94BRwZy1xC8Bg==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-serde@4.2.9': resolution: {integrity: sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==} engines: {node: '>=18.0.0'} @@ -3083,6 +3280,10 @@ packages: resolution: {integrity: sha512-q9u+MSbJVIJ1QmJ4+1u+cERXkrhuILCBDsJUBAW1MPE6sFonbCNaegFuwW9ll8kh5UdyY3jOkoOGlc7BesoLpg==} engines: {node: '>=18.0.0'} + '@smithy/node-http-handler@4.4.9': + resolution: {integrity: sha512-KX5Wml5mF+luxm1szW4QDz32e3NObgJ4Fyw+irhph4I/2geXwUy4jkIMUs5ZPGflRBeR6BUkC2wqIab4Llgm3w==} + engines: {node: '>=18.0.0'} + '@smithy/property-provider@4.2.8': resolution: {integrity: sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==} engines: {node: '>=18.0.0'} @@ -3115,6 +3316,10 @@ packages: resolution: {integrity: sha512-SERgNg5Z1U+jfR6/2xPYjSEHY1t3pyTHC/Ma3YQl6qWtmiL42bvNId3W/oMUWIwu7ekL2FMPdqAmwbQegM7HeQ==} engines: {node: '>=18.0.0'} + '@smithy/smithy-client@4.11.2': + resolution: {integrity: sha512-SCkGmFak/xC1n7hKRsUr6wOnBTJ3L22Qd4e8H1fQIuKTAjntwgU8lrdMe7uHdiT2mJAOWA/60qaW9tiMu69n1A==} + engines: {node: '>=18.0.0'} + '@smithy/types@4.12.0': resolution: {integrity: sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==} engines: {node: '>=18.0.0'} @@ -3151,10 +3356,18 @@ packages: resolution: {integrity: sha512-/9zcatsCao9h6g18p/9vH9NIi5PSqhCkxQ/tb7pMgRFnqYp9XUOyOlGPDMHzr8n5ih6yYgwJEY2MLEobUgi47w==} engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-browser@4.3.29': + resolution: {integrity: sha512-nIGy3DNRmOjaYaaKcQDzmWsro9uxlaqUOhZDHQed9MW/GmkBZPtnU70Pu1+GT9IBmUXwRdDuiyaeiy9Xtpn3+Q==} + engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-node@4.2.31': resolution: {integrity: sha512-JTvoApUXA5kbpceI2vuqQzRjeTbLpx1eoa5R/YEZbTgtxvIB7AQZxFJ0SEyfCpgPCyVV9IT7we+ytSeIB3CyWA==} engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-node@4.2.32': + resolution: {integrity: sha512-7dtFff6pu5fsjqrVve0YMhrnzJtccCWDacNKOkiZjJ++fmjGExmmSu341x+WU6Oc1IccL7lDuaUj7SfrHpWc5Q==} + engines: {node: '>=18.0.0'} + '@smithy/util-endpoints@3.2.8': resolution: {integrity: sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==} engines: {node: '>=18.0.0'} @@ -3175,6 +3388,10 @@ packages: resolution: {integrity: sha512-jbqemy51UFSZSp2y0ZmRfckmrzuKww95zT9BYMmuJ8v3altGcqjwoV1tzpOwuHaKrwQrCjIzOib499ymr2f98g==} engines: {node: '>=18.0.0'} + '@smithy/util-stream@4.5.11': + resolution: {integrity: sha512-lKmZ0S/3Qj2OF5H1+VzvDLb6kRxGzZHq6f3rAsoSu5cTLGsn3v3VQBA8czkNNXlLjoFEtVu3OQT2jEeOtOE2CA==} + engines: {node: '>=18.0.0'} + '@smithy/util-uri-escape@4.2.0': resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} engines: {node: '>=18.0.0'} @@ -4263,6 +4480,9 @@ packages: bowser@2.13.1: resolution: {integrity: sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==} + bowser@2.14.1: + resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} + bplist-creator@0.1.0: resolution: {integrity: sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==} @@ -5491,6 +5711,10 @@ packages: resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} hasBin: true + fast-xml-parser@5.3.4: + resolution: {integrity: sha512-EFd6afGmXlCx8H8WTZHhAoDaWaGyuIBoZJ2mknrNxug+aZKjkp0a0dlars9Izl+jF+7Gu1/5f/2h68cQpe0IiA==} + hasBin: true + fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -5742,16 +5966,14 @@ packages: deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true - glob@11.1.0: - resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} - engines: {node: 20 || >=22} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - hasBin: true - glob@13.0.0: resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==} engines: {node: 20 || >=22} + glob@13.0.1: + resolution: {integrity: sha512-B7U/vJpE3DkJ5WXTgTpTRN63uV42DseiXXKMwG14LQBXmsdeIoHAPbU/MEo6II0k5ED74uc2ZGTC6MwHFQhF6w==} + engines: {node: 20 || >=22} + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me @@ -5915,6 +6137,10 @@ packages: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} + hosted-git-info@9.0.2: + resolution: {integrity: sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==} + engines: {node: ^20.17.0 || >=22.9.0} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -6286,10 +6512,6 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jackspeak@4.1.1: - resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} - engines: {node: 20 || >=22} - jake@10.9.4: resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} engines: {node: '>=10'} @@ -6675,6 +6897,9 @@ packages: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -7019,6 +7244,10 @@ packages: resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} + minimatch@10.1.2: + resolution: {integrity: sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -7696,6 +7925,10 @@ packages: prosemirror-view@1.41.5: resolution: {integrity: sha512-UDQbIPnDrjE8tqUBbPmCOZgtd75htE6W3r0JCmY9bL6W1iemDM37MZEKC49d+tdQ0v/CKx4gjxLoLsfkD2NiZA==} + protobufjs@7.5.4: + resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} + engines: {node: '>=12.0.0'} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -9313,6 +9546,18 @@ packages: utf-8-validate: optional: true + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + wsl-utils@0.3.1: resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==} engines: {node: '>=20'} @@ -9456,6 +9701,12 @@ snapshots: optionalDependencies: zod: 4.3.6 + '@anthropic-ai/sdk@0.73.0(zod@4.3.6)': + dependencies: + json-schema-to-ts: 3.1.1 + optionalDependencies: + zod: 4.3.6 + '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 @@ -9540,6 +9791,58 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-bedrock-runtime@3.985.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.973.7 + '@aws-sdk/credential-provider-node': 3.972.6 + '@aws-sdk/eventstream-handler-node': 3.972.5 + '@aws-sdk/middleware-eventstream': 3.972.3 + '@aws-sdk/middleware-host-header': 3.972.3 + '@aws-sdk/middleware-logger': 3.972.3 + '@aws-sdk/middleware-recursion-detection': 3.972.3 + '@aws-sdk/middleware-user-agent': 3.972.7 + '@aws-sdk/middleware-websocket': 3.972.5 + '@aws-sdk/region-config-resolver': 3.972.3 + '@aws-sdk/token-providers': 3.985.0 + '@aws-sdk/types': 3.973.1 + '@aws-sdk/util-endpoints': 3.985.0 + '@aws-sdk/util-user-agent-browser': 3.972.3 + '@aws-sdk/util-user-agent-node': 3.972.5 + '@smithy/config-resolver': 4.4.6 + '@smithy/core': 3.22.1 + '@smithy/eventstream-serde-browser': 4.2.8 + '@smithy/eventstream-serde-config-resolver': 4.3.8 + '@smithy/eventstream-serde-node': 4.2.8 + '@smithy/fetch-http-handler': 5.3.9 + '@smithy/hash-node': 4.2.8 + '@smithy/invalid-dependency': 4.2.8 + '@smithy/middleware-content-length': 4.2.8 + '@smithy/middleware-endpoint': 4.4.13 + '@smithy/middleware-retry': 4.4.30 + '@smithy/middleware-serde': 4.2.9 + '@smithy/middleware-stack': 4.2.8 + '@smithy/node-config-provider': 4.3.8 + '@smithy/node-http-handler': 4.4.9 + '@smithy/protocol-http': 5.3.8 + '@smithy/smithy-client': 4.11.2 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.29 + '@smithy/util-defaults-mode-node': 4.2.32 + '@smithy/util-endpoints': 3.2.8 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-retry': 4.2.8 + '@smithy/util-stream': 4.5.11 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/client-sso@3.975.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -9583,6 +9886,49 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-sso@3.985.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.973.7 + '@aws-sdk/middleware-host-header': 3.972.3 + '@aws-sdk/middleware-logger': 3.972.3 + '@aws-sdk/middleware-recursion-detection': 3.972.3 + '@aws-sdk/middleware-user-agent': 3.972.7 + '@aws-sdk/region-config-resolver': 3.972.3 + '@aws-sdk/types': 3.973.1 + '@aws-sdk/util-endpoints': 3.985.0 + '@aws-sdk/util-user-agent-browser': 3.972.3 + '@aws-sdk/util-user-agent-node': 3.972.5 + '@smithy/config-resolver': 4.4.6 + '@smithy/core': 3.22.1 + '@smithy/fetch-http-handler': 5.3.9 + '@smithy/hash-node': 4.2.8 + '@smithy/invalid-dependency': 4.2.8 + '@smithy/middleware-content-length': 4.2.8 + '@smithy/middleware-endpoint': 4.4.13 + '@smithy/middleware-retry': 4.4.30 + '@smithy/middleware-serde': 4.2.9 + '@smithy/middleware-stack': 4.2.8 + '@smithy/node-config-provider': 4.3.8 + '@smithy/node-http-handler': 4.4.9 + '@smithy/protocol-http': 5.3.8 + '@smithy/smithy-client': 4.11.2 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.29 + '@smithy/util-defaults-mode-node': 4.2.32 + '@smithy/util-endpoints': 3.2.8 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-retry': 4.2.8 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/core@3.973.4': dependencies: '@aws-sdk/types': 3.973.1 @@ -9599,6 +9945,22 @@ snapshots: '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 + '@aws-sdk/core@3.973.7': + dependencies: + '@aws-sdk/types': 3.973.1 + '@aws-sdk/xml-builder': 3.972.4 + '@smithy/core': 3.22.1 + '@smithy/node-config-provider': 4.3.8 + '@smithy/property-provider': 4.2.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/signature-v4': 5.3.8 + '@smithy/smithy-client': 4.11.2 + '@smithy/types': 4.12.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + '@aws-sdk/credential-provider-env@3.972.2': dependencies: '@aws-sdk/core': 3.973.4 @@ -9607,6 +9969,14 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 + '@aws-sdk/credential-provider-env@3.972.5': + dependencies: + '@aws-sdk/core': 3.973.7 + '@aws-sdk/types': 3.973.1 + '@smithy/property-provider': 4.2.8 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@aws-sdk/credential-provider-http@3.972.4': dependencies: '@aws-sdk/core': 3.973.4 @@ -9620,6 +9990,19 @@ snapshots: '@smithy/util-stream': 4.5.10 tslib: 2.8.1 + '@aws-sdk/credential-provider-http@3.972.7': + dependencies: + '@aws-sdk/core': 3.973.7 + '@aws-sdk/types': 3.973.1 + '@smithy/fetch-http-handler': 5.3.9 + '@smithy/node-http-handler': 4.4.9 + '@smithy/property-provider': 4.2.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/smithy-client': 4.11.2 + '@smithy/types': 4.12.0 + '@smithy/util-stream': 4.5.11 + tslib: 2.8.1 + '@aws-sdk/credential-provider-ini@3.972.2': dependencies: '@aws-sdk/core': 3.973.4 @@ -9639,6 +10022,25 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-ini@3.972.5': + dependencies: + '@aws-sdk/core': 3.973.7 + '@aws-sdk/credential-provider-env': 3.972.5 + '@aws-sdk/credential-provider-http': 3.972.7 + '@aws-sdk/credential-provider-login': 3.972.5 + '@aws-sdk/credential-provider-process': 3.972.5 + '@aws-sdk/credential-provider-sso': 3.972.5 + '@aws-sdk/credential-provider-web-identity': 3.972.5 + '@aws-sdk/nested-clients': 3.985.0 + '@aws-sdk/types': 3.973.1 + '@smithy/credential-provider-imds': 4.2.8 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-login@3.972.2': dependencies: '@aws-sdk/core': 3.973.4 @@ -9652,6 +10054,19 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-login@3.972.5': + dependencies: + '@aws-sdk/core': 3.973.7 + '@aws-sdk/nested-clients': 3.985.0 + '@aws-sdk/types': 3.973.1 + '@smithy/property-provider': 4.2.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-node@3.972.2': dependencies: '@aws-sdk/credential-provider-env': 3.972.2 @@ -9669,6 +10084,23 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-node@3.972.6': + dependencies: + '@aws-sdk/credential-provider-env': 3.972.5 + '@aws-sdk/credential-provider-http': 3.972.7 + '@aws-sdk/credential-provider-ini': 3.972.5 + '@aws-sdk/credential-provider-process': 3.972.5 + '@aws-sdk/credential-provider-sso': 3.972.5 + '@aws-sdk/credential-provider-web-identity': 3.972.5 + '@aws-sdk/types': 3.973.1 + '@smithy/credential-provider-imds': 4.2.8 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-process@3.972.2': dependencies: '@aws-sdk/core': 3.973.4 @@ -9678,6 +10110,15 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 + '@aws-sdk/credential-provider-process@3.972.5': + dependencies: + '@aws-sdk/core': 3.973.7 + '@aws-sdk/types': 3.973.1 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@aws-sdk/credential-provider-sso@3.972.2': dependencies: '@aws-sdk/client-sso': 3.975.0 @@ -9691,6 +10132,19 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-sso@3.972.5': + dependencies: + '@aws-sdk/client-sso': 3.985.0 + '@aws-sdk/core': 3.973.7 + '@aws-sdk/token-providers': 3.985.0 + '@aws-sdk/types': 3.973.1 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-web-identity@3.972.2': dependencies: '@aws-sdk/core': 3.973.4 @@ -9703,6 +10157,18 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-web-identity@3.972.5': + dependencies: + '@aws-sdk/core': 3.973.7 + '@aws-sdk/nested-clients': 3.985.0 + '@aws-sdk/types': 3.973.1 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/eventstream-handler-node@3.972.2': dependencies: '@aws-sdk/types': 3.973.1 @@ -9710,6 +10176,13 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 + '@aws-sdk/eventstream-handler-node@3.972.5': + dependencies: + '@aws-sdk/types': 3.973.1 + '@smithy/eventstream-codec': 4.2.8 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@aws-sdk/middleware-eventstream@3.972.2': dependencies: '@aws-sdk/types': 3.973.1 @@ -9717,6 +10190,13 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 + '@aws-sdk/middleware-eventstream@3.972.3': + dependencies: + '@aws-sdk/types': 3.973.1 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@aws-sdk/middleware-host-header@3.972.2': dependencies: '@aws-sdk/types': 3.973.1 @@ -9724,12 +10204,25 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 + '@aws-sdk/middleware-host-header@3.972.3': + dependencies: + '@aws-sdk/types': 3.973.1 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@aws-sdk/middleware-logger@3.972.2': dependencies: '@aws-sdk/types': 3.973.1 '@smithy/types': 4.12.0 tslib: 2.8.1 + '@aws-sdk/middleware-logger@3.972.3': + dependencies: + '@aws-sdk/types': 3.973.1 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@aws-sdk/middleware-recursion-detection@3.972.2': dependencies: '@aws-sdk/types': 3.973.1 @@ -9738,6 +10231,14 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 + '@aws-sdk/middleware-recursion-detection@3.972.3': + dependencies: + '@aws-sdk/types': 3.973.1 + '@aws/lambda-invoke-store': 0.2.3 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@aws-sdk/middleware-user-agent@3.972.4': dependencies: '@aws-sdk/core': 3.973.4 @@ -9748,6 +10249,16 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 + '@aws-sdk/middleware-user-agent@3.972.7': + dependencies: + '@aws-sdk/core': 3.973.7 + '@aws-sdk/types': 3.973.1 + '@aws-sdk/util-endpoints': 3.985.0 + '@smithy/core': 3.22.1 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@aws-sdk/middleware-websocket@3.972.2': dependencies: '@aws-sdk/types': 3.973.1 @@ -9761,6 +10272,21 @@ snapshots: '@smithy/util-hex-encoding': 4.2.0 tslib: 2.8.1 + '@aws-sdk/middleware-websocket@3.972.5': + dependencies: + '@aws-sdk/types': 3.973.1 + '@aws-sdk/util-format-url': 3.972.3 + '@smithy/eventstream-codec': 4.2.8 + '@smithy/eventstream-serde-browser': 4.2.8 + '@smithy/fetch-http-handler': 5.3.9 + '@smithy/protocol-http': 5.3.8 + '@smithy/signature-v4': 5.3.8 + '@smithy/types': 4.12.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + '@aws-sdk/nested-clients@3.975.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -9847,6 +10373,49 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/nested-clients@3.985.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.973.7 + '@aws-sdk/middleware-host-header': 3.972.3 + '@aws-sdk/middleware-logger': 3.972.3 + '@aws-sdk/middleware-recursion-detection': 3.972.3 + '@aws-sdk/middleware-user-agent': 3.972.7 + '@aws-sdk/region-config-resolver': 3.972.3 + '@aws-sdk/types': 3.973.1 + '@aws-sdk/util-endpoints': 3.985.0 + '@aws-sdk/util-user-agent-browser': 3.972.3 + '@aws-sdk/util-user-agent-node': 3.972.5 + '@smithy/config-resolver': 4.4.6 + '@smithy/core': 3.22.1 + '@smithy/fetch-http-handler': 5.3.9 + '@smithy/hash-node': 4.2.8 + '@smithy/invalid-dependency': 4.2.8 + '@smithy/middleware-content-length': 4.2.8 + '@smithy/middleware-endpoint': 4.4.13 + '@smithy/middleware-retry': 4.4.30 + '@smithy/middleware-serde': 4.2.9 + '@smithy/middleware-stack': 4.2.8 + '@smithy/node-config-provider': 4.3.8 + '@smithy/node-http-handler': 4.4.9 + '@smithy/protocol-http': 5.3.8 + '@smithy/smithy-client': 4.11.2 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.29 + '@smithy/util-defaults-mode-node': 4.2.32 + '@smithy/util-endpoints': 3.2.8 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-retry': 4.2.8 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/region-config-resolver@3.972.2': dependencies: '@aws-sdk/types': 3.973.1 @@ -9855,6 +10424,14 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 + '@aws-sdk/region-config-resolver@3.972.3': + dependencies: + '@aws-sdk/types': 3.973.1 + '@smithy/config-resolver': 4.4.6 + '@smithy/node-config-provider': 4.3.8 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@aws-sdk/token-providers@3.975.0': dependencies: '@aws-sdk/core': 3.973.4 @@ -9879,6 +10456,18 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/token-providers@3.985.0': + dependencies: + '@aws-sdk/core': 3.973.7 + '@aws-sdk/nested-clients': 3.985.0 + '@aws-sdk/types': 3.973.1 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/types@3.972.0': dependencies: '@smithy/types': 4.12.0 @@ -9897,6 +10486,14 @@ snapshots: '@smithy/util-endpoints': 3.2.8 tslib: 2.8.1 + '@aws-sdk/util-endpoints@3.985.0': + dependencies: + '@aws-sdk/types': 3.973.1 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 + '@smithy/util-endpoints': 3.2.8 + tslib: 2.8.1 + '@aws-sdk/util-format-url@3.972.2': dependencies: '@aws-sdk/types': 3.973.1 @@ -9904,6 +10501,13 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 + '@aws-sdk/util-format-url@3.972.3': + dependencies: + '@aws-sdk/types': 3.973.1 + '@smithy/querystring-builder': 4.2.8 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@aws-sdk/util-locate-window@3.965.4': dependencies: tslib: 2.8.1 @@ -9915,6 +10519,13 @@ snapshots: bowser: 2.13.1 tslib: 2.8.1 + '@aws-sdk/util-user-agent-browser@3.972.3': + dependencies: + '@aws-sdk/types': 3.973.1 + '@smithy/types': 4.12.0 + bowser: 2.14.1 + tslib: 2.8.1 + '@aws-sdk/util-user-agent-node@3.972.2': dependencies: '@aws-sdk/middleware-user-agent': 3.972.4 @@ -9923,12 +10534,26 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 + '@aws-sdk/util-user-agent-node@3.972.5': + dependencies: + '@aws-sdk/middleware-user-agent': 3.972.7 + '@aws-sdk/types': 3.973.1 + '@smithy/node-config-provider': 4.3.8 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@aws-sdk/xml-builder@3.972.2': dependencies: '@smithy/types': 4.12.0 fast-xml-parser: 5.2.5 tslib: 2.8.1 + '@aws-sdk/xml-builder@3.972.4': + dependencies: + '@smithy/types': 4.12.0 + fast-xml-parser: 5.3.4 + tslib: 2.8.1 + '@aws/lambda-invoke-store@0.2.3': {} '@babel/code-frame@7.10.4': @@ -11238,6 +11863,18 @@ snapshots: - supports-color - utf-8-validate + '@google/genai@1.40.0(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))': + dependencies: + google-auth-library: 10.5.0 + protobufjs: 7.5.4 + ws: 8.19.0 + optionalDependencies: + '@modelcontextprotocol/sdk': 1.25.3(hono@4.11.7)(zod@4.3.6) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + '@grammyjs/types@3.23.0': {} '@hono/node-server@1.19.9(hono@4.11.7)': @@ -11408,6 +12045,10 @@ snapshots: dependencies: '@isaacs/balanced-match': 4.0.1 + '@isaacs/brace-expansion@5.0.1': + dependencies: + '@isaacs/balanced-match': 4.0.1 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -11525,53 +12166,58 @@ snapshots: transitivePeerDependencies: - supports-color - '@mariozechner/clipboard-darwin-arm64@0.3.0': + '@mariozechner/clipboard-darwin-arm64@0.3.2': optional: true - '@mariozechner/clipboard-darwin-universal@0.3.0': + '@mariozechner/clipboard-darwin-universal@0.3.2': optional: true - '@mariozechner/clipboard-darwin-x64@0.3.0': + '@mariozechner/clipboard-darwin-x64@0.3.2': optional: true - '@mariozechner/clipboard-linux-arm64-gnu@0.3.0': + '@mariozechner/clipboard-linux-arm64-gnu@0.3.2': optional: true - '@mariozechner/clipboard-linux-riscv64-gnu@0.3.0': + '@mariozechner/clipboard-linux-arm64-musl@0.3.2': optional: true - '@mariozechner/clipboard-linux-x64-gnu@0.3.0': + '@mariozechner/clipboard-linux-riscv64-gnu@0.3.2': optional: true - '@mariozechner/clipboard-linux-x64-musl@0.3.0': + '@mariozechner/clipboard-linux-x64-gnu@0.3.2': optional: true - '@mariozechner/clipboard-win32-arm64-msvc@0.3.0': + '@mariozechner/clipboard-linux-x64-musl@0.3.2': optional: true - '@mariozechner/clipboard-win32-x64-msvc@0.3.0': + '@mariozechner/clipboard-win32-arm64-msvc@0.3.2': optional: true - '@mariozechner/clipboard@0.3.0': + '@mariozechner/clipboard-win32-x64-msvc@0.3.2': + optional: true + + '@mariozechner/clipboard@0.3.2': optionalDependencies: - '@mariozechner/clipboard-darwin-arm64': 0.3.0 - '@mariozechner/clipboard-darwin-universal': 0.3.0 - '@mariozechner/clipboard-darwin-x64': 0.3.0 - '@mariozechner/clipboard-linux-arm64-gnu': 0.3.0 - '@mariozechner/clipboard-linux-riscv64-gnu': 0.3.0 - '@mariozechner/clipboard-linux-x64-gnu': 0.3.0 - '@mariozechner/clipboard-linux-x64-musl': 0.3.0 - '@mariozechner/clipboard-win32-arm64-msvc': 0.3.0 - '@mariozechner/clipboard-win32-x64-msvc': 0.3.0 + '@mariozechner/clipboard-darwin-arm64': 0.3.2 + '@mariozechner/clipboard-darwin-universal': 0.3.2 + '@mariozechner/clipboard-darwin-x64': 0.3.2 + '@mariozechner/clipboard-linux-arm64-gnu': 0.3.2 + '@mariozechner/clipboard-linux-arm64-musl': 0.3.2 + '@mariozechner/clipboard-linux-riscv64-gnu': 0.3.2 + '@mariozechner/clipboard-linux-x64-gnu': 0.3.2 + '@mariozechner/clipboard-linux-x64-musl': 0.3.2 + '@mariozechner/clipboard-win32-arm64-msvc': 0.3.2 + '@mariozechner/clipboard-win32-x64-msvc': 0.3.2 + optional: true '@mariozechner/jiti@2.6.5': dependencies: std-env: 3.10.0 yoctocolors: 2.1.2 - '@mariozechner/pi-agent-core@0.50.3(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.18.3)(zod@4.3.6)': + '@mariozechner/pi-agent-core@0.50.3(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.19.0)(zod@4.3.6)': dependencies: - '@mariozechner/pi-ai': 0.50.3(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.18.3)(zod@4.3.6) + '@mariozechner/pi-ai': 0.50.9(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.19.0)(zod@4.3.6) '@mariozechner/pi-tui': 0.50.3 transitivePeerDependencies: - '@modelcontextprotocol/sdk' @@ -11582,7 +12228,19 @@ snapshots: - ws - zod - '@mariozechner/pi-ai@0.50.3(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.18.3)(zod@4.3.6)': + '@mariozechner/pi-agent-core@0.52.9(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.19.0)(zod@4.3.6)': + dependencies: + '@mariozechner/pi-ai': 0.52.9(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.19.0)(zod@4.3.6) + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - aws-crt + - bufferutil + - supports-color + - utf-8-validate + - ws + - zod + + '@mariozechner/pi-ai@0.50.3(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.19.0)(zod@4.3.6)': dependencies: '@anthropic-ai/sdk': 0.71.2(zod@4.3.6) '@aws-sdk/client-bedrock-runtime': 3.978.0 @@ -11592,7 +12250,7 @@ snapshots: ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) chalk: 5.6.2 - openai: 6.10.0(ws@8.18.3)(zod@4.3.6) + openai: 6.10.0(ws@8.19.0)(zod@4.3.6) partial-json: 0.1.7 proxy-agent: 6.5.0 undici: 7.19.2 @@ -11606,23 +12264,74 @@ snapshots: - ws - zod - '@mariozechner/pi-coding-agent@0.50.3(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.18.3)(zod@4.3.6)': + '@mariozechner/pi-ai@0.50.9(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.19.0)(zod@4.3.6)': + dependencies: + '@anthropic-ai/sdk': 0.71.2(zod@4.3.6) + '@aws-sdk/client-bedrock-runtime': 3.978.0 + '@google/genai': 1.34.0(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6)) + '@mistralai/mistralai': 1.10.0 + '@sinclair/typebox': 0.34.48 + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + chalk: 5.6.2 + openai: 6.10.0(ws@8.19.0)(zod@4.3.6) + partial-json: 0.1.7 + proxy-agent: 6.5.0 + undici: 7.19.2 + zod-to-json-schema: 3.25.1(zod@4.3.6) + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - aws-crt + - bufferutil + - supports-color + - utf-8-validate + - ws + - zod + + '@mariozechner/pi-ai@0.52.9(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.19.0)(zod@4.3.6)': + dependencies: + '@anthropic-ai/sdk': 0.73.0(zod@4.3.6) + '@aws-sdk/client-bedrock-runtime': 3.985.0 + '@google/genai': 1.40.0(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6)) + '@mistralai/mistralai': 1.10.0 + '@sinclair/typebox': 0.34.48 + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + chalk: 5.6.2 + openai: 6.10.0(ws@8.19.0)(zod@4.3.6) + partial-json: 0.1.7 + proxy-agent: 6.5.0 + undici: 7.19.2 + zod-to-json-schema: 3.25.1(zod@4.3.6) + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - aws-crt + - bufferutil + - supports-color + - utf-8-validate + - ws + - zod + + '@mariozechner/pi-coding-agent@0.52.9(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.19.0)(zod@4.3.6)': dependencies: - '@mariozechner/clipboard': 0.3.0 '@mariozechner/jiti': 2.6.5 - '@mariozechner/pi-agent-core': 0.50.3(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.18.3)(zod@4.3.6) - '@mariozechner/pi-ai': 0.50.3(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.18.3)(zod@4.3.6) - '@mariozechner/pi-tui': 0.50.3 + '@mariozechner/pi-agent-core': 0.52.9(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.19.0)(zod@4.3.6) + '@mariozechner/pi-ai': 0.52.9(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(ws@8.19.0)(zod@4.3.6) + '@mariozechner/pi-tui': 0.52.9 '@silvia-odwyer/photon-node': 0.3.4 chalk: 5.6.2 cli-highlight: 2.1.11 diff: 8.0.3 file-type: 21.3.0 - glob: 11.1.0 + glob: 13.0.1 + hosted-git-info: 9.0.2 + ignore: 7.0.5 marked: 15.0.12 - minimatch: 10.1.1 + minimatch: 10.1.2 proper-lockfile: 4.1.2 yaml: 2.8.2 + optionalDependencies: + '@mariozechner/clipboard': 0.3.2 transitivePeerDependencies: - '@modelcontextprotocol/sdk' - aws-crt @@ -11640,6 +12349,14 @@ snapshots: marked: 15.0.12 mime-types: 3.0.2 + '@mariozechner/pi-tui@0.52.9': + dependencies: + '@types/mime-types': 2.1.4 + chalk: 5.6.2 + get-east-asian-width: 1.4.0 + marked: 15.0.12 + mime-types: 3.0.2 + '@mistralai/mistralai@1.10.0': dependencies: zod: 3.25.76 @@ -11851,6 +12568,29 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + '@radix-ui/primitive@1.1.3': {} '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': @@ -12416,6 +13156,19 @@ snapshots: '@smithy/uuid': 1.1.0 tslib: 2.8.1 + '@smithy/core@3.22.1': + dependencies: + '@smithy/middleware-serde': 4.2.9 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-stream': 4.5.11 + '@smithy/util-utf8': 4.2.0 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + '@smithy/credential-provider-imds@4.2.8': dependencies: '@smithy/node-config-provider': 4.3.8 @@ -12499,6 +13252,17 @@ snapshots: '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 + '@smithy/middleware-endpoint@4.4.13': + dependencies: + '@smithy/core': 3.22.1 + '@smithy/middleware-serde': 4.2.9 + '@smithy/node-config-provider': 4.3.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 + '@smithy/util-middleware': 4.2.8 + tslib: 2.8.1 + '@smithy/middleware-retry@4.4.29': dependencies: '@smithy/node-config-provider': 4.3.8 @@ -12511,6 +13275,18 @@ snapshots: '@smithy/uuid': 1.1.0 tslib: 2.8.1 + '@smithy/middleware-retry@4.4.30': + dependencies: + '@smithy/node-config-provider': 4.3.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/service-error-classification': 4.2.8 + '@smithy/smithy-client': 4.11.2 + '@smithy/types': 4.12.0 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-retry': 4.2.8 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + '@smithy/middleware-serde@4.2.9': dependencies: '@smithy/protocol-http': 5.3.8 @@ -12537,6 +13313,14 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 + '@smithy/node-http-handler@4.4.9': + dependencies: + '@smithy/abort-controller': 4.2.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/querystring-builder': 4.2.8 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@smithy/property-provider@4.2.8': dependencies: '@smithy/types': 4.12.0 @@ -12588,6 +13372,16 @@ snapshots: '@smithy/util-stream': 4.5.10 tslib: 2.8.1 + '@smithy/smithy-client@4.11.2': + dependencies: + '@smithy/core': 3.22.1 + '@smithy/middleware-endpoint': 4.4.13 + '@smithy/middleware-stack': 4.2.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 + '@smithy/util-stream': 4.5.11 + tslib: 2.8.1 + '@smithy/types@4.12.0': dependencies: tslib: 2.8.1 @@ -12633,6 +13427,13 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 + '@smithy/util-defaults-mode-browser@4.3.29': + dependencies: + '@smithy/property-provider': 4.2.8 + '@smithy/smithy-client': 4.11.2 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@smithy/util-defaults-mode-node@4.2.31': dependencies: '@smithy/config-resolver': 4.4.6 @@ -12643,6 +13444,16 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 + '@smithy/util-defaults-mode-node@4.2.32': + dependencies: + '@smithy/config-resolver': 4.4.6 + '@smithy/credential-provider-imds': 4.2.8 + '@smithy/node-config-provider': 4.3.8 + '@smithy/property-provider': 4.2.8 + '@smithy/smithy-client': 4.11.2 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@smithy/util-endpoints@3.2.8': dependencies: '@smithy/node-config-provider': 4.3.8 @@ -12675,6 +13486,17 @@ snapshots: '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 + '@smithy/util-stream@4.5.11': + dependencies: + '@smithy/fetch-http-handler': 5.3.9 + '@smithy/node-http-handler': 4.4.9 + '@smithy/types': 4.12.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + '@smithy/util-uri-escape@4.2.0': dependencies: tslib: 2.8.1 @@ -13931,6 +14753,8 @@ snapshots: bowser@2.13.1: {} + bowser@2.14.1: {} + bplist-creator@0.1.0: dependencies: stream-buffers: 2.2.0 @@ -14959,7 +15783,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: @@ -14990,7 +15814,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -15518,6 +16342,10 @@ snapshots: dependencies: strnum: 2.1.2 + fast-xml-parser@5.3.4: + dependencies: + strnum: 2.1.2 + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -15813,21 +16641,18 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@11.1.0: - dependencies: - foreground-child: 3.3.1 - jackspeak: 4.1.1 - minimatch: 10.1.1 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 2.0.1 - glob@13.0.0: dependencies: minimatch: 10.1.1 minipass: 7.1.2 path-scurry: 2.0.1 + glob@13.0.1: + dependencies: + minimatch: 10.1.2 + minipass: 7.1.2 + path-scurry: 2.0.1 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -16075,6 +16900,10 @@ snapshots: dependencies: lru-cache: 10.4.3 + hosted-git-info@9.0.2: + dependencies: + lru-cache: 11.2.5 + html-escaper@2.0.2: {} html-escaper@3.0.3: {} @@ -16429,10 +17258,6 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@4.1.1: - dependencies: - '@isaacs/cliui': 8.0.2 - jake@10.9.4: dependencies: async: 3.2.6 @@ -16781,6 +17606,8 @@ snapshots: chalk: 5.6.2 is-unicode-supported: 1.3.0 + long@5.3.2: {} + longest-streak@3.1.0: {} loose-envify@1.4.0: @@ -17421,6 +18248,10 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.0 + minimatch@10.1.2: + dependencies: + '@isaacs/brace-expansion': 5.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -17727,9 +18558,9 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openai@6.10.0(ws@8.18.3)(zod@4.3.6): + openai@6.10.0(ws@8.19.0)(zod@4.3.6): optionalDependencies: - ws: 8.18.3 + ws: 8.19.0 zod: 4.3.6 optionator@0.9.4: @@ -18169,6 +19000,21 @@ snapshots: prosemirror-state: 1.4.4 prosemirror-transform: 1.11.0 + protobufjs@7.5.4: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 25.0.10 + long: 5.3.2 + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -20055,6 +20901,8 @@ snapshots: ws@8.18.3: {} + ws@8.19.0: {} + wsl-utils@0.3.1: dependencies: is-wsl: 3.1.0 diff --git a/src/agent/cli/commands/chat.ts b/src/agent/cli/commands/chat.ts index e083175c..0f26b528 100644 --- a/src/agent/cli/commands/chat.ts +++ b/src/agent/cli/commands/chat.ts @@ -21,13 +21,13 @@ import { } from "../../providers/index.js"; type ChatOptions = { - profile?: string; - provider?: string; - model?: string; - system?: string; - thinking?: string; - cwd?: string; - session?: string; + profile?: string | undefined; + provider?: string | undefined; + model?: string | undefined; + system?: string | undefined; + thinking?: string | undefined; + cwd?: string | undefined; + session?: string | undefined; help?: boolean; }; diff --git a/src/agent/cli/commands/credentials.ts b/src/agent/cli/commands/credentials.ts index 62a2b69f..71122a06 100644 --- a/src/agent/cli/commands/credentials.ts +++ b/src/agent/cli/commands/credentials.ts @@ -19,8 +19,8 @@ interface CredentialsOptions { force: boolean; coreOnly: boolean; skillsOnly: boolean; - pathOverride?: string; - skillsPathOverride?: string; + pathOverride?: string | undefined; + skillsPathOverride?: string | undefined; } function printHelp() { diff --git a/src/agent/cli/commands/run.ts b/src/agent/cli/commands/run.ts index df7127ab..2595de56 100644 --- a/src/agent/cli/commands/run.ts +++ b/src/agent/cli/commands/run.ts @@ -12,18 +12,17 @@ import type { ToolsConfig } from "../../tools/policy.js"; import { cyan, yellow, dim } from "../colors.js"; type RunOptions = { - profile?: string; - provider?: string; - model?: string; - apiKey?: string; - baseUrl?: string; - system?: string; - thinking?: string; - reasoning?: string; - cwd?: string; - session?: string; + profile?: string | undefined; + provider?: string | undefined; + model?: string | undefined; + apiKey?: string | undefined; + baseUrl?: string | undefined; + system?: string | undefined; + thinking?: string | undefined; + reasoning?: string | undefined; + cwd?: string | undefined; + session?: string | undefined; debug?: boolean; - toolsProfile?: string; toolsAllow?: string[]; toolsDeny?: string[]; help?: boolean; @@ -49,7 +48,6 @@ ${cyan("Options:")} ${yellow("--help")}, -h Show this help ${cyan("Tools Configuration:")} - ${yellow("--tools-profile")} P Tool profile (minimal, coding, web, full) ${yellow("--tools-allow")} T Allow specific tools (comma-separated) ${yellow("--tools-deny")} T Deny specific tools (comma-separated) @@ -125,10 +123,6 @@ function parseArgs(argv: string[]): { opts: RunOptions; prompt: string } { opts.debug = true; continue; } - if (arg === "--tools-profile") { - opts.toolsProfile = args.shift(); - continue; - } if (arg === "--tools-allow") { const value = args.shift(); opts.toolsAllow = value?.split(",").map((s) => s.trim()) ?? []; @@ -178,11 +172,8 @@ export async function runCommand(args: string[]): Promise { // Build tools config if any tools options are set let toolsConfig: ToolsConfig | undefined; - if (opts.toolsProfile || opts.toolsAllow || opts.toolsDeny) { + if (opts.toolsAllow || opts.toolsDeny) { toolsConfig = {}; - if (opts.toolsProfile) { - toolsConfig.profile = opts.toolsProfile as ToolsConfig["profile"]; - } if (opts.toolsAllow) { toolsConfig.allow = opts.toolsAllow; } diff --git a/src/agent/cli/commands/session.ts b/src/agent/cli/commands/session.ts index 149143c7..6f56dc66 100644 --- a/src/agent/cli/commands/session.ts +++ b/src/agent/cli/commands/session.ts @@ -147,7 +147,7 @@ function cmdShow(sessionId: string | undefined, showInternal = false) { process.exit(1); } - const session = matches[0]; + const session = matches[0]!; const content = readFileSync(session.path, "utf8"); const lines = content.trim().split("\n").filter(Boolean); @@ -235,7 +235,7 @@ function cmdDelete(sessionId: string | undefined) { process.exit(1); } - const session = matches[0]; + const session = matches[0]!; try { unlinkSync(session.path); diff --git a/src/agent/cli/commands/skills.ts b/src/agent/cli/commands/skills.ts index 34cea252..837fae67 100644 --- a/src/agent/cli/commands/skills.ts +++ b/src/agent/cli/commands/skills.ts @@ -29,7 +29,7 @@ interface ParsedArgs { args: string[]; verbose: boolean; force: boolean; - profile?: string; + profile?: string | undefined; } function printHelp() { diff --git a/src/agent/cli/commands/tools.ts b/src/agent/cli/commands/tools.ts index 2b8c998d..f5485d06 100644 --- a/src/agent/cli/commands/tools.ts +++ b/src/agent/cli/commands/tools.ts @@ -4,22 +4,20 @@ * Usage: * multica tools list [options] List available tools * multica tools groups Show all tool groups - * multica tools profiles Show all tool profiles */ import { createAllTools } from "../../tools.js"; import { filterTools, type ToolsConfig } from "../../tools/policy.js"; -import { TOOL_GROUPS, TOOL_PROFILES, expandToolGroups } from "../../tools/groups.js"; +import { TOOL_GROUPS, expandToolGroups } from "../../tools/groups.js"; import { cyan, yellow, green, dim } from "../colors.js"; -type Command = "list" | "groups" | "profiles" | "help"; +type Command = "list" | "groups" | "help"; interface ToolsOptions { command: Command; - profile?: string; allow?: string[]; deny?: string[]; - provider?: string; + provider?: string | undefined; isSubagent?: boolean; } @@ -30,11 +28,9 @@ ${cyan("Usage:")} multica tools [options] ${cyan("Commands:")} ${yellow("list")} List available tools (with optional filtering) ${yellow("groups")} Show all tool groups - ${yellow("profiles")} Show all tool profiles ${yellow("help")} Show this help ${cyan("Options for 'list':")} - ${yellow("--profile")} PROFILE Apply profile filter (minimal, coding, web, full) ${yellow("--allow")} TOOLS Allow specific tools (comma-separated) ${yellow("--deny")} TOOLS Deny specific tools (comma-separated) ${yellow("--provider")} NAME Apply provider-specific rules @@ -44,11 +40,8 @@ ${cyan("Examples:")} ${dim("# List all tools")} multica tools list - ${dim("# List tools with profile")} - multica tools list --profile coding - ${dim("# List tools with allow/deny")} - multica tools list --profile coding --deny exec + multica tools list --deny exec multica tools list --allow group:fs,web_fetch ${dim("# Show tool groups")} @@ -58,12 +51,13 @@ ${cyan("Examples:")} function parseArgs(argv: string[]): ToolsOptions { const args = [...argv]; - const command = (args.shift() || "help") as Command; + const raw = args.shift() || "help"; - if (command === "--help" || command === "-h") { + if (raw === "--help" || raw === "-h") { return { command: "help" }; } + const command = raw as Command; const opts: ToolsOptions = { command }; while (args.length > 0) { @@ -73,10 +67,6 @@ function parseArgs(argv: string[]): ToolsOptions { if (arg === "--help" || arg === "-h") { return { command: "help" }; } - if (arg === "--profile") { - opts.profile = args.shift(); - continue; - } if (arg === "--allow") { const value = args.shift(); opts.allow = value?.split(",").map((s) => s.trim()) ?? []; @@ -108,11 +98,8 @@ function cmdList(opts: ToolsOptions) { // Build config let config: ToolsConfig | undefined; - if (opts.profile || opts.allow || opts.deny) { + if (opts.allow || opts.deny) { config = {}; - if (opts.profile) { - config.profile = opts.profile as ToolsConfig["profile"]; - } if (opts.allow) { config.allow = opts.allow; } @@ -136,7 +123,6 @@ function cmdList(opts: ToolsOptions) { if (config || opts.provider || opts.isSubagent) { console.log("Applied filters:"); - if (opts.profile) console.log(` ${dim("Profile:")} ${yellow(opts.profile)}`); if (opts.allow) console.log(` ${dim("Allow:")} ${opts.allow.join(", ")}`); if (opts.deny) console.log(` ${dim("Deny:")} ${opts.deny.join(", ")}`); if (opts.provider) console.log(` ${dim("Provider:")} ${opts.provider}`); @@ -171,24 +157,6 @@ function cmdGroups() { } } -function cmdProfiles() { - console.log(`\n${cyan("Tool Profiles:")}\n`); - for (const [name, policy] of Object.entries(TOOL_PROFILES)) { - console.log(` ${yellow(name)}:`); - if (policy.allow) { - const expanded = expandToolGroups(policy.allow); - console.log(` ${dim("Allow:")} ${policy.allow.join(", ")}`); - console.log(` ${dim("Expands to:")} ${expanded.join(", ")}`); - } else { - console.log(` ${dim("Allow:")} (all tools)`); - } - if (policy.deny) { - console.log(` ${dim("Deny:")} ${policy.deny.join(", ")}`); - } - console.log(""); - } -} - export async function toolsCommand(args: string[]): Promise { const opts = parseArgs(args); @@ -199,9 +167,6 @@ export async function toolsCommand(args: string[]): Promise { case "groups": cmdGroups(); break; - case "profiles": - cmdProfiles(); - break; case "help": default: printHelp(); diff --git a/src/agent/cli/non-interactive.ts b/src/agent/cli/non-interactive.ts index 2cff5c4f..7284bf20 100644 --- a/src/agent/cli/non-interactive.ts +++ b/src/agent/cli/non-interactive.ts @@ -156,11 +156,8 @@ async function main() { // Build tools config if any tools options are set let toolsConfig: import("../tools/policy.js").ToolsConfig | undefined; - if (opts.toolsProfile || opts.toolsAllow || opts.toolsDeny) { + if (opts.toolsAllow || opts.toolsDeny) { toolsConfig = {}; - if (opts.toolsProfile) { - toolsConfig.profile = opts.toolsProfile as any; - } if (opts.toolsAllow) { toolsConfig.allow = opts.toolsAllow; } diff --git a/src/agent/cli/tools.ts b/src/agent/cli/tools.ts index d0301a5e..727f5c59 100644 --- a/src/agent/cli/tools.ts +++ b/src/agent/cli/tools.ts @@ -4,24 +4,22 @@ * * Usage: * pnpm tools:cli list # List all available tools - * pnpm tools:cli list --profile coding # List tools after applying profile + * pnpm tools:cli list --allow group:fs # List tools after allowing fs group * pnpm tools:cli list --deny exec # List tools after denying exec * pnpm tools:cli groups # Show all tool groups - * pnpm tools:cli profiles # Show all profiles */ import { createAllTools } from "../tools.js"; import { filterTools, type ToolsConfig } from "../tools/policy.js"; -import { TOOL_GROUPS, TOOL_PROFILES, expandToolGroups } from "../tools/groups.js"; +import { TOOL_GROUPS, expandToolGroups } from "../tools/groups.js"; -type Command = "list" | "groups" | "profiles" | "help"; +type Command = "list" | "groups" | "help"; interface CliOptions { command: Command; - profile?: string; allow?: string[]; deny?: string[]; - provider?: string; + provider?: string | undefined; isSubagent?: boolean; } @@ -31,11 +29,9 @@ function printUsage() { console.log("Commands:"); console.log(" list List available tools (with optional filtering)"); console.log(" groups Show all tool groups"); - console.log(" profiles Show all profiles"); console.log(" help Show this help"); console.log(""); console.log("Options for 'list':"); - console.log(" --profile PROFILE Apply profile filter (minimal, coding, web, full)"); console.log(" --allow TOOLS Allow specific tools (comma-separated)"); console.log(" --deny TOOLS Deny specific tools (comma-separated)"); console.log(" --provider NAME Apply provider-specific rules"); @@ -43,8 +39,7 @@ function printUsage() { console.log(""); console.log("Examples:"); console.log(" pnpm tools:cli list"); - console.log(" pnpm tools:cli list --profile coding"); - console.log(" pnpm tools:cli list --profile coding --deny exec"); + console.log(" pnpm tools:cli list --deny exec"); console.log(" pnpm tools:cli list --allow group:fs,web_fetch"); console.log(" pnpm tools:cli groups"); } @@ -59,11 +54,6 @@ function parseArgs(argv: string[]): CliOptions { const arg = args.shift(); if (!arg) break; - if (arg === "--profile") { - const value = args.shift(); - if (value) opts.profile = value; - continue; - } if (arg === "--allow") { const value = args.shift(); opts.allow = value?.split(",").map((s) => s.trim()) ?? []; @@ -75,8 +65,7 @@ function parseArgs(argv: string[]): CliOptions { continue; } if (arg === "--provider") { - const value = args.shift(); - if (value) opts.provider = value; + opts.provider = args.shift(); continue; } if (arg === "--subagent") { @@ -96,11 +85,8 @@ function listTools(opts: CliOptions) { // Build config let config: ToolsConfig | undefined; - if (opts.profile || opts.allow || opts.deny) { + if (opts.allow || opts.deny) { config = {}; - if (opts.profile) { - config.profile = opts.profile as any; - } if (opts.allow) { config.allow = opts.allow; } @@ -124,7 +110,6 @@ function listTools(opts: CliOptions) { if (config || opts.provider || opts.isSubagent) { console.log("Applied filters:"); - if (opts.profile) console.log(` Profile: ${opts.profile}`); if (opts.allow) console.log(` Allow: ${opts.allow.join(", ")}`); if (opts.deny) console.log(` Deny: ${opts.deny.join(", ")}`); if (opts.provider) console.log(` Provider: ${opts.provider}`); @@ -160,25 +145,6 @@ function showGroups() { } } -function showProfiles() { - console.log("Tool Profiles:"); - console.log(""); - for (const [name, policy] of Object.entries(TOOL_PROFILES)) { - console.log(` ${name}:`); - if (policy.allow) { - const expanded = expandToolGroups(policy.allow); - console.log(` Allow: ${policy.allow.join(", ")}`); - console.log(` Expands to: ${expanded.join(", ")}`); - } else { - console.log(` Allow: (all tools)`); - } - if (policy.deny) { - console.log(` Deny: ${policy.deny.join(", ")}`); - } - console.log(""); - } -} - async function main() { const opts = parseArgs(process.argv.slice(2)); @@ -189,9 +155,6 @@ async function main() { case "groups": showGroups(); break; - case "profiles": - showProfiles(); - break; case "help": default: printUsage(); diff --git a/src/agent/context-window/token-estimation.test.ts b/src/agent/context-window/token-estimation.test.ts index aa6bb652..cef9c54c 100644 --- a/src/agent/context-window/token-estimation.test.ts +++ b/src/agent/context-window/token-estimation.test.ts @@ -82,10 +82,10 @@ describe("token-estimation", () => { describe("estimateTokenUsage", () => { it("should calculate token usage correctly", () => { - const messages: AgentMessage[] = [ + const messages = [ { role: "user", content: "Hello world" }, // ~3 tokens { role: "assistant", content: "Hi there!" }, // ~3 tokens - ]; + ] as AgentMessage[]; const result = estimateTokenUsage({ messages, @@ -130,9 +130,9 @@ describe("token-estimation", () => { }); it("should calculate utilization ratio with safety margin", () => { - const messages: AgentMessage[] = [ + const messages = [ { role: "user", content: "a".repeat(400) }, // ~100 tokens - ]; + ] as AgentMessage[]; const result = estimateTokenUsage({ messages, @@ -184,7 +184,7 @@ describe("token-estimation", () => { return Array.from({ length: count }, (_, i) => ({ role: "user" as const, content: `Message ${i}: ${"x".repeat(100)}`, // Each ~28 tokens - })); + })) as AgentMessage[]; } it("should return null if too few messages", () => { @@ -228,7 +228,7 @@ describe("token-estimation", () => { }); it("should keep newest messages (from the end)", () => { - const messages: AgentMessage[] = [ + const messages = [ { role: "user", content: "Old message 1" }, { role: "user", content: "Old message 2" }, { role: "user", content: "Old message 3" }, @@ -242,7 +242,7 @@ describe("token-estimation", () => { { role: "user", content: "Old message 11" }, { role: "user", content: "Newer message 12" }, { role: "user", content: "Newest message 13" }, - ]; + ] as AgentMessage[]; const result = compactMessagesTokenAware(messages, 50, { targetRatio: 0.5, @@ -268,29 +268,29 @@ describe("token-estimation", () => { describe("isMessageOversized", () => { it("should return true for oversized message", () => { - const message: AgentMessage = { + const message = { role: "user", content: "x".repeat(4000), // ~1000 tokens - }; + } as AgentMessage; // With default maxRatio 0.5, 1000 tokens in 1000 context = 100% > 50% expect(isMessageOversized(message, 1000)).toBe(true); }); it("should return false for small message", () => { - const message: AgentMessage = { + const message = { role: "user", content: "Hello", // ~2 tokens - }; + } as AgentMessage; expect(isMessageOversized(message, 10000)).toBe(false); }); it("should use custom maxRatio", () => { - const message: AgentMessage = { + const message = { role: "user", content: "x".repeat(400), // ~100 tokens - }; + } as AgentMessage; // With safety margin 1.2, 100 * 1.2 = 120 tokens // 120 > 1000 * 0.1 = 100, so oversized @@ -301,10 +301,10 @@ describe("token-estimation", () => { }); it("should apply safety margin to token count", () => { - const message: AgentMessage = { + const message = { role: "user", content: "x".repeat(400), // ~100 tokens, with margin ~120 - }; + } as AgentMessage; // Without margin: 100 < 250 (50% of 500) // With margin: 120 < 250, still ok diff --git a/src/agent/providers/registry.ts b/src/agent/providers/registry.ts index 36ec7d57..ce9e58bb 100644 --- a/src/agent/providers/registry.ts +++ b/src/agent/providers/registry.ts @@ -50,8 +50,8 @@ const PROVIDER_REGISTRY: Record = { id: "claude-code", name: "Claude Code (OAuth)", authMethod: "oauth", - defaultModel: "claude-opus-4-5", - models: ["claude-opus-4-5", "claude-opus-4-1", "claude-sonnet-4-5", "claude-sonnet-4-0", "claude-haiku-4-5"], + defaultModel: "claude-opus-4-6", + models: ["claude-opus-4-6", "claude-opus-4-5", "claude-sonnet-4-5", "claude-sonnet-4-0", "claude-haiku-4-5"], loginCommand: "claude login", }, "openai-codex": { @@ -67,7 +67,7 @@ const PROVIDER_REGISTRY: Record = { name: "Anthropic (API Key)", authMethod: "api-key", defaultModel: "claude-sonnet-4-5", - models: ["claude-opus-4-5", "claude-opus-4-1", "claude-sonnet-4-5", "claude-sonnet-4-0", "claude-haiku-4-5"], + models: ["claude-opus-4-6", "claude-opus-4-5", "claude-sonnet-4-5", "claude-sonnet-4-0", "claude-haiku-4-5"], loginUrl: "https://console.anthropic.com/", }, "openai": { @@ -75,7 +75,7 @@ const PROVIDER_REGISTRY: Record = { name: "OpenAI", authMethod: "api-key", defaultModel: "gpt-4o", - models: ["gpt-5.2", "gpt-5-mini", "gpt-4.1", "gpt-4.1-mini", "gpt-4o", "gpt-4o-mini"], + models: ["gpt-5.2", "gpt-5-mini", "gpt-4.1", "gpt-4.1-mini", "gpt-4o", "gpt-4o-mini", "o3", "o3-mini"], loginUrl: "https://platform.openai.com/api-keys", }, "kimi-coding": { diff --git a/src/agent/session/compaction.test.ts b/src/agent/session/compaction.test.ts index 3956ec3e..124b649f 100644 --- a/src/agent/session/compaction.test.ts +++ b/src/agent/session/compaction.test.ts @@ -66,7 +66,7 @@ describe("compaction", () => { return Array.from({ length: count }, (_, i) => ({ role: (i % 2 === 0 ? "user" : "assistant") as "user" | "assistant", content: `${prefix} ${i}`, - })); + })) as AgentMessage[]; } function createMessagesWithToolUse(): AgentMessage[] { diff --git a/src/agent/session/session-manager.display.test.ts b/src/agent/session/session-manager.display.test.ts index 759c461d..b95a4fc0 100644 --- a/src/agent/session/session-manager.display.test.ts +++ b/src/agent/session/session-manager.display.test.ts @@ -28,13 +28,13 @@ describe("SessionManager display content view", () => { const entries: SessionEntry[] = [ { type: "message", - message: { role: "user", content: "[Mon 2026-02-09 14:37 GMT+8] hi" }, + message: { role: "user", content: "[Mon 2026-02-09 14:37 GMT+8] hi" } as any, displayContent: "hi", timestamp: 1, }, { type: "message", - message: { role: "assistant", content: "hello there" }, + message: { role: "assistant", content: "hello there" } as any, timestamp: 2, }, ]; @@ -43,9 +43,9 @@ describe("SessionManager display content view", () => { const raw = session.loadMessages(); const display = session.loadMessagesForDisplay(); - expect(raw[0]?.content).toBe("[Mon 2026-02-09 14:37 GMT+8] hi"); - expect(display[0]?.content).toBe("hi"); - expect(display[1]?.content).toBe("hello there"); + expect((raw[0] as any)?.content).toBe("[Mon 2026-02-09 14:37 GMT+8] hi"); + expect((display[0] as any)?.content).toBe("hi"); + expect((display[1] as any)?.content).toBe("hello there"); }); it("keeps internal filtering behavior in display view", async () => { @@ -54,14 +54,14 @@ describe("SessionManager display content view", () => { const entries: SessionEntry[] = [ { type: "message", - message: { role: "user", content: "[Mon 2026-02-09 14:37 GMT+8] hidden" }, + message: { role: "user", content: "[Mon 2026-02-09 14:37 GMT+8] hidden" } as any, displayContent: "hidden", internal: true, timestamp: 1, }, { type: "message", - message: { role: "user", content: "[Mon 2026-02-09 14:38 GMT+8] visible" }, + message: { role: "user", content: "[Mon 2026-02-09 14:38 GMT+8] visible" } as any, displayContent: "visible", timestamp: 2, }, @@ -72,9 +72,9 @@ describe("SessionManager display content view", () => { const includeInternalView = session.loadMessagesForDisplay({ includeInternal: true }); expect(defaultView).toHaveLength(1); - expect(defaultView[0]?.content).toBe("visible"); + expect((defaultView[0] as any)?.content).toBe("visible"); expect(includeInternalView).toHaveLength(2); - expect(includeInternalView[0]?.content).toBe("hidden"); + expect((includeInternalView[0] as any)?.content).toBe("hidden"); }); it("persists displayContent on saveMessage", async () => { @@ -82,7 +82,7 @@ describe("SessionManager display content view", () => { const session = new SessionManager({ sessionId, baseDir: testBaseDir }); session.saveMessage( - { role: "user", content: "[Mon 2026-02-09 14:39 GMT+8] save me" }, + { role: "user", content: "[Mon 2026-02-09 14:39 GMT+8] save me" } as any, { displayContent: "save me" }, ); await session.flush(); diff --git a/src/agent/session/session-manager.ts b/src/agent/session/session-manager.ts index 8ca825dd..9abeaf99 100644 --- a/src/agent/session/session-manager.ts +++ b/src/agent/session/session-manager.ts @@ -164,7 +164,7 @@ export class SessionManager { async repairIfNeeded(warn?: (message: string) => void): Promise { const filePath = resolveSessionPath(this.sessionId, { baseDir: this.baseDir }); - return repairSessionFileIfNeeded({ sessionFile: filePath, warn }); + return repairSessionFileIfNeeded({ sessionFile: filePath, ...(warn !== undefined ? { warn } : {}) }); } loadMessages(options?: { includeInternal?: boolean }): AgentMessage[] { @@ -274,7 +274,7 @@ export class SessionManager { const pruneResult = pruneToolResults({ messages: workingMessages, contextWindowTokens: this.contextWindowTokens, - settings: this.toolResultPruning, + ...(this.toolResultPruning !== undefined ? { settings: this.toolResultPruning } : {}), }); if (pruneResult.changed) { diff --git a/src/agent/session/session-transcript-repair.test.ts b/src/agent/session/session-transcript-repair.test.ts index 7607f86f..d162dbd4 100644 --- a/src/agent/session/session-transcript-repair.test.ts +++ b/src/agent/session/session-transcript-repair.test.ts @@ -23,7 +23,7 @@ describe("sanitizeToolUseResultPairing", () => { content: [{ type: "text", text: "ok" }], isError: false, }, - ] satisfies AgentMessage[]; + ] as AgentMessage[]; const out = sanitizeToolUseResultPairing(input); expect(out[0]?.role).toBe("assistant"); @@ -55,7 +55,7 @@ describe("sanitizeToolUseResultPairing", () => { isError: false, }, { role: "user", content: "ok" }, - ] satisfies AgentMessage[]; + ] as AgentMessage[]; const out = sanitizeToolUseResultPairing(input); expect(out.filter((m) => m.role === "toolResult")).toHaveLength(1); @@ -82,7 +82,7 @@ describe("sanitizeToolUseResultPairing", () => { content: [{ type: "text", text: "second (duplicate)" }], isError: false, }, - ] satisfies AgentMessage[]; + ] as AgentMessage[]; const out = sanitizeToolUseResultPairing(input); const results = out.filter((m) => m.role === "toolResult") as Array<{ @@ -106,7 +106,7 @@ describe("sanitizeToolUseResultPairing", () => { role: "assistant", content: [{ type: "text", text: "ok" }], }, - ] satisfies AgentMessage[]; + ] as AgentMessage[]; const out = sanitizeToolUseResultPairing(input); expect(out.some((m) => m.role === "toolResult")).toBe(false); @@ -116,20 +116,20 @@ describe("sanitizeToolUseResultPairing", () => { describe("sanitizeToolCallInputs", () => { it("drops tool calls missing input or arguments", () => { - const input: AgentMessage[] = [ + const input = [ { role: "assistant", content: [{ type: "toolCall", id: "call_1", name: "read" }], }, { role: "user", content: "hello" }, - ]; + ] as AgentMessage[]; const out = sanitizeToolCallInputs(input); expect(out.map((m) => m.role)).toEqual(["user"]); }); it("keeps valid tool calls and preserves text blocks", () => { - const input: AgentMessage[] = [ + const input = [ { role: "assistant", content: [ @@ -138,7 +138,7 @@ describe("sanitizeToolCallInputs", () => { { type: "toolCall", id: "call_drop", name: "read" }, ], }, - ]; + ] as AgentMessage[]; const out = sanitizeToolCallInputs(input); const assistant = out[0] as Extract; diff --git a/src/agent/session/session-transcript-repair.ts b/src/agent/session/session-transcript-repair.ts index aa43071e..956653b2 100644 --- a/src/agent/session/session-transcript-repair.ts +++ b/src/agent/session/session-transcript-repair.ts @@ -2,7 +2,7 @@ import type { AgentMessage } from "@mariozechner/pi-agent-core"; type ToolCallLike = { id: string; - name?: string; + name?: string | undefined; }; const TOOL_CALL_TYPES = new Set(["toolCall", "toolUse", "functionCall"]); @@ -72,7 +72,7 @@ function extractToolResultId(msg: Extract) function makeMissingToolResult(params: { toolCallId: string; - toolName?: string; + toolName?: string | undefined; }): Extract { return { role: "toolResult", @@ -188,7 +188,6 @@ export function repairToolUseResultPairing(messages: AgentMessage[]): ToolUseRep for (let i = 0; i < messages.length; i += 1) { const msg = messages[i]; if (!msg || typeof msg !== "object") { - out.push(msg); continue; } @@ -219,7 +218,6 @@ export function repairToolUseResultPairing(messages: AgentMessage[]): ToolUseRep for (; j < messages.length; j += 1) { const next = messages[j]; if (!next || typeof next !== "object") { - remainder.push(next); continue; } diff --git a/src/agent/session/storage.test.ts b/src/agent/session/storage.test.ts index ee0f9765..6f9498c9 100644 --- a/src/agent/session/storage.test.ts +++ b/src/agent/session/storage.test.ts @@ -108,12 +108,12 @@ describe("session/storage", () => { const entry1: SessionEntry = { type: "message", - message: { role: "user", content: "Hello" }, + message: { role: "user", content: "Hello" } as any, timestamp: 1000, }; const entry2: SessionEntry = { type: "message", - message: { role: "assistant", content: "Hi there" }, + message: { role: "assistant", content: "Hi there" } as any, timestamp: 2000, }; @@ -135,7 +135,7 @@ describe("session/storage", () => { const validEntry: SessionEntry = { type: "message", - message: { role: "user", content: "Valid" }, + message: { role: "user", content: "Valid" } as any, timestamp: 1000, }; @@ -195,7 +195,7 @@ describe("session/storage", () => { const sessionId = "append-session"; const entry: SessionEntry = { type: "message", - message: { role: "user", content: "Hello" }, + message: { role: "user", content: "Hello" } as any, timestamp: 1000, }; @@ -212,12 +212,12 @@ describe("session/storage", () => { const sessionId = "append-existing"; const entry1: SessionEntry = { type: "message", - message: { role: "user", content: "First" }, + message: { role: "user", content: "First" } as any, timestamp: 1000, }; const entry2: SessionEntry = { type: "message", - message: { role: "assistant", content: "Second" }, + message: { role: "assistant", content: "Second" } as any, timestamp: 2000, }; @@ -235,8 +235,8 @@ describe("session/storage", () => { it("should write all entries to file", async () => { const sessionId = "write-session"; const entries: SessionEntry[] = [ - { type: "message", message: { role: "user", content: "One" }, timestamp: 1000 }, - { type: "message", message: { role: "assistant", content: "Two" }, timestamp: 2000 }, + { type: "message", message: { role: "user", content: "One" } as any, timestamp: 1000 }, + { type: "message", message: { role: "assistant", content: "Two" } as any, timestamp: 2000 }, ]; await writeEntries(sessionId, entries, { baseDir: testBaseDir }); @@ -251,12 +251,12 @@ describe("session/storage", () => { await writeEntries( sessionId, - [{ type: "message", message: { role: "user", content: "Old" }, timestamp: 1000 }], + [{ type: "message", message: { role: "user", content: "Old" } as any, timestamp: 1000 }], { baseDir: testBaseDir } ); const newEntries: SessionEntry[] = [ - { type: "message", message: { role: "user", content: "New" }, timestamp: 2000 }, + { type: "message", message: { role: "user", content: "New" } as any, timestamp: 2000 }, ]; await writeEntries(sessionId, newEntries, { baseDir: testBaseDir }); diff --git a/src/agent/tools.ts b/src/agent/tools.ts index fdb7ad1f..2edebb5e 100644 --- a/src/agent/tools.ts +++ b/src/agent/tools.ts @@ -33,10 +33,10 @@ export interface CreateToolsOptions { type ToolErrorPayload = { error: true; message: string; - name?: string; - code?: string; - retryable?: boolean; - details?: Record; + name?: string | undefined; + code?: string | undefined; + retryable?: boolean | undefined; + details?: Record | undefined; }; function toToolErrorPayload(error: unknown): ToolErrorPayload { @@ -130,12 +130,12 @@ export function createAllTools(options: CreateToolsOptions | string): AgentTool< // Add sessions_spawn tool (will be filtered by policy for subagents) const sessionsSpawnTool = createSessionsSpawnTool({ isSubagent: isSubagent ?? false, - sessionId, + ...(sessionId !== undefined ? { sessionId } : {}), }); tools.push(sessionsSpawnTool as AgentTool); // Add sessions_list tool - const sessionsListTool = createSessionsListTool({ sessionId }); + const sessionsListTool = createSessionsListTool({ ...(sessionId !== undefined ? { sessionId } : {}) }); tools.push(sessionsListTool as AgentTool); return tools; diff --git a/src/agent/tools/exec-approval-types.ts b/src/agent/tools/exec-approval-types.ts index 51685dbc..9c32b3da 100644 --- a/src/agent/tools/exec-approval-types.ts +++ b/src/agent/tools/exec-approval-types.ts @@ -27,7 +27,7 @@ export interface ExecApprovalRequest { /** Shell command to execute */ command: string; /** Working directory */ - cwd?: string; + cwd?: string | undefined; /** Evaluated risk level */ riskLevel: "safe" | "needs-review" | "dangerous"; /** Reasons for the risk assessment */ diff --git a/src/agent/tools/sessions-list.ts b/src/agent/tools/sessions-list.ts index 1106b21e..19a0809e 100644 --- a/src/agent/tools/sessions-list.ts +++ b/src/agent/tools/sessions-list.ts @@ -23,12 +23,12 @@ type SessionsListArgs = { export type SessionsListResult = { runs: Array<{ runId: string; - label?: string; + label?: string | undefined; task: string; status: "running" | "ok" | "error" | "timeout" | "unknown"; - startedAt?: number; - endedAt?: number; - findings?: string; + startedAt?: number | undefined; + endedAt?: number | undefined; + findings?: string | undefined; }>; }; diff --git a/src/console/app.controller.ts b/src/console/app.controller.ts index 0fbf2e2d..bf4ee28a 100644 --- a/src/console/app.controller.ts +++ b/src/console/app.controller.ts @@ -44,7 +44,7 @@ export class AppController { @Post("agents") createAgent(@Body() body?: { id?: string }) { const agent = this.hub.createAgent(body?.id); - return { id: agent.id }; + return { id: agent.sessionId }; } @Delete("agents/:id") diff --git a/src/gateway/test-client.ts b/src/gateway/test-client.ts index 5125541c..7f70b67d 100644 --- a/src/gateway/test-client.ts +++ b/src/gateway/test-client.ts @@ -1,11 +1,15 @@ import { GatewayClient, - HelloAction, - HelloResponseAction, - type HelloPayload, - type HelloResponsePayload, + type ConnectionState, + type RoutedMessage, + type SendErrorResponse, } from "@multica/sdk"; +const HelloAction = "hello"; +const HelloResponseAction = "hello:response"; +type HelloPayload = { greeting: string }; +type HelloResponsePayload = { reply: string }; + // 模拟一个 Client const client = new GatewayClient({ url: "http://localhost:3000", @@ -22,11 +26,11 @@ const agent = new GatewayClient({ // Agent 监听消息 agent - .onStateChange((state) => console.log("[Agent] State:", state)) - .onRegistered((deviceId) => { + .onStateChange((state: ConnectionState) => console.log("[Agent] State:", state)) + .onRegistered((deviceId: string) => { console.log("[Agent] Registered as:", deviceId); }) - .onMessage((message) => { + .onMessage((message: RoutedMessage) => { console.log("[Agent] Received message:", message); // 回复消息 @@ -38,13 +42,13 @@ agent }); } }) - .onSendError((error) => console.error("[Agent] Send error:", error)) + .onSendError((error: SendErrorResponse) => console.error("[Agent] Send error:", error)) .connect(); // Client 监听消息 client - .onStateChange((state) => console.log("[Client] State:", state)) - .onRegistered((deviceId) => { + .onStateChange((state: ConnectionState) => console.log("[Client] State:", state)) + .onRegistered((deviceId: string) => { console.log("[Client] Registered as:", deviceId); // 注册后发送消息给 Agent @@ -55,10 +59,10 @@ client }); }, 500); }) - .onMessage((message) => { + .onMessage((message: RoutedMessage) => { console.log("[Client] Received message:", message); }) - .onSendError((error) => console.error("[Client] Send error:", error)) + .onSendError((error: SendErrorResponse) => console.error("[Client] Send error:", error)) .connect(); // 5秒后断开 diff --git a/src/hub/block-chunker.ts b/src/hub/block-chunker.ts index 0595442a..61e8c7d4 100644 --- a/src/hub/block-chunker.ts +++ b/src/hub/block-chunker.ts @@ -44,9 +44,9 @@ function detectFenceAt(text: string, upTo: number): FenceInfo | null { for (const line of lines) { const match = line.match(/^(`{3,}|~{3,})(\S*)\s*$/); if (!match) continue; - const marker = match[1]; + const marker = match[1]!; const lang = match[2] ?? ""; - const markerChar = marker[0]; + const markerChar = marker[0]!; if (openFence === null) { // Opening a new fence @@ -242,7 +242,7 @@ function findSentenceBreak(buffer: string, start: number, end: number, bufLen: n const ch = buffer[i]; if (ch === "." || ch === "!" || ch === "?") { const next = i + 1; - if (next < bufLen && /\s/.test(buffer[next])) { + if (next < bufLen && /\s/.test(buffer[next]!)) { // Break after the whitespace const idx = next + 1; if (idx < bufLen) return idx; @@ -261,7 +261,7 @@ function findSentenceBreak(buffer: string, start: number, end: number, bufLen: n */ function findWordBreak(buffer: string, start: number, end: number, bufLen: number): number { for (let i = end - 1; i >= start; i--) { - if (/\s/.test(buffer[i])) { + if (/\s/.test(buffer[i]!)) { const idx = i + 1; if (idx < bufLen) return idx; } diff --git a/src/hub/device-store.ts b/src/hub/device-store.ts index 1519b812..97f54aff 100644 --- a/src/hub/device-store.ts +++ b/src/hub/device-store.ts @@ -20,7 +20,7 @@ export interface DeviceEntry { deviceId: string; agentId: string; addedAt: number; - meta?: DeviceMeta; + meta?: DeviceMeta | undefined; } // ============ Persistence ============ diff --git a/src/hub/exec-approval-manager.test.ts b/src/hub/exec-approval-manager.test.ts index 27033022..fa38c902 100644 --- a/src/hub/exec-approval-manager.test.ts +++ b/src/hub/exec-approval-manager.test.ts @@ -8,7 +8,7 @@ describe("ExecApprovalManager", () => { beforeEach(() => { vi.useFakeTimers(); sendToClient = vi.fn(); - manager = new ExecApprovalManager(sendToClient, 5000); // 5s timeout for tests + manager = new ExecApprovalManager(sendToClient as any, 5000); // 5s timeout for tests }); afterEach(() => { diff --git a/src/hub/hub.ts b/src/hub/hub.ts index ef619228..df3b3daa 100644 --- a/src/hub/hub.ts +++ b/src/hub/hub.ts @@ -2,6 +2,8 @@ import { v7 as uuidv7 } from "uuid"; import { GatewayClient, type ConnectionState, + type RoutedMessage, + type SendErrorResponse, RequestAction, ResponseAction, StreamAction, @@ -204,22 +206,22 @@ export class Hub { reconnectDelay: 1000, }); - client.onStateChange((state) => { + client.onStateChange((state: ConnectionState) => { console.log(`[Hub] Connection state: ${state}`); for (const listener of this._stateChangeListeners) { listener(state); } }); - client.onRegistered((deviceId) => { + client.onRegistered((deviceId: string) => { console.log(`[Hub] Registered as: ${deviceId}`); }); - client.onError((err) => { + client.onError((err: Error) => { console.error(`[Hub] Connection error:`, err.message); }); - client.onMessage((msg) => { + client.onMessage((msg: RoutedMessage) => { console.log(`[Hub] Received message: id=${msg.id} from=${msg.from} to=${msg.to} action=${msg.action} payload=${JSON.stringify(msg.payload)}`); // RPC request @@ -272,7 +274,7 @@ export class Hub { } }); - client.onSendError((err) => { + client.onSendError((err: SendErrorResponse) => { console.error(`[Hub] Send error: messageId=${err.messageId} code=${err.code} error=${err.error}`); }); @@ -592,12 +594,12 @@ export class Hub { const result = await this.approvalManager.requestApproval({ agentId: sessionId, command, - cwd, + ...(cwd !== undefined ? { cwd } : {}), riskLevel: evaluation.riskLevel, riskReasons: evaluation.reasons, - timeoutMs: config.timeoutMs, - askFallback: config.askFallback, - allowlistSatisfied: evaluation.allowlistSatisfied, + ...(config.timeoutMs !== undefined ? { timeoutMs: config.timeoutMs } : {}), + ...(config.askFallback !== undefined ? { askFallback: config.askFallback } : {}), + ...(evaluation.allowlistSatisfied !== undefined ? { allowlistSatisfied: evaluation.allowlistSatisfied } : {}), }); // Handle allow-always: persist to profile allowlist diff --git a/src/hub/message-aggregator.test.ts b/src/hub/message-aggregator.test.ts index 52516648..c8e983ed 100644 --- a/src/hub/message-aggregator.test.ts +++ b/src/hub/message-aggregator.test.ts @@ -85,8 +85,8 @@ function smallConfig(overrides?: Partial): BlockChunkerConfi describe("MessageAggregator", () => { let blocks: BlockReply[]; let passedThrough: Array; - let onBlock: ReturnType; - let onPassthrough: ReturnType; + let onBlock: any; + let onPassthrough: any; beforeEach(() => { blocks = []; @@ -154,8 +154,8 @@ describe("MessageAggregator", () => { agg.handleEvent(endEvent); expect(blocks).toHaveLength(1); - expect(blocks[0].text).toBe("Hello world"); - expect(blocks[0].isFinal).toBe(true); + expect(blocks[0]!.text).toBe("Hello world"); + expect(blocks[0]!.isFinal).toBe(true); // message_start + message_end both passed through const passthroughTypes = passedThrough.map((e) => e.type); @@ -178,7 +178,7 @@ describe("MessageAggregator", () => { agg.handleEvent(makeMessageEnd("Hello world")); expect(blocks).toHaveLength(1); - expect(blocks[0].text).toBe("Hello world"); + expect(blocks[0]!.text).toBe("Hello world"); }); it("ignores ThinkingContent blocks, only extracts text", () => { @@ -190,8 +190,8 @@ describe("MessageAggregator", () => { agg.handleEvent(makeMessageEnd("visible text")); expect(blocks).toHaveLength(1); - expect(blocks[0].text).toBe("visible text"); - expect(blocks[0].text).not.toContain("internal thinking"); + expect(blocks[0]!.text).toBe("visible text"); + expect(blocks[0]!.text).not.toContain("internal thinking"); }); it("handles empty delta (duplicate event) gracefully", () => { @@ -205,7 +205,7 @@ describe("MessageAggregator", () => { agg.handleEvent(makeMessageEnd("Hello")); expect(blocks).toHaveLength(1); - expect(blocks[0].text).toBe("Hello"); + expect(blocks[0]!.text).toBe("Hello"); }); it("handles monotonically growing text correctly", () => { @@ -221,7 +221,7 @@ describe("MessageAggregator", () => { agg.handleEvent(makeMessageEnd("Hello")); expect(blocks).toHaveLength(1); - expect(blocks[0].text).toBe("Hello"); + expect(blocks[0]!.text).toBe("Hello"); }); }); @@ -241,8 +241,8 @@ describe("MessageAggregator", () => { agg.handleEvent(makeMessageUpdate(text)); expect(blocks.length).toBeGreaterThanOrEqual(1); - expect(blocks[0].text).toContain("first paragraph"); - expect(blocks[0].isFinal).toBe(false); + expect(blocks[0]!.text).toContain("first paragraph"); + expect(blocks[0]!.isFinal).toBe(false); }); it("emits multiple blocks for very long text", () => { @@ -255,7 +255,7 @@ describe("MessageAggregator", () => { expect(blocks.length).toBeGreaterThanOrEqual(2); // All blocks except the last should have isFinal=false for (let i = 0; i < blocks.length; i++) { - expect(blocks[i].isFinal).toBe(false); + expect(blocks[i]!.isFinal).toBe(false); } }); @@ -268,7 +268,7 @@ describe("MessageAggregator", () => { agg.handleEvent(makeMessageEnd(text)); const finalBlock = blocks[blocks.length - 1]; - expect(finalBlock.isFinal).toBe(true); + expect(finalBlock!.isFinal).toBe(true); }); it("increments block index for each emitted block", () => { @@ -280,7 +280,7 @@ describe("MessageAggregator", () => { agg.handleEvent(makeMessageEnd(text)); for (let i = 0; i < blocks.length; i++) { - expect(blocks[i].index).toBe(i); + expect(blocks[i]!.index).toBe(i); } }); @@ -293,7 +293,7 @@ describe("MessageAggregator", () => { agg.handleEvent(makeMessageEnd("First message text.")); expect(blocks).toHaveLength(1); - expect(blocks[0].index).toBe(0); + expect(blocks[0]!.index).toBe(0); // Second message cycle — index should reset agg.handleEvent(makeMessageStart("msg-2")); @@ -301,7 +301,7 @@ describe("MessageAggregator", () => { agg.handleEvent(makeMessageEnd("Second message text.")); expect(blocks).toHaveLength(2); - expect(blocks[1].index).toBe(0); // Reset after new message_start + expect(blocks[1]!.index).toBe(0); // Reset after new message_start }); it("does not emit empty block on message_end with no content", () => { @@ -335,7 +335,7 @@ describe("MessageAggregator", () => { // Final block should contain all text expect(blocks).toHaveLength(1); - expect(blocks[0].text).toBe("Before tool call. After tool result."); + expect(blocks[0]!.text).toBe("Before tool call. After tool result."); }); it("handles multiple message cycles (reset between)", () => { @@ -352,11 +352,11 @@ describe("MessageAggregator", () => { agg.handleEvent(makeMessageEnd("Second response.")); expect(blocks).toHaveLength(2); - expect(blocks[0].text).toBe("First response."); - expect(blocks[1].text).toBe("Second response."); + expect(blocks[0]!.text).toBe("First response."); + expect(blocks[1]!.text).toBe("Second response."); // Both should be final (flushed on message_end) - expect(blocks[0].isFinal).toBe(true); - expect(blocks[1].isFinal).toBe(true); + expect(blocks[0]!.isFinal).toBe(true); + expect(blocks[1]!.isFinal).toBe(true); }); it("handles compaction events between messages", () => {