arol-ai 0.1.6 → 0.1.8

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/dist/data.js CHANGED
@@ -107,6 +107,9 @@ function coerceDeprecation(raw) {
107
107
  return null;
108
108
  if ((match === "sdk" || match === "version") && sdk.length === 0)
109
109
  return null;
110
+ // INVARIANT: every array below is always defined here — detect.{sdk,patterns,
111
+ // models} default to [] and applies_to to ["*"] (above). scanner.ts depends on
112
+ // this and also guards with `?? []` as defense in depth. Don't drop the defaults.
110
113
  return {
111
114
  id: r.id,
112
115
  vendor: r.vendor,
package/dist/scanner.js CHANGED
@@ -105,7 +105,8 @@ function compileDeprecations(deprecations) {
105
105
  return deprecations.map((deprecation) => {
106
106
  const regexes = [];
107
107
  // Raw patterns — code identifiers, endpoints, params.
108
- for (const pattern of deprecation.detect.patterns) {
108
+ // `?? []` guards against entries not produced by the loader (e.g. tests).
109
+ for (const pattern of deprecation.detect.patterns ?? []) {
109
110
  try {
110
111
  // Global so we can iterate every match and derive line numbers.
111
112
  regexes.push(new RegExp(pattern, "g"));
@@ -115,7 +116,7 @@ function compileDeprecations(deprecations) {
115
116
  }
116
117
  }
117
118
  // Model names — only matched inside string literals (quote-anchored).
118
- for (const family of deprecation.detect.models) {
119
+ for (const family of deprecation.detect.models ?? []) {
119
120
  try {
120
121
  regexes.push(new RegExp(modelRegexSource(family), "g"));
121
122
  }
@@ -123,7 +124,9 @@ function compileDeprecations(deprecations) {
123
124
  // Defensive: a pathological family name must not crash the scan.
124
125
  }
125
126
  }
126
- const appliesTo = new Set((deprecation.applies_to.length > 0 ? deprecation.applies_to : ["*"]).map((e) => e.toLowerCase()));
127
+ // Missing/empty applies_to means "applies everywhere" (["*"]), preserved here.
128
+ const declaredExts = deprecation.applies_to ?? [];
129
+ const appliesTo = new Set((declaredExts.length > 0 ? declaredExts : ["*"]).map((e) => e.toLowerCase()));
127
130
  return { deprecation, regexes, appliesTo };
128
131
  });
129
132
  }
@@ -292,11 +295,12 @@ function scanContent(content, relPath, compiled, sink) {
292
295
  function matchManifests(deprecations, refs) {
293
296
  const byId = new Map();
294
297
  for (const deprecation of deprecations) {
295
- if (deprecation.detect.sdk.length === 0)
298
+ const sdks = deprecation.detect.sdk ?? [];
299
+ if (sdks.length === 0)
296
300
  continue;
297
301
  const matches = [];
298
302
  const seen = new Set();
299
- for (const sdk of deprecation.detect.sdk) {
303
+ for (const sdk of sdks) {
300
304
  for (const ref of refs) {
301
305
  if (!(0, manifests_1.nameMatches)(sdk, ref.name))
302
306
  continue;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arol-ai",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "Scan a local repo for upcoming third-party API/SDK deprecations. Fully local — no network, no telemetry, your code never leaves the machine.",
5
5
  "keywords": [
6
6
  "deprecation",
@@ -34,6 +34,7 @@
34
34
  "prepublishOnly": "npm run build"
35
35
  },
36
36
  "dependencies": {
37
+ "arol-ai": "^0.1.7",
37
38
  "commander": "^12.1.0",
38
39
  "fast-glob": "^3.3.2"
39
40
  },
@@ -10,8 +10,8 @@
10
10
  "detect": {
11
11
  "sdk": ["openai"],
12
12
  "patterns": [
13
- "beta\\.assistants",
14
- "beta\\.threads",
13
+ "\\bbeta\\.assistants\\b",
14
+ "\\bbeta\\.threads\\b",
15
15
  "/v1/assistants",
16
16
  "/v1/threads"
17
17
  ]
@@ -180,13 +180,13 @@
180
180
  "detect": {
181
181
  "sdk": ["@stripe/stripe-js", "stripe"],
182
182
  "patterns": [
183
- "handleCardPayment",
184
- "confirmPaymentIntent",
185
- "handleFpxPayment",
186
- "handleCardSetup",
187
- "confirmSetupIntent",
188
- "createSource",
189
- "retrieveSource"
183
+ "\\bhandleCardPayment\\b",
184
+ "\\bconfirmPaymentIntent\\b",
185
+ "\\bhandleFpxPayment\\b",
186
+ "\\bhandleCardSetup\\b",
187
+ "\\bconfirmSetupIntent\\b",
188
+ "\\bstripe\\.createSource\\b",
189
+ "\\bstripe\\.retrieveSource\\b"
190
190
  ]
191
191
  },
192
192
  "migration_url": "https://docs.stripe.com/changelog/dahlia/2026-03-25/remove-legacy-stripejs-methods",
@@ -203,7 +203,7 @@
203
203
  "sunset_date": "2024-05-15",
204
204
  "detect": {
205
205
  "sdk": ["stripe"],
206
- "patterns": ["\\.sources\\.create", "charges\\.create", "Charge\\.create"]
206
+ "patterns": ["\\bstripe\\.sources\\.create", "\\bstripe\\.charges\\.create", "\\bstripe\\.Charge\\.create"]
207
207
  },
208
208
  "migration_url": "https://docs.stripe.com/payments/older-apis",
209
209
  "summary": "The Sources API is deprecated (local payment methods stopped being accepted May 15, 2024) and the Charges API is legacy. Migrate to the PaymentMethods + PaymentIntents APIs.",
@@ -219,7 +219,7 @@
219
219
  "sunset_date": "2025-12-31",
220
220
  "detect": {
221
221
  "sdk": ["twilio"],
222
- "patterns": ["notify\\.v1", "\\.notify\\.services", "client\\.notify"]
222
+ "patterns": ["\\bnotify\\.v1\\b", "\\.notify\\.services\\b"]
223
223
  },
224
224
  "migration_url": "https://support.twilio.com/hc/en-us/articles/9198083260571-Transitioning-off-Notify",
225
225
  "summary": "Twilio Notify reached end of life December 31, 2025; Notify API requests now fail. No 1:1 replacement — rebuild with Programmable Messaging / Conversations.",
@@ -235,12 +235,28 @@
235
235
  "sunset_date": "2022-07-25",
236
236
  "detect": {
237
237
  "sdk": ["twilio", "twilio-chat"],
238
- "patterns": ["chat\\.v2", "IpMessaging", "twilio-chat"]
238
+ "patterns": ["\\bchat\\.v2\\b", "\\bIpMessaging\\b"]
239
239
  },
240
240
  "migration_url": "https://www.twilio.com/docs/conversations/migrating-chat-conversations",
241
241
  "summary": "The standalone Programmable Chat API was sunset July 25, 2022 (Programmable Chat in Flex ended June 1, 2026). Migrate to the Conversations API.",
242
242
  "source": "https://www.twilio.com/en-us/changelog/programmable-chat-end-of-life-notice"
243
243
  },
244
+ {
245
+ "id": "twilio-chat-package-eol",
246
+ "vendor": "Twilio",
247
+ "title": "twilio-chat SDK package (Programmable Chat)",
248
+ "severity": "high",
249
+ "match": "sdk",
250
+ "applies_to": ["js", "ts", "jsx", "tsx", "mjs"],
251
+ "sunset_date": "2022-07-25",
252
+ "detect": {
253
+ "sdk": ["twilio-chat"],
254
+ "patterns": []
255
+ },
256
+ "migration_url": "https://www.twilio.com/docs/conversations/migrating-chat-conversations",
257
+ "summary": "The twilio-chat npm package is the client SDK for the retired Programmable Chat API (sunset July 25, 2022). Remove the dependency and migrate to @twilio/conversations.",
258
+ "source": "https://www.twilio.com/en-us/changelog/programmable-chat-end-of-life-notice"
259
+ },
244
260
  {
245
261
  "id": "aws-sdk-js-v2-eol",
246
262
  "vendor": "AWS",
@@ -284,10 +300,10 @@
284
300
  "detect": {
285
301
  "sdk": ["openai"],
286
302
  "patterns": [
287
- "openai\\.ChatCompletion",
288
- "openai\\.Completion\\.create",
289
- "openai\\.Embedding\\.create",
290
- "openai\\.Moderation\\.create"
303
+ "\\bopenai\\.ChatCompletion\\b",
304
+ "\\bopenai\\.Completion\\.create\\b",
305
+ "\\bopenai\\.Embedding\\.create\\b",
306
+ "\\bopenai\\.Moderation\\.create\\b"
291
307
  ]
292
308
  },
293
309
  "migration_url": "https://github.com/openai/openai-python/discussions/742",
@@ -307,9 +323,9 @@
307
323
  "patterns": [
308
324
  "from ['\"]ai/react['\"]",
309
325
  "from ['\"]ai/openai['\"]",
310
- "experimental_streamText",
311
- "experimental_generateText",
312
- "StreamingTextResponse"
326
+ "\\bexperimental_streamText\\b",
327
+ "\\bexperimental_generateText\\b",
328
+ "\\bStreamingTextResponse\\b"
313
329
  ]
314
330
  },
315
331
  "migration_url": "https://ai-sdk.dev/docs/migration-guides/migration-guide-5-0",
@@ -330,8 +346,8 @@
330
346
  "from langchain\\.llms import",
331
347
  "from langchain\\.chat_models import",
332
348
  "from langchain\\.embeddings import",
333
- "initialize_agent",
334
- "LLMChain"
349
+ "\\binitialize_agent\\b",
350
+ "\\bLLMChain\\b"
335
351
  ]
336
352
  },
337
353
  "migration_url": "https://python.langchain.com/docs/versions/v0_2/",
@@ -349,10 +365,90 @@
349
365
  "sunset_date": null,
350
366
  "detect": {
351
367
  "sdk": ["resend"],
352
- "patterns": ["\\.audiences\\.", "\\.Audiences\\."]
368
+ "patterns": ["\\bresend\\.audiences\\.", "\\bresend\\.Audiences\\."]
353
369
  },
354
370
  "migration_url": "https://resend.com/docs/dashboard/segments/migrating-from-audiences-to-segments",
355
371
  "summary": "Resend's Audiences API is deprecated in favor of Segments. The endpoints still work but will be removed in the future (no date announced). Migrate the audiences.* calls to the Segments API.",
356
372
  "source": "https://resend.com/docs/api-reference/audiences/create-audience"
373
+ },
374
+ {
375
+ "id": "clerk-redirect-to-user-profile-component",
376
+ "vendor": "Clerk",
377
+ "title": "<RedirectToUserProfile /> control component deprecated",
378
+ "severity": "low",
379
+ "match": "pattern",
380
+ "applies_to": ["jsx", "tsx", "js", "ts"],
381
+ "sunset_date": null,
382
+ "status": "deprecated",
383
+ "detect": {
384
+ "sdk": [
385
+ "@clerk/nextjs",
386
+ "@clerk/clerk-react",
387
+ "@clerk/nuxt",
388
+ "@clerk/vue"
389
+ ],
390
+ "patterns": ["\\bRedirectToUserProfile\\b"],
391
+ "models": []
392
+ },
393
+ "migration_url": "https://clerk.com/docs/reference/objects/clerk#redirect-to-user-profile",
394
+ "summary": "Clerk's <RedirectToUserProfile /> control component is deprecated in favor of the redirectToUserProfile() method on the Clerk object. No removal date announced.",
395
+ "source": "https://clerk.com/docs/nextjs/reference/components/control/redirect-to-user-profile"
396
+ },
397
+ {
398
+ "id": "openai-2026-07-23-shutdown",
399
+ "vendor": "OpenAI",
400
+ "title": "OpenAI models shut down July 23, 2026 (audio/search/realtime previews, deep research)",
401
+ "severity": "high",
402
+ "match": "pattern",
403
+ "applies_to": ["*"],
404
+ "sunset_date": "2026-07-23",
405
+ "detect": {
406
+ "sdk": ["openai"],
407
+ "patterns": [],
408
+ "models": [
409
+ "computer-use-preview-2025-03-11",
410
+ "gpt-4o-audio-preview-2024-12-17",
411
+ "gpt-4o-mini-audio-preview-2024-12-17",
412
+ "gpt-4o-mini-realtime-preview-2024-12-17",
413
+ "gpt-4o-mini-search-preview-2025-03-11",
414
+ "gpt-4o-mini-tts-2025-03-20",
415
+ "gpt-4o-search-preview-2025-03-11",
416
+ "gpt-audio-mini-2025-10-06",
417
+ "gpt-realtime-mini-2025-10-06",
418
+ "o3-deep-research-2025-06-26",
419
+ "o4-mini-deep-research-2025-06-26"
420
+ ]
421
+ },
422
+ "migration_url": "https://platform.openai.com/docs/deprecations",
423
+ "summary": "These OpenAI model snapshots (audio/search/realtime previews, computer-use preview, and the deep research models) shut down in the API on July 23, 2026; pinned calls to these IDs will fail. Migrate to current flagship models.",
424
+ "source": "https://developers.openai.com/api/docs/deprecations"
425
+ },
426
+ {
427
+ "id": "openai-2026-10-23-shutdown",
428
+ "vendor": "OpenAI",
429
+ "title": "OpenAI models shut down October 23, 2026 (legacy GPT-3.5/4/4o, o1/o3-mini/o4-mini, gpt-image-1)",
430
+ "severity": "high",
431
+ "match": "pattern",
432
+ "applies_to": ["*"],
433
+ "sunset_date": "2026-10-23",
434
+ "detect": {
435
+ "sdk": ["openai"],
436
+ "patterns": [],
437
+ "models": [
438
+ "gpt-3.5-turbo-0125",
439
+ "gpt-4-0613",
440
+ "gpt-4-turbo",
441
+ "gpt-4.1-nano",
442
+ "gpt-4o-2024-05-13",
443
+ "gpt-image-1",
444
+ "o1-2024-12-17",
445
+ "o1-pro-2025-03-19",
446
+ "o3-mini-2025-01-31",
447
+ "o4-mini-2025-04-16"
448
+ ]
449
+ },
450
+ "migration_url": "https://platform.openai.com/docs/deprecations",
451
+ "summary": "These OpenAI models shut down in the API on October 23, 2026: legacy GPT-3.5/GPT-4/GPT-4-turbo and the original gpt-4o-2024-05-13 snapshot, the o1 / o1-pro / o3-mini / o4-mini reasoning snapshots, gpt-4.1-nano, and gpt-image-1. Dated snapshots are matched precisely so the still-current bare aliases (e.g. gpt-4o) are not flagged. Migrate to current flagship models.",
452
+ "source": "https://developers.openai.com/api/docs/deprecations"
357
453
  }
358
454
  ]