@nitra/cursor 1.11.14 → 1.11.16
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.
|
@@ -145,7 +145,33 @@ if ! printf '%s' "$RESPONSE_TRIMMED" | grep -q '^## '; then
|
|
|
145
145
|
fi
|
|
146
146
|
|
|
147
147
|
TS=$(date +%Y%m%d-%H%M%S)
|
|
148
|
-
|
|
148
|
+
|
|
149
|
+
# Slug із першого `## [ADR|Runbook|Knowledge] <heading>`-рядка відповіді.
|
|
150
|
+
# Логіка локальна (без додаткового LLM-виклику): використовуємо вже згенерований heading.
|
|
151
|
+
# Конвенція кебаб-slug-у — як у normalize-decisions.sh:171: малі літери, дозволено цифри, дефіс,
|
|
152
|
+
# кирилиця; англомовні технічні терміни лишаються англійською без транслітерації.
|
|
153
|
+
HEADING=$(printf '%s' "$RESPONSE_TRIMMED" \
|
|
154
|
+
| awk '/^## (\[?(ADR|Runbook|Knowledge)\]?)/{ sub(/^## /,""); sub(/^\[?(ADR|Runbook|Knowledge)\]?[[:space:]]*:?[[:space:]]*/,""); print; exit }')
|
|
155
|
+
SLUG=$(printf '%s' "$HEADING" \
|
|
156
|
+
| tr '[:upper:]' '[:lower:]' \
|
|
157
|
+
| sed -E 's/[`«»"]//g; s/[ /,.:;()—–]+/-/g; s/[^a-zа-яёіїєґ0-9-]//g; s/-+/-/g; s/^-//; s/-$//' \
|
|
158
|
+
| cut -c1-60 \
|
|
159
|
+
| sed -E 's/-$//')
|
|
160
|
+
|
|
161
|
+
if [[ -z "$SLUG" ]]; then
|
|
162
|
+
# Fallback на старий формат, якщо heading не спарсився
|
|
163
|
+
OUT="$ADR_DIR/$TS-${SESSION_ID:0:8}.md"
|
|
164
|
+
else
|
|
165
|
+
# Колізії: <timestamp>-<slug>-<n>.md (n=2,3,...), як у normalize-decisions.sh:244-257
|
|
166
|
+
BASE="$ADR_DIR/$TS-$SLUG.md"
|
|
167
|
+
OUT="$BASE"
|
|
168
|
+
n=2
|
|
169
|
+
while [[ -e "$OUT" ]]; do
|
|
170
|
+
OUT="$ADR_DIR/$TS-$SLUG-$n.md"
|
|
171
|
+
n=$((n+1))
|
|
172
|
+
done
|
|
173
|
+
fi
|
|
174
|
+
|
|
149
175
|
{
|
|
150
176
|
printf -- '---\nsession: %s\ncaptured: %s\ntranscript: %s\n---\n\n' \
|
|
151
177
|
"$SESSION_ID" "$(date -Iseconds)" "$TRANSCRIPT_PATH"
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,20 @@
|
|
|
4
4
|
|
|
5
5
|
Формат — [Keep a Changelog](https://keepachangelog.com/uk/1.1.0/), нумерація — [SemVer](https://semver.org/lang/uk/).
|
|
6
6
|
|
|
7
|
+
## [1.11.16] - 2026-05-16
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- **`npm/rules/adr/adr.mdc`**, **`npm/scripts/auto-rules.mjs`**, **`npm/rules/adr/auto.md`** — правило `adr` тепер **увімкнене за замовчуванням** (`addRule('adr')` без умови, поруч з `addRule('text')`; `auto.md` = `завжди`). Раніше — opt-in вручну через `"adr"` у `rules`. Щоб вимкнути для конкретного репо — `"adr"` у `disable-rules`. Текст правила і JSDoc у `sync-claude-config.mjs` оновлено відповідно. Існуючі `.n-cursor.json` із явним `"adr"` у `rules` лишаються валідними (`mergeConfigWithAutoDetected` дедуплікує).
|
|
12
|
+
- **Мотивація:** ADR/Runbook/Knowledge capture виявився корисним для всіх проєктів команди, а не лише тих, де його свідомо ввімкнули; opt-out зручніший за opt-in, бо інтегрує hooks у новий репо з коробки.
|
|
13
|
+
|
|
14
|
+
## [1.11.15] - 2026-05-16
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- **`npm/.claude-template/hooks/capture-decisions.sh`** (+`.claude/hooks/capture-decisions.sh` синк) — Stop-hook тепер генерує **slug-name** для чернетки замість session-hash суфікса. Раніше: `<timestamp>-<session-id[0:8]>.md` (наприклад `20260516-090349-e513a1f0.md`). Тепер: `<timestamp>-<slug>.md` (наприклад `20260516-090349-структура-директорій-правила-fix-lint-policy.md`). **Slug береться з вже згенерованого LLM-заголовка** першого `## [ADR|Runbook|Knowledge] <heading>` блоку — без додаткового LLM-виклику, та сама вартість Stop-hook. Конвенція slug-у синхронізована з `normalize-decisions.sh:171`: малі літери, цифри, дефіс, кирилиця; англомовні технічні терміни лишаються англійською (`fix`, `lint`, `policy` — не транслітеруються). Колізії в межах однієї секунди — суфікс `-2`, `-3`, …, як у `normalize-decisions.sh:244-257`. Fallback на старий `<timestamp>-<session-id[0:8]>.md` якщо heading не спарсився (response без `## ADR|Runbook|Knowledge` префікса).
|
|
19
|
+
- **Мотивація:** після прогону `normalize-decisions.sh` нові чернетки створювалися з абстрактними session-hash іменами і знову вимагали LLM-`rewrite`-операцію щоб отримати читабельний slug. Тепер capture одразу пише читабельний slug → наступна нормалізація обмежується лише `delete`/`merge-into` для дублікатів (rename-операції стають рідкісними).
|
|
20
|
+
|
|
7
21
|
## [1.11.14] - 2026-05-16
|
|
8
22
|
|
|
9
23
|
### Removed
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nitra/cursor",
|
|
3
|
-
"version": "1.11.
|
|
3
|
+
"version": "1.11.16",
|
|
4
4
|
"description": "CLI для завантаження cursor-правил (префікс n-) у локальний репозиторій",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cli",
|
|
@@ -52,5 +52,8 @@
|
|
|
52
52
|
"engines": {
|
|
53
53
|
"bun": ">=1.3",
|
|
54
54
|
"node": ">=25"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@nitra/cursor": "^1.11.16"
|
|
55
58
|
}
|
|
56
59
|
}
|
package/rules/adr/adr.mdc
CHANGED
|
@@ -4,9 +4,9 @@ alwaysApply: true
|
|
|
4
4
|
version: '2.0'
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Правило
|
|
7
|
+
Правило увімкнене **за замовчуванням** (як [[text]]) — `npx @nitra/cursor` сам додає `"adr"` у `rules` файлу `.n-cursor.json`. Щоб вимкнути для конкретного репо (не кожен проєкт хоче літати ADR-чернеткам у `docs/`), додай `"adr"` у `disable-rules`.
|
|
8
8
|
|
|
9
|
-
Коли правило
|
|
9
|
+
Коли правило увімкнене (за замовчуванням), **`npx @nitra/cursor`** автоматично:
|
|
10
10
|
|
|
11
11
|
- копіює канонічний bash-скрипт у **`.claude/hooks/capture-decisions.sh`** (executable, повністю керується пакетом — на кожен sync перезаписується);
|
|
12
12
|
- копіює канонічний bash-скрипт у **`.claude/hooks/normalize-decisions.sh`** (батч-нормалізація чернеток через LLM);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
завжди
|
package/scripts/auto-rules.mjs
CHANGED
|
@@ -27,6 +27,7 @@ import { contentForVueImportScan } from './utils/vue-forbidden-imports.mjs'
|
|
|
27
27
|
/** Порядок автододавання правил відповідно до `rules/<rule>/auto.md`. */
|
|
28
28
|
export const AUTO_RULE_ORDER = Object.freeze([
|
|
29
29
|
'abie',
|
|
30
|
+
'adr',
|
|
30
31
|
'bun',
|
|
31
32
|
'capacitor',
|
|
32
33
|
'changelog',
|
|
@@ -657,6 +658,7 @@ export async function detectAutoRules({
|
|
|
657
658
|
addRule(item.id)
|
|
658
659
|
}
|
|
659
660
|
}
|
|
661
|
+
addRule('adr')
|
|
660
662
|
addRule('text')
|
|
661
663
|
if (facts.hasVueSource) {
|
|
662
664
|
addRule('vue')
|
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
* - `.claude/commands/n-check.md` — fully owned slash-команда.
|
|
13
13
|
* - `.claude/hooks/capture-decisions.sh` — fully owned bash-скрипт ADR capture Stop-hook;
|
|
14
14
|
* копіюється з `.claude-template/hooks/`, лише коли в `.n-cursor.json` `rules`
|
|
15
|
-
* присутнє `adr` (правило
|
|
16
|
-
*
|
|
15
|
+
* присутнє `adr` (правило увімкнене за замовчуванням; вимикається через
|
|
16
|
+
* `disable-rules: ["adr"]`). Якщо правила немає, керована ADR-група в hooks
|
|
17
|
+
* так само автоматично прибирається з settings.json.
|
|
17
18
|
* - `.claude/hooks/normalize-decisions.sh` — fully owned bash-скрипт ADR normalize
|
|
18
19
|
* Stop-hook (батч-нормалізація чернеток); умови — ті самі, що для `capture`.
|
|
19
20
|
*
|