Cloudflare Computer حالا بعد از قطعی ادامه میده و منتظر تأیید میمونه
خلاصهٔ کاملتر
پکیج @cloudflare/computer به ایجنت یه workspace میده که توش کد اجرا کنه. طبق changelog کلادفلر، از نسخهٔ v0.7.0 این کد بعد از deploy یا کرش ادامه پیدا میکنه و میتونه روی یه کار بیرونی، مثلاً تأیید یه tool call، مکث کنه.
برای قابلیت اول کافیه onInterrupt: "replay" رو روی WorkerJavaScriptBackend یا فقط روی یه run خاص بذاری. وقتی recovery شروع میشه، کد JavaScript از اول اجرا میشه، ولی برای callهایی که قبلاً تموم شدن نتیجهٔ ضبطشده رو برمیگردونه و خروجیهای قبلی رو دوباره چاپ نمیکنه. یعنی کارهای انجامشده دوباره هزینه ندارن.
یه نکتهٔ مهم: اگه نتیجهٔ یه call قبل از قطعی ضبط نشده باشه، ممکنه دوباره اجرا بشه، حتی اگه کارش واقعاً انجام شده بوده. برای عملیاتی که نباید دو بار اجرا بشن، کلادفلر تابع unsafeToRepeat() رو پیشنهاد میکنه. recovery با call بعدی به workspace.runtime شروع میشه. اگه نمیخوای منتظر ترافیک بمونی، میتونی workspace.runtime.recover() رو از یه Durable Object alarm (یعنی تایمری که خود Durable Object زمانبندی میکنه) صدا بزنی.
قابلیت دوم انتظار برای تأییده. تابعهای اپلیکیشنت رو از طریق custom moduleها در اختیار کد ایجنت میذاری و هر تابع میتونه ctx.interrupt() رو صدا بزنه تا اجرا وایسه و اپ تو تصمیم تأیید رو بفرسته. مثال خود کلادفلر یه ماژول GitHub هست که تابع postComment قبل از گذاشتن کامنت روی issue منتظر تأیید میمونه. کد ایجنت اینو مثل یه تابع معمولی صدا میزنه.
زمانی که صرف انتظار میشه جزو timeout حساب نمیشه و انتظار از deploy هم جون سالم به در میبره. اپ با workspace.runtime.pending() callهای در انتظار رو میگیره و با respond() جوابشون رو میده. وقتی همهٔ callهای pending جواب گرفتن، اجرا ادامه پیدا میکنه.
نکات کلیدی:
- این قابلیتها از نسخهٔ v0.7.0 پکیج @cloudflare/computer اومدن.
- با onInterrupt: "replay" اجرا بعد از deploy یا کرش از اول تکرار میشه ولی نتیجهٔ callهای تمومشده دوباره استفاده میشه.
- callی که نتیجهش ضبط نشده ممکنه دو بار اجرا بشه؛ برای این موارد unsafeToRepeat() هست.
- ctx.interrupt() اجرا رو تا رسیدن تصمیم تأیید متوقف میکنه و زمان انتظار جزو timeout نیست.
- callهای منتظر با workspace.runtime.pending() گرفته و با respond() جواب داده میشن.




