From 5c09a7777e1a345acbc47a14ae9a23b2fc5a5262 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Wed, 1 Apr 2026 12:26:03 -0700 Subject: [PATCH 01/10] Update to latest workflow package Signed-off-by: Peter Wielander --- flight-booking-app/package.json | 4 +- flight-booking-app/pnpm-lock.yaml | 360 +++++++++++++++--------------- 2 files changed, 187 insertions(+), 177 deletions(-) diff --git a/flight-booking-app/package.json b/flight-booking-app/package.json index 25d206e..0a6b4ce 100644 --- a/flight-booking-app/package.json +++ b/flight-booking-app/package.json @@ -19,7 +19,7 @@ "@streamdown/math": "^1.0.1", "@streamdown/mermaid": "^1.0.1", "@vercel/otel": "^1.13.0", - "@workflow/ai": "4.0.1-beta.54", + "@workflow/ai": "4.1.0-beta.59", "@workflow/world-postgres": "4.1.0-beta.42", "@xyflow/react": "^12.9.0", "ai": "^6.0.69", @@ -44,7 +44,7 @@ "tokenlens": "^1.3.1", "typescript": "^5.9.3", "use-stick-to-bottom": "^1.1.1", - "workflow": "4.2.0-beta.67", + "workflow": "4.2.0-beta.74", "zod": "^4.1.12" }, "devDependencies": { diff --git a/flight-booking-app/pnpm-lock.yaml b/flight-booking-app/pnpm-lock.yaml index 55daab9..f32b7dc 100644 --- a/flight-booking-app/pnpm-lock.yaml +++ b/flight-booking-app/pnpm-lock.yaml @@ -40,8 +40,8 @@ importers: specifier: ^1.13.0 version: 1.14.0(@opentelemetry/api-logs@0.57.2)(@opentelemetry/api@1.9.0)(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-logs@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)) '@workflow/ai': - specifier: 4.0.1-beta.54 - version: 4.0.1-beta.54(ai@6.0.69(zod@4.1.12))(workflow@4.2.0-beta.67(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-router@7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)) + specifier: 4.1.0-beta.59 + version: 4.1.0-beta.59(@opentelemetry/api@1.9.0)(ai@6.0.69(zod@4.1.12))(workflow@4.2.0-beta.74(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)) '@workflow/world-postgres': specifier: 4.1.0-beta.42 version: 4.1.0-beta.42(@opentelemetry/api@1.9.0)(@types/pg@8.18.0)(pg@8.18.0)(typescript@5.9.3) @@ -115,8 +115,8 @@ importers: specifier: ^1.1.1 version: 1.1.1(react@19.2.3) workflow: - specifier: 4.2.0-beta.67 - version: 4.2.0-beta.67(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-router@7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) + specifier: 4.2.0-beta.74 + version: 4.2.0-beta.74(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) zod: specifier: ^4.1.12 version: 4.1.12 @@ -706,9 +706,6 @@ packages: '@mermaid-js/parser@0.6.3': resolution: {integrity: sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA==} - '@mjackson/node-fetch-server@0.2.0': - resolution: {integrity: sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng==} - '@napi-rs/nice-android-arm-eabi@1.1.1': resolution: {integrity: sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==} engines: {node: '>= 10'} @@ -908,8 +905,8 @@ packages: cpu: [x64] os: [win32] - '@nuxt/kit@4.3.1': - resolution: {integrity: sha512-UjBFt72dnpc+83BV3OIbCT0YHLevJtgJCHpxMX0YRKWLDhhbcDdUse87GtsQBrjvOzK7WUNUYLDS/hQLYev5rA==} + '@nuxt/kit@4.4.2': + resolution: {integrity: sha512-5+IPRNX2CjkBhuWUwz0hBuLqiaJPRoKzQ+SvcdrQDbAyE+VDeFt74VpSFr5/R0ujrK4b+XnSHUJWdS72w6hsog==} engines: {node: '>=18.12.0'} '@nuxt/opencollective@0.4.1': @@ -1663,16 +1660,6 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - '@react-router/node@7.13.1': - resolution: {integrity: sha512-IWPPf+Q3nJ6q4bwyTf5leeGUfg8GAxSN1RKj5wp9SK915zKK+1u4TCOfOmr8hmC6IW1fcjKV0WChkM0HkReIiw==} - engines: {node: '>=20.0.0'} - peerDependencies: - react-router: 7.13.1 - typescript: ^5.1.0 - peerDependenciesMeta: - typescript: - optional: true - '@rive-app/react-webgl2@4.26.2': resolution: {integrity: sha512-AwJ7wzx6jzfTD2rrQ8Tt5u5W7b9B4ctnQQnHfIs4ldUM5DV3tE11d81sHOeYNrW9GishgOvU9jsMdHsSnozNzg==} peerDependencies: @@ -2316,24 +2303,32 @@ packages: resolution: {integrity: sha512-ozO0tSBXUYN4gUkK65GbcqgxpC55qaaiY9MzNuXW4cvOSJ5nCkcgO+DQXcfyfL7h+0uIC5HTcP0mPvQ3dW3EhQ==} engines: {node: '>=20.0.0'} - '@workflow/ai@4.0.1-beta.54': - resolution: {integrity: sha512-vdRc6g22Obpugia6hzskGZ8oUMRSU7mjxFCjK/M2yO3GrLZC+eNiMVMgyn1iNRQmwyA/ngVzeMKV6QyIHV2orQ==} + '@vercel/queue@0.1.4': + resolution: {integrity: sha512-wo+jCycmCX078vQSbkX+RcLvySONDCK0f9aQp5UMKQD1+B+xKt3YVbIYbZukvoHQpbm5nnk6If+ADSeK/PmCgQ==} + engines: {node: '>=20.0.0'} + + '@workflow/ai@4.1.0-beta.59': + resolution: {integrity: sha512-Vy11b0fGlbInM1HTnb0iuodEjAW2nMP81KFtUbSfjN20nmlxNADvpOtYkMG8fOk9aSzNGcrzzPMySnze7Xmbag==} peerDependencies: - ai: ^5 || ^6 - workflow: ^4.1.0-beta.62 + '@opentelemetry/api': ^1.0.0 + ai: ^6 + workflow: ^4.2.0-beta.74 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true - '@workflow/astro@4.0.0-beta.41': - resolution: {integrity: sha512-CHpZduft3RFjlpsbAidIhHrGifYtj/y4ueb/+BqWLagt/Vlye9lTn/RPOvfJLcXL/bkn8fo+22giIwZCCGK1/A==} + '@workflow/astro@4.0.0-beta.48': + resolution: {integrity: sha512-BoO5Wc3gjhjKytA/HhgTRmcvmhhoqhLFEAcMPpqzCZKMstGhgNDyVhn00a0PvLASJguTqrmpGYoiaVJhQdUG2w==} - '@workflow/builders@4.0.1-beta.58': - resolution: {integrity: sha512-mGL5UnMuK6IZiVJbS5/hpYnhHs3qjB0Cj05Q/QpekryFEMUKsKKTDr1LLGQ8LiEW/dRO9NZ/Po03+hAqukUj5A==} + '@workflow/builders@4.0.1-beta.65': + resolution: {integrity: sha512-QC70oG32Lg+Lp07v8SCCQPHEqWYPRCQT3m0lCT8i5OV41OkjIbvzggxybdBmgVfXy/8hnecdMfPRXFtdHJwb2w==} - '@workflow/cli@4.2.0-beta.67': - resolution: {integrity: sha512-yQ+OVYwrC3CpmXMOcRHh5QsPP+dXodzSQUFnyBrSRfZaAsPEY7wS+UOOK0j322Z+soapGkuBOS/CA2klCqJLPA==} + '@workflow/cli@4.2.0-beta.74': + resolution: {integrity: sha512-3fqnYLZEEVR5CiBNiH17kcAcPCMHYvODJ15cyebZrxxknnqOgD0LrZ9ShM+TcIWRvioIaLS12lMpH+ujYFgqew==} hasBin: true - '@workflow/core@4.2.0-beta.67': - resolution: {integrity: sha512-Qoyktgenu1YuZUd4Q1GkAWnZ25MrRBXgd4wfLTqtdR40/mm71yKy/eDA7p+AlB3fXWVhQfcQMBf6kgWPrL/DCA==} + '@workflow/core@4.2.0-beta.74': + resolution: {integrity: sha512-tTfhzBYhLDciIh1oCxaMLxcIwBc3GLmNH79IYjbzd1mLm0BMMjsXm3gUlFCGDgdNKOQEBOk8EoL6vI8Fc/kOtg==} peerDependencies: '@opentelemetry/api': '1' peerDependenciesMeta: @@ -2343,8 +2338,11 @@ packages: '@workflow/errors@4.1.0-beta.18': resolution: {integrity: sha512-Ana+xAHp+rKyXe3yues+TOzK+DALLqHTFe7yBEcLjXQZRXof30Wx3BjBaADm2/syIcRpgR3Q2tuASqzrnWmjBg==} - '@workflow/nest@0.0.0-beta.16': - resolution: {integrity: sha512-MNA3uVKVjfgvisO6z8Juet1UH7r+YXLulT3FunP65CeXpIbTyMDPJPL36/ijUH5r8ncn6zPessNmflAycFzUzA==} + '@workflow/errors@4.1.0-beta.19': + resolution: {integrity: sha512-AEZefVGpant/4eUJixnjGlK3LfyNPWp/C6YpmAsJbPPaFHPggKE7WT185BCMtXJMbpVKF/d/rNa7fxZ3J/yYhw==} + + '@workflow/nest@0.0.0-beta.23': + resolution: {integrity: sha512-JCEEXOnz9o6+nnPEFoEfHp+qBHSUgBtOz4M24Mk8AAJ39iQZdR33uuCk+JxslkWGgNDJTEJlCdl/BQDvYR8BAQ==} hasBin: true peerDependencies: '@nestjs/common': '>=10.0.0' @@ -2352,31 +2350,31 @@ packages: '@swc/cli': '>=0.4.0' '@swc/core': '>=1.5.0' - '@workflow/next@4.0.1-beta.63': - resolution: {integrity: sha512-vnOHiOSXuUj9c7VTagN4wj50xVjAkMWwHM+akS0D2zHHVB/Ixbw+pu3CFFk9yUvuaXnZ7jVucDnz1H10d8eh7w==} + '@workflow/next@4.0.1-beta.70': + resolution: {integrity: sha512-tfsvUVaIOZBvJNOh8iPKCKRfkg1ZcFyJNMfNvS++ipOe569R/Mg2TAYFC7PQIG/5vOEXIm/CYg5cJ2+8p31Zxg==} peerDependencies: next: '>13' peerDependenciesMeta: next: optional: true - '@workflow/nitro@4.0.1-beta.62': - resolution: {integrity: sha512-BWY17XcWnfuZnjbHVJc0kNBgoBswz66FX7FcKagVIvpK5OPD8A/8MePY6TRJZvfq0/K4X6kVnEtoLB5DK5KKKg==} + '@workflow/nitro@4.0.1-beta.69': + resolution: {integrity: sha512-ml/k9hR73lV9qVQCKguZk1viXGNcViikTHB8JWjrUPh8sWgsZSQ3qUfaqfag5OtxpbBDAl1peNc4Af6+26RJlg==} - '@workflow/nuxt@4.0.1-beta.51': - resolution: {integrity: sha512-VTaSPh97CRDXdVJPN0IEXawFlvwHPo6GFWLpizIBprA+K/OmTphD3TkLdKx51CsOln78qy8beWfOvg3I7IIIFQ==} + '@workflow/nuxt@4.0.1-beta.58': + resolution: {integrity: sha512-34iaFvRopXoe7qHvu+xuRkmBNPgyl1AWltGfli1rnsfxIj1tvNIzifspNPaoDIaLbuXqAXDChVaULPukGpq91g==} - '@workflow/rollup@4.0.0-beta.24': - resolution: {integrity: sha512-JlxJ3uqXMPpgsPTuJ2Gab+j2DuEzXQmVveRUhz/hSEZqIB8j+EKvcrPYeQQKyA2+z1SVa2c9Duo7oiEg4xWw/A==} + '@workflow/rollup@4.0.0-beta.31': + resolution: {integrity: sha512-U23tqZfZGRSSr2ax5iNHKPlYc1chwRkLVmx70+wWg5CW+Vo8KWAfAcHsukZXWPkg08hBTC7LbilcfBDhHVPI7Q==} '@workflow/serde@4.1.0-beta.2': resolution: {integrity: sha512-8kkeoQKLDaKXefjV5dbhBj2aErfKp1Mc4pb6tj8144cF+Em5SPbyMbyLCHp+BVrFfFVCBluCtMx+jjvaFVZGww==} - '@workflow/sveltekit@4.0.0-beta.56': - resolution: {integrity: sha512-Knv6FnB9ux+fASrkBXSsiawdKUnhsbkoZvWHj93UuJTaEemdefTW+ahVvgYo7vauQkSTai2H3ayzvt59G8dFhg==} + '@workflow/sveltekit@4.0.0-beta.63': + resolution: {integrity: sha512-2g8DTWRmHfHS3wbMeVCVjmxxkE7P/cr3KEStAJTeTyzs9ROHt2oeMWEGmMn9R/moVZUV3vlJSSxuAY1G4rS1ng==} - '@workflow/swc-plugin@4.1.0-beta.18': - resolution: {integrity: sha512-X76FC/YaHbf7wkuv/5f0LS+LHQKNb9uZt8IGKg2B7o0zKteV/1rZXadAyk6IgA/lXv/zHO/6Eki3HOW8sR0WXg==} + '@workflow/swc-plugin@4.1.0-beta.21': + resolution: {integrity: sha512-CcZG8T3oxMNils93OTomXT54pMwqH2IPheiZjg4bEz2aQtIQXGyU3ul0NRCDyLFgQa9tb3mgW18yOsOqajr0Tg==} peerDependencies: '@swc/core': 1.15.3 @@ -2388,11 +2386,11 @@ packages: '@workflow/utils@4.1.0-beta.13': resolution: {integrity: sha512-3vVuXZVfLVeJ78MM6D0gNXg6hMZdDYAzmF92p+HxItI0B2Yk1EuDIIUfBXKWwTOKCCuKF4iroZt2u9BFqrs2AQ==} - '@workflow/vite@4.0.0-beta.17': - resolution: {integrity: sha512-nl/RYigJc+yEVLZdDq/vxGLHyxeMf6I1nKjm10aosxa5Xi9JSIWoiT7FKqOR/+cIAX699oJAlKjwd4gCHwaKlg==} + '@workflow/vite@4.0.0-beta.24': + resolution: {integrity: sha512-dHUaT1J+4N6mbF9ghKZwHthz7Ci1TUzvLMiUMz53MwpIObagSkF1JsbsJXZV3pZXnywNxo4WLzMAKFeruLX+7A==} - '@workflow/web@4.1.0-beta.39': - resolution: {integrity: sha512-nZ2rR0zwJ4zyYRhOiCsmam/mE3REXLlfagYOVCIpjIOftyP8AFAAnpo5mRgcvBa0feL8WFx0JMQ6sA6A+39XNA==} + '@workflow/web@4.1.0-beta.46': + resolution: {integrity: sha512-DCXnXtB2Li7sKBWqZqMfnHj1q/7NC29NjXEsDJMnIqqUVIoxC/H45PDrQKv1h8biBR9yGfLo/8ncJCpldjmEwQ==} '@workflow/world-local@4.1.0-beta.40': resolution: {integrity: sha512-Y+8x3b01wUST7ICsHH79lryZ8cf+UB9pSVJ4orU+p09WzXOrAjKR6mjd+zacdIKPcU0jvw5JDRYYTQgClaqKfw==} @@ -2402,12 +2400,20 @@ packages: '@opentelemetry/api': optional: true + '@workflow/world-local@4.1.0-beta.47': + resolution: {integrity: sha512-hJMbaggGT7UrhZsC3/P31t+HDafzo9kO4cjjKAzbl54YDPseR6j1GGtAkB2qYVKzsfE0L0BUQU0r8wpcpA4tXg==} + peerDependencies: + '@opentelemetry/api': '1' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@workflow/world-postgres@4.1.0-beta.42': resolution: {integrity: sha512-4OKv5UKyiWMJAG+H4G7ekj/5xhqiOkRkOFcZVOgoOwGKCOHUzJdpV2u5wSX2Al7IfrteX0lmSP0G9VVhU3JNYw==} hasBin: true - '@workflow/world-vercel@4.1.0-beta.41': - resolution: {integrity: sha512-24NyvN/JvkXyDow/FYFHLuwtRSqfemFCTL5vda3952b8z8/7laWPjPsgia98LoWdqIypbNvcPrtRkNi1hd+4AQ==} + '@workflow/world-vercel@4.1.0-beta.45': + resolution: {integrity: sha512-+2u8BtWnOWgdry22zJj9QSgh4s1WrTy9EvAJKx+sFnG24mrVBAW83IvqxpDIXAAd72PTFnEXyGHP4LUIO2KJag==} peerDependencies: '@opentelemetry/api': '1' peerDependenciesMeta: @@ -2419,6 +2425,11 @@ packages: peerDependencies: zod: 4.3.6 + '@workflow/world@4.1.0-beta.14': + resolution: {integrity: sha512-23BC9d7m7DDuGuaLncMHZ/6XFJePsY7Dr2zVecRWpM6NvOmAKV+oiOav/HEBxUCdaccSshSsLRqwdHX9Q9HCZA==} + peerDependencies: + zod: 4.3.6 + '@xhmikosr/archive-type@7.1.0': resolution: {integrity: sha512-xZEpnGplg1sNPyEgFh0zbHxqlw5dtYg6viplmWSxUj12+QjU9SKu3U/2G73a15pEjLaOqTefNSZ1fOPUOT4Xgg==} engines: {node: '>=18'} @@ -2482,6 +2493,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + ai@6.0.69: resolution: {integrity: sha512-zIURMSnNroaVvu47Bm3XhC2y3LRsm8jmkwBgupxF+N7q/s6MpIiv04w1ltlnWqC8+T2PT2rN+f0sUhF+vArkwg==} engines: {node: '>=18'} @@ -2821,10 +2837,6 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - cookie@1.1.1: - resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} - engines: {node: '>=18'} - cose-base@1.0.3: resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} @@ -3711,10 +3723,6 @@ packages: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} - isbot@5.1.35: - resolution: {integrity: sha512-waFfC72ZNfwLLuJ2iLaoVaqcNo+CAaLR7xCpAn0Y5WfGzkNHv7ZN39Vbi1y+kb+Zs46XHOX3tZNExroFUPX+Kg==} - engines: {node: '>=18'} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -4173,6 +4181,9 @@ packages: mlly@1.8.0: resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} @@ -4535,16 +4546,6 @@ packages: '@types/react': optional: true - react-router@7.13.0: - resolution: {integrity: sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw==} - engines: {node: '>=20.0.0'} - peerDependencies: - react: '>=18' - react-dom: '>=18' - peerDependenciesMeta: - react-dom: - optional: true - react-style-singleton@2.2.3: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} @@ -4726,9 +4727,6 @@ packages: resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} engines: {node: '>= 0.8.0'} - set-cookie-parser@2.7.2: - resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} - setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -5162,8 +5160,8 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workflow@4.2.0-beta.67: - resolution: {integrity: sha512-0YYXLY3lqY+FdnAnxdTIKCZm8q0ulfTlCRw/LcnURaLY5nWJ0cAbs7UnssrAs7c5O7l8vo2YVXEBbbEO5bnWkg==} + workflow@4.2.0-beta.74: + resolution: {integrity: sha512-s9RIdUCuVnPZIw/i6cCLQe04UJDAN296NJ/sN+/BRcxVxgLqMm/ybCk0EcrhcxhhwBkP5QHjj50SFlAUT1FdBw==} hasBin: true peerDependencies: '@opentelemetry/api': '1' @@ -5797,8 +5795,6 @@ snapshots: dependencies: langium: 3.3.1 - '@mjackson/node-fetch-server@0.2.0': {} - '@napi-rs/nice-android-arm-eabi@1.1.1': optional: true @@ -5921,7 +5917,7 @@ snapshots: '@next/swc-win32-x64-msvc@16.0.10': optional: true - '@nuxt/kit@4.3.1': + '@nuxt/kit@4.4.2': dependencies: c12: 3.3.3 consola: 3.4.2 @@ -5932,7 +5928,7 @@ snapshots: ignore: 7.0.5 jiti: 2.6.1 klona: 2.0.6 - mlly: 1.8.0 + mlly: 1.8.2 ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.0 @@ -6773,13 +6769,6 @@ snapshots: '@radix-ui/rect@1.1.1': {} - '@react-router/node@7.13.1(react-router@7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)': - dependencies: - '@mjackson/node-fetch-server': 0.2.0 - react-router: 7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - optionalDependencies: - typescript: 5.9.3 - '@rive-app/react-webgl2@4.26.2(react@19.2.3)': dependencies: '@rive-app/webgl2': 2.34.2 @@ -7535,11 +7524,19 @@ snapshots: '@vercel/oidc': 3.2.0 mixpart: 0.0.5 - '@workflow/ai@4.0.1-beta.54(ai@6.0.69(zod@4.1.12))(workflow@4.2.0-beta.67(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-router@7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3))': + '@vercel/queue@0.1.4': + dependencies: + '@vercel/oidc': 3.2.0 + minimatch: 10.2.4 + mixpart: 0.0.5 + picocolors: 1.1.1 + + '@workflow/ai@4.1.0-beta.59(@opentelemetry/api@1.9.0)(ai@6.0.69(zod@4.1.12))(workflow@4.2.0-beta.74(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3))': dependencies: '@ai-sdk/provider': 3.0.7 + '@workflow/serde': 4.1.0-beta.2 ai: 6.0.69(zod@4.1.12) - workflow: 4.2.0-beta.67(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-router@7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) + workflow: 4.2.0-beta.74(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) zod: 4.3.6 optionalDependencies: '@ai-sdk/anthropic': 3.0.36(zod@4.3.6) @@ -7547,14 +7544,15 @@ snapshots: '@ai-sdk/google': 3.0.20(zod@4.3.6) '@ai-sdk/openai': 3.0.25(zod@4.3.6) '@ai-sdk/xai': 3.0.46(zod@4.3.6) + '@opentelemetry/api': 1.9.0 - '@workflow/astro@4.0.0-beta.41(@opentelemetry/api@1.9.0)': + '@workflow/astro@4.0.0-beta.48(@opentelemetry/api@1.9.0)': dependencies: '@swc/core': 1.15.3 - '@workflow/builders': 4.0.1-beta.58(@opentelemetry/api@1.9.0) - '@workflow/rollup': 4.0.0-beta.24(@opentelemetry/api@1.9.0) - '@workflow/swc-plugin': 4.1.0-beta.18(@swc/core@1.15.3) - '@workflow/vite': 4.0.0-beta.17(@opentelemetry/api@1.9.0) + '@workflow/builders': 4.0.1-beta.65(@opentelemetry/api@1.9.0) + '@workflow/rollup': 4.0.0-beta.31(@opentelemetry/api@1.9.0) + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3) + '@workflow/vite': 4.0.0-beta.24(@opentelemetry/api@1.9.0) exsolve: 1.0.8 pathe: 2.0.3 transitivePeerDependencies: @@ -7563,12 +7561,12 @@ snapshots: - aws-crt - supports-color - '@workflow/builders@4.0.1-beta.58(@opentelemetry/api@1.9.0)': + '@workflow/builders@4.0.1-beta.65(@opentelemetry/api@1.9.0)': dependencies: '@swc/core': 1.15.3 - '@workflow/core': 4.2.0-beta.67(@opentelemetry/api@1.9.0) - '@workflow/errors': 4.1.0-beta.18 - '@workflow/swc-plugin': 4.1.0-beta.18(@swc/core@1.15.3) + '@workflow/core': 4.2.0-beta.74(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.1.0-beta.19 + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3) '@workflow/utils': 4.1.0-beta.13 builtin-modules: 5.0.0 chalk: 5.6.2 @@ -7583,21 +7581,21 @@ snapshots: - aws-crt - supports-color - '@workflow/cli@4.2.0-beta.67(@opentelemetry/api@1.9.0)(react-router@7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)': + '@workflow/cli@4.2.0-beta.74(@opentelemetry/api@1.9.0)': dependencies: '@oclif/core': 4.8.1 '@oclif/plugin-help': 6.2.37 '@swc/core': 1.15.3 '@vercel/cli-auth': 0.0.1 - '@workflow/builders': 4.0.1-beta.58(@opentelemetry/api@1.9.0) - '@workflow/core': 4.2.0-beta.67(@opentelemetry/api@1.9.0) - '@workflow/errors': 4.1.0-beta.18 - '@workflow/swc-plugin': 4.1.0-beta.18(@swc/core@1.15.3) + '@workflow/builders': 4.0.1-beta.65(@opentelemetry/api@1.9.0) + '@workflow/core': 4.2.0-beta.74(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.1.0-beta.19 + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3) '@workflow/utils': 4.1.0-beta.13 - '@workflow/web': 4.1.0-beta.39(react-router@7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) - '@workflow/world': 4.1.0-beta.11(zod@4.3.6) - '@workflow/world-local': 4.1.0-beta.40(@opentelemetry/api@1.9.0) - '@workflow/world-vercel': 4.1.0-beta.41(@opentelemetry/api@1.9.0) + '@workflow/web': 4.1.0-beta.46 + '@workflow/world': 4.1.0-beta.14(zod@4.3.6) + '@workflow/world-local': 4.1.0-beta.47(@opentelemetry/api@1.9.0) + '@workflow/world-vercel': 4.1.0-beta.45(@opentelemetry/api@1.9.0) boxen: 8.0.1 builtin-modules: 5.0.0 chalk: 5.6.2 @@ -7619,23 +7617,21 @@ snapshots: - '@opentelemetry/api' - '@swc/helpers' - aws-crt - - react-router - supports-color - - typescript - '@workflow/core@4.2.0-beta.67(@opentelemetry/api@1.9.0)': + '@workflow/core@4.2.0-beta.74(@opentelemetry/api@1.9.0)': dependencies: '@aws-sdk/credential-provider-web-identity': 3.972.13 '@jridgewell/trace-mapping': 0.3.31 '@standard-schema/spec': 1.0.0 '@types/ms': 2.1.0 '@vercel/functions': 3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13) - '@workflow/errors': 4.1.0-beta.18 + '@workflow/errors': 4.1.0-beta.19 '@workflow/serde': 4.1.0-beta.2 '@workflow/utils': 4.1.0-beta.13 - '@workflow/world': 4.1.0-beta.11(zod@4.3.6) - '@workflow/world-local': 4.1.0-beta.40(@opentelemetry/api@1.9.0) - '@workflow/world-vercel': 4.1.0-beta.41(@opentelemetry/api@1.9.0) + '@workflow/world': 4.1.0-beta.14(zod@4.3.6) + '@workflow/world-local': 4.1.0-beta.47(@opentelemetry/api@1.9.0) + '@workflow/world-vercel': 4.1.0-beta.45(@opentelemetry/api@1.9.0) debug: 4.4.3(supports-color@8.1.1) devalue: 5.6.3 ms: 2.1.3 @@ -7654,14 +7650,19 @@ snapshots: '@workflow/utils': 4.1.0-beta.13 ms: 2.1.3 - '@workflow/nest@0.0.0-beta.16(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)': + '@workflow/errors@4.1.0-beta.19': + dependencies: + '@workflow/utils': 4.1.0-beta.13 + ms: 2.1.3 + + '@workflow/nest@0.0.0-beta.23(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)': dependencies: '@nestjs/common': 11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2) '@swc/cli': 0.7.10(@swc/core@1.15.3)(chokidar@4.0.3) '@swc/core': 1.15.3 - '@workflow/builders': 4.0.1-beta.58(@opentelemetry/api@1.9.0) - '@workflow/swc-plugin': 4.1.0-beta.18(@swc/core@1.15.3) + '@workflow/builders': 4.0.1-beta.65(@opentelemetry/api@1.9.0) + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3) pathe: 2.0.3 transitivePeerDependencies: - '@opentelemetry/api' @@ -7669,12 +7670,12 @@ snapshots: - aws-crt - supports-color - '@workflow/next@4.0.1-beta.63(@opentelemetry/api@1.9.0)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + '@workflow/next@4.0.1-beta.70(@opentelemetry/api@1.9.0)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: '@swc/core': 1.15.3 - '@workflow/builders': 4.0.1-beta.58(@opentelemetry/api@1.9.0) - '@workflow/core': 4.2.0-beta.67(@opentelemetry/api@1.9.0) - '@workflow/swc-plugin': 4.1.0-beta.18(@swc/core@1.15.3) + '@workflow/builders': 4.0.1-beta.65(@opentelemetry/api@1.9.0) + '@workflow/core': 4.2.0-beta.74(@opentelemetry/api@1.9.0) + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3) semver: 7.7.4 watchpack: 2.5.1 optionalDependencies: @@ -7685,14 +7686,14 @@ snapshots: - aws-crt - supports-color - '@workflow/nitro@4.0.1-beta.62(@opentelemetry/api@1.9.0)': + '@workflow/nitro@4.0.1-beta.69(@opentelemetry/api@1.9.0)': dependencies: '@swc/core': 1.15.3 - '@workflow/builders': 4.0.1-beta.58(@opentelemetry/api@1.9.0) - '@workflow/core': 4.2.0-beta.67(@opentelemetry/api@1.9.0) - '@workflow/rollup': 4.0.0-beta.24(@opentelemetry/api@1.9.0) - '@workflow/swc-plugin': 4.1.0-beta.18(@swc/core@1.15.3) - '@workflow/vite': 4.0.0-beta.17(@opentelemetry/api@1.9.0) + '@workflow/builders': 4.0.1-beta.65(@opentelemetry/api@1.9.0) + '@workflow/core': 4.2.0-beta.74(@opentelemetry/api@1.9.0) + '@workflow/rollup': 4.0.0-beta.31(@opentelemetry/api@1.9.0) + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3) + '@workflow/vite': 4.0.0-beta.24(@opentelemetry/api@1.9.0) exsolve: 1.0.8 pathe: 2.0.3 transitivePeerDependencies: @@ -7701,10 +7702,10 @@ snapshots: - aws-crt - supports-color - '@workflow/nuxt@4.0.1-beta.51(@opentelemetry/api@1.9.0)': + '@workflow/nuxt@4.0.1-beta.58(@opentelemetry/api@1.9.0)': dependencies: - '@nuxt/kit': 4.3.1 - '@workflow/nitro': 4.0.1-beta.62(@opentelemetry/api@1.9.0) + '@nuxt/kit': 4.4.2 + '@workflow/nitro': 4.0.1-beta.69(@opentelemetry/api@1.9.0) transitivePeerDependencies: - '@opentelemetry/api' - '@swc/helpers' @@ -7712,11 +7713,11 @@ snapshots: - magicast - supports-color - '@workflow/rollup@4.0.0-beta.24(@opentelemetry/api@1.9.0)': + '@workflow/rollup@4.0.0-beta.31(@opentelemetry/api@1.9.0)': dependencies: '@swc/core': 1.15.3 - '@workflow/builders': 4.0.1-beta.58(@opentelemetry/api@1.9.0) - '@workflow/swc-plugin': 4.1.0-beta.18(@swc/core@1.15.3) + '@workflow/builders': 4.0.1-beta.65(@opentelemetry/api@1.9.0) + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3) exsolve: 1.0.7 transitivePeerDependencies: - '@opentelemetry/api' @@ -7726,13 +7727,13 @@ snapshots: '@workflow/serde@4.1.0-beta.2': {} - '@workflow/sveltekit@4.0.0-beta.56(@opentelemetry/api@1.9.0)': + '@workflow/sveltekit@4.0.0-beta.63(@opentelemetry/api@1.9.0)': dependencies: '@swc/core': 1.15.3 - '@workflow/builders': 4.0.1-beta.58(@opentelemetry/api@1.9.0) - '@workflow/rollup': 4.0.0-beta.24(@opentelemetry/api@1.9.0) - '@workflow/swc-plugin': 4.1.0-beta.18(@swc/core@1.15.3) - '@workflow/vite': 4.0.0-beta.17(@opentelemetry/api@1.9.0) + '@workflow/builders': 4.0.1-beta.65(@opentelemetry/api@1.9.0) + '@workflow/rollup': 4.0.0-beta.31(@opentelemetry/api@1.9.0) + '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3) + '@workflow/vite': 4.0.0-beta.24(@opentelemetry/api@1.9.0) exsolve: 1.0.8 fs-extra: 11.3.3 pathe: 2.0.3 @@ -7742,7 +7743,7 @@ snapshots: - aws-crt - supports-color - '@workflow/swc-plugin@4.1.0-beta.18(@swc/core@1.15.3)': + '@workflow/swc-plugin@4.1.0-beta.21(@swc/core@1.15.3)': dependencies: '@swc/core': 1.15.3 @@ -7754,24 +7755,20 @@ snapshots: dependencies: ms: 2.1.3 - '@workflow/vite@4.0.0-beta.17(@opentelemetry/api@1.9.0)': + '@workflow/vite@4.0.0-beta.24(@opentelemetry/api@1.9.0)': dependencies: - '@workflow/builders': 4.0.1-beta.58(@opentelemetry/api@1.9.0) + '@workflow/builders': 4.0.1-beta.65(@opentelemetry/api@1.9.0) transitivePeerDependencies: - '@opentelemetry/api' - '@swc/helpers' - aws-crt - supports-color - '@workflow/web@4.1.0-beta.39(react-router@7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)': + '@workflow/web@4.1.0-beta.46': dependencies: - '@react-router/node': 7.13.1(react-router@7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) express: 4.22.1 - isbot: 5.1.35 transitivePeerDependencies: - - react-router - supports-color - - typescript '@workflow/world-local@4.1.0-beta.40(@opentelemetry/api@1.9.0)': dependencies: @@ -7786,6 +7783,19 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 + '@workflow/world-local@4.1.0-beta.47(@opentelemetry/api@1.9.0)': + dependencies: + '@vercel/queue': 0.1.4 + '@workflow/errors': 4.1.0-beta.19 + '@workflow/utils': 4.1.0-beta.13 + '@workflow/world': 4.1.0-beta.14(zod@4.3.6) + async-sema: 3.1.1 + ulid: 3.0.1 + undici: 7.22.0 + zod: 4.3.6 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + '@workflow/world-postgres@4.1.0-beta.42(@opentelemetry/api@1.9.0)(@types/pg@8.18.0)(pg@8.18.0)(typescript@5.9.3)': dependencies: '@vercel/queue': 0.1.1 @@ -7832,12 +7842,12 @@ snapshots: - supports-color - typescript - '@workflow/world-vercel@4.1.0-beta.41(@opentelemetry/api@1.9.0)': + '@workflow/world-vercel@4.1.0-beta.45(@opentelemetry/api@1.9.0)': dependencies: '@vercel/oidc': 3.2.0 - '@vercel/queue': 0.1.1 - '@workflow/errors': 4.1.0-beta.18 - '@workflow/world': 4.1.0-beta.11(zod@4.3.6) + '@vercel/queue': 0.1.4 + '@workflow/errors': 4.1.0-beta.19 + '@workflow/world': 4.1.0-beta.14(zod@4.3.6) cbor-x: 1.6.0 undici: 7.22.0 zod: 4.3.6 @@ -7849,6 +7859,11 @@ snapshots: ulid: 3.0.1 zod: 4.3.6 + '@workflow/world@4.1.0-beta.14(zod@4.3.6)': + dependencies: + ulid: 3.0.1 + zod: 4.3.6 + '@xhmikosr/archive-type@7.1.0': dependencies: file-type: 20.5.0 @@ -7978,6 +7993,8 @@ snapshots: acorn@8.15.0: {} + acorn@8.16.0: {} + ai@6.0.69(zod@4.1.12): dependencies: '@ai-sdk/gateway': 3.0.32(zod@4.1.12) @@ -8303,8 +8320,6 @@ snapshots: cookie@0.7.2: {} - cookie@1.1.1: {} - cose-base@1.0.3: dependencies: layout-base: 1.0.2 @@ -9233,8 +9248,6 @@ snapshots: dependencies: is-inside-container: 1.0.0 - isbot@5.1.35: {} - isexe@2.0.0: {} iterare@1.2.1: {} @@ -9882,6 +9895,13 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.1 + mlly@1.8.2: + dependencies: + acorn: 8.16.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.3 + module-details-from-path@1.0.4: {} motion-dom@12.23.23: @@ -10287,14 +10307,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.7 - react-router@7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - cookie: 1.1.1 - react: 19.2.3 - set-cookie-parser: 2.7.2 - optionalDependencies: - react-dom: 19.2.3(react@19.2.3) - react-style-singleton@2.2.3(@types/react@19.2.7)(react@19.2.3): dependencies: get-nonce: 1.0.1 @@ -10525,8 +10537,6 @@ snapshots: transitivePeerDependencies: - supports-color - set-cookie-parser@2.7.2: {} - setprototypeof@1.2.0: {} sharp@0.34.5: @@ -11001,19 +11011,20 @@ snapshots: wordwrap@1.0.0: {} - workflow@4.2.0-beta.67(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-router@7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3): - dependencies: - '@workflow/astro': 4.0.0-beta.41(@opentelemetry/api@1.9.0) - '@workflow/cli': 4.2.0-beta.67(@opentelemetry/api@1.9.0)(react-router@7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) - '@workflow/core': 4.2.0-beta.67(@opentelemetry/api@1.9.0) - '@workflow/errors': 4.1.0-beta.18 - '@workflow/nest': 0.0.0-beta.16(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3) - '@workflow/next': 4.0.1-beta.63(@opentelemetry/api@1.9.0)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) - '@workflow/nitro': 4.0.1-beta.62(@opentelemetry/api@1.9.0) - '@workflow/nuxt': 4.0.1-beta.51(@opentelemetry/api@1.9.0) - '@workflow/rollup': 4.0.0-beta.24(@opentelemetry/api@1.9.0) - '@workflow/sveltekit': 4.0.0-beta.56(@opentelemetry/api@1.9.0) + workflow@4.2.0-beta.74(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3): + dependencies: + '@workflow/astro': 4.0.0-beta.48(@opentelemetry/api@1.9.0) + '@workflow/cli': 4.2.0-beta.74(@opentelemetry/api@1.9.0) + '@workflow/core': 4.2.0-beta.74(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.1.0-beta.19 + '@workflow/nest': 0.0.0-beta.23(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3) + '@workflow/next': 4.0.1-beta.70(@opentelemetry/api@1.9.0)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + '@workflow/nitro': 4.0.1-beta.69(@opentelemetry/api@1.9.0) + '@workflow/nuxt': 4.0.1-beta.58(@opentelemetry/api@1.9.0) + '@workflow/rollup': 4.0.0-beta.31(@opentelemetry/api@1.9.0) + '@workflow/sveltekit': 4.0.0-beta.63(@opentelemetry/api@1.9.0) '@workflow/typescript-plugin': 4.0.1-beta.5(typescript@5.9.3) + '@workflow/utils': 4.1.0-beta.13 ms: 2.1.3 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -11026,7 +11037,6 @@ snapshots: - aws-crt - magicast - next - - react-router - supports-color - typescript From da5e71288d4331e8f53281d643b88f7fd552f201 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Wed, 1 Apr 2026 12:45:56 -0700 Subject: [PATCH 02/10] polish tool text for sleep/hook Signed-off-by: Peter Wielander --- flight-booking-app/app/page.tsx | 52 ++++++++++++++----- .../components/booking-approval.tsx | 21 ++------ 2 files changed, 43 insertions(+), 30 deletions(-) diff --git a/flight-booking-app/app/page.tsx b/flight-booking-app/app/page.tsx index 16c5d8b..f3fe37d 100644 --- a/flight-booking-app/app/page.tsx +++ b/flight-booking-app/app/page.tsx @@ -227,20 +227,44 @@ export default function ChatPage() { {/* Loading indicators for assistant messages */} {message.role === "assistant" && isLastMessage && - !hasText && ( - <> - {status === "submitted" && ( - - Sending message... - - )} - {status === "streaming" && ( - - Waiting for response... - - )} - - )} + !hasText && (() => { + const hasSleepActive = message.parts.some( + (part) => + part.type === "tool-sleep" && + "state" in part && + part.state !== "output-available" + ); + const hasApprovalActive = message.parts.some( + (part) => + part.type === "tool-bookingApproval" && + "state" in part && + part.state !== "output-available" + ); + return ( + <> + {status === "submitted" && ( + + Sending message... + + )} + {status === "streaming" && !hasSleepActive && !hasApprovalActive && ( + + Waiting for response... + + )} + {status === "streaming" && hasSleepActive && ( + + Sleeping... + + )} + {status === "streaming" && hasApprovalActive && ( + + Waiting for approval... + + )} + + ); + })()} diff --git a/flight-booking-app/components/booking-approval.tsx b/flight-booking-app/components/booking-approval.tsx index ef43bfa..59ba799 100644 --- a/flight-booking-app/components/booking-approval.tsx +++ b/flight-booking-app/components/booking-approval.tsx @@ -20,22 +20,11 @@ export function BookingApproval({ // If we have output, the approval has been processed if (output) { - try { - const json = JSON.parse(output) as { output: { value: string } }; - return ( -
-

{json.output.value}

-
- ); - } catch (error) { - return ( -
-

- Error parsing approval result: {(error as Error).message} -

-
- ); - } + return ( +
+

{output}

+
+ ); } const handleSubmit = async (approved: boolean) => { From c634c9e829b5303948e978d78801afdc51dad2a8 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Wed, 1 Apr 2026 13:11:13 -0700 Subject: [PATCH 03/10] WIP sandbox Signed-off-by: Peter Wielander --- flight-booking-app/package.json | 1 + flight-booking-app/pnpm-lock.yaml | 54 +++++- flight-booking-app/workflows/chat/index.ts | 16 +- .../workflows/chat/steps/tools.ts | 165 +++++++++++++++++- 4 files changed, 229 insertions(+), 7 deletions(-) diff --git a/flight-booking-app/package.json b/flight-booking-app/package.json index 0a6b4ce..60535ee 100644 --- a/flight-booking-app/package.json +++ b/flight-booking-app/package.json @@ -45,6 +45,7 @@ "typescript": "^5.9.3", "use-stick-to-bottom": "^1.1.1", "workflow": "4.2.0-beta.74", + "@vercel/sandbox": "file:vercel-sandbox-1.9.0.tgz", "zod": "^4.1.12" }, "devDependencies": { diff --git a/flight-booking-app/pnpm-lock.yaml b/flight-booking-app/pnpm-lock.yaml index f32b7dc..c8392ea 100644 --- a/flight-booking-app/pnpm-lock.yaml +++ b/flight-booking-app/pnpm-lock.yaml @@ -39,6 +39,9 @@ importers: '@vercel/otel': specifier: ^1.13.0 version: 1.14.0(@opentelemetry/api-logs@0.57.2)(@opentelemetry/api@1.9.0)(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-logs@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)) + '@vercel/sandbox': + specifier: file:vercel-sandbox-1.9.0.tgz + version: file:vercel-sandbox-1.9.0.tgz '@workflow/ai': specifier: 4.1.0-beta.59 version: 4.1.0-beta.59(@opentelemetry/api@1.9.0)(ai@6.0.69(zod@4.1.12))(workflow@4.2.0-beta.74(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)) @@ -2307,6 +2310,10 @@ packages: resolution: {integrity: sha512-wo+jCycmCX078vQSbkX+RcLvySONDCK0f9aQp5UMKQD1+B+xKt3YVbIYbZukvoHQpbm5nnk6If+ADSeK/PmCgQ==} engines: {node: '>=20.0.0'} + '@vercel/sandbox@file:vercel-sandbox-1.9.0.tgz': + resolution: {integrity: sha512-E7ejbixjyfnFY3gvssCDnvpmin3AV49lfq6sbSZX5hMghpha32JXEf5hGLieMlp9DCSnJkxl+6wqjoFpEvaZng==, tarball: file:vercel-sandbox-1.9.0.tgz} + version: 1.9.0 + '@workflow/ai@4.1.0-beta.59': resolution: {integrity: sha512-Vy11b0fGlbInM1HTnb0iuodEjAW2nMP81KFtUbSfjN20nmlxNADvpOtYkMG8fOk9aSzNGcrzzPMySnze7Xmbag==} peerDependencies: @@ -2561,6 +2568,9 @@ packages: resolution: {integrity: sha512-V+SsTpDqkrWTimiotsyl33ePSjA5/KrithwupuvJ6ztsqPvGv6ge4OredFhPffVXiLN/QUWvE0XcqJaYgt6fOg==} engines: {node: '>= 14'} + async-retry@1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + async-sema@3.1.1: resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} @@ -3763,6 +3773,9 @@ packages: jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsonlines@0.1.1: + resolution: {integrity: sha512-ekDrAGso79Cvf+dtm+mL8OBI2bmAOt3gssYs833De/C9NmIpWDWyUO4zPgB5x2/OhY366dkhgfPMYfwZF7yOZA==} + katex@0.16.28: resolution: {integrity: sha512-YHzO7721WbmAL6Ov1uzN/l5mY5WWWhJBSW+jq4tkfZfsxmo1hu6frS0EOswvjBUnWE6NtjEs48SFn5CQESRLZg==} hasBin: true @@ -4666,6 +4679,10 @@ packages: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} @@ -5213,6 +5230,9 @@ packages: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} + zod@3.24.4: + resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} + zod@4.1.11: resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==} @@ -7531,6 +7551,22 @@ snapshots: mixpart: 0.0.5 picocolors: 1.1.1 + '@vercel/sandbox@file:vercel-sandbox-1.9.0.tgz': + dependencies: + '@vercel/oidc': 3.2.0 + '@workflow/serde': 4.1.0-beta.2 + async-retry: 1.3.3 + jsonlines: 0.1.1 + ms: 2.1.3 + picocolors: 1.1.1 + tar-stream: 3.1.7 + undici: 7.22.0 + xdg-app-paths: 5.1.0 + zod: 3.24.4 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + '@workflow/ai@4.1.0-beta.59(@opentelemetry/api@1.9.0)(ai@6.0.69(zod@4.1.12))(workflow@4.2.0-beta.74(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.12(@nestjs/common@11.1.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.7.10(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3))': dependencies: '@ai-sdk/provider': 3.0.7 @@ -7987,9 +8023,9 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-attributes@1.9.5(acorn@8.15.0): + acorn-import-attributes@1.9.5(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 acorn@8.15.0: {} @@ -8049,6 +8085,10 @@ snapshots: async-listen@3.0.0: {} + async-retry@1.3.3: + dependencies: + retry: 0.13.1 + async-sema@3.1.1: {} async@3.2.6: {} @@ -9167,8 +9207,8 @@ snapshots: import-in-the-middle@1.15.0: dependencies: - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) cjs-module-lexer: 1.4.3 module-details-from-path: 1.0.4 @@ -9280,6 +9320,8 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonlines@0.1.1: {} + katex@0.16.28: dependencies: commander: 8.3.0 @@ -10468,6 +10510,8 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 + retry@0.13.1: {} + robust-predicates@3.0.2: {} roughjs@4.6.6: @@ -11087,6 +11131,8 @@ snapshots: yocto-queue@1.2.2: {} + zod@3.24.4: {} + zod@4.1.11: {} zod@4.1.12: {} diff --git a/flight-booking-app/workflows/chat/index.ts b/flight-booking-app/workflows/chat/index.ts index 6022bb4..b48773a 100644 --- a/flight-booking-app/workflows/chat/index.ts +++ b/flight-booking-app/workflows/chat/index.ts @@ -5,7 +5,7 @@ import { type ModelMessage, } from 'ai'; import { DurableAgent } from '@workflow/ai/agent'; -import { FLIGHT_ASSISTANT_PROMPT, flightBookingTools } from './steps/tools'; +import { FLIGHT_ASSISTANT_PROMPT, flightBookingTools, createSandboxTools } from './steps/tools'; import { getWritable, getWorkflowMetadata } from 'workflow'; import { chatMessageHook } from './hooks/chat-message'; import { @@ -14,6 +14,7 @@ import { writeStreamClose, writeTurnEnd, } from './steps/writer'; +import { Sandbox } from '@vercel/sandbox'; /** * Multi-turn chat workflow. @@ -62,10 +63,21 @@ export async function chat(initialMessages: UIMessage[], requestReceivedAt: numb } } + // Lazy sandbox creation — only created when the agent first calls runCode + let sandbox: Sandbox | null = null; + const getOrCreateSandbox = async () => { + if (!sandbox) { + sandbox = await Sandbox.create({ runtime: 'node24', timeout: 5 * 60 * 1000 }); + } + return sandbox; + }; + + const sandboxTools = createSandboxTools(getOrCreateSandbox); + const agent = new DurableAgent({ model: 'bedrock/claude-haiku-4-5-20251001-v1', system: FLIGHT_ASSISTANT_PROMPT, - tools: flightBookingTools, + tools: { ...flightBookingTools, ...sandboxTools }, }); // Create a hook that uses the run ID as the token for resumption diff --git a/flight-booking-app/workflows/chat/steps/tools.ts b/flight-booking-app/workflows/chat/steps/tools.ts index 05ca703..69da053 100644 --- a/flight-booking-app/workflows/chat/steps/tools.ts +++ b/flight-booking-app/workflows/chat/steps/tools.ts @@ -2,6 +2,7 @@ import { FatalError, sleep, getWritable } from 'workflow'; import { z } from 'zod'; import { bookingApprovalHook } from '../hooks/approval'; import type { UIMessageChunk } from 'ai'; +import type { Sandbox } from '@vercel/sandbox'; /** * Emit a tool-start event for realtime observability. @@ -43,6 +44,59 @@ async function emitToolEnd(toolName: string) { } } +/** + * Emit a sandbox lifecycle event for realtime observability. + */ +async function emitSandboxEvent(event: string, details?: Record) { + const writable = getWritable(); + const writer = writable.getWriter(); + try { + await writer.write({ + type: 'data-workflow', + data: { + type: 'sandbox-event', + event, + ...details, + timestamp: Date.now(), + }, + } as UIMessageChunk); + } finally { + writer.releaseLock(); + } +} + +/** + * Extract a meaningful error message from any thrown value. + * Handles cross-realm errors where instanceof Error fails. + */ +function extractErrorMessage(error: unknown): string { + if (error == null) return 'Unknown error (null)'; + if (typeof error === 'string') return error; + + // Standard Error instances (same realm) + if (error instanceof Error) { + return error.stack || error.message || error.constructor?.name || 'Error'; + } + + // Cross-realm errors or error-like objects + const asAny = error as any; + if (asAny.message) return String(asAny.message); + if (asAny.stack) return String(asAny.stack); + + // Try JSON.stringify with all own property names + try { + const keys = Object.getOwnPropertyNames(asAny); + if (keys.length > 0) { + const obj: Record = {}; + for (const key of keys) obj[key] = asAny[key]; + return JSON.stringify(obj); + } + } catch {} + + const str = String(error); + return str !== '[object Object]' ? str : 'Unknown error (unserializable)'; +} + export const mockAirports: Record< string, { name: string; city: string; timezone: string } @@ -454,6 +508,113 @@ export const flightBookingTools = { }, }; +/** + * Creates sandbox tools that close over a lazily-created Sandbox instance. + * The sandbox persists across tool calls within the same workflow run. + */ +export function createSandboxTools(getOrCreateSandbox: () => Promise) { + return { + runCode: { + description: + 'Execute code or shell commands in an isolated cloud sandbox (Linux VM with Node.js). ' + + 'The sandbox persists between calls — installed packages, files, and environment carry over. ' + + 'Write files and run commands to accomplish any coding task.', + inputSchema: z.object({ + files: z + .array( + z.object({ + path: z.string().describe('File path relative to the working directory'), + content: z.string().describe('File content to write'), + }) + ) + .optional() + .describe('Files to write before running the command'), + command: z + .string() + .describe( + 'Shell command to execute (e.g., "node script.js", "npm install lodash && node index.js")' + ), + }), + execute: async ({ files, command }: { files?: { path: string; content: string }[]; command: string }) => { + await emitToolStart('runCode'); + try { + // Phase 1: Create or retrieve the sandbox + await emitSandboxEvent('creating'); + let sandbox: Sandbox; + try { + sandbox = await getOrCreateSandbox(); + } catch (err) { + const msg = extractErrorMessage(err); + await emitSandboxEvent('error', { phase: 'create', message: msg }); + await emitToolEnd('runCode'); + return { error: true, phase: 'sandbox-create', message: msg }; + } + await emitSandboxEvent('ready', { sandboxId: sandbox.sandboxId }); + + // Phase 2: Write files if provided + if (files && files.length > 0) { + await emitSandboxEvent('writing-files', { + sandboxId: sandbox.sandboxId, + fileCount: files.length, + filePaths: files.map((f) => f.path), + }); + try { + await sandbox.writeFiles(files); + } catch (err) { + const msg = extractErrorMessage(err); + await emitSandboxEvent('error', { phase: 'write-files', message: msg }); + await emitToolEnd('runCode'); + return { error: true, phase: 'write-files', message: msg }; + } + await emitSandboxEvent('files-written', { + sandboxId: sandbox.sandboxId, + fileCount: files.length, + }); + } + + // Phase 3: Run the command + await emitSandboxEvent('running-command', { + sandboxId: sandbox.sandboxId, + command, + }); + let stdout: string; + let stderr: string; + let exitCode: number; + try { + const result = await sandbox.runCommand('sh', ['-c', command]); + exitCode = result.exitCode; + stdout = await result.stdout(); + stderr = await result.stderr(); + } catch (err) { + const msg = extractErrorMessage(err); + await emitSandboxEvent('error', { phase: 'run-command', message: msg }); + await emitToolEnd('runCode'); + return { error: true, phase: 'run-command', message: msg }; + } + + await emitSandboxEvent('command-complete', { + sandboxId: sandbox.sandboxId, + exitCode, + }); + await emitToolEnd('runCode'); + + return { + exitCode, + stdout: stdout || '(no output)', + stderr: stderr || '', + }; + } catch (err) { + // Catch-all: never let an unstructured error propagate + const msg = extractErrorMessage(err); + try { await emitSandboxEvent('error', { phase: 'unknown', message: msg }); } catch {} + try { await emitToolEnd('runCode'); } catch {} + return { error: true, phase: 'unknown', message: msg }; + } + }, + }, + }; +} + // System prompt export const FLIGHT_ASSISTANT_PROMPT = `You are a helpful flight booking assistant. You can help users: - Search for flights between cities @@ -461,6 +622,8 @@ export const FLIGHT_ASSISTANT_PROMPT = `You are a helpful flight booking assista - Get airport information - Book flights - Check baggage allowances +- Run code in an isolated sandbox environment (use the runCode tool for any coding tasks) Be friendly and professional. When searching for flights, always ask for travel dates if not provided. -When booking flights, confirm all details before proceeding.`; +When booking flights, confirm all details before proceeding. +When asked to write or run code, use the runCode tool. The sandbox persists between calls, so you can install packages first and then use them.`; From 5c7aafaea8461d4a8fe7bca6c6059fb293332b69 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Wed, 1 Apr 2026 13:44:48 -0700 Subject: [PATCH 04/10] WIP sandbox 2 Signed-off-by: Peter Wielander --- flight-booking-app/app/page.tsx | 103 ++++++- .../components/sandbox-widget.tsx | 280 ++++++++++++++++++ .../workflows/chat/steps/tools.ts | 165 ++++++----- 3 files changed, 474 insertions(+), 74 deletions(-) create mode 100644 flight-booking-app/components/sandbox-widget.tsx diff --git a/flight-booking-app/app/page.tsx b/flight-booking-app/app/page.tsx index f3fe37d..1281bc2 100644 --- a/flight-booking-app/app/page.tsx +++ b/flight-booking-app/app/page.tsx @@ -18,6 +18,7 @@ import { ToolOutput, } from "@/components/ai-elements/tool"; import { BookingApproval } from "@/components/booking-approval"; +import { SandboxWidget } from "@/components/sandbox-widget"; import { useMultiTurnChat } from "@/hooks/use-multi-turn-chat"; import type { MyMessageMetadata } from "@/schemas/chat"; import ChatInput from "@/components/chat-input"; @@ -137,11 +138,49 @@ export default function ChatPage() { const hasText = message.parts.some((part) => part.type === "text"); const isLastMessage = index === messages.length - 1; + // Deduplicate tool calls from doStreamStep retries. + // When a stream step fails and retries, each attempt emits tool-call + // chunks with different toolCallIds. Skip the phantom ones (no output) + // if a later call of the same tool type completed with output. + const supersededToolCallIds = new Set(); + const toolPartsByType = new Map(); + for (const part of message.parts) { + if ("toolCallId" in part && "state" in part) { + const type = (part as any).type as string; + if (!toolPartsByType.has(type)) toolPartsByType.set(type, []); + toolPartsByType.get(type)!.push(part); + } + } + for (const [, parts] of toolPartsByType) { + if (parts.length <= 1) continue; + const hasCompleted = parts.some( + (p: any) => + p.state === "output-available" || p.state === "output-error" + ); + if (hasCompleted) { + for (const p of parts) { + if ( + p.state !== "output-available" && + p.state !== "output-error" + ) { + supersededToolCallIds.add(p.toolCallId); + } + } + } + } + return (
{message.parts.map((part, partIndex) => { + // Skip phantom tool calls from retried stream steps + if ( + "toolCallId" in part && + supersededToolCallIds.has((part as any).toolCallId) + ) { + return null; + } // Render text parts if (part.type === "text") { return ( @@ -175,7 +214,8 @@ export default function ChatPage() { part.type === "tool-getAirportInfo" || part.type === "tool-bookFlight" || part.type === "tool-checkBaggageAllowance" || - part.type === "tool-sleep" + part.type === "tool-sleep" || + part.type === "tool-runCode" ) { if (!("toolCallId" in part) || !("state" in part)) { return null; @@ -240,6 +280,12 @@ export default function ChatPage() { "state" in part && part.state !== "output-available" ); + const hasSandboxActive = message.parts.some( + (part) => + part.type === "tool-runCode" && + "state" in part && + part.state !== "output-available" + ); return ( <> {status === "submitted" && ( @@ -247,7 +293,7 @@ export default function ChatPage() { Sending message... )} - {status === "streaming" && !hasSleepActive && !hasApprovalActive && ( + {status === "streaming" && !hasSleepActive && !hasApprovalActive && !hasSandboxActive && ( Waiting for response... @@ -262,6 +308,11 @@ export default function ChatPage() { Waiting for approval... )} + {status === "streaming" && hasSandboxActive && ( + + Running in sandbox... + + )} ); })()} @@ -318,6 +369,8 @@ export default function ChatPage() { onSendMessage={sendMessage} stop={stop} /> + +
); } @@ -455,6 +508,10 @@ function WorkflowEventBadge({ data, t0 }: { data: any; t0: number | null }) { // Skip rendering agent-step since we now have realtime tool-call events return null; + case "sandbox-event": + // Rendered in the floating SandboxWidget instead + return null; + default: // Render generic data messages if (data?.message) { @@ -685,6 +742,48 @@ function renderToolOutput(part: any) { ); } + case "tool-runCode": { + if (!parsedOutput) return null; + + // Error case: tool caught the error and returned structured data + if (parsedOutput.error) { + return ( +
+
+ Sandbox error during: {parsedOutput.phase || "unknown"} +
+
+                {parsedOutput.message || JSON.stringify(parsedOutput, null, 2)}
+              
+
+ ); + } + + // Success case + const { exitCode, stdout, stderr } = parsedOutput; + return ( +
+ {exitCode === 0 ? ( +
Exited with code 0
+ ) : ( +
Exit code: {exitCode}
+ )} + {stdout && stdout !== "(no output)" && ( +
+
stdout
+
{stdout}
+
+ )} + {stderr && ( +
+
stderr
+
{stderr}
+
+ )} +
+ ); + } + default: return null; } diff --git a/flight-booking-app/components/sandbox-widget.tsx b/flight-booking-app/components/sandbox-widget.tsx new file mode 100644 index 0000000..1266f84 --- /dev/null +++ b/flight-booking-app/components/sandbox-widget.tsx @@ -0,0 +1,280 @@ +"use client"; + +import { useMemo, useState } from "react"; +import type { UIMessage } from "ai"; +import { + TerminalIcon, + ChevronDownIcon, + ChevronUpIcon, + CircleIcon, + CheckCircleIcon, + XCircleIcon, + LoaderIcon, +} from "lucide-react"; + +interface SandboxEvent { + event: string; + timestamp: number; + sandboxId?: string; + command?: string; + exitCode?: number; + fileCount?: number; + filePaths?: string[]; + phase?: string; + message?: string; + status?: string; +} + +function extractSandboxEvents(messages: UIMessage[]): SandboxEvent[] { + const events: SandboxEvent[] = []; + for (const msg of messages) { + for (const part of msg.parts) { + if ( + part.type === "data-workflow" && + "data" in part && + (part.data as any)?.type === "sandbox-event" + ) { + const { type: _, ...rest } = part.data as any; + events.push(rest as SandboxEvent); + } + } + } + return events; +} + +function getStatusFromEvents(events: SandboxEvent[]): { + status: string; + sandboxId: string | null; + lastCommand: string | null; + lastExitCode: number | null; + hasError: boolean; + lastError: string | null; +} { + let status = "idle"; + let sandboxId: string | null = null; + let lastCommand: string | null = null; + let lastExitCode: number | null = null; + let hasError = false; + let lastError: string | null = null; + + for (const ev of events) { + if (ev.sandboxId) sandboxId = ev.sandboxId; + + switch (ev.event) { + case "creating": + status = "creating"; + break; + case "connecting": + status = "connecting"; + break; + case "ready": + status = "ready"; + break; + case "writing-files": + status = "writing files"; + break; + case "files-written": + status = "ready"; + break; + case "running-command": + status = "running"; + lastCommand = ev.command || null; + lastExitCode = null; + break; + case "command-complete": + status = "ready"; + lastExitCode = ev.exitCode ?? null; + break; + case "error": + hasError = true; + lastError = ev.message || ev.phase || "unknown error"; + status = "error"; + break; + } + } + + return { status, sandboxId, lastCommand, lastExitCode, hasError, lastError }; +} + +const statusConfig: Record< + string, + { icon: React.ReactNode; color: string; label: string } +> = { + idle: { + icon: , + color: "text-muted-foreground", + label: "Idle", + }, + creating: { + icon: , + color: "text-yellow-500", + label: "Creating...", + }, + connecting: { + icon: , + color: "text-yellow-500", + label: "Connecting...", + }, + ready: { + icon: , + color: "text-green-500", + label: "Ready", + }, + "writing files": { + icon: , + color: "text-blue-400", + label: "Writing files...", + }, + running: { + icon: , + color: "text-blue-400", + label: "Running...", + }, + error: { + icon: , + color: "text-red-400", + label: "Error", + }, +}; + +export function SandboxWidget({ messages }: { messages: UIMessage[] }) { + const [expanded, setExpanded] = useState(false); + + const events = useMemo(() => extractSandboxEvents(messages), [messages]); + const { status, sandboxId, lastCommand, lastExitCode, hasError, lastError } = + useMemo(() => getStatusFromEvents(events), [events]); + + // Don't render if no sandbox events yet + if (events.length === 0) return null; + + const cfg = statusConfig[status] || statusConfig.idle; + + return ( +
+
+ {/* Header — always visible */} + + + {/* Expanded content */} + {expanded && ( +
+ {/* Last command */} + {lastCommand && ( +
+
+ Last command +
+ + {lastCommand} + + {lastExitCode !== null && ( + + exit={lastExitCode} + + )} +
+ )} + + {/* Error display */} + {hasError && lastError && ( +
+
+ Last error +
+
+                  {lastError}
+                
+
+ )} + + {/* Event log */} +
+
+ Events ({events.length}) +
+
+ {events + .slice() + .reverse() + .slice(0, 20) + .map((ev, i) => { + const isError = ev.event === "error"; + return ( +
+ + {ev.event} + {ev.command && ( + + {ev.command.slice(0, 30)} + + )} + {ev.filePaths && ( + + {ev.filePaths.join(", ")} + + )} + {ev.exitCode !== undefined && ( + + exit={ev.exitCode} + + )} + {isError && ev.message && ( + + {ev.message.split("\n")[0].slice(0, 50)} + + )} + + + {new Date(ev.timestamp).toLocaleTimeString()} + +
+ ); + })} +
+
+
+ )} +
+
+ ); +} diff --git a/flight-booking-app/workflows/chat/steps/tools.ts b/flight-booking-app/workflows/chat/steps/tools.ts index 69da053..564be9d 100644 --- a/flight-booking-app/workflows/chat/steps/tools.ts +++ b/flight-booking-app/workflows/chat/steps/tools.ts @@ -2,7 +2,7 @@ import { FatalError, sleep, getWritable } from 'workflow'; import { z } from 'zod'; import { bookingApprovalHook } from '../hooks/approval'; import type { UIMessageChunk } from 'ai'; -import type { Sandbox } from '@vercel/sandbox'; +import { Sandbox } from '@vercel/sandbox'; /** * Emit a tool-start event for realtime observability. @@ -46,6 +46,7 @@ async function emitToolEnd(toolName: string) { /** * Emit a sandbox lifecycle event for realtime observability. + * Must be called from within a "use step" context. */ async function emitSandboxEvent(event: string, details?: Record) { const writable = getWritable(); @@ -97,6 +98,76 @@ function extractErrorMessage(error: unknown): string { return str !== '[object Object]' ? str : 'Unknown error (unserializable)'; } +/** + * Execute sandbox operations inside a step where getWritable() and Node.js APIs work. + * Takes sandboxId as a plain string so it serializes cleanly across the workflow/step boundary. + */ +async function runInSandboxStep( + sandboxId: string, + files: { path: string; content: string }[] | undefined, + command: string, +): Promise<{ exitCode: number; stdout: string; stderr: string; sandboxId: string } | { error: true; phase: string; message: string; sandboxId: string }> { + 'use step'; + + await emitToolStart('runCode'); + await emitSandboxEvent('connecting', { sandboxId }); + + let sandbox: InstanceType; + try { + sandbox = await Sandbox.get({ sandboxId }); + } catch (err) { + const msg = extractErrorMessage(err); + await emitSandboxEvent('error', { phase: 'connect', message: msg, sandboxId }); + await emitToolEnd('runCode'); + return { error: true, phase: 'sandbox-connect', message: msg, sandboxId }; + } + await emitSandboxEvent('ready', { sandboxId, status: sandbox.status }); + + // Write files if provided + if (files && files.length > 0) { + await emitSandboxEvent('writing-files', { + sandboxId, + fileCount: files.length, + filePaths: files.map((f) => f.path), + }); + try { + await sandbox.writeFiles(files); + } catch (err) { + const msg = extractErrorMessage(err); + await emitSandboxEvent('error', { phase: 'write-files', message: msg, sandboxId }); + await emitToolEnd('runCode'); + return { error: true, phase: 'write-files', message: msg, sandboxId }; + } + await emitSandboxEvent('files-written', { sandboxId, fileCount: files.length }); + } + + // Run the command + await emitSandboxEvent('running-command', { sandboxId, command }); + try { + const result = await sandbox.runCommand('sh', ['-c', command]); + const stdout = await result.stdout(); + const stderr = await result.stderr(); + + await emitSandboxEvent('command-complete', { + sandboxId, + exitCode: result.exitCode, + }); + await emitToolEnd('runCode'); + + return { + exitCode: result.exitCode, + stdout: stdout || '(no output)', + stderr: stderr || '', + sandboxId, + }; + } catch (err) { + const msg = extractErrorMessage(err); + await emitSandboxEvent('error', { phase: 'run-command', message: msg, sandboxId }); + await emitToolEnd('runCode'); + return { error: true, phase: 'run-command', message: msg, sandboxId }; + } +} + export const mockAirports: Record< string, { name: string; city: string; timezone: string } @@ -511,8 +582,13 @@ export const flightBookingTools = { /** * Creates sandbox tools that close over a lazily-created Sandbox instance. * The sandbox persists across tool calls within the same workflow run. + * + * Architecture: The tool execute function runs in workflow context (no "use step") + * so it can call getOrCreateSandbox() which internally uses steps for creation. + * The actual sandbox operations run inside runInSandboxStep() which has "use step", + * enabling getWritable() for event emission and full Node.js APIs. */ -export function createSandboxTools(getOrCreateSandbox: () => Promise) { +export function createSandboxTools(getOrCreateSandbox: () => Promise>) { return { runCode: { description: @@ -536,80 +612,25 @@ export function createSandboxTools(getOrCreateSandbox: () => Promise) { ), }), execute: async ({ files, command }: { files?: { path: string; content: string }[]; command: string }) => { - await emitToolStart('runCode'); + // Phase 1: Create or retrieve the sandbox at workflow level. + // Sandbox.create() uses "use step" internally so this works from workflow context. + // The sandbox variable persists in the workflow closure across tool calls. + let sandboxId: string; try { - // Phase 1: Create or retrieve the sandbox - await emitSandboxEvent('creating'); - let sandbox: Sandbox; - try { - sandbox = await getOrCreateSandbox(); - } catch (err) { - const msg = extractErrorMessage(err); - await emitSandboxEvent('error', { phase: 'create', message: msg }); - await emitToolEnd('runCode'); - return { error: true, phase: 'sandbox-create', message: msg }; - } - await emitSandboxEvent('ready', { sandboxId: sandbox.sandboxId }); - - // Phase 2: Write files if provided - if (files && files.length > 0) { - await emitSandboxEvent('writing-files', { - sandboxId: sandbox.sandboxId, - fileCount: files.length, - filePaths: files.map((f) => f.path), - }); - try { - await sandbox.writeFiles(files); - } catch (err) { - const msg = extractErrorMessage(err); - await emitSandboxEvent('error', { phase: 'write-files', message: msg }); - await emitToolEnd('runCode'); - return { error: true, phase: 'write-files', message: msg }; - } - await emitSandboxEvent('files-written', { - sandboxId: sandbox.sandboxId, - fileCount: files.length, - }); - } - - // Phase 3: Run the command - await emitSandboxEvent('running-command', { - sandboxId: sandbox.sandboxId, - command, - }); - let stdout: string; - let stderr: string; - let exitCode: number; - try { - const result = await sandbox.runCommand('sh', ['-c', command]); - exitCode = result.exitCode; - stdout = await result.stdout(); - stderr = await result.stderr(); - } catch (err) { - const msg = extractErrorMessage(err); - await emitSandboxEvent('error', { phase: 'run-command', message: msg }); - await emitToolEnd('runCode'); - return { error: true, phase: 'run-command', message: msg }; - } - - await emitSandboxEvent('command-complete', { - sandboxId: sandbox.sandboxId, - exitCode, - }); - await emitToolEnd('runCode'); - + const sandbox = await getOrCreateSandbox(); + sandboxId = sandbox.sandboxId; + } catch (err) { + // Can't emit events here (no step context), so return structured error return { - exitCode, - stdout: stdout || '(no output)', - stderr: stderr || '', + error: true, + phase: 'sandbox-create', + message: extractErrorMessage(err), + sandboxId: '', }; - } catch (err) { - // Catch-all: never let an unstructured error propagate - const msg = extractErrorMessage(err); - try { await emitSandboxEvent('error', { phase: 'unknown', message: msg }); } catch {} - try { await emitToolEnd('runCode'); } catch {} - return { error: true, phase: 'unknown', message: msg }; } + + // Phase 2: Run the actual work inside a step where getWritable() works + return runInSandboxStep(sandboxId, files, command); }, }, }; From ea00fa9c07750a6a9843cfca0424dd8c6ccaed69 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Wed, 1 Apr 2026 13:47:06 -0700 Subject: [PATCH 05/10] disable debugging Signed-off-by: Peter Wielander --- flight-booking-app/app/page.tsx | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/flight-booking-app/app/page.tsx b/flight-booking-app/app/page.tsx index 1281bc2..596ca16 100644 --- a/flight-booking-app/app/page.tsx +++ b/flight-booking-app/app/page.tsx @@ -197,14 +197,7 @@ export default function ChatPage() { if (data?.type === "user-message") { return null; } - // Render observability events inline - return ( - - ); + return null; } // Render tool parts From 4f1e8672a166e23fabd26bacb5f256a166f74567 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Wed, 1 Apr 2026 13:51:55 -0700 Subject: [PATCH 06/10] ensure disconnect throws error Signed-off-by: Peter Wielander --- flight-booking-app/workflows/chat/steps/tools.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/flight-booking-app/workflows/chat/steps/tools.ts b/flight-booking-app/workflows/chat/steps/tools.ts index 564be9d..ad39dc8 100644 --- a/flight-booking-app/workflows/chat/steps/tools.ts +++ b/flight-booking-app/workflows/chat/steps/tools.ts @@ -121,6 +121,14 @@ async function runInSandboxStep( await emitToolEnd('runCode'); return { error: true, phase: 'sandbox-connect', message: msg, sandboxId }; } + // Check if the sandbox is still alive + if (sandbox.status !== 'running') { + const msg = `Sandbox is ${sandbox.status}. The session has expired and can no longer execute commands. Please start a new conversation to get a fresh sandbox.`; + await emitSandboxEvent('error', { phase: 'expired', message: msg, sandboxId, status: sandbox.status }); + await emitToolEnd('runCode'); + return { error: true, phase: 'sandbox-expired', message: msg, sandboxId }; + } + await emitSandboxEvent('ready', { sandboxId, status: sandbox.status }); // Write files if provided From 18089cd50af43b705f939975648717910dabcade Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Wed, 1 Apr 2026 15:48:25 -0700 Subject: [PATCH 07/10] name Signed-off-by: Peter Wielander --- flight-booking-app/app/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flight-booking-app/app/page.tsx b/flight-booking-app/app/page.tsx index 596ca16..ead020e 100644 --- a/flight-booking-app/app/page.tsx +++ b/flight-booking-app/app/page.tsx @@ -37,7 +37,7 @@ const SUGGESTIONS = [ ]; const FULL_EXAMPLE_PROMPT = - "Book me the cheapest flight from San Francisco to Los Angeles for July 27 2025. My name is Pranay Prakash. I like window seats. Don't ask me for approval."; + "Book me the cheapest flight from San Francisco to Los Angeles for July 27 2026. My name is Peter Wielander. I like window seats. Don't ask me for approval."; export default function ChatPage() { const textareaRef = useRef(null); From 1b866b30fdb002f50d2c7aae3e86f7613e783790 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Wed, 1 Apr 2026 16:05:40 -0700 Subject: [PATCH 08/10] url based sessions Signed-off-by: Peter Wielander --- .../hooks/use-multi-turn-chat.ts | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/flight-booking-app/hooks/use-multi-turn-chat.ts b/flight-booking-app/hooks/use-multi-turn-chat.ts index 1cbd7b7..79b57a8 100644 --- a/flight-booking-app/hooks/use-multi-turn-chat.ts +++ b/flight-booking-app/hooks/use-multi-turn-chat.ts @@ -111,13 +111,22 @@ export function useMultiTurnChat< // Track which message content we've seen from stream (to clear pending) const seenFromStreamRef = useRef>(new Set()); - // Initialize from localStorage on mount + // Initialize from URL query param or localStorage on mount useEffect(() => { if (typeof window !== 'undefined') { - const storedRunId = localStorage.getItem(STORAGE_KEY); + const params = new URLSearchParams(window.location.search); + const urlRunId = params.get('run'); + const storedRunId = urlRunId || localStorage.getItem(STORAGE_KEY); if (storedRunId) { setRunId(storedRunId); setShouldResume(true); + localStorage.setItem(STORAGE_KEY, storedRunId); + // Ensure URL reflects the run ID + if (!urlRunId) { + const url = new URL(window.location.href); + url.searchParams.set('run', storedRunId); + window.history.replaceState({}, '', url.toString()); + } } } }, []); @@ -133,6 +142,10 @@ export function useMultiTurnChat< if (workflowRunId) { setRunId(workflowRunId); localStorage.setItem(STORAGE_KEY, workflowRunId); + // Push run ID into URL so the link is shareable/resumable + const url = new URL(window.location.href); + url.searchParams.set('run', workflowRunId); + window.history.replaceState({}, '', url.toString()); } }, onChatEnd: () => { @@ -142,6 +155,10 @@ export function useMultiTurnChat< sentMessagesRef.current.clear(); seenFromStreamRef.current.clear(); setPendingMessage(null); + // Clear run ID from URL + const url = new URL(window.location.href); + url.searchParams.delete('run'); + window.history.replaceState({}, '', url.toString()); }, // Configure reconnection to use the stored workflow run ID prepareReconnectToStreamRequest: ({ api, ...rest }) => { @@ -355,6 +372,10 @@ export function useMultiTurnChat< setPendingMessage(null); setMessages([]); stop(); + // Clear run ID from URL + const url = new URL(window.location.href); + url.searchParams.delete('run'); + window.history.replaceState({}, '', url.toString()); }, [runId, setMessages, stop]); return { From f8ab1dd3a5996e88a4bf4a19481aa36c981a97ed Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Wed, 1 Apr 2026 16:51:32 -0700 Subject: [PATCH 09/10] webhook Signed-off-by: Peter Wielander --- .../app/api/hooks/webhook/[token]/route.ts | 43 +++++++ flight-booking-app/app/page.tsx | 16 ++- .../components/webhook-waiting.tsx | 117 ++++++++++++++++++ .../workflows/chat/hooks/webhook.ts | 9 ++ .../workflows/chat/steps/tools.ts | 33 ++++- 5 files changed, 216 insertions(+), 2 deletions(-) create mode 100644 flight-booking-app/app/api/hooks/webhook/[token]/route.ts create mode 100644 flight-booking-app/components/webhook-waiting.tsx create mode 100644 flight-booking-app/workflows/chat/hooks/webhook.ts diff --git a/flight-booking-app/app/api/hooks/webhook/[token]/route.ts b/flight-booking-app/app/api/hooks/webhook/[token]/route.ts new file mode 100644 index 0000000..eaa3ca6 --- /dev/null +++ b/flight-booking-app/app/api/hooks/webhook/[token]/route.ts @@ -0,0 +1,43 @@ +import { webhookHook } from '@/workflows/chat/hooks/webhook'; + +export async function POST( + request: Request, + { params }: { params: Promise<{ token: string }> } +) { + const { token } = await params; + + let body: any; + const contentType = request.headers.get('content-type') || ''; + try { + if (contentType.includes('application/json')) { + body = await request.json(); + } else { + body = await request.text(); + } + } catch { + body = null; + } + + await webhookHook.resume(token, { + method: request.method, + body, + }); + + return Response.json({ received: true }); +} + +export async function GET( + request: Request, + { params }: { params: Promise<{ token: string }> } +) { + const { token } = await params; + const url = new URL(request.url); + const body = Object.fromEntries(url.searchParams.entries()); + + await webhookHook.resume(token, { + method: 'GET', + body: Object.keys(body).length > 0 ? body : null, + }); + + return Response.json({ received: true }); +} diff --git a/flight-booking-app/app/page.tsx b/flight-booking-app/app/page.tsx index ead020e..de2e5bb 100644 --- a/flight-booking-app/app/page.tsx +++ b/flight-booking-app/app/page.tsx @@ -18,6 +18,7 @@ import { ToolOutput, } from "@/components/ai-elements/tool"; import { BookingApproval } from "@/components/booking-approval"; +import { WebhookWaiting } from "@/components/webhook-waiting"; import { SandboxWidget } from "@/components/sandbox-widget"; import { useMultiTurnChat } from "@/hooks/use-multi-turn-chat"; import type { MyMessageMetadata } from "@/schemas/chat"; @@ -254,6 +255,18 @@ export default function ChatPage() { ); } + // Render webhook waiting + if (part.type === "tool-waitForWebhook") { + return ( + + ); + } + return null; })} @@ -269,7 +282,8 @@ export default function ChatPage() { ); const hasApprovalActive = message.parts.some( (part) => - part.type === "tool-bookingApproval" && + (part.type === "tool-bookingApproval" || + part.type === "tool-waitForWebhook") && "state" in part && part.state !== "output-available" ); diff --git a/flight-booking-app/components/webhook-waiting.tsx b/flight-booking-app/components/webhook-waiting.tsx new file mode 100644 index 0000000..8a28169 --- /dev/null +++ b/flight-booking-app/components/webhook-waiting.tsx @@ -0,0 +1,117 @@ +"use client"; + +import { useState } from "react"; +import { CheckCircleIcon, CopyIcon, WebhookIcon } from "lucide-react"; + +interface WebhookWaitingProps { + toolCallId: string; + input?: { + description: string; + }; + output?: string; +} + +export function WebhookWaiting({ + toolCallId, + input, + output, +}: WebhookWaitingProps) { + const [copied, setCopied] = useState(false); + + const webhookUrl = + typeof window !== "undefined" + ? `${window.location.origin}/api/hooks/webhook/${encodeURIComponent(toolCallId)}` + : `/api/hooks/webhook/${encodeURIComponent(toolCallId)}`; + + const curlExample = `curl -X POST ${webhookUrl} -H "Content-Type: application/json" -d '{"status": "done"}'`; + + const handleCopy = async (text: string) => { + await navigator.clipboard.writeText(text); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }; + + // Webhook has been called — show the received payload + if (output) { + let parsed: any; + try { + parsed = typeof output === "string" ? JSON.parse(output) : output; + } catch { + parsed = output; + } + + return ( +
+
+ + Webhook received +
+ {input?.description && ( +

{input.description}

+ )} + {parsed?.body && ( +
+            {typeof parsed.body === "string"
+              ? parsed.body
+              : JSON.stringify(parsed.body, null, 2)}
+          
+ )} +
+ ); + } + + // Waiting for webhook call + return ( +
+
+ + Waiting for webhook +
+ + {input?.description && ( +

{input.description}

+ )} + +
+
+ Webhook URL +
+
+ + {webhookUrl} + + +
+
+ +
+
+ Example +
+
 handleCopy(curlExample)}
+          title="Click to copy"
+        >
+          {curlExample}
+        
+
+ +
+ + Waiting for external call... +
+
+ ); +} diff --git a/flight-booking-app/workflows/chat/hooks/webhook.ts b/flight-booking-app/workflows/chat/hooks/webhook.ts new file mode 100644 index 0000000..49c564b --- /dev/null +++ b/flight-booking-app/workflows/chat/hooks/webhook.ts @@ -0,0 +1,9 @@ +import { defineHook } from 'workflow'; +import { z } from 'zod'; + +export const webhookHook = defineHook({ + schema: z.object({ + method: z.string(), + body: z.any(), + }), +}); diff --git a/flight-booking-app/workflows/chat/steps/tools.ts b/flight-booking-app/workflows/chat/steps/tools.ts index ad39dc8..9615912 100644 --- a/flight-booking-app/workflows/chat/steps/tools.ts +++ b/flight-booking-app/workflows/chat/steps/tools.ts @@ -1,6 +1,7 @@ import { FatalError, sleep, getWritable } from 'workflow'; import { z } from 'zod'; import { bookingApprovalHook } from '../hooks/approval'; +import { webhookHook } from '../hooks/webhook'; import type { UIMessageChunk } from 'ai'; import { Sandbox } from '@vercel/sandbox'; @@ -499,6 +500,23 @@ async function executeSleep({ durationMs }: { durationMs: number }) { return { message: `Slept for ${durationMs}ms` }; } +async function executeWaitForWebhook( + { description }: { description: string }, + { toolCallId }: { toolCallId: string } +) { + // No "use step" — hooks are workflow-level primitives + // Use the toolCallId as the hook token so the UI can construct the webhook URL + const hook = webhookHook.create({ token: toolCallId }); + // Workflow pauses here until the webhook endpoint is called + const { method, body } = await hook; + return { + description, + webhookReceived: true, + method, + body, + }; +} + async function executeBookingApproval( { flightNumber, @@ -585,6 +603,18 @@ export const flightBookingTools = { }), execute: executeBookingApproval, }, + waitForWebhook: { + description: + 'Create a webhook URL and pause until it is called by an external system. ' + + 'Only use this tool when the user explicitly asks for a webhook. ' + + 'The webhook URL will be displayed to the user so they can share it with external services.', + inputSchema: z.object({ + description: z + .string() + .describe('What this webhook is waiting for (e.g., "payment confirmation", "deployment complete")'), + }), + execute: executeWaitForWebhook, + }, }; /** @@ -655,4 +685,5 @@ export const FLIGHT_ASSISTANT_PROMPT = `You are a helpful flight booking assista Be friendly and professional. When searching for flights, always ask for travel dates if not provided. When booking flights, confirm all details before proceeding. -When asked to write or run code, use the runCode tool. The sandbox persists between calls, so you can install packages first and then use them.`; +When asked to write or run code, use the runCode tool. The sandbox persists between calls, so you can install packages first and then use them. +When the user explicitly asks for a webhook, use the waitForWebhook tool. A URL will be generated and shown to the user. The workflow will pause until the webhook is called, then you'll receive the payload.`; From d5f8ac9a5a971cec6e5e65d87f4268f256beaec4 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Wed, 1 Apr 2026 16:51:40 -0700 Subject: [PATCH 10/10] tarball Signed-off-by: Peter Wielander --- flight-booking-app/pnpm-lock.yaml | 2 +- flight-booking-app/vercel-sandbox-1.9.0.tgz | Bin 0 -> 145741 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 flight-booking-app/vercel-sandbox-1.9.0.tgz diff --git a/flight-booking-app/pnpm-lock.yaml b/flight-booking-app/pnpm-lock.yaml index c8392ea..3393602 100644 --- a/flight-booking-app/pnpm-lock.yaml +++ b/flight-booking-app/pnpm-lock.yaml @@ -2311,7 +2311,7 @@ packages: engines: {node: '>=20.0.0'} '@vercel/sandbox@file:vercel-sandbox-1.9.0.tgz': - resolution: {integrity: sha512-E7ejbixjyfnFY3gvssCDnvpmin3AV49lfq6sbSZX5hMghpha32JXEf5hGLieMlp9DCSnJkxl+6wqjoFpEvaZng==, tarball: file:vercel-sandbox-1.9.0.tgz} + resolution: {integrity: sha512-/VtPq+1rUoxL7i5D5AQb6G3VvOYOgeKAAPDzzB0Pj0PFmKF22g8Fux77NYlMFvBq0iFOenePUxc9vDde0ykTBQ==, tarball: file:vercel-sandbox-1.9.0.tgz} version: 1.9.0 '@workflow/ai@4.1.0-beta.59': diff --git a/flight-booking-app/vercel-sandbox-1.9.0.tgz b/flight-booking-app/vercel-sandbox-1.9.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..9502dbacccf3be81dcccb4fd8cc7a8f93e1563a2 GIT binary patch literal 145741 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

#R3VrX?Ui*1aj; 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�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%0AI|8>R_*zXxjeq<^0CvQcW1L~5ijhSg7JSX? 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