@nitra/cursor 3.27.0 → 3.28.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/CHANGELOG.md +11 -0
- package/package.json +1 -1
- package/rules/abie/js/applies.mjs +1 -5
- package/rules/abie/js/env_dns.mjs +1 -9
- package/rules/abie/js/firebase_hosting.mjs +1 -5
- package/rules/abie/js/hc_pairing.mjs +1 -8
- package/rules/abie/js/ua_http_route.mjs +1 -10
- package/rules/abie/js/ua_node_selector.mjs +1 -8
- package/rules/adr/js/hooks.mjs +1 -20
- package/rules/bun/js/layout.mjs +1 -19
- package/rules/capacitor/js/platforms.mjs +1 -23
- package/rules/changelog/js/consistency.mjs +1 -29
- package/rules/ci4/js/marksman_config.mjs +1 -19
- package/rules/docker/js/lint.mjs +1 -34
- package/rules/ga/docs/fix.md +4 -4
- package/rules/ga/js/docs/lint.md +3 -3
- package/rules/ga/js/docs/workflows.md +14 -14
- package/rules/ga/js/workflows.mjs +1 -16
- package/rules/ga/lint/docs/lint.md +9 -9
- package/rules/graphql/js/tooling.mjs +1 -9
- package/rules/hasura/js/internal_urls.mjs +1 -24
- package/rules/image-avif/js/avif_generation.mjs +1 -27
- package/rules/image-compress/js/package_setup.mjs +1 -18
- package/rules/js-bun-db/js/safety.mjs +1 -31
- package/rules/js-bun-redis/js/imports.mjs +1 -12
- package/rules/js-lint/js/docs/lint-findings.md +30 -0
- package/rules/js-lint/js/lint-findings.mjs +1 -7
- package/rules/js-lint/js/lint.mjs +1 -10
- package/rules/js-lint/js/tooling.mjs +1 -13
- package/rules/js-lint/js/utils_imports.mjs +1 -18
- package/rules/js-lint-ci/js/lint.mjs +1 -6
- package/rules/js-mssql/js/deps.mjs +1 -10
- package/rules/js-run/js/runtime.mjs +1 -37
- package/rules/js-run/lib/docs/temporal-scan.md +25 -0
- package/rules/k8s/js/manifests.mjs +1 -137
- package/rules/nginx-default-tpl/js/template.mjs +1 -18
- package/rules/npm-module/js/docs/header_doc_pointer.md +25 -0
- package/rules/npm-module/js/header_doc_pointer.mjs +82 -0
- package/rules/npm-module/js/package_structure.mjs +1 -28
- package/rules/npm-module/js/rule_meta.mjs +1 -10
- package/rules/npm-module/js/skill_meta.mjs +1 -13
- package/rules/php/js/tooling.mjs +1 -11
- package/rules/python/js/applies.mjs +1 -8
- package/rules/python/js/tooling.mjs +1 -21
- package/rules/rego/js/applies.mjs +1 -11
- package/rules/rust/js/applies.mjs +1 -7
- package/rules/security/js/sample_secret.mjs +1 -28
- package/rules/security/js/trufflehog.mjs +1 -8
- package/rules/style-lint/js/lint.mjs +1 -5
- package/rules/style-lint/js/tooling.mjs +1 -19
- package/rules/tauri/js/cargo_mutants_config.mjs +1 -20
- package/rules/tauri/js/tooling.mjs +1 -21
- package/rules/test/js/cargo_mutants_config.mjs +1 -12
- package/rules/test/js/location.mjs +1 -9
- package/rules/test/js/no-process-chdir.mjs +1 -21
- package/rules/test/js/no-relative-fs-path.mjs +1 -23
- package/rules/test/js/stryker_config.mjs +4 -25
- package/rules/test/js/vitest-config-pool-forks.mjs +1 -17
- package/rules/text/js/forbidden-prettier.mjs +1 -10
- package/rules/text/js/formatting.mjs +1 -31
- package/rules/vue/js/packages.mjs +1 -24
- package/scripts/docs/coverage-fix-extract.md +32 -0
- package/scripts/docs/lint-cli.md +25 -0
- package/scripts/docs/post-tool-use-fix.md +27 -0
- package/scripts/docs/rename-yaml-extensions.md +36 -0
- package/scripts/docs/skills-cli.md +35 -0
- package/scripts/docs/sync-claude-config.md +52 -0
- package/scripts/docs/sync-setup-bun-deps-action.md +26 -0
- package/scripts/docs/upgrade-nitra-cursor-and-install.md +29 -0
- package/scripts/docs/worktree-cli.md +46 -0
- package/scripts/lib/docs/assert-project-root.md +28 -0
- package/scripts/lib/docs/diff-added-lines.md +34 -0
- package/scripts/lib/docs/read-n-cursor-config-lite.md +28 -0
- package/scripts/lib/docs/resolve-target-files.md +34 -0
- package/scripts/lib/docs/root-notice.md +28 -0
- package/scripts/lib/docs/rule-meta-helpers.md +34 -0
- package/scripts/lib/docs/rule-meta.md +34 -0
- package/scripts/lib/docs/rule-predicates.md +30 -0
- package/scripts/lib/docs/run-conftest-batch.md +26 -0
- package/scripts/lib/docs/run-lint-step.md +25 -0
- package/scripts/lib/docs/run-rule-cli.md +27 -0
- package/scripts/lib/docs/run-rule.md +32 -0
- package/scripts/lib/docs/run-standard-lint.md +22 -0
- package/scripts/lib/docs/run-standard-rule.md +24 -0
- package/scripts/lib/docs/skill-meta.md +31 -0
- package/scripts/lib/docs/sync-gitignore-worktree.md +31 -0
- package/scripts/lib/docs/template.md +40 -0
- package/scripts/lib/docs/timing-summary.md +24 -0
- package/scripts/lib/docs/workspaces.md +30 -0
- package/scripts/lib/docs/worktree-notice.md +27 -0
- package/scripts/lib/docs/worktree.md +38 -0
- package/scripts/utils/docs/ast-scan-utils.md +50 -0
- package/scripts/utils/docs/ensure-gitignore-entries.md +28 -0
- package/scripts/utils/docs/find-package-json-paths.md +26 -0
- package/scripts/utils/docs/lock-cache-dir.md +25 -0
- package/scripts/utils/docs/pass.md +25 -0
- package/scripts/utils/docs/resolve-cargo-manifest.md +23 -0
- package/scripts/utils/docs/resolve-cmd.md +29 -0
- package/scripts/utils/docs/resolve-js-root.md +25 -0
- package/scripts/utils/docs/test-helpers.md +36 -0
- package/scripts/utils/docs/walk-cache.md +27 -0
- package/scripts/utils/docs/walkDir.md +32 -0
- package/scripts/utils/docs/with-lock.md +25 -0
- package/scripts/utils/docs/worktree-fingerprint.md +27 -0
- package/skills/docgen/js/docgen-batch.mjs +95 -0
- package/skills/docgen/js/docgen-extract.mjs +33 -18
- package/skills/docgen/js/docgen-gen.mjs +125 -98
- package/skills/docgen/js/docgen-ignore.mjs +1 -6
- package/skills/docgen/js/docgen-prompts.mjs +33 -22
- package/skills/docgen/js/docgen-scan.mjs +1 -8
- package/skills/docgen/js/docs/docgen-extract.md +28 -0
- package/skills/docgen/js/docs/docgen-gen.md +41 -0
- package/skills/docgen/js/docs/docgen-ignore.md +24 -0
- package/skills/docgen/js/docs/docgen-prompts.md +24 -0
- package/skills/docgen/js/docs/docgen-scan.md +48 -0
- package/skills/fix/js/docs/llm-worker.md +27 -0
- package/skills/fix/js/docs/orchestrator.md +32 -0
- package/skills/fix/js/docs/t0.md +29 -0
- package/skills/fix/js/llm-worker.mjs +64 -29
- package/skills/fix/js/orchestrator.mjs +45 -54
- package/skills/fix/js/t0.mjs +16 -32
- package/skills/start-check/js/check.mjs +1 -16
- package/skills/start-check/js/docs/check.md +34 -0
- package/skills/taze/js/diff.mjs +1 -15
- package/skills/taze/js/docs/diff.md +33 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# upgrade-nitra-cursor-and-install.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Файл автоматично синхронізує правила командного інтерфейсу (CLI) з останньою версією `@nitra/cursor` з npm registry. Це забезпечує, що локальна версія `@nitra/cursor` завжди актуальна, а також інсталює необхідні залежності за допомогою `bun i`. Він використовується для підтримки узгодженості між локальним проєктом та офіційним репозиторієм npm.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
shouldSkipNpmVersionUpgrade: Визначає, чи потрібно оновлювати версію залежності з npm, враховуючи специфікатор залежності та різні типи специфікаторів (workspace, file, link тощо).
|
|
10
|
+
fetchLatestNitraCursorVersionFromNpm: Отримує останню версію пакета `@nitra/cursor` з npm registry та повертає її як рядок.
|
|
11
|
+
resolveInstalledPackageRoot: Повертає шлях до каталогу `node_modules/@nitra/cursor` якщо залежність встановлена, інакше повертає шлях до кореня пакету поточного процесу CLI (кеш npx).
|
|
12
|
+
upgradeNitraCursorToLatestAndBunInstall: Оновлює версію `@nitra/cursor` у `package.json` до останньої з npm, запускає `bun i` та повертає шлях до каталогу `node_modules/@nitra/cursor`.
|
|
13
|
+
|
|
14
|
+
## Публічний API
|
|
15
|
+
|
|
16
|
+
- shouldSkipNpmVersionUpgrade — Перевіряє можливість оминання оновлення версії npm.
|
|
17
|
+
- fetchLatestNitraCursorVersionFromNpm — Отримує останню версію пакета `@nitra/cursor` з npm.
|
|
18
|
+
- resolveInstalledPackageRoot — Знаходить шлях до встановленого пакета.
|
|
19
|
+
- upgradeNitraCursorToLatestAndBunInstall — Оновлює `@nitra/cursor` до останньої версії та встановлює Bun.
|
|
20
|
+
|
|
21
|
+
## Гарантії поведінки
|
|
22
|
+
|
|
23
|
+
- Якщо наявна залежність через `workspace:`, `file:`, `link:` – не змінює версію в npm registry та не запускає `bun i`.
|
|
24
|
+
- Запускає `bun i` у корені проєкту після підтягування останньої версії `@nitra/cursor` з npm registry.
|
|
25
|
+
- Повертає шлях до `node_modules/@nitra/cursor`, якщо каталог існує.
|
|
26
|
+
- В іншому випадку повертає шлях до кореня пакету поточного процесу CLI (наприклад, кеш npx).
|
|
27
|
+
- Не кидає винятки.
|
|
28
|
+
- У разі невдачі повертає `false` або `null`.
|
|
29
|
+
- Не використовує кешування.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# worktree-cli.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Файл `n-cursor worktree` є CLI-оркестратором для управління git worktree. Він дозволяє додавати, видаляти та перевіряти worktree, забезпечуючи зручний інтерфейс для роботи з декількома гілками в одному репозиторії. Цей інструмент використовується для організації робочого процесу розробника, що працює з кількома гілками.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
1. **Ініціалізація:** Отримує аргументи командного рядка, включаючи підкоманду та її параметри. Визначає поточний робочий каталог, якщо його не вказано. Ініціалізує контекст для логування та отримання дати.
|
|
10
|
+
2. **Розбір підкоманди:** Визначає, яку підкоманду було передано. Залежно від підкоманди, виконує відповідні дії.
|
|
11
|
+
3. **`add` (Створення нового worktree):**
|
|
12
|
+
- Перевіряє наявність необхідних параметрів: назви гілки та опису.
|
|
13
|
+
- Визначає унікальну назву гілки, якщо вона вже існує.
|
|
14
|
+
- Створює новий worktree, використовуючи вказану гілку та опис. Записує опис у файл `.md` у каталозі `.worktrees/`.
|
|
15
|
+
- Створює нагадування про незакомічені зміни основного дерева, якщо це необхідно.
|
|
16
|
+
4. **`remove` (Видалення worktree):**
|
|
17
|
+
- Перевіряє наявність необхідного параметра: назви гілки.
|
|
18
|
+
- Видаляє checkout та файл `.md` для вказаної гілки.
|
|
19
|
+
- Видаляє всі осиротілі файли опису, які залишилися після видалення гілки.
|
|
20
|
+
- Очищає файли flow-sibling-ів (.flow.json/.events.jsonl/lock) для запобігання їх осиротіння.
|
|
21
|
+
5. **`list` (Перелік worktree):**
|
|
22
|
+
- Виводить список всіх створених worktree, отриманий за допомогою команди `git worktree list`.
|
|
23
|
+
- Для кожного worktree виводить його повний шлях та вміст файлу опису `.md`.
|
|
24
|
+
6. **`prune` (Видалення осиротілих worktree):**
|
|
25
|
+
- Визначає всі файли опису `.md`, які більше не пов'язані з жодною зареєстрованою гілкою worktree.
|
|
26
|
+
- Видаляє ці осиротілі файли опису.
|
|
27
|
+
7. \*\*Викона
|
|
28
|
+
|
|
29
|
+
## Публічний API
|
|
30
|
+
|
|
31
|
+
runWorktreeCli — Запускає підкоманду worktree.
|
|
32
|
+
|
|
33
|
+
## Гарантії поведінки
|
|
34
|
+
|
|
35
|
+
- `runWorktreeCli` повертає `false` при будь-якій помилці.
|
|
36
|
+
- `runWorktreeCli` повертає `null` при помилці, якщо результат неможливо визначити.
|
|
37
|
+
- Немає кешування.
|
|
38
|
+
- `add <branch> "<опис>"` створює гілку `worktree` з описом.
|
|
39
|
+
- `remove <branch> [--force]` видаляє checkout гілки `worktree`, але не видаляє саму гілку.
|
|
40
|
+
- `list` виводить список всіх `worktree`.
|
|
41
|
+
- `prune` видаляє `worktree` без checkout.
|
|
42
|
+
- Немає гарантій щодо стану git-репозиторію.
|
|
43
|
+
- Немає гарантій щодо наявності незакомічених змін.
|
|
44
|
+
- Немає гарантій щодо наявності осиротілих `worktree`.
|
|
45
|
+
- `runWorktreeCli` не кидає винятків.
|
|
46
|
+
- Помилки переховуються.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# assert-project-root.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Файл забезпечує захист від непередбачуваної поведінки при запуску `npx @nitra/cursor` з піддиректорій git-репозиторію. Він гарантує, що процес синхронізації та встановлення артефактів виконується лише з кореневої директорії проєкту, запобігаючи розповсюдженню конфігураційних файлів у невідповідні місця. Це забезпечує узгодженість та передбачуваність процесу налаштування проєкту.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
gitToplevel: Визначає реальний шлях кореня git-репозиторію, використовуючи `git rev-parse --show-toplevel`. Повертає `null`, якщо `git` недоступний або не вдалося визначити корінь.
|
|
10
|
+
safeRealpath: Повертає реальний шлях вказаного каталогу, ігноруючи символічні посилання. Якщо шлях не існує, повертає вихідний шлях без змін.
|
|
11
|
+
assertCwdIsProjectRoot: Перевіряє, чи поточний робочий каталог є коренем git-репозиторію. Якщо так, функція не робить нічого. Якщо каталог знаходиться всередині git-репозиторію, але не є його коренем, викидає помилку, що інформує про необхідність перейти в корінь репозиторію.
|
|
12
|
+
|
|
13
|
+
## Публічний API
|
|
14
|
+
|
|
15
|
+
- gitToplevel — Отримує реальний шлях кореня git-репозиторію, використовуючи `git rev-parse --show-toplevel`. Повертає шлях або `null`, якщо `dir` не є коренем репозиторію або `git` недоступний.
|
|
16
|
+
- assertCwdIsProjectRoot — Перевіряє, чи `dir` є коренем git-репозиторію. Якщо `dir` є піддиректорією репозиторію або знаходиться поза репозиторієм (без визначення `toplevel`), то функція пропускає операцію без помилки.
|
|
17
|
+
|
|
18
|
+
## Гарантії поведінки
|
|
19
|
+
|
|
20
|
+
- При запуску `npx @nitra/cursor` з кореня будь-якого git-репозиторію, виконується синхронізація проєкту.
|
|
21
|
+
- При запуску `npx @nitra/cursor` з піддиректорії git-репозиторію, `cwd` встановлюється на корінь git-репозиторію.
|
|
22
|
+
- Синхронізація проєкту включає створення та запуск сценаріїв для `.cursor/rules/`, `.cursor/skills/`, `.claude/`, `AGENTS.md`, `CLAUDE.md`, `.n-cursor.json`, `.gitignore`.
|
|
23
|
+
- Синхронізація проєкту включає запуск `bun install`.
|
|
24
|
+
- При невдачі синхронізації повертається `false` або `null`.
|
|
25
|
+
- Немає кешування.
|
|
26
|
+
- Не перехоплює винятки.
|
|
27
|
+
- Функція `gitToplevel` забезпечує доступ до кореня git-репозиторію.
|
|
28
|
+
- Функція `assertCwdIsProjectRoot` перевіряє, чи поточний `cwd` є коренем git-репозиторію.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# diff-added-lines.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Файл визначає, чи є рядок коду новим (introduced) або вже існував у проєкті. Він використовується для класифікації результатів аналізу коду (lint-findings) на основі їхнього розташування відносно версії проєкту. Це допомагає розробникам розуміти, які зміни коду потребують негайної уваги.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
ALL_LINES: мітка, що позначає всі рядки файлу, які були introduced.
|
|
10
|
+
parseAddedLines: парсить вивід `git diff` та повертає мапу, де ключ — ім'я файлу, а значення — множина номерів рядків, які були додані.
|
|
11
|
+
addedLinesByFile: визначає мапу доданих рядків для заданих файлів, використовуючи `git diff` та `git ls-files`.
|
|
12
|
+
isIntroducedLine: перевіряє, чи рядок у файлі є introduced, використовуючи мапу, створену `addedLinesByFile`.
|
|
13
|
+
|
|
14
|
+
## Публічний API
|
|
15
|
+
|
|
16
|
+
- ALL_LINES — Вказує на новий, не відстежений файл, що містить усі рядки.
|
|
17
|
+
- parseAddedLines — Аналізує вивід команди `git diff --unified=0` для створення мапи доданих рядків у файлі.
|
|
18
|
+
- addedLinesByFile — Визначає додані рядки у файлах, порівнюючи їх з версією в HEAD, та класифікує їх як відстежені або не відстежені.
|
|
19
|
+
- isIntroducedLine — Перевіряє, чи рядок у файлі є новим, тобто доданим.
|
|
20
|
+
|
|
21
|
+
## Гарантії поведінки
|
|
22
|
+
|
|
23
|
+
- `ALL_LINES` повертає список усіх рядків файлу.
|
|
24
|
+
- `ALL_LINES` повертає `false` якщо не вдалося парсити diff.
|
|
25
|
+
- `parseAddedLines` повертає список рядків, які були додані у diff.
|
|
26
|
+
- `parseAddedLines` повертає `false` якщо не вдалося парсити diff.
|
|
27
|
+
- `addedLinesByFile` повертає список рядків, які були додані у кожному файлі.
|
|
28
|
+
- `isIntroducedLine` визначає, чи є рядок доданим у diff.
|
|
29
|
+
- `isIntroducedLine` повертає `false` якщо рядок не був доданий у diff.
|
|
30
|
+
- Результати парсингу кешуються для кожного запуску.
|
|
31
|
+
- Рядок вважається "introduced" якщо він є в diff.
|
|
32
|
+
- Рядок вважається "pre-existing" якщо він не є в diff.
|
|
33
|
+
- Рядки, що не були знайдені в diff, вважаються "untracked".
|
|
34
|
+
- `ALL_LINES` повертає всі рядки з diff, навіть якщо вони "untracked".
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# read-n-cursor-config-lite.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Цей файл читає файл `.n-cursor.json`, що містить список правил для конфігурації. Він повертає цей список, щоб `fix.mjs` міг використовувати правила для визначення конфігурації. Це забезпечує базове читання конфігурації правил для запуску `fix.mjs` з командного рядка.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
**readNCursorConfigLite**
|
|
10
|
+
Зчитує конфігурацію з файлу `.n-cursor.json`. Повертає об'єкт з інформацією про правила та вимкнені правила. Якщо файл відсутній, повертає конфігурацію з порожнім масивом правил.
|
|
11
|
+
|
|
12
|
+
**isRuleEnabled**
|
|
13
|
+
Перевіряє, чи правило з активним статусом згідно з конфігурацією. Повертає `true`, якщо файл відсутній, правило вимкнено в `disable-rules` або присутнє в `rules`. Повертає `false` в іншому випадку.
|
|
14
|
+
|
|
15
|
+
## Публічний API
|
|
16
|
+
|
|
17
|
+
- readNCursorConfigLite — Завантажує конфігурацію курсора.
|
|
18
|
+
- isRuleEnabled — Перевіряє статус активності правила.
|
|
19
|
+
|
|
20
|
+
## Гарантії поведінки
|
|
21
|
+
|
|
22
|
+
- Якщо файл `.n-cursor.json` відсутній, вважається, що всі правила включені.
|
|
23
|
+
- Якщо файл `.n-cursor.json` існує, але поле `rules` порожнє, вважається, що всі правила включені.
|
|
24
|
+
- Якщо файл `.n-cursor.json` існує і має поле `rules`, але поле `rules` порожнє, вважається, що всі правила включені.
|
|
25
|
+
- Якщо правило вказане в полі `disable-rules`, воно вимкнено.
|
|
26
|
+
- Повертає `false` якщо файл `.n-cursor.json` відсутній або недійсний.
|
|
27
|
+
- Повертає `null` якщо не вдалося прочитати файл `.n-cursor.json`.
|
|
28
|
+
- Не використовує кешування.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# resolve-target-files.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Цей файл відповідає за перевірку наявності файлів, що відповідають певним правилам, вказаним у файлах `policy/<name>/target.json`. Він створює список файлів для подальшого використання, використовуючи або конкретні відносні шляхи, або обхід каталогу з використанням шаблонів та ігнорування файлів. Це забезпечує узгодженість та контроль над файлами, які потрібно обробити, відповідно до заданих політик.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
1. **Ініціалізація:** Отримує специфікацію файлів з `target.json`, включаючи `single` або `walkGlob`.
|
|
10
|
+
2. **Обробка `single`:** Якщо `files.single` є рядком, перевіряє, чи шлях є відносним та не містить сегменту `..`. Якщо шлях безпечний, перевіряє наявності файлу за шляхом та повертає масив з абсолютним шляхом, якщо файл існує, або порожній масив, якщо ні.
|
|
11
|
+
3. **Обробка `walkGlob`:** Якщо `files.walkGlob` є не визначеним, або є масивом рядків, виконує обхід дерева файлів від заданого кореня.
|
|
12
|
+
4. **Завантаження ігнорування:** Завантажує список абсолютних шляхів, які слід ігнорувати, з конфігурації `.n-cursor.json:ignore`.
|
|
13
|
+
5. **Кешування обходу:** Використовує кеш обходу дерева (Map) для запобігання повторному обходу одного й того ж набору ігнорування. Якщо обхід вже виконано для заданого набору ігнорування, повертає результат з кешу.
|
|
14
|
+
6. **Обхід дерева:** Якщо обхід не кешований або кеш порожній, виконує обхід дерева файлів від заданого кореня, використовуючи `walkDir`. Під час обходу генерує відносні шляхи файлів від кореня.
|
|
15
|
+
7. **Фільтрація за масками:** Для кожного відносного шляху файлу застосовує маски `walkGlob` за допомогою `picomatch`. Фільтрує файли, які відповідають маскам, та виключає ті, що відповідають негативним маскам.
|
|
16
|
+
8. **Збіг з ігноруванням:** Перевіряє, чи файл не входить до списку ігнорування.
|
|
17
|
+
9. **Збіг шляху:** Перетворює відносні шляхи файлів у абсолютні шляхи, додавши корень.
|
|
18
|
+
10. **Повернення результатів:** Повертає масив абсолют
|
|
19
|
+
|
|
20
|
+
## Публічний API
|
|
21
|
+
|
|
22
|
+
resolveTargetFiles — Знаходить файли, що вказані в `target.json:files`.
|
|
23
|
+
|
|
24
|
+
## Гарантії поведінки
|
|
25
|
+
|
|
26
|
+
- **Контракт на поліси:** Зчитуються лише файли з репозиторію.
|
|
27
|
+
- **`single`:** Якщо `existsSync`, повертається список файлів, що відповідають `single`. Інакше, повертається порожній список.
|
|
28
|
+
- **`walkGlob`:** Використовується picomatch для обробки glob-шаблонів відносно шляхів, отриманих з обходу `walkDir` від `root`.
|
|
29
|
+
- **Ігнорування:** Підтримується ігнорування файлів за допомогою `.n-cursor.json:ignore` та кешування шляхів ігнорування у `walkCache`.
|
|
30
|
+
- **Кешування:** Результати обходу кешуються для повторного використання при однаковому наборі ігнорувань.
|
|
31
|
+
- **Path-traversal:** При розв'язанні шляхів у формі `single` виникає помилка.
|
|
32
|
+
- **Відсутність результатів:** Якщо не знайдено жодного файлу, що відповідає критеріям, повертається порожній список.
|
|
33
|
+
- **Fail-safe:** Якщо `required` встановлено на `true`, і не знайдено жодного файлу, що відповідає критеріям, виникає помилка.
|
|
34
|
+
-
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# root-notice.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Цей файл вставляє root-guard preflight для скілів, які змінюють проєкт у поточному каталозі. Він забезпечує, що скіл виконується in-place, без ізоляції worktree, і використовується для випадків, коли не потрібна ізоляція worktree. Це гарантує коректне виконання скілу від імені проєкту.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
ROOT_START: вставляє маркер початку root-блоку.
|
|
10
|
+
ROOT_END: вставляє маркер кінця root-блоку.
|
|
11
|
+
injectRootNotice: вставляє, оновлює або видаляє root-guard блок у вмісті `SKILL.md` на основі параметра `enabled`.
|
|
12
|
+
|
|
13
|
+
## Публічний API
|
|
14
|
+
|
|
15
|
+
- ROOT_START — Позначає початок блоку root.
|
|
16
|
+
- ROOT_END — Позначає кінець блоку root.
|
|
17
|
+
- injectRootNotice — Змінює вміст `SKILL.md` щодо root-guard блоку.
|
|
18
|
+
|
|
19
|
+
## Гарантії поведінки
|
|
20
|
+
|
|
21
|
+
- Якщо `requireRoot: true` у `meta.json`, то поточний робочий каталог є коренем проєкту.
|
|
22
|
+
- Якщо `requireRoot: false`, то блок не вставляється.
|
|
23
|
+
- Вставка відбувається лише між маркерами.
|
|
24
|
+
- Вставка ре-синк ідемпотентно: наявний блок замінюється.
|
|
25
|
+
- `ROOT_START` викликається перед вставкою блоку.
|
|
26
|
+
- `ROOT_END` викликається після вставки блоку.
|
|
27
|
+
- `injectRootNotice` викликається під час вставки блоку.
|
|
28
|
+
- Немає кешування.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# rule-meta-helpers.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Цей файл містить хелпери для автоматичного виявлення та обробки правил конфігурації репозиторіїв. Він надає функції для ідентифікації ID міграцій, нормалізації списків та визначення URL репозиторіїв, а також для виявлення монорепо-пакетів. Ці функції використовуються для автоматизованої обробки конфігурації та забезпечення узгодженості в репозиторіях.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
`RULE_MIGRATIONS`: містить відомості про застарілі ідентифікатори правил та їхні відповідні актуальні ідентифікатори.
|
|
10
|
+
`migrateRuleIds`: перетворює введений список ідентифікаторів правил на список, де застарілі ідентифікатори замінені на актуальні, зберігаючи порядок і усуваючи дублікати.
|
|
11
|
+
`detectLegacyRuleIds`: витягує з введеного списку ідентифікаторів правил ті, що потребують заміни на актуальні.
|
|
12
|
+
`normalizeIdList`: нормалізує введений список ідентифікаторів правил, видаляючи пробіли, перетворюючи на нижній регістр та зберігаючи порядок, усуваючи дублікати.
|
|
13
|
+
`getRepositoryUrl`: повертає URL репозиторію з `package.json`, якщо він є рядком або об'єктом, інакше повертає `null`.
|
|
14
|
+
`isMonorepoPackage`: визначає, чи оголошено `workspaces` в `package.json`, повертаючи `true` якщо так, і `false` в іншому випадку.
|
|
15
|
+
|
|
16
|
+
## Публічний API
|
|
17
|
+
|
|
18
|
+
- RULE_MIGRATIONS — Карта, яка відображає застарілі rule-id на актуальні, для автоматичної міграції при читанні конфігурації.
|
|
19
|
+
- migrateRuleIds — Розгортає застарілі rule-id згідно з `RULE_MIGRATIONS`, зберігаючи порядок, дедуплікуючи та не змінюючи вхідний список.
|
|
20
|
+
- detectLegacyRuleIds — Повертає список застарілих rule-id, для яких є відповідність у `RULE_MIGRATIONS`, для логування міграції.
|
|
21
|
+
- normalizeIdList — Нормалізує список ідентифікаторів, видаляючи пробіли, перетворюючи на нижній регістр та зберігаючи порядок.
|
|
22
|
+
- getRepositoryUrl — Отримує URL репозиторію з `package.json`.
|
|
23
|
+
- isMonorepoPackage — Перевіряє, чи `package.json` містить поле `workspaces`, що вказує на монорепо.
|
|
24
|
+
|
|
25
|
+
## Гарантії поведінки
|
|
26
|
+
|
|
27
|
+
- `RULE_MIGRATIONS` повертає `true`, якщо успішно виконано міграцію правил. Повертає `false` у разі помилки.
|
|
28
|
+
- `migrateRuleIds` змінює внутрішній стан, щоб відобразити успішну міграцію ідентифікаторів правил.
|
|
29
|
+
- `detectLegacyRuleIds` повертає список ідентифікаторів правил, які вважаються застарілими.
|
|
30
|
+
- `normalizeIdList` повертає нормалізований список ідентифікаторів правил.
|
|
31
|
+
- `getRepositoryUrl` повертає URL репозиторію, якщо він існує. Повертає `null` у разі помилки.
|
|
32
|
+
- `isMonorepoPackage` повертає `true`, якщо пакет є частиною монорепо. Повертає `false` у разі помилки.
|
|
33
|
+
- Функції не викликають винятки. У разі невдачі повертають `false` або `null`.
|
|
34
|
+
- Кеш не використовується.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# rule-meta.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Цей файл парсує метадані правил npm/rules/<id>/meta.json для автоматичного виявлення проблемних місць у коді. Він визначає, коли правило має бути активним, використовуючи різні специфікації, такі як завжди-ввімкнене правило, правило, яке активується після виявлення залежностей, або правило, яке активується на основі glob-шаблонів чи незводимих предикатів. Це дозволяє системі динамічно визначати та застосовувати правила, не потребуючи явного налаштування.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
`RULE_ALWAYS`: визначає літерал для активації правила "завжди".
|
|
10
|
+
`parseRuleAutoSpec`: нормалізує значення `meta.json.auto` у дискриміновану форму.
|
|
11
|
+
`parseRuleLintPhase`: нормалізує значення `meta.json.lint` у фазу lint.
|
|
12
|
+
`readRuleMetaRaw`: читає та парсить `meta.json` одного правила, повертаючи об’єкт або `null`.
|
|
13
|
+
|
|
14
|
+
## Публічний API
|
|
15
|
+
|
|
16
|
+
- RULE_ALWAYS — Активує правило.
|
|
17
|
+
- parseRuleAutoSpec — Перетворює значення `meta.json.auto` на конкретну опцію.
|
|
18
|
+
- parseRuleLintPhase — Перетворює значення `meta.json.lint` на фазу lint.
|
|
19
|
+
- readRuleMetaRaw — Зчитує та аналізує файл `meta.json` правила.
|
|
20
|
+
|
|
21
|
+
## Гарантії поведінки
|
|
22
|
+
|
|
23
|
+
- `RULE_ALWAYS` повертає `true` якщо правило активне.
|
|
24
|
+
- `parseRuleAutoSpec` повертає `true` якщо специфікація правила успішно розібрана.
|
|
25
|
+
- `parseRuleAutoSpec` повертає `false` якщо специфікація правила не може бути розібрана.
|
|
26
|
+
- `parseRuleLintPhase` повертає `true` якщо правило успішно розібрано на етапі linting.
|
|
27
|
+
- `parseRuleLintPhase` повертає `false` якщо правило не може бути розібрано на етапі linting.
|
|
28
|
+
- `readRuleMetaRaw` повертає `true` якщо метадані правила успішно прочитані.
|
|
29
|
+
- `readRuleMetaRaw` повертає `false` якщо метадані правила не можуть бути прочитані.
|
|
30
|
+
- У разі невдачі, функція повертає `false` або `null`.
|
|
31
|
+
- Функції не кидають винятків.
|
|
32
|
+
- Немає кешування.
|
|
33
|
+
- Немає гарантій щодо стану файлів або каталогів.
|
|
34
|
+
- Поля `worktree` правила не використовуються.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# rule-predicates.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Цей файл містить набір предикатів, які використовуються для автоматичного визначення правил. Ці предикати дозволяють перевіряти наявність файлів, вміст source-коду та інформацію з репозиторіїв, щоб виявляти потенційні порушення правил. Він забезпечує механізм для автоматизованого пошуку та виявлення правил на основі даних.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
1. **Ініціалізація перевірки репозиторію:** Отримує URL репозиторію з кореневого `package.json` або з `meta.json.repository`. Перевіряє, чи URL існує і чи містить він вказаний маркер.
|
|
10
|
+
2. **Перевірка залежностей у дереві:** Для кожного `package.json` у дереві репозиторію, перебирає всі пакети в залежностях. Якщо пакет має вказаний маркер, повертає `true`. Ігнорує директорії `node_modules`, `.git`, `.next` та `.turbo`.
|
|
11
|
+
3. **Перевірка вкладених `package.json`:** Для кореневого `package.json` перевіряє, чи є в будь-якому вкладеному `package.json` відсутній `vite` у секції `devDependencies`. Ігнорує директорії `node_modules`, `.git`, `.next` та `.turbo`.
|
|
12
|
+
4. **Перевірка фактів:** Якщо надано факти, перевіряє наявність `hasGqlTaggedTemplates` та `hasHasuraConfig`. Якщо `hasGqlTaggedTemplates` має значення `true`, повертає `true`. Якщо `hasHasuraConfig` має значення `true`, повертає `true`.
|
|
13
|
+
5. **Перевірка наявності `bun`:** Якщо надано факти, перевіряє наявність `hasBunSqlImport`. Якщо `hasBunSqlImport` має значення `true`, повертає `true`.
|
|
14
|
+
6. **Перевірка залежностей `pg`:** Якщо надано факти, перевіряє наявність `pg`, `pg-format` або `mysql2` у залежностях. Якщо будь-яка з цих залежностей присутня, повертає `true`.
|
|
15
|
+
7. **Перевірка вкладеного `package.json` без `vite`:** Отримує кореневий `package.json`. Перебирає всі вкладені `package.json` (крім кореневого). Якщо вкладений `package.json` не містить `vite` у `devDependencies`, повер
|
|
16
|
+
|
|
17
|
+
## Публічний API
|
|
18
|
+
|
|
19
|
+
RULE_PREDICATES — Зберігає предикати та їх реалізації. Використовується для виклику через `meta.json.auto.predicate`.
|
|
20
|
+
|
|
21
|
+
## Гарантії поведінки
|
|
22
|
+
|
|
23
|
+
- Функція повертає результат виконання предиката.
|
|
24
|
+
- Результат може бути істинним або хибним.
|
|
25
|
+
- При виникненні помилки, результат завжди хибний.
|
|
26
|
+
- Не враховує наявність `.git` та `node_modules` у файловій системі.
|
|
27
|
+
- Не використовує кешування.
|
|
28
|
+
- Не генерує винятків.
|
|
29
|
+
- Аргументи предиката можуть бути значеннями, отриманими з файлів `meta.json`, шляхів у файловій системі або URL-адрес.
|
|
30
|
+
- Результат залежить від вмісту та структури зазначених джерел.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# run-conftest-batch.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Файл запускає `conftest test` на заданому списку файлів, виявляючи порушення правил, визначених у Rego-полісіях. Він використовується для автоматизованої перевірки конфігураційних файлів на відповідність заданим вимогам. Результати перевірки повертаються у структурованому вигляді, що дозволяє інтегрувати результати в інші процеси валідації.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
buildConftestArgs: Будує аргументи командного рядка для запуску `conftest test`, враховуючи список файлів, namespace та додаткові аргументи.
|
|
10
|
+
runConftestBatch: Запускає `conftest test` для заданого списку файлів, повертає масив порушень у форматі JSON, якщо `conftest` успішно завершився, і кидає виняток, якщо `conftest` не знайдено або завершився з помилкою. Створює тимчасову директорію для збереження даних шаблону, якщо передано `templateData`.
|
|
11
|
+
|
|
12
|
+
## Публічний API
|
|
13
|
+
|
|
14
|
+
- buildConftestArgs: Створює аргументи для тесту conftest. Витягнуто для зручності тестування. Зберігає поточну структуру аргументів (файли перед `-p`, `--output json` та `--no-color` для читабельного виводу) і вставляє `--data` після `--namespace`, якщо він заданий.
|
|
15
|
+
- runConftestBatch: Запускає `conftest test` для всіх файлів з одного процесу та повертає масив помилок. Якщо `files` порожній, повертає порожній масив. Якщо `conftest` не знайдено в системному шляху та автоматична установка не вдалася, виникає помилка.
|
|
16
|
+
|
|
17
|
+
## Гарантії поведінки
|
|
18
|
+
|
|
19
|
+
- Запускає `conftest test` на заданому списку файлів.
|
|
20
|
+
- Повертає всі виявлені порушення у структурованому вигляді.
|
|
21
|
+
- Якщо `conftest` не встановлено, намагається автоматично встановити його.
|
|
22
|
+
- У разі невдачі встановлення `conftest`, завершує роботу з помилкою.
|
|
23
|
+
- Не кидає винятків назовні.
|
|
24
|
+
- Не використовує кешування.
|
|
25
|
+
- Не перехоплює помилки, а завершує роботу з помилкою.
|
|
26
|
+
- Не має взаємодії з мережею.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# run-lint-step.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Цей файл забезпечує спільний хелпер для запуску окремих кроків у ланцюжку linting, що використовується CLI-обгортками. Він імітує прямий виклик команд у shell, логуючи команди та перенаправляючи stdout/stderr на користувацькі stream-и. Це дозволяє уникнути дублювання обгорток у різних `rules/<id>/js/lint.mjs` файлах.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
1. Записує в лог повідомлення про початок виконання кроку ланцюжка з описом команди та її аргументів.
|
|
10
|
+
2. Визначає шлях до виконуваного файлу команди на основі її імені.
|
|
11
|
+
3. Якщо шлях не знайдено в системному PATH, записує повідомлення про помилку та повертає код 127.
|
|
12
|
+
4. Запускає визначену команду з заданими аргументами, передаючи стандартний потік введення/виведення (stdio) потокам користувача.
|
|
13
|
+
5. Якщо команда завершилася з помилкою, записує повідомлення про помилку та повертає код 1.
|
|
14
|
+
6. Якщо команда завершилася успішно, повертає код виходу дочірнього процесу, який дорівнює 0, якщо все добре, або 1, якщо виникла помилка.
|
|
15
|
+
|
|
16
|
+
## Публічний API
|
|
17
|
+
|
|
18
|
+
runLintStep — запускає процес linting та перевіряє його успішність.
|
|
19
|
+
|
|
20
|
+
## Гарантії поведінки
|
|
21
|
+
|
|
22
|
+
- Запускає один крок ланцюжка linting.
|
|
23
|
+
- Перенаправляє stdout та stderr на користувацькі stream-и (stdio: 'inherit').
|
|
24
|
+
- Не використовує кешування.
|
|
25
|
+
- Не має внутрішніх приватних імен.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# run-rule-cli.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Цей файл є самостійним CLI-запускомком для правила, який дозволяє запускати правила з файлів `.n-cursor.json` та виконувати їхні дії. Він забезпечує інтеграцію з інструментом `cursor`, імітуючи старий `npx @nitra/cursor fix <id>`. Файл виконує перевірку whitelist, генерує summary та повертає агрегований код виходу.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
1. Визначає ID правила на основі шляху директорії правила.
|
|
10
|
+
2. Зчитує конфігурацію з файлу `.n-cursor.json`.
|
|
11
|
+
3. Перевіряє, чи правило включено в конфігурації. Якщо ні, пропускає перевірку та повертає код успіху (0).
|
|
12
|
+
4. Виводить інформаційне повідомлення про початок перевірки правила.
|
|
13
|
+
5. Створює або отримує кеш для обходу файлової структури.
|
|
14
|
+
6. Запускає стандартний процес перевірки правила, передаючи кеш.
|
|
15
|
+
7. Отримує код завершення процесу перевірки правила.
|
|
16
|
+
8. Виводить підсумковий результат перевірки (успіх або невдача).
|
|
17
|
+
9. Повертає код завершення процесу перевірки правила.
|
|
18
|
+
|
|
19
|
+
## Гарантії поведінки
|
|
20
|
+
|
|
21
|
+
- Запускає правило з файлу `fix.mjs`.
|
|
22
|
+
- Читає файл `.n-cursor.json` для конфігурації правила.
|
|
23
|
+
- Перевіряє, чи правило включено в whitelist.
|
|
24
|
+
- Виводить підсумкову інформацію про результат виконання.
|
|
25
|
+
- Повертає код завершення, що відображає загальний статус виконання.
|
|
26
|
+
- Кешує результати для уникнення повторного виконання, поки не змінено конфігурацію або не було перезапущено.
|
|
27
|
+
- Не здійснює жодних мережевих запитів.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# run-rule.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Цей файл є оркестратором правил, що запускається з командного рядка. Він застосовує правила, визначаючи та виконуючи концерни, а також політичні концерни, використовуючи кешування для підвищення ефективності. Файл забезпечує централізований спосіб виконання правил та збору результатів.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
- `runTemplateSubsetConcern`: Перевіряє файл-концерт за допомогою шаблону, повертаючи 0, якщо все ОК, або 1, якщо є порушення.
|
|
10
|
+
- `evaluateAppliesGate`: Викликає функцію `applies` з `js/applies.mjs`, якщо вона існує та повертає `true`.
|
|
11
|
+
- `runPolicyConcern`: Запускає policy-концерт через `runConftestBatch`, повертаючи 0, якщо все ОК, або 1, якщо є порушення.
|
|
12
|
+
- `runRule`: Оркеструє правила, викликаючи `evaluateAppliesGate`, JS-концерни та policy-концерни, об'єднуючи exit-коди.
|
|
13
|
+
|
|
14
|
+
## Публічний API
|
|
15
|
+
|
|
16
|
+
- runTemplateSubsetConcern — Перевірка відповідності шаблонів: порівнює конфігурацію шаблонів з фактичним файлом, забезпечуючи дотримання правил.
|
|
17
|
+
- runRule — Запуск правила: виконує послідовність дій, включаючи перевірку концернів, і застосовує політику.
|
|
18
|
+
|
|
19
|
+
## Гарантії поведінки
|
|
20
|
+
|
|
21
|
+
- `applies-гейт` викликає `applies` з `js/applies.mjs`.
|
|
22
|
+
- `applies` повертає `false` — виводить `✅ правило не застосовне` і завершує.
|
|
23
|
+
- `JS-концерни` викликають `applies` після `applies-гейт`.
|
|
24
|
+
- `JS-концерни` можуть викликати `check` для виведення контексту.
|
|
25
|
+
- `Policy-концерни` викликають `runConftestBatch`.
|
|
26
|
+
- `resolveTargetFiles` кешує результати `walkCache` між `JS-концернами`.
|
|
27
|
+
- `createCheckReporter` у `Policy-концерни` OR-ює exit-коди.
|
|
28
|
+
- Exit-код правила — 0 або 1.
|
|
29
|
+
- `runTemplateSubsetConcern` запускає підмножину шаблонів.
|
|
30
|
+
- `runRule` запускає правило.
|
|
31
|
+
- Кеш використовується для зберігання результатів `resolveTargetFiles` у межах прогону.
|
|
32
|
+
- Немає взаємодії з мережею.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# run-standard-lint.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Файл забезпечує централізовану точку запуску для підкоманд `lint-<rule>` у `@nitra/cursor`. Він серіалізує та дедублює запуски, використовуючи `withLock`, щоб гарантувати узгодженість та ефективність. Це дозволяє легко інтегрувати нові правила та обробляти крос-cutting концерни, не вносячи змін у окремі файли правил.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
runLintFooCli: Запускає лінт для правила, використовуючи `runStandardLint`.
|
|
10
|
+
runStandardLint: Серіалізує та дедуплікує запуск лінту, використовуючи блокування. Визначає ідентифікатор правила з шляху.
|
|
11
|
+
|
|
12
|
+
## Публічний API
|
|
13
|
+
|
|
14
|
+
- runLintFooCli — Перевіряє код на відповідність стандартам Foo CLI.
|
|
15
|
+
- runStandardLint — Перевіряє код на відповідність загальним стандартам кодування.
|
|
16
|
+
|
|
17
|
+
## Гарантії поведінки
|
|
18
|
+
|
|
19
|
+
- Приймає `ruleId` з шляху файлу.
|
|
20
|
+
- Створює блокування з іменем `lint-<ruleId>`.
|
|
21
|
+
- Використовує попередньо збережені результати для уникнення повторного виконання.
|
|
22
|
+
- Повертає результат виконання.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# run-standard-rule.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Цей файл забезпечує публічний інтерфейс для оркестрування правил. Він обігріває виклик `discoverOneRule` до виконання правил, керуючи їхнім виконанням на основі контексту та політики. Це централізована точка інтеграції для запуску правил, забезпечуючи дедуплікацію та кешування для оптимізації продуктивності.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
1. Отримує шлях до директорії правила.
|
|
10
|
+
2. Визначає ідентифікатор правила з назви директорії.
|
|
11
|
+
3. Отримує дані правила з директорії правила.
|
|
12
|
+
4. Отримує або створює кеш для прогону.
|
|
13
|
+
5. Запускає виконання правила, використовуючи отримані дані та кеш.
|
|
14
|
+
6. Забезпечує унікальний лок для паралельного запуску правила.
|
|
15
|
+
7. Повертає код успіху (0) або код помилки (1) в залежності від результатів виконання правила.
|
|
16
|
+
|
|
17
|
+
## Гарантії поведінки
|
|
18
|
+
|
|
19
|
+
- Виконання правил інкапсулює логіку `discoverOneRule` та `runRule`.
|
|
20
|
+
- Виконання правил відбувається всередині блоку `withLock`.
|
|
21
|
+
- Виконання правил дедублюється на основі стану git-дерева.
|
|
22
|
+
- Різні правила можуть виконуватися паралельно.
|
|
23
|
+
- Кеш використовується для зберігання результатів виконання правил в межах одного прогону.
|
|
24
|
+
- Не допускається локальна логіка всередині правил. Розширення поведінки реалізується через опції контексту.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# skill-meta.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Цей файл парсить метадані скілу з файлу `meta.json` та надає інформацію про його конфігурацію. Він служить єдиним джерелом правди про скіл, замінюючи старий `auto.md`, і використовується для визначення, чи потрібно запускати скіл в окремому worktree, чи з кореня репозиторію. Це забезпечує узгодженість даних про скіли та полегшує їх використання в інших частинах системи.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
SKILL_ALWAYS: визначає літерал для безумовної автоактивації.
|
|
10
|
+
parseSkillAutoSpec: перетворює значення `auto` з `meta.json` у об’єкт `SkillAutoSpec`.
|
|
11
|
+
skillRequiresRoot: визначає, чи вимагає скіл запуску з кореня репо.
|
|
12
|
+
readSkillMetaRaw: читає та парсить `meta.json` одного скіла, повертаючи розпарсений об’єкт або `null`.
|
|
13
|
+
|
|
14
|
+
## Публічний API
|
|
15
|
+
|
|
16
|
+
- SKILL_ALWAYS — Активує скіл завжди.
|
|
17
|
+
- parseSkillAutoSpec — Перетворює специфікацію авто-скілу з JSON.
|
|
18
|
+
- skillRequiresRoot — Перевіряє, чи потрібен скілу доступ до кореневої директорії.
|
|
19
|
+
- readSkillMetaRaw — Зчитує та аналізує метадані скілу з файлу JSON.
|
|
20
|
+
|
|
21
|
+
## Гарантії поведінки
|
|
22
|
+
|
|
23
|
+
- Повертає `false` якщо не вдається розібрати `meta.json`.
|
|
24
|
+
- Повертає `null` якщо не вдається визначити `auto.spec`.
|
|
25
|
+
- `auto.spec` завжди є масивом id правил, якщо `auto.spec` визначено.
|
|
26
|
+
- `worktree` має значення `true` лише для скілів, які потребують окремого git-worktree.
|
|
27
|
+
- `requireRoot` має значення `true` лише для скілів, які мутують в CWD без worktree-ізоляції.
|
|
28
|
+
- Якщо `worktree` має значення `true`, поле `requireRoot` не використовується.
|
|
29
|
+
- Не використовує кеш.
|
|
30
|
+
- Не кидає винятків.
|
|
31
|
+
- Гарантує, що `meta.json` є єдиним джерелом правди для скілу.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# sync-gitignore-worktree.mjs
|
|
2
|
+
|
|
3
|
+
## Огляд
|
|
4
|
+
|
|
5
|
+
Файл забезпечує, що кореневий `.gitignore` проєкту ігнорує локальні git-worktree. Він гарантує, що всі артефакти, пов'язані з worktree, правильно включені в `.gitignore`, забезпечуючи консистентність та уникнення непередбачуваних проблем. Це ключовий компонент системи завжди-активного flow/worktree-tooling.
|
|
6
|
+
|
|
7
|
+
## Поведінка
|
|
8
|
+
|
|
9
|
+
1. Визначає корінь проєкту.
|
|
10
|
+
2. Перевіряє наявність в кореневому файлі `.gitignore` запису, що відповідає каталогу `.worktrees/`.
|
|
11
|
+
3. Якщо запису немає, викликає утиліту для додавання запису `.worktrees/` до `.gitignore`.
|
|
12
|
+
4. Утиліта додає запис, якщо його ще немає, інакше не робить нічого.
|
|
13
|
+
5. Повертає значення `true`, якщо запис було додано, інакше `false`.
|
|
14
|
+
|
|
15
|
+
## Публічний API
|
|
16
|
+
|
|
17
|
+
syncGitignoreWorktree — Синхронізує файл `.gitignore` в каталозі `worktrees` з кореневим файлом `.gitignore`.
|
|
18
|
+
|
|
19
|
+
## Гарантії поведінки
|
|
20
|
+
|
|
21
|
+
- Гарантує, що кореневий `.gitignore` проєкту ігнорує локальні git-worktree (`.worktrees/`).
|
|
22
|
+
- Викликається з дефолтного sync (`npx \@nitra/cursor`) окремим top-level кроком.
|
|
23
|
+
- Не викликається в контексті `syncClaudeConfig`.
|
|
24
|
+
- `.worktrees/` є артефактом завжди-активного flow/worktree-tooling.
|
|
25
|
+
- Один запис `.worktrees/` покриває каталог worktree та всі sibling-файли в ньому.
|
|
26
|
+
- Запис безумовний, без гейта за `.n-cursor.json`-правилами.
|
|
27
|
+
- Продюсер артефактів — завжди-активний flow.
|
|
28
|
+
- Делегує наявній idempotent+append-only утиліті `ensureGitignoreEntries`.
|
|
29
|
+
- `ensureGitignoreEntries` не перезаписує/не видаляє наявні рядки.
|
|
30
|
+
- `ensureGitignoreEntries` створює `.gitignore`, якщо нема.
|
|
31
|
+
- Не використовує кешування.
|