this repo has no description smallweb.run
smallweb
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix handling of stdin

pomdtr 1a88630a 861fcdb6

+672 -9
+5
example/hono/deno.json
··· 1 + { 2 + "imports": { 3 + "hono": "npm:hono@4.6.13" 4 + } 5 + }
+39
example/hono/deno.lock
··· 1 + { 2 + "version": "5", 3 + "specifiers": { 4 + "jsr:@smallweb/sandbox@0.1.0": "0.1.0", 5 + "jsr:@std/encoding@1.0.8": "1.0.8", 6 + "jsr:@std/html@1.0.3": "1.0.3", 7 + "jsr:@std/http@1.0.12": "1.0.12", 8 + "npm:hono@4.6.13": "4.6.13" 9 + }, 10 + "jsr": { 11 + "@smallweb/sandbox@0.1.0": { 12 + "integrity": "840a6120563b20be994fdac3fa858d2cc2e815c6f9b5ea8f14bd02ddd7f71be8", 13 + "dependencies": [ 14 + "jsr:@std/encoding", 15 + "jsr:@std/html", 16 + "jsr:@std/http" 17 + ] 18 + }, 19 + "@std/encoding@1.0.8": { 20 + "integrity": "a6c8f3f933ab1bed66244f435d1dc0fd23a888e07195532122ddc3d5f8f0e6b4" 21 + }, 22 + "@std/html@1.0.3": { 23 + "integrity": "7a0ac35e050431fb49d44e61c8b8aac1ebd55937e0dc9ec6409aa4bab39a7988" 24 + }, 25 + "@std/http@1.0.12": { 26 + "integrity": "85246d8bfe9c8e2538518725b158bdc31f616e0869255f4a8d9e3de919cab2aa" 27 + } 28 + }, 29 + "npm": { 30 + "hono@4.6.13": { 31 + "integrity": "sha512-haV0gaMdSjy9URCRN9hxBPlqHa7fMm/T72kAImIxvw4eQLbNz1rgjN4hHElLJSieDiNuiIAXC//cC6YGz2KCbg==" 32 + } 33 + }, 34 + "workspace": { 35 + "dependencies": [ 36 + "npm:hono@4.6.13" 37 + ] 38 + } 39 + }
+1 -1
example/hono/main.ts
··· 1 - import { Hono } from 'npm:hono@4.6.13' 1 + import { Hono } from 'hono' 2 2 3 3 const app = new Hono() 4 4
+6
example/mcp/deno.json
··· 1 + { 2 + "imports": { 3 + "@modelcontextprotocol/sdk": "npm:@modelcontextprotocol/sdk@^1.11.1", 4 + "zod": "npm:zod@^3.24.4" 5 + } 6 + }
+554
example/mcp/deno.lock
··· 1 + { 2 + "version": "5", 3 + "specifiers": { 4 + "jsr:@std/bytes@^1.0.5": "1.0.5", 5 + "jsr:@std/encoding@1.0.8": "1.0.8", 6 + "jsr:@std/html@1.0.3": "1.0.3", 7 + "jsr:@std/http@1.0.12": "1.0.12", 8 + "jsr:@std/streams@*": "1.0.9", 9 + "npm:@modelcontextprotocol/sdk@^1.11.1": "1.11.1_express@5.0.1_zod@3.24.3", 10 + "npm:zod@^3.24.4": "3.24.4" 11 + }, 12 + "jsr": { 13 + "@std/bytes@1.0.5": { 14 + "integrity": "4465dd739d7963d964c809202ebea6d5c6b8e3829ef25c6a224290fbb8a1021e" 15 + }, 16 + "@std/encoding@1.0.8": { 17 + "integrity": "a6c8f3f933ab1bed66244f435d1dc0fd23a888e07195532122ddc3d5f8f0e6b4" 18 + }, 19 + "@std/html@1.0.3": { 20 + "integrity": "7a0ac35e050431fb49d44e61c8b8aac1ebd55937e0dc9ec6409aa4bab39a7988" 21 + }, 22 + "@std/http@1.0.12": { 23 + "integrity": "85246d8bfe9c8e2538518725b158bdc31f616e0869255f4a8d9e3de919cab2aa" 24 + }, 25 + "@std/streams@1.0.9": { 26 + "integrity": "a9d26b1988cdd7aa7b1f4b51e1c36c1557f3f252880fa6cc5b9f37078b1a5035", 27 + "dependencies": [ 28 + "jsr:@std/bytes" 29 + ] 30 + } 31 + }, 32 + "npm": { 33 + "@modelcontextprotocol/sdk@1.11.1_express@5.0.1_zod@3.24.3": { 34 + "integrity": "sha512-9LfmxKTb1v+vUS1/emSk1f5ePmTLkb9Le9AxOB5T0XM59EUumwcS45z05h7aiZx3GI0Bl7mjb3FMEglYj+acuQ==", 35 + "dependencies": [ 36 + "content-type", 37 + "cors", 38 + "cross-spawn", 39 + "eventsource", 40 + "express", 41 + "express-rate-limit", 42 + "pkce-challenge", 43 + "raw-body", 44 + "zod@3.24.3", 45 + "zod-to-json-schema" 46 + ] 47 + }, 48 + "accepts@2.0.0": { 49 + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", 50 + "dependencies": [ 51 + "mime-types@3.0.0", 52 + "negotiator" 53 + ] 54 + }, 55 + "body-parser@2.1.0": { 56 + "integrity": "sha512-/hPxh61E+ll0Ujp24Ilm64cykicul1ypfwjVttduAiEdtnJFvLePSrIPk+HMImtNv5270wOGCb1Tns2rybMkoQ==", 57 + "dependencies": [ 58 + "bytes", 59 + "content-type", 60 + "debug@4.4.0", 61 + "http-errors", 62 + "iconv-lite@0.5.2", 63 + "on-finished", 64 + "qs@6.14.0", 65 + "raw-body", 66 + "type-is" 67 + ] 68 + }, 69 + "bytes@3.1.2": { 70 + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 71 + }, 72 + "call-bind-apply-helpers@1.0.2": { 73 + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 74 + "dependencies": [ 75 + "es-errors", 76 + "function-bind" 77 + ] 78 + }, 79 + "call-bound@1.0.4": { 80 + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", 81 + "dependencies": [ 82 + "call-bind-apply-helpers", 83 + "get-intrinsic" 84 + ] 85 + }, 86 + "content-disposition@1.0.0": { 87 + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", 88 + "dependencies": [ 89 + "safe-buffer" 90 + ] 91 + }, 92 + "content-type@1.0.5": { 93 + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" 94 + }, 95 + "cookie-signature@1.2.2": { 96 + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==" 97 + }, 98 + "cookie@0.7.1": { 99 + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" 100 + }, 101 + "cors@2.8.5": { 102 + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 103 + "dependencies": [ 104 + "object-assign", 105 + "vary" 106 + ] 107 + }, 108 + "cross-spawn@7.0.6": { 109 + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 110 + "dependencies": [ 111 + "path-key", 112 + "shebang-command", 113 + "which" 114 + ] 115 + }, 116 + "debug@4.3.6": { 117 + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", 118 + "dependencies": [ 119 + "ms@2.1.2" 120 + ] 121 + }, 122 + "debug@4.4.0": { 123 + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 124 + "dependencies": [ 125 + "ms@2.1.3" 126 + ] 127 + }, 128 + "depd@2.0.0": { 129 + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 130 + }, 131 + "destroy@1.2.0": { 132 + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" 133 + }, 134 + "dunder-proto@1.0.1": { 135 + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 136 + "dependencies": [ 137 + "call-bind-apply-helpers", 138 + "es-errors", 139 + "gopd" 140 + ] 141 + }, 142 + "ee-first@1.1.1": { 143 + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 144 + }, 145 + "encodeurl@2.0.0": { 146 + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" 147 + }, 148 + "es-define-property@1.0.1": { 149 + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" 150 + }, 151 + "es-errors@1.3.0": { 152 + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" 153 + }, 154 + "es-object-atoms@1.1.1": { 155 + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", 156 + "dependencies": [ 157 + "es-errors" 158 + ] 159 + }, 160 + "escape-html@1.0.3": { 161 + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 162 + }, 163 + "etag@1.8.1": { 164 + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" 165 + }, 166 + "eventsource-parser@3.0.1": { 167 + "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==" 168 + }, 169 + "eventsource@3.0.7": { 170 + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", 171 + "dependencies": [ 172 + "eventsource-parser" 173 + ] 174 + }, 175 + "express-rate-limit@7.5.0_express@5.0.1": { 176 + "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", 177 + "dependencies": [ 178 + "express" 179 + ] 180 + }, 181 + "express@5.0.1": { 182 + "integrity": "sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==", 183 + "dependencies": [ 184 + "accepts", 185 + "body-parser", 186 + "content-disposition", 187 + "content-type", 188 + "cookie", 189 + "cookie-signature", 190 + "debug@4.3.6", 191 + "depd", 192 + "encodeurl", 193 + "escape-html", 194 + "etag", 195 + "finalhandler", 196 + "fresh@2.0.0", 197 + "http-errors", 198 + "merge-descriptors", 199 + "methods", 200 + "mime-types@3.0.0", 201 + "on-finished", 202 + "once", 203 + "parseurl", 204 + "proxy-addr", 205 + "qs@6.13.0", 206 + "range-parser", 207 + "router", 208 + "safe-buffer", 209 + "send", 210 + "serve-static", 211 + "setprototypeof", 212 + "statuses", 213 + "type-is", 214 + "utils-merge", 215 + "vary" 216 + ] 217 + }, 218 + "finalhandler@2.1.0": { 219 + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", 220 + "dependencies": [ 221 + "debug@4.4.0", 222 + "encodeurl", 223 + "escape-html", 224 + "on-finished", 225 + "parseurl", 226 + "statuses" 227 + ] 228 + }, 229 + "forwarded@0.2.0": { 230 + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 231 + }, 232 + "fresh@0.5.2": { 233 + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" 234 + }, 235 + "fresh@2.0.0": { 236 + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==" 237 + }, 238 + "function-bind@1.1.2": { 239 + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" 240 + }, 241 + "get-intrinsic@1.3.0": { 242 + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 243 + "dependencies": [ 244 + "call-bind-apply-helpers", 245 + "es-define-property", 246 + "es-errors", 247 + "es-object-atoms", 248 + "function-bind", 249 + "get-proto", 250 + "gopd", 251 + "has-symbols", 252 + "hasown", 253 + "math-intrinsics" 254 + ] 255 + }, 256 + "get-proto@1.0.1": { 257 + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 258 + "dependencies": [ 259 + "dunder-proto", 260 + "es-object-atoms" 261 + ] 262 + }, 263 + "gopd@1.2.0": { 264 + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" 265 + }, 266 + "has-symbols@1.1.0": { 267 + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" 268 + }, 269 + "hasown@2.0.2": { 270 + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 271 + "dependencies": [ 272 + "function-bind" 273 + ] 274 + }, 275 + "http-errors@2.0.0": { 276 + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 277 + "dependencies": [ 278 + "depd", 279 + "inherits", 280 + "setprototypeof", 281 + "statuses", 282 + "toidentifier" 283 + ] 284 + }, 285 + "iconv-lite@0.5.2": { 286 + "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", 287 + "dependencies": [ 288 + "safer-buffer" 289 + ] 290 + }, 291 + "iconv-lite@0.6.3": { 292 + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 293 + "dependencies": [ 294 + "safer-buffer" 295 + ] 296 + }, 297 + "inherits@2.0.4": { 298 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 299 + }, 300 + "ipaddr.js@1.9.1": { 301 + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 302 + }, 303 + "is-promise@4.0.0": { 304 + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" 305 + }, 306 + "isexe@2.0.0": { 307 + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" 308 + }, 309 + "math-intrinsics@1.1.0": { 310 + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" 311 + }, 312 + "media-typer@1.1.0": { 313 + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" 314 + }, 315 + "merge-descriptors@2.0.0": { 316 + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==" 317 + }, 318 + "methods@1.1.2": { 319 + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" 320 + }, 321 + "mime-db@1.52.0": { 322 + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 323 + }, 324 + "mime-db@1.54.0": { 325 + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==" 326 + }, 327 + "mime-types@2.1.35": { 328 + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 329 + "dependencies": [ 330 + "mime-db@1.52.0" 331 + ] 332 + }, 333 + "mime-types@3.0.0": { 334 + "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", 335 + "dependencies": [ 336 + "mime-db@1.54.0" 337 + ] 338 + }, 339 + "ms@2.1.2": { 340 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 341 + }, 342 + "ms@2.1.3": { 343 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 344 + }, 345 + "negotiator@1.0.0": { 346 + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==" 347 + }, 348 + "object-assign@4.1.1": { 349 + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" 350 + }, 351 + "object-inspect@1.13.4": { 352 + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" 353 + }, 354 + "on-finished@2.4.1": { 355 + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 356 + "dependencies": [ 357 + "ee-first" 358 + ] 359 + }, 360 + "once@1.4.0": { 361 + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 362 + "dependencies": [ 363 + "wrappy" 364 + ] 365 + }, 366 + "parseurl@1.3.3": { 367 + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 368 + }, 369 + "path-key@3.1.1": { 370 + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" 371 + }, 372 + "path-to-regexp@8.2.0": { 373 + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==" 374 + }, 375 + "pkce-challenge@5.0.0": { 376 + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==" 377 + }, 378 + "proxy-addr@2.0.7": { 379 + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 380 + "dependencies": [ 381 + "forwarded", 382 + "ipaddr.js" 383 + ] 384 + }, 385 + "qs@6.13.0": { 386 + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", 387 + "dependencies": [ 388 + "side-channel" 389 + ] 390 + }, 391 + "qs@6.14.0": { 392 + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", 393 + "dependencies": [ 394 + "side-channel" 395 + ] 396 + }, 397 + "range-parser@1.2.1": { 398 + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 399 + }, 400 + "raw-body@3.0.0": { 401 + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", 402 + "dependencies": [ 403 + "bytes", 404 + "http-errors", 405 + "iconv-lite@0.6.3", 406 + "unpipe" 407 + ] 408 + }, 409 + "router@2.2.0": { 410 + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", 411 + "dependencies": [ 412 + "debug@4.4.0", 413 + "depd", 414 + "is-promise", 415 + "parseurl", 416 + "path-to-regexp" 417 + ] 418 + }, 419 + "safe-buffer@5.2.1": { 420 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 421 + }, 422 + "safer-buffer@2.1.2": { 423 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 424 + }, 425 + "send@1.1.0": { 426 + "integrity": "sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==", 427 + "dependencies": [ 428 + "debug@4.4.0", 429 + "destroy", 430 + "encodeurl", 431 + "escape-html", 432 + "etag", 433 + "fresh@0.5.2", 434 + "http-errors", 435 + "mime-types@2.1.35", 436 + "ms@2.1.3", 437 + "on-finished", 438 + "range-parser", 439 + "statuses" 440 + ] 441 + }, 442 + "serve-static@2.1.0": { 443 + "integrity": "sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==", 444 + "dependencies": [ 445 + "encodeurl", 446 + "escape-html", 447 + "parseurl", 448 + "send" 449 + ] 450 + }, 451 + "setprototypeof@1.2.0": { 452 + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 453 + }, 454 + "shebang-command@2.0.0": { 455 + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 456 + "dependencies": [ 457 + "shebang-regex" 458 + ] 459 + }, 460 + "shebang-regex@3.0.0": { 461 + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" 462 + }, 463 + "side-channel-list@1.0.0": { 464 + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", 465 + "dependencies": [ 466 + "es-errors", 467 + "object-inspect" 468 + ] 469 + }, 470 + "side-channel-map@1.0.1": { 471 + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", 472 + "dependencies": [ 473 + "call-bound", 474 + "es-errors", 475 + "get-intrinsic", 476 + "object-inspect" 477 + ] 478 + }, 479 + "side-channel-weakmap@1.0.2": { 480 + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", 481 + "dependencies": [ 482 + "call-bound", 483 + "es-errors", 484 + "get-intrinsic", 485 + "object-inspect", 486 + "side-channel-map" 487 + ] 488 + }, 489 + "side-channel@1.1.0": { 490 + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", 491 + "dependencies": [ 492 + "es-errors", 493 + "object-inspect", 494 + "side-channel-list", 495 + "side-channel-map", 496 + "side-channel-weakmap" 497 + ] 498 + }, 499 + "statuses@2.0.1": { 500 + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" 501 + }, 502 + "toidentifier@1.0.1": { 503 + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 504 + }, 505 + "type-is@2.0.0": { 506 + "integrity": "sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==", 507 + "dependencies": [ 508 + "content-type", 509 + "media-typer", 510 + "mime-types@3.0.0" 511 + ] 512 + }, 513 + "unpipe@1.0.0": { 514 + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" 515 + }, 516 + "utils-merge@1.0.1": { 517 + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" 518 + }, 519 + "vary@1.1.2": { 520 + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" 521 + }, 522 + "which@2.0.2": { 523 + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 524 + "dependencies": [ 525 + "isexe" 526 + ], 527 + "bin": true 528 + }, 529 + "wrappy@1.0.2": { 530 + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 531 + }, 532 + "zod-to-json-schema@3.24.5_zod@3.24.3": { 533 + "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", 534 + "dependencies": [ 535 + "zod@3.24.3" 536 + ] 537 + }, 538 + "zod@3.24.3": { 539 + "integrity": "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==" 540 + }, 541 + "zod@3.24.4": { 542 + "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==" 543 + } 544 + }, 545 + "remote": { 546 + "https://raw.githubusercontent.com/pomdtr/smallweb/refs/heads/main/internal/worker/sandbox.ts": "d0e1a17dc4140c7a61fdd7f14d1c1d4593a3dd7e6eaa6ce7f8f5c02222de471f" 547 + }, 548 + "workspace": { 549 + "dependencies": [ 550 + "npm:@modelcontextprotocol/sdk@^1.11.1", 551 + "npm:zod@^3.24.4" 552 + ] 553 + } 554 + }
+37
example/mcp/main.ts
··· 1 + import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js"; 2 + import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; 3 + import { z } from "zod"; 4 + 5 + // Create an MCP server 6 + const server = new McpServer({ 7 + name: "Demo", 8 + version: "1.0.0" 9 + }); 10 + 11 + // Add an addition tool 12 + server.tool("add", 13 + { a: z.number(), b: z.number() }, 14 + async ({ a, b }) => ({ 15 + content: [{ type: "text", text: String(a + b) }] 16 + }) 17 + ); 18 + 19 + // Add a dynamic greeting resource 20 + server.resource( 21 + "greeting", 22 + new ResourceTemplate("greeting://{name}", { list: undefined }), 23 + async (uri, { name }) => ({ 24 + contents: [{ 25 + uri: uri.href, 26 + text: `Hello, ${name}!` 27 + }] 28 + }) 29 + ); 30 + 31 + 32 + export default { 33 + run: async () => { 34 + const transport = new StdioServerTransport(); 35 + await server.connect(transport); 36 + } 37 + }
+1
internal/cmd/run.go
··· 42 42 43 43 cmd.SilenceErrors = true 44 44 45 + command.Stdin = cmd.InOrStdin() 45 46 command.Stdout = cmd.OutOrStdout() 46 47 command.Stderr = cmd.ErrOrStderr() 47 48 return command.Run()
+11
internal/cmd/up.go
··· 324 324 325 325 cmd.Stdout = sess 326 326 cmd.Stderr = sess.Stderr() 327 + stdin, err := cmd.StdinPipe() 328 + if err != nil { 329 + fmt.Fprintf(sess, "failed to get stdin: %v\n", err) 330 + sess.Exit(1) 331 + return 332 + } 333 + 334 + go func() { 335 + defer stdin.Close() 336 + io.Copy(stdin, sess) 337 + }() 327 338 328 339 if err := cmd.Run(); err != nil { 329 340 var exitErr *exec.ExitError
internal/worker/sandbox.ts sandbox/mod.ts
+12 -8
internal/worker/worker.go
··· 26 26 "github.com/pomdtr/smallweb/internal/utils" 27 27 ) 28 28 29 - //go:embed sandbox.ts 30 - var sandboxContent string 29 + var sandboxUrl = "jsr:@smallweb/sandbox@0.1.0" 31 30 32 31 type Worker struct { 33 32 App app.App ··· 113 112 return args, nil 114 113 } 115 114 115 + for _, configName := range []string{"deno.json", "deno.jsonc"} { 116 + configPath := filepath.Join(me.App.Dir(), configName) 117 + if _, err := os.Stat(configPath); err == nil { 118 + args = append(args, fmt.Sprintf("--config=%s", configPath)) 119 + break 120 + } 121 + } 122 + 116 123 // if root is not a symlink 117 124 appDir := me.App.Dir() 118 125 if fi, err := os.Lstat(appDir); err == nil && fi.Mode()&os.ModeSymlink == 0 { ··· 173 180 return fmt.Errorf("could not encode input: %w", err) 174 181 } 175 182 176 - args = append(args, "-", input.String()) 183 + args = append(args, sandboxUrl, input.String()) 177 184 178 185 command := exec.Command(deno, args...) 179 - command.Stdin = strings.NewReader(sandboxContent) 180 186 command.Dir = me.App.Dir() 181 187 command.Env = commandEnv(me.App, me.Admin) 182 188 ··· 490 496 return nil, fmt.Errorf("could not encode input: %w", err) 491 497 } 492 498 493 - cmdArgs = append(cmdArgs, "-", payload.String()) 499 + cmdArgs = append(cmdArgs, sandboxUrl, payload.String()) 494 500 495 501 command := exec.CommandContext(ctx, deno, cmdArgs...) 496 - command.Stdin = strings.NewReader(sandboxContent) 497 502 command.Dir = me.App.Dir() 498 503 499 504 command.Env = commandEnv(me.App, me.Admin) ··· 526 531 return fmt.Errorf("could not encode input: %w", err) 527 532 } 528 533 529 - denoArgs = append(args, "-", payload.String()) 534 + denoArgs = append(args, sandboxUrl, payload.String()) 530 535 531 536 command := exec.CommandContext(ctx, deno, denoArgs...) 532 537 533 - command.Stdin = strings.NewReader(sandboxContent) 534 538 command.Stderr = os.Stderr 535 539 command.Stdout = os.Stdout 536 540 command.Dir = me.App.Dir()
+6
sandbox/deno.json
··· 1 + { 2 + "name": "@smallweb/sandbox", 3 + "version": "0.1.0", 4 + "license": "MIT", 5 + "exports": "./mod.ts" 6 + }