範例出了些狀況,所以今天卡住了
中:深入 workflows.ts 的設計細節(Update/Signal、佇列、取消、切割歷史)
工作流骨架與狀態
chatSessionWorkflow(startArgs): 長駐實體;以 pendingQueue: QueueItem[] 暫存待處理訊息。
proxyActivities 設定 startToCloseTimeout 與 retry 策略(控制重試/backoff)。
Update/Signal 與佇列機制
sendMessageUpdate: 用 Trigger 實現 deferred 結果,僅「入列」。
confirmLedgerUpdate: 直接呼 acts.saveLedger,避免阻塞訊息佇列。
cancelSignal: 操作 CancellationScope 取消當前任務。
主循環與壓力控制
condition(() => pendingQueue.length > 0 || workflowInfo().continueAsNewSuggested) 等待新任務或建議切割。
FIFO 出列,dispatchByCapability 分流到 chatReply、weatherReply、parseLedgerProposal、queryLedgerRange。
continueAsNew:歷史過大時切割以降低歷史回放成本。
錯誤處理與使用者體驗
對可預期錯誤(如 Not a ledger、Invalid date、Unsupported range)回傳可讀訊息。
其他錯誤讓工作流失敗或交給 Activity 重試,維持決定性邊界。
可擴充路徑
增加新能力:擴充 Capability、加入新 Activity、在 dispatchByCapability 新增分支。