From 6e074fd5124451ce1784224d45c86ff30d42e470 Mon Sep 17 00:00:00 2001 From: Azreen Jamal Date: Fri, 6 Mar 2026 15:14:43 +0800 Subject: [PATCH] feat: add pi-worker service for autonomous Asana task execution and project improvements --- bun.lock | 597 +++++++++++++ extensions/pi-devops.ts | 381 ++++++++ extensions/telegram-stream.ts | 96 ++ justfile | 5 +- package.json | 3 + telegram-bot/bot.err | 1564 --------------------------------- telegram-bot/bot.log | 176 +--- telegram-bot/index.ts | 25 +- 8 files changed, 1142 insertions(+), 1705 deletions(-) create mode 100644 extensions/pi-devops.ts create mode 100644 extensions/telegram-stream.ts diff --git a/bun.lock b/bun.lock index b2f7695..20c41b9 100644 --- a/bun.lock +++ b/bun.lock @@ -5,6 +5,9 @@ "": { "name": "pi-vs-cc", "dependencies": { + "@mariozechner/pi-ai": "^0.56.1", + "@mariozechner/pi-coding-agent": "^0.56.1", + "@mariozechner/pi-tui": "^0.56.1", "yaml": "^2.8.0", }, "devDependencies": { @@ -13,16 +16,610 @@ }, }, "packages": { + "@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.73.0", "", { "dependencies": { "json-schema-to-ts": "^3.1.1" }, "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["zod"], "bin": { "anthropic-ai-sdk": "bin/cli" } }, "sha512-URURVzhxXGJDGUGFunIOtBlSl7KWvZiAAKY/ttTkZAkXT9bTPqdk2eK0b8qqSxXpikh3QKPnPYpiyX98zf5ebw=="], + + "@aws-crypto/crc32": ["@aws-crypto/crc32@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg=="], + + "@aws-crypto/sha256-browser": ["@aws-crypto/sha256-browser@5.2.0", "", { "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-locate-window": "^3.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw=="], + + "@aws-crypto/sha256-js": ["@aws-crypto/sha256-js@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA=="], + + "@aws-crypto/supports-web-crypto": ["@aws-crypto/supports-web-crypto@5.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg=="], + + "@aws-crypto/util": ["@aws-crypto/util@5.2.0", "", { "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ=="], + + "@aws-sdk/client-bedrock-runtime": ["@aws-sdk/client-bedrock-runtime@3.1002.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.17", "@aws-sdk/credential-provider-node": "^3.972.16", "@aws-sdk/eventstream-handler-node": "^3.972.9", "@aws-sdk/middleware-eventstream": "^3.972.6", "@aws-sdk/middleware-host-header": "^3.972.6", "@aws-sdk/middleware-logger": "^3.972.6", "@aws-sdk/middleware-recursion-detection": "^3.972.6", "@aws-sdk/middleware-user-agent": "^3.972.17", "@aws-sdk/middleware-websocket": "^3.972.11", "@aws-sdk/region-config-resolver": "^3.972.6", "@aws-sdk/token-providers": "3.1002.0", "@aws-sdk/types": "^3.973.4", "@aws-sdk/util-endpoints": "^3.996.3", "@aws-sdk/util-user-agent-browser": "^3.972.6", "@aws-sdk/util-user-agent-node": "^3.973.2", "@smithy/config-resolver": "^4.4.9", "@smithy/core": "^3.23.7", "@smithy/eventstream-serde-browser": "^4.2.10", "@smithy/eventstream-serde-config-resolver": "^4.3.10", "@smithy/eventstream-serde-node": "^4.2.10", "@smithy/fetch-http-handler": "^5.3.12", "@smithy/hash-node": "^4.2.10", "@smithy/invalid-dependency": "^4.2.10", "@smithy/middleware-content-length": "^4.2.10", "@smithy/middleware-endpoint": "^4.4.21", "@smithy/middleware-retry": "^4.4.38", "@smithy/middleware-serde": "^4.2.11", "@smithy/middleware-stack": "^4.2.10", "@smithy/node-config-provider": "^4.3.10", "@smithy/node-http-handler": "^4.4.13", "@smithy/protocol-http": "^5.3.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "@smithy/util-base64": "^4.3.1", "@smithy/util-body-length-browser": "^4.2.1", "@smithy/util-body-length-node": "^4.2.2", "@smithy/util-defaults-mode-browser": "^4.3.37", "@smithy/util-defaults-mode-node": "^4.2.40", "@smithy/util-endpoints": "^3.3.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-retry": "^4.2.10", "@smithy/util-stream": "^4.5.16", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-xUmzgTvTeQFVxBqla8U4nXpZNXLcZ0xszfZ4yxdTUNyChQQb7JLaH4E8pAbl7ulg0RoJ4ChNWtOqMJC/N3+qcQ=="], + + "@aws-sdk/core": ["@aws-sdk/core@3.973.17", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@aws-sdk/xml-builder": "^3.972.9", "@smithy/core": "^3.23.7", "@smithy/node-config-provider": "^4.3.10", "@smithy/property-provider": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/signature-v4": "^5.3.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-VtgGP0TjbCeyp6DQpiBqJKbemTSIaN2bZc3UbeTDCani3lBCyxn75ouJYD6koSSp0bh7rKLEbUpiFsNCI7tr0w=="], + + "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.15", "", { "dependencies": { "@aws-sdk/core": "^3.973.17", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RhHQG1lhkWHL4tK1C/KDjaOeis+9U0tAMnWDiwiSVQZMC7CsST9Xin+sK89XywJ5g/tyABtb7TvFePJ4Te5XSQ=="], + + "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.17", "", { "dependencies": { "@aws-sdk/core": "^3.973.17", "@aws-sdk/types": "^3.973.4", "@smithy/fetch-http-handler": "^5.3.12", "@smithy/node-http-handler": "^4.4.13", "@smithy/property-provider": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "@smithy/util-stream": "^4.5.16", "tslib": "^2.6.2" } }, "sha512-b/bDL76p51+yQ+0O9ZDH5nw/ioE0sRYkjwjOwFWAWZXo6it2kQZUOXhVpjohx3ldKyUxt/SwAivjUu1Nr/PWlQ=="], + + "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.15", "", { "dependencies": { "@aws-sdk/core": "^3.973.17", "@aws-sdk/credential-provider-env": "^3.972.15", "@aws-sdk/credential-provider-http": "^3.972.17", "@aws-sdk/credential-provider-login": "^3.972.15", "@aws-sdk/credential-provider-process": "^3.972.15", "@aws-sdk/credential-provider-sso": "^3.972.15", "@aws-sdk/credential-provider-web-identity": "^3.972.15", "@aws-sdk/nested-clients": "^3.996.5", "@aws-sdk/types": "^3.973.4", "@smithy/credential-provider-imds": "^4.2.10", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-qWnM+wB8MmU2kKY7f4KowKjOjkwRosaFxrtseEEIefwoXn1SjN+CbHzXBVdTAQxxkbBiqhPgJ/WHiPtES4grRQ=="], + + "@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.15", "", { "dependencies": { "@aws-sdk/core": "^3.973.17", "@aws-sdk/nested-clients": "^3.996.5", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-x92FJy34/95wgu+qOGD8SHcgh1hZ9Qx2uFtQEGn4m9Ljou8ICIv3Ybq5yxdB7A60S8ZGCQB0mIopmjJwiLbh5g=="], + + "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.16", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.15", "@aws-sdk/credential-provider-http": "^3.972.17", "@aws-sdk/credential-provider-ini": "^3.972.15", "@aws-sdk/credential-provider-process": "^3.972.15", "@aws-sdk/credential-provider-sso": "^3.972.15", "@aws-sdk/credential-provider-web-identity": "^3.972.15", "@aws-sdk/types": "^3.973.4", "@smithy/credential-provider-imds": "^4.2.10", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-7mlt14Ee4rPFAFUVgpWE7+0CBhetJJyzVFqfIsMp7sgyOSm9Y/+qHZOWAuK5I4JNc+Y5PltvJ9kssTzRo92iXQ=="], + + "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.15", "", { "dependencies": { "@aws-sdk/core": "^3.973.17", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-PrH3iTeD18y/8uJvQD2s/T87BTGhsdS/1KZU7ReWHXsplBwvCqi7AbnnNbML1pFlQwRWCE2RdSZFWDVId3CvkA=="], + + "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.15", "", { "dependencies": { "@aws-sdk/core": "^3.973.17", "@aws-sdk/nested-clients": "^3.996.5", "@aws-sdk/token-providers": "3.1002.0", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-M/+LBHTPKZxxXckM6m4dnJeR+jlm9NynH9b2YDswN4Zj2St05SK/crdL3Wy3WfJTZootnnhm3oTh87Usl7PS7w=="], + + "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.15", "", { "dependencies": { "@aws-sdk/core": "^3.973.17", "@aws-sdk/nested-clients": "^3.996.5", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-QTH6k93v+UOfFam/ado8zc71tH+enTVyuvLy9uEWXX1x894dN5ovtf/MdBDgFwq3g6c9mbtgVJ4B+yBqDtXvdA=="], + + "@aws-sdk/eventstream-handler-node": ["@aws-sdk/eventstream-handler-node@3.972.9", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/eventstream-codec": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-mKPiiVssgFDWkAXdEDh8+wpr2pFSX/fBn2onXXnrfIAYbdZhYb4WilKbZ3SJMUnQi+Y48jZMam5J0RrgARluaA=="], + + "@aws-sdk/middleware-eventstream": ["@aws-sdk/middleware-eventstream@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-mB2+3G/oxRC+y9WRk0KCdradE2rSfxxJpcOSmAm+vDh3ex3WQHVLZ1catNIe1j5NQ+3FLBsNMRPVGkZ43PRpjw=="], + + "@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5XHwjPH1lHB+1q4bfC7T8Z5zZrZXfaLcjSMwTd1HPSPrCmPFMbg3UQ5vgNWcVj0xoX4HWqTGkSf2byrjlnRg5w=="], + + "@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-iFnaMFMQdljAPrvsCVKYltPt2j40LQqukAbXvW7v0aL5I+1GO7bZ/W8m12WxW3gwyK5p5u1WlHg8TSAizC5cZw=="], + + "@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-dY4v3of5EEMvik6+UDwQ96KfUFDk8m1oZDdkSc5lwi4o7rFrjnv0A+yTV+gu230iybQZnKgDLg/rt2P3H+Vscw=="], + + "@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.17", "", { "dependencies": { "@aws-sdk/core": "^3.973.17", "@aws-sdk/types": "^3.973.4", "@aws-sdk/util-endpoints": "^3.996.3", "@smithy/core": "^3.23.7", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-HHArkgWzomuwufXwheQqkddu763PWCpoNTq1dGjqXzJT/lojX3VlOqjNSR2Xvb6/T9ISfwYcMOcbFgUp4EWxXA=="], + + "@aws-sdk/middleware-websocket": ["@aws-sdk/middleware-websocket@3.972.11", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@aws-sdk/util-format-url": "^3.972.6", "@smithy/eventstream-codec": "^4.2.10", "@smithy/eventstream-serde-browser": "^4.2.10", "@smithy/fetch-http-handler": "^5.3.12", "@smithy/protocol-http": "^5.3.10", "@smithy/signature-v4": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "@smithy/util-hex-encoding": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-cWf+8iUUnitgFuUu/ryK2uVfx7f5ezdhGwsjLLEEC1Nk716Ld2Hw4LA8iipyVcQI3EarvK6ExY2dSBET/0PYng=="], + + "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.5", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.17", "@aws-sdk/middleware-host-header": "^3.972.6", "@aws-sdk/middleware-logger": "^3.972.6", "@aws-sdk/middleware-recursion-detection": "^3.972.6", "@aws-sdk/middleware-user-agent": "^3.972.17", "@aws-sdk/region-config-resolver": "^3.972.6", "@aws-sdk/types": "^3.973.4", "@aws-sdk/util-endpoints": "^3.996.3", "@aws-sdk/util-user-agent-browser": "^3.972.6", "@aws-sdk/util-user-agent-node": "^3.973.2", "@smithy/config-resolver": "^4.4.9", "@smithy/core": "^3.23.7", "@smithy/fetch-http-handler": "^5.3.12", "@smithy/hash-node": "^4.2.10", "@smithy/invalid-dependency": "^4.2.10", "@smithy/middleware-content-length": "^4.2.10", "@smithy/middleware-endpoint": "^4.4.21", "@smithy/middleware-retry": "^4.4.38", "@smithy/middleware-serde": "^4.2.11", "@smithy/middleware-stack": "^4.2.10", "@smithy/node-config-provider": "^4.3.10", "@smithy/node-http-handler": "^4.4.13", "@smithy/protocol-http": "^5.3.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "@smithy/util-base64": "^4.3.1", "@smithy/util-body-length-browser": "^4.2.1", "@smithy/util-body-length-node": "^4.2.2", "@smithy/util-defaults-mode-browser": "^4.3.37", "@smithy/util-defaults-mode-node": "^4.2.40", "@smithy/util-endpoints": "^3.3.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-retry": "^4.2.10", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-zn0WApcULn7Rtl6T+KP2CQTZo/7wOa2YV1yHQnbijTQoi4YXQHM8s21JcJzt33/mqPh8AdvWX1f+83KvKuxlZw=="], + + "@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/config-resolver": "^4.4.9", "@smithy/node-config-provider": "^4.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-Aa5PusHLXAqLTX1UKDvI3pHQJtIsF7Q+3turCHqfz/1F61/zDMWfbTC8evjhrrYVAtz9Vsv3SJ/waSUeu7B6gw=="], + + "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1002.0", "", { "dependencies": { "@aws-sdk/core": "^3.973.17", "@aws-sdk/nested-clients": "^3.996.5", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-x972uKOydFn4Rb0PZJzLdNW59rH0KWC78Q2JbQzZpGlGt0DxjYdDRwBG6F42B1MyaEwHGqO/tkGc4r3/PRFfMw=="], + + "@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], + + "@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.3", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "@smithy/util-endpoints": "^3.3.1", "tslib": "^2.6.2" } }, "sha512-yWIQSNiCjykLL+ezN5A+DfBb1gfXTytBxm57e64lYmwxDHNmInYHRJYYRAGWG1o77vKEiWaw4ui28e3yb1k5aQ=="], + + "@aws-sdk/util-format-url": ["@aws-sdk/util-format-url@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/querystring-builder": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-0YNVNgFyziCejXJx0rzxPiD2rkxTWco4c9wiMF6n37Tb9aQvIF8+t7GyEyIFCwQHZ0VMQaAl+nCZHOYz5I5EKw=="], + + "@aws-sdk/util-locate-window": ["@aws-sdk/util-locate-window@3.965.4", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-H1onv5SkgPBK2P6JR2MjGgbOnttoNzSPIRoeZTNPZYyaplwGg50zS3amXvXqF0/qfXpWEC9rLWU564QTB9bSog=="], + + "@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/types": "^4.13.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-Fwr/llD6GOrFgQnKaI2glhohdGuBDfHfora6iG9qsBBBR8xv1SdCSwbtf5CWlUdCw5X7g76G/9Hf0Inh0EmoxA=="], + + "@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.2", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.17", "@aws-sdk/types": "^3.973.4", "@smithy/node-config-provider": "^4.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-lpaIuekdkpw7VRiik0IZmd6TyvEUcuLgKZ5fKRGpCA3I4PjrD/XH15sSwW+OptxQjNU4DEzSxag70spC9SluvA=="], + + "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.9", "", { "dependencies": { "@smithy/types": "^4.13.0", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-ItnlMgSqkPrUfJs7EsvU/01zw5UeIb2tNPhD09LBLHbg+g+HDiKibSLwpkuz/ZIlz4F2IMn+5XgE4AK/pfPuog=="], + + "@aws/lambda-invoke-store": ["@aws/lambda-invoke-store@0.2.3", "", {}, "sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw=="], + + "@babel/runtime": ["@babel/runtime@7.28.6", "", {}, "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA=="], + + "@borewit/text-codec": ["@borewit/text-codec@0.2.1", "", {}, "sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw=="], + + "@google/genai": ["@google/genai@1.44.0", "", { "dependencies": { "google-auth-library": "^10.3.0", "p-retry": "^4.6.2", "protobufjs": "^7.5.4", "ws": "^8.18.0" }, "peerDependencies": { "@modelcontextprotocol/sdk": "^1.25.2" }, "optionalPeers": ["@modelcontextprotocol/sdk"] }, "sha512-kRt9ZtuXmz+tLlcNntN/VV4LRdpl6ZOu5B1KbfNgfR65db15O6sUQcwnwLka8sT/V6qysD93fWrgJHF2L7dA9A=="], + + "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + + "@mariozechner/clipboard": ["@mariozechner/clipboard@0.3.2", "", { "optionalDependencies": { "@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" } }, "sha512-IHQpksNjo7EAtGuHFU+tbWDp5LarH3HU/8WiB9O70ZEoBPHOg0/6afwSLK0QyNMMmx4Bpi/zl6+DcBXe95nWYA=="], + + "@mariozechner/clipboard-darwin-arm64": ["@mariozechner/clipboard-darwin-arm64@0.3.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-uBf6K7Je1ihsgvmWxA8UCGCeI+nbRVRXoarZdLjl6slz94Zs1tNKFZqx7aCI5O1i3e0B6ja82zZ06BWrl0MCVw=="], + + "@mariozechner/clipboard-darwin-universal": ["@mariozechner/clipboard-darwin-universal@0.3.2", "", { "os": "darwin" }, "sha512-mxSheKTW2U9LsBdXy0SdmdCAE5HqNS9QUmpNHLnfJ+SsbFKALjEZc5oRrVMXxGQSirDvYf5bjmRyT0QYYonnlg=="], + + "@mariozechner/clipboard-darwin-x64": ["@mariozechner/clipboard-darwin-x64@0.3.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-U1BcVEoidvwIp95+HJswSW+xr28EQiHR7rZjH6pn8Sja5yO4Yoe3yCN0Zm8Lo72BbSOK/fTSq0je7CJpaPCspg=="], + + "@mariozechner/clipboard-linux-arm64-gnu": ["@mariozechner/clipboard-linux-arm64-gnu@0.3.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-BsinwG3yWTIjdgNCxsFlip7LkfwPk+ruw/aFCXHUg/fb5XC/Ksp+YMQ7u0LUtiKzIv/7LMXgZInJQH6gxbAaqQ=="], + + "@mariozechner/clipboard-linux-arm64-musl": ["@mariozechner/clipboard-linux-arm64-musl@0.3.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-0/Gi5Xq2V6goXBop19ePoHvXsmJD9SzFlO3S+d6+T2b+BlPcpOu3Oa0wTjl+cZrLAAEzA86aPNBI+VVAFDFPKw=="], + + "@mariozechner/clipboard-linux-riscv64-gnu": ["@mariozechner/clipboard-linux-riscv64-gnu@0.3.2", "", { "os": "linux", "cpu": "none" }, "sha512-2AFFiXB24qf0zOZsxI1GJGb9wQGlOJyN6UwoXqmKS3dpQi/l6ix30IzDDA4c4ZcCcx4D+9HLYXhC1w7Sov8pXA=="], + + "@mariozechner/clipboard-linux-x64-gnu": ["@mariozechner/clipboard-linux-x64-gnu@0.3.2", "", { "os": "linux", "cpu": "x64" }, "sha512-v6fVnsn7WMGg73Dab8QMwyFce7tzGfgEixKgzLP8f1GJqkJZi5zO4k4FOHzSgUufgLil63gnxvMpjWkgfeQN7A=="], + + "@mariozechner/clipboard-linux-x64-musl": ["@mariozechner/clipboard-linux-x64-musl@0.3.2", "", { "os": "linux", "cpu": "x64" }, "sha512-xVUtnoMQ8v2JVyfJLKKXACA6avdnchdbBkTsZs8BgJQo29qwCp5NIHAUO8gbJ40iaEGToW5RlmVk2M9V0HsHEw=="], + + "@mariozechner/clipboard-win32-arm64-msvc": ["@mariozechner/clipboard-win32-arm64-msvc@0.3.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-AEgg95TNi8TGgak2wSXZkXKCvAUTjWoU1Pqb0ON7JHrX78p616XUFNTJohtIon3e0w6k0pYPZeCuqRCza/Tqeg=="], + + "@mariozechner/clipboard-win32-x64-msvc": ["@mariozechner/clipboard-win32-x64-msvc@0.3.2", "", { "os": "win32", "cpu": "x64" }, "sha512-tGRuYpZwDOD7HBrCpyRuhGnHHSCknELvqwKKUG4JSfSB7JIU7LKRh6zx6fMUOQd8uISK35TjFg5UcNih+vJhFA=="], + + "@mariozechner/jiti": ["@mariozechner/jiti@2.6.5", "", { "dependencies": { "std-env": "^3.10.0", "yoctocolors": "^2.1.2" }, "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-faGUlTcXka5l7rv0lP3K3vGW/ejRuOS24RR2aSFWREUQqzjgdsuWNo/IiPqL3kWRGt6Ahl2+qcDAwtdeWeuGUw=="], + + "@mariozechner/pi-agent-core": ["@mariozechner/pi-agent-core@0.56.1", "", { "dependencies": { "@mariozechner/pi-ai": "^0.56.1" } }, "sha512-MtnoUGqDs8o3yAaUnHyYEpF7NEPFOWpJB7BSwx7eAZ5ntDqrOj08M6DH4tpJaDCZSQ93DYfvuyzH2oQTtmc4Uw=="], + + "@mariozechner/pi-ai": ["@mariozechner/pi-ai@0.56.1", "", { "dependencies": { "@anthropic-ai/sdk": "^0.73.0", "@aws-sdk/client-bedrock-runtime": "^3.983.0", "@google/genai": "^1.40.0", "@mistralai/mistralai": "1.10.0", "@sinclair/typebox": "^0.34.41", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "chalk": "^5.6.2", "openai": "6.10.0", "partial-json": "^0.1.7", "proxy-agent": "^6.5.0", "undici": "^7.19.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "pi-ai": "dist/cli.js" } }, "sha512-gXb2ktz/JB5o0SmuV4xIsIeLmcdvgolfGgUmjZ+PaCtrkw2V2UwfXI/qau9hmsUhEPLjJhTkx6DypNML81ShbA=="], + + "@mariozechner/pi-coding-agent": ["@mariozechner/pi-coding-agent@0.56.1", "", { "dependencies": { "@mariozechner/jiti": "^2.6.2", "@mariozechner/pi-agent-core": "^0.56.1", "@mariozechner/pi-ai": "^0.56.1", "@mariozechner/pi-tui": "^0.56.1", "@silvia-odwyer/photon-node": "^0.3.4", "chalk": "^5.5.0", "cli-highlight": "^2.1.11", "diff": "^8.0.2", "extract-zip": "^2.0.1", "file-type": "^21.1.1", "glob": "^13.0.1", "hosted-git-info": "^9.0.2", "ignore": "^7.0.5", "marked": "^15.0.12", "minimatch": "^10.2.3", "proper-lockfile": "^4.1.2", "strip-ansi": "^7.1.0", "undici": "^7.19.1", "yaml": "^2.8.2" }, "optionalDependencies": { "@mariozechner/clipboard": "^0.3.2" }, "bin": { "pi": "dist/cli.js" } }, "sha512-aeL5hp/1B3713w+SiwZjoXhqJFWQdEAv1z40yQuKtbkjbiFotbQhUe7URL3oYhmP0NoO+EH2Lk2kOo99uj9P7w=="], + + "@mariozechner/pi-tui": ["@mariozechner/pi-tui@0.56.1", "", { "dependencies": { "@types/mime-types": "^2.1.4", "chalk": "^5.5.0", "get-east-asian-width": "^1.3.0", "marked": "^15.0.12", "mime-types": "^3.0.1" }, "optionalDependencies": { "koffi": "^2.9.0" } }, "sha512-gKle9krohDJ+KuAPNGMg5jFhagzWqzExnLAy4i5bDzTQ5etrxjlu9M+vHAi9juMg0vHnsmZlUKiQ2o5OUxF7Kg=="], + + "@mistralai/mistralai": ["@mistralai/mistralai@1.10.0", "", { "dependencies": { "zod": "^3.20.0", "zod-to-json-schema": "^3.24.1" } }, "sha512-tdIgWs4Le8vpvPiUEWne6tK0qbVc+jMenujnvTqOjogrJUsCSQhus0tHTU1avDDh5//Rq2dFgP9mWRAdIEoBqg=="], + + "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], + "@playwright/cli": ["@playwright/cli@0.1.1", "", { "dependencies": { "minimist": "^1.2.5", "playwright": "1.59.0-alpha-1771104257000" }, "bin": { "playwright-cli": "playwright-cli.js" } }, "sha512-9k11ZfDwAfMVDDIuEVW1Wvs8SoDNXIY1dNQ+9C9/SS8ZmElkcxesu5eoL7vNa96ntibUGaq1TM2qQoqvdl/I9g=="], + "@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="], + + "@protobufjs/base64": ["@protobufjs/base64@1.1.2", "", {}, "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="], + + "@protobufjs/codegen": ["@protobufjs/codegen@2.0.4", "", {}, "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="], + + "@protobufjs/eventemitter": ["@protobufjs/eventemitter@1.1.0", "", {}, "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="], + + "@protobufjs/fetch": ["@protobufjs/fetch@1.1.0", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" } }, "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ=="], + + "@protobufjs/float": ["@protobufjs/float@1.0.2", "", {}, "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="], + + "@protobufjs/inquire": ["@protobufjs/inquire@1.1.0", "", {}, "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="], + + "@protobufjs/path": ["@protobufjs/path@1.1.2", "", {}, "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="], + + "@protobufjs/pool": ["@protobufjs/pool@1.1.0", "", {}, "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="], + + "@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="], + + "@silvia-odwyer/photon-node": ["@silvia-odwyer/photon-node@0.3.4", "", {}, "sha512-bnly4BKB3KDTFxrUIcgCLbaeVVS8lrAkri1pEzskpmxu9MdfGQTy8b8EgcD83ywD3RPMsIulY8xJH5Awa+t9fA=="], + + "@sinclair/typebox": ["@sinclair/typebox@0.34.48", "", {}, "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA=="], + + "@smithy/abort-controller": ["@smithy/abort-controller@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-Hj4WoYWMJnSpM6/kchsm4bUNTL9XiSyhvoMb2KIq4VJzyDt7JpGHUZHkVNPZVC7YE1tf8tPeVauxpFBKGW4/KQ=="], + + "@smithy/config-resolver": ["@smithy/config-resolver@4.4.10", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-endpoints": "^3.3.2", "@smithy/util-middleware": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-IRTkd6ps0ru+lTWnfnsbXzW80A8Od8p3pYiZnW98K2Hb20rqfsX7VTlfUwhrcOeSSy68Gn9WBofwPuw3e5CCsg=="], + + "@smithy/core": ["@smithy/core@3.23.8", "", { "dependencies": { "@smithy/middleware-serde": "^4.2.12", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-stream": "^4.5.17", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-f7uPeBi7ehmLT4YF2u9j3qx6lSnurG1DLXOsTtJrIRNDF7VXio4BGHQ+SQteN/BrUVudbkuL4v7oOsRCzq4BqA=="], + + "@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.11", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-lBXrS6ku0kTj3xLmsJW0WwqWbGQ6ueooYyp/1L9lkyT0M02C+DWwYwc5aTyXFbRaK38ojALxNixg+LxKSHZc0g=="], + + "@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.11", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.13.0", "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-Sf39Ml0iVX+ba/bgMPxaXWAAFmHqYLTmbjAPfLPLY8CrYkRDEqZdUsKC1OwVMCdJXfAt0v4j49GIJ8DoSYAe6w=="], + + "@smithy/eventstream-serde-browser": ["@smithy/eventstream-serde-browser@4.2.11", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-3rEpo3G6f/nRS7fQDsZmxw/ius6rnlIpz4UX6FlALEzz8JoSxFmdBt0SZnthis+km7sQo6q5/3e+UJcuQivoXA=="], + + "@smithy/eventstream-serde-config-resolver": ["@smithy/eventstream-serde-config-resolver@4.3.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-XeNIA8tcP/GDWnnKkO7qEm/bg0B/bP9lvIXZBXcGZwZ+VYM8h8k9wuDvUODtdQ2Wcp2RcBkPTCSMmaniVHrMlA=="], + + "@smithy/eventstream-serde-node": ["@smithy/eventstream-serde-node@4.2.11", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-fzbCh18rscBDTQSCrsp1fGcclLNF//nJyhjldsEl/5wCYmgpHblv5JSppQAyQI24lClsFT0wV06N1Porn0IsEw=="], + + "@smithy/eventstream-serde-universal": ["@smithy/eventstream-serde-universal@4.2.11", "", { "dependencies": { "@smithy/eventstream-codec": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-MJ7HcI+jEkqoWT5vp+uoVaAjBrmxBtKhZTeynDRG/seEjJfqyg3SiqMMqyPnAMzmIfLaeJ/uiuSDP/l9AnMy/Q=="], + + "@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.13", "", { "dependencies": { "@smithy/protocol-http": "^5.3.11", "@smithy/querystring-builder": "^4.2.11", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-U2Hcfl2s3XaYjikN9cT4mPu8ybDbImV3baXR0PkVlC0TTx808bRP3FaPGAzPtB8OByI+JqJ1kyS+7GEgae7+qQ=="], + + "@smithy/hash-node": ["@smithy/hash-node@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-T+p1pNynRkydpdL015ruIoyPSRw9e/SQOWmSAMmmprfswMrd5Ow5igOWNVlvyVFZlxXqGmyH3NQwfwy8r5Jx0A=="], + + "@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-cGNMrgykRmddrNhYy1yBdrp5GwIgEkniS7k9O1VLB38yxQtlvrxpZtUVvo6T4cKpeZsriukBuuxfJcdZQc/f/g=="], + + "@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow=="], + + "@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.11", "", { "dependencies": { "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-UvIfKYAKhCzr4p6jFevPlKhQwyQwlJ6IeKLDhmV1PlYfcW3RL4ROjNEDtSik4NYMi9kDkH7eSwyTP3vNJ/u/Dw=="], + + "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.22", "", { "dependencies": { "@smithy/core": "^3.23.8", "@smithy/middleware-serde": "^4.2.12", "@smithy/node-config-provider": "^4.3.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-middleware": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-sc81w1o4Jy+/MAQlY3sQ8C7CmSpcvIi3TAzXblUv2hjG11BBSJi/Cw8vDx5BxMxapuH2I+Gc+45vWsgU07WZRQ=="], + + "@smithy/middleware-retry": ["@smithy/middleware-retry@4.4.39", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.11", "@smithy/protocol-http": "^5.3.11", "@smithy/service-error-classification": "^4.2.11", "@smithy/smithy-client": "^4.12.2", "@smithy/types": "^4.13.0", "@smithy/util-middleware": "^4.2.11", "@smithy/util-retry": "^4.2.11", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-MCVCxaCzuZgiHtHGV2Ke44nh6t4+8/tO+rTYOzrr2+G4nMLU/qbzNCWKBX54lyEaVcGQrfOJiG2f8imtiw+nIQ=="], + + "@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.12", "", { "dependencies": { "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-W9g1bOLui7Xn5FABRVS0o3rXL0gfN37d/8I/W7i0N7oxjx9QecUmXEMSUMADTODwdtka9cN43t5BI2CodLJpng=="], + + "@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-s+eenEPW6RgliDk2IhjD2hWOxIx1NKrOHxEwNUaUXxYBxIyCcDfNULZ2Mu15E3kwcJWBedTET/kEASPV1A1Akg=="], + + "@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.11", "", { "dependencies": { "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-xD17eE7kaLgBBGf5CZQ58hh2YmwK1Z0O8YhffwB/De2jsL0U3JklmhVYJ9Uf37OtUDLF2gsW40Xwwag9U869Gg=="], + + "@smithy/node-http-handler": ["@smithy/node-http-handler@4.4.14", "", { "dependencies": { "@smithy/abort-controller": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/querystring-builder": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-DamSqaU8nuk0xTJDrYnRzZndHwwRnyj/n/+RqGGCcBKB4qrQem0mSDiWdupaNWdwxzyMU91qxDmHOCazfhtO3A=="], + + "@smithy/property-provider": ["@smithy/property-provider@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-14T1V64o6/ndyrnl1ze1ZhyLzIeYNN47oF/QU6P5m82AEtyOkMJTb0gO1dPubYjyyKuPD6OSVMPDKe+zioOnCg=="], + + "@smithy/protocol-http": ["@smithy/protocol-http@5.3.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hI+barOVDJBkNt4y0L2mu3Ugc0w7+BpJ2CZuLwXtSltGAAwCb3IvnalGlbDV/UCS6a9ZuT3+exd1WxNdLb5IlQ=="], + + "@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-7spdikrYiljpket6u0up2Ck2mxhy7dZ0+TDd+S53Dg2DHd6wg+YNJrTCHiLdgZmEXZKI7LJZcwL3721ZRDFiqA=="], + + "@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-nE3IRNjDltvGcoThD2abTozI1dkSy8aX+a2N1Rs55en5UsdyyIXgGEmevUL3okZFoJC77JgRGe99xYohhsjivQ=="], + + "@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0" } }, "sha512-HkMFJZJUhzU3HvND1+Yw/kYWXp4RPDLBWLcK1n+Vqw8xn4y2YiBhdww8IxhkQjP/QlZun5bwm3vcHc8AqIU3zw=="], + + "@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.6", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-IB/M5I8G0EeXZTHsAxpx51tMQ5R719F3aq+fjEB6VtNcCHDc0ajFDIGDZw+FW9GxtEkgTduiPpjveJdA/CX7sw=="], + + "@smithy/signature-v4": ["@smithy/signature-v4@5.3.11", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.2", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-uri-escape": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-V1L6N9aKOBAN4wEHLyqjLBnAz13mtILU0SeDrjOaIZEeN6IFa6DxwRt1NNpOdmSpQUfkBj0qeD3m6P77uzMhgQ=="], + + "@smithy/smithy-client": ["@smithy/smithy-client@4.12.2", "", { "dependencies": { "@smithy/core": "^3.23.8", "@smithy/middleware-endpoint": "^4.4.22", "@smithy/middleware-stack": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-stream": "^4.5.17", "tslib": "^2.6.2" } }, "sha512-HezY3UuG0k4T+4xhFKctLXCA5N2oN+Rtv+mmL8Gt7YmsUY2yhmcLyW75qrSzldfj75IsCW/4UhY3s20KcFnZqA=="], + + "@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + + "@smithy/url-parser": ["@smithy/url-parser@4.2.11", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-oTAGGHo8ZYc5VZsBREzuf5lf2pAurJQsccMusVZ85wDkX66ojEc/XauiGjzCj50A61ObFTPe6d7Pyt6UBYaing=="], + + "@smithy/util-base64": ["@smithy/util-base64@4.3.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ=="], + + "@smithy/util-body-length-browser": ["@smithy/util-body-length-browser@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ=="], + + "@smithy/util-body-length-node": ["@smithy/util-body-length-node@4.2.3", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g=="], + + "@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.2", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q=="], + + "@smithy/util-config-provider": ["@smithy/util-config-provider@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ=="], + + "@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.38", "", { "dependencies": { "@smithy/property-provider": "^4.2.11", "@smithy/smithy-client": "^4.12.2", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-c8P1mFLNxcsdAMabB8/VUQUbWzFmgujWi4bAXSggcqLYPc8V4U5abqFqOyn+dK4YT+q8UyCVkTO8807t4t2syA=="], + + "@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.41", "", { "dependencies": { "@smithy/config-resolver": "^4.4.10", "@smithy/credential-provider-imds": "^4.2.11", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/smithy-client": "^4.12.2", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-/UG+9MT3UZAR0fLzOtMJMfWGcjjHvgggq924x/CRy8vRbL+yFf3Z6vETlvq8vDH92+31P/1gSOFoo7303wN8WQ=="], + + "@smithy/util-endpoints": ["@smithy/util-endpoints@3.3.2", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-+4HFLpE5u29AbFlTdlKIT7jfOzZ8PDYZKTb3e+AgLz986OYwqTourQ5H+jg79/66DB69Un1+qKecLnkZdAsYcA=="], + + "@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg=="], + + "@smithy/util-middleware": ["@smithy/util-middleware@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-r3dtF9F+TpSZUxpOVVtPfk09Rlo4lT6ORBqEvX3IBT6SkQAdDSVKR5GcfmZbtl7WKhKnmb3wbDTQ6ibR2XHClw=="], + + "@smithy/util-retry": ["@smithy/util-retry@4.2.11", "", { "dependencies": { "@smithy/service-error-classification": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-XSZULmL5x6aCTTii59wJqKsY1l3eMIAomRAccW7Tzh9r8s7T/7rdo03oektuH5jeYRlJMPcNP92EuRDvk9aXbw=="], + + "@smithy/util-stream": ["@smithy/util-stream@4.5.17", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.13", "@smithy/node-http-handler": "^4.4.14", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-793BYZ4h2JAQkNHcEnyFxDTcZbm9bVybD0UV/LEWmZ5bkTms7JqjfrLMi2Qy0E5WFcCzLwCAPgcvcvxoeALbAQ=="], + + "@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw=="], + + "@smithy/util-utf8": ["@smithy/util-utf8@4.2.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw=="], + + "@smithy/uuid": ["@smithy/uuid@1.1.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g=="], + + "@tokenizer/inflate": ["@tokenizer/inflate@0.4.1", "", { "dependencies": { "debug": "^4.4.3", "token-types": "^6.1.1" } }, "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA=="], + + "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], + + "@tootallnate/quickjs-emscripten": ["@tootallnate/quickjs-emscripten@0.23.0", "", {}, "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="], + + "@types/mime-types": ["@types/mime-types@2.1.4", "", {}, "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w=="], + + "@types/node": ["@types/node@25.3.3", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ=="], + + "@types/retry": ["@types/retry@0.12.0", "", {}, "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA=="], + + "@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="], + + "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], + + "ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + + "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], + + "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="], + + "ast-types": ["ast-types@0.13.4", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="], + + "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + + "basic-ftp": ["basic-ftp@5.2.0", "", {}, "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw=="], + + "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], + + "bowser": ["bowser@2.14.1", "", {}, "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg=="], + + "brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], + + "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], + + "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="], + + "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "cli-highlight": ["cli-highlight@2.1.11", "", { "dependencies": { "chalk": "^4.0.0", "highlight.js": "^10.7.1", "mz": "^2.4.0", "parse5": "^5.1.1", "parse5-htmlparser2-tree-adapter": "^6.0.0", "yargs": "^16.0.0" }, "bin": { "highlight": "bin/highlight" } }, "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg=="], + + "cliui": ["cliui@7.0.4", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "data-uri-to-buffer": ["data-uri-to-buffer@6.0.2", "", {}, "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "degenerator": ["degenerator@5.0.1", "", { "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", "esprima": "^4.0.1" } }, "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ=="], + + "diff": ["diff@8.0.3", "", {}, "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ=="], + + "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], + + "ecdsa-sig-formatter": ["ecdsa-sig-formatter@1.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="], + + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "escodegen": ["escodegen@2.1.0", "", { "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2" }, "optionalDependencies": { "source-map": "~0.6.1" }, "bin": { "esgenerate": "bin/esgenerate.js", "escodegen": "bin/escodegen.js" } }, "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w=="], + + "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], + + "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + + "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], + + "extract-zip": ["extract-zip@2.0.1", "", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], + + "fast-xml-builder": ["fast-xml-builder@1.0.0", "", {}, "sha512-fpZuDogrAgnyt9oDDz+5DBz0zgPdPZz6D4IR7iESxRXElrlGTRkHJ9eEt+SACRJwT0FNFrt71DFQIUFBJfX/uQ=="], + + "fast-xml-parser": ["fast-xml-parser@5.4.1", "", { "dependencies": { "fast-xml-builder": "^1.0.0", "strnum": "^2.1.2" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A=="], + + "fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="], + + "fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="], + + "file-type": ["file-type@21.3.0", "", { "dependencies": { "@tokenizer/inflate": "^0.4.1", "strtok3": "^10.3.4", "token-types": "^6.1.1", "uint8array-extras": "^1.4.0" } }, "sha512-8kPJMIGz1Yt/aPEwOsrR97ZyZaD1Iqm8PClb1nYFclUCkBi0Ma5IsYNQzvSFS9ib51lWyIw5mIT9rWzI/xjpzA=="], + + "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + + "formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="], + "fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="], + "gaxios": ["gaxios@7.1.3", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2", "rimraf": "^5.0.1" } }, "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ=="], + + "gcp-metadata": ["gcp-metadata@8.1.2", "", { "dependencies": { "gaxios": "^7.0.0", "google-logging-utils": "^1.0.0", "json-bigint": "^1.0.0" } }, "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg=="], + + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + + "get-east-asian-width": ["get-east-asian-width@1.5.0", "", {}, "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA=="], + + "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], + + "get-uri": ["get-uri@6.0.5", "", { "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4" } }, "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg=="], + + "glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], + + "google-auth-library": ["google-auth-library@10.6.1", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "7.1.3", "gcp-metadata": "8.1.2", "google-logging-utils": "1.1.3", "jws": "^4.0.0" } }, "sha512-5awwuLrzNol+pFDmKJd0dKtZ0fPLAtoA5p7YO4ODsDu6ONJUVqbYwvv8y2ZBO5MBNp9TJXigB19710kYpBPdtA=="], + + "google-logging-utils": ["google-logging-utils@1.1.3", "", {}, "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "highlight.js": ["highlight.js@10.7.3", "", {}, "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A=="], + + "hosted-git-info": ["hosted-git-info@9.0.2", "", { "dependencies": { "lru-cache": "^11.1.0" } }, "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg=="], + + "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], + + "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + + "ip-address": ["ip-address@10.1.0", "", {}, "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + + "json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], + + "json-schema-to-ts": ["json-schema-to-ts@3.1.1", "", { "dependencies": { "@babel/runtime": "^7.18.3", "ts-algebra": "^2.0.0" } }, "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g=="], + + "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + + "jwa": ["jwa@2.0.1", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg=="], + + "jws": ["jws@4.0.1", "", { "dependencies": { "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA=="], + + "koffi": ["koffi@2.15.1", "", {}, "sha512-mnc0C0crx/xMSljb5s9QbnLrlFHprioFO1hkXyuSuO/QtbpLDa0l/uM21944UfQunMKmp3/r789DTDxVyyH6aA=="], + + "long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], + + "lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="], + + "marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], + + "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + + "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], + + "minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], + + "netmask": ["netmask@2.0.2", "", {}, "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="], + + "node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="], + + "node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "openai": ["openai@6.10.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-ITxOGo7rO3XRMiKA5l7tQ43iNNu+iXGFAcf2t+aWVzzqRaS0i7m1K2BhxNdaveB+5eENhO0VY1FkiZzhBk4v3A=="], + + "p-retry": ["p-retry@4.6.2", "", { "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" } }, "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ=="], + + "pac-proxy-agent": ["pac-proxy-agent@7.2.0", "", { "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", "socks-proxy-agent": "^8.0.5" } }, "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA=="], + + "pac-resolver": ["pac-resolver@7.0.1", "", { "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" } }, "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg=="], + + "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], + + "parse5": ["parse5@5.1.1", "", {}, "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug=="], + + "parse5-htmlparser2-tree-adapter": ["parse5-htmlparser2-tree-adapter@6.0.1", "", { "dependencies": { "parse5": "^6.0.1" } }, "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA=="], + + "partial-json": ["partial-json@0.1.7", "", {}, "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="], + + "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], + "playwright": ["playwright@1.59.0-alpha-1771104257000", "", { "dependencies": { "playwright-core": "1.59.0-alpha-1771104257000" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-6SCMMMJaDRsSqiKVLmb2nhtLES7iTYawTWWrQK6UdIGNzXi8lka4sLKRec3L4DnTWwddAvCuRn8035dhNiHzbg=="], "playwright-core": ["playwright-core@1.59.0-alpha-1771104257000", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-YiXup3pnpQUCBMSIW5zx8CErwRx4K6O5Kojkw2BzJui8MazoMUDU6E3xGsb1kzFviEAE09LFQ+y1a0RhIJQ5SA=="], + "proper-lockfile": ["proper-lockfile@4.1.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" } }, "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA=="], + + "protobufjs": ["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": ">=13.7.0", "long": "^5.0.0" } }, "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg=="], + + "proxy-agent": ["proxy-agent@6.5.0", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", "socks-proxy-agent": "^8.0.5" } }, "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A=="], + + "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + + "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], + + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + + "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], + + "rimraf": ["rimraf@5.0.10", "", { "dependencies": { "glob": "^10.3.7" }, "bin": { "rimraf": "dist/esm/bin.mjs" } }, "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + + "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], + + "socks": ["socks@2.8.7", "", { "dependencies": { "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" } }, "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A=="], + + "socks-proxy-agent": ["socks-proxy-agent@8.0.5", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="], + + "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], + + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + + "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strnum": ["strnum@2.2.0", "", {}, "sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg=="], + + "strtok3": ["strtok3@10.3.4", "", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], + + "thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="], + + "token-types": ["token-types@6.1.2", "", { "dependencies": { "@borewit/text-codec": "^0.2.1", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww=="], + + "ts-algebra": ["ts-algebra@2.0.0", "", {}, "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "uint8array-extras": ["uint8array-extras@1.5.0", "", {}, "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A=="], + + "undici": ["undici@7.22.0", "", {}, "sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg=="], + + "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + + "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], + + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + "yaml": ["yaml@2.8.2", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A=="], + + "yargs": ["yargs@16.2.0", "", { "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw=="], + + "yargs-parser": ["yargs-parser@20.2.9", "", {}, "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="], + + "yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], + + "yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="], + + "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + + "zod-to-json-schema": ["zod-to-json-schema@3.25.1", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA=="], + + "@aws-crypto/sha256-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], + + "@aws-crypto/util/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], + + "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + + "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], + + "cli-highlight/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "hosted-git-info/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], + + "node-fetch/data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], + + "p-retry/retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="], + + "parse5-htmlparser2-tree-adapter/parse5": ["parse5@6.0.1", "", {}, "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="], + + "path-scurry/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], + + "rimraf/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], + + "string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], + + "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], + + "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + + "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + + "cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "rimraf/glob/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], + + "rimraf/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + + "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], + + "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], + + "rimraf/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "rimraf/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "rimraf/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], } } diff --git a/extensions/pi-devops.ts b/extensions/pi-devops.ts new file mode 100644 index 0000000..6dc680e --- /dev/null +++ b/extensions/pi-devops.ts @@ -0,0 +1,381 @@ +/** + * Pi DevOps — Optimized extension for CharityRight/QuikCue infrastructure + * + * Features: + * 🏗️ Infra context — injects full topology into every AI prompt + * 🛡️ Safety guard — confirms destructive ops before execution + * 📊 Smart footer — model, context, cost, tool tally, server indicator + * 🎯 Focus widget — keeps current task visible at all times + * ⚡ /health — live container + service status check + * 📋 /logs [svc] — tail logs for a service + * 🗺️ /infra — print full infra topology + * 🎯 /focus [task] — set/change the current task + * 🛑 /stop — abort current AI action + * 🔧 /ssh [cmd] — run a raw SSH command on the server + * + * Usage: pi -e extensions/pi-devops.ts + */ + +import type { ExtensionAPI, ExtensionContext } from "@mariozechner/pi-coding-agent"; +import { isToolCallEventType } from "@mariozechner/pi-coding-agent"; +import type { AssistantMessage } from "@mariozechner/pi-ai"; +import { truncateToWidth, visibleWidth } from "@mariozechner/pi-tui"; +import { basename } from "node:path"; +import { execSync } from "node:child_process"; +import { applyExtensionDefaults } from "./themeMap.ts"; + +// ═══════════════════════════════════════════════════════════════════════════ +// Infra constants +// ═══════════════════════════════════════════════════════════════════════════ + +const SSH = `ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=accept-new -p 22 root@159.195.60.33`; +const INCUS_CR = `${SSH} "incus exec cr-server-new --"`; + +const INFRA_CONTEXT = ` + +You are Pi, a DevOps assistant managing live production infrastructure. + +## Primary Server +- SSH: ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=accept-new -p 22 root@159.195.60.33 "" +- HAProxy routes: charityright domains → cr-server-new, quikcue domains → qc-server-new + +## Incus Containers (on primary server) +- cr-server-new (10.213.16.224) — CharityRight. Docker runs INSIDE here. +- qc-server-new (10.213.16.234) — QuikCue +- qc-server — STOPPED legacy + +## Docker (inside cr-server-new only!) +- Run: ssh ... "incus exec cr-server-new -- docker " +- Postgres container: dokploy-migrated-cr-postgres-data +- DB: donation_warehouse +- Query: ssh ... "incus exec cr-server-new -- docker exec dokploy-migrated-cr-postgres-data psql -U postgres -d donation_warehouse -c \\"SELECT ...\\"" + +## Services +- /opt/ayn-antivirus — AYN antivirus scanner +- /opt/enthuse-db-sync-v2 — Enthuse donation sync +- /opt/launchgood-sync — LaunchGood sync +- /root/legacy-donation-system-laravel — CharityRight Laravel app +- /root/redis-v2 — Redis + +## Critical Rules +- NEVER run docker commands directly on the primary host +- Always use incus exec cr-server-new -- for Docker ops +- Warn before any restart/stop of production services +- Always test with SELECT before UPDATE/DELETE +`.trim(); + +// ═══════════════════════════════════════════════════════════════════════════ +// Dangerous patterns +// ═══════════════════════════════════════════════════════════════════════════ + +const DANGEROUS: { pattern: RegExp; reason: string }[] = [ + { pattern: /rm\s+-[rRf]{1,3}\s+[\/~]/, reason: "Deleting from root or home!" }, + { pattern: /rm\s+-rf/, reason: "Recursive force delete" }, + { pattern: /DROP\s+(TABLE|DATABASE|SCHEMA)/i, reason: "SQL DROP detected" }, + { pattern: /TRUNCATE\s+TABLE/i, reason: "SQL TRUNCATE detected" }, + { pattern: /DELETE\s+FROM\s+\w+\s*(WHERE\s+1=1\s*)?(;|$)/i, reason: "Potentially unsafe DELETE" }, + { pattern: /UPDATE\s+\w+\s+SET\s+.*\s*;?\s*$/i, reason: "UPDATE without WHERE — may affect all rows" }, + { pattern: /docker\s+system\s+prune/, reason: "Docker prune — removes all unused data" }, + { pattern: /incus\s+(delete|stop)\s+\S+/, reason: "Incus container operation" }, + { pattern: /systemctl\s+(stop|disable|restart)\s+(haproxy|docker|nginx)/, reason: "Touching critical production service" }, + { pattern: /git\s+push\s+.*--force/, reason: "Force push — may overwrite remote history" }, + { pattern: /git\s+reset\s+--hard/, reason: "Hard reset — may lose uncommitted changes" }, + { pattern: /mkfs\./, reason: "Filesystem format command!" }, + { pattern: /dd\s+if=/, reason: "Raw disk copy via dd" }, + { pattern: /curl.*\|\s*(ba)?sh/, reason: "Piping remote script to shell" }, + { pattern: /wget.*\|\s*(ba)?sh/, reason: "Piping remote script to shell" }, + { pattern: /chmod\s+-R\s+777/, reason: "Recursive world-writable permissions" }, +]; + +// ═══════════════════════════════════════════════════════════════════════════ +// Helpers +// ═══════════════════════════════════════════════════════════════════════════ + +function runSSH(cmd: string, timeout = 15000): string { + try { + return execSync(`${SSH} "${cmd.replace(/"/g, '\\"')}"`, { timeout, encoding: "utf8" }).trim(); + } catch (e: any) { + return e?.stdout?.trim() || e?.message || "SSH error"; + } +} + +// ═══════════════════════════════════════════════════════════════════════════ +// Extension +// ═══════════════════════════════════════════════════════════════════════════ + +export default function (pi: ExtensionAPI) { + let focus: string | undefined; + let activeCtx: ExtensionContext | undefined; + const toolCounts: Record = {}; + + // ── Tool tracking ───────────────────────────────────────────────────── + pi.on("tool_execution_end", async (event) => { + toolCounts[event.toolName] = (toolCounts[event.toolName] || 0) + 1; + }); + + // ── Session start ───────────────────────────────────────────────────── + pi.on("session_start", async (_event, ctx) => { + applyExtensionDefaults(import.meta.url, ctx); + activeCtx = ctx; + + // Ask for focus task (non-blocking) + void (async () => { + const answer = await ctx.ui.input( + "🎯 What are you working on today?", + "e.g. Debug launchgood sync, check cr-server disk, investigate slow queries" + ); + if (answer?.trim()) { + focus = answer.trim(); + setFocusWidget(ctx); + ctx.ui.notify(`🎯 Focus set: ${focus}`, "success"); + } else { + ctx.ui.notify("💡 No focus set. Use /focus to set one anytime.", "info"); + } + })(); + + // ── Footer ──────────────────────────────────────────────────────── + ctx.ui.setFooter((tui, theme, footerData) => { + const unsub = footerData.onBranchChange(() => tui.requestRender()); + return { + dispose: unsub, + invalidate() {}, + render(width: number): string[] { + // Accumulate tokens + cost + let tokIn = 0, tokOut = 0, cost = 0; + for (const entry of ctx.sessionManager.getBranch()) { + if (entry.type === "message" && entry.message.role === "assistant") { + const m = entry.message as AssistantMessage; + tokIn += m.usage.input; + tokOut += m.usage.output; + cost += m.usage.cost.total; + } + } + + const fmt = (n: number) => n < 1000 ? `${n}` : `${(n / 1000).toFixed(1)}k`; + const model = ctx.model?.id || "no-model"; + const branch = footerData.getGitBranch(); + const dir = basename(ctx.cwd); + + // Context bar + const usage = ctx.getContextUsage(); + const pct = usage?.percent ?? 0; + const filled = Math.round(pct / 10); + const bar = + (pct < 70 ? theme.fg("success", "█".repeat(filled)) : pct < 90 ? theme.fg("warning", "█".repeat(filled)) : theme.fg("error", "█".repeat(filled))) + + theme.fg("dim", "░".repeat(10 - filled)); + + // Line 1: model | context | tokens | cost + const l1Left = + theme.fg("accent", " Pi") + + theme.fg("dim", ` ${model} `) + + bar + + theme.fg("dim", ` ${Math.round(pct)}%`); + + const l1Right = + theme.fg("success", fmt(tokIn)) + + theme.fg("dim", "↓ ") + + theme.fg("accent", fmt(tokOut)) + + theme.fg("dim", "↑ ") + + theme.fg("warning", `$${cost.toFixed(4)}`) + + theme.fg("dim", " "); + + const pad1 = " ".repeat(Math.max(1, width - visibleWidth(l1Left) - visibleWidth(l1Right))); + const line1 = truncateToWidth(l1Left + pad1 + l1Right, width, ""); + + // Line 2: cwd | branch | tools + const l2Left = + theme.fg("dim", ` ${dir}`) + + (branch + ? theme.fg("dim", " ") + theme.fg("warning", "(") + theme.fg("success", branch) + theme.fg("warning", ")") + : "") + + theme.fg("dim", " › 159.195.60.33"); + + const entries = Object.entries(toolCounts); + const l2Right = entries.length === 0 + ? theme.fg("dim", "no tools yet ") + : entries.map(([n, c]) => theme.fg("accent", n) + theme.fg("dim", ":") + theme.fg("success", `${c}`)).join(theme.fg("dim", " ")) + " "; + + const pad2 = " ".repeat(Math.max(1, width - visibleWidth(l2Left) - visibleWidth(l2Right))); + const line2 = truncateToWidth(l2Left + pad2 + l2Right, width, ""); + + return [line1, line2]; + }, + }; + }); + }); + + pi.on("session_switch", async (_event, ctx) => { activeCtx = ctx; }); + + // ── Safety guard ────────────────────────────────────────────────────── + pi.on("tool_call", async (event, ctx) => { + if (isToolCallEventType("bash", event)) { + const cmd = event.input.command; + for (const { pattern, reason } of DANGEROUS) { + if (pattern.test(cmd)) { + const confirmed = await ctx.ui.confirm( + "⚠️ Destructive Operation", + `${reason}\n\nCommand:\n${cmd}\n\nRun this on LIVE production?`, + { timeout: 30000 } + ); + if (!confirmed) { + ctx.ui.notify(`🛡️ Blocked: ${reason}`, "warning"); + ctx.abort(); + return { + block: true, + reason: `🛑 BLOCKED: ${reason}\n\nUser declined. Ask what to do instead.`, + }; + } + break; + } + } + } + return { block: false }; + }); + + // ── System prompt injection ─────────────────────────────────────────── + pi.on("before_agent_start", async (event) => { + let extra = `\n\n${INFRA_CONTEXT}`; + if (focus) { + extra += `\n\n\n${focus}\nStay focused on this task. If asked something unrelated, note it but bring back to the focus.\n`; + } + return { systemPrompt: event.systemPrompt + extra }; + }); + + // ── Focus widget ────────────────────────────────────────────────────── + function setFocusWidget(ctx: ExtensionContext) { + ctx.ui.setWidget("focus", () => ({ + render(width: number): string[] { + const line = truncateToWidth(` 🎯 ${focus}`, width - 2, "…"); + return [ + " ".repeat(width), + line + " ".repeat(Math.max(0, width - visibleWidth(line))), + " ".repeat(width), + ]; + }, + invalidate() {}, + })); + } + + // ═══════════════════════════════════════════════════════════════════════ + // Commands + // ═══════════════════════════════════════════════════════════════════════ + + pi.registerCommand("stop", { + description: "Abort current AI action", + handler: async (args, ctx) => { + ctx.abort(); + ctx.ui.notify(args?.trim() ? `🛑 Stopped: ${args.trim()}` : "🛑 Stopped.", "warning"); + }, + }); + + pi.registerCommand("focus", { + description: "Set or change current task focus", + handler: async (args, ctx) => { + if (args?.trim()) { + focus = args.trim(); + setFocusWidget(ctx); + ctx.ui.notify(`🎯 Focus set: ${focus}`, "success"); + } else { + const answer = await ctx.ui.input("🎯 What are you working on?", focus || "e.g. Debug sync, check logs..."); + if (answer?.trim()) { + focus = answer.trim(); + setFocusWidget(ctx); + ctx.ui.notify(`🎯 Focus set: ${focus}`, "success"); + } + } + }, + }); + + pi.registerCommand("infra", { + description: "Show infra topology", + handler: async (_args, ctx) => { + ctx.ui.notify( + "🗺️ Infra Topology\n\n" + + "Server: root@159.195.60.33\n\n" + + "Containers:\n" + + " cr-server-new (10.213.16.224) — CharityRight + Docker\n" + + " qc-server-new (10.213.16.234) — QuikCue\n" + + " qc-server — STOPPED\n\n" + + "HAProxy:\n" + + " charityright.* → cr-server-new:443\n" + + " quikcue.* → qc-server-new:443\n" + + " antivirus.quikcue.com → localhost:8877\n\n" + + "Services (on cr-server-new):\n" + + " /opt/ayn-antivirus\n" + + " /opt/enthuse-db-sync-v2\n" + + " /opt/launchgood-sync\n" + + " /root/legacy-donation-system-laravel\n" + + " /root/redis-v2", + "info" + ); + }, + }); + + pi.registerCommand("health", { + description: "Live check of containers and key services", + handler: async (_args, ctx) => { + ctx.ui.notify("⏳ Checking infra health...", "info"); + try { + const containers = runSSH("incus list --format=csv -c ns", 10000); + const haproxy = runSSH("systemctl is-active haproxy", 5000); + const docker = runSSH("incus exec cr-server-new -- docker ps --format '{{.Names}}\\t{{.Status}}' 2>/dev/null | head -10", 10000); + const disk = runSSH("df -h / | tail -1 | awk '{print $5\" used of \"$2}'", 5000); + const mem = runSSH("free -m | awk 'NR==2{printf \"%sMB / %sMB (%.0f%%)\", $3,$2,$3*100/$2}'", 5000); + + ctx.ui.notify( + "✅ Infrastructure Health\n\n" + + `HAProxy: ${haproxy === "active" ? "✅ active" : "❌ " + haproxy}\n\n` + + `Containers:\n${containers.split("\n").map(l => " " + l).join("\n")}\n\n` + + `Docker (cr-server-new):\n${docker.split("\n").map(l => " " + l).join("\n")}\n\n` + + `Disk: ${disk}\n` + + `RAM: ${mem}`, + "info" + ); + } catch (e: any) { + ctx.ui.notify(`❌ Health check failed: ${e.message}`, "error"); + } + }, + }); + + pi.registerCommand("logs", { + description: "Tail logs for a service (usage: /logs launchgood)", + handler: async (args, ctx) => { + const services: Record = { + launchgood: "incus exec cr-server-new -- journalctl -u launchgood-sync -n 50 --no-pager 2>/dev/null || incus exec cr-server-new -- tail -50 /opt/launchgood-sync/logs/app.log 2>/dev/null", + enthuse: "incus exec cr-server-new -- journalctl -u enthuse-sync -n 50 --no-pager 2>/dev/null || incus exec cr-server-new -- tail -50 /opt/enthuse-db-sync-v2/logs/app.log 2>/dev/null", + antivirus: "journalctl -u ayn-antivirus -n 50 --no-pager 2>/dev/null", + haproxy: "journalctl -u haproxy -n 50 --no-pager", + laravel: "incus exec cr-server-new -- tail -50 /root/legacy-donation-system-laravel/storage/logs/laravel.log 2>/dev/null", + }; + + const svc = args?.trim().toLowerCase(); + + if (!svc || !services[svc]) { + const opts = Object.keys(services); + const choice = await ctx.ui.select("Which service logs?", opts); + if (!choice) return; + const cmd = services[choice]; + ctx.ui.notify("⏳ Fetching logs...", "info"); + const out = runSSH(cmd, 15000); + ctx.ui.notify(`📋 ${choice} logs:\n\n${out.slice(-3000)}`, "info"); + } else { + ctx.ui.notify("⏳ Fetching logs...", "info"); + const out = runSSH(services[svc], 15000); + ctx.ui.notify(`📋 ${svc} logs:\n\n${out.slice(-3000)}`, "info"); + } + }, + }); + + pi.registerCommand("ssh", { + description: "Run a raw SSH command on the server", + handler: async (args, ctx) => { + if (!args?.trim()) { + ctx.ui.notify("Usage: /ssh \nExample: /ssh incus list", "warning"); + return; + } + ctx.ui.notify(`⏳ Running: ${args.trim()}`, "info"); + const out = runSSH(args.trim(), 20000); + ctx.ui.notify(`$ ${args.trim()}\n\n${out}`, "info"); + }, + }); +} diff --git a/extensions/telegram-stream.ts b/extensions/telegram-stream.ts new file mode 100644 index 0000000..28f79b6 --- /dev/null +++ b/extensions/telegram-stream.ts @@ -0,0 +1,96 @@ +/** + * Telegram Stream Extension + * + * Sends live updates to Telegram as Pi runs tool calls. + * Edits a single message in-place so it feels like streaming. + * + * Reads TELEGRAM_BOT_TOKEN, TELEGRAM_ALLOWED_USERS, TELEGRAM_STREAM_MSG_ID + * from env — the bot sets TELEGRAM_STREAM_MSG_ID before spawning Pi. + * + * Usage: pi -e extensions/telegram-stream.ts + */ + +import type { ExtensionAPI } from "@mariozechner/pi-coding-agent"; +import { isToolCallEventType } from "@mariozechner/pi-coding-agent"; + +const BOT_TOKEN = process.env.TELEGRAM_BOT_TOKEN ?? ""; +const CHAT_ID = process.env.TELEGRAM_ALLOWED_USERS ?? ""; +const MSG_ID = process.env.TELEGRAM_STREAM_MSG_ID ?? ""; + +const MAX_LEN = 3800; // Telegram max is 4096, leave room + +function truncate(s: string): string { + return s.length > MAX_LEN ? s.slice(0, MAX_LEN) + "\n…" : s; +} + +async function editMessage(text: string) { + if (!BOT_TOKEN || !CHAT_ID || !MSG_ID) return; + try { + await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/editMessageText`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + chat_id: CHAT_ID, + message_id: parseInt(MSG_ID), + text: truncate(text), + parse_mode: "Markdown", + }), + }); + } catch (_) {} +} + +export default function (pi: ExtensionAPI) { + const steps: string[] = []; + const startTimes: Map = new Map(); + + function render(currentStep?: string): string { + const lines = ["⚙️ *Pi is working...*\n"]; + for (const s of steps) lines.push(s); + if (currentStep) lines.push(currentStep); + return lines.join("\n"); + } + + pi.on("tool_call", async (event, _ctx) => { + let label = ""; + + if (isToolCallEventType("bash", event)) { + const cmd = event.input.command ?? ""; + const short = cmd.length > 80 ? cmd.slice(0, 80) + "…" : cmd; + label = `🔄 \`${short}\``; + } else { + label = `🔄 \`${event.toolName}\``; + } + + startTimes.set(event.toolName + event.toolCallId, Date.now()); + await editMessage(render(label)); + }); + + pi.on("tool_execution_end", async (event) => { + const key = event.toolName + (event as any).toolCallId; + const elapsed = startTimes.has(key) ? ((Date.now() - startTimes.get(key)!) / 1000).toFixed(1) : "?"; + startTimes.delete(key); + + let label = ""; + if (event.toolName === "bash") { + const result = (event.result ?? "").toString().trim(); + const preview = result.split("\n").slice(0, 3).join("\n"); + const short = preview.length > 120 ? preview.slice(0, 120) + "…" : preview; + label = `✅ \`bash\` _(${elapsed}s)_${short ? "\n```\n" + short + "\n```" : ""}`; + } else { + label = `✅ \`${event.toolName}\` _(${elapsed}s)_`; + } + + steps.push(label); + // Keep last 10 steps to avoid message getting too long + if (steps.length > 10) steps.shift(); + + await editMessage(render()); + }); + + pi.on("agent_end", async (_event) => { + const summary = steps.length > 0 + ? `✅ *Done!* _(${steps.length} steps)_` + : `✅ *Done!*`; + await editMessage(render() + "\n\n" + summary); + }); +} diff --git a/justfile b/justfile index 1fe5fe2..e225a1e 100644 --- a/justfile +++ b/justfile @@ -124,4 +124,7 @@ all: just open agent-chain theme-cycler just open pi-pi theme-cycler just open observatory theme-cycler - just open agent-dashboard theme-cycler \ No newline at end of file + just open agent-dashboard theme-cycler +# Pi DevOps: optimized for CharityRight/QuikCue infra management +pi-devops: + pi -e extensions/pi-devops.ts -e extensions/theme-cycler.ts diff --git a/package.json b/package.json index c92ac68..e5de772 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,9 @@ "type": "module", "description": "Pi Coding Agent extension playground", "dependencies": { + "@mariozechner/pi-ai": "^0.56.1", + "@mariozechner/pi-coding-agent": "^0.56.1", + "@mariozechner/pi-tui": "^0.56.1", "yaml": "^2.8.0" }, "devDependencies": { diff --git a/telegram-bot/bot.err b/telegram-bot/bot.err index d5beb50..e69de29 100644 --- a/telegram-bot/bot.err +++ b/telegram-bot/bot.err @@ -1,1564 +0,0 @@ -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 80 | let msg = `Network request for '${method}' failed!`; -81 | if (isTelegramError(err)) -82 | msg += ` (${err.status}: ${err.statusText})`; -83 | if (sensitiveLogs && err instanceof Error) -84 | msg += ` ${err.message}`; -85 | throw new HttpError(msg, err); - ^ -HttpError: Network request for 'getUpdates' failed! - error: DOMException { - stack: "", - code: 23, - name: "TimeoutError", - message: "The operation timed out.", - INDEX_SIZE_ERR: 1, - DOMSTRING_SIZE_ERR: 2, - HIERARCHY_REQUEST_ERR: 3, - WRONG_DOCUMENT_ERR: 4, - INVALID_CHARACTER_ERR: 5, - NO_DATA_ALLOWED_ERR: 6, - NO_MODIFICATION_ALLOWED_ERR: 7, - NOT_FOUND_ERR: 8, - NOT_SUPPORTED_ERR: 9, - INUSE_ATTRIBUTE_ERR: 10, - INVALID_STATE_ERR: 11, - SYNTAX_ERR: 12, - INVALID_MODIFICATION_ERR: 13, - NAMESPACE_ERR: 14, - INVALID_ACCESS_ERR: 15, - VALIDATION_ERR: 16, - TYPE_MISMATCH_ERR: 17, - SECURITY_ERR: 18, - NETWORK_ERR: 19, - ABORT_ERR: 20, - URL_MISMATCH_ERR: 21, - QUOTA_EXCEEDED_ERR: 22, - TIMEOUT_ERR: 23, - INVALID_NODE_TYPE_ERR: 24, - DATA_CLONE_ERR: 25, - toString: [Function: toString], -}, - - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/error.js:85:15) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -❌ [775071081] Claude API timed out after 30s -❌ [775071081] 400 {"type":"error","error":{"type":"invalid_request_error","message":"messages.0.content.0: unexpected `tool_use_id` found in `tool_result` blocks: toolu_0111xY3a7g8MwBw1Soxfkz8f. Each `tool_result` block must have a corresponding `tool_use` block in the previous message."},"request_id":"req_011CYiHQwfrCSQysQgGFK5B5"} -❌ [775071081] Claude API timed out after 30s -❌ [775071081] Claude summary timed out after 30s -❌ [775071081] 400 {"type":"error","error":{"type":"invalid_request_error","message":"messages.0.content.0: unexpected `tool_use_id` found in `tool_result` blocks: toolu_01SBxLBHKov9GPKN6kP2wgcx. Each `tool_result` block must have a corresponding `tool_use` block in the previous message."},"request_id":"req_011CYiLavdTtRatZss7NfdLH"} -[grammY runner] Error while fetching updates: -[grammY runner] 80 | let msg = `Network request for '${method}' failed!`; -81 | if (isTelegramError(err)) -82 | msg += ` (${err.status}: ${err.statusText})`; -83 | if (sensitiveLogs && err instanceof Error) -84 | msg += ` ${err.message}`; -85 | throw new HttpError(msg, err); - ^ -HttpError: Network request for 'getUpdates' failed! - error: DOMException { - stack: "", - code: 23, - name: "TimeoutError", - message: "The operation timed out.", - INDEX_SIZE_ERR: 1, - DOMSTRING_SIZE_ERR: 2, - HIERARCHY_REQUEST_ERR: 3, - WRONG_DOCUMENT_ERR: 4, - INVALID_CHARACTER_ERR: 5, - NO_DATA_ALLOWED_ERR: 6, - NO_MODIFICATION_ALLOWED_ERR: 7, - NOT_FOUND_ERR: 8, - NOT_SUPPORTED_ERR: 9, - INUSE_ATTRIBUTE_ERR: 10, - INVALID_STATE_ERR: 11, - SYNTAX_ERR: 12, - INVALID_MODIFICATION_ERR: 13, - NAMESPACE_ERR: 14, - INVALID_ACCESS_ERR: 15, - VALIDATION_ERR: 16, - TYPE_MISMATCH_ERR: 17, - SECURITY_ERR: 18, - NETWORK_ERR: 19, - ABORT_ERR: 20, - URL_MISMATCH_ERR: 21, - QUOTA_EXCEEDED_ERR: 22, - TIMEOUT_ERR: 23, - INVALID_NODE_TYPE_ERR: 24, - DATA_CLONE_ERR: 25, - toString: [Function: toString], -}, - - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/error.js:85:15) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 80 | let msg = `Network request for '${method}' failed!`; -81 | if (isTelegramError(err)) -82 | msg += ` (${err.status}: ${err.statusText})`; -83 | if (sensitiveLogs && err instanceof Error) -84 | msg += ` ${err.message}`; -85 | throw new HttpError(msg, err); - ^ -HttpError: Network request for 'getUpdates' failed! - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/error.js:85:15) - -error: Unable to connect. Is the computer able to access the url? - path: "https://api.telegram.org/bot8409280209:AAGwJTR7qilJfLQkZcXkpaRJMp997LMnsEM/getUpdates", - errno: 0, - code: "ConnectionRefused" - - -[grammY runner] Error while fetching updates: -[grammY runner] 80 | let msg = `Network request for '${method}' failed!`; -81 | if (isTelegramError(err)) -82 | msg += ` (${err.status}: ${err.statusText})`; -83 | if (sensitiveLogs && err instanceof Error) -84 | msg += ` ${err.message}`; -85 | throw new HttpError(msg, err); - ^ -HttpError: Network request for 'getUpdates' failed! - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/error.js:85:15) - -error: Was there a typo in the url or port? - path: "https://api.telegram.org/bot8409280209:AAGwJTR7qilJfLQkZcXkpaRJMp997LMnsEM/getUpdates", - errno: 0, - code: "FailedToOpenSocket" - - -[grammY runner] Error while fetching updates: -[grammY runner] 80 | let msg = `Network request for '${method}' failed!`; -81 | if (isTelegramError(err)) -82 | msg += ` (${err.status}: ${err.statusText})`; -83 | if (sensitiveLogs && err instanceof Error) -84 | msg += ` ${err.message}`; -85 | throw new HttpError(msg, err); - ^ -HttpError: Network request for 'getUpdates' failed! - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/error.js:85:15) - -error: Unable to connect. Is the computer able to access the url? - path: "https://api.telegram.org/bot8409280209:AAGwJTR7qilJfLQkZcXkpaRJMp997LMnsEM/getUpdates", - errno: 0, - code: "ConnectionRefused" - - -[grammY runner] Error while fetching updates: -[grammY runner] 80 | let msg = `Network request for '${method}' failed!`; -81 | if (isTelegramError(err)) -82 | msg += ` (${err.status}: ${err.statusText})`; -83 | if (sensitiveLogs && err instanceof Error) -84 | msg += ` ${err.message}`; -85 | throw new HttpError(msg, err); - ^ -HttpError: Network request for 'getUpdates' failed! - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/error.js:85:15) - -error: Was there a typo in the url or port? - path: "https://api.telegram.org/bot8409280209:AAGwJTR7qilJfLQkZcXkpaRJMp997LMnsEM/getUpdates", - errno: 0, - code: "FailedToOpenSocket" - - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 80 | let msg = `Network request for '${method}' failed!`; -81 | if (isTelegramError(err)) -82 | msg += ` (${err.status}: ${err.statusText})`; -83 | if (sensitiveLogs && err instanceof Error) -84 | msg += ` ${err.message}`; -85 | throw new HttpError(msg, err); - ^ -HttpError: Network request for 'getUpdates' failed! - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/error.js:85:15) - -error: The socket connection was closed unexpectedly. For more information, pass `verbose: true` in the second argument to fetch() - path: "https://api.telegram.org/bot8409280209:AAGwJTR7qilJfLQkZcXkpaRJMp997LMnsEM/getUpdates", - errno: 0, - code: "ECONNRESET" - - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - -[grammY runner] Error while fetching updates: -[grammY runner] 165 | function createTimeout(controller, seconds, method) { -166 | let handle = undefined; -167 | const promise = new Promise((_, reject) => { -168 | handle = setTimeout(() => { -169 | const msg = `Request to '${method}' timed out after ${seconds} seconds`; -170 | reject(new Error(msg)); - ^ -error: Request to 'getUpdates' timed out after 500 seconds - at (/Users/azreenjamal/pi-vs-claude-code/telegram-bot/node_modules/grammy/out/core/client.js:170:24) - diff --git a/telegram-bot/bot.log b/telegram-bot/bot.log index 5e4a792..9df8869 100644 --- a/telegram-bot/bot.log +++ b/telegram-bot/bot.log @@ -1,134 +1,44 @@ 🚀 Bot starting... -✅ Bot is live (concurrent mode) -📤 [775071081] 301 chars in 5.8s -📤 [775071081] 480 chars in 5.7s -📤 [775071081] 116 chars in 3.0s -🔧 [775071081] uname -a -📤 [775071081] 212 chars in 7.6s -🔧 [775071081] systemctl list-units --type=service --state=running | head -20 -🔧 [775071081] ps aux | head -20 -🔧 [775071081] ps aux | grep -v "^\[" | grep -E "(nginx|apache|haproxy|mysql|redis|postgres|docker|incus)" | head -10 -🔧 [775071081] free -h && echo && df -h | head -5 -📤 [775071081] 420 chars in 24.9s -🔧 [775071081] incus list -📤 [775071081] 379 chars in 9.7s -🔧 [775071081] cd /opt/enthuse-db-sync-v2 && ls -la -🔧 [775071081] cd /opt/enthuse-db-sync-v2 && docker ps | grep enthuse -🔧 [775071081] cd /opt/enthuse-db-sync-v2 && tail -20 logs/*.log | head -20 -🔧 [775071081] cd /opt/enthuse-db-sync-v2 && ls logs/ | tail -5 -🔧 [775071081] cd /opt/enthuse-db-sync-v2 && tail -10 logs/sync_20260227_185400.log -🚀 Bot starting... -✅ Bot is live (concurrent mode) -🔧 [775071081] cd /opt/enthuse-db-sync-v2 && docker-compose ps -🔧 [775071081] cd /opt/enthuse-db-sync-v2 && ls -la -🔧 [775071081] cd /opt/enthuse-db-sync-v2 && docker ps | grep enthuse -🔧 [775071081] systemctl status docker -🔧 [775071081] ps aux | grep -E "(enthuse|launchgood)" | head -10 -🔧 [775071081] cd /opt/launchgood-sync && ls -la -🔧 [775071081] crontab -l | grep -E "(enthuse|launchgood)" -🔧 [775071081] cd /opt/enthuse-db-sync-v2/logs && ls -la | tail -5 -🔧 [775071081] cd /opt/launchgood-sync/logs && ls -la | tail -5 -🔧 [775071081] tail -n 20 /opt/enthuse-db-sync-v2/logs/sync_20260227_185400.log -📤 [775071081] 83 chars in 132.2s -🚀 Bot starting... -✅ Bot is live (concurrent mode) -🔧 [775071081] systemctl status enthuse-db-sync-v2 | head -10 -🔧 [775071081] ps aux | grep -E "(enthuse|launchgood)" | grep -v grep -🔧 [775071081] ls -la /opt/ | grep -E "(enthuse|launch)" -🔧 [775071081] cd /opt/enthuse-db-sync-v2 && ls -la | head -5 -🔧 [775071081] cd /opt/enthuse-db-sync-v2 && find . -name "*.log" | head -3 -🔧 [775071081] cd /opt/enthuse-db-sync-v2 && ls -lt logs/ | head -5 -🔧 [775071081] cd /opt/enthuse-db-sync-v2 && tail -10 logs/sync_20260227_185400.log -🔧 [775071081] cd /opt/launchgood-sync && ls -lt logs/ | head -5 -🔧 [775071081] cd /opt/launchgood-sync && tail -5 logs/donations_20260227_185411.log -🔧 [775071081] crontab -l | grep -E "(enthuse|launch)" -🚀 Bot starting... -✅ Bot is live (concurrent mode) -🚀 Bot starting... -✅ Bot is live (concurrent mode) -🔧 [775071081] incus exec cr-server-new -- ps aux | grep -E "(enthuse|launchgood|charityright)" | grep -v grep -🔧 [775071081] incus exec cr-server-new -- ls -la /opt/ | grep sync -🔧 [775071081] incus exec cr-server-new -- crontab -l | grep sync -🔧 [775071081] incus exec cr-server-new -- tail -5 /opt/enthuse-db-sync-v2/logs/cron.log -🔧 [775071081] incus exec cr-server-new -- tail -5 /opt/launchgood-sync/logs/cron.log -🔧 [775071081] incus exec cr-server-new -- tail -5 /opt/charityright-sync/logs/cron.log -📤 [775071081] 361 chars in 34.9s -🔧 [775071081] incus exec cr-server-new -- tail -20 /opt/charityright-sync/logs/cron.log -🔧 [775071081] incus exec cr-server-new -- ls -la /opt/charityright-sync/logs/ | head -10 -🔧 [775071081] incus exec cr-server-new -- tail -50 /opt/charityright-sync/logs/sync_$(ls /opt/charityright-sync/logs/sync_*.log | tail -1 | cut -d'/' -f5) -🔧 [775071081] incus exec cr-server-new -- ls /opt/charityright-sync/logs/sync_*.log | tail -1 -🔧 [775071081] incus exec cr-server-new -- find /opt/charityright-sync/logs/ -name "sync_*.log" -type f | tail -1 -🔧 [775071081] incus exec cr-server-new -- tail -20 /opt/charityright-sync/logs/sync_20260303_220001.log -🔧 [775071081] incus exec cr-server-new -- bash /opt/charityright-sync/run-sync.sh -🔧 [775071081] incus exec cr-server-new -- cat /opt/charityright-sync/run-sync.sh | head -20 -🔧 [775071081] incus exec cr-server-new -- grep -A 10 -B 10 "FAILED.*exit: 0" /opt/charityright-sync/run-sync.sh -🔧 [775071081] incus exec cr-server-new -- bash -c "cd /opt/charityright-sync && timeout 60 python3 sync.py" 2>&1 | head -20 -🚀 Bot starting... -✅ Bot is live (concurrent mode) -🔧 [775071081] incus list -🔧 [775071081] incus exec cr-server-new -- docker ps -a | head -10 -🔧 [775071081] systemctl status haproxy | head -5 -🔧 [775071081] service haproxy status | head -5 -🔧 [775071081] ps aux | grep haproxy | grep -v grep -🔧 [775071081] incus exec cr-server-new -- ps aux | grep -E "(sync|cron)" | head -5 -📤 [775071081] 394 chars in 89.3s -🔧 [775071081] incus exec cr-server-new -- crontab -l | grep -E "(enthuse|launchgood|charityright)" | head -10 -🔧 [775071081] incus exec cr-server-new -- tail -5 /opt/enthuse-db-sync-v2/logs/cron.log -🔧 [775071081] incus exec cr-server-new -- tail -5 /opt/launchgood-sync/logs/cron.log -🔧 [775071081] incus exec cr-server-new -- tail -5 /opt/charityright-sync/logs/cron.log -🔧 [775071081] incus exec cr-server-new -- docker exec dokploy-migrated-cr-postgres-data psql -U postgres -d donation_warehouse -c "SELECT COUNT(*) as total_donations FROM donations;" 2>/dev/null -🔧 [775071081] incus exec cr-server-new -- docker ps | grep postgres -🔧 [775071081] incus exec cr-server-new -- docker exec dokploy-migrated-cr-postgres-data psql -U postgres -d donation_warehouse -c "SELECT COUNT(*) FROM donations;" | head -5 -🔧 [775071081] incus exec cr-server-new -- docker exec dokploy-migrated-cr-postgres-data psql -U postgres -l | grep donation -🔧 [775071081] incus exec cr-server-new -- docker exec dokploy-migrated-cr-postgres-data psql -U postgres -d donation_warehouse -c "\dt" | head -5 -📤 [775071081] 558 chars in 237.2s -🔧 [775071081] incus exec cr-server-new -- cat /opt/charityright-sync/run-sync.sh -🔧 [775071081] incus exec cr-server-new -- tail -20 /opt/charityright-sync/run-sync.sh -🔧 [775071081] incus exec cr-server-new -- ls -la /opt/charityright-sync/logs/ | head -5 -🔧 [775071081] incus exec cr-server-new -- ls -la /opt/charityright-sync/logs/sync_* | tail -3 -🔧 [775071081] incus exec cr-server-new -- find /opt/charityright-sync/logs/ -name "sync_*" -type f | wc -l -🔧 [775071081] incus exec cr-server-new -- find /opt/charityright-sync/logs/ -name "sync_*" -type f | sort -t_ -k2 | tail -3 -🔧 [775071081] incus exec cr-server-new -- cat /opt/charityright-sync/logs/sync_20260304_160001.log -🔧 [775071081] incus exec cr-server-new -- docker images | grep charityright -🔧 [775071081] incus exec cr-server-new -- ls -la /opt/charityright-sync/ -🔧 [775071081] incus exec cr-server-new -- cat /opt/charityright-sync/Dockerfile -🔧 [775071081] incus exec cr-server-new -- cd /opt/charityright-sync && docker build -t charityright-sync . -🔧 [775071081] incus exec cr-server-new -- bash -c "cd /opt/charityright-sync && docker build -t charityright-sync ." -🔧 [775071081] incus exec cr-server-new -- docker images | grep charityright -📤 [775071081] 155 chars in 29.8s -🚀 Bot starting... -✅ Bot is live (concurrent mode) -🚀 Bot starting... -✅ Bot is live (concurrent mode) -🔧 [775071081] incus exec cr-server-new -- ls -la /opt/charityright-sync/ -🔧 [775071081] incus exec cr-server-new -- tail -20 /opt/charityright-sync/logs/sync.log -🔧 [775071081] incus exec cr-server-new -- ls -la /opt/charityright-sync/logs/ -🔧 [775071081] incus exec cr-server-new -- tail -10 /opt/charityright-sync/logs/cron.log -🔧 [775071081] incus exec cr-server-new -- tail -20 /opt/charityright-sync/logs/sync_20260303_173815.log -🔧 [775071081] incus exec cr-server-new -- cat /opt/charityright-sync/run-sync.sh | head -30 -🔧 [775071081] incus exec cr-server-new -- tail -20 /opt/charityright-sync/run-sync.sh -🔧 [775071081] incus exec cr-server-new -- docker run --rm --name charityright-sync-test --network dokploy-network charityright-sync 2>&1 | tail -10 -🔧 [775071081] incus exec cr-server-new -- timeout 30s docker run --rm --name charityright-sync-test --network dokploy-network charityright-sync; echo "Exit code: $?" -🔧 [775071081] incus exec cr-server-new -- docker ps | grep charityright -📤 [775071081] 647 chars in 220.2s -🔧 [775071081] incus exec cr-server-new -- tail -20 /opt/charityright-sync/sync_charityright.py -🔧 [775071081] incus exec cr-server-new -- grep -A5 -B5 "mysql_conn" /opt/charityright-sync/sync_charityright.py | tail -15 -🔧 [775071081] incus exec cr-server-new -- cp /opt/charityright-sync/sync_charityright.py /opt/charityright-sync/sync_charityright.py.backup -🔧 [775071081] incus exec cr-server-new -- sed -i 's/if __name__ == '\''__main__'\'':/ import sys\n sys.exit(0)\n\nif __name__ == '\''__main__'\'':/' /opt/charityright-sync/sync_charityright.py -🔧 [775071081] incus exec cr-server-new -- tail -10 /opt/charityright-sync/sync_charityright.py -🔧 [775071081] incus exec cr-server-new -- cd /opt/charityright-sync && docker build -t charityright-sync . -🔧 [775071081] incus exec cr-server-new -- bash -c "cd /opt/charityright-sync && docker build -t charityright-sync ." -🔧 [775071081] incus exec cr-server-new -- timeout 60s docker run --rm --name charityright-sync-test --network dokploy-network charityright-sync; echo "Exit code: $?" -🔧 [775071081] incus exec cr-server-new -- timeout 120s docker run --rm --name charityright-sync-test2 --network dokploy-network charityright-sync 2>&1 | tail -5; echo "Exit code: $?" -🔧 [775071081] incus exec cr-server-new -- bash /opt/charityright-sync/run-sync.sh 2>&1 | tail -10 -📤 [775071081] 595 chars in 407.1s -🔧 [775071081] incus exec cr-server-new -- bash /opt/charityright-sync/run-sync.sh -🔧 [775071081] incus exec cr-server-new -- docker exec dokploy-migrated-cr-postgres-data psql -U postgres -d donation_warehouse -c "SELECT state, started_at FROM sync_state WHERE source='charityright' ORDER BY started_at DESC LIMIT 1" -🔧 [775071081] incus exec cr-server-new -- docker exec dokploy-migrated-cr-postgres-data psql -U postgres -d donation_warehouse -c "SELECT * FROM sync_state WHERE source='charityright' ORDER BY started_at DESC LIMIT 1" -🔧 [775071081] incus exec cr-server-new -- docker exec dokploy-migrated-cr-postgres-data psql -U postgres -d donation_warehouse -c "\d sync_state" -🔧 [775071081] incus exec cr-server-new -- docker exec dokploy-migrated-cr-postgres-data psql -U postgres -d donation_warehouse -c "SELECT * FROM sync_state WHERE key='charityright'" -🔧 [775071081] incus exec cr-server-new -- docker ps | grep charityright -🔧 [775071081] incus exec cr-server-new -- bash -c "cd /opt/charityright-sync && timeout 180s docker run --rm --network dokploy-network charityright-sync 2>&1 | tail -10" -🔧 [775071081] incus exec cr-server-new -- docker exec dokploy-migrated-cr-postgres-data psql -U postgres -d donation_warehouse -c "SELECT * FROM sync_state WHERE key='charityright'" -🔧 [775071081] incus exec cr-server-new -- docker exec dokploy-migrated-cr-postgres-data psql -U postgres -d donation_warehouse -c "SELECT * FROM sync_state" -📤 [775071081] 651 chars in 370.7s +✅ Bot is live — polling started (model: claude-sonnet-4-6) +🤖 [775071081] Calling Pi (continue session)... +📤 [775071081] 263 chars in 4.2s +🤖 [775071081] Calling Pi (continue session)... +🔧 [775071081] cat /private/tmp/.env 2>/dev/null || cat ~/.env 2>/dev/null || echo "NO ENV FOUN... +🔧 [775071081] ssh -o ConnectTimeout=5 -p 22 root@159.195.60.33 " +echo '=== UPTIME ===' && upti... +🔧 [775071081] ssh -o ConnectTimeout=5 -p 22 root@159.195.60.33 " +echo '=== HAPROXY ===' && ser... +🔧 [775071081] ssh -o ConnectTimeout=5 -p 22 root@159.195.60.33 " +echo '=== HAPROXY PROCESS ===... +🔧 [775071081] ssh -o ConnectTimeout=5 -p 22 root@159.195.60.33 "cat ~/.env 2>/dev/null || ls /... +🔧 [775071081] ssh -o ConnectTimeout=5 -p 22 root@159.195.60.33 " +echo '=== HIGH LOAD CAUSE ===... +🔧 [775071081] ssh -o ConnectTimeout=5 -p 22 root@159.195.60.33 "grep -r 'ASANA' /root/ /opt/ -... +🔧 [775071081] find /private/tmp -name "*.env" 2>/dev/null; find ~ -maxdepth 3 -name ".env" 2>/... +🔧 [775071081] grep -i 'ASANA' /Users/azreenjamal/pi-vs-claude-code/.env /Users/azreenjamal/pi-... +🔧 [775071081] grep -i 'ASANA' /Users/azreenjamal/pi-vs-claude-code/.env +🔧 [775071081] grep -i 'ASANA\|WORKSPACE\|PROJECT' /Users/azreenjamal/pi-vs-claude-code/.env +🔧 [775071081] # Get workspace and project info from Asana +curl -s -H "Authorization: Bearer 2/... +🔧 [775071081] # Get projects in workspace +curl -s -H "Authorization: Bearer 2/1212300623824347... +🔧 [775071081] # Task 1: qc-server-new FROZEN +curl -s -X POST "https://app.asana.com/api/1.0/ta... +🔧 [775071081] # Task 2: High CPU load + rsync snapshot +curl -s -X POST "https://app.asana.com/... +📤 [775071081] 1026 chars in 190.5s +🤖 [775071081] Calling Pi (continue session)... +🔧 [775071081] ssh -o ConnectTimeout=5 -p 22 root@159.195.60.33 "incus unfreeze qc-server-new &... +🔧 [775071081] ssh -o ConnectTimeout=5 -p 22 root@159.195.60.33 " +incus list qc-server-new --fo... +🔧 [775071081] curl -s -X PUT "https://app.asana.com/api/1.0/tasks/1213564390289259" \ + -H "Au... +📤 [775071081] 221 chars in 33.6s +🤖 [775071081] Calling Pi (continue session)... +🔧 [775071081] ssh -o ConnectTimeout=5 -p 22 root@159.195.60.33 " +echo '=== TOP SWAP USERS ==='... +🔧 [775071081] ssh -o ConnectTimeout=5 -p 22 root@159.195.60.33 " +cat /proc/meminfo | grep -i s... +📤 [775071081] 531 chars in 32.0s +🤖 [775071081] Calling Pi (continue session)... +📤 [775071081] 493 chars in 9.1s diff --git a/telegram-bot/index.ts b/telegram-bot/index.ts index 3243fab..7afefea 100644 --- a/telegram-bot/index.ts +++ b/telegram-bot/index.ts @@ -66,7 +66,10 @@ RULES: - If a command fails, try an alternative approach immediately. Don't just report the error. - NEVER run local commands like "just", "pi", "npm", "bun" etc. on the local machine. You only interact with the REMOTE server via SSH. - NEVER run "cd /Users" or any local filesystem commands. ALL commands must go through SSH. -- The ONLY use of your bash tool is: ssh -p ${SSH_PORT} ${SSH_USER}@${SSH_HOST} "..." or curl for APIs (like Asana).`; +- The ONLY use of your bash tool is: ssh -p ${SSH_PORT} ${SSH_USER}@${SSH_HOST} "..." or curl for APIs (like Asana). +- Be EFFICIENT with tool calls. Combine multiple checks into ONE ssh command using && or ; +- Example: ssh ... "uptime && df -h / && free -h && docker ps" — NOT 4 separate SSH calls. +- Aim for max 5-8 tool calls per task. If a task needs more, break it into phases and report after each phase.`; // ─── Stream Pi JSON output with live Telegram updates ─── async function callPiStreaming( @@ -78,11 +81,11 @@ async function callPiStreaming( const session = sessionPath(userId); let hasSession = existsSync(session); - // Auto-clear session if too large (>200KB = context bloat) + // Auto-clear session if too large (>500KB = context bloat) if (hasSession) { try { const stat = require("fs").statSync(session); - if (stat.size > 200_000) { + if (stat.size > 500_000) { console.log(`🧹 [${userId}] Session too large (${(stat.size / 1024).toFixed(0)}KB) — clearing`); require("fs").unlinkSync(session); hasSession = false; @@ -97,6 +100,7 @@ async function callPiStreaming( "--mode", "json", "--system-prompt", SYSTEM_PROMPT, "--session", session, + "--no-extensions", ]; if (hasSession) args.push("--continue"); @@ -107,6 +111,7 @@ async function callPiStreaming( const proc = Bun.spawn(args, { stdout: "pipe", stderr: "pipe", + cwd: "/tmp", env: { ...process.env, TERM: "dumb" }, }); @@ -114,9 +119,9 @@ async function callPiStreaming( signal.addEventListener("abort", abortHandler, { once: true }); const timer = setTimeout(() => { - console.log(`⏰ [${userId}] Pi timed out after 300s`); + console.log(`⏰ [${userId}] Pi timed out after 600s`); proc.kill(); - }, 300_000); + }, 600_000); // Read stderr in background const stderrPromise = new Response(proc.stderr).text(); @@ -222,12 +227,18 @@ async function callPiStreaming( if (exitCode !== 0) { console.error(`❌ [${userId}] Pi exited ${exitCode}: ${stderr.slice(0, 500)}`); - if (hasSession && (stderr.includes("session") || stderr.includes("tool_use_id") || stderr.includes("tool_result") || stderr.includes("invalid_request"))) { + if (hasSession && (stderr.includes("session") || stderr.includes("tool_use_id") || stderr.includes("tool_result") || stderr.includes("invalid_request") || stderr.includes("Could not parse"))) { console.log(`🔄 [${userId}] Corrupted session — clearing and retrying...`); try { require("fs").unlinkSync(session); } catch {} return callPiStreaming(userId, message, signal, ctx); } - const exitMsg = exitCode === 143 ? "timed out (5 min limit)" : (stderr.slice(0, 200) || `exited with code ${exitCode}`); + // Auth failure — don't delete session, just report + if (stderr.includes("Authentication failed")) { + throw new Error("Pi auth expired. Run `pi /login anthropic` in terminal."); + } + // On timeout (143) or crash, the session file may be incomplete — don't delete it, + // but next call with --continue will retry. If THAT fails, the corruption handler above catches it. + const exitMsg = exitCode === 143 ? "timed out (10 min limit). Send your message again to continue." : (stderr.slice(0, 200) || `exited with code ${exitCode}`); throw new Error(`Pi error: ${exitMsg}`); }