@nitra/cursor 5.0.3 → 5.2.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 +22 -0
- package/.pi-template/extensions/n-cursor-adr/docs/index.md +15 -9
- package/CHANGELOG.md +18 -1
- package/bin/n-cursor.js +73 -16
- package/docs/stryker.config.md +6 -0
- package/docs/vitest.config.md +6 -0
- package/lib/docs/llm.md +29 -0
- package/lib/docs/omlx.md +32 -0
- package/lib/llm.mjs +137 -0
- package/lib/models.mjs +9 -1
- package/lib/omlx.mjs +147 -0
- package/package.json +1 -1
- package/rules/abie/docs/fix.md +6 -0
- package/rules/abie/js/docs/applies.md +6 -0
- package/rules/abie/js/docs/env_dns.md +25 -22
- package/rules/abie/js/docs/firebase_hosting.md +6 -0
- package/rules/abie/js/docs/hc_pairing.md +21 -25
- package/rules/abie/js/docs/ua_http_route.md +27 -19
- package/rules/abie/js/docs/ua_node_selector.md +24 -19
- package/rules/abie/lib/docs/enabled.md +13 -7
- package/rules/abie/lib/docs/env-dns.md +9 -3
- package/rules/abie/lib/docs/hc-yaml.md +6 -0
- package/rules/abie/lib/docs/http-route.md +6 -0
- package/rules/abie/lib/docs/k8s-tree.md +6 -0
- package/rules/abie/lib/docs/kustomization-patches.md +6 -0
- package/rules/abie/lib/docs/overlay-paths.md +6 -0
- package/rules/abie/lib/docs/yaml.md +6 -0
- package/rules/adr/docs/fix.md +6 -0
- package/rules/adr/js/docs/hooks.md +29 -244
- package/rules/bun/docs/fix.md +6 -0
- package/rules/bun/js/docs/layout.md +37 -375
- package/rules/capacitor/docs/fix.md +22 -108
- package/rules/capacitor/js/docs/platforms.md +62 -268
- package/rules/changelog/docs/fix.md +6 -0
- package/rules/changelog/lib/docs/package-manifest.md +6 -0
- package/rules/ci4/docs/fix.md +23 -165
- package/rules/ci4/js/docs/marksman_config.md +9 -1
- package/rules/docker/docs/fix.md +6 -0
- package/rules/docker/js/docs/lint.md +55 -239
- package/rules/docker/lib/docs/docker-hadolint.md +6 -0
- package/rules/docker/lib/docs/docker-mirror.md +6 -0
- package/rules/docker/lib/docs/docker-native-addon.md +6 -0
- package/rules/docker/lib/docs/docker-nginx-user.md +6 -0
- package/rules/docker/lint/docs/lint.md +9 -1
- package/rules/efes/docs/fix.md +6 -0
- package/rules/ga/lint/docs/lint.md +6 -0
- package/rules/graphql/docs/fix.md +6 -0
- package/rules/graphql/lib/docs/graphql-gql-scan.md +6 -0
- package/rules/image-avif/docs/fix.md +6 -0
- package/rules/image-avif/js/docs/avif_generation.md +6 -0
- package/rules/js-bun-db/lib/docs/bun-sql-scan.md +9 -3
- package/rules/js-bun-redis/lib/docs/redis-imports.md +6 -0
- package/rules/js-lint/js/docs/utils_imports.md +6 -0
- package/rules/js-lint-ci/docs/fix.md +7 -1
- package/rules/js-mssql/docs/fix.md +6 -0
- package/rules/js-mssql/lib/docs/mssql-pool-scan.md +6 -0
- package/rules/js-run/docs/fix.md +6 -0
- package/rules/js-run/lib/docs/bunyan-imports.md +6 -0
- package/rules/js-run/lib/docs/check-env-scan.md +6 -0
- package/rules/js-run/lib/docs/conn-file-rules.md +6 -0
- package/rules/js-run/lib/docs/conn-imports-scan.md +6 -0
- package/rules/js-run/lib/docs/promise-settimeout-scan.md +6 -0
- package/rules/js-run/lib/docs/temporal-scan.md +6 -0
- package/rules/k8s/docs/fix.md +6 -0
- package/rules/k8s/lint/docs/lint.md +6 -0
- package/rules/nginx-default-tpl/docs/fix.md +6 -0
- package/rules/npm-module/js/docs/header_doc_pointer.md +7 -0
- package/rules/npm-module/js/header_doc_pointer.mjs +2 -8
- package/rules/php/docs/fix.md +6 -0
- package/rules/php/lint/docs/lint.md +6 -0
- package/rules/python/docs/fix.md +6 -0
- package/rules/python/lint/docs/lint.md +6 -0
- package/rules/rego/lint/docs/lint.md +6 -0
- package/rules/release/docs/change.md +6 -0
- package/rules/release/docs/fix.md +6 -0
- package/rules/release/docs/release.md +6 -0
- package/rules/release/lib/docs/aggregate.md +6 -0
- package/rules/release/lib/docs/change-file.md +6 -0
- package/rules/release/lib/docs/fallback.md +6 -0
- package/rules/rust/lib/docs/has-cargo-toml.md +6 -0
- package/rules/security/docs/fix.md +7 -1
- package/rules/security/js/docs/lint.md +6 -0
- package/rules/style-lint/docs/fix.md +6 -0
- package/rules/tauri/docs/fix.md +6 -0
- package/rules/test/docs/fix.md +6 -0
- package/rules/test/js/data/stryker_config/docs/stryker-vue-macros-ignorer.md +6 -0
- package/rules/test/js/data/stryker_config/docs/stryker.config.baseline.md +6 -0
- package/rules/test/js/data/stryker_config/docs/stryker.config.vue.baseline.md +6 -0
- package/rules/test/js/data/vitest_config/docs/vitest.config.baseline.md +6 -0
- package/rules/text/docs/fix.md +6 -0
- package/rules/text/lint/docs/lint.md +6 -0
- package/rules/text/lint/docs/run-dotenv-linter.md +6 -0
- package/rules/text/lint/docs/run-shellcheck.md +6 -0
- package/rules/text/lint/docs/run-v8r.md +6 -0
- package/rules/vue/lib/docs/vue-forbidden-imports.md +6 -0
- package/scripts/coverage-classify/cache.mjs +1 -1
- package/scripts/coverage-classify/docs/apply.md +6 -0
- package/scripts/coverage-classify/docs/cache.md +6 -0
- package/scripts/coverage-classify/docs/prompt.md +6 -0
- package/scripts/coverage-classify/docs/verdict-schema.md +6 -0
- package/scripts/coverage-classify/index.mjs +24 -15
- package/scripts/coverage-classify/prompt.mjs +1 -1
- package/scripts/coverage-fix-extract.mjs +1 -1
- package/scripts/coverage-fix.mjs +2 -1
- package/scripts/docs/auto-skills.md +6 -0
- package/scripts/docs/build-agents-commands.md +7 -1
- package/scripts/docs/cli-entry.md +6 -0
- package/scripts/docs/coverage-fix-extract.md +6 -0
- package/scripts/docs/coverage-fix.md +6 -0
- package/scripts/docs/ensure-nitra-cursor-dev-dependencies.md +6 -0
- package/scripts/docs/lint-cli.md +6 -0
- package/scripts/docs/post-tool-use-fix.md +6 -0
- package/scripts/docs/rename-yaml-extensions.md +6 -0
- package/scripts/docs/skills-cli.md +6 -0
- package/scripts/docs/sync-setup-bun-deps-action.md +6 -0
- package/scripts/docs/upgrade-nitra-cursor-and-install.md +6 -0
- package/scripts/docs/worktree-cli.md +6 -0
- package/scripts/lib/docs/assert-project-root.md +6 -0
- package/scripts/lib/docs/check-mdc-template-refs.md +6 -0
- package/scripts/lib/docs/check-reporter.md +6 -0
- package/scripts/lib/docs/diff-added-lines.md +6 -0
- package/scripts/lib/docs/discover-check-rules-from-cursor.md +6 -0
- package/scripts/lib/docs/discover-checkable-rules.md +6 -0
- package/scripts/lib/docs/ensure-tool.md +6 -0
- package/scripts/lib/docs/generated-markdown.md +6 -0
- package/scripts/lib/docs/gha-workflow.md +6 -0
- package/scripts/lib/docs/inline-template-links.md +6 -0
- package/scripts/lib/docs/list-rule-ids.md +6 -0
- package/scripts/lib/docs/load-cursor-config.md +6 -0
- package/scripts/lib/docs/mirror-parity.md +6 -0
- package/scripts/lib/docs/read-n-cursor-config-lite.md +6 -0
- package/scripts/lib/docs/resolve-target-files.md +6 -0
- package/scripts/lib/docs/root-notice.md +6 -0
- package/scripts/lib/docs/rule-meta-helpers.md +6 -0
- package/scripts/lib/docs/rule-meta.md +6 -0
- package/scripts/lib/docs/run-conftest-batch.md +6 -0
- package/scripts/lib/docs/run-lint-step.md +6 -0
- package/scripts/lib/docs/run-rule-cli.md +6 -0
- package/scripts/lib/docs/run-rule.md +6 -0
- package/scripts/lib/docs/run-standard-lint.md +6 -0
- package/scripts/lib/docs/run-standard-rule.md +6 -0
- package/scripts/lib/docs/skill-meta.md +6 -0
- package/scripts/lib/docs/template.md +6 -0
- package/scripts/lib/docs/timing-summary.md +6 -0
- package/scripts/lib/docs/workspaces.md +6 -0
- package/scripts/lib/docs/worktree-notice.md +6 -0
- package/scripts/lib/docs/worktree.md +6 -0
- package/scripts/lib/mirror-parity.mjs +1 -1
- package/scripts/lib/root-notice.mjs +1 -1
- package/scripts/lib/worktree-notice.mjs +5 -5
- package/scripts/lib/worktree.mjs +1 -1
- package/scripts/sync-claude-config.mjs +3 -0
- package/scripts/utils/docs/ast-scan-utils.md +6 -0
- package/scripts/utils/docs/ensure-gitignore-entries.md +6 -0
- package/scripts/utils/docs/find-package-json-paths.md +6 -0
- package/scripts/utils/docs/lock-cache-dir.md +6 -0
- package/scripts/utils/docs/pass.md +6 -0
- package/scripts/utils/docs/resolve-cargo-manifest.md +6 -0
- package/scripts/utils/docs/resolve-cmd.md +6 -0
- package/scripts/utils/docs/resolve-js-root.md +6 -0
- package/scripts/utils/docs/test-helpers.md +6 -0
- package/scripts/utils/docs/walk-cache.md +6 -0
- package/scripts/utils/docs/walkDir.md +6 -0
- package/scripts/utils/docs/worktree-fingerprint.md +6 -0
- package/scripts/utils/resolve-js-root.mjs +1 -1
- package/skills/doc-aggregate/SKILL.md +129 -0
- package/skills/doc-aggregate/js/docgen-ignore.mjs +9 -0
- package/skills/{docgen → doc-aggregate}/js/docgen-scan.mjs +22 -67
- package/skills/doc-aggregate/js/docs/docgen-ignore.md +21 -0
- package/skills/doc-files/SKILL.md +100 -0
- package/skills/doc-files/js/docgen-crc.mjs +164 -0
- package/skills/{docgen → doc-files}/js/docgen-extract-anchors.mjs +24 -15
- package/skills/{docgen → doc-files}/js/docgen-extract.mjs +15 -9
- package/skills/doc-files/js/docgen-files-batch.mjs +181 -0
- package/skills/doc-files/js/docgen-gen.mjs +291 -0
- package/skills/{docgen → doc-files}/js/docgen-prompts.mjs +43 -40
- package/skills/doc-files/js/docgen-scan.mjs +298 -0
- package/skills/doc-files/js/docs/docgen-crc.md +32 -0
- package/skills/doc-files/js/docs/docgen-extract-anchors.md +27 -0
- package/skills/doc-files/js/docs/docgen-extract.md +29 -0
- package/skills/doc-files/js/docs/docgen-files-batch.md +25 -0
- package/skills/doc-files/js/docs/docgen-gen.md +30 -0
- package/skills/doc-files/js/docs/docgen-prompts.md +32 -0
- package/skills/doc-files/js/docs/docgen-scan.md +25 -0
- package/skills/doc-files/meta.json +1 -0
- package/skills/fix/js/docs/llm-worker.md +6 -0
- package/skills/fix/js/docs/orchestrator.md +6 -0
- package/skills/fix/js/llm-worker.mjs +23 -14
- package/skills/fix/js/orchestrator.mjs +1 -1
- package/skills/start-check/js/check.mjs +5 -3
- package/skills/start-check/js/docs/check.md +6 -0
- package/skills/docgen/SKILL.md +0 -224
- package/skills/docgen/bench/etalon/firebase_hosting.md +0 -19
- package/skills/docgen/bench/etalon/k8s-tree.md +0 -24
- package/skills/docgen/bench/etalon/overlay-paths.md +0 -24
- package/skills/docgen/js/docgen-batch-omlx.mjs +0 -82
- package/skills/docgen/js/docgen-batch.mjs +0 -95
- package/skills/docgen/js/docgen-compare-pi-vs-direct.mjs +0 -95
- package/skills/docgen/js/docgen-gen.mjs +0 -339
- package/skills/docgen/js/docs/docgen-extract.md +0 -28
- package/skills/docgen/js/docs/docgen-gen.md +0 -41
- package/skills/docgen/js/docs/docgen-ignore.md +0 -24
- package/skills/docgen/js/docs/docgen-prompts.md +0 -24
- package/skills/docgen/js/docs/docgen-scan.md +0 -48
- /package/skills/{docgen → doc-aggregate}/meta.json +0 -0
- /package/skills/{docgen → doc-files}/js/docgen-ignore.mjs +0 -0
package/rules/k8s/docs/fix.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
docgen:
|
|
3
|
+
source: npm/rules/npm-module/js/header_doc_pointer.mjs
|
|
4
|
+
crc: 9058c4ea
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# header_doc_pointer.mjs
|
|
2
8
|
|
|
3
9
|
## Огляд
|
|
@@ -13,6 +19,7 @@
|
|
|
13
19
|
5. Рахує непорожні змістовні рядки блоку (після зрізання відступу `*`). Більше одного → порушення.
|
|
14
20
|
|
|
15
21
|
Допустимі форми при наявних docs:
|
|
22
|
+
|
|
16
23
|
- відсутній module-level JSDoc (0 рядків)
|
|
17
24
|
- `/** @see ./docs/<stem>.md */` (1 рядок)
|
|
18
25
|
- `/** Контракт: ./docs/<stem>.md */` (1 рядок)
|
|
@@ -26,8 +26,7 @@ function contentLineCount(block) {
|
|
|
26
26
|
return block
|
|
27
27
|
.split('\n')
|
|
28
28
|
.slice(1, -1)
|
|
29
|
-
.filter(l => NON_WHITESPACE_RE.test(l.replace(STAR_INDENT_RE, '')))
|
|
30
|
-
.length
|
|
29
|
+
.filter(l => NON_WHITESPACE_RE.test(l.replace(STAR_INDENT_RE, ''))).length
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
/**
|
|
@@ -63,12 +62,7 @@ export async function check(cwd = process.cwd()) {
|
|
|
63
62
|
if (!existsSync(jsDir)) continue
|
|
64
63
|
|
|
65
64
|
for (const fileEntry of await readdir(jsDir, { withFileTypes: true })) {
|
|
66
|
-
if (
|
|
67
|
-
!fileEntry.isFile() ||
|
|
68
|
-
!fileEntry.name.endsWith('.mjs') ||
|
|
69
|
-
fileEntry.name.endsWith('.test.mjs')
|
|
70
|
-
)
|
|
71
|
-
continue
|
|
65
|
+
if (!fileEntry.isFile() || !fileEntry.name.endsWith('.mjs') || fileEntry.name.endsWith('.test.mjs')) continue
|
|
72
66
|
|
|
73
67
|
const stem = basename(fileEntry.name, '.mjs')
|
|
74
68
|
const docsPath = join(jsDir, 'docs', `${stem}.md`)
|
package/rules/php/docs/fix.md
CHANGED
package/rules/python/docs/fix.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
docgen:
|
|
3
|
+
source: npm/rules/release/lib/change-file.mjs
|
|
4
|
+
crc: 9284bc96
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# `change-file.mjs`
|
|
2
8
|
|
|
3
9
|
Модуль для роботи з одиничним **change-файлом** релізного процесу — невеликою markdown-нотаткою, що описує одну зміну в межах workspace і агрегується пізніше при формуванні CHANGELOG / bump версії.
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
docgen:
|
|
3
|
+
source: npm/rules/security/fix.mjs
|
|
4
|
+
crc: 12fc1644
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# fix.mjs — entry-point правила `security`
|
|
2
8
|
|
|
3
9
|
## Огляд
|
|
@@ -74,7 +80,7 @@ export function run(ctx)
|
|
|
74
80
|
Рядок із `process.exit(await runRuleCli(...))` має локальну директиву:
|
|
75
81
|
|
|
76
82
|
```js
|
|
77
|
-
|
|
83
|
+
|
|
78
84
|
```
|
|
79
85
|
|
|
80
86
|
Це свідома відмова від загальної заборони `process.exit`: для CLI entry-point потрібно повертати числовий код, інакше CI/IDE не зможуть розрізнити OK і порушення. Заборона залишається активною для решти кодової бази.
|
package/rules/tauri/docs/fix.md
CHANGED
package/rules/test/docs/fix.md
CHANGED
package/rules/text/docs/fix.md
CHANGED
|
@@ -29,7 +29,7 @@ export function deriveBlobHash(filePath) {
|
|
|
29
29
|
return execFileSync('git', ['hash-object', filePath], { encoding: 'utf8' }).trim()
|
|
30
30
|
} catch {
|
|
31
31
|
const content = readFileSync(filePath)
|
|
32
|
-
return createHash('
|
|
32
|
+
return createHash('sha256').update(content).digest('hex')
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -3,14 +3,19 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Routing:
|
|
5
5
|
* 1. Cache lookup → hit → використати збережений verdict.
|
|
6
|
-
* 2. Cache miss → Tier 1 (
|
|
7
|
-
* 3. Tier 1 fail (
|
|
6
|
+
* 2. Cache miss → Tier 1 (resolveModel('min')) → parseVerdict.
|
|
7
|
+
* 3. Tier 1 fail (model error / bad JSON / Zod) → Tier 2 (CLOUD_MIN через pi).
|
|
8
8
|
* 4. Tier 2 fail → conservative fallback worth-testing/confidence=0.
|
|
9
|
+
*
|
|
10
|
+
* Бекенд обирається за model-id: `omlx/...` → прямий HTTP до omlx (локально),
|
|
11
|
+
* решта → pi CLI. Якщо omlx-Tier 1 недоступний, помилка падає в той самий catch
|
|
12
|
+
* і класифікація відкочується на хмарний Tier 2 через pi.
|
|
9
13
|
*/
|
|
10
14
|
import { spawnSync } from 'node:child_process'
|
|
11
15
|
import { join } from 'node:path'
|
|
12
16
|
|
|
13
17
|
import { CLOUD_MIN, resolveModel } from '../../lib/models.mjs'
|
|
18
|
+
import { callOmlx, isOmlxModel } from '../../lib/omlx.mjs'
|
|
14
19
|
import { deriveCacheKey, readCache, writeCache } from './cache.mjs'
|
|
15
20
|
import { buildUserPrompt, SYSTEM_PROMPT } from './prompt.mjs'
|
|
16
21
|
import { parseVerdict } from './verdict-schema.mjs'
|
|
@@ -22,13 +27,17 @@ const FALLBACK_VERDICT = {
|
|
|
22
27
|
}
|
|
23
28
|
|
|
24
29
|
/**
|
|
25
|
-
* Викликає
|
|
30
|
+
* Викликає LLM за model-id і повертає raw текст відповіді.
|
|
31
|
+
* `omlx/...` → прямий HTTP до omlx (text-only); решта → pi CLI.
|
|
26
32
|
* @param {string} prompt текст промпта
|
|
27
|
-
* @param {string} model provider/model-id або '' для pi-дефолту
|
|
28
|
-
* @returns {string}
|
|
29
|
-
* @throws якщо
|
|
33
|
+
* @param {string} model provider/model-id, `omlx/...` або '' для pi-дефолту
|
|
34
|
+
* @returns {string} текст відповіді моделі
|
|
35
|
+
* @throws якщо backend недоступний або повертає помилку
|
|
30
36
|
*/
|
|
31
|
-
function
|
|
37
|
+
function callModel(prompt, model) {
|
|
38
|
+
if (isOmlxModel(model)) {
|
|
39
|
+
return callOmlx([{ role: 'user', content: prompt }], model, { timeoutMs: 60_000 })
|
|
40
|
+
}
|
|
32
41
|
const modelArgs = model ? ['--model', model] : []
|
|
33
42
|
const r = spawnSync('pi', ['-p', prompt, ...modelArgs, '--no-session', '--mode', 'text', '--no-tools'], {
|
|
34
43
|
encoding: 'utf8',
|
|
@@ -44,21 +53,21 @@ function callPi(prompt, model) {
|
|
|
44
53
|
* @param {{file: string, mutants: object[]}} group група мутантів одного файлу
|
|
45
54
|
* @param {object} mutant конкретний мутант
|
|
46
55
|
* @param {string} cwd корінь проєкту
|
|
47
|
-
* @param {(prompt: string, model: string) => string}
|
|
56
|
+
* @param {(prompt: string, model: string) => string} callModelFn ін'єкція для тестів
|
|
48
57
|
* @returns {object} verdict класифікації
|
|
49
58
|
*/
|
|
50
|
-
function classifyOne(group, mutant, cwd,
|
|
59
|
+
function classifyOne(group, mutant, cwd, callModelFn) {
|
|
51
60
|
const prompt = `${SYSTEM_PROMPT}\n\n${buildUserPrompt({ ...mutant, file: group.file }, cwd)}`
|
|
52
61
|
const loc = `${group.file}:${mutant.line}:${mutant.col}`
|
|
53
62
|
|
|
54
63
|
// Tier 1: resolveModel('min') — каскад local→cloud якщо локалі нема
|
|
55
64
|
try {
|
|
56
|
-
const text =
|
|
65
|
+
const text = callModelFn(prompt, resolveModel('min'))
|
|
57
66
|
return parseVerdict(text)
|
|
58
67
|
} catch {
|
|
59
68
|
// Tier 2: CLOUD_MIN
|
|
60
69
|
try {
|
|
61
|
-
const text =
|
|
70
|
+
const text = callModelFn(prompt, CLOUD_MIN)
|
|
62
71
|
return parseVerdict(text)
|
|
63
72
|
} catch (error) {
|
|
64
73
|
console.warn(`⚠ coverage classify: ${loc} both tiers failed: ${error.message}`)
|
|
@@ -68,15 +77,15 @@ function classifyOne(group, mutant, cwd, callPiFn) {
|
|
|
68
77
|
}
|
|
69
78
|
|
|
70
79
|
/**
|
|
71
|
-
* Класифікує survived мутантів
|
|
80
|
+
* Класифікує survived мутантів (resolveModel('min') → CLOUD_MIN → fallback).
|
|
72
81
|
* @param {Array<{file: string, mutants: object[], exampleTest?: object|null, recommendationText?: string|null}>} survived список вцілілих мутантів
|
|
73
82
|
* @param {string} cwd корінь проєкту
|
|
74
|
-
* @param {{cachePath?: string,
|
|
83
|
+
* @param {{cachePath?: string, callModel?: Function}} [opts] ін'єкції для тестів
|
|
75
84
|
* @returns {Promise<Array<{key: string, verdict: object}>>} verdicts
|
|
76
85
|
*/
|
|
77
86
|
export function classify(survived, cwd, opts = {}) {
|
|
78
87
|
const cachePath = opts.cachePath ?? join(cwd, 'npm/reports/coverage-classify.cache.json')
|
|
79
|
-
const
|
|
88
|
+
const callModelFn = opts.callModel ?? callModel
|
|
80
89
|
const cacheModel = `${resolveModel('min') || 'default'}+${CLOUD_MIN || 'cloud'}`
|
|
81
90
|
|
|
82
91
|
const cache = readCache(cachePath)
|
|
@@ -102,7 +111,7 @@ export function classify(survived, cwd, opts = {}) {
|
|
|
102
111
|
}
|
|
103
112
|
}
|
|
104
113
|
if (!verdict) {
|
|
105
|
-
verdict = classifyOne(group, mutant, cwd,
|
|
114
|
+
verdict = classifyOne(group, mutant, cwd, callModelFn)
|
|
106
115
|
if (cacheKey) {
|
|
107
116
|
cache.entries[cacheKey] = { ...verdict, classifiedAt: new Date().toISOString() }
|
|
108
117
|
}
|
|
@@ -55,7 +55,7 @@ worth-testing with low confidence instead of glue/wrapper.
|
|
|
55
55
|
*/
|
|
56
56
|
function extractTestTitles(content) {
|
|
57
57
|
const titles = []
|
|
58
|
-
for (const match of content.matchAll(
|
|
58
|
+
for (const match of content.matchAll(/^[ \t]{0,16}(describe|test|it)\(['"`](.{1,300}?)['"`]/gmu)) {
|
|
59
59
|
titles.push(`${match[1]}: ${match[2]}`)
|
|
60
60
|
}
|
|
61
61
|
return titles.join('\n') || '(no describe/test blocks found)'
|
|
@@ -27,7 +27,7 @@ const SURVIVED_SECTION = '## Вцілілі мутанти'
|
|
|
27
27
|
* захоплюється в групу 1 — renderMarkdown пише 3, але oxfmt підвищує до 4+, коли
|
|
28
28
|
* сам JSON-вміст містить ``` (типово для original/replacement мутантів).
|
|
29
29
|
*/
|
|
30
|
-
const FENCE_OPEN_RE = /(`{3,})json[^\n]
|
|
30
|
+
const FENCE_OPEN_RE = /(`{3,8})json[^\n]{0,200}\n/
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* Витягує JSON-масив вцілілих мутантів із тексту COVERAGE.md: знаходить секцію
|
package/scripts/coverage-fix.mjs
CHANGED
|
@@ -9,10 +9,11 @@
|
|
|
9
9
|
import { readFile } from 'node:fs/promises'
|
|
10
10
|
import { join } from 'node:path'
|
|
11
11
|
import { spawnSync } from 'node:child_process'
|
|
12
|
+
import { env } from 'node:process'
|
|
12
13
|
|
|
13
14
|
import { resolveModel } from '../lib/models.mjs'
|
|
14
15
|
|
|
15
|
-
const MODEL =
|
|
16
|
+
const MODEL = env.N_CURSOR_COVERAGE_FIX_MODEL ?? resolveModel('max')
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* @typedef {{line:number, col:number, mutantType:string, original:string, replacement:string}} MutantDetail
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
docgen:
|
|
3
|
+
source: npm/scripts/build-agents-commands.mjs
|
|
4
|
+
crc: 5a4cde2f
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# build-agents-commands.mjs
|
|
2
8
|
|
|
3
9
|
## Огляд
|
|
@@ -154,7 +160,7 @@ const items = await buildAgentsCommandBulletItems(process.cwd())
|
|
|
154
160
|
|
|
155
161
|
```js
|
|
156
162
|
import { buildAgentsCommandBulletItems } from '/абсолютний/шлях/до/build-agents-commands.mjs'
|
|
157
|
-
|
|
163
|
+
|
|
158
164
|
const items = await buildAgentsCommandBulletItems('/абсолютний/шлях/до/тимчасової/теки')
|
|
159
165
|
console.log(items)
|
|
160
166
|
```
|