@nitra/cursor 5.3.4 → 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.
- package/.claude-template/settings.template.json +2 -2
- package/.pi-template/extensions/n-cursor-adr/docs/index.md +13 -24
- package/CHANGELOG.md +11 -0
- package/bin/n-cursor.js +43 -22
- package/lib/docs/models.md +29 -18
- package/lib/docs/omlx-trace.md +51 -0
- package/lib/docs/omlx.md +31 -15
- package/lib/omlx.mjs +2 -5
- package/package.json +1 -1
- package/rules/abie/docs/fix.md +17 -11
- package/rules/adr/docs/fix.md +25 -140
- package/rules/bun/docs/fix.md +18 -151
- package/rules/capacitor/docs/fix.md +16 -13
- package/rules/capacitor/js/docs/platforms.md +31 -43
- package/rules/changelog/docs/fix.md +25 -169
- package/rules/ci4/docs/fix.md +11 -14
- package/rules/doc-files/doc-files.mdc +60 -0
- package/rules/doc-files/docs/fix.md +31 -0
- package/rules/doc-files/fix.mjs +19 -0
- package/{skills → rules}/doc-files/js/docgen-extract.mjs +42 -19
- package/{skills → rules}/doc-files/js/docgen-ignore.mjs +2 -1
- package/{skills → rules}/doc-files/js/docgen-scan.mjs +9 -1
- package/{skills → rules}/doc-files/js/docs/docgen-crc.md +1 -1
- package/{skills → rules}/doc-files/js/docs/docgen-extract-anchors.md +1 -1
- package/{skills → rules}/doc-files/js/docs/docgen-extract.md +2 -2
- package/{skills → rules}/doc-files/js/docs/docgen-files-batch.md +1 -1
- package/{skills → rules}/doc-files/js/docs/docgen-gen.md +1 -1
- package/{skills → rules}/doc-files/js/docs/docgen-ignore.md +4 -4
- package/rules/doc-files/js/docs/docgen-prompts.md +39 -0
- package/rules/doc-files/js/docs/docgen-scan.md +54 -0
- package/rules/doc-files/js/docs/lint.md +36 -0
- package/rules/doc-files/js/docs/units-js.md +31 -0
- package/rules/doc-files/js/docs/units-rs.md +35 -0
- package/rules/doc-files/js/docs/units.md +30 -0
- package/rules/doc-files/js/lint.mjs +96 -0
- package/{skills → rules}/doc-files/js/units-rs.mjs +37 -17
- package/rules/doc-files/lint/docs/lint.md +37 -0
- package/rules/doc-files/lint/lint.mjs +105 -0
- package/rules/doc-files/meta.json +1 -0
- package/rules/docker/docs/fix.md +21 -161
- package/rules/efes/docs/fix.md +23 -194
- package/rules/feedback/docs/fix.md +10 -8
- package/rules/ga/docs/fix.md +10 -5
- package/rules/graphql/docs/fix.md +23 -119
- package/rules/hasura/docs/fix.md +19 -5
- package/rules/hasura/js/docs/internal_urls.md +34 -307
- package/rules/image-avif/docs/fix.md +16 -127
- package/rules/image-compress/docs/fix.md +20 -141
- package/rules/image-compress/js/docs/package_setup.md +22 -182
- package/rules/js-bun-db/docs/fix.md +23 -139
- package/rules/js-bun-db/js/docs/safety.md +33 -221
- package/rules/js-bun-redis/docs/fix.md +25 -114
- package/rules/js-bun-redis/js/docs/imports.md +18 -166
- package/rules/js-lint/docs/fix.md +30 -108
- package/rules/js-lint/js/docs/lint-findings.md +37 -17
- package/rules/js-lint/js/docs/lint.md +22 -238
- package/rules/js-lint/js/docs/tooling.md +34 -331
- package/rules/js-lint-ci/docs/fix.md +16 -149
- package/rules/js-lint-ci/js/docs/lint.md +16 -136
- package/rules/js-mssql/docs/fix.md +18 -123
- package/rules/js-mssql/js/docs/deps.md +28 -251
- package/rules/js-run/docs/fix.md +23 -138
- package/rules/js-run/js/docs/runtime.md +24 -378
- package/rules/k8s/docs/fix.md +18 -123
- package/rules/nginx-default-tpl/docs/fix.md +22 -118
- package/rules/nginx-default-tpl/js/docs/template.md +38 -360
- package/rules/npm-module/docs/fix.md +27 -89
- package/rules/npm-module/js/docs/header_doc_pointer.md +15 -15
- package/rules/npm-module/js/docs/package_structure.md +36 -258
- package/rules/npm-module/js/docs/rule_meta.md +25 -127
- package/rules/npm-module/js/docs/skill_meta.md +18 -180
- package/rules/php/docs/fix.md +21 -98
- package/rules/php/js/docs/tooling.md +20 -143
- package/rules/python/docs/fix.md +25 -157
- package/rules/python/js/docs/applies.md +20 -98
- package/rules/python/js/docs/tooling.md +27 -144
- package/rules/rego/docs/fix.md +24 -112
- package/rules/rego/js/docs/applies.md +20 -164
- package/rules/rego/js/docs/lint.md +15 -110
- package/rules/release/docs/fix.md +16 -114
- package/rules/rust/docs/fix.md +24 -119
- package/rules/rust/js/docs/applies.md +20 -129
- package/rules/security/docs/fix.md +21 -78
- package/rules/security/js/docs/sample_secret.md +23 -182
- package/rules/security/js/docs/trufflehog.md +19 -128
- package/rules/style-lint/docs/fix.md +16 -150
- package/rules/style-lint/js/docs/lint.md +21 -172
- package/rules/style-lint/js/docs/tooling.md +19 -184
- package/rules/tauri/docs/fix.md +26 -152
- package/rules/tauri/js/docs/cargo_mutants_config.md +21 -159
- package/rules/tauri/js/docs/tooling.md +20 -217
- package/rules/test/docs/fix.md +19 -127
- package/rules/test/js/data/stryker_config/docs/stryker.config.baseline.md +15 -127
- package/rules/test/js/data/stryker_config/docs/stryker.config.vue.baseline.md +17 -153
- package/rules/test/js/docs/cargo_mutants_config.md +24 -164
- package/rules/test/js/docs/location.md +24 -126
- package/rules/test/js/docs/no-process-chdir.md +20 -151
- package/rules/test/js/docs/no-relative-fs-path.md +24 -261
- package/rules/test/js/docs/stryker_config.md +48 -148
- package/rules/test/js/docs/vitest-config-pool-forks.md +21 -164
- package/rules/text/docs/fix.md +25 -113
- package/rules/text/js/docs/forbidden-prettier.md +21 -132
- package/rules/text/js/docs/formatting.md +60 -251
- package/rules/text/js/docs/lint.md +17 -114
- package/rules/vue/docs/fix.md +25 -118
- package/rules/vue/js/docs/packages.md +25 -323
- package/rules/worktree/docs/fix.md +31 -150
- package/scripts/coverage-classify/docs/index.md +23 -209
- package/scripts/coverage-classify/docs/verdict-schema.md +14 -159
- package/scripts/dispatcher/docs/trace.md +35 -0
- package/scripts/docs/auto-rules.md +37 -361
- package/scripts/docs/lint-cli.md +12 -13
- package/scripts/docs/post-tool-use-fix.md +16 -15
- package/scripts/docs/skills-cli.md +26 -23
- package/scripts/docs/sync-claude-config.md +94 -34
- package/scripts/docs/worktree-cli.md +11 -34
- package/scripts/lib/docs/assert-project-root.md +14 -16
- package/scripts/lib/docs/changed-files.md +24 -139
- package/scripts/lib/docs/discover-check-rules-from-cursor.md +14 -146
- package/scripts/lib/docs/rule-predicates.md +20 -17
- package/scripts/lib/docs/run-rule-cli.md +14 -18
- package/scripts/lib/docs/run-rule.md +13 -20
- package/scripts/lib/docs/run-standard-rule.md +12 -15
- package/scripts/lib/docs/sync-gitignore-worktree.md +15 -18
- package/scripts/lib/rule-predicates.mjs +1 -1
- package/scripts/sync-claude-config.mjs +4 -1
- package/scripts/utils/docs/with-lock.md +19 -12
- package/scripts/utils/with-lock.mjs +4 -2
- package/skills/doc-aggregate/SKILL.md +2 -2
- package/skills/doc-aggregate/js/docgen-ignore.mjs +6 -6
- package/skills/doc-aggregate/js/docs/docgen-ignore.md +1 -1
- package/skills/doc-aggregate/js/docs/docgen-scan.md +78 -0
- package/skills/doc-files/.changes/260612-0031.md +5 -0
- package/skills/doc-files/.changes/260612-0036.md +5 -0
- package/skills/doc-files/.changes/260612-0114.md +5 -0
- package/skills/doc-files/SKILL.md +6 -6
- package/skills/fix/js/docs/llm-worker.md +17 -15
- package/skills/fix/js/docs/orchestrator.md +30 -23
- package/skills/fix/js/docs/t0.md +26 -16
- package/skills/start-check/js/docs/check.md +26 -22
- package/skills/taze/js/docs/diff.md +44 -20
- package/skills/doc-files/js/docs/docgen-prompts.md +0 -32
- package/skills/doc-files/js/docs/docgen-scan.md +0 -25
- package/skills/doc-files/js/docs/units-rs.md +0 -35
- /package/{skills → rules}/doc-files/js/docgen-crc.mjs +0 -0
- /package/{skills → rules}/doc-files/js/docgen-extract-anchors.mjs +0 -0
- /package/{skills → rules}/doc-files/js/docgen-files-batch.mjs +0 -0
- /package/{skills → rules}/doc-files/js/docgen-gen.mjs +0 -0
- /package/{skills → rules}/doc-files/js/docgen-prompts.mjs +0 -0
- /package/{skills → rules}/doc-files/js/units-js.mjs +0 -0
- /package/{skills → rules}/doc-files/js/units.mjs +0 -0
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"hooks": [
|
|
27
27
|
{
|
|
28
28
|
"type": "command",
|
|
29
|
-
"command": "npx --no @nitra/cursor doc-files
|
|
29
|
+
"command": "npx --no @nitra/cursor lint-doc-files --hook",
|
|
30
30
|
"timeout": 120
|
|
31
31
|
}
|
|
32
32
|
]
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"hooks": [
|
|
39
39
|
{
|
|
40
40
|
"type": "command",
|
|
41
|
-
"command": "npx --no @nitra/cursor doc-files
|
|
41
|
+
"command": "npx --no @nitra/cursor lint-doc-files --git",
|
|
42
42
|
"timeout": 120
|
|
43
43
|
}
|
|
44
44
|
]
|
|
@@ -2,39 +2,28 @@
|
|
|
2
2
|
docgen:
|
|
3
3
|
source: npm/.pi-template/extensions/n-cursor-adr/index.ts
|
|
4
4
|
crc: 3233716f
|
|
5
|
+
score: 100
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
# index.ts
|
|
8
9
|
|
|
9
10
|
## Огляд
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
Файл слугує механізмом для підготовки даних сесії та ініціації виконання зовнішніх рішень. Він серіалізує поточний стан сесії для формування вхідного JSON і запускає відповідні скрипти для прийняття рішень.
|
|
12
|
+
Файл збирає записи сесії, серіалізує їх у формат JSONL, записує у тимчасову директорію, а потім ініціює виконання скриптів хуків capture та normalize.
|
|
14
13
|
|
|
15
14
|
## Поведінка
|
|
16
15
|
|
|
17
|
-
1.
|
|
18
|
-
2.
|
|
19
|
-
3.
|
|
20
|
-
4.
|
|
21
|
-
5.
|
|
22
|
-
6.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
10. Обидва скрипти отримують вхідний JSON-пакет і виконуються через адаптер pi.exec.
|
|
27
|
-
11. Виконування здійснюється асинхронно. Якщо скрипти відсутні, це може призвести до помилки, яка буде зареєстрована у результаті виконання.
|
|
28
|
-
12. Помилки виконання ловляться, щоб забезпечити стабільність системи.
|
|
16
|
+
1. Виклик події agent_end.
|
|
17
|
+
2. Перевірка захисту від рекурсії через змінні середовища. Якщо встановлено змінні, виконання зупиняється.
|
|
18
|
+
3. Серіалізація записів сесії. Зчитування записів з sessionManager та формування рядка JSONL.
|
|
19
|
+
4. Запис JSONL файлу. Запис серіалізованого тексту у тимчасову директорію.
|
|
20
|
+
5. Формування вхідного навантаження. Створення JSON об'єкта для передачі у башку.
|
|
21
|
+
6. Передача виконання скриптів. Паралельний запуск двох окремих скриптів.
|
|
22
|
+
а. Виконання хука capture.
|
|
23
|
+
б. Виконання хука normalize.
|
|
24
|
+
7. Обробка результатів. Очікування завершення обох виконання. Помилки обробляються у загальному режимі.
|
|
29
25
|
|
|
30
26
|
## Гарантії поведінки
|
|
31
27
|
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
- При виникненні помилок система перехоплює їх
|
|
35
|
-
- Система не генерує винятків назовні
|
|
36
|
-
- Система не використовує кешування
|
|
37
|
-
- Система не виконує операцій з мережею
|
|
38
|
-
- Логіка пропуску та обмеження швидкості залишається у бах (bash)
|
|
39
|
-
- Логіка вибору LLM-CLI залишається у бах (bash)
|
|
40
|
-
- Перевірка рекурсії здійснюється через змінні середовища встановлені бах перед запуском LLM CLI
|
|
28
|
+
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
29
|
+
- Не звертається до мережі.
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.4.0] - 2026-06-14
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- doc-files: міграція скіл→правило `npm/rules/doc-files/` (git mv `js/`); нові команди `lint-doc-files` (детермінований детектор stale `missing`∪`crc-mismatch`, exit 1; режими `--json`/`--missing-only`/`--hook`/`--git`/`--degraded`) і `fix-doc-files` (local-only генерація + `--stamp`); `lint`-адаптер агрегатора (`lint:"quick"`); `doc-files <sub>` стає делегувальним deprecated-аліасом (plain `check` exit 2→1; `--hook`/`--git` лишають exit 2); hook-маркер `@nitra/cursor lint-doc-files` із cleanup legacy `doc-files check`; тонкий скіл doc-files.
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- lint-js: 12 oxlint-помилок — RS\_\*-регекспи догори module scope і прибрані невикористані (docgen-extract, docgen-protected.test), повернуто JSDoc extractReasoning на місце (omlx), async без await (rule-predicates), сигнальний re-raise замість process.exit у with-lock (коректні коди 130/143), опис @returns (units-rs)
|
|
12
|
+
- doc-files check <paths>: перший позиційний шлях мовчки губився без --max (порівняння зі значенням argv[maxIdx+1] при maxIdx=-1); значення прапорців тепер виключаються за індексом (--max, --root) + регресійні тести
|
|
13
|
+
|
|
3
14
|
## [5.3.4] - 2026-06-11
|
|
4
15
|
|
|
5
16
|
### Changed
|
package/bin/n-cursor.js
CHANGED
|
@@ -25,10 +25,9 @@
|
|
|
25
25
|
* `npx \@nitra/cursor lint-docker` — канонічний lint-docker (docker.mdc): `hadolint` по `Dockerfile`/`*.Dockerfile`
|
|
26
26
|
* `npx \@nitra/cursor lint-text` — канонічний lint-text (text.mdc): `cspell` → `shellcheck` (з auto-fix) →
|
|
27
27
|
* `markdownlint-cli2 --fix` → `v8r` (json/json5/yaml/yml/toml)
|
|
28
|
-
* `npx \@nitra/cursor doc-files
|
|
29
|
-
* `npx \@nitra/cursor doc-files
|
|
30
|
-
* `npx \@nitra/cursor doc-files
|
|
31
|
-
* `npx \@nitra/cursor doc-files stamp` — детерміновано (пере)штампувати CRC у наявних доках без LLM
|
|
28
|
+
* `npx \@nitra/cursor lint-doc-files` — детермінований детектор застарілості файлових док (`stale`: `missing`|`crc-mismatch`); правило doc-files (ignore-glob у `npm/rules/doc-files/js/docgen-ignore.mjs`; тека `docs/` поряд із джерелом). Режими: повний (exit 1), `--json` (exit 0), `--missing-only`, `--hook`/`--git` (hook-протокол, exit 2), `--degraded`
|
|
29
|
+
* `npx \@nitra/cursor fix-doc-files` — JS-оркестрована генерація файлових док (роутинг local/cloud) зі штампом CRC (`--limit`/`--from`/`--overwrite`/`--retry-degraded`); `--stamp` — детерміноване перештампування CRC без LLM
|
|
30
|
+
* `npx \@nitra/cursor doc-files <sub>` — DEPRECATED-аліас (scan|check|gen|stamp) → `lint-doc-files`/`fix-doc-files`
|
|
32
31
|
* `npx \@nitra/cursor doc-aggregate modules` — JSON-лістинг логічних модулів (межі за `package.json`) для Tier 2 скілу doc-aggregate
|
|
33
32
|
* `npx \@nitra/cursor skill list` — скіли пакета без синку в проєкт
|
|
34
33
|
* `npx \@nitra/cursor skill taze` — промпт на stdout
|
|
@@ -1595,7 +1594,7 @@ async function runSync() {
|
|
|
1595
1594
|
/**
|
|
1596
1595
|
* Команди, що мутують проєкт у CWD і вимагають кореня репо. `undefined`/`''` —
|
|
1597
1596
|
* дефолтний sync; `check` — deprecated-alias `fix`. Решта (read-only `trace`,
|
|
1598
|
-
* `--root`-команди `doc-files`/`doc-aggregate`/`rename-yaml-extensions`, `worktree`,
|
|
1597
|
+
* `--root`-команди `lint-doc-files`/`fix-doc-files`/`doc-files`/`doc-aggregate`/`rename-yaml-extensions`, `worktree`,
|
|
1599
1598
|
* sub-лінтери) гард не зачіпає.
|
|
1600
1599
|
*/
|
|
1601
1600
|
const ROOT_GUARDED_COMMANDS = new Set([undefined, '', 'fix', 'check', 'lint', 'coverage', 'change', 'release'])
|
|
@@ -1641,7 +1640,7 @@ try {
|
|
|
1641
1640
|
// .n-cursor.json + bun install, а fix/lint/coverage/change/release переписують файли в CWD —
|
|
1642
1641
|
// усе це ключиться на cwd(). Запуск із піддиректорії git-репо (типово прямий
|
|
1643
1642
|
// `bun npm/bin/n-cursor.js` не з кореня) зачепив би не той каталог → STOP. Read-only та
|
|
1644
|
-
// `--root`-команди (trace, graph, doc-files, doc-aggregate, rename-yaml-extensions) не зачіпаємо.
|
|
1643
|
+
// `--root`-команди (trace, graph, lint-doc-files, fix-doc-files, doc-files, doc-aggregate, rename-yaml-extensions) не зачіпаємо.
|
|
1645
1644
|
if (ROOT_GUARDED_COMMANDS.has(command)) {
|
|
1646
1645
|
assertCwdIsProjectRoot(cwd(), describeRootGuardedAction(command))
|
|
1647
1646
|
}
|
|
@@ -1810,36 +1809,58 @@ try {
|
|
|
1810
1809
|
|
|
1811
1810
|
break
|
|
1812
1811
|
}
|
|
1812
|
+
case 'lint-doc-files': {
|
|
1813
|
+
// n-cursor lint-doc-files — детермінований детектор застарілості файлових док
|
|
1814
|
+
// (missing ∪ crc-mismatch). Режими: (повний) exit 1, --json exit 0, --missing-only,
|
|
1815
|
+
// --hook/--git/--degraded — hook-протокол (exit 2/0). Деталі — doc-files.mdc.
|
|
1816
|
+
const { runLintDocFilesCli } = await import('../rules/doc-files/lint/lint.mjs')
|
|
1817
|
+
process.exitCode = await runLintDocFilesCli(args)
|
|
1818
|
+
|
|
1819
|
+
break
|
|
1820
|
+
}
|
|
1821
|
+
case 'fix-doc-files': {
|
|
1822
|
+
// n-cursor fix-doc-files — local-only генерація файлових док (omlx) + CRC-штамп
|
|
1823
|
+
// (--limit/--from/--overwrite/--retry-degraded); --stamp — детерміноване
|
|
1824
|
+
// перештампування source+crc без LLM. У CI не запускається (потрібна локальна модель).
|
|
1825
|
+
if (args.includes('--stamp')) {
|
|
1826
|
+
const { runDocFilesStampCli } = await import('../rules/doc-files/js/docgen-files-batch.mjs')
|
|
1827
|
+
process.exitCode = runDocFilesStampCli(args.filter(a => a !== '--stamp'))
|
|
1828
|
+
} else {
|
|
1829
|
+
const { runDocFilesGenCli } = await import('../rules/doc-files/js/docgen-files-batch.mjs')
|
|
1830
|
+
process.exitCode = await runDocFilesGenCli(args)
|
|
1831
|
+
}
|
|
1832
|
+
|
|
1833
|
+
break
|
|
1834
|
+
}
|
|
1813
1835
|
case 'doc-files': {
|
|
1814
|
-
//
|
|
1815
|
-
//
|
|
1816
|
-
//
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
// stamp — детерміновано (пере)штампувати CRC у наявних доках без LLM.
|
|
1836
|
+
// Делегувальний аліас (deprecated): doc-files scan|check|gen|stamp →
|
|
1837
|
+
// lint-doc-files / fix-doc-files. Зняття — наступний major (спека 2026-06-12).
|
|
1838
|
+
// Зміна exit: plain `check` 2→1 (через lint-doc-files); --hook/--git зберігають 2.
|
|
1839
|
+
console.error('⚠ `doc-files <sub>` застаріло — використовуй `lint-doc-files` / `fix-doc-files`.')
|
|
1840
|
+
const rest = args.slice(1)
|
|
1820
1841
|
switch (args[0]) {
|
|
1821
1842
|
case 'scan': {
|
|
1822
|
-
const {
|
|
1823
|
-
process.exitCode =
|
|
1843
|
+
const { runLintDocFilesCli } = await import('../rules/doc-files/lint/lint.mjs')
|
|
1844
|
+
process.exitCode = await runLintDocFilesCli(['--json', ...rest])
|
|
1824
1845
|
break
|
|
1825
1846
|
}
|
|
1826
1847
|
case 'check': {
|
|
1827
|
-
const {
|
|
1828
|
-
process.exitCode = await
|
|
1848
|
+
const { runLintDocFilesCli } = await import('../rules/doc-files/lint/lint.mjs')
|
|
1849
|
+
process.exitCode = await runLintDocFilesCli(rest)
|
|
1829
1850
|
break
|
|
1830
1851
|
}
|
|
1831
1852
|
case 'gen': {
|
|
1832
|
-
const { runDocFilesGenCli } = await import('../
|
|
1833
|
-
process.exitCode = await runDocFilesGenCli(
|
|
1853
|
+
const { runDocFilesGenCli } = await import('../rules/doc-files/js/docgen-files-batch.mjs')
|
|
1854
|
+
process.exitCode = await runDocFilesGenCli(rest)
|
|
1834
1855
|
break
|
|
1835
1856
|
}
|
|
1836
1857
|
case 'stamp': {
|
|
1837
|
-
const { runDocFilesStampCli } = await import('../
|
|
1838
|
-
process.exitCode = runDocFilesStampCli(
|
|
1858
|
+
const { runDocFilesStampCli } = await import('../rules/doc-files/js/docgen-files-batch.mjs')
|
|
1859
|
+
process.exitCode = runDocFilesStampCli(rest)
|
|
1839
1860
|
break
|
|
1840
1861
|
}
|
|
1841
1862
|
default: {
|
|
1842
|
-
console.error('Usage: npx @nitra/cursor doc-files
|
|
1863
|
+
console.error('Usage: npx @nitra/cursor lint-doc-files | fix-doc-files [--root <dir>]')
|
|
1843
1864
|
process.exitCode = 1
|
|
1844
1865
|
}
|
|
1845
1866
|
}
|
|
@@ -1869,7 +1890,7 @@ try {
|
|
|
1869
1890
|
default: {
|
|
1870
1891
|
console.error(`❌ Невідома команда: ${command}`)
|
|
1871
1892
|
console.error(
|
|
1872
|
-
` Очікується: (без аргументів) синхронізація правил, fix, check, rename-yaml-extensions, post-tool-use-fix, lint, lint-ga, lint-rego, lint-k8s, lint-docker, lint-text, coverage, coverage-fix, taze, start-check, fix-t0, change, release, skill, worktree, lint-ci, trace, doc-files, doc-aggregate`
|
|
1893
|
+
` Очікується: (без аргументів) синхронізація правил, fix, check, rename-yaml-extensions, post-tool-use-fix, lint, lint-ga, lint-rego, lint-k8s, lint-docker, lint-text, lint-doc-files, fix-doc-files, coverage, coverage-fix, taze, start-check, fix-t0, change, release, skill, worktree, lint-ci, trace, doc-files, doc-aggregate`
|
|
1873
1894
|
)
|
|
1874
1895
|
process.exitCode = 1
|
|
1875
1896
|
}
|
package/lib/docs/models.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
docgen:
|
|
3
3
|
source: npm/lib/models.mjs
|
|
4
|
-
crc:
|
|
4
|
+
crc: 181e2bf9
|
|
5
5
|
score: 100
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -9,29 +9,40 @@ docgen:
|
|
|
9
9
|
|
|
10
10
|
## Огляд
|
|
11
11
|
|
|
12
|
-
Файл визначає глобальну класифікацію моделей для
|
|
13
|
-
|
|
14
|
-
Система надає механізм каскадного вибору моделі через функцію `resolveModel`. Цей механізм послідовно перевіряє локальні тири (`LOCAL_MIN` $\rightarrow$ `LOCAL_AVG` $\rightarrow$ `LOCAL_MAX`), а потім хмарні тири, якщо попередні не визначені. Це забезпечує прозору роботу, навіть якщо локальні моделі відсутні. Прямі константи (наприклад, `LOCAL_MIN`) залишені для випадків, що вимагають явного контролю над вибором моделі.
|
|
12
|
+
Файл визначає глобальну класифікацію моделей для pi. Конфігурація встановлюється через змінні середовища (наприклад, `N_LOCAL_MIN_MODEL`) та використовується для визначення, який провайдер буде викликаний. Кожен скіл посилається на потрібний тир, який використовується для вибору моделі.
|
|
15
13
|
|
|
16
14
|
## Поведінка
|
|
17
15
|
|
|
18
|
-
LOCAL_MIN
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
LOCAL_MIN
|
|
17
|
+
Завантажує модель для мінімального локального виведення
|
|
18
|
+
|
|
19
|
+
LOCAL_AVG
|
|
20
|
+
Завантажує модель для середнього локального виведення
|
|
21
|
+
|
|
22
|
+
LOCAL_MAX
|
|
23
|
+
Завантажує модель для максимального локального виведення
|
|
24
|
+
|
|
25
|
+
CLOUD_MIN
|
|
26
|
+
Завантажує модель для мінімального хмарного виведення
|
|
27
|
+
|
|
28
|
+
CLOUD_AVG
|
|
29
|
+
Завантажує модель для середнього хмарного виведення
|
|
30
|
+
|
|
31
|
+
CLOUD_MAX
|
|
32
|
+
Завантажує модель для максимального хмарного виведення
|
|
33
|
+
|
|
34
|
+
resolveModel
|
|
35
|
+
Повертає перший непорожній model-id для запитаного тиру, каскадно перевіряючи локальні тири, а тоді хмарний еквівалент
|
|
25
36
|
|
|
26
37
|
## Публічний API
|
|
27
38
|
|
|
28
|
-
LOCAL_MIN —
|
|
29
|
-
LOCAL_AVG —
|
|
30
|
-
LOCAL_MAX —
|
|
31
|
-
CLOUD_MIN —
|
|
32
|
-
CLOUD_AVG — Середній
|
|
33
|
-
CLOUD_MAX —
|
|
34
|
-
resolveModel — Знаходить
|
|
39
|
+
LOCAL_MIN — Швидкий локальний inference. Напр.: ollama/gemma3:4b
|
|
40
|
+
LOCAL_AVG — Середній локальний. Напр.: ollama/gemma4:26b-moe
|
|
41
|
+
LOCAL_MAX — Максимальний локальний. Напр.: ollama/llama4-maverick
|
|
42
|
+
CLOUD_MIN — Мінімальний хмарний. Напр.: openai/gpt-5.4-mini, google/gemini-2.5-flash, anthropic/claude-haiku-4-5
|
|
43
|
+
CLOUD_AVG — Середній хмарний. Напр.: openai/gpt-5.4, google/gemini-2.5-pro, anthropic/claude-sonnet-4-6
|
|
44
|
+
CLOUD_MAX — Максимальний хмарний. Напр.: openai/gpt-5.5, anthropic/claude-opus-4-8
|
|
45
|
+
resolveModel — Знаходить перший непорожній model-id для запиту, починаючи з локальних, а потім переходить до хмарних варіантів.
|
|
35
46
|
|
|
36
47
|
## Гарантії поведінки
|
|
37
48
|
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
docgen:
|
|
3
|
+
source: npm/lib/omlx-trace.mjs
|
|
4
|
+
crc: 3ff568d5
|
|
5
|
+
score: 100
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# omlx-trace.mjs
|
|
9
|
+
|
|
10
|
+
## Огляд
|
|
11
|
+
|
|
12
|
+
Модуль збирає трасу викликів LLM, фіксуючи думки моделі та спостережуваний слід. Траса записується у локальний файл для ротації та готується для подальшої батч-агрегації. Дизайн-специфікація: docs/specs/2026-06-10-omlx-wire-trace-capture-design.md.
|
|
13
|
+
|
|
14
|
+
## Поведінка
|
|
15
|
+
|
|
16
|
+
MAX_MSG_CHARS
|
|
17
|
+
Ліміт символів на одне message.content у записі
|
|
18
|
+
|
|
19
|
+
ROTATE_BYTES
|
|
20
|
+
Поріг недеструктивної ротації активного файлу в байтах
|
|
21
|
+
|
|
22
|
+
tracePath
|
|
23
|
+
Повертає шлях до trace-файлу або null
|
|
24
|
+
|
|
25
|
+
capMessages
|
|
26
|
+
Обрізає message.content та рахує sha256 повного масиву
|
|
27
|
+
|
|
28
|
+
buildTraceRecord
|
|
29
|
+
Будує нормалізований trace-запис
|
|
30
|
+
|
|
31
|
+
rotateIfNeeded
|
|
32
|
+
Недеструктивно ротує файл при перевищенні ROTATE_BYTES
|
|
33
|
+
|
|
34
|
+
writeTrace
|
|
35
|
+
Записує trace-запис у файл з ротацією та fail-safe
|
|
36
|
+
|
|
37
|
+
## Публічний API
|
|
38
|
+
|
|
39
|
+
MAX_MSG_CHARS — встановлює максимальну кількість символів для вмісту повідомлення.
|
|
40
|
+
ROTATE_BYTES — визначає поріг для ініціювання ротації файлу.
|
|
41
|
+
tracePath — зберігає шлях до файлу трасування або порожній рядок, якщо трасування вимкнено.
|
|
42
|
+
N_CURSOR_LLM_TRACE — визначає пріоритет для вибору шляху трасування: спочатку перевіряється вимкнений перемикач, потім використовується явний шлях.
|
|
43
|
+
buildTraceRecord — створює запис трасування, залишаючи порожні значення для полів, які недоступні.
|
|
44
|
+
rotateIfNeeded — перейменовує файл при перевищенні ліміту, створюючи новий файл з послідовним індексом.
|
|
45
|
+
writeTrace — записує один запис трасування, обробляючи шляхи, ротуючи дані за необхідності та обробляючи помилки вводу/виводу.
|
|
46
|
+
|
|
47
|
+
## Гарантії поведінки
|
|
48
|
+
|
|
49
|
+
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
50
|
+
- За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
|
|
51
|
+
- Не звертається до мережі.
|
package/lib/docs/omlx.md
CHANGED
|
@@ -1,32 +1,48 @@
|
|
|
1
1
|
---
|
|
2
2
|
docgen:
|
|
3
3
|
source: npm/lib/omlx.mjs
|
|
4
|
-
crc:
|
|
4
|
+
crc: 0073bdfd
|
|
5
|
+
score: 90
|
|
5
6
|
---
|
|
6
7
|
|
|
7
|
-
# omlx
|
|
8
|
+
# omlx.mjs
|
|
8
9
|
|
|
9
10
|
## Огляд
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
Файл забезпечує комунікацію з локальним omlx-сервером для отримання відповідей. Він маршрутизує запити, використовуючи конвенцію префікса для визначення, чи слід використовувати прямий HTTP виклик до omlx, чи CLI. Функції надають інструменти для роботи з API ключами та викликів до inference-сервера.
|
|
12
13
|
|
|
13
14
|
## Поведінка
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
DEFAULT_OMLX_URL: Дефолтний endpoint omlx
|
|
17
|
+
|
|
18
|
+
resolveOmlxApiKey: Резолвить API ключ для omlx-сервера
|
|
19
|
+
|
|
20
|
+
DEFAULT_OMLX_MODEL: Дефолтна модель для omlx
|
|
21
|
+
|
|
22
|
+
isOmlxModel: Перевіряє, чи model-id адресує локальний omlx-бекенд
|
|
23
|
+
|
|
24
|
+
omlxModelId: Прибирає префікс omlx/ з model-id
|
|
25
|
+
|
|
26
|
+
extractReasoning: Витягує reasoning з message
|
|
27
|
+
|
|
28
|
+
callOmlxRaw: Ядро прямого HTTP-виклику до omlx через curl
|
|
29
|
+
|
|
30
|
+
callOmlx: Тонка обгортка для отримання тексту відповіді
|
|
20
31
|
|
|
21
32
|
## Публічний API
|
|
22
33
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
34
|
+
DEFAULT_OMLX_URL — дефолтний endpoint omlx (перевизначається як `N_CURSOR_OMLX_URL`).
|
|
35
|
+
resolveOmlxApiKey — отримує API-ключ для omlx-сервера, коли ввімкнено автентифікацію (`auth.skip_api_key_verification: false`). Порядок: явний `apiKey` → env `N_CURSOR_OMLX_KEY` → `auth.api_key` з `~/.omlx/settings.json` (для локальної машини, з читанням як за замовчуванням; читання як за замовчуванням; безпечне читання) → `null` (відсутність заголовка).
|
|
36
|
+
DEFAULT_OMLX_MODEL — дефолтна модель, якщо в ідентифікаторі залишився префікс `omlx/` (перевизначається як `N_CURSOR_OMLX_MODEL`).
|
|
37
|
+
isOmlxModel — перевіряє, чи адресує цей model-id локальний omlx-бекенед (наявність префікса `omlx/`).
|
|
38
|
+
omlxModelId — видаляє префікс `omlx/` — отримує чистий model-id для omlx API. Не-omlx-рядки повертаються без змін.
|
|
39
|
+
extractReasoning — витягує обґрунтування з відповіді.
|
|
40
|
+
callOmlxRaw — виконує прямий HTTP-виклик до omlx через `curl` (за допомогою `spawnSync`). Повертає збагачений об'єкт: контент, обґрунтування, використання, результат завершення та кількість спроб. Перезапускає лише тимчасові помилки curl (18 = закритий трансфер, 52 = порожня відповідь, 56 = збій при отриманні).
|
|
41
|
+
callOmlx — тонко інкапсулює `callOmlxRaw` для споживачів, яким потрібен лише текст. Контракт: повертає вміст з `choices[0].message.content`. Без використання заголовків чи загальних фраз.
|
|
27
42
|
|
|
28
43
|
## Гарантії поведінки
|
|
29
44
|
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
45
|
+
- Read-only: файл не виконує операцій запису у файлову систему.
|
|
46
|
+
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
47
|
+
- За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
|
|
48
|
+
- Не звертається до мережі.
|
package/lib/omlx.mjs
CHANGED
|
@@ -69,6 +69,8 @@ export function omlxModelId(model) {
|
|
|
69
69
|
return isOmlxModel(model) ? model.slice(OMLX_PREFIX.length) : model
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
+
const THINK_TAG_RE = /<think>([\s\S]*?)<\/think>/
|
|
73
|
+
|
|
72
74
|
/**
|
|
73
75
|
* Витягує reasoning (думки моделі) з omlx-`message`. Джерела за пріоритетом:
|
|
74
76
|
* - `field` — окреме поле `message.reasoning_content` (Qwen3-Thinking тощо);
|
|
@@ -80,11 +82,6 @@ export function omlxModelId(model) {
|
|
|
80
82
|
* @param {string|null} finishReason `choices[0].finish_reason`
|
|
81
83
|
* @returns {{ reasoning: string|null, reasoningSource: 'field'|'think_tag'|'truncated'|null }} текст думок і його джерело
|
|
82
84
|
*/
|
|
83
|
-
const THINK_TAG_RE = /<think>([\s\S]*?)<\/think>/
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
*
|
|
87
|
-
*/
|
|
88
85
|
export function extractReasoning(message, finishReason) {
|
|
89
86
|
const field = message?.reasoning_content
|
|
90
87
|
if (field && field.trim()) return { reasoning: field, reasoningSource: 'field' }
|
package/package.json
CHANGED
package/rules/abie/docs/fix.md
CHANGED
|
@@ -1,30 +1,36 @@
|
|
|
1
1
|
---
|
|
2
2
|
docgen:
|
|
3
3
|
source: npm/rules/abie/fix.mjs
|
|
4
|
-
crc:
|
|
4
|
+
crc: 38cf876b
|
|
5
|
+
score: 100
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
# fix.mjs
|
|
8
9
|
|
|
9
10
|
## Огляд
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
Запуск правила приймає контекст прогону, застосовує JS-занепокоєні та політику, генерує посилання MDC та повертає результат прогону.
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
Виконання у режимі CLI виконує повний еквівалент команди `npx @nitra/cursor fix <id>` та повертає код виходу.
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
Викликається для виконання основного процесу перевірки.
|
|
16
|
+
## Поведінка
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
1. Запуск правила.
|
|
19
|
+
* Приймає контекст прогону.
|
|
20
|
+
* Виконує застосування JS-занепокоєних.
|
|
21
|
+
* Застосовує політику.
|
|
22
|
+
* Генерує посилання MDC.
|
|
23
|
+
* Повертає результат прогону.
|
|
20
24
|
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
2. Виконання у режимі CLI.
|
|
26
|
+
* Виконується при запуску через CLI.
|
|
27
|
+
* Виконує повний еквівалент команди `npx @nitra/cursor fix <id>`.
|
|
28
|
+
* Повертає код виходу.
|
|
23
29
|
|
|
24
30
|
## Публічний API
|
|
25
31
|
|
|
26
|
-
|
|
27
|
-
|
|
32
|
+
run — запускає правило: applies → JS-concerns → policy → mdc-refs (через runStandardRule).
|
|
33
|
+
Library mode — викликається CLI orchestration через `import + run`.
|
|
28
34
|
|
|
29
35
|
## Гарантії поведінки
|
|
30
36
|
|