@nitra/cursor 12.7.0 → 12.8.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/.pi-template/extensions/n-cursor-adr/docs/index.md +2 -2
- package/CHANGELOG.md +15 -5
- package/bin/n-cursor.js +1 -1
- package/docs/index.md +3 -3
- package/docs/stryker.config.md +3 -3
- package/lib/docs/index.md +5 -5
- package/lib/docs/llm.md +4 -4
- package/package.json +2 -2
- package/rules/abie/docs/fix.md +8 -8
- package/rules/abie/docs/index.md +3 -3
- package/rules/abie/js/docs/index.md +6 -6
- package/rules/abie/lib/docs/index.md +9 -9
- package/rules/bun/docs/fix.md +5 -5
- package/rules/bun/docs/index.md +3 -3
- package/rules/bun/js/docs/index.md +2 -2
- package/rules/capacitor/docs/fix.md +10 -10
- package/rules/capacitor/docs/index.md +3 -3
- package/rules/capacitor/js/docs/index.md +2 -2
- package/rules/changelog/docs/fix.md +11 -11
- package/rules/changelog/docs/index.md +3 -3
- package/rules/changelog/js/docs/consistency.md +12 -12
- package/rules/changelog/js/docs/index.md +2 -2
- package/rules/changelog/lib/docs/index.md +2 -2
- package/rules/ci4/docs/fix.md +4 -4
- package/rules/ci4/docs/index.md +3 -3
- package/rules/ci4/js/docs/index.md +2 -2
- package/rules/doc-files/docs/index.md +3 -3
- package/rules/doc-files/js/docgen-crc.mjs +2 -8
- package/rules/doc-files/js/docgen-extract.mjs +5 -3
- package/rules/doc-files/js/docgen-files-batch.mjs +18 -3
- package/rules/doc-files/js/docgen-gen.mjs +11 -3
- package/rules/doc-files/js/docgen-judge-measure.mjs +67 -18
- package/rules/doc-files/js/docgen-judge.mjs +8 -1
- package/rules/doc-files/js/docgen-scan.mjs +10 -2
- package/rules/doc-files/js/docs/docgen-crc.md +25 -14
- package/rules/doc-files/js/docs/docgen-extract.md +15 -13
- package/rules/doc-files/js/docs/docgen-files-batch.md +11 -11
- package/rules/doc-files/js/docs/docgen-gen.md +15 -26
- package/rules/doc-files/js/docs/docgen-judge-measure.md +14 -12
- package/rules/doc-files/js/docs/index.md +16 -16
- package/rules/docker/docs/fix.md +6 -6
- package/rules/docker/docs/index.md +3 -3
- package/rules/docker/js/docs/index.md +2 -2
- package/rules/docker/lib/docs/docker-hadolint.md +2 -2
- package/rules/docker/lib/docs/index.md +5 -5
- package/rules/efes/docs/fix.md +8 -8
- package/rules/efes/docs/index.md +3 -3
- package/rules/feedback/docs/fix.md +5 -5
- package/rules/feedback/docs/index.md +3 -3
- package/rules/ga/docs/fix.md +5 -5
- package/rules/ga/docs/index.md +3 -3
- package/rules/ga/js/docs/index.md +3 -3
- package/rules/graphql/docs/fix.md +8 -8
- package/rules/graphql/docs/index.md +3 -3
- package/rules/graphql/docs/main.md +8 -8
- package/rules/graphql/js/docs/index.md +2 -2
- package/rules/graphql/lib/docs/index.md +2 -2
- package/rules/hasura/docs/fix.md +11 -11
- package/rules/hasura/docs/index.md +3 -3
- package/rules/hasura/js/docs/index.md +2 -2
- package/rules/image-avif/docs/fix.md +3 -3
- package/rules/image-avif/docs/index.md +3 -3
- package/rules/image-avif/js/docs/avif_generation.md +6 -6
- package/rules/image-avif/js/docs/index.md +2 -2
- package/rules/image-compress/docs/fix.md +2 -2
- package/rules/image-compress/docs/index.md +3 -3
- package/rules/image-compress/js/docs/index.md +3 -3
- package/rules/js-bun-db/docs/fix.md +5 -5
- package/rules/js-bun-db/docs/index.md +3 -3
- package/rules/js-bun-db/js/docs/index.md +2 -2
- package/rules/js-bun-db/lib/docs/index.md +2 -2
- package/rules/js-bun-redis/docs/fix.md +6 -6
- package/rules/js-bun-redis/docs/index.md +3 -3
- package/rules/js-bun-redis/js/docs/index.md +2 -2
- package/rules/js-bun-redis/lib/docs/index.md +2 -2
- package/rules/js-lint/docs/fix.md +9 -9
- package/rules/js-lint/docs/index.md +3 -3
- package/rules/js-lint/js/docs/check.md +5 -5
- package/rules/js-lint/js/docs/index.md +4 -4
- package/rules/js-lint-ci/docs/fix.md +3 -3
- package/rules/js-lint-ci/docs/index.md +3 -3
- package/rules/js-lint-ci/js/docs/index.md +2 -2
- package/rules/js-mssql/docs/fix.md +5 -5
- package/rules/js-mssql/docs/index.md +3 -3
- package/rules/js-mssql/js/docs/index.md +2 -2
- package/rules/js-mssql/lib/docs/index.md +2 -2
- package/rules/js-run/docs/fix.md +8 -8
- package/rules/js-run/docs/index.md +3 -3
- package/rules/js-run/js/docs/index.md +2 -2
- package/rules/js-run/lib/docs/index.md +7 -7
- package/rules/k8s/docs/fix.md +4 -4
- package/rules/k8s/docs/index.md +3 -3
- package/rules/k8s/js/docs/index.md +3 -3
- package/rules/nginx-default-tpl/docs/fix.md +7 -7
- package/rules/nginx-default-tpl/docs/index.md +3 -3
- package/rules/nginx-default-tpl/js/docs/index.md +2 -2
- package/rules/nginx-default-tpl/js/docs/template.md +2 -2
- package/rules/npm-module/docs/fix.md +8 -8
- package/rules/npm-module/docs/index.md +3 -3
- package/rules/npm-module/js/docs/index.md +5 -5
- package/rules/npm-module/js/docs/rule_meta.md +6 -6
- package/rules/npm-module/js/header_doc_pointer.mjs +1 -3
- package/rules/php/docs/fix.md +6 -6
- package/rules/php/docs/index.md +3 -3
- package/rules/php/js/docs/index.md +3 -3
- package/rules/python/docs/fix.md +11 -11
- package/rules/python/docs/index.md +3 -3
- package/rules/python/js/docs/index.md +3 -3
- package/rules/python/main.mjs +2 -1
- package/rules/rego/docs/fix.md +5 -5
- package/rules/rego/docs/index.md +3 -3
- package/rules/rego/js/docs/index.md +3 -3
- package/rules/release/docs/index.md +5 -5
- package/rules/release/lib/docs/index.md +4 -4
- package/rules/rust/docs/fix.md +4 -4
- package/rules/rust/docs/index.md +3 -3
- package/rules/rust/js/docs/index.md +3 -3
- package/rules/rust/lib/docs/index.md +2 -2
- package/rules/rust/main.mjs +7 -1
- package/rules/security/docs/fix.md +6 -6
- package/rules/security/docs/index.md +3 -3
- package/rules/security/js/docs/index.md +4 -4
- package/rules/style-lint/docs/fix.md +3 -3
- package/rules/style-lint/docs/index.md +3 -3
- package/rules/style-lint/js/docs/index.md +3 -3
- package/rules/tauri/docs/fix.md +11 -11
- package/rules/tauri/docs/index.md +3 -3
- package/rules/tauri/js/docs/index.md +3 -3
- package/rules/test/docs/fix.md +5 -5
- package/rules/test/docs/index.md +3 -3
- package/rules/test/js/data/stryker_config/docs/index.md +4 -4
- package/rules/test/js/data/vitest_config/docs/index.md +2 -2
- package/rules/test/js/docs/index.md +7 -7
- package/rules/text/docs/fix.md +11 -11
- package/rules/text/docs/index.md +3 -3
- package/rules/text/js/cspell-fix.mjs +7 -2
- package/rules/text/js/docs/index.md +8 -8
- package/rules/text/js/docs/run-v8r.md +3 -3
- package/rules/text/main.mjs +3 -1
- package/rules/tool-surface/docs/index.md +3 -3
- package/rules/tool-surface/meta.json +6 -1
- package/rules/vue/docs/fix.md +6 -6
- package/rules/vue/docs/index.md +3 -3
- package/rules/vue/js/docs/index.md +2 -2
- package/rules/vue/lib/docs/index.md +2 -2
- package/rules/worktree/docs/fix.md +11 -11
- package/rules/worktree/docs/index.md +3 -3
- package/scripts/coverage-classify/docs/index.md +6 -6
- package/scripts/dispatcher/docs/index.md +2 -2
- package/scripts/docs/index.md +16 -16
- package/scripts/lib/docs/index.md +36 -36
- package/scripts/lib/docs/run-lint.md +3 -3
- package/scripts/lib/docs/run-standard-lint.md +7 -5
- package/scripts/lib/fix/analyze-escalation.mjs +4 -1
- package/scripts/lib/fix/docs/index.md +10 -10
- package/scripts/lib/fix/docs/run-conformance-check.md +4 -3
- package/scripts/lib/fix/docs/run-fix-check.md +3 -3
- package/scripts/lib/fix/orchestrator.mjs +26 -3
- package/scripts/lib/fix/t0.mjs +4 -1
- package/scripts/lib/run-lint.mjs +1 -3
- package/scripts/utils/docs/index.md +14 -14
- package/skills/doc-aggregate/js/docs/index.md +3 -3
- package/skills/doc-files/.changes/260612-0002.md +1 -0
- package/skills/doc-files/.changes/260612-0006.md +1 -0
- package/skills/doc-files/.changes/260612-0008.md +1 -0
- package/skills/doc-files/.changes/260612-0012.md +1 -0
- package/skills/doc-files/.changes/260612-0031.md +1 -0
- package/skills/doc-files/.changes/260612-0036.md +1 -0
- package/skills/doc-files/.changes/260612-0114.md +1 -0
- package/skills/start-check/js/docs/index.md +2 -2
- package/skills/taze/js/docs/index.md +2 -2
- package/types/bin/n-cursor.d.ts +1 -1
|
@@ -64,8 +64,16 @@ function judgeCached(src, doc) {
|
|
|
64
64
|
const hit = cacheGet(key)
|
|
65
65
|
if (hit) return { ...hit, cached: true }
|
|
66
66
|
const user = `SOURCE FILE:\n\`\`\`\n${src.slice(0, 12000)}\n\`\`\`\n\nGENERATED DOC:\n\`\`\`md\n${doc.slice(0, 8000)}\n\`\`\`\n\nReturn the JSON verdict.`
|
|
67
|
-
const raw = callLlm(
|
|
68
|
-
|
|
67
|
+
const raw = callLlm(
|
|
68
|
+
[
|
|
69
|
+
{ role: 'system', content: SYSTEM },
|
|
70
|
+
{ role: 'user', content: user }
|
|
71
|
+
],
|
|
72
|
+
JUDGE_MODEL,
|
|
73
|
+
{ timeoutMs: JUDGE_TIMEOUT, temperature: 0 }
|
|
74
|
+
)
|
|
75
|
+
const a = raw.indexOf('{'),
|
|
76
|
+
b = raw.lastIndexOf('}')
|
|
69
77
|
if (a === -1 || b === -1) throw new Error('no JSON in judge reply: ' + raw.slice(0, 160))
|
|
70
78
|
const v = JSON.parse(raw.slice(a, b + 1))
|
|
71
79
|
cacheSet(key, v)
|
|
@@ -81,17 +89,34 @@ function main() {
|
|
|
81
89
|
console.error('Usage: node docgen-judge-measure.mjs <file1> <file2> ...')
|
|
82
90
|
process.exit(2)
|
|
83
91
|
}
|
|
84
|
-
console.error(
|
|
92
|
+
console.error(
|
|
93
|
+
`[measure] gen=${GEN_MODEL} judge=${JUDGE_MODEL} threshold=${THRESHOLD} files=${files.length} cache=${CACHE_DIR}`
|
|
94
|
+
)
|
|
85
95
|
|
|
86
96
|
const rows = []
|
|
87
97
|
for (const [i, file] of files.entries()) {
|
|
88
98
|
const tag = `(${i + 1}/${files.length}) ${file}`
|
|
89
99
|
let src
|
|
90
|
-
try {
|
|
100
|
+
try {
|
|
101
|
+
src = readFileSync(file, 'utf8')
|
|
102
|
+
} catch (error) {
|
|
103
|
+
console.error(`[skip] ${tag}: read ${error.message}`)
|
|
104
|
+
continue
|
|
105
|
+
}
|
|
91
106
|
|
|
92
107
|
let gen
|
|
93
|
-
try {
|
|
94
|
-
|
|
108
|
+
try {
|
|
109
|
+
gen = genCached(file, src)
|
|
110
|
+
} catch (error) {
|
|
111
|
+
console.error(`[gen-err] ${tag}: ${error.message.slice(0, 120)}`)
|
|
112
|
+
rows.push({ file, error: 'gen', detail: error.message.slice(0, 200) })
|
|
113
|
+
continue
|
|
114
|
+
}
|
|
115
|
+
if (gen.score === null) {
|
|
116
|
+
console.error(`[unsupported] ${tag}`)
|
|
117
|
+
rows.push({ file, score: null, unsupported: true })
|
|
118
|
+
continue
|
|
119
|
+
}
|
|
95
120
|
|
|
96
121
|
const passed = gen.score >= THRESHOLD
|
|
97
122
|
const row = { file, score: gen.score, degraded: gen.degraded, passed, genCached: gen.cached }
|
|
@@ -100,9 +125,18 @@ function main() {
|
|
|
100
125
|
if (passed) {
|
|
101
126
|
try {
|
|
102
127
|
const v = judgeCached(src, gen.md)
|
|
103
|
-
row.verdict = v.verdict
|
|
104
|
-
|
|
105
|
-
|
|
128
|
+
row.verdict = v.verdict
|
|
129
|
+
row.confidence = v.confidence
|
|
130
|
+
row.reason = v.reason
|
|
131
|
+
row.offending = v.offending
|
|
132
|
+
row.judgeCached = v.cached
|
|
133
|
+
console.error(
|
|
134
|
+
` [judge${v.cached ? '*' : ''}] ${v.verdict} (${v.confidence}) — ${(v.reason || '').slice(0, 90)}`
|
|
135
|
+
)
|
|
136
|
+
} catch (error) {
|
|
137
|
+
row.judgeError = error.message.slice(0, 200)
|
|
138
|
+
console.error(` [judge-err] ${error.message.slice(0, 120)}`)
|
|
139
|
+
}
|
|
106
140
|
}
|
|
107
141
|
rows.push(row)
|
|
108
142
|
}
|
|
@@ -119,17 +153,26 @@ function main() {
|
|
|
119
153
|
const report = {
|
|
120
154
|
config: { genModel: GEN_MODEL, judgeModel: JUDGE_MODEL, threshold: THRESHOLD },
|
|
121
155
|
counts: {
|
|
122
|
-
files: files.length,
|
|
156
|
+
files: files.length,
|
|
157
|
+
generated: scored.length,
|
|
123
158
|
unsupported: rows.filter(r => r.unsupported).length,
|
|
124
159
|
genErrors: rows.filter(r => r.error === 'gen').length,
|
|
125
160
|
passedDetScorer: scored.filter(r => r.passed).length,
|
|
126
|
-
judged: M,
|
|
161
|
+
judged: M,
|
|
162
|
+
judgeErrors: rows.filter(r => r.judgeError).length
|
|
127
163
|
},
|
|
128
|
-
falsePositiveRate: {
|
|
129
|
-
|
|
130
|
-
|
|
164
|
+
falsePositiveRate: {
|
|
165
|
+
// серед PASSED+judged
|
|
166
|
+
accurate: byVerdict.accurate,
|
|
167
|
+
generic: byVerdict.generic,
|
|
168
|
+
inaccurate: byVerdict.inaccurate,
|
|
169
|
+
badPct: pct(bad),
|
|
170
|
+
inaccuratePct: pct(byVerdict.inaccurate),
|
|
171
|
+
genericPct: pct(byVerdict.generic)
|
|
131
172
|
},
|
|
132
|
-
offenders: passedRows
|
|
173
|
+
offenders: passedRows
|
|
174
|
+
.filter(r => r.verdict !== 'accurate')
|
|
175
|
+
.map(r => ({ file: r.file, score: r.score, verdict: r.verdict, confidence: r.confidence, reason: r.reason })),
|
|
133
176
|
rows
|
|
134
177
|
}
|
|
135
178
|
|
|
@@ -138,10 +181,16 @@ function main() {
|
|
|
138
181
|
writeFileSync(out, JSON.stringify(report, null, 2))
|
|
139
182
|
|
|
140
183
|
console.log('\n===== Q4 MEASUREMENT =====')
|
|
141
|
-
console.log(
|
|
184
|
+
console.log(
|
|
185
|
+
`generated: ${report.counts.generated}/${files.length} (unsupported=${report.counts.unsupported}, gen-errors=${report.counts.genErrors})`
|
|
186
|
+
)
|
|
142
187
|
console.log(`passed det-scorer (score≥${THRESHOLD}): ${report.counts.passedDetScorer} judged: ${M}`)
|
|
143
|
-
console.log(
|
|
144
|
-
|
|
188
|
+
console.log(
|
|
189
|
+
`among PASSED+judged → accurate=${byVerdict.accurate} generic=${byVerdict.generic} inaccurate=${byVerdict.inaccurate}`
|
|
190
|
+
)
|
|
191
|
+
console.log(
|
|
192
|
+
`>>> det-scorer FALSE-POSITIVE rate: ${pct(bad)}% (inaccurate=${pct(byVerdict.inaccurate)}%, generic=${pct(byVerdict.generic)}%)`
|
|
193
|
+
)
|
|
145
194
|
console.log(`decision guide: <~5% → don't build gate; >~15% → build (inaccurate-only)`)
|
|
146
195
|
console.log(`report: ${out}`)
|
|
147
196
|
}
|
|
@@ -58,7 +58,14 @@ export function parseDocVerdict(rawText) {
|
|
|
58
58
|
*/
|
|
59
59
|
export function judgeDoc(src, doc, { model = JUDGE_MODEL, timeoutMs = 120_000 } = {}) {
|
|
60
60
|
const user = `SOURCE FILE:\n\`\`\`\n${src.slice(0, 12_000)}\n\`\`\`\n\nGENERATED DOC:\n\`\`\`md\n${doc.slice(0, 8000)}\n\`\`\`\n\nReturn the JSON verdict.`
|
|
61
|
-
const raw = callLlm(
|
|
61
|
+
const raw = callLlm(
|
|
62
|
+
[
|
|
63
|
+
{ role: 'system', content: JUDGE_SYSTEM },
|
|
64
|
+
{ role: 'user', content: user }
|
|
65
|
+
],
|
|
66
|
+
model,
|
|
67
|
+
{ timeoutMs, temperature: 0 }
|
|
68
|
+
)
|
|
62
69
|
return parseDocVerdict(raw)
|
|
63
70
|
}
|
|
64
71
|
|
|
@@ -160,7 +160,12 @@ function gitIgnoredPaths(root, relPaths) {
|
|
|
160
160
|
encoding: 'utf8',
|
|
161
161
|
stdio: ['pipe', 'pipe', 'ignore'] // git пише «not a git repository» у stderr — глушимо
|
|
162
162
|
})
|
|
163
|
-
return new Set(
|
|
163
|
+
return new Set(
|
|
164
|
+
out
|
|
165
|
+
.split('\n')
|
|
166
|
+
.map(s => s.trim())
|
|
167
|
+
.filter(Boolean)
|
|
168
|
+
)
|
|
164
169
|
} catch {
|
|
165
170
|
// exit 1 (жоден не ігнорується) і 128 (не git-репо) → execFileSync кидає; обидва = «не фільтруємо».
|
|
166
171
|
return new Set()
|
|
@@ -201,7 +206,10 @@ export function scanForDocFiles(root) {
|
|
|
201
206
|
}
|
|
202
207
|
|
|
203
208
|
walk(root)
|
|
204
|
-
const ignored = gitIgnoredPaths(
|
|
209
|
+
const ignored = gitIgnoredPaths(
|
|
210
|
+
root,
|
|
211
|
+
results.map(r => r.sourcePath)
|
|
212
|
+
)
|
|
205
213
|
return ignored.size ? results.filter(r => !ignored.has(r.sourcePath)) : results
|
|
206
214
|
}
|
|
207
215
|
|
|
@@ -3,28 +3,39 @@ type: JS Module
|
|
|
3
3
|
title: docgen-crc.mjs
|
|
4
4
|
resource: npm/rules/doc-files/js/docgen-crc.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 0c277bb7
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
7
9
|
---
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Модуль забезпечує роботу з метаданими та оцінкою якості документів. Він дозволяє парсити метадані з Markdown-файлів за допомогою `parseDocFrontmatter`, створювати та заповнювати блоки метаданих за допомогою `buildDocFrontmatter`. Документи можуть бути промарковані за допомогою `stampDoc`. Якість документа оцінюється за допомогою `readDocQuality`, а його актуальність визначається функцією `staleness`, яка використовує `crc32` для перевірки хеш-суми. Модель документа зчитується через `readDocModel`.
|
|
10
14
|
|
|
11
15
|
## Поведінка
|
|
12
16
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
QUALITY_THRESHOLD визначає поріг якості, нижче якого дока вважається неякісним.
|
|
18
|
+
crc32 обчислює CRC32 вмісту в hex-форматі.
|
|
19
|
+
parseDocFrontmatter парсить YAML-блок у вмісті md-файлу, виділяючи метадані та тіло.
|
|
20
|
+
buildDocFrontmatter створює OKF-сумісний YAML-блок для доки, включаючи метадані.
|
|
21
|
+
stampDoc замінює або додає свіжий YAML-блок у тіло md-доку, використовуючи дані джерела та оцінку.
|
|
22
|
+
readDocCrc зчитує CRC32 з YAML-блоку md-доки за заданим абсолютним шляхом.
|
|
23
|
+
readDocQuality зчитує оцінку якості (score, issues, retried, judgeModel) з YAML-блоку md-доки за абсолютним шляхом.
|
|
24
|
+
readDocModel зчитує повний ID моделі-генератора з YAML-блоку md-доки за абсолютним шляхом.
|
|
25
|
+
staleness визначає, чи є дока застарілою, порівнюючи CRC джерела з CRC у доці за абсолютними шляхами.
|
|
17
26
|
|
|
18
27
|
## Публічний API
|
|
19
28
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
QUALITY_THRESHOLD — Визначає рівень якості документа: дока з низьким показником вважається неякісним.
|
|
30
|
+
crc32 — Генерує 32-бітний контрольний сума вмісту у шістнадцятковому форматі.
|
|
31
|
+
parseDocFrontmatter — Витягує метадані з початку документа. Якщо метаданих немає, повертає порожні дані.
|
|
32
|
+
buildDocFrontmatter — Створює блок метаданих, сумісний з OKF, включаючи дані про генерацію документа (CRC, модель, якість).
|
|
33
|
+
stampDoc — Додає метадані до документа, що фіксують його стан.
|
|
34
|
+
readDocCrc — Зчитує контрольний сума з метаданих документа.
|
|
35
|
+
readDocQuality — Зчитує рівень якості, збережений у метаданих документа.
|
|
36
|
+
readDocModel — Зчитує назву моделі, використаної для генерації документа.
|
|
37
|
+
staleness — Визначає, чи є документ актуальним, порівнюючи його з джерелом.
|
|
25
38
|
|
|
26
39
|
## Гарантії поведінки
|
|
27
40
|
|
|
28
|
-
-
|
|
29
|
-
- Frontmatter — єдиний машинний виняток із правила «чистий Markdown»; тіло доки модуль не редагує.
|
|
30
|
-
- Відсутні поля якості читаються як «не оцінено» (`score: null`), а не як нуль.
|
|
41
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
@@ -3,31 +3,33 @@ type: JS Module
|
|
|
3
3
|
title: docgen-extract.mjs
|
|
4
4
|
resource: npm/rules/doc-files/js/docgen-extract.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 369662fe
|
|
7
7
|
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Модуль витягує структурований факт-лист з вмісту файлів, звертаючись до мережі. Функція `extractFacts` аналізує вміст файлів, визначаючи публічні експорти, локальні символи та поведінкові маркери для Rust та JavaScript/TypeScript файлів. При цьому ігноруються системні та залежності, включаючи каталоги `.github`, `.git`, `node_modules`, `base/`, `ua/` та `.firebase`. Результати аналізу кешуються протягом одного прогону.
|
|
12
14
|
|
|
13
15
|
## Поведінка
|
|
14
16
|
|
|
15
17
|
1. Витягує факт-лист з вмісту файлу.
|
|
16
18
|
2. Визначає мову файлу за розширенням.
|
|
17
19
|
3. Якщо мова — Rust, виконує аналіз Rust-коду:
|
|
18
|
-
а. Витягує модульний
|
|
19
|
-
б. Визначає публічні експорти (структури, функції,
|
|
20
|
+
а. Витягує модульний заголовок (`//!`).
|
|
21
|
+
б. Визначає публічні експорти (структури, функції, класи), виходячи з префіксів `pub` та атрибутів експозиції.
|
|
20
22
|
в. Визначає локальні (приватні) символи, які не є публічними.
|
|
21
|
-
г. Класифікує імпорти (`
|
|
22
|
-
д. Визначає поведінкові маркери (
|
|
23
|
+
г. Класифікує імпорти (`use`) як стандартні, зовнішні чи внутрішні.
|
|
24
|
+
д. Визначає поведінкові маркери (наприклад, чи є код лише для читання, чи обробляє помилки).
|
|
23
25
|
4. Якщо мова — JavaScript/TypeScript/MJS, виконує аналіз JS-коду:
|
|
24
|
-
а. Витягує
|
|
25
|
-
б.
|
|
26
|
-
в. Класифікує імпорти
|
|
27
|
-
г. Визначає локальні (
|
|
28
|
-
д. Визначає поведінкові маркери (
|
|
29
|
-
5.
|
|
30
|
-
6. Повертає структуру фактів, що містить
|
|
26
|
+
а. Витягує заголовок файлу.
|
|
27
|
+
б. Визначає публічні експорти з їхнім JSDoc.
|
|
28
|
+
в. Класифікує імпорти як стандартні, npm або внутрішні.
|
|
29
|
+
г. Визначає локальні символи (службові функції).
|
|
30
|
+
д. Визначає поведінкові маркери (наприклад, чи є код лише для читання, чи звертається до мережі).
|
|
31
|
+
5. Усі аналізи свідомо ігнорують шляхи: `.github`, `.git`, `node_modules`, `base/`, `ua/`, `.firebase`.
|
|
32
|
+
6. Повертає структуру фактів, що містить інформацію про файл.
|
|
31
33
|
|
|
32
34
|
## Публічний API
|
|
33
35
|
|
|
@@ -3,30 +3,30 @@ type: JS Module
|
|
|
3
3
|
title: docgen-files-batch.mjs
|
|
4
4
|
resource: npm/rules/doc-files/js/docgen-files-batch.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 6316eecb
|
|
7
7
|
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
## Огляд
|
|
12
12
|
|
|
13
|
-
Модуль керує життєвим циклом документації. Він вибирає
|
|
13
|
+
Модуль керує життєвим циклом документації. Він вибирає цілі для оновлення за допомогою `selectTargets`, очищає від неіснуючих джерел за допомогою `purgeOrphanedDocs`, запускає генерацію файлів через `runDocFilesGenCli` та `runDocFilesStampCli`, а також виконує пакетну генерацію за допомогою `runGenerationBatch`. Усі операції виконуються з механізмом перехоплення помилок, що запобігає виникненню винятків назовні.
|
|
14
14
|
|
|
15
15
|
## Поведінка
|
|
16
16
|
|
|
17
|
-
selectTargets
|
|
18
|
-
purgeOrphanedDocs видаляє
|
|
19
|
-
runDocFilesGenCli
|
|
20
|
-
runGenerationBatch виконує
|
|
21
|
-
runDocFilesStampCli детерміновано оновлює метадані (frontmatter) існуючих
|
|
17
|
+
selectTargets відфільтровує документи для генерації, вибираючи застарілі або ті, які мають низьку якість і не були спробовані раніше.
|
|
18
|
+
purgeOrphanedDocs видаляє документи, для яких не існує відповідного джерела, і оновлює індекси директорій.
|
|
19
|
+
runDocFilesGenCli запускає генерацію документації для застарілих або низькоякісних файлів, після попереднього очищення сирітських документів.
|
|
20
|
+
runGenerationBatch виконує послідовну генерацію документації для заданого набору цілей, керуючи процесом через механізм виходу з ладу.
|
|
21
|
+
runDocFilesStampCli детерміновано оновлює метадані (frontmatter) існуючих документів, додаючи CRC та зберігаючи дані про якість.
|
|
22
22
|
|
|
23
23
|
## Публічний API
|
|
24
24
|
|
|
25
|
-
selectTargets — Визначає цілі для
|
|
26
|
-
purgeOrphanedDocs — Видаляє документи, для яких відсутній вихідний файл, та
|
|
25
|
+
selectTargets — Визначає цілі для генерації документації: застарілі або деградовані документи, або всі документи при використанні прапора перезапису.
|
|
26
|
+
purgeOrphanedDocs — Видаляє документи, для яких відсутній відповідний вихідний файл, та оновлює файл індексу.
|
|
27
27
|
runDocFilesGenCli — Генерує документацію для застарілих або відсутніх документів.
|
|
28
|
-
runGenerationBatch — Виконує
|
|
29
|
-
runDocFilesStampCli — Додає або оновлює метадані
|
|
28
|
+
runGenerationBatch — Виконує повний цикл генерації: перевіряє стан локального бекенду, послідовно генерує документи з обробкою збоїв, та створює фінальний звіт.
|
|
29
|
+
runDocFilesStampCli — Додає або оновлює метадані джерела та контрольної суми до існуючих документів без використання великих мовних моделей.
|
|
30
30
|
|
|
31
31
|
## Гарантії поведінки
|
|
32
32
|
|
|
@@ -3,42 +3,31 @@ type: JS Module
|
|
|
3
3
|
title: docgen-gen.mjs
|
|
4
4
|
resource: npm/rules/doc-files/js/docgen-gen.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 059d7d6e
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
7
8
|
score: 100
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
Огляд
|
|
11
|
-
Публічні функції виконують операції з текстом та оцінками. Вони включають виділення коду, вставлення інформації та генерацію документів на основі визначених параметрів.
|
|
11
|
+
## Огляд
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
splitProtected
|
|
16
|
-
Вибирає та видаляє код-фенс-обгортку з секції
|
|
17
|
-
|
|
18
|
-
insertProtected
|
|
19
|
-
Вставляє захищений блок Призначення після заголовка Огляд
|
|
13
|
+
Модуль забезпечує повний цикл роботи з документами: відокремлює захищений блок за допомогою `splitProtected`, вставляє його у визначене місце за допомогою `insertProtected`, генерує повний Markdown-документ через `generateDoc` (з використанням `DEFAULT_LOCAL_MODEL`), а також оцінює якість документа за допомогою `scoreDoc`. Кешування застосовується протягом прогону. (abie.mdc)
|
|
20
14
|
|
|
21
|
-
|
|
22
|
-
Перевіряє вихід проти фактів і повертає оцінку та список проблем
|
|
23
|
-
|
|
24
|
-
DEFAULT_LOCAL_MODEL
|
|
25
|
-
Повертає дефолтну модель для роботи
|
|
15
|
+
## Поведінка
|
|
26
16
|
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
splitProtected відокремлює захищений блок Призначення від основного документа.
|
|
18
|
+
insertProtected вставляє захищений блок Призначення у фіксовану позицію після заголовка документа.
|
|
19
|
+
scoreDoc оцінює якість згенерованого документа за заданими критеріями.
|
|
20
|
+
DEFAULT_LOCAL_MODEL визначає модель, яка використовується для генерації документа.
|
|
21
|
+
generateDoc генерує повний Markdown-документ з опису файлу, застосовуючи оцінку та можливий ретрай.
|
|
29
22
|
|
|
30
23
|
## Публічний API
|
|
31
24
|
|
|
32
|
-
splitProtected —
|
|
33
|
-
insertProtected —
|
|
34
|
-
scoreDoc — Stage 2.5
|
|
35
|
-
DEFAULT_LOCAL_MODEL —
|
|
36
|
-
generateDoc —
|
|
25
|
+
splitProtected — Розділяє захищений розділ `## Призначення` (Варіант B), використовуючи наступний заголовок рівня H2 або H3 як межу.
|
|
26
|
+
insertProtected — Розміщує захищений блок `## Призначення` безпосередньо після основного заголовка (H1).
|
|
27
|
+
scoreDoc — Виконує детерміновану оцінку (Stage 2.5), порівнюючи вихідні дані з фактичною інформацією.
|
|
28
|
+
DEFAULT_LOCAL_MODEL — Визначає модель для генерації документа, використовуючи мінімальну локальну модель. Якщо модель не задана, процес зупиняється з помилкою.
|
|
29
|
+
generateDoc — Основна функція, яка перетворює вхідний файл у Markdown-документ з оцінкою достовірності.
|
|
37
30
|
|
|
38
31
|
## Гарантії поведінки
|
|
39
32
|
|
|
40
|
-
- Read-only: файл не виконує операцій запису у файлову систему.
|
|
41
|
-
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
42
|
-
- За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
|
|
43
33
|
- Кешує результати в межах одного прогону.
|
|
44
|
-
- Не звертається до мережі.
|
|
@@ -3,26 +3,28 @@ type: JS Module
|
|
|
3
3
|
title: docgen-judge-measure.mjs
|
|
4
4
|
resource: npm/rules/doc-files/js/docgen-judge-measure.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 86b3120f
|
|
7
7
|
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Модуль обробляє файли, витягуючи їхній зміст для генерації документації. Він порівнює цю документацію з оцінками сильної модільної системи. Під час роботи відбувається кешування у межах прогону. Модуль збирає метрики якості згенерованої документації та зберігає фінальний звіт у `report.json`, який спирається на конфігурації, визначені в `report.json`.
|
|
12
14
|
|
|
13
15
|
## Поведінка
|
|
14
16
|
|
|
15
|
-
1. Зчитує список файлів для аналізу з командного рядка.
|
|
17
|
+
1. Зчитує список файлів для аналізу з аргументів командного рядка.
|
|
16
18
|
2. Для кожного файлу зчитує його вміст.
|
|
17
|
-
3. Генерує документацію для файлу, використовуючи
|
|
18
|
-
4. Якщо
|
|
19
|
-
5. Якщо
|
|
20
|
-
6.
|
|
21
|
-
7.
|
|
22
|
-
8.
|
|
23
|
-
9.
|
|
24
|
-
10. Зберігає
|
|
25
|
-
11. Виводить консольний звіт
|
|
19
|
+
3. Генерує документацію для файлу, використовуючи кеш за вмістом джерела.
|
|
20
|
+
4. Якщо документація згенерована, перевіряє її якість за встановленим порогом.
|
|
21
|
+
5. Якщо якість документації відповідає порогу, передає вміст джерела та згенеровану документацію для оцінки сильною моделлю.
|
|
22
|
+
6. Оцінювач повертає вердикт (точний, загальний, неточний) з обґрунтуванням.
|
|
23
|
+
7. Зберігає результати для кожного файлу.
|
|
24
|
+
8. Агрегує результати: підраховує загальну кількість файлів, успішно згенерованих, пройшли перевірку, а також розподіл вердиктів серед тих, що пройшли перевірку.
|
|
25
|
+
9. Формує звіт, який включає конфігурацію, підрахунки та відсотки помилкових спрацьовувань.
|
|
26
|
+
10. Зберігає фінальний звіт у файл `report.json` у каталозі кешу.
|
|
27
|
+
11. Виводить консольний звіт про результати вимірювання.
|
|
26
28
|
|
|
27
29
|
## Гарантії поведінки
|
|
28
30
|
|
|
@@ -6,20 +6,20 @@ resource: npm/rules/doc-files/js/
|
|
|
6
6
|
|
|
7
7
|
# npm/rules/doc-files/js
|
|
8
8
|
|
|
9
|
-
| Файл
|
|
10
|
-
|
|
11
|
-
| [docgen-crc.mjs](docgen-crc.md)
|
|
9
|
+
| Файл | Тип |
|
|
10
|
+
| ------------------------------------------------------- | --------- |
|
|
11
|
+
| [docgen-crc.mjs](docgen-crc.md) | JS Module |
|
|
12
12
|
| [docgen-extract-anchors.mjs](docgen-extract-anchors.md) | JS Module |
|
|
13
|
-
| [docgen-extract.mjs](docgen-extract.md)
|
|
14
|
-
| [docgen-files-batch.mjs](docgen-files-batch.md)
|
|
15
|
-
| [docgen-gen.mjs](docgen-gen.md)
|
|
16
|
-
| [docgen-ignore.mjs](docgen-ignore.md)
|
|
17
|
-
| [docgen-judge-measure.mjs](docgen-judge-measure.md)
|
|
18
|
-
| [docgen-judge.mjs](docgen-judge.md)
|
|
19
|
-
| [docgen-prompts.mjs](docgen-prompts.md)
|
|
20
|
-
| [docgen-scan.mjs](docgen-scan.md)
|
|
21
|
-
| [lint.mjs](lint.md)
|
|
22
|
-
| [run-lint.mjs](run-lint.md)
|
|
23
|
-
| [units-js.mjs](units-js.md)
|
|
24
|
-
| [units-rs.mjs](units-rs.md)
|
|
25
|
-
| [units.mjs](units.md)
|
|
13
|
+
| [docgen-extract.mjs](docgen-extract.md) | JS Module |
|
|
14
|
+
| [docgen-files-batch.mjs](docgen-files-batch.md) | JS Module |
|
|
15
|
+
| [docgen-gen.mjs](docgen-gen.md) | JS Module |
|
|
16
|
+
| [docgen-ignore.mjs](docgen-ignore.md) | JS Module |
|
|
17
|
+
| [docgen-judge-measure.mjs](docgen-judge-measure.md) | JS Module |
|
|
18
|
+
| [docgen-judge.mjs](docgen-judge.md) | JS Module |
|
|
19
|
+
| [docgen-prompts.mjs](docgen-prompts.md) | JS Module |
|
|
20
|
+
| [docgen-scan.mjs](docgen-scan.md) | JS Module |
|
|
21
|
+
| [lint.mjs](lint.md) | JS Module |
|
|
22
|
+
| [run-lint.mjs](run-lint.md) | JS Module |
|
|
23
|
+
| [units-js.mjs](units-js.md) | JS Module |
|
|
24
|
+
| [units-rs.mjs](units-rs.md) | JS Module |
|
|
25
|
+
| [units.mjs](units.md) | JS Module |
|
package/rules/docker/docs/fix.md
CHANGED
|
@@ -14,14 +14,14 @@ docgen:
|
|
|
14
14
|
## Поведінка
|
|
15
15
|
|
|
16
16
|
1. Запуск правила.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
- Приймає контекст прогону.
|
|
18
|
+
- Виконує застосування JS-занепокоєних до політики до mdc-refs.
|
|
19
|
+
- Повертає результат.
|
|
20
20
|
|
|
21
21
|
2. Виконання у режимі CLI.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
- Викликається через оркестрацію CLI.
|
|
23
|
+
- Виконує повний еквівалент команди `npx @nitra/cursor fix <id>`.
|
|
24
|
+
- Виконує завантаження конфігурації, перевірку дозволених елементів та підбиття підсумку.
|
|
25
25
|
|
|
26
26
|
## Публічний API
|
|
27
27
|
|
|
@@ -22,8 +22,8 @@ lintDockerfileWithHadolint
|
|
|
22
22
|
|
|
23
23
|
## Публічний API
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
- posixRel — Генерує абсолютний шлях від кореня з використанням лише слешів, забезпечуючи стабільність незалежно від операційної системи.
|
|
26
|
+
- lintDockerfileWithHadolint — Запускає інструмент hadolint для аналізу Dockerfile. Якщо інструмент не знайдено у системних шляхах, він намагається встановити його. У разі невдачі встановлення або відключення автоматичного встановлення, повертає помилку, надаючи користувачеві підказку для ручного запуску (детальніше про інструмент можна знайти на https://github.com/hadolint/hadolint/releases).
|
|
27
27
|
|
|
28
28
|
## Гарантії поведінки
|
|
29
29
|
|
|
@@ -6,9 +6,9 @@ resource: npm/rules/docker/lib/
|
|
|
6
6
|
|
|
7
7
|
# npm/rules/docker/lib
|
|
8
8
|
|
|
9
|
-
| Файл
|
|
10
|
-
|
|
11
|
-
| [docker-hadolint.mjs](docker-hadolint.md)
|
|
12
|
-
| [docker-mirror.mjs](docker-mirror.md)
|
|
9
|
+
| Файл | Тип |
|
|
10
|
+
| ------------------------------------------------- | --------- |
|
|
11
|
+
| [docker-hadolint.mjs](docker-hadolint.md) | JS Module |
|
|
12
|
+
| [docker-mirror.mjs](docker-mirror.md) | JS Module |
|
|
13
13
|
| [docker-native-addon.mjs](docker-native-addon.md) | JS Module |
|
|
14
|
-
| [docker-nginx-user.mjs](docker-nginx-user.md)
|
|
14
|
+
| [docker-nginx-user.mjs](docker-nginx-user.md) | JS Module |
|
package/rules/efes/docs/fix.md
CHANGED
|
@@ -14,16 +14,16 @@ docgen:
|
|
|
14
14
|
## Поведінка
|
|
15
15
|
|
|
16
16
|
1. Запуск правила.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
- Приймає контекст прогону.
|
|
18
|
+
- Виконує застосування JS-занепокоєних.
|
|
19
|
+
- Застосовує політику.
|
|
20
|
+
- Генерує посилання MDC.
|
|
21
|
+
- Повертає результат прогону.
|
|
22
22
|
|
|
23
23
|
2. Запуск у режимі CLI.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
- Виконується при запуску через CLI.
|
|
25
|
+
- Виконує повний еквівалент команди `npx @nitra/cursor fix <id>`.
|
|
26
|
+
- Повертає код виходу.
|
|
27
27
|
|
|
28
28
|
## Публічний API
|
|
29
29
|
|
package/rules/efes/docs/index.md
CHANGED
|
@@ -12,11 +12,11 @@ docgen:
|
|
|
12
12
|
## Поведінка
|
|
13
13
|
|
|
14
14
|
1. Запуск правила.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
- Приймає контекст прогону.
|
|
16
|
+
- Виконує застосування JS-занепокоєних.
|
|
17
|
+
- Застосовує політику.
|
|
18
|
+
- Генерує посилання MDC.
|
|
19
|
+
- Повертає результат прогону.
|
|
20
20
|
|
|
21
21
|
## Публічний API
|
|
22
22
|
|