{"record":{"id":"2c88026bcfa76912","repo":"BigPizzaV3/CodexPlusPlus","slug":"app-server-thread-id","errorCode":null,"errorMessage":"新建会话失败：app-server 未返回 thread id","messagePattern":"新建会话失败：app-server 未返回 thread id","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"apps/codex-plus-mobile-relay/src/main.rs","lineNumber":1257,"sourceCode":"  return await rpc(\"turn/start\", { threadId, clientUserMessageId: `codex-plus-mobile-${Date.now()}`, input: [{ type: \"text\", text }] });\n}\n$(\"connect\").onclick = connect;\n$(\"filter\").oninput = (event) => { state.filter = event.target.value; renderSessions(); };\n$(\"back\").onclick = () => { detailPane.classList.add(\"hidden\"); sessionsPane.classList.remove(\"hidden\"); };\n$(\"composer\").onsubmit = async (event) => {\n  event.preventDefault();\n  const input = $(\"messageInput\");\n  const text = input.value.trim();\n  if (!text) return;\n  input.value = \"\";\n  let threadId = state.selectedId;\n  let isNew = false;\n  try {\n    if (!threadId) {\n      const result = await rpc(\"thread/start\", state.selectedCwd ? { cwd: state.selectedCwd } : {});\n      const thread = result?.thread || result?.data || result;\n      threadId = thread?.id || result?.threadId || result?.id;\n      if (!threadId) throw new Error(\"新建会话失败：app-server 未返回 thread id\");\n      state.selectedId = threadId;\n      isNew = true;\n    }\n    rememberPendingMessage(threadId, text);\n    appendMessageNode(\"用户\", text, true);\n    setStatus(\"正在思考...\");\n    pollThread(threadId);\n    sendMessage(threadId, text, isNew)\n      .then(() => setStatus(\"已发送，正在同步回复...\"))\n      .catch((error) => {\n        forgetPendingMessage(threadId, text);\n        setStatus(error.message, true);\n      });\n  } catch (error) {\n    forgetPendingMessage(threadId, text);\n    setStatus(error.message, true);\n  }\n};","sourceCodeStart":1239,"sourceCodeEnd":1275,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/apps/codex-plus-mobile-relay/src/main.rs#L1239-L1275","documentation":"Raised in mobile_relay_page when a new chat session is created but the app-server response contains no thread id, so the client cannot track the new session. Indicates an unexpected or protocol-mismatched app-server reply.","triggerScenarios":"Thrown at apps/codex-plus-mobile-relay/src/main.rs:1257 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry creating the session","Update codex/relay so client and app-server protocols match","Inspect the app-server response for the missing id field"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"f2074595a281bc057525c748175c8eb9805b0673","analyzedAt":"2026-08-23T12:52:24.489Z","contentChangedAt":"2026-08-23T12:52:24.489Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}