@nitra/cursor 12.7.0 → 12.8.1
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/.pi-template/extensions/n-cursor-adr/docs/index.md +2 -2
- package/CHANGELOG.md +21 -5
- package/bin/n-cursor.js +1 -1
- package/docs/index.md +3 -3
- package/docs/stryker.config.md +3 -3
- package/lib/docs/index.md +5 -5
- package/lib/docs/llm.md +4 -4
- package/package.json +2 -2
- package/rules/abie/docs/fix.md +8 -8
- package/rules/abie/docs/index.md +3 -3
- package/rules/abie/js/docs/index.md +6 -6
- package/rules/abie/lib/docs/index.md +9 -9
- package/rules/bun/docs/fix.md +5 -5
- package/rules/bun/docs/index.md +3 -3
- package/rules/bun/js/docs/index.md +2 -2
- package/rules/capacitor/docs/fix.md +10 -10
- package/rules/capacitor/docs/index.md +3 -3
- package/rules/capacitor/js/docs/index.md +2 -2
- package/rules/changelog/docs/fix.md +11 -11
- package/rules/changelog/docs/index.md +3 -3
- package/rules/changelog/js/docs/consistency.md +12 -12
- package/rules/changelog/js/docs/index.md +2 -2
- package/rules/changelog/lib/docs/index.md +2 -2
- package/rules/ci4/docs/fix.md +4 -4
- package/rules/ci4/docs/index.md +3 -3
- package/rules/ci4/js/docs/index.md +2 -2
- package/rules/doc-files/docs/index.md +3 -3
- package/rules/doc-files/js/docgen-crc.mjs +2 -8
- package/rules/doc-files/js/docgen-extract.mjs +5 -3
- package/rules/doc-files/js/docgen-files-batch.mjs +18 -3
- package/rules/doc-files/js/docgen-gen.mjs +11 -3
- package/rules/doc-files/js/docgen-judge-measure.mjs +67 -18
- package/rules/doc-files/js/docgen-judge.mjs +8 -1
- package/rules/doc-files/js/docgen-scan.mjs +14 -4
- package/rules/doc-files/js/docs/docgen-crc.md +25 -14
- package/rules/doc-files/js/docs/docgen-extract.md +16 -14
- package/rules/doc-files/js/docs/docgen-files-batch.md +11 -11
- package/rules/doc-files/js/docs/docgen-gen.md +15 -26
- package/rules/doc-files/js/docs/docgen-judge-measure.md +14 -12
- package/rules/doc-files/js/docs/docgen-judge.md +13 -11
- package/rules/doc-files/js/docs/docgen-scan.md +28 -27
- package/rules/doc-files/js/docs/index.md +0 -1
- package/rules/docker/docs/fix.md +6 -6
- package/rules/docker/docs/index.md +3 -3
- package/rules/docker/js/docs/index.md +2 -2
- package/rules/docker/lib/docs/docker-hadolint.md +2 -2
- package/rules/docker/lib/docs/index.md +5 -5
- package/rules/efes/docs/fix.md +8 -8
- package/rules/efes/docs/index.md +3 -3
- package/rules/feedback/docs/fix.md +5 -5
- package/rules/feedback/docs/index.md +3 -3
- package/rules/ga/docs/fix.md +5 -5
- package/rules/ga/docs/index.md +3 -3
- package/rules/ga/js/docs/index.md +3 -3
- package/rules/graphql/docs/fix.md +8 -8
- package/rules/graphql/docs/index.md +3 -3
- package/rules/graphql/docs/main.md +8 -8
- package/rules/graphql/js/docs/index.md +2 -2
- package/rules/graphql/lib/docs/index.md +2 -2
- package/rules/hasura/docs/fix.md +11 -11
- package/rules/hasura/docs/index.md +3 -3
- package/rules/hasura/js/docs/index.md +2 -2
- package/rules/image-avif/docs/fix.md +3 -3
- package/rules/image-avif/docs/index.md +3 -3
- package/rules/image-avif/js/docs/avif_generation.md +6 -6
- package/rules/image-avif/js/docs/index.md +2 -2
- package/rules/image-compress/docs/fix.md +2 -2
- package/rules/image-compress/docs/index.md +3 -3
- package/rules/image-compress/js/docs/index.md +3 -3
- package/rules/{js-lint → js}/docs/fix.md +9 -9
- package/rules/{js-lint → js}/docs/index.md +3 -3
- package/rules/{js-lint → js}/js/docs/check.md +5 -5
- package/rules/{js-lint → js}/js/docs/index.md +4 -4
- package/rules/js-bun-db/docs/fix.md +5 -5
- package/rules/js-bun-db/docs/index.md +3 -3
- package/rules/js-bun-db/js/docs/index.md +2 -2
- package/rules/js-bun-db/lib/docs/index.md +2 -2
- package/rules/js-bun-redis/docs/fix.md +6 -6
- package/rules/js-bun-redis/docs/index.md +3 -3
- package/rules/js-bun-redis/js/docs/index.md +2 -2
- package/rules/js-bun-redis/lib/docs/index.md +2 -2
- package/rules/js-lint-ci/docs/fix.md +3 -3
- package/rules/js-lint-ci/docs/index.md +3 -3
- package/rules/js-lint-ci/js/docs/index.md +2 -2
- package/rules/js-mssql/docs/fix.md +5 -5
- package/rules/js-mssql/docs/index.md +3 -3
- package/rules/js-mssql/js/docs/index.md +2 -2
- package/rules/js-mssql/lib/docs/index.md +2 -2
- package/rules/js-run/docs/fix.md +8 -8
- package/rules/js-run/docs/index.md +3 -3
- package/rules/js-run/js/docs/index.md +2 -2
- package/rules/js-run/lib/docs/index.md +7 -7
- package/rules/k8s/docs/fix.md +4 -4
- package/rules/k8s/docs/index.md +3 -3
- package/rules/k8s/js/docs/index.md +3 -3
- package/rules/nginx-default-tpl/docs/fix.md +7 -7
- package/rules/nginx-default-tpl/docs/index.md +3 -3
- package/rules/nginx-default-tpl/js/docs/index.md +2 -2
- package/rules/nginx-default-tpl/js/docs/template.md +2 -2
- package/rules/npm-module/docs/fix.md +8 -8
- package/rules/npm-module/docs/index.md +3 -3
- package/rules/npm-module/js/docs/header_doc_pointer.md +23 -13
- package/rules/npm-module/js/docs/index.md +5 -5
- package/rules/npm-module/js/docs/rule_meta.md +6 -6
- package/rules/npm-module/js/header_doc_pointer.mjs +1 -3
- package/rules/php/docs/fix.md +6 -6
- package/rules/php/docs/index.md +3 -3
- package/rules/php/js/docs/index.md +3 -3
- package/rules/python/docs/fix.md +11 -11
- package/rules/python/docs/index.md +3 -3
- package/rules/python/docs/main.md +10 -10
- package/rules/python/js/docs/index.md +3 -3
- package/rules/python/main.mjs +2 -1
- package/rules/rego/docs/fix.md +5 -5
- package/rules/rego/docs/index.md +3 -3
- package/rules/rego/js/docs/index.md +3 -3
- package/rules/release/docs/index.md +5 -5
- package/rules/release/lib/docs/index.md +4 -4
- package/rules/rust/docs/fix.md +4 -4
- package/rules/rust/docs/index.md +3 -3
- package/rules/rust/docs/main.md +7 -7
- package/rules/rust/js/docs/index.md +3 -3
- package/rules/rust/lib/docs/index.md +2 -2
- package/rules/rust/main.mjs +7 -1
- package/rules/security/docs/fix.md +6 -6
- package/rules/security/docs/index.md +3 -3
- package/rules/security/js/docs/index.md +4 -4
- package/rules/style-lint/docs/fix.md +3 -3
- package/rules/style-lint/docs/index.md +3 -3
- package/rules/style-lint/js/docs/index.md +3 -3
- package/rules/tauri/docs/fix.md +11 -11
- package/rules/tauri/docs/index.md +3 -3
- package/rules/tauri/js/docs/index.md +3 -3
- package/rules/test/docs/fix.md +5 -5
- package/rules/test/docs/index.md +3 -3
- package/rules/test/js/data/stryker_config/docs/index.md +4 -4
- package/rules/test/js/data/vitest_config/docs/index.md +2 -2
- package/rules/test/js/docs/index.md +7 -7
- package/rules/text/docs/fix.md +11 -11
- package/rules/text/docs/index.md +3 -3
- package/rules/text/docs/main.md +8 -8
- package/rules/text/js/cspell-fix.mjs +7 -2
- package/rules/text/js/docs/cspell-fix.md +8 -8
- package/rules/text/js/docs/index.md +7 -8
- package/rules/text/js/docs/run-v8r.md +3 -3
- package/rules/text/main.mjs +3 -1
- package/rules/tool-surface/docs/index.md +3 -3
- package/rules/tool-surface/meta.json +6 -1
- package/rules/vue/docs/fix.md +6 -6
- package/rules/vue/docs/index.md +3 -3
- package/rules/vue/js/docs/index.md +2 -2
- package/rules/vue/lib/docs/index.md +2 -2
- package/rules/worktree/docs/fix.md +11 -11
- package/rules/worktree/docs/index.md +3 -3
- package/scripts/coverage-classify/docs/index.md +6 -6
- package/scripts/dispatcher/docs/index.md +2 -2
- package/scripts/docs/index.md +16 -16
- package/scripts/lib/docs/index.md +36 -36
- package/scripts/lib/docs/run-lint.md +7 -7
- package/scripts/lib/docs/run-standard-lint.md +7 -5
- package/scripts/lib/fix/analyze-escalation.mjs +4 -1
- package/scripts/lib/fix/docs/analyze-escalation.md +28 -15
- package/scripts/lib/fix/docs/index.md +10 -10
- package/scripts/lib/fix/docs/orchestrator.md +14 -15
- package/scripts/lib/fix/docs/run-conformance-check.md +4 -3
- package/scripts/lib/fix/docs/run-fix-check.md +3 -3
- package/scripts/lib/fix/docs/t0.md +8 -7
- package/scripts/lib/fix/orchestrator.mjs +26 -3
- package/scripts/lib/fix/t0.mjs +4 -1
- package/scripts/lib/run-lint.mjs +1 -3
- package/scripts/utils/docs/index.md +14 -14
- package/skills/doc-aggregate/js/docs/index.md +3 -3
- package/skills/doc-files/.changes/260612-0002.md +1 -0
- package/skills/doc-files/.changes/260612-0006.md +1 -0
- package/skills/doc-files/.changes/260612-0008.md +1 -0
- package/skills/doc-files/.changes/260612-0012.md +1 -0
- package/skills/doc-files/.changes/260612-0031.md +1 -0
- package/skills/doc-files/.changes/260612-0036.md +1 -0
- package/skills/doc-files/.changes/260612-0114.md +1 -0
- package/skills/start-check/js/docs/index.md +2 -2
- package/skills/taze/js/docs/index.md +2 -2
- package/types/bin/n-cursor.d.ts +1 -1
- /package/rules/{js-lint → js}/coverage/coverage.mjs +0 -0
- /package/rules/{js-lint → js}/docs/main.md +0 -0
- /package/rules/{js-lint → js}/js/check.mjs +0 -0
- /package/rules/{js-lint → js}/js/data/tooling/knip-canonical.json +0 -0
- /package/rules/{js-lint → js}/js/data/tooling/oxlint-canonical.json +0 -0
- /package/rules/{js-lint → js}/js/docs/lint-findings.md +0 -0
- /package/rules/{js-lint → js}/js/docs/tooling.md +0 -0
- /package/rules/{js-lint → js}/js/docs/utils_imports.md +0 -0
- /package/rules/{js-lint → js}/js/lint-findings.mjs +0 -0
- /package/rules/{js-lint → js}/js/tooling.mjs +0 -0
- /package/rules/{js-lint → js}/js/utils_imports.mjs +0 -0
- /package/rules/{js-lint/js-lint.mdc → js/js.mdc} +0 -0
- /package/rules/{js-lint → js}/main.mjs +0 -0
- /package/rules/{js-lint → js}/meta.json +0 -0
- /package/rules/{js-lint → js}/policy/jscpd/jscpd.rego +0 -0
- /package/rules/{js-lint → js}/policy/jscpd/target.json +0 -0
- /package/rules/{js-lint → js}/policy/jscpd/template/.jscpd.json.snippet.json +0 -0
- /package/rules/{js-lint → js}/policy/lint_js_yml/lint_js_yml.rego +0 -0
- /package/rules/{js-lint → js}/policy/lint_js_yml/target.json +0 -0
- /package/rules/{js-lint → js}/policy/lint_js_yml/template/lint-js.yml.snippet.yml +0 -0
- /package/rules/{js-lint → js}/policy/package_json/package_json.rego +0 -0
- /package/rules/{js-lint → js}/policy/package_json/target.json +0 -0
- /package/rules/{js-lint → js}/policy/package_json/template/package.json.snippet.json +0 -0
- /package/rules/{js-lint → js}/policy/vscode_extensions/target.json +0 -0
- /package/rules/{js-lint → js}/policy/vscode_extensions/template/extensions.json.snippet.json +0 -0
- /package/rules/{js-lint → js}/policy/vscode_extensions/vscode_extensions.rego +0 -0
|
@@ -17,8 +17,8 @@ docgen:
|
|
|
17
17
|
4. Запис JSONL файлу. Запис серіалізованого тексту у тимчасову директорію.
|
|
18
18
|
5. Формування вхідного навантаження. Створення JSON об'єкта для передачі у башку.
|
|
19
19
|
6. Передача виконання скриптів. Паралельний запуск двох окремих скриптів.
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
а. Виконання хука capture.
|
|
21
|
+
б. Виконання хука normalize.
|
|
22
22
|
7. Обробка результатів. Очікування завершення обох виконання. Помилки обробляються у загальному режимі.
|
|
23
23
|
|
|
24
24
|
## Гарантії поведінки
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [12.8.1] - 2026-06-22
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- ♻️ refactor(docs): Оновлення логіки та формату в документації
|
|
8
|
+
|
|
9
|
+
## [12.8.0] - 2026-06-21
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- doc-files: orphan-detect і auto-purge — `lint-doc-files` і `fix-doc-files` тепер виявляють і видаляють `docs/<stem>.md` чиї source-файли більше не існують
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- Переміщено логіку linting до `js` та оновив `n-cursor.js
|
|
18
|
+
|
|
3
19
|
## [12.7.0] - 2026-06-21
|
|
4
20
|
|
|
5
21
|
### Added
|
|
@@ -149,7 +165,7 @@
|
|
|
149
165
|
|
|
150
166
|
### Changed
|
|
151
167
|
|
|
152
|
-
- Конформність-селекція: .n-cursor.json — єдине джерело правди. resolveCheckRuleIds бере активні правила прямо з конфіга (available ∩ enabled), .cursor/rules
|
|
168
|
+
- Конформність-селекція: .n-cursor.json — єдине джерело правди. resolveCheckRuleIds бере активні правила прямо з конфіга (available ∩ enabled), .cursor/rules/\*.mdc лишається лише fallback'ом коли конфіга нема. Прибрано дрейф «правило enabled, але .mdc нема → тихо пропущено». Per-rule whitelist-гейт у runRuleCli видалено як дубль — гейтинг живе виключно у селекції.
|
|
153
169
|
|
|
154
170
|
## [10.0.1] - 2026-06-14
|
|
155
171
|
|
|
@@ -161,7 +177,7 @@
|
|
|
161
177
|
|
|
162
178
|
### Changed
|
|
163
179
|
|
|
164
|
-
- Інлайн _fix-check/fix-t0 у прямі функції — видалено внутрішні subcommand'и. runFixCheck (scripts/lib/fix/run-fix-check) + listProjectRulesMdcFiles винесено з bin; orchestrator/t0/PostToolUse-хук/lint-конформність кличуть прямо (без subprocess-обгортки). Per-rule ізоляція збережена
|
|
180
|
+
- Інлайн \_fix-check/fix-t0 у прямі функції — видалено внутрішні subcommand'и. runFixCheck (scripts/lib/fix/run-fix-check) + listProjectRulesMdcFiles винесено з bin; orchestrator/t0/PostToolUse-хук/lint-конформність кличуть прямо (без subprocess-обгортки). Per-rule ізоляція збережена
|
|
165
181
|
|
|
166
182
|
## [9.4.0] - 2026-06-14
|
|
167
183
|
|
|
@@ -221,7 +237,7 @@
|
|
|
221
237
|
|
|
222
238
|
### Removed
|
|
223
239
|
|
|
224
|
-
- Видалено команди fix/check/fix-run; рух-движок конформності переміщено skills/fix/js→scripts/lib/fix і поглинуто в lint. PostToolUse-хук → read-only детект усіх правил (без роутингу). /n-fix → делегат на /n-lint. fix-t0
|
|
240
|
+
- Видалено команди fix/check/fix-run; рух-движок конформності переміщено skills/fix/js→scripts/lib/fix і поглинуто в lint. PostToolUse-хук → read-only детект усіх правил (без роутингу). /n-fix → делегат на /n-lint. fix-t0/\_fix-check лишаються внутрішніми фазами движка
|
|
225
241
|
|
|
226
242
|
## [6.0.0] - 2026-06-14
|
|
227
243
|
|
|
@@ -254,7 +270,7 @@
|
|
|
254
270
|
|
|
255
271
|
### Changed
|
|
256
272
|
|
|
257
|
-
- ✨ feat(npm/skills/doc-files): doc-files: підтримка Rust (.rs) —
|
|
273
|
+
- ✨ feat(npm/skills/doc-files): doc-files: підтримка Rust (.rs) — SOURCE\_…
|
|
258
274
|
|
|
259
275
|
## [5.3.2] - 2026-06-11
|
|
260
276
|
|
|
@@ -290,7 +306,7 @@
|
|
|
290
306
|
|
|
291
307
|
### Fixed
|
|
292
308
|
|
|
293
|
-
- lint: санація шарів, що ховалися за першим падінням oxlint — повний bun run lint доведено до lint-js/style зелених: JSDoc/regex/sonarjs фікси у ~25 файлах, slow-regex обмежено bounded-квантифікаторами, eslint ignore для згенерованих docs
|
|
309
|
+
- lint: санація шарів, що ховалися за першим падінням oxlint — повний bun run lint доведено до lint-js/style зелених: JSDoc/regex/sonarjs фікси у ~25 файлах, slow-regex обмежено bounded-квантифікаторами, eslint ignore для згенерованих docs/\*.md, jscpd ignore (.git, COVERAGE.md, docs, відомі легасі-клони), knip ignoreBinaries (pi/claude/fix-t0), stylelint/cspell ignore згенерованих артефактів; docgen-ignore у doc-aggregate став re-export з doc-files
|
|
294
310
|
|
|
295
311
|
## [5.1.0] - 2026-06-10
|
|
296
312
|
|
package/bin/n-cursor.js
CHANGED
|
@@ -623,7 +623,7 @@ function buildClaudeLintParallelismSectionLines() {
|
|
|
623
623
|
'',
|
|
624
624
|
'## Лінт і ESLint (паралелізм)',
|
|
625
625
|
'',
|
|
626
|
-
|
|
626
|
+
"Паралельний лінт по **різних** файлах — **дозволено**: диз'юнктні набори (per-file `lint` на змінених vs origin) не конфліктують і не перевантажують диск/CPU. Серіалізувати треба лише **whole-tree** прогони того самого корпусу (`bun run lint`, `n-cursor lint --full` по всьому репо) — щоб не дублювати важкий full-scan. Деталі: `.cursor/skills/n-lint/SKILL.md`.",
|
|
627
627
|
''
|
|
628
628
|
]
|
|
629
629
|
}
|
package/docs/index.md
CHANGED
|
@@ -6,7 +6,7 @@ resource: npm/
|
|
|
6
6
|
|
|
7
7
|
# npm
|
|
8
8
|
|
|
9
|
-
| Файл
|
|
10
|
-
|
|
9
|
+
| Файл | Тип |
|
|
10
|
+
| --------------------------------------- | --------- |
|
|
11
11
|
| [stryker.config.mjs](stryker.config.md) | JS Module |
|
|
12
|
-
| [vitest.config.js](vitest.config.md)
|
|
12
|
+
| [vitest.config.js](vitest.config.md) | JS Module |
|
package/docs/stryker.config.md
CHANGED
|
@@ -22,9 +22,9 @@ docgen:
|
|
|
22
22
|
6. Вказує ім'я файлу для JSON-звіту.
|
|
23
23
|
7. Вмикає функціонал збереження результатів між запусками, використовуючи файл `incremental.json`.
|
|
24
24
|
8. Визначає список файлів, які підлягають мутації:
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
- Файли у директорії `scripts`.
|
|
26
|
+
- Файли у директорії `rules`.
|
|
27
|
+
- Файли у директорії `bin`.
|
|
28
28
|
9. Виключає з мутації файли у директоріях `tests`, `__fixtures__`, `fixtures`, `data`, `template`, `templates`.
|
|
29
29
|
10. Виключає з мутації файли у директорії `data`, крім файлу `stryker-vue-macros-ignorer.mjs` у директорії `rules/test/js/data/stryker_config/`.
|
|
30
30
|
|
package/lib/docs/index.md
CHANGED
|
@@ -6,9 +6,9 @@ resource: npm/lib/
|
|
|
6
6
|
|
|
7
7
|
# npm/lib
|
|
8
8
|
|
|
9
|
-
| Файл
|
|
10
|
-
|
|
11
|
-
| [llm.mjs](llm.md)
|
|
12
|
-
| [models.mjs](models.md)
|
|
9
|
+
| Файл | Тип |
|
|
10
|
+
| ------------------------------- | --------- |
|
|
11
|
+
| [llm.mjs](llm.md) | JS Module |
|
|
12
|
+
| [models.mjs](models.md) | JS Module |
|
|
13
13
|
| [omlx-trace.mjs](omlx-trace.md) | JS Module |
|
|
14
|
-
| [omlx.mjs](omlx.md)
|
|
14
|
+
| [omlx.mjs](omlx.md) | JS Module |
|
package/lib/docs/llm.md
CHANGED
|
@@ -25,10 +25,10 @@ omlxHealthCheck
|
|
|
25
25
|
pickBackend — Бекенд для model-id: `omlx` — прямий HTTP, `pi` — CLI.
|
|
26
26
|
callLlm — Універсальний виклик LLM з маршрутизацією за префіксом model-id і постійне відстеження (wire-trace) обох каналів.
|
|
27
27
|
omlxHealthCheck — Перевірка omlx перед масовим прогоном через мінімальний чат-виклик (`max_tokens: 1`). Розрізняє стани:
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
down — Сервер не відповідає (не запущений / не той порт).
|
|
29
|
+
memory-guard — Модель не влазить у динамічну стелю пам'яті зайнятої машини — відкладає прогін.
|
|
30
|
+
auth — Сервер вимагає API-ключ — виставляє `N_CURSOR_OMLX_KEY`.
|
|
31
|
+
error — Інша помилка API.
|
|
32
32
|
Порожній контент відповіді — означає, що сервер живий і модель завантажена.
|
|
33
33
|
|
|
34
34
|
## Гарантії поведінки
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nitra/cursor",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.8.1",
|
|
4
4
|
"description": "CLI для завантаження cursor-правил (префікс n-) у локальний репозиторій",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cli",
|
|
@@ -68,4 +68,4 @@
|
|
|
68
68
|
"skills": "skills",
|
|
69
69
|
"extensions": ".pi-template/extensions"
|
|
70
70
|
}
|
|
71
|
-
}
|
|
71
|
+
}
|
package/rules/abie/docs/fix.md
CHANGED
|
@@ -14,16 +14,16 @@ docgen:
|
|
|
14
14
|
## Поведінка
|
|
15
15
|
|
|
16
16
|
1. Запуск правила.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
- Приймає контекст прогону.
|
|
18
|
+
- Виконує застосування JS-занепокоєних.
|
|
19
|
+
- Застосовує політику.
|
|
20
|
+
- Генерує посилання MDC.
|
|
21
|
+
- Повертає результат прогону.
|
|
22
22
|
|
|
23
23
|
2. Виконання у режимі CLI.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
- Виконується при запуску через CLI.
|
|
25
|
+
- Виконує повний еквівалент команди `npx @nitra/cursor fix <id>`.
|
|
26
|
+
- Повертає код виходу.
|
|
27
27
|
|
|
28
28
|
## Публічний API
|
|
29
29
|
|
package/rules/abie/docs/index.md
CHANGED
|
@@ -6,11 +6,11 @@ resource: npm/rules/abie/js/
|
|
|
6
6
|
|
|
7
7
|
# npm/rules/abie/js
|
|
8
8
|
|
|
9
|
-
| Файл
|
|
10
|
-
|
|
11
|
-
| [applies.mjs](applies.md)
|
|
12
|
-
| [env_dns.mjs](env_dns.md)
|
|
9
|
+
| Файл | Тип |
|
|
10
|
+
| ------------------------------------------- | --------- |
|
|
11
|
+
| [applies.mjs](applies.md) | JS Module |
|
|
12
|
+
| [env_dns.mjs](env_dns.md) | JS Module |
|
|
13
13
|
| [firebase_hosting.mjs](firebase_hosting.md) | JS Module |
|
|
14
|
-
| [hc_pairing.mjs](hc_pairing.md)
|
|
15
|
-
| [ua_http_route.mjs](ua_http_route.md)
|
|
14
|
+
| [hc_pairing.mjs](hc_pairing.md) | JS Module |
|
|
15
|
+
| [ua_http_route.mjs](ua_http_route.md) | JS Module |
|
|
16
16
|
| [ua_node_selector.mjs](ua_node_selector.md) | JS Module |
|
|
@@ -6,13 +6,13 @@ resource: npm/rules/abie/lib/
|
|
|
6
6
|
|
|
7
7
|
# npm/rules/abie/lib
|
|
8
8
|
|
|
9
|
-
| Файл
|
|
10
|
-
|
|
11
|
-
| [enabled.mjs](enabled.md)
|
|
12
|
-
| [env-dns.mjs](env-dns.md)
|
|
13
|
-
| [hc-yaml.mjs](hc-yaml.md)
|
|
14
|
-
| [http-route.mjs](http-route.md)
|
|
15
|
-
| [k8s-tree.mjs](k8s-tree.md)
|
|
9
|
+
| Файл | Тип |
|
|
10
|
+
| ----------------------------------------------------- | --------- |
|
|
11
|
+
| [enabled.mjs](enabled.md) | JS Module |
|
|
12
|
+
| [env-dns.mjs](env-dns.md) | JS Module |
|
|
13
|
+
| [hc-yaml.mjs](hc-yaml.md) | JS Module |
|
|
14
|
+
| [http-route.mjs](http-route.md) | JS Module |
|
|
15
|
+
| [k8s-tree.mjs](k8s-tree.md) | JS Module |
|
|
16
16
|
| [kustomization-patches.mjs](kustomization-patches.md) | JS Module |
|
|
17
|
-
| [overlay-paths.mjs](overlay-paths.md)
|
|
18
|
-
| [yaml.mjs](yaml.md)
|
|
17
|
+
| [overlay-paths.mjs](overlay-paths.md) | JS Module |
|
|
18
|
+
| [yaml.mjs](yaml.md) | JS Module |
|
package/rules/bun/docs/fix.md
CHANGED
|
@@ -12,11 +12,11 @@ docgen:
|
|
|
12
12
|
## Поведінка
|
|
13
13
|
|
|
14
14
|
1. Запуск правила.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
- Приймає контекст прогону.
|
|
16
|
+
- Виконує застосування JS-занепокоєних.
|
|
17
|
+
- Застосовує політику.
|
|
18
|
+
- Генерує посилання MDC.
|
|
19
|
+
- Повертає результат прогону.
|
|
20
20
|
|
|
21
21
|
## Публічний API
|
|
22
22
|
|
package/rules/bun/docs/index.md
CHANGED
|
@@ -12,17 +12,17 @@ docgen:
|
|
|
12
12
|
## Поведінка
|
|
13
13
|
|
|
14
14
|
1. Запуск правила.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
- Приймає контекст прогону.
|
|
16
|
+
- Виконує застосування JS-занепокоєних.
|
|
17
|
+
- Застосовує політику.
|
|
18
|
+
- Генерує посилання MDC.
|
|
19
|
+
- Повертає результат.
|
|
20
20
|
2. Запуск у режимі CLI.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
- Виконується як повний еквівалент команди `npx @nitra/cursor fix <id>`.
|
|
22
|
+
- Виконує завантаження конфігурації.
|
|
23
|
+
- Виконує перевірку дозволених записів.
|
|
24
|
+
- Генерує зведену інформацію.
|
|
25
|
+
- Використовує `process.exitCode` для визначення виходу.
|
|
26
26
|
|
|
27
27
|
## Публічний API
|
|
28
28
|
|
|
@@ -12,18 +12,18 @@ docgen:
|
|
|
12
12
|
## Поведінка
|
|
13
13
|
|
|
14
14
|
1. Запуск правила.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
- Приймає контекст прогону.
|
|
16
|
+
- Виконує застосування JS-занепокоєних.
|
|
17
|
+
- Застосовує політику.
|
|
18
|
+
- Генерує посилання MDC.
|
|
19
|
+
- Повертає результат прогону.
|
|
20
20
|
2. Виконання у режимі CLI.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
- Виконується як окремий скрипт.
|
|
22
|
+
- Еквівалент команди `npx @nitra/cursor fix <id>`.
|
|
23
|
+
- Виконує завантаження конфігурації.
|
|
24
|
+
- Виконує перевірку дозволених елементів.
|
|
25
|
+
- Генерує зведену інформацію.
|
|
26
|
+
- Виконує повний еквівалент `fix.mjs`.
|
|
27
27
|
|
|
28
28
|
## Публічний API
|
|
29
29
|
|
|
@@ -16,19 +16,19 @@ docgen:
|
|
|
16
16
|
3. Зчитує всі кореневі каталоги проектів у монорепо.
|
|
17
17
|
4. Класифікує кожен проект як публікувальний (registryPublishable) або локальний.
|
|
18
18
|
5. Для кожного публікувального проекту виконує перевірку:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
а. Зчитує маніфест проекту.
|
|
20
|
+
б. Якщо у маніфесті відсутнє ім'я або поле version, фіксує помилку.
|
|
21
|
+
в. Якщо є change-файл(и) у .changes/, фіксує успіх, оскільки bump зробить CI (n-changelog.mdc), і перевіряє наявність "CHANGELOG.md" у файлах проекту.
|
|
22
|
+
г. Якщо немає change-файлу, визначає точку порівняння на основі поточної гілки.
|
|
23
|
+
д. Порівнює версію в маніфесті з опублікованою версією (за допомогою npm view або запиту до https://pypi.org/pypi/).
|
|
24
|
+
е. Якщо версія в маніфесті випереджає опубліковану, фіксує помилку, оскільки ручний bump поза CI заборонений.
|
|
25
|
+
ж. Якщо версія в маніфесті позаду опублікованої, фіксує успіх, оскільки це відставання локального репозиторію від реєстру.
|
|
26
|
+
з. Якщо версії збігаються, перевіряє змінений код відносно точки порівняння. Якщо зміни є, але немає change-файлу, викликає механізм фіксації або фіксує помилку, надаючи підказку для використання команди `npx @nitra/cursor change`.
|
|
27
27
|
6. Для кожного локального проекту виконує перевірку:
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
а. Зчитує маніфест проекту.
|
|
29
|
+
б. Визначає точку порівняння на основі поточної гілки.
|
|
30
|
+
в. Перевіряє, чи є релевантні зміни у проекті відносно точки порівняння.
|
|
31
|
+
г. Якщо зміни є, але немає change-файлу, викликає механізм фіксації або фіксує помилку, надаючи підказку для використання команди `npx @nitra/cursor change`.
|
|
32
32
|
7. Повертає кінцевий код виходу, що відображає результат перевірки.
|
|
33
33
|
|
|
34
34
|
## Гарантії поведінки
|
package/rules/ci4/docs/fix.md
CHANGED
|
@@ -13,12 +13,12 @@ docgen:
|
|
|
13
13
|
## Поведінка
|
|
14
14
|
|
|
15
15
|
1. Запуск правила.
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
- Виклик runStandardRule з контекстом.
|
|
17
|
+
- Повернення результату.
|
|
18
18
|
|
|
19
19
|
2. Запуск правила у режимі CLI.
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
- Виклик runRuleCli з директорією модуля.
|
|
21
|
+
- Вихід з процесом залежно від результату.
|
|
22
22
|
|
|
23
23
|
## Публічний API
|
|
24
24
|
|
package/rules/ci4/docs/index.md
CHANGED
|
@@ -74,7 +74,7 @@ const EXT_TYPES = {
|
|
|
74
74
|
'.ts': 'TS Module',
|
|
75
75
|
'.vue': 'Vue Component',
|
|
76
76
|
'.py': 'Python Module',
|
|
77
|
-
'.rs': 'Rust Module'
|
|
77
|
+
'.rs': 'Rust Module'
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
/**
|
|
@@ -86,8 +86,6 @@ function typeForSource(sourcePath) {
|
|
|
86
86
|
return EXT_TYPES[extname(sourcePath).toLowerCase()] ?? 'Source File'
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
|
|
90
|
-
|
|
91
89
|
/**
|
|
92
90
|
* Нормалізує issues до YAML-безпечних кодів: бере фрагмент до першого пробілу
|
|
93
91
|
* (зрізає людиночитні хвости помилок), відкидає порожні, обмежує кількість.
|
|
@@ -112,11 +110,7 @@ function issueCodes(issues) {
|
|
|
112
110
|
* @returns {string} OKF-сумісний YAML frontmatter
|
|
113
111
|
*/
|
|
114
112
|
export function buildDocFrontmatter(source, crc, quality = null, model = null) {
|
|
115
|
-
const okfLines = [
|
|
116
|
-
`type: ${typeForSource(source)}`,
|
|
117
|
-
`title: ${basename(source)}`,
|
|
118
|
-
`resource: ${source}`,
|
|
119
|
-
]
|
|
113
|
+
const okfLines = [`type: ${typeForSource(source)}`, `title: ${basename(source)}`, `resource: ${source}`]
|
|
120
114
|
|
|
121
115
|
// docgen namespace: лише CRC-механіка і quality (source перенесено у resource)
|
|
122
116
|
const docgenLines = [`crc: ${crc}`]
|
|
@@ -48,11 +48,13 @@ const FALSY_RETURN_RE = /catch[\s\S]{0,400}?return\s+(false|null|''|"")/
|
|
|
48
48
|
// Мережа: окрім явного fetch/http, ловимо абстраговані клієнти (graphql/db/rpc/
|
|
49
49
|
// octokit/.request/.query). Хибний false-negative тут = небезпечна гарантія
|
|
50
50
|
// «без мережі», тож свідомо схиляємось до over-detection (м'якший бік помилки).
|
|
51
|
-
const NETWORK_RE =
|
|
51
|
+
const NETWORK_RE =
|
|
52
|
+
/\bfetch\(|https?:\/\/|\bhttps?\.|axios|\bgot\(|graphql|\.request\(|\.query\(|\.mutate\(|octokit|node-fetch|undici|\bgrpc\b|websocket/i
|
|
52
53
|
// Будь-який `throw` назовні → НЕ можна гарантувати «fail-safe / без винятків».
|
|
53
54
|
const THROW_RE = /\bthrow\s/
|
|
54
55
|
// Запис у БД / зовнішню мутацію → НЕ read-only (навіть якщо нема ФС-запису).
|
|
55
|
-
const MUTATION_RE =
|
|
56
|
+
const MUTATION_RE =
|
|
57
|
+
/\b(insert|update|delete|upsert|drop|destroy|save)[A-Za-z]*\s*[(,]|[Mm]utation\b|\bmut[A-Z]\w*|\.(save|create|update|delete|insert|destroy|mutate)\(/
|
|
56
58
|
// Кеш — лише за ІМЕНОВАНИМ маркером (`cache`/`Cache`/`memoize`), не за будь-яким
|
|
57
59
|
// `new Map()`: акумулятор (напр. `byPath = new Map()`) — не кеш, а хибна гарантія
|
|
58
60
|
// «Кешує результати» гірша за пропуск (фабрикація > мовчання).
|
|
@@ -213,7 +215,7 @@ function extractMarkers(src) {
|
|
|
213
215
|
return {
|
|
214
216
|
// «Фабрикація > мовчання»: прапорець true лише за high-confidence; інакше
|
|
215
217
|
// guaranteesFromMarkers/factsSummary його ОПУСКАЮТЬ (не стверджують протилежне).
|
|
216
|
-
readOnly: !WRITE_FS_RE.test(src) && !MUTATION_RE.test(src),
|
|
218
|
+
readOnly: !WRITE_FS_RE.test(src) && !MUTATION_RE.test(src), // ні ФС-запису, ні DB-мутацій
|
|
217
219
|
catchesErrors: (CATCH_RE.test(src) || TRY_RE.test(src)) && !THROW_RE.test(src), // fail-safe лише якщо НЕ кидає
|
|
218
220
|
returnsFalsyOnFail: FALSY_RETURN_RE.test(src) && !THROW_RE.test(src),
|
|
219
221
|
network: NETWORK_RE.test(src),
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
/** @see ./docs/docgen-files-batch.md */
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
existsSync,
|
|
4
|
+
mkdirSync,
|
|
5
|
+
readdirSync,
|
|
6
|
+
readFileSync,
|
|
7
|
+
rmdirSync,
|
|
8
|
+
statSync,
|
|
9
|
+
unlinkSync,
|
|
10
|
+
writeFileSync
|
|
11
|
+
} from 'node:fs'
|
|
3
12
|
import { basename, dirname, join, relative } from 'node:path'
|
|
4
13
|
|
|
5
14
|
import { isRunAsCli } from '../../../scripts/cli-entry.mjs'
|
|
@@ -153,7 +162,9 @@ const OKF_RESOURCE_RE = /^resource:[ \t]+(.+)$/mu
|
|
|
153
162
|
* @returns {void}
|
|
154
163
|
*/
|
|
155
164
|
function generateDirIndex(docsAbsDir, root) {
|
|
156
|
-
const allMd = readdirSync(docsAbsDir)
|
|
165
|
+
const allMd = readdirSync(docsAbsDir)
|
|
166
|
+
.filter(f => f.endsWith('.md'))
|
|
167
|
+
.sort()
|
|
157
168
|
|
|
158
169
|
// Якщо index.md вже є дока для source-файлу (має docgen.source → index.*) — не чіпаємо
|
|
159
170
|
if (allMd.includes('index.md')) {
|
|
@@ -243,7 +254,11 @@ export function purgeOrphanedDocs(root) {
|
|
|
243
254
|
// Лише index.md або порожня директорія — прибираємо повністю
|
|
244
255
|
const indexPath = join(docsAbsDir, 'index.md')
|
|
245
256
|
if (existsSync(indexPath)) unlinkSync(indexPath)
|
|
246
|
-
try {
|
|
257
|
+
try {
|
|
258
|
+
rmdirSync(docsAbsDir)
|
|
259
|
+
} catch {
|
|
260
|
+
/* не порожня — пропускаємо */
|
|
261
|
+
}
|
|
247
262
|
} else {
|
|
248
263
|
generateDirIndex(docsAbsDir, root)
|
|
249
264
|
}
|
|
@@ -133,7 +133,10 @@ export function splitProtected(md) {
|
|
|
133
133
|
break
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
|
-
const body = lines
|
|
136
|
+
const body = lines
|
|
137
|
+
.slice(start + 1, end)
|
|
138
|
+
.join('\n')
|
|
139
|
+
.trim()
|
|
137
140
|
const without = [...lines.slice(0, start), ...lines.slice(end)].join('\n')
|
|
138
141
|
return { body: body || null, without }
|
|
139
142
|
}
|
|
@@ -395,7 +398,10 @@ export const DEFAULT_LOCAL_MODEL = env.N_CURSOR_DOCGEN_MODEL ?? resolveModel('mi
|
|
|
395
398
|
* @param {{ model?: string, threshold?: number, existingMd?: string|null }} [opts] model-id, поріг degraded, наявна дока (для збереження захищеної секції)
|
|
396
399
|
* @returns {{ md: string, ms: number, llmMs: number, llmCalls: number, score: number|null, issues: string[], degraded: boolean, model: string }} документ і метадані генерації (ms — увесь файл; llmMs/llmCalls — лише LLM; решта ms — оркестрація)
|
|
397
400
|
*/
|
|
398
|
-
export function generateDoc(
|
|
401
|
+
export function generateDoc(
|
|
402
|
+
file,
|
|
403
|
+
{ model = DEFAULT_LOCAL_MODEL, threshold = QUALITY_THRESHOLD, existingMd = null } = {}
|
|
404
|
+
) {
|
|
399
405
|
const src = readFileSync(file, 'utf8')
|
|
400
406
|
// Pre-send guard: весь src вшивається у промпт як є (екстракт фактів його НЕ
|
|
401
407
|
// замінює). Для гігантів (vendored/генерат) це переповнює контекст → інстант-skip
|
|
@@ -403,7 +409,9 @@ export function generateDoc(file, { model = DEFAULT_LOCAL_MODEL, threshold = QUA
|
|
|
403
409
|
const estTokens = Math.round(Buffer.byteLength(src, 'utf8') / 4)
|
|
404
410
|
const budget = srcTokenBudget()
|
|
405
411
|
if (estTokens > budget) {
|
|
406
|
-
throw new Error(
|
|
412
|
+
throw new Error(
|
|
413
|
+
`docgen pre-send guard: джерело ~${estTokens} токенів > бюджет ${budget} (0.5× контексту) — Prompt too long, skip`
|
|
414
|
+
)
|
|
407
415
|
}
|
|
408
416
|
const facts = extractFacts(src, file)
|
|
409
417
|
const t0 = Date.now()
|