@nitra/cursor 5.3.3 → 5.4.0

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 (157) hide show
  1. package/.claude-template/settings.template.json +2 -2
  2. package/.pi-template/extensions/n-cursor-adr/docs/index.md +13 -24
  3. package/CHANGELOG.md +17 -0
  4. package/bin/n-cursor.js +43 -22
  5. package/lib/docs/llm.md +23 -12
  6. package/lib/docs/models.md +29 -18
  7. package/lib/docs/omlx-trace.md +51 -0
  8. package/lib/docs/omlx.md +31 -15
  9. package/lib/omlx.mjs +2 -5
  10. package/package.json +1 -1
  11. package/rules/abie/docs/fix.md +17 -11
  12. package/rules/adr/docs/fix.md +25 -140
  13. package/rules/bun/docs/fix.md +18 -151
  14. package/rules/capacitor/docs/fix.md +16 -13
  15. package/rules/capacitor/js/docs/platforms.md +31 -43
  16. package/rules/changelog/docs/fix.md +25 -169
  17. package/rules/ci4/docs/fix.md +11 -14
  18. package/rules/doc-files/doc-files.mdc +60 -0
  19. package/rules/doc-files/docs/fix.md +31 -0
  20. package/rules/doc-files/fix.mjs +19 -0
  21. package/{skills → rules}/doc-files/js/docgen-extract.mjs +42 -19
  22. package/{skills → rules}/doc-files/js/docgen-ignore.mjs +2 -1
  23. package/{skills → rules}/doc-files/js/docgen-scan.mjs +9 -1
  24. package/{skills → rules}/doc-files/js/docs/docgen-crc.md +1 -1
  25. package/rules/doc-files/js/docs/docgen-extract-anchors.md +45 -0
  26. package/rules/doc-files/js/docs/docgen-extract.md +39 -0
  27. package/rules/doc-files/js/docs/docgen-files-batch.md +35 -0
  28. package/rules/doc-files/js/docs/docgen-gen.md +46 -0
  29. package/rules/doc-files/js/docs/docgen-ignore.md +37 -0
  30. package/rules/doc-files/js/docs/docgen-prompts.md +39 -0
  31. package/rules/doc-files/js/docs/docgen-scan.md +54 -0
  32. package/rules/doc-files/js/docs/lint.md +36 -0
  33. package/rules/doc-files/js/docs/units-js.md +31 -0
  34. package/rules/doc-files/js/docs/units-rs.md +35 -0
  35. package/rules/doc-files/js/docs/units.md +30 -0
  36. package/rules/doc-files/js/lint.mjs +96 -0
  37. package/{skills → rules}/doc-files/js/units-rs.mjs +37 -17
  38. package/rules/doc-files/lint/docs/lint.md +37 -0
  39. package/rules/doc-files/lint/lint.mjs +105 -0
  40. package/rules/doc-files/meta.json +1 -0
  41. package/rules/docker/docs/fix.md +21 -161
  42. package/rules/efes/docs/fix.md +23 -194
  43. package/rules/feedback/docs/fix.md +10 -8
  44. package/rules/ga/docs/fix.md +10 -5
  45. package/rules/graphql/docs/fix.md +23 -119
  46. package/rules/hasura/docs/fix.md +19 -5
  47. package/rules/hasura/js/docs/internal_urls.md +34 -307
  48. package/rules/image-avif/docs/fix.md +16 -127
  49. package/rules/image-compress/docs/fix.md +20 -141
  50. package/rules/image-compress/js/docs/package_setup.md +22 -182
  51. package/rules/js-bun-db/docs/fix.md +23 -139
  52. package/rules/js-bun-db/js/docs/safety.md +33 -221
  53. package/rules/js-bun-redis/docs/fix.md +25 -114
  54. package/rules/js-bun-redis/js/docs/imports.md +18 -166
  55. package/rules/js-lint/docs/fix.md +30 -108
  56. package/rules/js-lint/js/docs/lint-findings.md +37 -17
  57. package/rules/js-lint/js/docs/lint.md +22 -238
  58. package/rules/js-lint/js/docs/tooling.md +34 -331
  59. package/rules/js-lint-ci/docs/fix.md +16 -149
  60. package/rules/js-lint-ci/js/docs/lint.md +16 -136
  61. package/rules/js-mssql/docs/fix.md +18 -123
  62. package/rules/js-mssql/js/docs/deps.md +28 -251
  63. package/rules/js-run/docs/fix.md +23 -138
  64. package/rules/js-run/js/docs/runtime.md +24 -378
  65. package/rules/k8s/docs/fix.md +18 -123
  66. package/rules/nginx-default-tpl/docs/fix.md +22 -118
  67. package/rules/nginx-default-tpl/js/docs/template.md +38 -360
  68. package/rules/npm-module/docs/fix.md +27 -89
  69. package/rules/npm-module/js/docs/header_doc_pointer.md +15 -15
  70. package/rules/npm-module/js/docs/package_structure.md +36 -258
  71. package/rules/npm-module/js/docs/rule_meta.md +25 -127
  72. package/rules/npm-module/js/docs/skill_meta.md +18 -180
  73. package/rules/php/docs/fix.md +21 -98
  74. package/rules/php/js/docs/tooling.md +20 -143
  75. package/rules/python/docs/fix.md +25 -157
  76. package/rules/python/js/docs/applies.md +20 -98
  77. package/rules/python/js/docs/tooling.md +27 -144
  78. package/rules/rego/docs/fix.md +24 -112
  79. package/rules/rego/js/docs/applies.md +20 -164
  80. package/rules/rego/js/docs/lint.md +15 -110
  81. package/rules/release/docs/fix.md +16 -114
  82. package/rules/rust/docs/fix.md +24 -119
  83. package/rules/rust/js/docs/applies.md +20 -129
  84. package/rules/security/docs/fix.md +21 -78
  85. package/rules/security/js/docs/sample_secret.md +23 -182
  86. package/rules/security/js/docs/trufflehog.md +19 -128
  87. package/rules/style-lint/docs/fix.md +16 -150
  88. package/rules/style-lint/js/docs/lint.md +21 -172
  89. package/rules/style-lint/js/docs/tooling.md +19 -184
  90. package/rules/tauri/docs/fix.md +26 -152
  91. package/rules/tauri/js/docs/cargo_mutants_config.md +21 -159
  92. package/rules/tauri/js/docs/tooling.md +20 -217
  93. package/rules/test/docs/fix.md +19 -127
  94. package/rules/test/js/data/stryker_config/docs/stryker.config.baseline.md +15 -127
  95. package/rules/test/js/data/stryker_config/docs/stryker.config.vue.baseline.md +17 -153
  96. package/rules/test/js/docs/cargo_mutants_config.md +24 -164
  97. package/rules/test/js/docs/location.md +24 -126
  98. package/rules/test/js/docs/no-process-chdir.md +20 -151
  99. package/rules/test/js/docs/no-relative-fs-path.md +24 -261
  100. package/rules/test/js/docs/stryker_config.md +48 -148
  101. package/rules/test/js/docs/vitest-config-pool-forks.md +21 -164
  102. package/rules/text/docs/fix.md +25 -113
  103. package/rules/text/js/docs/forbidden-prettier.md +21 -132
  104. package/rules/text/js/docs/formatting.md +60 -251
  105. package/rules/text/js/docs/lint.md +17 -114
  106. package/rules/vue/docs/fix.md +25 -118
  107. package/rules/vue/js/docs/packages.md +25 -323
  108. package/rules/worktree/docs/fix.md +31 -150
  109. package/scripts/coverage-classify/docs/index.md +23 -209
  110. package/scripts/coverage-classify/docs/verdict-schema.md +14 -159
  111. package/scripts/dispatcher/docs/trace.md +35 -0
  112. package/scripts/docs/auto-rules.md +37 -361
  113. package/scripts/docs/lint-cli.md +12 -13
  114. package/scripts/docs/post-tool-use-fix.md +16 -15
  115. package/scripts/docs/skills-cli.md +26 -23
  116. package/scripts/docs/sync-claude-config.md +94 -34
  117. package/scripts/docs/worktree-cli.md +11 -34
  118. package/scripts/lib/docs/assert-project-root.md +14 -16
  119. package/scripts/lib/docs/changed-files.md +24 -139
  120. package/scripts/lib/docs/discover-check-rules-from-cursor.md +14 -146
  121. package/scripts/lib/docs/rule-predicates.md +20 -17
  122. package/scripts/lib/docs/run-rule-cli.md +14 -18
  123. package/scripts/lib/docs/run-rule.md +13 -20
  124. package/scripts/lib/docs/run-standard-rule.md +12 -15
  125. package/scripts/lib/docs/sync-gitignore-worktree.md +15 -18
  126. package/scripts/lib/rule-predicates.mjs +1 -1
  127. package/scripts/sync-claude-config.mjs +4 -1
  128. package/scripts/utils/docs/with-lock.md +19 -12
  129. package/scripts/utils/with-lock.mjs +4 -2
  130. package/skills/doc-aggregate/SKILL.md +2 -2
  131. package/skills/doc-aggregate/js/docgen-ignore.mjs +6 -6
  132. package/skills/doc-aggregate/js/docs/docgen-ignore.md +1 -1
  133. package/skills/doc-aggregate/js/docs/docgen-scan.md +78 -0
  134. package/skills/doc-files/.changes/260612-0012.md +5 -0
  135. package/skills/doc-files/.changes/260612-0031.md +5 -0
  136. package/skills/doc-files/.changes/260612-0036.md +5 -0
  137. package/skills/doc-files/.changes/260612-0114.md +5 -0
  138. package/skills/doc-files/SKILL.md +6 -6
  139. package/skills/fix/js/docs/llm-worker.md +17 -15
  140. package/skills/fix/js/docs/orchestrator.md +30 -23
  141. package/skills/fix/js/docs/t0.md +26 -16
  142. package/skills/start-check/js/docs/check.md +26 -22
  143. package/skills/taze/js/docs/diff.md +44 -20
  144. package/skills/doc-files/js/docs/docgen-extract-anchors.md +0 -27
  145. package/skills/doc-files/js/docs/docgen-extract.md +0 -29
  146. package/skills/doc-files/js/docs/docgen-files-batch.md +0 -25
  147. package/skills/doc-files/js/docs/docgen-gen.md +0 -30
  148. package/skills/doc-files/js/docs/docgen-prompts.md +0 -32
  149. package/skills/doc-files/js/docs/docgen-scan.md +0 -25
  150. package/skills/doc-files/js/docs/units-rs.md +0 -35
  151. /package/{skills → rules}/doc-files/js/docgen-crc.mjs +0 -0
  152. /package/{skills → rules}/doc-files/js/docgen-extract-anchors.mjs +0 -0
  153. /package/{skills → rules}/doc-files/js/docgen-files-batch.mjs +0 -0
  154. /package/{skills → rules}/doc-files/js/docgen-gen.mjs +0 -0
  155. /package/{skills → rules}/doc-files/js/docgen-prompts.mjs +0 -0
  156. /package/{skills → rules}/doc-files/js/units-js.mjs +0 -0
  157. /package/{skills → rules}/doc-files/js/units.mjs +0 -0
@@ -0,0 +1,78 @@
1
+ ---
2
+ docgen:
3
+ source: npm/skills/doc-aggregate/js/docgen-scan.mjs
4
+ crc: 193dd362
5
+ score: 100
6
+ ---
7
+
8
+ # docgen-scan.mjs
9
+
10
+ ## Огляд
11
+
12
+ isSourceFile
13
+ Перевіряє, чи є файл коду, який слугує джерелом для документування.
14
+
15
+ scanSourceFiles
16
+ Рекурсивно збирає кодові файли проєкту за позикс-шляхами від кореня.
17
+
18
+ slugForModule
19
+ Генерує стабільний slug модуля на основі його відносного шляху.
20
+
21
+ findModuleRoots
22
+ Знаходить абсолютні шляхи коренів модулів, використовуючи дані з package.json.
23
+
24
+ nearestModuleRoot
25
+ Визначає найближчий модуль-предок для заданого файлу серед усіх доступних коренів модулів.
26
+
27
+ scanForModules
28
+ Лістить логічні модулі, збираючи члени-файли та інформацію про наявність документації.
29
+
30
+ resolveRoot
31
+ Парсить аргументи для визначення абсолютної кореневої директорії.
32
+
33
+ runDocAggregateModulesCli
34
+ Сканує модулі та виводить масив JSON у stdout.
35
+
36
+ ## Поведінка
37
+
38
+ isSourceFile
39
+ Перевіряє, чи є файл кодовим джерелом для документування
40
+
41
+ scanSourceFiles
42
+ Рекурсивно збирає кодові файли проєкту по позикс-шляхах від кореня
43
+
44
+ slugForModule
45
+ Генерує стабільний slug модуля з його відносним шляхом
46
+
47
+ findModuleRoots
48
+ Знаходить абсолютні шляхи коренів модулів з файлами package.json
49
+
50
+ nearestModuleRoot
51
+ Знаходить найближчий модуль-предок для файлу серед наявних коренів модулів
52
+
53
+ scanForModules
54
+ Лістить логічні модулі, збираючи члени-файли та інформацію про наявність документації
55
+
56
+ resolveRoot
57
+ Парсить аргументи для визначення абсолютного кореня
58
+
59
+ runDocAggregateModulesCli
60
+ Сканує модулі та виводить JSON-масив у stdout
61
+
62
+ ## Публічний API
63
+
64
+ - isSourceFile — визначає, чи є файл коду для документування.
65
+ - scanSourceFiles — рекурсивно збирає файли коду проєкту (від кореня за POSIX-шляхом).
66
+ - slugForModule — генерує стабільний slug модуля з його відносним шляхом (для лейблів/логів).
67
+ - findModuleRoots — знаходить кореневі директорії модулів у `package.json` (корінь — це модуль).
68
+ - nearestModuleRoot — визначає найближчий модуль-предок для файлу (найдовший збіг шляху).
69
+ - scanForModules — лістить логічні модулі проєкту з членами-файлами та `docPath module-summary`. Пропускає модулі без кодових файлів.
70
+ - resolveRoot — парсить аргумент `--root <dir>`; за замовчуванням використовує поточну директорію.
71
+ - runDocAggregateModulesCli — виконує команду `doc-aggregate modules`, скануючи модулі та виводячи JSON-масив у stdout.
72
+
73
+ ## Гарантії поведінки
74
+
75
+ - Read-only: файл не виконує операцій запису у файлову систему.
76
+ - Перехоплює помилки і не пропускає винятків назовні (fail-safe).
77
+ - За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
78
+ - Не звертається до мережі.
@@ -0,0 +1,5 @@
1
+ ---
2
+ bump: patch
3
+ section: Added
4
+ ---
5
+ Rust (.rs): тести extractFactsRust у docgen-extract.test.mjs — exports, tauri::command, struct/enum, markers, header, desc
@@ -0,0 +1,5 @@
1
+ ---
2
+ bump: patch
3
+ section: Changed
4
+ ---
5
+ стале-доки після Rust: оновлено CRC для docgen-prompts, docgen-scan, units-rs; додано units-js.md; тести extractFacts(.rs)
@@ -0,0 +1,5 @@
1
+ ---
2
+ bump: patch
3
+ section: Added
4
+ ---
5
+ docs: units.md (docgen для units.mjs — фасад Rust/JS)
@@ -0,0 +1,5 @@
1
+ ---
2
+ bump: patch
3
+ section: Added
4
+ ---
5
+ doc-files: регенерація всіх stale doc-файлів; manifests.mjs (303KB) → docgen-ignore
@@ -31,7 +31,7 @@ docgen:
31
31
  ## Оркестрацію веде JS, не модель; конвеєр — local-only
32
32
 
33
33
  Уся важка робота — черга, батчинг, виклики LLM і штамп CRC — живе в JS-команді
34
- `doc-files gen`. **Ти не диспатчиш субагентів і не тримаєш сотні файлів у контексті**
34
+ `fix-doc-files`. **Ти не диспатчиш субагентів і не тримаєш сотні файлів у контексті**
35
35
  — тому навіть масовий перший прогін усього репо не «заморює». Цей скіл **тонкий**: твоє завдання —
36
36
  запустити генерацію і прочитати підсумок.
37
37
 
@@ -50,7 +50,7 @@ docgen:
50
50
  ### Крок 1: Генерація застарілих/відсутніх док
51
51
 
52
52
  ```bash
53
- npx @nitra/cursor doc-files gen
53
+ npx @nitra/cursor fix-doc-files
54
54
  ```
55
55
 
56
56
  Команда сама: перевіряє omlx (preflight: «сервер лежить» / «модель не влазить у пам'ять
@@ -66,18 +66,18 @@ npx @nitra/cursor doc-files gen
66
66
 
67
67
  Дочекайся підсумку `✓ OK: <N> ⚠ degraded: <D> ✗ Err: <E>`. Якщо є помилки — перелічи
68
68
  проблемні файли. Exit-код `1` означає, що хоча б один файл не згенерувався (або не пройшов
69
- preflight). Degraded — не помилка: дока існує, борг видно у `check --degraded`.
69
+ preflight). Degraded — не помилка: дока існує, борг видно у `lint-doc-files --degraded`.
70
70
 
71
71
  ### Крок 3 (за потреби): перевірка перед завершенням
72
72
 
73
73
  ```bash
74
- npx @nitra/cursor doc-files check --git
74
+ npx @nitra/cursor lint-doc-files --git
75
75
  ```
76
76
 
77
77
  Перевіряє змінені у задачі джерела (`git diff --name-only HEAD`) проти CRC їхніх док.
78
78
  Цю ж перевірку виконує **Stop-hook** як твердий гейт: завершити задачу зі застарілими
79
79
  доками не можна (виняток — масовий прогін понад поріг `N_CURSOR_DOC_FILES_GATE_MAX`, дефолт 50).
80
- Degraded-доки гейт **не** блокує (CRC свіжий); їх список — `doc-files check --degraded`.
80
+ Degraded-доки гейт **не** блокує (CRC свіжий); їх список — `lint-doc-files --degraded`.
81
81
 
82
82
  ## Правила стилю документа (за adr/ci4)
83
83
 
@@ -97,4 +97,4 @@ Degraded-доки гейт **не** блокує (CRC свіжий); їх спи
97
97
  усі теки `docs/`, а також `*.test.*` / `*.spec.*` / `*.d.ts`. Кореневий repo `docs/` —
98
98
  system-wide only: file-level docs туди не пишуться. Список glob-ів — `docgen-ignore.mjs`.
99
99
  - Агрегуюча документація (module-summary, доменні доки) — окремий скіл `doc-aggregate`, за запитом.
100
- - Для наявних док без CRC одноразово: `npx @nitra/cursor doc-files stamp` (штампує frontmatter без LLM).
100
+ - Для наявних док без CRC одноразово: `npx @nitra/cursor fix-doc-files --stamp` (штампує frontmatter без LLM).
@@ -1,33 +1,35 @@
1
1
  ---
2
2
  docgen:
3
3
  source: npm/skills/fix/js/llm-worker.mjs
4
- crc: 8317f878
4
+ crc: 6507b5b7
5
+ score: 100
5
6
  ---
6
7
 
7
8
  # llm-worker.mjs
8
9
 
9
10
  ## Огляд
10
11
 
11
- Цей файл є LLM-робітником, який збирає контекст для n-fix оркестратора, зокрема правила з файлів .mdc та звіти про порушення. Він передає цей контекст великій мовній моделі (LLM) для генерації JSON з пропозиціями змін. Після отримання змін, скрипт застосовує їх до відповідних ресурсів.
12
+ MODEL визначає основну модель для виконання операцій. MODEL_HEAVY визначає модель для посиленої обробки. runLlmWorker корегує одне визначене правило порушення через LLM.
12
13
 
13
14
  ## Поведінка
14
15
 
15
- runLlmWorker: Виправляє одне rule-порушення через pi (C1 pattern). Збирає контекст з rule .mdc, файлів з violation output, та передає його в pi для отримання JSON зі змінами. Застосовує зміни, якщо вони були отримані від pi. Якщо pi не повернув JSON, або не зміг застосувати зміни, повертає помилку. Використовує модель Claude HAIKU за замовчуванням, або модель, вказану в опціях.
16
+ MODEL
17
+ Визначає модель за замовчуванням для роботи.
18
+
19
+ MODEL_HEAVY
20
+ Визначає модель для важкої ескалації.
21
+
22
+ runLlmWorker
23
+ Виправляє одне правило порушення через LLM.
16
24
 
17
25
  ## Публічний API
18
26
 
19
- MODEL_HAIKUГенерує короткі вірші.
20
- MODEL_SONNETГенерує вірші у форматі сонету.
21
- runLlmWorker — Виправляє порушення правил, використовуючи pi (C1 pattern).
27
+ MODELСтворює модель.
28
+ MODEL_HEAVYСтворює важку модель.
29
+ runLlmWorker — Виправляє одне порушення правила через pi (C1 pattern).
22
30
 
23
31
  ## Гарантії поведінки
24
32
 
25
- - Приймає контекст з файлів `.mdc` та файлів з violation.
26
- - Повертає JSON з пропозиціями змін.
27
- - Застосовує зміни, отримані від `pi`.
28
- - Використовує LLM для генерації змін.
29
- - Викликає LLM через `pi`.
30
- - Не використовує tool-use.
31
- - Не кидає винятків.
32
- - У разі невдачі повертає `false` та `null`.
33
- - Не використовує кешування.
33
+ - Перехоплює помилки і не пропускає винятків назовні (fail-safe).
34
+ - За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
35
+ - Не звертається до мережі.
@@ -1,38 +1,45 @@
1
1
  ---
2
2
  docgen:
3
3
  source: npm/skills/fix/js/orchestrator.mjs
4
- crc: 8b7a7de5
4
+ crc: e77aaf7b
5
+ score: 100
5
6
  ---
6
7
 
7
8
  # orchestrator.mjs
8
9
 
9
10
  ## Огляд
10
11
 
11
- Файл `convergence-loop` є автономним оркестратором для n-fix, який забезпечує перевірку та виправлення коду без участі LLM. Він ініціює детерміністичні перевірки, regex-парсинг та ітеративні процеси з використанням LLM для вирішення складних проблем. Цей компонент є ключовим елементом системи, що автоматизує процес забезпечення коректності коду n-fix.
12
+ runOrchestratorCli
13
+ Запускає ітеративний цикл для перевірки набору правил. Проходить через кроки T0-auto та T1, взаємодіючи з LLM-воркерами. Завершує роботу, перевіряючи, чи всі правила виконані, повертаючи нуль або одиницю залежно від кінцевого стану.
12
14
 
13
15
  ## Поведінка
14
16
 
15
- 1. **Ініціалізація:** Запускається оркестратор, визначаються максимальна кількість ітерацій (за замовчуванням 3) та порогове значення для ескалації LLM (за замовчуванням 2 невдачі).
16
- 2. **Первинна перевірка:** Виконується детермінована перевірка (T0) на основі заданих правил, без залучення LLM. Результат перевірки записується.
17
- 3. **Автоматичний фікс (T0-auto):** Якщо перевірка виявила порушення, запускається автоматичний фікс, який використовує regex для виявлення та виправлення проблем.
18
- 4. **Ітерація:** Програма повторює наступні кроки до досягнення максимальної кількості ітерацій:
19
- - **Перевірка (T0):** Виконується детермінована перевірка (T0) на основі поточного стану.
20
- - **Автоматичний фікс (T0-auto):** Якщо перевірка виявила порушення, запускається автоматичний фікс.
21
- - **Виклик LLM (T1):** Для кожного порушення, яке не було виправлено автоматичним фіксом, викликається LLM (haiku або sonnet, залежно від кількості попередніх невдач) для генерації рішення.
22
- - **Оцінка рішення LLM:** LLM генерує рішення, яке оцінюється на предмет успіху.
23
- - **Оновлення стану:** Якщо рішення LLM успішне, порушення виправляється, і кількість невдалих спроб LLM для цього правила встановлюється на нуль.
24
- 5. **Фінальна перевірка:** Після завершення всіх ітерацій виконується остаточна перевірка, щоб визначити, чи були виправлені всі порушення.
25
- 6. **Повернення результату:** Оркестратор повертає код 0, якщо всі правила були виправлені, і код 1, якщо хоча б одне правило залишилося не виправленим. У випадку помилки парсингу JSON, повертається null.
17
+ 1. Парсинг аргументів
18
+ Приймає аргументи командного рядка після 'fix'
19
+ Визначає максимальну кількість ітерацій
20
+ Визначає фільтр правил
21
+ 2. Початкова перевірка
22
+ Запускає перевірку стану
23
+ Отримує початковий набір правил
24
+ Перевіряє наявність помилок
25
+ 3. Ітеративний цикл
26
+ Повторює ітерації до максимального ліміту
27
+ Виконує крок T0-auto
28
+ Перевіряє кількість провалів після кроку T0
29
+ Якщо провалів немає, завершує цикл
30
+ Виконує крок T1
31
+ Запускає роботу з LLM-воркерами для кожного правила
32
+ Збільшує лічильник провалів для невдалих правил
33
+ Перевіряє стан після LLM
34
+ Перевіряє наявність невирішених правил
35
+ 4. Завершення
36
+ Перевіряє, чи всі правила вирішено
37
+ Повертає нуль у разі чистого стану
38
+ Повертає одиницю у разі невирішеного стану
26
39
 
27
40
  ## Гарантії поведінки
28
41
 
29
- - Оркестратор запускається при виклику `runOrchestratorCli`.
30
- - Програма виконує цикл з перевірок, поки не буде досягнуто максимальну кількість ітерацій (`maxIter`).
31
- - Після кожної ітерації (`T0`, `T0-auto`, `T1`) виконується перевірка.
32
- - `T0` виконується детерміновано без використання LLM.
33
- - `T0-auto` виконує regex-парсинг та застосовує програмний фікс у разі виявлення порушення.
34
- - `T1` використовує LLM через `pi` (ескалація до `haiku` та `sonnet`).
35
- - `check-gate` повторно запускає `T0` після кожної ітерації.
36
- - У разі помилки програма повертає `false` або `null`.
37
- - Програма кешує результати для оптимізації роботи в межах одного запуску.
38
- - Програма не взаємодіє з мережею.
42
+ - Read-only: файл не виконує операцій запису у файлову систему.
43
+ - Перехоплює помилки і не пропускає винятків назовні (fail-safe).
44
+ - За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
45
+ - Не звертається до мережі.
@@ -1,29 +1,39 @@
1
+ ---
2
+ docgen:
3
+ source: npm/skills/fix/js/t0.mjs
4
+ crc: 51311329
5
+ score: 90
6
+ ---
7
+
1
8
  # t0.mjs
2
9
 
3
10
  ## Огляд
4
11
 
5
- Файл `t0-auto` забезпечує детермінований рівень виправлень для n-fix оркестратора, автоматично застосовуючи програмні фікси на основі аналізу вихідних даних `n-cursor fix --json`. Він парсить повідомлення про порушення, видобуваючи з них інформацію про цільові файли або рядки для вставки, і застосовує відповідні фікси. Це дозволяє швидко та передбачувано виправляти помилки, не використовуючи LLM, і є першим етапом у конвергентному циклі виправлення.
12
+ applyT0Auto застосовує паттерни T0-auto до вихідного результату.
13
+
14
+ filterT0AutoRules фільтрує список правил, для яких присутній хоча б один T0-auto паттерн.
15
+
16
+ runT0AutoCli запускає перевірку, застосовує T0-auto до провальних правил, виводить результат та перевіряє стан через check-gate.
6
17
 
7
18
  ## Поведінка
8
19
 
9
- applyT0Auto: Застосовує всі T0-auto паттерни до вхідного `violationOutput` та повертає об'єкт, що вказує, чи застосовано фікс, та список виконаних дій.
10
- filterT0AutoRules: Повертає список id правил, для яких є хоч один T0-auto паттерн, на основі `failedRules`.
11
- runT0AutoCli: Запускає `n-cursor fix --json`, застосовує T0-auto, повторно перевіряє check-gate та виводить підсумок. Повертає 0 у разі успіху, 1 у разі помилки.
20
+ applyT0Auto
21
+ Застосовує паттерни T0-auto до одного вихідного результату
22
+
23
+ filterT0AutoRules
24
+ Фільтрує список правил, для яких існує хоча б один T0-auto паттерн
25
+
26
+ runT0AutoCli
27
+ Запускає перевірку, застосовує T0-auto до провальних правил, виводить результат та перевіряє стан через check-gate
12
28
 
13
29
  ## Публічний API
14
30
 
15
- - applyT0Auto — Застосовує автоматичні правила виправлення до виявлених проблем.
16
- - filterT0AutoRules — Визначає ідентифікатори правил, які мають T0-auto паттерни.
17
- - runT0AutoCli — Запускає CLI-інструмент для автоматичного виправлення, включаючи перевірку та звітність.
31
+ - applyT0Auto — застосовує всі T0-auto шаблони до одного виводу порушення.
32
+ - filterT0AutoRules — повертає ідентифікатори правил, що мають хоча б один T0-auto шаблон у виводі порушення.
33
+ - runT0AutoCli — виконує команду `n-cursor fix-t0 [правило...]`.
34
+ - Запускає `fix --json`, застосовує T0-auto до кожного порушення, повторно перевіряє check-gate, виводить звіт.
18
35
 
19
36
  ## Гарантії поведінки
20
37
 
21
- - `applyT0Auto` застосовує програмний фікс, якщо `violationOutput` містить інформацію, яку можна видобути за допомогою регулярних виразів, і `violation-message` містить цільове значення, що відповідає одному з ідентифікаторів правил T0-auto. Результат: `applied` - boolean, `actions` - string[] (список виконаних дій).
22
- - `listT0AutoRules` повертає список ідентифікаторів правил T0-auto, які мають хоча б один паттерн.
23
- - `runT0AutoCli` повертає код виходу 0, якщо процес виконано успішно, і 1, якщо виявлено порушення.
24
- - T0-auto запускається першим у конвергентному циклі.
25
- - T1 запускається лише для решти.
26
- - Система перехоплює помилки та не кидає винятки.
27
- - В системі немає кешування.
28
- - Вхідні дані `applyT0Auto` повинні відповідати формату JSON, вихідному від `n-cursor fix --json`.
29
- - Якщо `violation-message` не містить інформації, яку можна видобути за допомогою регулярних виразів, `applyT0Auto` не виконує жод
38
+ - Перехоплює помилки і не пропускає винятків назовні (fail-safe).
39
+ - Не звертається до мережі.
@@ -1,40 +1,44 @@
1
1
  ---
2
2
  docgen:
3
3
  source: npm/skills/start-check/js/check.mjs
4
- crc: 1809127a
4
+ crc: 1f8fb2f0
5
+ score: 95
5
6
  ---
6
7
 
7
8
  # check.mjs
8
9
 
9
10
  ## Огляд
10
11
 
11
- Файл `n-cursor start-check scan|run` є частиною smoke-перевірки для скілу `n-start-check`. Він автоматично аналізує та запускає воркспейси, визначаючи тип стартового скрипта (сервер чи CLI) та перевіряючи успішність його виконання з обмеженням часу. Результати аналізу та запуску записуються у форматі JSON для подальшого аналізу та діагностики проблем.
12
+ Файл надає інструменти для класифікації типів процесу, сканування конфігурації воркспейсів, парсингу логів та запуску скриптів.
12
13
 
13
14
  ## Поведінка
14
15
 
15
- - `classifyStartType` визначає, чи є команда `start` CLI чи довгим процесом (сервером).
16
- - `scanStartWorkspaces` сканує монорепо, визначаючи воркспейси з `start`, їхні команди та типи.
17
- - `parseStartLog` витягує готовність, першу помилку та хвіст логу з процесу.
18
- - `runWorkspaceStart` запускає команду `start` воркспейсу з grace-таймаутом, класифікує результат та повертає інформацію про процес.
19
- - `runStartCheckCli` виконує `scan` або `run` воркспейсу, приймаючи аргументи командного рядка.
16
+ classifyStartType
17
+ Визначає тип процесу як сервер чи CLI на основі команди.
18
+
19
+ scanStartWorkspaces
20
+ Сканує монорепо для отримання інформації про наявність та конфігурацію `start` скриптів у воркспейсах.
21
+
22
+ parseStartLog
23
+ Парсить лог процесу для визначення готовності, першої помилки та останніх рядків.
24
+
25
+ runWorkspaceStart
26
+ Запускає `start` для одного воркспейсу з тайм-аутом і класифікує результат.
27
+
28
+ runStartCheckCli
29
+ Обробляє аргументи командного рядка для сканування або запуску тестування воркспейсів.
20
30
 
21
31
  ## Публічний API
22
32
 
23
- - classifyStartType — Визначає, чи є команда `start` сервером або CLI.
24
- - scanStartWorkspaces — Перевіряє монорепо на наявність команди `start` та її типу у кожному воркспейсі.
25
- - parseStartLog — Аналізує лог процесу `start` для виявлення статусу, помилок та кінця.
26
- - runWorkspaceStart — Запускає команду `start` у воркспейсі з обмеженим часом та визначає результат.
27
- - runStartCheckCli — Запускає CLI для сканування воркспейсів з `start` та індивідуального запуску воркспейсу з подальшим виводом результатів у JSON.
33
+ - classifyStartType — визначає, чи команда `start` належить до довготривалого процесу (серверу) чи одноразової дії (CLI).
34
+ - scanStartWorkspaces — переглядає монорепо, витягуючи команду `start`, її команду та тип для кожного воркспейсу.
35
+ - parseStartLog — витягує з логу стадії: готовність (сервер), перша помилка або фінальний результат.
36
+ - runWorkspaceStart — ініціює запуск `start` для одного воркспейсу з обмеженням часу та класифікує отриманий результат.
37
+ - runStartCheckCli — CLI-команда: команда `scan` генерує список воркспейсів зі `start`; команда `run <ws>` запускає один воркспейс і виводить класифікований результат у stdout.
28
38
 
29
39
  ## Гарантії поведінки
30
40
 
31
- - Скрипт детерміновано виконує перевірку запуску воркспейса.
32
- - Скрипт використовує `spawnSync` з таймаутом для запуску процесів.
33
- - Скрипт інтерпретує exit-коди та парсить логи.
34
- - Результат перевірки воркспейса представлений у форматі `[{workspace, name, hasStart, startCmd, type}]`.
35
- - У разі невдачі перевірки, скрипт повертає `false` або `null`.
36
- - Скрипт не кидає винятків.
37
- - Скрипт не використовує кешування.
38
- - Скрипт не взаємодіє з мережею.
39
- - Результат запуску воркспейса представлений у форматі `{workspace, type, exitCode, timedOut, status, ready, firstError, logTail, sideEffects}`.
40
- - `sideEffects` містить відкат стану воркспейса до його початкового стану перед запуском.
41
+ - Read-only: файл не виконує операцій запису у файлову систему.
42
+ - Перехоплює помилки і не пропускає винятків назовні (fail-safe).
43
+ - За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
44
+ - Не звертається до мережі.
@@ -1,33 +1,57 @@
1
+ ---
2
+ docgen:
3
+ source: npm/skills/taze/js/diff.mjs
4
+ crc: fe4d76ce
5
+ score: 100
6
+ ---
7
+
1
8
  # diff.mjs
2
9
 
3
10
  ## Огляд
4
11
 
5
- Файл `n-cursor taze diff` порівнює поточну версію `package.json` з її резервною копією (`package.json.taze-bak`) для виявлення змін залежностей. Він класифікує ці зміни за семантикою версій (major, minor, patch) та надає список оновлень, які потребують уваги. Це автоматизує процес, який раніше виконувався вручну, забезпечуючи швидкий та точний аналіз змін у залежностях монорепо.
12
+ parseVersion
13
+ Парсить версію з specifier.
14
+
15
+ isBreaking
16
+ Перевіряє перехід версій згідно з caret-семантикою.
17
+
18
+ diffPackageJson
19
+ Порівнює об'єкти package.json і повертає зміни залежностей.
20
+
21
+ collectTazeDiff
22
+ Збирає diff по всьому монорепо порівнюючи бекап та новий файл.
23
+
24
+ runTazeCli
25
+ Друкує результат diff у форматі JSON.
6
26
 
7
27
  ## Поведінка
8
28
 
9
- `parseVersion` парсує версійний specifier, ігноруючи range-префікси, і повертає об'єкт з major, minor та patch компонентами, або null, якщо spec не є semver.
10
- `isBreaking` визначає, чи є перехід від старої до нової версії "breaking" за caret-семантикою.
11
- `diffPackageJson` порівнює два об'єкти `package.json`, виявляє major-оновлення та підраховує minor/patch зміни для залежностей.
12
- `collectTazeDiff` збирає diff по всіх воркспейсах монорепо, порівнюючи `package.json` з бекапом, та повертає список major-оновлень, кількість minor/patch змін, загальну кількість порівняних воркспейсів та кількість воркспейсів, які були порівняні.
13
- `runTazeCli` запускає CLI `n-cursor taze diff`, збирає diff по воркспейсах, та виводить результат у форматі JSON.
29
+ parseVersion
30
+ Парсить версію з specifier
31
+
32
+ isBreaking
33
+ Перевіряє перехід версій згідно з caret-семантикою
34
+
35
+ diffPackageJson
36
+ Порівнює об'єкти package.json і повертає зміни залежностей
37
+
38
+ collectTazeDiff
39
+ Збирає diff по всьому монорепо порівнюючи бекап та новий файл
40
+
41
+ runTazeCli
42
+ Друкує результат diff у форматі JSON
14
43
 
15
44
  ## Публічний API
16
45
 
17
- - parseVersion — Розбирає semver-версію з специфікатора.
18
- - isBreaking — Визначає, чи є перехід breaking за caret-семантикою.
19
- - diffPackageJson — Порівнює два package.json-об'єкти та визначає зміни залежностей.
20
- - collectTazeDiff — Збирає diff для монорепо, порівнюючи package.json з резервною копією.
21
- - runTazeCli — Запускає CLI для виведення компактного JSON з інформацією про major-оновлення та кількість minor/patch.
46
+ parseVersion — витягує версію з specifier-а, ігноруючи range-префікси.
47
+ isBreaking — визначає, чи є перехід між версіями breaking за caret-семантикою (зміна найлівішої ненульової частини).
48
+ diffPackageJson — порівнює два package.json-об'єкти та генерує список змін залежностей.
49
+ collectTazeDiff — збирає різницю між версіями всього монорепо, порівнюючи `package.json` з його резервною копією у кожному воркспейсі.
50
+ runTazeCli — виконує команду `n-cursor taze diff` для виведення компактного JSON зі списком major-оновлень та лічилки minor/patch.
22
51
 
23
52
  ## Гарантії поведінки
24
53
 
25
- - Скрипт повертає `true`, якщо всі воркспейси монорепо успішно порівняні.
26
- - Скрипт повертає `false` та `null`, якщо виникла будь-яка помилка під час порівняння.
27
- - Результат порівняння завжди є `null`, якщо `package.json` або `package.json.taze-bak` не є валідним JSON.
28
- - Результат порівняння містить список major-оновлень, визначених за caret-семантикою.
29
- - Minor та patch оновлення не включаються в результат.
30
- - Результат завжди детермінований, тобто при однаковому вході скрипт завжди повертає однаковий результат.
31
- - Скрипт не використовує кешування.
32
- - Скрипт не кидає винятків.
33
- - Скрипт перехоплює помилки та повертає `false` та `null`.
54
+ - Read-only: файл не виконує операцій запису у файлову систему.
55
+ - Перехоплює помилки і не пропускає винятків назовні (fail-safe).
56
+ - За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
57
+ - Не звертається до мережі.
@@ -1,27 +0,0 @@
1
- ---
2
- docgen:
3
- source: npm/skills/doc-files/js/docgen-extract-anchors.mjs
4
- crc: e80e0827
5
- ---
6
-
7
- # docgen-extract-anchors
8
-
9
- ## Огляд
10
-
11
- Детермінований витяг «анкорів» — конкретних фрагментів коду, які модель зобов'язана згадати в документації, щоб не зісковзнути на generic-фрази. Анкори підставляються у промпти окремим блоком обов'язкового включення, а їх покриття перевіряється скорером.
12
-
13
- ## Поведінка
14
-
15
- 1. З тексту джерела збираються п'ять категорій анкорів: усі URL; експортовані константи-рядки з непорожнім значенням; маркери повідомлень про помилки виду `(rule.mdc)`; посилання на json-конфіги проєкту; code-block-приклади з провідного коментаря файлу (де автор зазвичай показує контракт).
16
- 2. Кожна категорія дедуплікується зі збереженням порядку появи.
17
- 3. Для промпта анкори форматуються в компактний текстовий блок з інструкціями, де саме їх згадати; якщо анкорів немає взагалі — блок не додається, щоб не вводити модель в оману «обов'язковими» полями.
18
-
19
- ## Публічний API
20
-
21
- - `extractAnchors` — текст джерела → категоризовані анкори.
22
- - `anchorsToPrompt` — анкори → текстовий блок для system-промпта або порожній рядок.
23
-
24
- ## Гарантії поведінки
25
-
26
- - Повністю детермінований і read-only; жодних LLM-викликів і мережі.
27
- - Працює по сирому тексту без AST: дешево і свідомо толерує надлишок (зайвий анкор — менша проблема, ніж пропущений).
@@ -1,29 +0,0 @@
1
- ---
2
- docgen:
3
- source: npm/skills/doc-files/js/docgen-extract.mjs
4
- crc: 26bb2901
5
- ---
6
-
7
- # docgen-extract
8
-
9
- ## Огляд
10
-
11
- Детермінований екстрактор фактів про кодовий файл (нуль токенів): з тексту джерела збирається факт-лист, на якому конвеєр будує промпти, маркери поведінки й список заборонених до згадки внутрішніх імен.
12
-
13
- ## Поведінка
14
-
15
- 1. Провідний блок-коментар файлу (до першого коду) стає «наміром файлу»; з документувальних коментарів перед кожним експортом витягуються опис, параметри та опис повернення, відкидаючи беззмістовні заглушки.
16
- 2. Збираються всі експортовані оголошення з безпосередньо передуючими їм коментарями.
17
- 3. Імпорти класифікуються на stdlib / npm / внутрішні; імена символів, імпортованих із внутрішніх модулів, складають список internalSymbols — модель не має згадувати їх у доці, а скорер штрафує за витік.
18
- 4. Маркери поведінки визначаються евристиками по тексту: read-only (немає запису у файлову систему), перехоплення помилок, повернення false/null при невдачі, звертання до мережі, кешування, свідомі пропуски шляхів.
19
- 5. Для розширень поза js/mjs/ts повертається позначка unsupported — конвеєр переходить на one-shot-шлях.
20
-
21
- ## Публічний API
22
-
23
- - `extractFacts` — головна точка: текст джерела + шлях → факт-лист `{header, exports, imports, internalSymbols, markers}` або `{unsupported: true}`.
24
-
25
- ## Гарантії поведінки
26
-
27
- - Повністю детермінований: однаковий вхід → однаковий факт-лист; жодних LLM-викликів і мережі.
28
- - Read-only: файл не виконує операцій запису у файлову систему.
29
- - Евристики свідомо толерують надлишок (зайвий маркер — менша проблема, ніж пропущений).
@@ -1,25 +0,0 @@
1
- ---
2
- docgen:
3
- source: npm/skills/doc-files/js/docgen-files-batch.mjs
4
- crc: 20a14675
5
- ---
6
-
7
- # docgen-files-batch
8
-
9
- ## Огляд
10
-
11
- CLI-оркестратор масової генерації файлових док (`doc-files gen` / `doc-files stamp`): черга, вибір цілей, preflight локального сервера, запис док зі свіжою контрольною сумою і degraded-маркером. Уся важка робота живе тут, а не в контексті агента.
12
-
13
- ## Поведінка
14
-
15
- 1. Дерево проєкту сканується, цілі обираються за режимом: за замовчуванням — застарілі доки; `--overwrite` — усі; `--retry-degraded` — свіжі за сумою, але з оцінкою нижче порогу. Зріз великого прогону — `--from N --limit M`.
16
- 2. Перед генерацією — preflight локального сервера: «сервер лежить», «модель не влазить у пам'ять зайнятої машини» чи «потрібен API-ключ» зупиняють прогін одним зрозумілим повідомленням замість лавини помилок по файлах.
17
- 3. Кожна ціль генерується локальним конвеєром; дока пишеться поряд із джерелом у `docs/` зі свіжою сумою. Якщо оцінка нижча за поріг — у frontmatter додаються оцінка й коди проблем, файл рахується як degraded.
18
- 4. Підсумок: кількість успішних, degraded і помилкових файлів; за наявності degraded — підказка про `--retry-degraded`. Помилка хоча б одного файлу → exit-код `1`.
19
- 5. `stamp` детерміновано перештамповує frontmatter у наявних доках без LLM (міграція док без суми), зберігаючи наявні поля якості.
20
-
21
- ## Гарантії поведінки
22
-
23
- - Жодних хмарних викликів: збій локальної генерації стає помилкою чи degraded-маркером, а не ескалацією.
24
- - Доки пишуться атомарно по файлу: успішні цілі не відкочуються через подальші збої.
25
- - Прогін ніколи не комітить — рішення про фіксацію приймає користувач.
@@ -1,30 +0,0 @@
1
- ---
2
- docgen:
3
- source: npm/skills/doc-files/js/docgen-gen.mjs
4
- crc: 2d6e5f79
5
- ---
6
-
7
- # docgen-gen
8
-
9
- ## Огляд
10
-
11
- Генератор однієї файлової доки local-only конвеєра: файл → українська поведінкова md-документація локальною моделлю, з детермінованим скорингом і позначкою degraded замість будь-яких хмарних ескалацій.
12
-
13
- ## Поведінка
14
-
15
- 1. З джерела детерміновано витягуються факти (намір файлу, експорти, маркери поведінки) та анкори (URL, константи, маркери помилок, конфіги, приклади з header-коментаря) — без жодного токена.
16
- 2. Для підтримуваних структур документ збирається посекційно окремими викликами моделі: «Огляд» — лише з фактів, «Поведінка» — єдина секція з кодом у вікні, «Публічний API» — зі списку експортів; «Гарантії поведінки» — детермінований шаблон із маркерів без LLM. Для непідтримуваних структур (`vue`/`py` до появи юніт-шару) — один виклик на весь документ без скорингу.
17
- 3. Чорнетки секцій проходять детермінований пост-лінт (зрізання сигнатур, обгорток, випадкових заголовків); найвразливіші секції — один цикл критика-редактора.
18
- 4. Зібраний документ оцінюється детермінованим скорером (наявність огляду, змістовність поведінки, галюцинація кешу, витік внутрішніх імен). Якщо оцінка нижча за поріг — один повторний прогін з вищою температурою, перемагає кращий за оцінкою (вимикається `N_CURSOR_DOCGEN_BEST_OF=0`).
19
- 5. Результат повертається з оцінкою, списком проблем і прапором degraded; рішення про повторну генерацію приймає batch-обгортка або користувач — конвеєр ніколи не звертається до хмари.
20
-
21
- ## Публічний API
22
-
23
- - `generateDoc` — головна точка: шлях файлу → `{ md, ms, score, issues, degraded, model }`.
24
- - `DEFAULT_LOCAL_MODEL` — модель конвеєра: `N_CURSOR_DOCGEN_MODEL` → каскад локальних тирів → локальний omlx-дефолт напряму.
25
-
26
- ## Гарантії поведінки
27
-
28
- - Local-only: жодних хмарних викликів і pre-route за складністю — будь-який файл генерується локальною моделлю.
29
- - Скоринг і пост-лінт детерміновані: однаковий вхід → однакова оцінка.
30
- - Помилка транспорту прокидається назовні — не маскується під degraded.