@nitra/cursor 5.3.2 → 5.3.4

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.
Files changed (61) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/lib/docs/llm.md +23 -12
  3. package/package.json +1 -1
  4. package/rules/abie/fix.mjs +1 -2
  5. package/rules/adr/fix.mjs +1 -2
  6. package/rules/bun/fix.mjs +1 -2
  7. package/rules/capacitor/fix.mjs +1 -2
  8. package/rules/capacitor/js/platforms.mjs +0 -2
  9. package/rules/changelog/fix.mjs +1 -2
  10. package/rules/ci4/fix.mjs +1 -2
  11. package/rules/docker/fix.mjs +1 -2
  12. package/rules/efes/fix.mjs +1 -2
  13. package/rules/feedback/fix.mjs +1 -2
  14. package/rules/ga/fix.mjs +1 -2
  15. package/rules/graphql/fix.mjs +1 -2
  16. package/rules/hasura/fix.mjs +1 -2
  17. package/rules/image-avif/fix.mjs +1 -2
  18. package/rules/image-compress/fix.mjs +1 -2
  19. package/rules/js-bun-db/fix.mjs +1 -2
  20. package/rules/js-bun-redis/fix.mjs +1 -2
  21. package/rules/js-lint/fix.mjs +1 -2
  22. package/rules/js-lint-ci/fix.mjs +1 -2
  23. package/rules/js-mssql/fix.mjs +1 -2
  24. package/rules/js-run/fix.mjs +1 -2
  25. package/rules/k8s/fix.mjs +1 -2
  26. package/rules/k8s/js/manifests.mjs +1 -5
  27. package/rules/nginx-default-tpl/fix.mjs +1 -2
  28. package/rules/npm-module/fix.mjs +1 -2
  29. package/rules/npm-module/js/package_structure.mjs +0 -1
  30. package/rules/php/fix.mjs +1 -2
  31. package/rules/python/fix.mjs +1 -2
  32. package/rules/rego/fix.mjs +1 -2
  33. package/rules/release/fix.mjs +1 -2
  34. package/rules/rust/fix.mjs +1 -2
  35. package/rules/security/fix.mjs +1 -2
  36. package/rules/style-lint/fix.mjs +1 -2
  37. package/rules/tauri/fix.mjs +1 -2
  38. package/rules/test/coverage/coverage.mjs +0 -2
  39. package/rules/test/fix.mjs +1 -2
  40. package/rules/text/fix.mjs +1 -2
  41. package/rules/vue/fix.mjs +1 -2
  42. package/rules/worktree/fix.mjs +1 -2
  43. package/scripts/lib/run-rule.mjs +0 -2
  44. package/scripts/lint-cli.mjs +0 -1
  45. package/scripts/utils/with-lock.mjs +0 -1
  46. package/skills/doc-aggregate/js/docgen-scan.mjs +17 -18
  47. package/skills/doc-files/.changes/260612-0002.md +5 -0
  48. package/skills/doc-files/.changes/260612-0006.md +5 -0
  49. package/skills/doc-files/.changes/260612-0008.md +5 -0
  50. package/skills/doc-files/.changes/260612-0012.md +5 -0
  51. package/skills/doc-files/js/docgen-extract.mjs +136 -0
  52. package/skills/doc-files/js/docgen-prompts.mjs +2 -2
  53. package/skills/doc-files/js/docgen-scan.mjs +21 -22
  54. package/skills/doc-files/js/docs/docgen-extract-anchors.md +28 -10
  55. package/skills/doc-files/js/docs/docgen-extract.md +22 -12
  56. package/skills/doc-files/js/docs/docgen-files-batch.md +21 -11
  57. package/skills/doc-files/js/docs/docgen-gen.md +29 -13
  58. package/skills/doc-files/js/docs/docgen-ignore.md +37 -0
  59. package/skills/doc-files/js/docs/units-rs.md +35 -0
  60. package/skills/doc-files/js/units-rs.mjs +213 -0
  61. package/skills/doc-files/js/units.mjs +4 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.3.4] - 2026-06-11
4
+
5
+ ### Changed
6
+
7
+ - ✨ feat(npm/skills/doc-files): Rust (.rs): тести extractFactsRust у docg…
8
+
9
+ ## [5.3.3] - 2026-06-11
10
+
11
+ ### Changed
12
+
13
+ - ✨ feat(npm/skills/doc-files): doc-files: підтримка Rust (.rs) — SOURCE_…
14
+
3
15
  ## [5.3.2] - 2026-06-11
4
16
 
5
17
  ### Changed
package/lib/docs/llm.md CHANGED
@@ -1,29 +1,40 @@
1
1
  ---
2
2
  docgen:
3
3
  source: npm/lib/llm.mjs
4
- crc: 9ef9f20f
4
+ crc: a70a8328
5
+ score: 100
5
6
  ---
6
7
 
7
- # llm
8
+ # llm.mjs
8
9
 
9
10
  ## Огляд
10
11
 
11
- Єдина точка LLM-викликів для JS-оркестраторів монорепо: ховає вибір транспорту за конвенцією префікса model-id і дає preflight-перевірку локального сервера перед масовими прогонами.
12
+ Файл надає механізми для виклику великих мовних моделей. Маршрутизація вибору транспортного каналу залежить від префікса ідентифікатора моделі згідно з конвенцією `npm/lib/models.mjs`. Виклик LLM виконує виклик з визначеною маршрутизацією та запис трасування. Перевірка стану omlx сервера визначає доступність моделі.
12
13
 
13
14
  ## Поведінка
14
15
 
15
- 1. Виклик із model-id з префіксом `omlx/` іде прямим HTTP до локального omlx-сервера зі збереженням ролей повідомлень; будь-який інший model-id (зокрема порожній) — через `pi` CLI, де повідомлення конкатенуються в один текстовий промпт, а інструменти вимкнено.
16
- 2. Якщо виставлено `N_CURSOR_LLM_TRACE` зі шляхом до файлу, кожен виклик дописує один JSONL-рядок: бекенд, модель, тривалість, розміри промпта/відповіді, успіх або текст помилки. Невдалий запис трейсу не впливає на сам виклик.
17
- 3. Preflight локального сервера робить мінімальний запит (одна позиція виходу) і класифікує стан: сервер лежить (`down`), модель не влазить у динамічну стелю пам'яті зайнятої машини (`memory-guard`), сервер вимагає API-ключ (`auth`), інша помилка (`error`). Порожня відповідь живого сервера вважається здоровим станом.
16
+ pickBackend
17
+ Маршрутизує модель по префіксу до визначеного бекенда
18
+
19
+ callLlm
20
+ Виконує універсальний виклик LLM з маршрутизацією за моделью та wire-trace
21
+
22
+ omlxHealthCheck
23
+ Перевіряє стан omlx сервера для визначення доступності моделі
18
24
 
19
25
  ## Публічний API
20
26
 
21
- - `callLlm` — універсальний виклик за messages-масивом із маршрутизацією за префіксом model-id.
22
- - `pickBackend` назва бекенда (`omlx` чи `pi`) для заданого model-id.
23
- - `omlxHealthCheck`preflight-стан локального сервера: `{ ok, reason, detail }`.
27
+ pickBackend — Бекенд для model-id: `omlx` — прямий HTTP, `pi` CLI.
28
+ callLlmУніверсальний виклик LLM з маршрутизацією за префіксом model-id і постійне відстеження (wire-trace) обох каналів.
29
+ omlxHealthCheck — Перевірка omlx перед масовим прогоном через мінімальний чат-виклик (`max_tokens: 1`). Розрізняє стани:
30
+ down — Сервер не відповідає (не запущений / не той порт).
31
+ memory-guard — Модель не влазить у динамічну стелю пам'яті зайнятої машини — відкладає прогін.
32
+ auth — Сервер вимагає API-ключ — виставляє `N_CURSOR_OMLX_KEY`.
33
+ error — Інша помилка API.
34
+ Порожній контент відповіді — означає, що сервер живий і модель завантажена.
24
35
 
25
36
  ## Гарантії поведінки
26
37
 
27
- - Маршрутизація залежить лише від рядка моделі жодних env-перемикачів бекенда.
28
- - Помилка транспорту прокидається винятком; трейс при цьому фіксує невдачу.
29
- - `memory-guard` означає «машина зайнята, спробуй пізніше», а не дефект моделі чи конвеєра.
38
+ - Read-only: файл не виконує операцій запису у файлову систему.
39
+ - Перехоплює помилки і не пропускає винятків назовні (fail-safe).
40
+ - Не звертається до мережі.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitra/cursor",
3
- "version": "5.3.2",
3
+ "version": "5.3.4",
4
4
  "description": "CLI для завантаження cursor-правил (префікс n-) у локальний репозиторій",
5
5
  "keywords": [
6
6
  "cli",
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
package/rules/adr/fix.mjs CHANGED
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
package/rules/bun/fix.mjs CHANGED
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -21,11 +21,9 @@ const IGNORED_DIRS_FOR_PACKAGE_JSON = new Set([
21
21
  ])
22
22
 
23
23
  /** `||` у діапазоні npm-версій */
24
- // eslint-disable-next-line sonarjs/slow-regex -- короткі **semver**-підрядки у **package.json**
25
24
  const NPM_OR_PARTS_RE = /\s*\|\|\s*/
26
25
 
27
26
  /** `a - b` (діапазон діапазонів) */
28
- // eslint-disable-next-line sonarjs/slow-regex -- форма **X - Y** у **npm**-range
29
27
  const NPM_HYPHEN_RANGE_RE = /^(.+?)\s+-\s+(.+)$/
30
28
 
31
29
  const FIRST_VERSION_NUM_RE = /^(?:v)?(\d+)/i
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
package/rules/ci4/fix.mjs CHANGED
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
package/rules/ga/fix.mjs CHANGED
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
package/rules/k8s/fix.mjs CHANGED
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -3984,11 +3984,8 @@ const noopFail = msg => msg
3984
3984
  * @type {readonly { ipBlock: { cidr: string } }[]}
3985
3985
  */
3986
3986
  const NETWORK_POLICY_GCLB_INGRESS_FROM = Object.freeze([
3987
- // eslint-disable-next-line sonarjs/no-hardcoded-ip
3988
3987
  { ipBlock: { cidr: '35.191.0.0/16' } },
3989
- // eslint-disable-next-line sonarjs/no-hardcoded-ip
3990
3988
  { ipBlock: { cidr: '130.211.0.0/22' } },
3991
- // eslint-disable-next-line sonarjs/no-hardcoded-ip
3992
3989
  { ipBlock: { cidr: '10.0.0.0/8' } }
3993
3990
  ])
3994
3991
 
@@ -4858,9 +4855,8 @@ function firstValidYamlJsonFromPatchText(patchText) {
4858
4855
  if (d.errors.length === 0) return d.toJSON()
4859
4856
  }
4860
4857
  } catch {
4861
- return undefined
4858
+ // ignore parse errors
4862
4859
  }
4863
- return undefined
4864
4860
  }
4865
4861
 
4866
4862
  /**
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -257,7 +257,6 @@ export function globToRegex(glob) {
257
257
  // Дозволено: уся функція існує саме для конструкції RegExp з glob-pattern
258
258
  // у `files` (значення з npm/package.json, не від кінцевого користувача), і
259
259
  // спецсимволи вже екрановано через `REGEX_SPECIAL_IN_GLOB` вище.
260
- // eslint-disable-next-line security/detect-non-literal-regexp
261
260
  return new RegExp(`^${re}$`, 'u')
262
261
  }
263
262
 
package/rules/php/fix.mjs CHANGED
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -12,6 +12,5 @@ export function run(ctx) {
12
12
  }
13
13
 
14
14
  if (isRunAsCli(import.meta.url)) {
15
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
16
- process.exit(await runRuleCli(import.meta.dirname))
15
+ process.exitCode = await runRuleCli(import.meta.dirname)
17
16
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -170,7 +170,6 @@ export function renderMarkdown(rows, allowedGaps = []) {
170
170
  async function loadProvider(rulesDir, ruleId) {
171
171
  const providerPath = join(rulesDir, ruleId, 'coverage', 'coverage.mjs')
172
172
  if (!existsSync(providerPath)) return null
173
- // eslint-disable-next-line no-unsanitized/method -- providerPath з join(rulesDir, ruleId, …), ruleId з конфігу
174
173
  const mod = await import(pathToFileURL(providerPath).href)
175
174
  if (typeof mod.detect !== 'function' || typeof mod.collect !== 'function') return null
176
175
  return mod
@@ -292,7 +291,6 @@ export async function runCoverageSteps(opts = {}) {
292
291
  console.log('✓ COVERAGE.md')
293
292
 
294
293
  if (opts.fix) {
295
- // eslint-disable-next-line no-unsanitized/method -- шлях відносний до пакету, не user-input
296
294
  const { fixSurvivedMutants } = await import(new URL('../../../scripts/coverage-fix.mjs', import.meta.url).href)
297
295
  await fixSurvivedMutants(allSurvived, cwd)
298
296
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
package/rules/vue/fix.mjs CHANGED
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -14,6 +14,5 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
- process.exit(await runRuleCli(import.meta.dirname))
17
+ process.exitCode = await runRuleCli(import.meta.dirname)
19
18
  }
@@ -53,7 +53,6 @@ async function evaluateAppliesGate(bundledRulesDir, rule) {
53
53
  const concern = rule.jsConcerns.find(c => c.name === APPLIES_CONCERN_NAME)
54
54
  if (!concern) return true
55
55
  const path = resolveJsCheckPath(bundledRulesDir, rule.id, concern)
56
- // eslint-disable-next-line no-unsanitized/method -- path з discovered concern, файл з whitelist'у readdir
57
56
  const mod = await import(path)
58
57
  if (typeof mod.applies !== 'function') return true
59
58
  return Boolean(await mod.applies())
@@ -170,7 +169,6 @@ export async function runRule(rule, bundledRulesDir, walkCache) {
170
169
 
171
170
  for (const concern of rule.jsConcerns) {
172
171
  const path = resolveJsCheckPath(bundledRulesDir, rule.id, concern)
173
- // eslint-disable-next-line no-unsanitized/method -- path з discovered concern, файл з whitelist'у readdir
174
172
  const mod = await import(path)
175
173
  if (typeof mod.check === 'function') {
176
174
  const code = await mod.check()
@@ -74,7 +74,6 @@ export async function runLint(opts = {}) {
74
74
  log(`⚠️ lint: правило ${id} має lint-фазу, але немає js/lint.mjs — пропускаю.\n`)
75
75
  continue
76
76
  }
77
- // eslint-disable-next-line no-unsanitized/method -- шлях з discovered rule dir
78
77
  const mod = await import(lintPath)
79
78
  const code = await mod.lint(changed, cwd)
80
79
  if (code !== 0) return code
@@ -128,7 +128,6 @@ export async function withLock(key, runFn, opts = {}) {
128
128
 
129
129
  const onSignal = () => {
130
130
  release()
131
- // eslint-disable-next-line n/no-process-exit -- SIGINT/SIGTERM мають завершити процес із кодом 130
132
131
  process.exit(130)
133
132
  }
134
133
  process.once('SIGINT', onSignal)