{"record":{"id":"1d58e3caaa854049","repo":"ComposioHQ/composio","slug":"noentry","errorCode":"NoEntry","errorMessage":"NoEntry","messagePattern":"NoEntry","errorType":"error_code","errorClass":"KeyringError","httpStatus":null,"severity":"warning","filePath":"ts/packages/cli-keyring/src/stores/linux-secret-tool.ts","lineNumber":190,"sourceCode":"        ),\n      });\n    }\n\n    const args = ['lookup', ...attributeArgs(service, user, modifiers)];\n\n    let result: SpawnResult;\n    try {\n      result = await runCommand({ command: SECRET_TOOL_BIN, args });\n    } catch (err) {\n      throw this.spawnErrorToKeyringError(err);\n    }\n\n    if (result.code === 0) {\n      const stdout = bytesToUtf8(result.stdout);\n      // `secret-tool lookup` prints the password without a trailing\n      // newline when found, and prints nothing (exit 0) when not found.\n      if (stdout.length === 0) {\n        throw new KeyringError({ kind: 'NoEntry' });\n      }\n      try {\n        return decodeSecret(stdout);\n      } catch (err) {\n        throw new KeyringError({\n          kind: 'BadDataFormat',\n          bytes: new Uint8Array(result.stdout),\n          cause: err,\n        });\n      }\n    }\n\n    // Exit 1 can mean many things — stderr is the real signal.\n    throw classifyFailure(result, 'secret-tool lookup');\n  }\n\n  async deleteCredential(service: string, user: string, modifiers: EntryModifiers): Promise<void> {\n    validateSpecifier(service, user);","sourceCodeStart":172,"sourceCodeEnd":208,"githubUrl":"https://github.com/ComposioHQ/composio/blob/64b1b85502b1beeb2379e6c9e8bf1104504fa637/ts/packages/cli-keyring/src/stores/linux-secret-tool.ts#L172-L208","documentation":"getSecret on the secret-tool store ran `secret-tool lookup` successfully but stdout was empty, meaning no matching credential exists. KeyringError kind 'NoEntry' is the canonical not-found signal.","triggerScenarios":"Looking up a (service, user) pair that was never stored, was deleted, or whose attributes don't match exactly.","commonSituations":"First-run before login/authorization, changed attribute schema between versions, or a cleared keyring.","solutions":["Handle NoEntry as 'credential missing' and trigger your login/authorization flow","Verify the exact service/user/attribute strings match what was stored","Re-create the credential"],"exampleFix":"// before\nconst secret = await store.getSecret(service, user, mods);\n// after\ntry { const secret = await store.getSecret(service, user, mods); }\ncatch (e) { if (e instanceof KeyringError && e.kind === 'NoEntry') await promptLogin(); else throw e; }","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"catch (e) { if (e instanceof KeyringError && e.kind === 'NoEntry') { await startLoginFlow(); return; } throw e; }","preventionTips":["Treat NoEntry as an expected not-found, not a crash","Store credentials immediately after first authorization"],"tags":["keyring","not-found","linux","typescript"],"backgroundTag":"credential-not-found","analyzedSha":"64b1b85502b1beeb2379e6c9e8bf1104504fa637","analyzedAt":"2026-08-28T15:39:33.623Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}