feat(遊戲化): 新增大廳、附身、時間流、後日談進度等遊戲化系統功能
新增角色大廳(lobby)邀約與通話、附身(possession)、時鐘(clock)抽象、 時間流與睡眠負債、後日談進度、行為選擇與旁觀反應等模組,並補齊對應冒煙 測試(R~V)與單元測試;同步調整 web/mobile 對應頁面與元件。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+10
-3
@@ -186,9 +186,16 @@ async function verifyClaudeProviderWiring() {
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ userId: USER_ID, text: "今天發生了很多事情想跟你分享" }),
|
||||
});
|
||||
// 沒有金鑰應該在呼叫 generate() 時就快速、確定性地失敗(不對 CLIProxy 發任何請求)。
|
||||
if (res.status < 500) {
|
||||
throw new Error(`缺少 CLAUDE_API_KEY 時應該呼叫失敗,實際回傳 ${res.status}`);
|
||||
// T30(後補的全域靜默暫停機制)讓 generateWithResilience() 一律吞掉 provider 拋出的例外並回傳
|
||||
// null,呼叫端據此比照既有 NO_REPLY 語意回傳空字串——這是刻意的設計(暫停中/重試全部失敗時
|
||||
// 不對使用者顯示任何錯誤提示),所以缺少 CLAUDE_API_KEY 不會再讓這個端點回 5xx,而是回 2xx 但
|
||||
// text 為空字串;本項驗證的重點改為「金鑰未設定時,ClaudeProvider 確實沒有假造出一句正常回覆」。
|
||||
if (!res.ok) {
|
||||
throw new Error(`缺少 CLAUDE_API_KEY 時端點應仍正常回應(由 T30 靜默略過),實際回傳 ${res.status}`);
|
||||
}
|
||||
const body = await res.json();
|
||||
if (body.text !== "") {
|
||||
throw new Error(`缺少 CLAUDE_API_KEY 時應該完全沒有真的生成回覆,實際回傳 text=${JSON.stringify(body.text)}`);
|
||||
}
|
||||
} finally {
|
||||
child.kill("SIGKILL");
|
||||
|
||||
Reference in New Issue
Block a user