@nitra/cursor 5.3.3 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-template/settings.template.json +2 -2
- package/.pi-template/extensions/n-cursor-adr/docs/index.md +13 -24
- package/CHANGELOG.md +17 -0
- package/bin/n-cursor.js +43 -22
- package/lib/docs/llm.md +23 -12
- 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/rules/doc-files/js/docs/docgen-extract-anchors.md +45 -0
- package/rules/doc-files/js/docs/docgen-extract.md +39 -0
- package/rules/doc-files/js/docs/docgen-files-batch.md +35 -0
- package/rules/doc-files/js/docs/docgen-gen.md +46 -0
- package/rules/doc-files/js/docs/docgen-ignore.md +37 -0
- 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-0012.md +5 -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-extract-anchors.md +0 -27
- package/skills/doc-files/js/docs/docgen-extract.md +0 -29
- package/skills/doc-files/js/docs/docgen-files-batch.md +0 -25
- package/skills/doc-files/js/docs/docgen-gen.md +0 -30
- 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
|
@@ -1,52 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
docgen:
|
|
3
|
+
source: npm/scripts/sync-claude-config.mjs
|
|
4
|
+
crc: ad7b8440
|
|
5
|
+
score: 95
|
|
6
|
+
---
|
|
7
|
+
|
|
1
8
|
# sync-claude-config.mjs
|
|
2
9
|
|
|
3
10
|
## Огляд
|
|
4
11
|
|
|
5
|
-
|
|
12
|
+
Файл синхронізує конфігурацію Claude Code (`.claude/settings.json`), slash-команди з темплейту та Cursor hooks (`.cursor/hooks.json`) у поточний проєкт з використанням темплейтів пакету `npm/.claude-template/`. Він виконує злиття користувацьких полів, дозволів та хуків з різних джерел. Синхронізуються та видаляються залежні скрипти та фрагменти конфігурації.
|
|
6
13
|
|
|
7
14
|
## Поведінка
|
|
8
15
|
|
|
9
|
-
|
|
10
|
-
- `syncGitignoreAdrFragment`: Дописує відсутні рядки з канонічного фрагменту `.gitignore` у `.gitignore` проєкту.
|
|
11
|
-
- `syncClaudeCommands`: Копіює slash-команди з `commands/` темплейту в `.claude/commands/*.md`.
|
|
12
|
-
- `syncClaudeSettings`: Об'єднує конфігурацію Claude Code з темплейту, зберігаючи користувацькі налаштування та перезаписуючи хуки, що ідентифікуються маркерами.
|
|
13
|
-
- `syncCursorHooksConfig`: Об'єднує конфігурацію хуків Cursor з темплейту, додаючи або видаляючи хуки ADR Stop-hook залежно від наявності правила `adr`.
|
|
14
|
-
- `syncAdrHookScript`: Копіює bash-скрипт ADR capture Stop-hook з темплейту в `.claude/hooks/capture-decisions.sh`.
|
|
15
|
-
- `syncAdrNormalizeHookScript`: Копіює bash-скрипт ADR normalize Stop-hook з темплейту в `.claude/hooks/normalize-decisions.sh`.
|
|
16
|
-
- `syncAdrHookLibScripts`: Копіює bash-скрипти lib-файлів з `commands/` темплейту в `.claude/hooks/lib/`.
|
|
17
|
-
- `removeOrphanAdrHookLib`: Видаляє директорію lib-файлів з `.claude/hooks/lib/`, якщо правило `adr` вимкнено.
|
|
18
|
-
- `syncPiExtensions`: Копіює розширення TypeScript з `npm/.pi-template/extensions/n-cursor-adr/` в `.pi/extensions/n-cursor-adr/`.
|
|
19
|
-
- `removeOrphanPiExtension`: Видаляє директорію розширення TypeScript з `.pi/extensions/n-cursor-adr/`, якщо правило `adr` вимкнено.
|
|
20
|
-
- `syncClaudeConfig`: Синхронізує конфігурацію Claude Code та Cursor hooks, об'єднуючи їх та додаючи/видаляючи хуки
|
|
16
|
+
MANAGED_HOOK_COMMAND_MARKER Маркер PostToolUse fix-hook
|
|
21
17
|
|
|
22
|
-
|
|
18
|
+
DOC_FILES_HOOK_COMMAND_MARKER Маркер doc-files staleness-hook
|
|
23
19
|
|
|
24
|
-
|
|
25
|
-
- LEGACY_STOP_HOOK_COMMAND_MARKER — Маркер для legacy-хуків Stop, використовується під час оновлення.
|
|
26
|
-
- ADR_HOOK_COMMAND_MARKER — Маркер для хуків ADR Stop, визначає шлях до скрипту capture-decisions.
|
|
27
|
-
- ADR_NORMALIZE_HOOK_COMMAND_MARKER — Маркер для хуків ADR Stop, визначає шлях до скрипту normalize-decisions.
|
|
28
|
-
- CURSOR_ADR_HOOK_COMMAND_MARKER — Маркер для хуків Cursor ADR Stop, шлях до скрипту в `.cursor/hooks.json`.
|
|
29
|
-
- CURSOR_ADR_NORMALIZE_HOOK_COMMAND_MARKER — Маркер для хуків Cursor ADR Normalize Stop, шлях до скрипту в `.cursor/hooks.json`.
|
|
30
|
-
- MANAGED_HOOK_COMMAND_MARKERS — Усі маркери managed-хуків пакета.
|
|
31
|
-
- PI_DIR — Корінь артефактів pi.dev у проєкті-споживачі.
|
|
32
|
-
- PI_EXTENSIONS_DIR — Директорія pi.dev TS-extensions у проєкті-споживачі.
|
|
33
|
-
- PI_TEMPLATE_DIR_NAME — Назва bundled-директорії pi-template у пакеті `@nitra/cursor`.
|
|
34
|
-
- PI_EXTENSION_NAME — Ім'
|
|
20
|
+
LEGACY_STOP_HOOK_COMMAND_MARKER Маркер старого Stop-hook
|
|
35
21
|
|
|
36
|
-
|
|
22
|
+
ADR_HOOK_COMMAND_MARKER Маркер ADR Stop-hook
|
|
23
|
+
|
|
24
|
+
ADR_NORMALIZE_HOOK_COMMAND_MARKER Маркер ADR Stop-hook
|
|
25
|
+
|
|
26
|
+
CURSOR_ADR_HOOK_COMMAND_MARKER Маркер Cursor ADR Stop-hook
|
|
27
|
+
|
|
28
|
+
CURSOR_ADR_NORMALIZE_HOOK_COMMAND_MARKER Маркер Cursor ADR Normalize Stop-hook
|
|
29
|
+
|
|
30
|
+
MANAGED_HOOK_COMMAND_MARKERS Маркерів для відрізнення managed-hook'ів
|
|
31
|
+
|
|
32
|
+
PI_DIR Корінь pi.dev артефактів
|
|
33
|
+
|
|
34
|
+
PI_EXTENSIONS_DIR Директорія pi.dev TS-extensions
|
|
35
|
+
|
|
36
|
+
PI_TEMPLATE_DIR_NAME Назва bundled-директорії pi-template
|
|
37
|
+
|
|
38
|
+
PI_EXTENSION_NAME Імʼя bundled pi-extension'а
|
|
39
|
+
|
|
40
|
+
ADR_GITIGNORE_SNIPPET_REL Відносний шлях до канонічного фрагмента `.gitignore` для ADR Stop-hook'ів
|
|
41
|
+
|
|
42
|
+
mergeAllowList Зливає список allow-permissions без дублікатів
|
|
37
43
|
|
|
38
|
-
|
|
44
|
+
mergeHooks Зливає hooks-секцію, видаляючи managed-групи з існуючої конфігурації
|
|
39
45
|
|
|
40
|
-
|
|
46
|
+
mergeSettings Зливає конфігурацію Claude, перевіряючи та зливаючи permissions та hooks
|
|
41
47
|
|
|
42
|
-
|
|
48
|
+
mergeCursorHooksConfig Зливає конфігурацію Cursor, керуючи додаванням/видаленням ADR stop entries
|
|
43
49
|
|
|
44
|
-
|
|
50
|
+
syncCursorHooksConfig Синхронізує `.cursor/hooks.json` для Cursor Agent stop-hooks
|
|
45
51
|
|
|
46
|
-
`.claude/
|
|
52
|
+
syncClaudeSettings Синхронізує `.claude/settings.json` за темплейтом
|
|
47
53
|
|
|
48
|
-
|
|
54
|
+
syncAdrHookScript Копіює канонічний bash-скрипт ADR capture Stop-hook з темплейту
|
|
49
55
|
|
|
50
|
-
|
|
56
|
+
syncAdrNormalizeHookScript Копіює канонічний bash-скрипт ADR normalize Stop-hook з темплейту
|
|
57
|
+
|
|
58
|
+
syncAdrHookLibScripts Копіює `.sh`-файли з `.claude-template/hooks/lib/` у `.claude/hooks/`
|
|
59
|
+
|
|
60
|
+
removeOrphanAdrHookLib Видаляє директорію `.claude/hooks/lib/` з проєкту-споживача
|
|
61
|
+
|
|
62
|
+
syncPiExtensions Копіює bundled pi.dev TS-extension з пакета у проєкт
|
|
63
|
+
|
|
64
|
+
removeOrphanPiExtension Видаляє директорію `.pi/extensions/n-cursor-adr/` з проєкту-споживача
|
|
65
|
+
|
|
66
|
+
syncGitignoreAdrFragment Дописує відсутні рядки з канонічного ADR-фрагмента до кореневого `.gitignore` проєкту
|
|
67
|
+
|
|
68
|
+
syncClaudeCommands Копіює slash-команди з `commands/` темплейту у `.claude/commands/`
|
|
69
|
+
|
|
70
|
+
syncClaudeConfig Виконує повну синхронізацію Claude Code-конфігу з темплейту
|
|
71
|
+
|
|
72
|
+
## Публічний API
|
|
73
|
+
|
|
74
|
+
MANAGED_HOOK_COMMAND_MARKER — Маркер для хуків PostToolUse fix-hook'а (`npx --no @nitra/cursor post-tool-use-fix`).
|
|
75
|
+
DOC_FILES_HOOK_COMMAND_MARKER — Маркер для хуків doc-files staleness-hook'ів (PostToolUse `--hook` та Stop-гейт `--git`).
|
|
76
|
+
LEGACY_STOP_HOOK_COMMAND_MARKER — Маркер для старого Stop-hook'а — для очищення при оновленні існуючих інсталяцій.
|
|
77
|
+
ADR_HOOK_COMMAND_MARKER — Маркер для ADR Stop-hook'а — підрядок шляху до bash-скрипта capture-decisions.sh.
|
|
78
|
+
ADR_NORMALIZE_HOOK_COMMAND_MARKER — Маркер для ADR Stop-hook'а — підрядок шляху до bash-скрипта normalize-decisions.sh.
|
|
79
|
+
CURSOR_ADR_HOOK_COMMAND_MARKER — Маркер для Cursor ADR Stop-hook'а — той самий script path, але в `.cursor/hooks.json`.
|
|
80
|
+
CURSOR_ADR_NORMALIZE_HOOK_COMMAND_MARKER — Маркер для Cursor ADR Stop-hook'а — той самий script path, але в `.cursor/hooks.json`.
|
|
81
|
+
MANAGED_HOOK_COMMAND_MARKERS — Група маркерів managed-hook'ів пакета — відрізняються від користувацьких.
|
|
82
|
+
Legacy stop-hook включений сюди, щоб старі entries автоматично видалялись при наступному sync-у.
|
|
83
|
+
PI_DIR — Корінь артефактів pi.dev у проєкті-споживачі.
|
|
84
|
+
PI_EXTENSIONS_DIR — Директорія TS-розширень pi.dev у проєкті-споживачі.
|
|
85
|
+
PI_TEMPLATE_DIR_NAME — Назва bundled-директорії pi-template у пакеті `@nitra/cursor`.
|
|
86
|
+
PI_EXTENSION_NAME — Імʼя bundled pi-extension'а для ADR capture/normalize.
|
|
87
|
+
ADR_GITIGNORE_SNIPPET_REL — Відносний шлях до канонічного фрагмента `.gitignore` для ADR Stop-hook'ів у tarball пакета.
|
|
88
|
+
mergeAllowList — Зливає список allow-permissions: об'єднує існуючі та темплейтні дозволи без дублікатів, зберігаючи користувацький порядок.
|
|
89
|
+
mergeHooks — Зливає hooks-секцію. Видаляє managed-групи з існуючої конфігурації та дописує managed-групи з темплейту. Перебір подій union-у враховує зміну порядку хуків.
|
|
90
|
+
mergeSettings — Повертає об'єднаний об'єкт settings.json.
|
|
91
|
+
mergeCursorHooksConfig — Зливає `.cursor/hooks.json`: користувацькі записи зберігаються, managed ADR записи в `hooks.stop` перезаписуються або видаляються залежно від `includeAdrHook`.
|
|
92
|
+
syncCursorHooksConfig — Синхронізує `.cursor/hooks.json` для Cursor Agent stop-hooks. Cursor читає project-level config з `.cursor/hooks.json`; хук-скрипти залишаються спільними з Claude Code у `.claude/hooks/`.
|
|
93
|
+
syncClaudeSettings — Синхронізує `.claude/settings.json` за темплейтом, зберігаючи решту користувацьких полів.
|
|
94
|
+
syncAdrHookScript — Копіює канонічний `.claude/hooks/capture-decisions.sh` з темплейту пакета.
|
|
95
|
+
syncAdrNormalizeHookScript — Копіює канонічний `.claude/hooks/normalize-decisions.sh` з темплейту пакета.
|
|
96
|
+
syncAdrHookLibScripts — Копіює всі `.sh`-файли з `.claude-template/hooks/lib/` у `.claude/hooks/lib/` проєкту.
|
|
97
|
+
Файли source-only (без exec bit) — їх source-ять capture/normalize-decisions.sh, щоб уникнути дублювання спільної bash-логіки (`is_tooling_only_change`, `git_diff_only_version_field`).
|
|
98
|
+
Тека fully-owned — при кожному sync-у перезаписується.
|
|
99
|
+
removeOrphanAdrHookLib — Видаляє директорію `.claude/hooks/lib/` з проєкту-споживача. Викликається, коли правило `adr` вимкнено — бібліотечні файли не самостійні, і їх не потрібні.
|
|
100
|
+
syncPiExtensions — Копіює bundled pi.dev TS-extension `npm/.pi-template/extensions/n-cursor-adr/` (всі файли — `index.ts`, `tsconfig.json`, потенційні `package.json`/`.gitignore` тощо`) у `.pi/extensions/n-cursor-adr/` проєкту-споживача. Тека fully-owned: при кожному sync-у перезаписується. Якщо bundled template відсутній (legacy-версії пакета без `.pi-template/`) або в ньому немає `index.ts` — повертається `{written: false}` без помилки.
|
|
101
|
+
Розширення поверх `index.ts` (tsconfig тощо) потрібні, бо `.pi/extensions/` синхронізується як у проєкти-споживачі, а IDE/TS-сервер мусить резолвити `node:*` модулі без додаткових project-wide конфігів.
|
|
102
|
+
removeOrphanPiExtension — Видаляє директорію `.pi/extensions/n-cursor-adr/` з проєкту-споживача. Викликається, коли правило `adr` вимкнено у `.n-cursor.json` — бібліотечні файли не самостійні, і їх не потрібні (симетрично до cleanup-у `.claude/hooks/{capture,normalize}-decisions.sh`).
|
|
103
|
+
syncGitignoreAdrFragment — Дописує в кореневий `.gitignore` проєкту відсутні рядки з канонічного ADR-фрагмента.
|
|
104
|
+
syncClaudeCommands — Копіює всі slash-команди з `templateDir/commands/` у `.claude/commands/`. Команди ідентифікуються тим, що вони лежать у темплейті — не перетинаються з командами скілів (n-fix, n-lint, ...).
|
|
105
|
+
syncClaudeConfig — Виконує повну синхронізацію Claude Code-конфігу з темплейту пакету в проєкт. Використовується з `bin/n-cursor.js` після інших синків.
|
|
106
|
+
|
|
107
|
+
## Гарантії поведінки
|
|
51
108
|
|
|
52
|
-
|
|
109
|
+
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
110
|
+
- За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
|
|
111
|
+
- Свідомо пропускає шляхи: `.git`.
|
|
112
|
+
- Не звертається до мережі.
|
|
@@ -1,52 +1,29 @@
|
|
|
1
1
|
---
|
|
2
2
|
docgen:
|
|
3
3
|
source: npm/scripts/worktree-cli.mjs
|
|
4
|
-
crc:
|
|
4
|
+
crc: 4fb54376
|
|
5
|
+
score: 100
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
# worktree-cli.mjs
|
|
8
9
|
|
|
9
10
|
## Огляд
|
|
10
11
|
|
|
11
|
-
Файл
|
|
12
|
+
Файл є CLI-оркестратором `worktree-tool` для керування конвенцією `.worktrees/`. Він забезпечує виконання Git-операцій для додавання, видалення, перегляду та прибирання робочих просторів.
|
|
12
13
|
|
|
13
14
|
## Поведінка
|
|
14
15
|
|
|
15
|
-
1.
|
|
16
|
-
2.
|
|
17
|
-
3.
|
|
18
|
-
|
|
19
|
-
- Визначає унікальну назву гілки, якщо вона вже існує.
|
|
20
|
-
- Створює новий worktree, використовуючи вказану гілку та опис. Записує опис у файл `.md` у каталозі `.worktrees/`.
|
|
21
|
-
- Створює нагадування про незакомічені зміни основного дерева, якщо це необхідно.
|
|
22
|
-
4. **`remove` (Видалення worktree):**
|
|
23
|
-
- Перевіряє наявність необхідного параметра: назви гілки.
|
|
24
|
-
- Видаляє checkout та файл `.md` для вказаної гілки.
|
|
25
|
-
- Видаляє всі осиротілі файли опису, які залишилися після видалення гілки.
|
|
26
|
-
- Не створює і не обслуговує окремі sibling runtime-файли.
|
|
27
|
-
5. **`list` (Перелік worktree):**
|
|
28
|
-
- Виводить список всіх створених worktree, отриманий за допомогою команди `git worktree list`.
|
|
29
|
-
- Для кожного worktree виводить його повний шлях та вміст файлу опису `.md`.
|
|
30
|
-
6. **`prune` (Видалення осиротілих worktree):**
|
|
31
|
-
- Визначає всі файли опису `.md`, які більше не пов'язані з жодною зареєстрованою гілкою worktree.
|
|
32
|
-
- Видаляє ці осиротілі файли опису.
|
|
33
|
-
7. \*\*Викона
|
|
16
|
+
1. Запуск підкоманди add. Перевіряється наявність необхідного імені гілки та опису. Перевіряється унікальність назви для створення нового worktree. Збирається нагадування про незакомічені зміни основного дерева. Виконується git команда для створення worktree. Якщо команда не успішна, повертається помилка. Створюється та записується опис у файлі `.worktrees/`. Повертається код виходу.
|
|
17
|
+
2. Запуск підкоманди remove. Перевіряється наявність імені гілки. Перевіряється наявність необхідного імені гілки. Визначається шлях до worktree. Виконується git команда для видалення checkout. Якщо команда не успішна, повертається помилка. Якщо вказано прапорець --force, використовується примусовий режим. Видаляється відповідний файл опису. Повертається код виходу.
|
|
18
|
+
3. Запуск підкоманди list. Виконується git команда для отримання списку worktree. Виводиться результат. Для кожного зареєстрованого файлу опису з директорії `.worktrees/` зчитується вміст файлу та виводиться. Повертається код виходу.
|
|
19
|
+
4. Запуск підкоманди prune. Виконується git команда для прибирання worktree. Визначається список осиротілих файлів опису. Виконується git команда для прибирання worktree. Для кожного осиротілого файлу опису видаляється відповідний файл. Повертається код виходу.
|
|
34
20
|
|
|
35
21
|
## Публічний API
|
|
36
22
|
|
|
37
|
-
runWorktreeCli — Запускає
|
|
23
|
+
runWorktreeCli — Запускає команду для роботи з підкомандою worktree.
|
|
38
24
|
|
|
39
25
|
## Гарантії поведінки
|
|
40
26
|
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
- `add <branch> "<опис>"` створює гілку `worktree` з описом.
|
|
45
|
-
- `remove <branch> [--force]` видаляє checkout гілки `worktree`, але не видаляє саму гілку.
|
|
46
|
-
- `list` виводить список всіх `worktree`.
|
|
47
|
-
- `prune` видаляє `worktree` без checkout.
|
|
48
|
-
- Немає гарантій щодо стану git-репозиторію.
|
|
49
|
-
- Немає гарантій щодо наявності незакомічених змін.
|
|
50
|
-
- Немає гарантій щодо наявності осиротілих `worktree`.
|
|
51
|
-
- `runWorktreeCli` не кидає винятків.
|
|
52
|
-
- Помилки переховуються.
|
|
27
|
+
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
28
|
+
- За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
|
|
29
|
+
- Не звертається до мережі.
|
|
@@ -1,34 +1,32 @@
|
|
|
1
1
|
---
|
|
2
2
|
docgen:
|
|
3
3
|
source: npm/scripts/lib/assert-project-root.mjs
|
|
4
|
-
crc:
|
|
4
|
+
crc: adb87c16
|
|
5
|
+
score: 100
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
# assert-project-root.mjs
|
|
8
9
|
|
|
9
10
|
## Огляд
|
|
10
11
|
|
|
11
|
-
Файл
|
|
12
|
+
Файл перевіряє розташування поточного каталогу відносно кореня git-репозиторію. Функції надають доступ до шляху кореня репозиторію та перевірку, чи знаходиться поточний каталог саме в цьому корені. Код спирається на конфіги, визначені у `.n-cursor.json`.
|
|
12
13
|
|
|
13
14
|
## Поведінка
|
|
14
15
|
|
|
15
|
-
gitToplevel
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
gitToplevel
|
|
17
|
+
Повертає абсолютний шлях до кореня git-репозиторію або null, якщо git недоступний або не повертає кореня.
|
|
18
|
+
|
|
19
|
+
assertCwdIsProjectRoot
|
|
20
|
+
Перевіряє, чи знаходиться поточний каталог у корені git-репозиторію. Кидає помилку, якщо каталог знаходиться всередині репозиторію, але не в корені. Пропускає перевірку, якщо git не знаходить кореня.
|
|
18
21
|
|
|
19
22
|
## Публічний API
|
|
20
23
|
|
|
21
|
-
- gitToplevel —
|
|
22
|
-
- assertCwdIsProjectRoot —
|
|
24
|
+
- gitToplevel — повертає шлях до кореня git-репозиторію через `git rev-parse --show-toplevel`. Повертає `null`, якщо `dir` не є частиною git-репозиторію або `git` недоступний.
|
|
25
|
+
- assertCwdIsProjectRoot — генерує помилку, якщо `dir` знаходиться у піддиректорії git-репозиторію. Пропускає, якщо `toplevel` відсутній (наприклад, у `git-worktree`), дозволяючи запуск.
|
|
23
26
|
|
|
24
27
|
## Гарантії поведінки
|
|
25
28
|
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
- При невдачі синхронізації повертається `false` або `null`.
|
|
31
|
-
- Немає кешування.
|
|
32
|
-
- Не перехоплює винятки.
|
|
33
|
-
- Функція `gitToplevel` забезпечує доступ до кореня git-репозиторію.
|
|
34
|
-
- Функція `assertCwdIsProjectRoot` перевіряє, чи поточний `cwd` є коренем git-репозиторію.
|
|
29
|
+
- Read-only: файл не виконує операцій запису у файлову систему.
|
|
30
|
+
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
31
|
+
- За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
|
|
32
|
+
- Не звертається до мережі.
|
|
@@ -1,149 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
docgen:
|
|
3
|
+
source: npm/scripts/lib/changed-files.mjs
|
|
4
|
+
crc: 8148d84e
|
|
5
|
+
score: 100
|
|
6
|
+
---
|
|
7
|
+
|
|
1
8
|
# changed-files.mjs
|
|
2
9
|
|
|
3
10
|
## Огляд
|
|
4
11
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Логіка модуля:
|
|
8
|
-
|
|
9
|
-
- збирає tracked-modified та staged файли через `git diff` (з `--diff-filter=ACMR`, тобто Added/Copied/Modified/Renamed — без Deleted);
|
|
10
|
-
- додає untracked файли через `git ls-files --others --exclude-standard` (з повагою до `.gitignore`);
|
|
11
|
-
- дедуплікує об'єднаний список через `Set`;
|
|
12
|
-
- повертає relative-posix шляхи відносно `cwd`;
|
|
13
|
-
- поза git-репо або при помилці git мовчки повертає порожній список (для `gitLines`);
|
|
14
|
-
- для режиму "since base" — fail-closed: якщо базовий комміт недосяжний, кидає явну помилку, щоб gate не пройшов мовчки.
|
|
15
|
-
|
|
16
|
-
Видалені файли свідомо не включаються — лінтити неіснуючий файл немає сенсу.
|
|
17
|
-
|
|
18
|
-
## Експорти / API
|
|
19
|
-
|
|
20
|
-
Модуль експортує дві функції:
|
|
21
|
-
|
|
22
|
-
| Експорт | Тип | Призначення |
|
|
23
|
-
| -------------------------- | -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
|
|
24
|
-
| `collectChangedFiles` | `(cwd?: string) => string[]` | Список змінених + untracked файлів робочого дерева відносно `HEAD`. |
|
|
25
|
-
| `collectChangedFilesSince` | `(base: string \| null, cwd?: string) => string[]` | Список змінених + untracked файлів **відносно довільного базового комміту**. Без `base` — fallback на `collectChangedFiles`. |
|
|
26
|
-
|
|
27
|
-
Внутрішня (неекспортована) функція:
|
|
28
|
-
|
|
29
|
-
| Внутрішнє | Тип | Призначення |
|
|
30
|
-
| ---------- | ------------------------------------------- | ---------------------------------------------------------------------------------------------- |
|
|
31
|
-
| `gitLines` | `(args: string[], cwd: string) => string[]` | Виконує `git <args>` у `cwd` і повертає непорожні trim-нуті рядки stdout або `[]` при помилці. |
|
|
32
|
-
|
|
33
|
-
## Функції
|
|
34
|
-
|
|
35
|
-
### `gitLines(args, cwd)` (internal)
|
|
36
|
-
|
|
37
|
-
Виклик git-команди з парсингом stdout у масив рядків.
|
|
38
|
-
|
|
39
|
-
- **Сигнатура:** `function gitLines(args: string[], cwd: string): string[]`
|
|
40
|
-
- **Параметри:**
|
|
41
|
-
- `args` — масив аргументів для `git` (наприклад `['diff', 'HEAD', '--name-only']`).
|
|
42
|
-
- `cwd` — робоча директорія для процесу `git`.
|
|
43
|
-
- **Повертає:** масив непорожніх рядків stdout (після `trim`). Якщо `r.status !== 0` або є `r.error` — повертає `[]`.
|
|
44
|
-
- **Side effects:**
|
|
45
|
-
- Синхронно спавнить процес `git` через `spawnSync` з `node:child_process`;
|
|
46
|
-
- не пише в stdout/stderr батьківського процесу (всі потоки збираються через `encoding: 'utf8'`);
|
|
47
|
-
- не кидає винятків — fail-silent.
|
|
48
|
-
|
|
49
|
-
### `collectChangedFiles(cwd?)`
|
|
50
|
-
|
|
51
|
-
Збирає список змінених + untracked файлів робочого дерева відносно `HEAD`.
|
|
52
|
-
|
|
53
|
-
- **Сигнатура:** `function collectChangedFiles(cwd?: string): string[]`
|
|
54
|
-
- **Параметри:**
|
|
55
|
-
- `cwd` (опційно, дефолт `process.cwd()`) — корінь git-репо.
|
|
56
|
-
- **Алгоритм:**
|
|
57
|
-
1. `git diff HEAD --name-only --diff-filter=ACMR` — повертає всі tracked файли, які відрізняються від `HEAD` (staged + unstaged), фільтр `ACMR` відсікає Deleted.
|
|
58
|
-
2. `git ls-files --others --exclude-standard` — повертає untracked файли, які не ігноруються `.gitignore`.
|
|
59
|
-
3. Об'єднання обох списків через `new Set([...modified, ...untracked])` для дедуплікації.
|
|
60
|
-
- **Повертає:** `string[]` — унікальні relative-posix шляхи без видалених файлів.
|
|
61
|
-
- **Поведінка поза git-репо / при помилці:** `gitLines` мовчки повертає `[]` для обох викликів, тож результат — порожній масив.
|
|
62
|
-
|
|
63
|
-
### `collectChangedFilesSince(base, cwd?)`
|
|
64
|
-
|
|
65
|
-
Збирає список змінених + untracked файлів відносно довільного базового комміту. Призначено для сценаріїв, де базовий комміт зафіксовано у стані flow-турнікета (executor комітить кожен крок, тож потрібно ловити зміни «від base», а не «від HEAD»).
|
|
66
|
-
|
|
67
|
-
- **Сигнатура:** `function collectChangedFilesSince(base: string | null, cwd?: string): string[]`
|
|
68
|
-
- **Параметри:**
|
|
69
|
-
- `base` — SHA/ref базового комміту (типово `metadata.base_commit` зі стану flow). Якщо `null`/`undefined`/порожній — fallback на `collectChangedFiles(cwd)`.
|
|
70
|
-
- `cwd` (опційно, дефолт `process.cwd()`) — корінь git-репо.
|
|
71
|
-
- **Алгоритм:**
|
|
72
|
-
1. Якщо `base` falsy — повертає результат `collectChangedFiles(cwd)`.
|
|
73
|
-
2. Перевіряє досяжність base через `git rev-parse --verify --quiet <base>^{commit}`.
|
|
74
|
-
3. Якщо verify не успішний (`status !== 0` або `error`) — **кидає `Error`** з повідомленням: `collectChangedFilesSince: base-комміт «<base>» недосяжний у <cwd> (rebase/force-update?) — coverage --changed не може визначити scope`.
|
|
75
|
-
4. `git diff <base> --name-only --diff-filter=ACMR` — **без** `..`/`...`, **без** `HEAD`. Така форма порівнює base-комміт із поточним **робочим деревом**, тобто ловить одночасно: закомічене від base, staged та незакомічені модифікації.
|
|
76
|
-
5. `git ls-files --others --exclude-standard` — untracked файли (як у `collectChangedFiles`).
|
|
77
|
-
6. Дедуплікація через `Set`.
|
|
78
|
-
- **Повертає:** `string[]` — унікальні relative-posix шляхи без видалених файлів.
|
|
79
|
-
- **Контракт fail-closed:** на відміну від `collectChangedFiles`, ця функція **навмисно** не маскує помилку недосяжного base. Інакше `git diff` повернув би exit 128, `gitLines` дав би `[]`, і gate мовчки пройшов би без перевірки — це порушує безпеку coverage-перевірки.
|
|
80
|
-
- **Side effects:**
|
|
81
|
-
- спавнить два-три git-процеси (один verify + два data-збори, або один fallback);
|
|
82
|
-
- може кинути `Error` (єдина точка throw у модулі).
|
|
83
|
-
|
|
84
|
-
## Залежності
|
|
85
|
-
|
|
86
|
-
### Зовнішні (built-in Node.js)
|
|
87
|
-
|
|
88
|
-
- `node:child_process` — імпорт `spawnSync` для синхронного виклику git-команд із захопленням stdout.
|
|
89
|
-
|
|
90
|
-
### Системні (runtime)
|
|
91
|
-
|
|
92
|
-
- `git` — має бути доступний у `PATH` процесу. За відсутності `gitLines` поверне `[]` (через `r.error`/ненульовий статус).
|
|
93
|
-
|
|
94
|
-
### Внутрішні модулі
|
|
95
|
-
|
|
96
|
-
Файл не імпортує жодного локального модуля проєкту (zero-dependency бібліотечний листок).
|
|
97
|
-
|
|
98
|
-
## Потік виконання / Використання
|
|
99
|
-
|
|
100
|
-
### Quick-lint (lint-оркестратор)
|
|
101
|
-
|
|
102
|
-
```js
|
|
103
|
-
import { collectChangedFiles } from './changed-files.mjs'
|
|
104
|
-
|
|
105
|
-
const files = collectChangedFiles()
|
|
106
|
-
// → лінт тільки цих файлів, замість обходу всього монорепо
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
Quick-режим прагне мінімізувати IO: лінтить лише те, що користувач щойно змінив у дереві (modified + staged + untracked), ігноруючи решту репо.
|
|
110
|
-
|
|
111
|
-
### Coverage / flow-турнікет
|
|
112
|
-
|
|
113
|
-
```js
|
|
114
|
-
import { collectChangedFilesSince } from './changed-files.mjs'
|
|
115
|
-
|
|
116
|
-
const base = metadata.base_commit // SHA, зафіксований при старті flow-кроку
|
|
117
|
-
const scope = collectChangedFilesSince(base, repoRoot)
|
|
118
|
-
// → файли, які змінилися з моменту base, незалежно від того,
|
|
119
|
-
// чи їх вже закомічено в проміжних кроках executor-а
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
Чому саме `git diff <base>` без `..`/`...`:
|
|
123
|
-
|
|
124
|
-
- `git diff A..B` — порівнює дерева A та B, **ігнорує** робоче дерево;
|
|
125
|
-
- `git diff A...B` — порівнює B з merge-base(A,B), теж ігнорує робоче дерево;
|
|
126
|
-
- `git diff <base>` (один аргумент) — порівнює `<base>` із **робочим деревом** (включно з unstaged змінами).
|
|
127
|
-
|
|
128
|
-
Це критично для flow-турнікета, де executor може як комітити проміжні зміни, так і залишати їх unstaged — gate повинен побачити всі зміни від `base` однаково.
|
|
129
|
-
|
|
130
|
-
### Поведінка при недосяжному base
|
|
12
|
+
Файл збирає змінені та незакомічені файли з робочого дерева. Визначає базовий комміт для перевірок у межах зміненого діапазону. Збирає змінені та незакомічені файли відносно базового комміту.
|
|
131
13
|
|
|
132
|
-
|
|
14
|
+
## Поведінка
|
|
133
15
|
|
|
134
|
-
|
|
135
|
-
|
|
16
|
+
collectChangedFiles Збирає змінені та незакомічені файли з робочого дерева.
|
|
17
|
+
resolveChangedBase Визначає базовий комміт для scoped-перевірок.
|
|
18
|
+
collectChangedFilesSince Збирає змінені та незакомічені файли відносно базового комміту.
|
|
136
19
|
|
|
137
|
-
|
|
20
|
+
## Публічний API
|
|
138
21
|
|
|
139
|
-
|
|
22
|
+
- collectChangedFiles: Збирає список змінених та невідстежених файлів з робочого дерева відносно робочого дерева.
|
|
23
|
+
- resolveChangedBase: Визначає базовий комміт для обмежених перевірок без використання зовнішнього стану.
|
|
24
|
+
- Пріоритет: локальна `main`, потім `origin/main`.
|
|
25
|
+
- Якщо обидві відсутні, повертає null, і викликаючий порівнює лише робоче дерево з HEAD.
|
|
26
|
+
- collectChangedFilesSince: Збирає список змінених та невідстежених файлів відносно базового комміту.
|
|
27
|
+
- git diff <base>: Порівнює комміт `base` з поточним робочим деревом (включаючи закомічені та незакомічені модифікації).
|
|
28
|
+
- Якщо `base` відсутній, використовується `collectChangedFiles`.
|
|
140
29
|
|
|
141
|
-
|
|
30
|
+
## Гарантії поведінки
|
|
142
31
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
| `git` відсутній у PATH | Усі виклики `gitLines` → `[]`; `collectChangedFilesSince` із `base` → `Error` (verify впаде). |
|
|
147
|
-
| `base` досяжний | `collectChangedFilesSince` повертає список (можливо порожній). |
|
|
148
|
-
| `base` недосяжний (rebase/force-push/shallow) | `collectChangedFilesSince` кидає `Error`. |
|
|
149
|
-
| `base` falsy (`null`/`undefined`/`''`/`0`) | `collectChangedFilesSince` → результат `collectChangedFiles(cwd)`. |
|
|
32
|
+
- Read-only: файл не виконує операцій запису у файлову систему.
|
|
33
|
+
- За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
|
|
34
|
+
- Не звертається до мережі.
|