{"record":{"id":"30ee19d94a70a28d","repo":"nikivdev/code","slug":"failed-to-read-token-from-keychain","errorCode":null,"errorMessage":"failed to read token from Keychain: {}","messagePattern":"failed to read token from Keychain: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/env.rs","lineNumber":338,"sourceCode":"    let output = Command::new(\"security\")\n        .args([\"find-generic-password\", \"-a\", \"flow\", \"-s\", &service, \"-w\"])\n        .output()\n        .context(\"failed to read token from Keychain\")?;\n\n    if output.status.success() {\n        let token = String::from_utf8_lossy(&output.stdout).trim().to_string();\n        if token.is_empty() {\n            return Ok(None);\n        }\n        return Ok(Some(token));\n    }\n\n    let stderr = String::from_utf8_lossy(&output.stderr);\n    if stderr.contains(\"could not be found\") || stderr.contains(\"SecKeychainSearchCopyNext\") {\n        return Ok(None);\n    }\n\n    bail!(\"failed to read token from Keychain: {}\", stderr.trim());\n}\n\nfn get_keychain_ai_token(api_url: &str) -> Result<Option<String>> {\n    if !cfg!(target_os = \"macos\") {\n        return Ok(None);\n    }\n\n    let service = keychain_service_ai(api_url);\n    let output = Command::new(\"security\")\n        .args([\"find-generic-password\", \"-a\", \"flow\", \"-s\", &service, \"-w\"])\n        .output()\n        .context(\"failed to read AI token from Keychain\")?;\n\n    if output.status.success() {\n        let token = String::from_utf8_lossy(&output.stdout).trim().to_string();\n        if token.is_empty() {\n            return Ok(None);\n        }","sourceCodeStart":320,"sourceCodeEnd":356,"githubUrl":"https://github.com/nikivdev/code/blob/a747e741ae92c09071d0ae946ab48488adcff1ce/src/env.rs#L320-L356","documentation":"Error \"failed to read token from Keychain: {}\" thrown in nikivdev/code.","triggerScenarios":"Thrown at src/env.rs:338 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"a747e741ae92c09071d0ae946ab48488adcff1ce","analyzedAt":"2026-09-01T22:43:55.719Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}