@nitra/cursor 1.6.4 → 1.6.5
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/README.md +8 -2
- package/bin/n-cursor.js +28 -4
- package/package.json +1 -1
- package/schemas/n-cursor.json +4 -0
package/README.md
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
```json
|
|
16
16
|
{
|
|
17
|
+
"$schema": "https://unpkg.com/@nitra/cursor/schemas/n-cursor.json",
|
|
17
18
|
"rules": ["js-format", "npm-module", "text"]
|
|
18
19
|
}
|
|
19
20
|
```
|
|
@@ -30,6 +31,7 @@
|
|
|
30
31
|
|
|
31
32
|
```json
|
|
32
33
|
{
|
|
34
|
+
"$schema": "https://unpkg.com/@nitra/cursor/schemas/n-cursor.json",
|
|
33
35
|
"version": "2.5.0",
|
|
34
36
|
"rules": ["js-format", "text"]
|
|
35
37
|
}
|
|
@@ -39,11 +41,15 @@
|
|
|
39
41
|
|
|
40
42
|
```bash
|
|
41
43
|
npx @nitra/cursor
|
|
44
|
+
npx @nitra/cursor check
|
|
45
|
+
npx @nitra/cursor check bun ga
|
|
42
46
|
```
|
|
43
47
|
|
|
44
|
-
|
|
48
|
+
Команда `check` запускає programmatic перевірки з каталогу `scripts/` пакету. Якщо в корені репозиторію вже є `.n-cursor.json`, перед перевірками виконується зчитування конфігу — зокрема додається або виправляється поле `$schema`, якщо воно відсутнє або не збігається з очікуваним URL.
|
|
45
49
|
|
|
46
|
-
|
|
50
|
+
CLI автоматично (команда завантаження правил без підкоманди `check`):
|
|
51
|
+
|
|
52
|
+
1. Знайде або створить `.n-cursor.json` у поточній директорії (із полем `$schema` на JSON Schema пакету; якщо файл уже є без коректного `$schema`, поле буде додано або оновлено при зчитуванні конфігу)
|
|
47
53
|
2. Створить директорію `.cursor/rules/`, якщо її ще немає
|
|
48
54
|
3. Завантажить кожне з перелічених у конфігу правило з unpkg.com і збереже файли з префіксом `n-`
|
|
49
55
|
4. Після оновлення файлів на диску згенерує в корені проєкту **`AGENTS.md`**: повний вміст береться з шаблону пакету `AGENTS.template.md`, а список правил у шаблоні формується з **усіх наявних файлів `*.mdc`** у `.cursor/rules/` (відсортовано за ім’ям)
|
package/bin/n-cursor.js
CHANGED
|
@@ -5,12 +5,14 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Використання:
|
|
7
7
|
* `npx \@nitra/cursor` — завантажити cursor-правила
|
|
8
|
-
* `npx \@nitra/cursor check` — перевірити правила, перелічені в AGENTS.md (якщо є check-*.mjs)
|
|
8
|
+
* `npx \@nitra/cursor check` — перевірити правила, перелічені в AGENTS.md (якщо є check-*.mjs);
|
|
9
|
+
* якщо в корені вже є `.n-cursor.json`, спочатку зчитується конфіг і за потреби дописується `$schema`
|
|
9
10
|
* `npx \@nitra/cursor check bun` — перевірити лише вказані правила (ігнорує AGENTS.md)
|
|
10
11
|
*
|
|
11
12
|
* Якщо у корені репозиторію немає .n-cursor.json, спочатку перейменовується за наявності nitra-cursor.json;
|
|
12
13
|
* у `.cursor/rules` файли `nitra-*.mdc` перейменовуються на `n-*.mdc`; інакше конфіг створюється автоматично
|
|
13
|
-
* з усіма правилами з каталогу mdc пакету (їх можна відредагувати після створення).
|
|
14
|
+
* з усіма правилами з каталогу mdc пакету (їх можна відредагувати після створення). У файлі завжди має бути
|
|
15
|
+
* поле `$schema` з посиланням на JSON Schema пакету; при зчитуванні конфігу воно додається або виправляється на диску, якщо відсутнє або некоректне.
|
|
14
16
|
*
|
|
15
17
|
* Файл AGENTS.md у корені: щоразу повністю перезаписується змістом з AGENTS.template.md
|
|
16
18
|
* пакету; список правил у шаблоні будується з файлів *.mdc у .cursor/rules поточного проєкту.
|
|
@@ -33,6 +35,8 @@ import { fileURLToPath } from 'node:url'
|
|
|
33
35
|
const PACKAGE_NAME = '@nitra/cursor'
|
|
34
36
|
const UNPKG_BASE = 'https://unpkg.com'
|
|
35
37
|
const CONFIG_FILE = '.n-cursor.json'
|
|
38
|
+
/** URL JSON Schema для `.n-cursor.json` (поле `$schema` у файлі конфігурації) */
|
|
39
|
+
const CONFIG_SCHEMA_URL = `${UNPKG_BASE}/${PACKAGE_NAME}/schemas/n-cursor.json`
|
|
36
40
|
const AGENTS_FILE = 'AGENTS.md'
|
|
37
41
|
const AGENTS_TEMPLATE_FILE = 'AGENTS.template.md'
|
|
38
42
|
const RULES_DIR = '.cursor/rules'
|
|
@@ -144,7 +148,7 @@ async function migrateLegacyConfigIfNeeded() {
|
|
|
144
148
|
|
|
145
149
|
/**
|
|
146
150
|
* Зчитує конфіг .n-cursor.json з поточної директорії
|
|
147
|
-
* @returns {Promise<{rules: string[], skills: string[], version?: string}
|
|
151
|
+
* @returns {Promise<{ $schema: string, rules: string[], skills: string[], version?: string } & Record<string, unknown>>} rules, skills (id без префікса n-), опційно version; при відсутності файлу створює дефолтний конфіг
|
|
148
152
|
*/
|
|
149
153
|
async function readConfig() {
|
|
150
154
|
await migrateLegacyConfigIfNeeded()
|
|
@@ -152,7 +156,7 @@ async function readConfig() {
|
|
|
152
156
|
if (!existsSync(configPath)) {
|
|
153
157
|
const rules = await discoverBundledRuleNames()
|
|
154
158
|
const skills = await discoverBundledSkillNames()
|
|
155
|
-
const defaultConfig = { rules, skills }
|
|
159
|
+
const defaultConfig = { $schema: CONFIG_SCHEMA_URL, rules, skills }
|
|
156
160
|
await writeFile(configPath, `${JSON.stringify(defaultConfig, null, 2)}\n`, 'utf8')
|
|
157
161
|
console.log(
|
|
158
162
|
`📝 Створено ${CONFIG_FILE} з усіма правилами (${rules.length}) і skills (${skills.length}) з пакету. За потреби відредагуйте списки.\n`
|
|
@@ -175,6 +179,15 @@ async function readConfig() {
|
|
|
175
179
|
}
|
|
176
180
|
config.skills = await discoverBundledSkillNames()
|
|
177
181
|
}
|
|
182
|
+
|
|
183
|
+
if (config.$schema !== CONFIG_SCHEMA_URL) {
|
|
184
|
+
const { $schema: _omit, ...rest } = config
|
|
185
|
+
const normalized = { $schema: CONFIG_SCHEMA_URL, ...rest }
|
|
186
|
+
await writeFile(configPath, `${JSON.stringify(normalized, null, 2)}\n`, 'utf8')
|
|
187
|
+
console.log(`📝 Оновлено поле $schema у ${CONFIG_FILE}\n`)
|
|
188
|
+
return normalized
|
|
189
|
+
}
|
|
190
|
+
|
|
178
191
|
return config
|
|
179
192
|
}
|
|
180
193
|
|
|
@@ -546,6 +559,17 @@ async function runChecks(requestedRules) {
|
|
|
546
559
|
throw new Error('No check scripts found')
|
|
547
560
|
}
|
|
548
561
|
|
|
562
|
+
const root = cwd()
|
|
563
|
+
const legacyConfigPath = join(root, 'nitra-cursor.json')
|
|
564
|
+
if (existsSync(join(root, CONFIG_FILE)) || existsSync(legacyConfigPath)) {
|
|
565
|
+
try {
|
|
566
|
+
await readConfig()
|
|
567
|
+
} catch (error) {
|
|
568
|
+
console.error(`❌ ${error.message}`)
|
|
569
|
+
throw error
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
|
|
549
573
|
let rulesToCheck
|
|
550
574
|
if (requestedRules.length > 0) {
|
|
551
575
|
rulesToCheck = requestedRules
|
package/package.json
CHANGED
package/schemas/n-cursor.json
CHANGED
|
@@ -6,6 +6,10 @@
|
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": true,
|
|
8
8
|
"properties": {
|
|
9
|
+
"$schema": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "Посилання на JSON Schema для автодоповнення та валідації в IDE; має збігатися з $id цієї схеми (рекомендовано завжди вказувати)."
|
|
12
|
+
},
|
|
9
13
|
"rules": {
|
|
10
14
|
"type": "array",
|
|
11
15
|
"description": "Ідентифікатори правил без префікса n- (відповідають файлам n-<id>.mdc).",
|