residoo 0.8.2 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "residoo",
3
- "version": "0.8.2",
3
+ "version": "0.8.3",
4
4
  "description": "Find secrets leaking through your AI coding agent's session history. Zero network calls in the scan path, zero dependencies.",
5
5
  "license": "MIT",
6
6
  "author": "CloudRoam (https://cloudroam.io)",
package/src/patterns.js CHANGED
@@ -272,6 +272,31 @@ const PATTERNS = [
272
272
  // than a doc-confirmed exact count.
273
273
  { id: "posthog_key", label: "PostHog personal API key", confidence: "high",
274
274
  re: /\bphx_[A-Za-z0-9]{40,}\b/g },
275
+ // LangSmith personal access token (lsv2_pt_) / service key (lsv2_sk_).
276
+ // Found missing by cross-checking agentsweep's own open-issue tracker.
277
+ // The first segment (32 hex, UUID-shaped) is consistent across every
278
+ // real example checked (docs.langchain.com and independent citations of
279
+ // it); the trailing segment's exact length is NOT confirmed by any
280
+ // primary source found (two secondary citations of the same example
281
+ // key disagreed by one character), so it's a generous bound, not a
282
+ // doc-confirmed exact count -- same honesty standard as posthog_key
283
+ // above. "lsv2_" itself is distinctive enough that this bound doesn't
284
+ // meaningfully raise false-positive risk either way.
285
+ { id: "langsmith_key", label: "LangSmith API key", confidence: "high",
286
+ re: /\blsv2_(?:pt|sk)_[a-f0-9]{32}_[a-f0-9]{6,16}\b/g },
287
+ // Resend API key (re_). Found missing the same way. No primary source
288
+ // publishes an exact length spec; the one real example seen (Resend's
289
+ // own docs) is an 8-char id segment + a 24-char secret segment, both
290
+ // mixed-case alphanumeric, joined by one underscore. Bounded generously
291
+ // around that shape rather than pinned to it exactly. The two-segment,
292
+ // underscore-joined, both-high-entropy structure is deliberately what
293
+ // makes this safe as a DEFAULT (non-noisy) rule despite the short,
294
+ // otherwise-generic "re_" prefix: tested against realistic re_-prefixed
295
+ // code identifiers (re_try, re_send, re_connect, re_validate...) and
296
+ // none match, since none of them have a second underscore-delimited
297
+ // random-looking segment.
298
+ { id: "resend_key", label: "Resend API key", confidence: "high",
299
+ re: /\bre_[A-Za-z0-9]{6,12}_[A-Za-z0-9]{18,32}\b/g },
275
300
  ];
276
301
 
277
302
  /**
package/src/rotation.js CHANGED
@@ -772,6 +772,32 @@ const ROTATION_GUIDANCE = {
772
772
  ],
773
773
  revokeNote: "Deletion is immediate; the key stops authenticating on the next request.",
774
774
  },
775
+ // Fetched docs.langchain.com/langsmith/create-account-api-key
776
+ // (2026-09-04): both personal access tokens and service keys are
777
+ // created and managed from the workspace's own API Keys settings page.
778
+ langsmith_key: {
779
+ label: "LangSmith API key",
780
+ consolePath: "smith.langchain.com > Settings > API Keys",
781
+ steps: [
782
+ "Open API Keys under the workspace's settings",
783
+ "Delete the leaked key (personal access token or service key)",
784
+ "Create a replacement and update whatever used the old one",
785
+ ],
786
+ revokeNote: "Deletion is immediate; the key stops authenticating on the next request.",
787
+ },
788
+ // Fetched resend.com/docs/dashboard/api-keys/introduction (2026-09-04):
789
+ // keys are removed from the dashboard's API Keys list (More options ->
790
+ // Remove API key), or programmatically via the DELETE /api-keys endpoint.
791
+ resend_key: {
792
+ label: "Resend API key",
793
+ consolePath: "resend.com/api-keys",
794
+ steps: [
795
+ "Open the API Keys list in the Resend dashboard",
796
+ "Click More options on the leaked key, then Remove API key",
797
+ "Create a replacement and update whatever used the old one",
798
+ ],
799
+ revokeNote: "Deletion is immediate; the key stops authenticating on the next request.",
800
+ },
775
801
 
776
802
  // ── NOISY_PATTERNS (only reachable via --include-noisy) ───────────────
777
803
  generic_password_assignment: {