diff --git a/SECURE-BOT.md b/SECURE-BOT.md index 0e270583f..9ee0b7574 100644 --- a/SECURE-BOT.md +++ b/SECURE-BOT.md @@ -1,4 +1,4 @@ -# Moltbot Secure Edition +# AssureBot Edition A lean, secure, self-hosted AI assistant for Railway deployment. @@ -25,7 +25,7 @@ A lean, secure, self-hosted AI assistant for Railway deployment. ``` ┌────────────────────────────────────────────────────────────┐ -│ MOLTBOT SECURE │ +│ ASSUREBOT │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Telegram │ │ Webhooks │ │ Scheduler │ │ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 95b940c97..df5dfdd73 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -314,7 +314,7 @@ importers: specifier: ^10.5.0 version: 10.5.0 devDependencies: - openclaw: + moltbot: specifier: workspace:* version: link:../.. @@ -322,7 +322,7 @@ importers: extensions/line: devDependencies: - openclaw: + moltbot: specifier: workspace:* version: link:../.. @@ -348,7 +348,7 @@ importers: specifier: ^4.3.6 version: 4.3.6 devDependencies: - openclaw: + moltbot: specifier: workspace:* version: link:../.. @@ -356,7 +356,7 @@ importers: extensions/memory-core: devDependencies: - openclaw: + moltbot: specifier: workspace:* version: link:../.. @@ -386,7 +386,7 @@ importers: express: specifier: ^5.2.1 version: 5.2.1 - openclaw: + moltbot: specifier: workspace:* version: link:../.. proper-lockfile: @@ -397,12 +397,12 @@ importers: extensions/nostr: dependencies: + moltbot: + specifier: workspace:* + version: link:../.. nostr-tools: specifier: ^2.20.0 version: 2.20.0(typescript@5.9.3) - openclaw: - specifier: workspace:* - version: link:../.. zod: specifier: ^4.3.6 version: 4.3.6 @@ -439,7 +439,7 @@ importers: specifier: ^4.3.5 version: 4.3.6 devDependencies: - openclaw: + moltbot: specifier: workspace:* version: link:../.. @@ -459,7 +459,7 @@ importers: extensions/zalo: dependencies: - openclaw: + moltbot: specifier: workspace:* version: link:../.. undici: @@ -471,21 +471,40 @@ importers: '@sinclair/typebox': specifier: 0.34.47 version: 0.34.47 - openclaw: + moltbot: specifier: workspace:* version: link:../.. packages/clawdbot: dependencies: - openclaw: + moltbot: specifier: workspace:* version: link:../.. - packages/moltbot: + secure: dependencies: - openclaw: - specifier: workspace:* - version: link:../.. + '@anthropic-ai/sdk': + specifier: ^0.39.0 + version: 0.39.0 + cron: + specifier: ^3.1.7 + version: 3.5.0 + grammy: + specifier: ^1.21.1 + version: 1.39.3 + openai: + specifier: ^4.77.0 + version: 4.104.0(ws@8.19.0)(zod@3.25.76) + devDependencies: + '@types/node': + specifier: ^22.10.2 + version: 22.19.7 + tsx: + specifier: ^4.7.0 + version: 4.21.0 + typescript: + specifier: ^5.3.3 + version: 5.9.3 ui: dependencies: @@ -525,6 +544,9 @@ packages: peerDependencies: zod: ^3.25.0 || ^4.0.0 + '@anthropic-ai/sdk@0.39.0': + resolution: {integrity: sha512-eMyDIPRZbt1CCLErRCi3exlAvNkBtRe+kW5vvJyef93PmNr/clstYgHhtvmkxN82nlKgzyGPCyGxrm0JQ1ZIdg==} + '@anthropic-ai/sdk@0.71.2': resolution: {integrity: sha512-TGNDEUuEstk/DKu0/TflXAEt+p+p/WhTlFzEnoosvbaDU2LTjm42igSdlL0VijrKpWejtOKxX0b8A7uc+XiSAQ==} hasBin: true @@ -2725,6 +2747,9 @@ packages: '@types/long@4.0.2': resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + '@types/luxon@3.4.2': + resolution: {integrity: sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==} + '@types/markdown-it@14.1.2': resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} @@ -2740,12 +2765,21 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node-fetch@2.6.13': + resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} + '@types/node@10.17.60': resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + '@types/node@18.19.130': + resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} + '@types/node@20.19.30': resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==} + '@types/node@22.19.7': + resolution: {integrity: sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==} + '@types/node@24.10.9': resolution: {integrity: sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==} @@ -2958,6 +2992,10 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + ajv-formats@3.0.1: resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} peerDependencies: @@ -3325,6 +3363,9 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cron@3.5.0: + resolution: {integrity: sha512-0eYZqCnapmxYcV06uktql93wNWdlTmmBFP2iYz+JPVcQqlyFYcn1lFuIk4R54pkOmE7mcldTAPZv6X5XA4Q46A==} + croner@9.1.0: resolution: {integrity: sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g==} engines: {node: '>=18.0'} @@ -3633,6 +3674,9 @@ packages: forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + form-data-encoder@1.7.2: + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + form-data@2.3.3: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} engines: {node: '>= 0.12'} @@ -3645,6 +3689,10 @@ packages: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} + formdata-node@4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -3839,6 +3887,9 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -4232,6 +4283,10 @@ packages: lucide@0.563.0: resolution: {integrity: sha512-2zBzDJ5n2Plj3d0ksj6h9TWPOSiKu9gtxJxnBAye11X/8gfWied6IYJn6ADYBp1NPoJmgpyOYP3wMrVx69+2AA==} + luxon@3.5.0: + resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} + engines: {node: '>=12'} + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -4520,6 +4575,18 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} + openai@4.104.0: + resolution: {integrity: sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.23.8 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + openai@6.10.0: resolution: {integrity: sha512-ITxOGo7rO3XRMiKA5l7tQ43iNNu+iXGFAcf2t+aWVzzqRaS0i7m1K2BhxNdaveB+5eENhO0VY1FkiZzhBk4v3A==} hasBin: true @@ -5313,6 +5380,9 @@ packages: resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} engines: {node: '>=18'} + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -5462,6 +5532,10 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} + web-streams-polyfill@4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -5583,6 +5657,18 @@ snapshots: dependencies: zod: 4.3.6 + '@anthropic-ai/sdk@0.39.0': + dependencies: + '@types/node': 18.19.130 + '@types/node-fetch': 2.6.13 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + '@anthropic-ai/sdk@0.71.2(zod@4.3.6)': dependencies: json-schema-to-ts: 3.1.1 @@ -8502,6 +8588,8 @@ snapshots: '@types/long@4.0.2': {} + '@types/luxon@3.4.2': {} + '@types/markdown-it@14.1.2': dependencies: '@types/linkify-it': 5.0.0 @@ -8515,12 +8603,25 @@ snapshots: '@types/ms@2.1.0': {} + '@types/node-fetch@2.6.13': + dependencies: + '@types/node': 22.19.7 + form-data: 4.0.5 + '@types/node@10.17.60': {} + '@types/node@18.19.130': + dependencies: + undici-types: 5.26.5 + '@types/node@20.19.30': dependencies: undici-types: 6.21.0 + '@types/node@22.19.7': + dependencies: + undici-types: 6.21.0 + '@types/node@24.10.9': dependencies: undici-types: 7.16.0 @@ -8808,6 +8909,10 @@ snapshots: agent-base@7.1.4: {} + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + ajv-formats@3.0.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -9210,6 +9315,11 @@ snapshots: core-util-is@1.0.3: {} + cron@3.5.0: + dependencies: + '@types/luxon': 3.4.2 + luxon: 3.5.0 + croner@9.1.0: {} cross-fetch@4.1.0: @@ -9573,6 +9683,8 @@ snapshots: forever-agent@0.6.1: {} + form-data-encoder@1.7.2: {} + form-data@2.3.3: dependencies: asynckit: 0.4.0 @@ -9596,6 +9708,11 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 + formdata-node@4.4.1: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 4.0.0-beta.3 + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 @@ -9836,6 +9953,10 @@ snapshots: transitivePeerDependencies: - supports-color + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -10236,6 +10357,8 @@ snapshots: lucide@0.563.0: {} + luxon@3.5.0: {} + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -10553,6 +10676,21 @@ snapshots: mimic-function: 5.0.1 optional: true + openai@4.104.0(ws@8.19.0)(zod@3.25.76): + dependencies: + '@types/node': 18.19.130 + '@types/node-fetch': 2.6.13 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + optionalDependencies: + ws: 8.19.0 + zod: 3.25.76 + transitivePeerDependencies: + - encoding + openai@6.10.0(ws@8.19.0)(zod@4.3.6): optionalDependencies: ws: 8.19.0 @@ -11500,6 +11638,8 @@ snapshots: uint8array-extras@1.5.0: {} + undici-types@5.26.5: {} + undici-types@6.21.0: {} undici-types@7.16.0: {} @@ -11614,6 +11754,8 @@ snapshots: web-streams-polyfill@3.3.3: {} + web-streams-polyfill@4.0.0-beta.3: {} + webidl-conversions@3.0.1: {} whatwg-fetch@3.6.20: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index acf898add..3b66f3dcb 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,6 +1,7 @@ packages: - . - ui + - secure - packages/* - extensions/* diff --git a/secure/Dockerfile b/secure/Dockerfile index 29d9097e0..8c58159d3 100644 --- a/secure/Dockerfile +++ b/secure/Dockerfile @@ -1,4 +1,4 @@ -# Moltbot Secure - Minimal Docker Image +# AssureBot - Minimal Docker Image # Lean, secure, self-hosted AI assistant for Railway FROM node:22-slim AS builder @@ -8,8 +8,8 @@ WORKDIR /app # Install pnpm RUN corepack enable && corepack prepare pnpm@latest --activate -# Copy package files -COPY package.json pnpm-lock.yaml ./ +# Copy workspace config and package files +COPY pnpm-workspace.yaml pnpm-lock.yaml package.json ./ COPY secure/package.json ./secure/ # Install dependencies @@ -17,24 +17,24 @@ RUN pnpm install --frozen-lockfile --prod=false # Copy source COPY secure/ ./secure/ -COPY tsconfig.json ./ # Build TypeScript -RUN pnpm exec tsc --project secure/tsconfig.json +RUN cd secure && pnpm exec tsc # Production image FROM node:22-slim AS runner # Security: Run as non-root user -RUN useradd -m -u 1000 moltbot -USER moltbot +RUN useradd -m -u 1000 -s /bin/bash assurebot +USER assurebot WORKDIR /app # Copy built files and production deps -COPY --from=builder --chown=moltbot:moltbot /app/node_modules ./node_modules -COPY --from=builder --chown=moltbot:moltbot /app/secure/dist ./dist -COPY --from=builder --chown=moltbot:moltbot /app/package.json ./ +COPY --from=builder --chown=assurebot:assurebot /app/node_modules ./node_modules +COPY --from=builder --chown=assurebot:assurebot /app/secure/node_modules ./secure/node_modules +COPY --from=builder --chown=assurebot:assurebot /app/secure/dist ./dist +COPY --from=builder --chown=assurebot:assurebot /app/secure/package.json ./ # Create data directory for audit logs RUN mkdir -p /app/data diff --git a/secure/README.md b/secure/README.md index f8005e120..b08de9a9e 100644 --- a/secure/README.md +++ b/secure/README.md @@ -1,12 +1,12 @@ -# Moltbot Secure +# AssureBot **Lean, secure, self-hosted AI assistant for Railway.** Your AI agent that runs on your infrastructure, answers only to you, and you can actually audit. -## Why Secure Edition? +## Why AssureBot? -| Full Moltbot | Secure Edition | +| Full Moltbot | AssureBot | |--------------|----------------| | 12+ channels | Telegram only | | File-based config | Env vars only | @@ -46,7 +46,7 @@ Your AI agent that runs on your infrastructure, answers only to you, and you can ### One-Click -[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/moltbot-secure) +[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/assurebot) ### Manual diff --git a/secure/config.ts b/secure/config.ts index 9411cabdd..c117aee09 100644 --- a/secure/config.ts +++ b/secure/config.ts @@ -161,7 +161,7 @@ export function loadSecureConfig(): SecureConfig { }, sandbox: { enabled: sandboxEnabled, - image: optional("SANDBOX_IMAGE", "moltbot/sandbox:latest"), + image: optional("SANDBOX_IMAGE", "node:22-slim"), network: (optional("SANDBOX_NETWORK", "none") as "none" | "bridge"), memory: optional("SANDBOX_MEMORY", "512m"), cpus: optional("SANDBOX_CPUS", "1"), diff --git a/secure/index.ts b/secure/index.ts index f0f9104c3..1b199b1cd 100644 --- a/secure/index.ts +++ b/secure/index.ts @@ -1,10 +1,10 @@ /** - * Moltbot Secure - Entry Point + * AssureBot - Entry Point * * Lean, secure, self-hosted AI assistant for Railway. * * Usage: - * TELEGRAM_BOT_TOKEN=xxx ANTHROPIC_API_KEY=xxx ALLOWED_USERS=123 npx ts-node secure/index.ts + * TELEGRAM_BOT_TOKEN=xxx ANTHROPIC_API_KEY=xxx ALLOWED_USERS=123 npx tsx secure/index.ts */ import { createServer, type IncomingMessage, type ServerResponse } from "node:http"; @@ -18,7 +18,7 @@ import { createScheduler } from "./scheduler.js"; async function main() { console.log("=".repeat(50)); - console.log(" MOLTBOT SECURE"); + console.log(" ASSUREBOT"); console.log(" Lean, secure, self-hosted AI assistant"); console.log("=".repeat(50)); console.log(); @@ -176,7 +176,7 @@ async function main() { console.log(); console.log("=".repeat(50)); - console.log(" MOLTBOT SECURE IS RUNNING"); + console.log(" ASSUREBOT IS RUNNING"); console.log(); console.log(` Telegram: Polling mode`); console.log(` Webhooks: http://localhost:${config.server.port}${config.webhooks.basePath}/*`); diff --git a/secure/package.json b/secure/package.json index 90ccb130b..7e6a5e5ae 100644 --- a/secure/package.json +++ b/secure/package.json @@ -1,7 +1,7 @@ { - "name": "moltbot-secure", + "name": "assurebot", "version": "1.0.0", - "description": "Lean, secure, self-hosted AI assistant for Railway", + "description": "AssureBot - Lean, secure, self-hosted AI assistant for Railway", "type": "module", "main": "dist/index.js", "scripts": { diff --git a/secure/scheduler.ts b/secure/scheduler.ts index 976a107ee..c7539880f 100644 --- a/secure/scheduler.ts +++ b/secure/scheduler.ts @@ -47,7 +47,7 @@ function generateId(): string { export function createScheduler(deps: SchedulerDeps): Scheduler { const { config, audit, agent, telegramBot } = deps; const tasks = new Map(); - const cronJobs = new Map(); + const cronJobs = new Map>(); async function executeTask(task: ScheduledTask): Promise { const startTime = Date.now(); diff --git a/secure/telegram.ts b/secure/telegram.ts index af3b676c8..aa92c9446 100644 --- a/secure/telegram.ts +++ b/secure/telegram.ts @@ -5,16 +5,15 @@ * Allowlist-only: only approved users can interact. */ -import { Bot, Context, webhookCallback } from "grammy"; +import { Bot, Context } from "grammy"; import type { SecureConfig } from "./config.js"; import type { AuditLogger } from "./audit.js"; -import type { AgentCore, ConversationStore, Message } from "./agent.js"; +import type { AgentCore, ConversationStore } from "./agent.js"; export type TelegramBot = { bot: Bot; start: () => Promise; stop: () => Promise; - webhookHandler: (path?: string) => ReturnType; }; export type TelegramDeps = { @@ -293,10 +292,6 @@ Security: console.log("[telegram] Stopping bot..."); await bot.stop(); }, - - webhookHandler(path = "/telegram"): ReturnType { - return webhookCallback(bot, "http", { path }); - }, }; } diff --git a/secure/tsconfig.json b/secure/tsconfig.json index ed701170b..704e636cb 100644 --- a/secure/tsconfig.json +++ b/secure/tsconfig.json @@ -4,6 +4,7 @@ "module": "NodeNext", "moduleResolution": "NodeNext", "lib": ["ES2022"], + "types": ["node"], "outDir": "./dist", "rootDir": ".", "strict": true,