{"record":{"id":"bee2fa134d6e5163","repo":"chatboxai/chatbox","slug":"invalid-session-settings-entry","errorCode":null,"errorMessage":"Invalid session settings entry","messagePattern":"Invalid session settings entry","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/renderer/packages/backup/import-backup.ts","lineNumber":358,"sourceCode":"    if (manifest.data.settings) {\n      const value = stagedEntries.get(manifest.data.settings.path)?.value\n      if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error('Invalid settings entry')\n      await options.storage.setItemNow(\n        BackupStorageKey.Settings,\n        restoreSettingsResourceKeys(value as Partial<Settings>, resourceKeyMap)\n      )\n    }\n    if (manifest.data.copilots) {\n      const value = stagedEntries.get(manifest.data.copilots.path)?.value\n      if (!Array.isArray(value)) throw new Error('Invalid copilots entry')\n      await options.storage.setItemNow(\n        BackupStorageKey.MyCopilots,\n        restoreCopilotResourceKeys(value as CopilotDetail[], resourceKeyMap)\n      )\n    }\n    if (manifest.data.sessionSettings) {\n      const value = stagedEntries.get(manifest.data.sessionSettings.path)?.value\n      if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error('Invalid session settings entry')\n      const sessionSettings = value as Record<string, unknown>\n      for (const key of [BackupStorageKey.ChatSessionSettings, BackupStorageKey.PictureSessionSettings]) {\n        if (key in sessionSettings) await options.storage.setItemNow(key, sessionSettings[key])\n      }\n    }\n\n    await cleanupTemps()\n    return {\n      manifest,\n      warnings: [...manifest.warnings, ...importWarnings],\n      restoredSessionCount: manifest.sessions.length,\n      restoredResourceCount: manifest.resources.length,\n    }\n  } catch (error) {\n    if (commitStarted) await rollback()\n    await cleanupTemps()\n    throw error\n  }","sourceCodeStart":340,"sourceCodeEnd":376,"githubUrl":"https://github.com/chatboxai/chatbox/blob/81571269addb6bafb589a920b2883f1e1e084fd1/src/renderer/packages/backup/import-backup.ts#L340-L376","documentation":"Thrown when restoring session settings if the staged session-settings.json value is absent, not an object, or an array. It must be an object keyed by BackupStorageKey so its ChatSessionSettings/PictureSessionSettings members can be written. Propagates after rollback.","triggerScenarios":"manifest.data.sessionSettings is set, but stagedEntries.get(sessionSettings.path).value is null, an array, or a primitive.","commonSituations":"A corrupted or hand-edited session-settings.json; a format change; a truncated file.","solutions":["Re-export with a compatible version.","Repair session-settings.json to be a JSON object.","Remove the sessionSettings descriptor from the manifest to skip restore."],"exampleFix":"// before: non-object session-settings aborts import\nawait importBackupArchive(file, options)\n// after: validate the session-settings entry shape before importing\nconst v = parsedSessionSettings\nif (!v || typeof v !== 'object' || Array.isArray(v)) {\n  throw new Error('session-settings.json must be a JSON object')\n}","handlingStrategy":"type-guard","validationCode":"// Validate the session-settings entry is a plain object before importing.\nconst v = parsedSessionSettings\nif (!v || typeof v !== 'object' || Array.isArray(v)) {\n  throw new Error('Invalid session settings entry')\n}","typeGuard":"// Narrows an unknown value to a non-null, non-array object - the exact check at line 358.\nconst isSessionSettingsEntry = (value: unknown): value is Record<string, unknown> =>\n  Boolean(value) && typeof value === 'object' && !Array.isArray(value)","tryCatchPattern":"try {\n  await importBackupArchive(file, options)\n} catch (error) {\n  if (error instanceof Error && error.message === 'Invalid session settings entry') {\n    // Repair session-settings.json to a JSON object or drop the descriptor.\n    throw new Error('session-settings.json is malformed', { cause: error })\n  }\n  throw error\n}","preventionTips":["Keep session-settings.json as a JSON object keyed by BackupStorageKey.","Re-export with a compatible version instead of hand-editing.","Validate staged session settings with isSessionSettingsEntry before import."],"tags":["backup","import","session-settings","schema","validation"],"backgroundTag":null,"analyzedSha":"81571269addb6bafb589a920b2883f1e1e084fd1","analyzedAt":"2026-08-12T21:51:44.981Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}