@nitra/cursor 12.11.1 → 12.11.3

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.
Files changed (96) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/bin/n-cursor.js +0 -15
  3. package/package.json +1 -1
  4. package/rules/adr/js/docs/hooks.md +0 -2
  5. package/rules/bun/docs/index.md +2 -2
  6. package/rules/bun/docs/main.md +9 -9
  7. package/rules/bun/js/docs/fix-layout.md +25 -0
  8. package/rules/bun/js/docs/index.md +3 -2
  9. package/rules/bun/js/fix-layout.mjs +55 -0
  10. package/rules/bun/main.json +1 -1
  11. package/rules/bun/main.mjs +53 -3
  12. package/rules/changelog/js/docs/fix-consistency.md +27 -0
  13. package/rules/changelog/js/docs/index.md +1 -0
  14. package/rules/changelog/js/fix-consistency.mjs +50 -0
  15. package/rules/ci4/policy/vscode_extensions/docs/fix-vscode_extensions.md +21 -0
  16. package/rules/ci4/policy/vscode_extensions/docs/index.md +11 -0
  17. package/rules/ci4/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  18. package/rules/ga/policy/vscode_extensions/docs/fix-vscode_extensions.md +22 -0
  19. package/rules/ga/policy/vscode_extensions/docs/index.md +11 -0
  20. package/rules/ga/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  21. package/rules/graphql/policy/vscode_extensions/docs/fix-vscode_extensions.md +21 -0
  22. package/rules/graphql/policy/vscode_extensions/docs/index.md +11 -0
  23. package/rules/graphql/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  24. package/rules/js/js/dep-policy.mdc +19 -0
  25. package/rules/js/js/dep-policy.mjs +14 -6
  26. package/rules/js/js/docs/dep-policy.md +12 -10
  27. package/rules/js/js/docs/index.md +5 -5
  28. package/rules/js/policy/vscode_extensions/docs/fix-vscode_extensions.md +22 -0
  29. package/rules/js/policy/vscode_extensions/docs/index.md +11 -0
  30. package/rules/js/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  31. package/rules/js-run/js/docs/fix-runtime.md +25 -0
  32. package/rules/js-run/js/docs/index.md +3 -2
  33. package/rules/js-run/js/fix-runtime.mjs +41 -0
  34. package/rules/nginx-default-tpl/policy/vscode_extensions/docs/fix-vscode_extensions.md +21 -0
  35. package/rules/nginx-default-tpl/policy/vscode_extensions/docs/index.md +11 -0
  36. package/rules/nginx-default-tpl/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  37. package/rules/python/docs/index.md +2 -2
  38. package/rules/python/docs/main.md +12 -10
  39. package/rules/python/main.mjs +1 -0
  40. package/rules/rego/policy/vscode_extensions/docs/fix-vscode_extensions.md +22 -0
  41. package/rules/rego/policy/vscode_extensions/docs/index.md +11 -0
  42. package/rules/rego/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  43. package/rules/rust/docs/index.md +2 -2
  44. package/rules/rust/docs/main.md +8 -6
  45. package/rules/rust/main.mjs +11 -0
  46. package/rules/rust/policy/vscode_extensions/docs/fix-vscode_extensions.md +22 -0
  47. package/rules/rust/policy/vscode_extensions/docs/index.md +11 -0
  48. package/rules/rust/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  49. package/rules/style/js/docs/fix-tooling.md +29 -0
  50. package/rules/style/js/docs/index.md +3 -2
  51. package/rules/style/js/fix-tooling.mjs +46 -0
  52. package/rules/style/policy/vscode_extensions/docs/fix-vscode_extensions.md +21 -0
  53. package/rules/style/policy/vscode_extensions/docs/index.md +11 -0
  54. package/rules/style/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  55. package/rules/tauri/policy/vscode_extensions/docs/fix-vscode_extensions.md +21 -0
  56. package/rules/tauri/policy/vscode_extensions/docs/index.md +11 -0
  57. package/rules/tauri/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  58. package/rules/text/policy/vscode_extensions/docs/fix-vscode_extensions.md +21 -0
  59. package/rules/text/policy/vscode_extensions/docs/index.md +11 -0
  60. package/rules/text/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  61. package/rules/vue/js/docs/packages.md +0 -2
  62. package/scripts/docs/index.md +0 -2
  63. package/scripts/lib/discover-checkable-rules.mjs +1 -0
  64. package/scripts/lib/docs/discover-checkable-rules.md +13 -155
  65. package/scripts/lib/docs/index.md +35 -35
  66. package/scripts/lib/fix/discover-t0-patterns.mjs +83 -0
  67. package/scripts/lib/fix/docs/discover-t0-patterns.md +37 -0
  68. package/scripts/lib/fix/docs/index.md +12 -10
  69. package/scripts/lib/fix/docs/llm-fix-apply.md +12 -10
  70. package/scripts/lib/fix/docs/llm-worker.md +6 -14
  71. package/scripts/lib/fix/docs/orchestrator.md +0 -2
  72. package/scripts/lib/fix/docs/t0.md +11 -10
  73. package/scripts/lib/fix/docs/vscode-ext-add.md +29 -0
  74. package/scripts/lib/fix/t0.mjs +8 -234
  75. package/scripts/lib/fix/vscode-ext-add.mjs +45 -0
  76. package/skills/doc-aggregate/SKILL.md +8 -18
  77. package/skills/doc-aggregate/js/docs/index.md +0 -1
  78. package/rules/test/coverage/coverage.mjs +0 -317
  79. package/scripts/coverage-classify/apply.mjs +0 -67
  80. package/scripts/coverage-classify/cache.mjs +0 -77
  81. package/scripts/coverage-classify/docs/apply.md +0 -206
  82. package/scripts/coverage-classify/docs/cache.md +0 -207
  83. package/scripts/coverage-classify/docs/index.md +0 -14
  84. package/scripts/coverage-classify/docs/prompt.md +0 -136
  85. package/scripts/coverage-classify/docs/verdict-schema.md +0 -28
  86. package/scripts/coverage-classify/index.mjs +0 -114
  87. package/scripts/coverage-classify/prompt.mjs +0 -126
  88. package/scripts/coverage-classify/verdict-schema.mjs +0 -35
  89. package/scripts/coverage-fix-extract.mjs +0 -122
  90. package/scripts/coverage-fix.mjs +0 -119
  91. package/scripts/docs/coverage-fix-extract.md +0 -36
  92. package/scripts/docs/coverage-fix.md +0 -181
  93. package/skills/coverage-fix/SKILL.md +0 -131
  94. package/skills/coverage-fix/main.json +0 -1
  95. package/skills/doc-aggregate/js/docgen-scan.mjs +0 -195
  96. package/skills/doc-aggregate/js/docs/docgen-scan.md +0 -76
@@ -1,195 +0,0 @@
1
- /** @see ./docs/docgen-scan.md */
2
- import { join, relative, dirname, extname, sep, isAbsolute, resolve } from 'node:path'
3
- import { existsSync, readdirSync, statSync } from 'node:fs'
4
-
5
- import { isRunAsCli } from '../../../scripts/cli-entry.mjs'
6
- import { isDocgenIgnored } from './docgen-ignore.mjs'
7
-
8
- /** Кодові розширення, для яких генеруємо документацію. */
9
- const SOURCE_EXTENSIONS = new Set(['.js', '.mjs', '.ts', '.vue', '.py'])
10
-
11
- /** `*.test.*`, `*.spec.*` — тести, документувати не треба. */
12
- const TEST_FILE_RE = /\.(?:test|spec)\.[^.]+$/u
13
-
14
- /**
15
- * Чи корінь має system-wide docs layout (зарезервований під repo docs/adr тощо).
16
- * @param {string} root абсолютний корінь обходу
17
- * @returns {boolean} true — корінь system-wide docs
18
- */
19
- function isSystemWideDocsRoot(root) {
20
- return existsSync(join(root, 'docs', 'adr')) || existsSync(join(root, 'docs', 'explanation'))
21
- }
22
-
23
- /**
24
- * Чи є файл кодовим джерелом для документування.
25
- * @param {string} fileName базове ім'я файлу
26
- * @returns {boolean} true — документуємо
27
- */
28
- export function isSourceFile(fileName) {
29
- if (fileName.endsWith('.d.ts')) return false
30
- if (TEST_FILE_RE.test(fileName)) return false
31
- return SOURCE_EXTENSIONS.has(extname(fileName))
32
- }
33
-
34
- /**
35
- * Рекурсивно збирає кодові файли проєкту (posix-шляхи від кореня).
36
- * @param {string} root абсолютний корінь обходу
37
- * @returns {string[]} sourcePath-и
38
- */
39
- export function scanSourceFiles(root) {
40
- const results = []
41
-
42
- /** @param {string} dir поточний каталог обходу */
43
- function walk(dir) {
44
- let entries
45
- try {
46
- entries = readdirSync(dir, { withFileTypes: true })
47
- } catch {
48
- return
49
- }
50
- for (const entry of entries) {
51
- const fullPath = join(dir, entry.name)
52
- const relPath = relative(root, fullPath)
53
- if (entry.isDirectory()) {
54
- if (isDocgenIgnored(relPath, 'dir')) continue
55
- walk(fullPath)
56
- } else if (entry.isFile() && isSourceFile(entry.name)) {
57
- if (isSystemWideDocsRoot(root) && dirname(relPath) === '.') continue
58
- const sourcePath = relPath.split(sep).join('/')
59
- if (isDocgenIgnored(sourcePath)) continue
60
- results.push(sourcePath)
61
- }
62
- }
63
- }
64
-
65
- walk(root)
66
- return results
67
- }
68
-
69
- /**
70
- * Стабільний slug модуля з його відносного шляху (для лейблів/логів).
71
- * @param {string} root абсолютний корінь обходу
72
- * @param {string} moduleRoot абсолютний корінь модуля
73
- * @returns {string} slug: `npm/rules/adr` → `npm-rules-adr`, корінь → `root`
74
- */
75
- export function slugForModule(root, moduleRoot) {
76
- const rel = relative(root, moduleRoot)
77
- if (rel === '') return 'root'
78
- return rel
79
- .split(sep)
80
- .join('-')
81
- .replaceAll(/[^\w-]+/gu, '-')
82
- }
83
-
84
- /**
85
- * Знаходить корені модулів — теки з `package.json` (корінь завжди модуль).
86
- * @param {string} root абсолютний корінь обходу
87
- * @returns {string[]} абсолютні шляхи коренів модулів
88
- */
89
- export function findModuleRoots(root) {
90
- const roots = [root]
91
-
92
- /** @param {string} dir поточний каталог обходу */
93
- function walk(dir) {
94
- let entries
95
- try {
96
- entries = readdirSync(dir, { withFileTypes: true })
97
- } catch {
98
- return
99
- }
100
- for (const entry of entries) {
101
- const fullPath = join(dir, entry.name)
102
- const relPath = relative(root, fullPath)
103
- if (entry.isDirectory()) {
104
- if (isDocgenIgnored(relPath, 'dir')) continue
105
- walk(fullPath)
106
- } else if (entry.isFile() && entry.name === 'package.json' && dir !== root) {
107
- roots.push(dir)
108
- }
109
- }
110
- }
111
-
112
- walk(root)
113
- return roots
114
- }
115
-
116
- /**
117
- * Найближчий модуль-предок для файлу (найдовший збіг шляху).
118
- * @param {string} filePath абсолютний шлях до файлу
119
- * @param {string[]} moduleRoots абсолютні корені модулів
120
- * @returns {string|null} абсолютний корінь модуля або null
121
- */
122
- export function nearestModuleRoot(filePath, moduleRoots) {
123
- let best = null
124
- for (const moduleRoot of moduleRoots) {
125
- const rel = relative(moduleRoot, filePath)
126
- if (rel.startsWith('..') || isAbsolute(rel)) continue
127
- if (best === null || moduleRoot.length > best.length) best = moduleRoot
128
- }
129
- return best
130
- }
131
-
132
- /**
133
- * Лістить логічні модулі проєкту з членами-файлами і docPath module-summary.
134
- * Модулі без кодових файлів пропускаються.
135
- * @param {string} root абсолютний корінь обходу
136
- * @returns {Array<{moduleRoot:string, relRoot:string, slug:string, docPath:string, members:string[], exists:boolean}>} модулі (members — sourcePath-и від root)
137
- */
138
- export function scanForModules(root) {
139
- const files = scanSourceFiles(root)
140
- const moduleRoots = findModuleRoots(root)
141
- const byRoot = new Map()
142
- for (const sourcePath of files) {
143
- const moduleRoot = nearestModuleRoot(join(root, sourcePath), moduleRoots)
144
- if (moduleRoot === null) continue
145
- if (!byRoot.has(moduleRoot)) byRoot.set(moduleRoot, [])
146
- byRoot.get(moduleRoot).push(sourcePath)
147
- }
148
-
149
- const results = []
150
- for (const moduleRoot of moduleRoots) {
151
- const members = byRoot.get(moduleRoot)
152
- if (!members || members.length === 0) continue
153
- const docPath = join(moduleRoot, 'docs', 'ARCHITECTURE.md')
154
- results.push({
155
- moduleRoot,
156
- relRoot: relative(root, moduleRoot) || '.',
157
- slug: slugForModule(root, moduleRoot),
158
- docPath,
159
- members: members.toSorted(),
160
- exists: existsSync(docPath)
161
- })
162
- }
163
- return results
164
- }
165
-
166
- /**
167
- * Парсить `--root <dir>`; default — cwd.
168
- * @param {string[]} argv аргументи після підкоманди
169
- * @returns {string} абсолютний корінь
170
- */
171
- export function resolveRoot(argv) {
172
- const i = argv.indexOf('--root')
173
- return i !== -1 && argv[i + 1] ? resolve(argv[i + 1]) : process.cwd()
174
- }
175
-
176
- /**
177
- * `doc-aggregate modules` — сканує модулі і друкує JSON-масив у stdout.
178
- * @param {string[]} argv аргументи після назви субкоманди
179
- * @returns {number} exit-код: 0 — успіх, 1 — корінь не існує
180
- */
181
- export function runDocAggregateModulesCli(argv) {
182
- const root = resolveRoot(argv)
183
- if (!existsSync(root) || !statSync(root).isDirectory()) {
184
- console.error(`doc-aggregate modules: корінь не існує або не є директорією: ${root}`)
185
- return 1
186
- }
187
- console.log(JSON.stringify(scanForModules(root), null, 2))
188
- return 0
189
- }
190
-
191
- if (isRunAsCli(import.meta.url)) {
192
- // Прямий запуск: `node skills/doc-aggregate/js/docgen-scan.mjs modules --root <dir>`
193
- const [sub, ...rest] = process.argv.slice(2)
194
- process.exitCode = runDocAggregateModulesCli(sub === 'modules' ? rest : process.argv.slice(2))
195
- }
@@ -1,76 +0,0 @@
1
- ---
2
- type: JS Module
3
- title: docgen-scan.mjs
4
- resource: npm/skills/doc-aggregate/js/docgen-scan.mjs
5
- docgen:
6
- crc: 193dd362
7
- score: 100
8
- ---
9
-
10
- isSourceFile
11
- Перевіряє, чи є файл коду, який слугує джерелом для документування.
12
-
13
- scanSourceFiles
14
- Рекурсивно збирає кодові файли проєкту за позикс-шляхами від кореня.
15
-
16
- slugForModule
17
- Генерує стабільний slug модуля на основі його відносного шляху.
18
-
19
- findModuleRoots
20
- Знаходить абсолютні шляхи коренів модулів, використовуючи дані з package.json.
21
-
22
- nearestModuleRoot
23
- Визначає найближчий модуль-предок для заданого файлу серед усіх доступних коренів модулів.
24
-
25
- scanForModules
26
- Лістить логічні модулі, збираючи члени-файли та інформацію про наявність документації.
27
-
28
- resolveRoot
29
- Парсить аргументи для визначення абсолютної кореневої директорії.
30
-
31
- runDocAggregateModulesCli
32
- Сканує модулі та виводить масив JSON у stdout.
33
-
34
- ## Поведінка
35
-
36
- isSourceFile
37
- Перевіряє, чи є файл кодовим джерелом для документування
38
-
39
- scanSourceFiles
40
- Рекурсивно збирає кодові файли проєкту по позикс-шляхах від кореня
41
-
42
- slugForModule
43
- Генерує стабільний slug модуля з його відносним шляхом
44
-
45
- findModuleRoots
46
- Знаходить абсолютні шляхи коренів модулів з файлами package.json
47
-
48
- nearestModuleRoot
49
- Знаходить найближчий модуль-предок для файлу серед наявних коренів модулів
50
-
51
- scanForModules
52
- Лістить логічні модулі, збираючи члени-файли та інформацію про наявність документації
53
-
54
- resolveRoot
55
- Парсить аргументи для визначення абсолютного кореня
56
-
57
- runDocAggregateModulesCli
58
- Сканує модулі та виводить JSON-масив у stdout
59
-
60
- ## Публічний API
61
-
62
- - isSourceFile — визначає, чи є файл коду для документування.
63
- - scanSourceFiles — рекурсивно збирає файли коду проєкту (від кореня за POSIX-шляхом).
64
- - slugForModule — генерує стабільний slug модуля з його відносним шляхом (для лейблів/логів).
65
- - findModuleRoots — знаходить кореневі директорії модулів у `package.json` (корінь — це модуль).
66
- - nearestModuleRoot — визначає найближчий модуль-предок для файлу (найдовший збіг шляху).
67
- - scanForModules — лістить логічні модулі проєкту з членами-файлами та `docPath module-summary`. Пропускає модулі без кодових файлів.
68
- - resolveRoot — парсить аргумент `--root <dir>`; за замовчуванням використовує поточну директорію.
69
- - runDocAggregateModulesCli — виконує команду `doc-aggregate modules`, скануючи модулі та виводячи JSON-масив у stdout.
70
-
71
- ## Гарантії поведінки
72
-
73
- - Read-only: файл не виконує операцій запису у файлову систему.
74
- - Перехоплює помилки і не пропускає винятків назовні (fail-safe).
75
- - За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
76
- - Не звертається до мережі.