@nitra/cursor 12.6.1 → 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/.claude-template/settings.template.json +1 -1
- package/.pi-template/extensions/n-cursor-adr/docs/index.md +2 -2
- package/CHANGELOG.md +25 -5
- package/bin/docs/n-cursor.md +4 -20
- package/bin/n-cursor.js +8 -54
- package/docs/index.md +3 -3
- package/docs/stryker.config.md +20 -28
- 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 +4 -3
- package/rules/abie/docs/main.md +29 -0
- package/rules/abie/js/docs/index.md +6 -6
- package/rules/abie/lib/docs/index.md +9 -9
- package/rules/abie/{fix.mjs → main.mjs} +5 -3
- package/rules/adr/docs/index.md +1 -0
- package/rules/adr/docs/main.md +29 -0
- package/rules/adr/{fix.mjs → main.mjs} +5 -3
- package/rules/bun/docs/fix.md +5 -5
- package/rules/bun/docs/index.md +4 -3
- package/rules/bun/docs/main.md +30 -0
- package/rules/bun/js/docs/index.md +2 -2
- package/rules/bun/js/docs/layout.md +11 -36
- package/rules/bun/{fix.mjs → main.mjs} +5 -3
- package/rules/capacitor/docs/fix.md +10 -10
- package/rules/capacitor/docs/index.md +4 -3
- package/rules/capacitor/docs/main.md +29 -0
- package/rules/capacitor/js/docs/index.md +2 -2
- package/rules/capacitor/{fix.mjs → main.mjs} +5 -3
- package/rules/changelog/docs/fix.md +11 -11
- package/rules/changelog/docs/index.md +4 -3
- package/rules/changelog/docs/main.md +27 -0
- 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/changelog/main.mjs +20 -0
- package/rules/ci4/docs/fix.md +4 -4
- package/rules/ci4/docs/index.md +4 -3
- package/rules/ci4/docs/main.md +30 -0
- package/rules/ci4/js/docs/index.md +2 -2
- package/rules/ci4/main.mjs +20 -0
- package/rules/doc-files/docs/index.md +4 -3
- package/rules/doc-files/docs/main.md +31 -0
- 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 +63 -4
- 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 +99 -11
- 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 +15 -15
- 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/docgen-scan.md +34 -34
- package/rules/doc-files/js/docs/index.md +16 -15
- package/rules/doc-files/js/docs/run-lint.md +27 -0
- package/rules/doc-files/{lint/lint.mjs → js/run-lint.mjs} +23 -9
- package/rules/doc-files/{js/lint.mjs → main.mjs} +60 -10
- package/rules/docker/docs/fix.md +6 -6
- package/rules/docker/docs/index.md +4 -3
- package/rules/docker/docs/main.md +28 -0
- package/rules/docker/js/docs/index.md +2 -2
- package/rules/docker/js/docs/lint.md +26 -54
- package/rules/docker/js/lint.mjs +11 -0
- package/rules/docker/lib/docker-hadolint.mjs +1 -1
- package/rules/docker/lib/docs/docker-hadolint.md +16 -173
- package/rules/docker/lib/docs/index.md +5 -5
- package/rules/docker/main.mjs +20 -0
- package/rules/efes/docs/fix.md +8 -8
- package/rules/efes/docs/index.md +4 -3
- package/rules/efes/docs/main.md +29 -0
- package/rules/efes/main.mjs +20 -0
- package/rules/feedback/docs/fix.md +5 -5
- package/rules/feedback/docs/index.md +4 -3
- package/rules/feedback/docs/main.md +30 -0
- package/rules/feedback/main.mjs +20 -0
- package/rules/ga/docs/fix.md +5 -5
- package/rules/ga/docs/index.md +4 -3
- package/rules/ga/docs/main.md +29 -0
- package/rules/ga/js/docs/index.md +3 -3
- package/rules/ga/{lint/lint.mjs → main.mjs} +36 -10
- package/rules/graphql/docs/fix.md +8 -8
- package/rules/graphql/docs/index.md +4 -3
- package/rules/graphql/docs/main.md +36 -0
- package/rules/graphql/js/docs/index.md +2 -2
- package/rules/graphql/lib/docs/index.md +2 -2
- package/rules/graphql/main.mjs +20 -0
- package/rules/hasura/docs/fix.md +11 -11
- package/rules/hasura/docs/index.md +4 -3
- package/rules/hasura/docs/main.md +30 -0
- package/rules/hasura/js/docs/index.md +2 -2
- package/rules/hasura/main.mjs +20 -0
- package/rules/image-avif/docs/fix.md +3 -3
- package/rules/image-avif/docs/index.md +4 -3
- package/rules/image-avif/docs/main.md +30 -0
- package/rules/image-avif/js/docs/avif_generation.md +20 -233
- package/rules/image-avif/js/docs/index.md +2 -2
- package/rules/image-avif/main.mjs +20 -0
- package/rules/image-compress/docs/fix.md +2 -2
- package/rules/image-compress/docs/index.md +4 -3
- package/rules/image-compress/docs/main.md +29 -0
- package/rules/image-compress/js/docs/index.md +3 -3
- package/rules/image-compress/js/docs/package_setup.md +12 -11
- package/rules/image-compress/{js/lint.mjs → main.mjs} +21 -5
- package/rules/js-bun-db/docs/fix.md +5 -5
- package/rules/js-bun-db/docs/index.md +4 -3
- package/rules/js-bun-db/docs/main.md +30 -0
- 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-db/main.mjs +20 -0
- package/rules/js-bun-redis/docs/fix.md +6 -6
- package/rules/js-bun-redis/docs/index.md +4 -3
- package/rules/js-bun-redis/docs/main.md +29 -0
- 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-bun-redis/main.mjs +20 -0
- package/rules/js-lint/docs/fix.md +9 -9
- package/rules/js-lint/docs/index.md +4 -3
- package/rules/js-lint/docs/main.md +29 -0
- package/rules/js-lint/js/check.mjs +268 -0
- package/rules/js-lint/js/docs/check.md +39 -0
- package/rules/js-lint/js/docs/index.md +4 -4
- package/rules/js-lint/js/docs/tooling.md +12 -32
- package/rules/js-lint/js/tooling.mjs +1 -265
- package/rules/js-lint/{js/lint.mjs → main.mjs} +19 -2
- package/rules/js-lint-ci/docs/fix.md +3 -3
- package/rules/js-lint-ci/docs/index.md +4 -3
- package/rules/js-lint-ci/docs/main.md +27 -0
- package/rules/js-lint-ci/js/docs/index.md +2 -2
- package/rules/js-lint-ci/main.mjs +33 -0
- package/rules/js-mssql/docs/fix.md +5 -5
- package/rules/js-mssql/docs/index.md +4 -3
- package/rules/js-mssql/docs/main.md +30 -0
- package/rules/js-mssql/js/docs/index.md +2 -2
- package/rules/js-mssql/lib/docs/index.md +2 -2
- package/rules/js-mssql/main.mjs +20 -0
- package/rules/js-run/docs/fix.md +8 -8
- package/rules/js-run/docs/index.md +4 -3
- package/rules/js-run/docs/main.md +30 -0
- package/rules/js-run/js/docs/index.md +2 -2
- package/rules/js-run/lib/docs/index.md +7 -7
- package/rules/js-run/main.mjs +20 -0
- package/rules/k8s/docs/fix.md +4 -4
- package/rules/k8s/docs/index.md +4 -3
- package/rules/k8s/docs/main.md +40 -0
- package/rules/k8s/js/docs/index.md +12 -0
- package/rules/k8s/{lint/lint.mjs → main.mjs} +32 -10
- package/rules/nginx-default-tpl/docs/fix.md +7 -7
- package/rules/nginx-default-tpl/docs/index.md +4 -3
- package/rules/nginx-default-tpl/docs/main.md +30 -0
- package/rules/nginx-default-tpl/js/docs/index.md +2 -2
- package/rules/nginx-default-tpl/js/docs/template.md +2 -2
- package/rules/nginx-default-tpl/main.mjs +20 -0
- package/rules/npm-module/docs/fix.md +8 -8
- package/rules/npm-module/docs/index.md +4 -3
- package/rules/npm-module/docs/main.md +29 -0
- package/rules/npm-module/js/docs/index.md +5 -5
- package/rules/npm-module/js/docs/rule_meta.md +17 -16
- package/rules/npm-module/js/header_doc_pointer.mjs +1 -3
- package/rules/npm-module/js/rule_meta.mjs +13 -3
- package/rules/npm-module/main.mjs +20 -0
- package/rules/php/docs/fix.md +6 -6
- package/rules/php/docs/index.md +4 -3
- package/rules/php/docs/main.md +33 -0
- package/rules/php/js/docs/index.md +3 -3
- package/rules/php/js/docs/tooling.md +10 -10
- package/rules/php/{lint/lint.mjs → main.mjs} +32 -6
- package/rules/python/docs/fix.md +11 -11
- package/rules/python/docs/index.md +4 -3
- package/rules/python/docs/main.md +31 -0
- package/rules/python/js/docs/index.md +3 -3
- package/rules/python/js/docs/tooling.md +17 -17
- package/rules/python/{lint/lint.mjs → main.mjs} +31 -6
- package/rules/rego/docs/fix.md +5 -5
- package/rules/rego/docs/index.md +4 -3
- package/rules/rego/docs/main.md +37 -0
- package/rules/rego/js/docs/index.md +3 -3
- package/rules/rego/{lint/lint.mjs → main.mjs} +27 -5
- package/rules/release/docs/index.md +5 -4
- package/rules/release/docs/main.md +29 -0
- package/rules/release/docs/release.md +0 -3
- package/rules/release/lib/docs/index.md +4 -4
- package/rules/release/release.mdc +10 -0
- package/rules/rust/docs/fix.md +4 -4
- package/rules/rust/docs/index.md +4 -3
- package/rules/rust/docs/main.md +27 -0
- package/rules/rust/js/docs/index.md +3 -3
- package/rules/rust/lib/docs/index.md +2 -2
- package/rules/rust/{js/lint.mjs → main.mjs} +27 -4
- package/rules/security/docs/fix.md +6 -6
- package/rules/security/docs/index.md +4 -3
- package/rules/security/docs/main.md +28 -0
- package/rules/security/js/docs/index.md +4 -4
- package/rules/security/main.mjs +45 -0
- package/rules/style-lint/docs/fix.md +3 -3
- package/rules/style-lint/docs/index.md +4 -3
- package/rules/style-lint/docs/main.md +29 -0
- package/rules/style-lint/js/docs/index.md +3 -3
- package/rules/style-lint/{js/lint.mjs → main.mjs} +19 -1
- package/rules/tauri/docs/fix.md +11 -11
- package/rules/tauri/docs/index.md +4 -3
- package/rules/tauri/docs/main.md +29 -0
- package/rules/tauri/js/docs/index.md +3 -3
- package/rules/tauri/main.mjs +20 -0
- package/rules/test/docs/fix.md +5 -5
- package/rules/test/docs/index.md +4 -3
- package/rules/test/docs/main.md +30 -0
- 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/test/main.mjs +20 -0
- package/rules/text/docs/fix.md +11 -11
- package/rules/text/docs/index.md +4 -3
- package/rules/text/docs/main.md +29 -0
- package/rules/text/{lint → js}/cspell-fix.mjs +7 -2
- package/rules/text/js/docs/cspell-fix.md +30 -0
- package/rules/text/js/docs/formatting.md +12 -45
- package/rules/text/js/docs/index.md +8 -4
- package/rules/text/js/docs/run-dotenv-linter.md +31 -0
- package/rules/text/js/docs/run-shellcheck.md +28 -0
- package/rules/text/js/docs/run-v8r.md +29 -0
- package/rules/text/{lint/lint.mjs → main.mjs} +41 -10
- package/rules/tool-surface/docs/index.md +4 -3
- package/rules/tool-surface/docs/main.md +29 -0
- package/rules/tool-surface/main.mjs +20 -0
- package/rules/tool-surface/meta.json +6 -1
- package/rules/vue/docs/fix.md +6 -6
- package/rules/vue/docs/index.md +4 -3
- package/rules/vue/docs/main.md +29 -0
- package/rules/vue/js/docs/index.md +2 -2
- package/rules/vue/lib/docs/index.md +2 -2
- package/rules/vue/main.mjs +20 -0
- package/rules/worktree/docs/fix.md +11 -11
- package/rules/worktree/docs/index.md +4 -3
- package/rules/worktree/docs/main.md +28 -0
- package/rules/worktree/main.mjs +20 -0
- package/scripts/coverage-classify/docs/index.md +6 -6
- package/scripts/dispatcher/docs/index.md +2 -2
- package/scripts/docs/index.md +16 -15
- package/scripts/docs/post-tool-use-check.md +29 -0
- package/scripts/docs/sync-claude-config.md +64 -92
- package/scripts/lib/adr/docs/normalize-cli.md +0 -3
- package/scripts/lib/adr/docs/normalize-pipeline.md +0 -3
- package/scripts/lib/docs/gha-workflow.md +25 -317
- package/scripts/lib/docs/index.md +36 -35
- package/scripts/lib/docs/list-project-rules-mdc.md +5 -4
- package/scripts/lib/docs/list-rule-ids.md +15 -148
- package/scripts/lib/docs/read-n-cursor-config-lite.md +12 -16
- package/scripts/lib/docs/run-lint-step.md +13 -13
- package/scripts/lib/docs/run-lint.md +30 -0
- package/scripts/lib/docs/run-rule-cli.md +14 -10
- package/scripts/lib/docs/run-standard-lint.md +29 -10
- package/scripts/lib/docs/run-standard-rule.md +12 -11
- package/scripts/lib/docs/timing-summary.md +11 -12
- package/scripts/lib/docs/worktree-notice.md +0 -3
- package/scripts/lib/fix/analyze-escalation.mjs +4 -1
- package/scripts/lib/fix/docs/index.md +11 -10
- package/scripts/lib/fix/docs/orchestrator.md +23 -18
- package/scripts/lib/fix/docs/run-conformance-check.md +33 -0
- package/scripts/lib/fix/docs/run-fix-check.md +3 -3
- package/scripts/lib/fix/docs/t0.md +10 -9
- package/scripts/lib/fix/orchestrator.mjs +31 -8
- package/scripts/lib/fix/{run-fix-check.mjs → run-conformance-check.mjs} +13 -13
- package/scripts/lib/fix/t0.mjs +6 -3
- package/scripts/lib/list-project-rules-mdc.mjs +1 -1
- package/scripts/lib/list-rule-ids.mjs +12 -3
- package/scripts/lib/read-n-cursor-config-lite.mjs +2 -2
- package/{rules/lint/js/orchestrate.mjs → scripts/lib/run-lint.mjs} +42 -22
- package/scripts/lib/run-rule-cli.mjs +4 -4
- package/scripts/lib/run-standard-lint.mjs +19 -6
- package/scripts/lib/run-standard-rule.mjs +4 -4
- package/scripts/lib/timing-summary.mjs +1 -1
- package/scripts/{post-tool-use-fix.mjs → post-tool-use-check.mjs} +9 -9
- package/scripts/sync-claude-config.mjs +2 -2
- 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
- package/rules/changelog/fix.mjs +0 -18
- package/rules/ci4/fix.mjs +0 -18
- package/rules/doc-files/fix.mjs +0 -19
- package/rules/doc-files/js/docs/lint.md +0 -34
- package/rules/doc-files/lint/docs/index.md +0 -11
- package/rules/doc-files/lint/docs/lint.md +0 -35
- package/rules/docker/fix.mjs +0 -18
- package/rules/docker/lint/docs/index.md +0 -11
- package/rules/docker/lint/docs/lint.md +0 -200
- package/rules/docker/lint/lint.mjs +0 -95
- package/rules/efes/fix.mjs +0 -18
- package/rules/feedback/fix.mjs +0 -18
- package/rules/ga/fix.mjs +0 -18
- package/rules/ga/js/docs/lint.md +0 -20
- package/rules/ga/js/lint.mjs +0 -12
- package/rules/ga/lint/docs/index.md +0 -11
- package/rules/ga/lint/docs/lint.md +0 -31
- package/rules/graphql/fix.mjs +0 -18
- package/rules/hasura/fix.mjs +0 -18
- package/rules/image-avif/fix.mjs +0 -18
- package/rules/image-compress/fix.mjs +0 -18
- package/rules/image-compress/js/docs/lint.md +0 -24
- package/rules/js-bun-db/fix.mjs +0 -18
- package/rules/js-bun-redis/fix.mjs +0 -18
- package/rules/js-lint/fix.mjs +0 -18
- package/rules/js-lint/js/docs/lint.md +0 -32
- package/rules/js-lint-ci/fix.mjs +0 -18
- package/rules/js-lint-ci/js/docs/lint.md +0 -22
- package/rules/js-lint-ci/js/lint.mjs +0 -15
- package/rules/js-mssql/fix.mjs +0 -18
- package/rules/js-run/fix.mjs +0 -18
- package/rules/k8s/fix.mjs +0 -18
- package/rules/k8s/js/lint.mjs +0 -14
- package/rules/k8s/lint/docs/index.md +0 -11
- package/rules/k8s/lint/docs/lint.md +0 -413
- package/rules/lint/docs/fix.md +0 -25
- package/rules/lint/docs/index.md +0 -11
- package/rules/lint/fix.mjs +0 -18
- package/rules/lint/js/docs/index.md +0 -11
- package/rules/lint/js/docs/orchestrate.md +0 -31
- package/rules/lint/meta.json +0 -1
- package/rules/nginx-default-tpl/fix.mjs +0 -18
- package/rules/npm-module/fix.mjs +0 -18
- package/rules/php/fix.mjs +0 -18
- package/rules/php/js/docs/lint.md +0 -20
- package/rules/php/js/lint.mjs +0 -15
- package/rules/php/lint/docs/index.md +0 -11
- package/rules/php/lint/docs/lint.md +0 -219
- package/rules/python/fix.mjs +0 -18
- package/rules/python/js/docs/lint.md +0 -21
- package/rules/python/js/lint.mjs +0 -14
- package/rules/python/lint/docs/index.md +0 -11
- package/rules/python/lint/docs/lint.md +0 -29
- package/rules/rego/fix.mjs +0 -18
- package/rules/rego/js/docs/lint.md +0 -21
- package/rules/rego/js/lint.mjs +0 -12
- package/rules/rego/lint/docs/index.md +0 -11
- package/rules/rego/lint/docs/lint.md +0 -208
- package/rules/rust/fix.mjs +0 -18
- package/rules/rust/js/docs/lint.md +0 -21
- package/rules/security/fix.mjs +0 -18
- package/rules/security/js/docs/lint.md +0 -175
- package/rules/security/js/lint.mjs +0 -26
- package/rules/style-lint/fix.mjs +0 -18
- package/rules/style-lint/js/docs/lint.md +0 -31
- package/rules/tauri/fix.mjs +0 -18
- package/rules/test/fix.mjs +0 -18
- package/rules/text/fix.mjs +0 -18
- package/rules/text/js/docs/lint.md +0 -23
- package/rules/text/js/lint.mjs +0 -15
- package/rules/text/lint/docs/cspell-fix.md +0 -32
- package/rules/text/lint/docs/index.md +0 -15
- package/rules/text/lint/docs/lint.md +0 -36
- package/rules/text/lint/docs/run-dotenv-linter.md +0 -161
- package/rules/text/lint/docs/run-shellcheck.md +0 -216
- package/rules/text/lint/docs/run-v8r.md +0 -201
- package/rules/tool-surface/fix.mjs +0 -18
- package/rules/vue/fix.mjs +0 -18
- package/rules/worktree/fix.mjs +0 -18
- /package/rules/release/{fix.mjs → main.mjs} +0 -0
- /package/rules/text/{lint → js}/run-dotenv-linter.mjs +0 -0
- /package/rules/text/{lint → js}/run-shellcheck.mjs +0 -0
- /package/rules/text/{lint → js}/run-v8r.mjs +0 -0
|
@@ -3,158 +3,25 @@ type: JS Module
|
|
|
3
3
|
title: list-rule-ids.mjs
|
|
4
4
|
resource: npm/scripts/lib/list-rule-ids.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: d8b3ea73
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
7
9
|
---
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
## Огляд
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
Перебирає директорії у `rules/` та фільтрує їх, вибираючи лише ті, що містять єдиний канонічний entrypoint (`rules/<id>/main.mjs`), згідно з ADR 2026-06-21. Функція повертає список ідентифікаторів правил, які відповідають цьому канону. Операція є лише для читання файлової системи.
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
## Поведінка
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
1. Зчитує список усіх каталогів у директорії, що містить правила.
|
|
18
|
+
2. Фільтрує цей список, залишаючи лише каталоги, які не починаються з крапки.
|
|
19
|
+
3. Для кожного каталогу перевіряє, чи існує у ньому файл `main.mjs`.
|
|
20
|
+
4. Фільтрує список, залишаючи лише ті каталоги, які містять файл `main.mjs`.
|
|
21
|
+
5. Якщо надано фільтр, додатково фільтрує список, залишаючи лише той ID, що збігається з фільтром.
|
|
22
|
+
6. Сортує отримані ID в алфавітному порядку.
|
|
23
|
+
7. Повертає відсортований список ID правил.
|
|
16
24
|
|
|
17
|
-
##
|
|
25
|
+
## Гарантії поведінки
|
|
18
26
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
| Експорт | Тип | Призначення |
|
|
22
|
-
| ------------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------- |
|
|
23
|
-
| `listRuleIds` | `async function` | Повертає `Promise<string[]>` зі списком id правил, відфільтрованим за наявністю `fix.mjs` і опційним рівнянням до конкретного id. |
|
|
24
|
-
|
|
25
|
-
Експорту за замовчуванням немає.
|
|
26
|
-
|
|
27
|
-
## Функції
|
|
28
|
-
|
|
29
|
-
### `listRuleIds(bundledRulesDir, filter)`
|
|
30
|
-
|
|
31
|
-
#### Сигнатура
|
|
32
|
-
|
|
33
|
-
```js
|
|
34
|
-
export async function listRuleIds(bundledRulesDir, filter)
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
JSDoc-типи:
|
|
38
|
-
|
|
39
|
-
```
|
|
40
|
-
@param {string} bundledRulesDir — абсолютний шлях до `npm/rules/`
|
|
41
|
-
@param {string} [filter] — id одного правила (через `--rule abie`)
|
|
42
|
-
@returns {Promise<string[]>} — відсортовані алфавітно id
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
#### Параметри
|
|
46
|
-
|
|
47
|
-
- **`bundledRulesDir`** (`string`, обовʼязковий) — абсолютний шлях до кореневої теки правил, найчастіше `npm/rules/` (наприклад, `/path/to/repo/npm/rules`). Передбачається, що шлях існує і є директорією; модуль не валідує його окремо — будь-яка помилка з `fs.readdir` пробрасується далі промісом.
|
|
48
|
-
- **`filter`** (`string | undefined`, опційний) — точна назва правила, до якої потрібно звузити список. Якщо параметр не передано (`undefined`), повертаються всі знайдені id. Якщо передано, у результат потрапляють лише ті id, що _точно_ рівні `filter`. Часткові збіги, регулярні вирази або кейс-незалежність не підтримуються.
|
|
49
|
-
|
|
50
|
-
#### Повертає
|
|
51
|
-
|
|
52
|
-
`Promise<string[]>` — масив рядків-ідентифікаторів правил, відсортованих алфавітно за допомогою `Array.prototype.toSorted` із компаратором `a.localeCompare(b)`. Сортування _стабільне_ для оригінального методу і коректне для Unicode-локалей.
|
|
53
|
-
|
|
54
|
-
Можливі сценарії результату:
|
|
55
|
-
|
|
56
|
-
- Порожній масив `[]` — якщо в `bundledRulesDir` немає жодної директорії з `fix.mjs`, або якщо `filter` не збігається з жодним наявним id.
|
|
57
|
-
- Масив з одного елемента — типово при заданому `filter`.
|
|
58
|
-
- Повний відсортований список усіх правил — у випадку відсутності `filter`.
|
|
59
|
-
|
|
60
|
-
#### Алгоритм / послідовність кроків
|
|
61
|
-
|
|
62
|
-
1. Викликається `readdir(bundledRulesDir, { withFileTypes: true })` — отримуємо масив `Dirent`-обʼєктів (а не просто рядків імен), що дає змогу одразу перевіряти тип запису без додаткових `stat`-викликів.
|
|
63
|
-
2. Залишаються лише записи, для яких одночасно:
|
|
64
|
-
- `e.isDirectory()` — це саме директорія;
|
|
65
|
-
- `!e.name.startsWith('.')` — імʼя не починається з крапки (відсікаються приховані теки на кшталт `.git`, `.cache`, тощо).
|
|
66
|
-
3. Записи перетворюються на голі імена (`.map(e => e.name)`).
|
|
67
|
-
4. Фільтрація на наявність `fix.mjs` — для кожного `id` синхронно перевіряється `existsSync(join(bundledRulesDir, id, 'fix.mjs'))`. Директорії без цього файлу відсіюються як «not-a-rule або заглушка».
|
|
68
|
-
5. Фільтрація за `filter` — якщо параметр визначений, залишаються лише id, рівні `filter`; інакше пропускаються всі.
|
|
69
|
-
6. Сортування `toSorted((a, b) => a.localeCompare(b))` — повертає новий масив без мутації проміжного.
|
|
70
|
-
|
|
71
|
-
#### Side effects
|
|
72
|
-
|
|
73
|
-
- **Дискові читання**: `readdir` (асинхронний обхід директорії) та `existsSync` (синхронні перевірки наявності файлу для кожного кандидата). Винятки I/O пробрасуються відхиленим промісом.
|
|
74
|
-
- **Жодних записів, мережевих викликів, мутацій глобального стану, логування** — функція є read-only і чистою щодо побічних ефектів окрім згаданих читань ФС.
|
|
75
|
-
- Використання `existsSync` у циклі — це _синхронні_ виклики всередині асинхронної функції; вони виконуються послідовно, але без `await`. Для типового розміру каталогу `npm/rules/` (десятки правил) це непомітна вартість.
|
|
76
|
-
|
|
77
|
-
#### Гранітні випадки
|
|
78
|
-
|
|
79
|
-
- Якщо `bundledRulesDir` не існує — `readdir` відхиляє проміс з `ENOENT`.
|
|
80
|
-
- Якщо в директорії є символічні посилання — поведінка залежить від того, що повертає `Dirent.isDirectory()`; ця функція покладається на штатну семантику Node.js.
|
|
81
|
-
- Якщо `filter` переданий як порожній рядок `''` — він _не_ є `undefined`, тому фільтр буде застосовано (`id === ''`), і результат майже напевно буде порожнім.
|
|
82
|
-
- Файл `fix.mjs` як директорія: малоймовірний випадок, але `existsSync` поверне `true` для будь-якого існуючого запису з цим імʼям; модуль не розрізняє файл і теку.
|
|
83
|
-
|
|
84
|
-
## Залежності
|
|
85
|
-
|
|
86
|
-
### Вбудовані модулі Node.js
|
|
87
|
-
|
|
88
|
-
| Модуль | Імпортований символ | Використання |
|
|
89
|
-
| ------------------ | ------------------- | ------------------------------------------------------------ |
|
|
90
|
-
| `node:fs` | `existsSync` | Синхронна перевірка наявності `fix.mjs` у кожному кандидаті. |
|
|
91
|
-
| `node:fs/promises` | `readdir` | Асинхронний обхід `bundledRulesDir` з `withFileTypes: true`. |
|
|
92
|
-
| `node:path` | `join` | Безпечне зʼєднання сегментів шляху до `fix.mjs`. |
|
|
93
|
-
|
|
94
|
-
### Зовнішні npm-залежності
|
|
95
|
-
|
|
96
|
-
Немає.
|
|
97
|
-
|
|
98
|
-
### Внутрішні залежності
|
|
99
|
-
|
|
100
|
-
Файл не імпортує жодних інших модулів проєкту. Сам по собі він використовується як бібліотечна функція з інших скриптів у `npm/scripts/` (CLI-обгортки, які приймають флаг `--rule`).
|
|
101
|
-
|
|
102
|
-
## Потік виконання / Використання
|
|
103
|
-
|
|
104
|
-
### Контекст у проєкті
|
|
105
|
-
|
|
106
|
-
`listRuleIds` — це фундамент будь-якого скрипту, який «робить щось для кожного правила»: лінт, авто-фікс, генерація звіту, перевірка покриття, нормалізація ADR тощо. Замість того щоб кожному скрипту самостійно перелічувати теки в `npm/rules/`, всі вони викликають цю функцію та отримують однаковий, відсортований, відфільтрований список — це гарантує детермінованість порядку обробки правил.
|
|
107
|
-
|
|
108
|
-
Архітектурно файл підкріплює інваріант «`fix.mjs` обовʼязковий»: будь-яка тека без нього автоматично невидима для всіх споживачів. Це дає змогу тримати у `rules/` допоміжні підтеки (наприклад, шаблони, шаред-файли) без ризику, що вони будуть оброблені як правило.
|
|
109
|
-
|
|
110
|
-
### Приклад використання
|
|
111
|
-
|
|
112
|
-
```js
|
|
113
|
-
import { listRuleIds } from './lib/list-rule-ids.mjs'
|
|
114
|
-
import { resolve } from 'node:path'
|
|
115
|
-
|
|
116
|
-
const bundledRulesDir = resolve(import.meta.dirname, '../../rules')
|
|
117
|
-
|
|
118
|
-
// 1. Всі правила.
|
|
119
|
-
const all = await listRuleIds(bundledRulesDir)
|
|
120
|
-
// → ['abie', 'changelog', 'feedback', ...]
|
|
121
|
-
|
|
122
|
-
// 2. Тільки одне правило (з CLI-флагу --rule abie).
|
|
123
|
-
const ruleFlag = process.argv.includes('--rule') ? process.argv[process.argv.indexOf('--rule') + 1] : undefined
|
|
124
|
-
|
|
125
|
-
const subset = await listRuleIds(bundledRulesDir, ruleFlag)
|
|
126
|
-
// → ['abie'] якщо ruleFlag === 'abie' і таке правило існує
|
|
127
|
-
// → [] якщо ruleFlag не відповідає жодному правилу
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### Інтеграція з CLI
|
|
131
|
-
|
|
132
|
-
Типовий патерн виклику в скриптах проєкту:
|
|
133
|
-
|
|
134
|
-
1. Скрипт парсить `process.argv` (часто через `mri`/`minimist` або вручну), отримує опційний `--rule <id>`.
|
|
135
|
-
2. Викликає `listRuleIds(rulesDir, ruleFromArgv)` і чекає на результат.
|
|
136
|
-
3. Ітерується по отриманому масиву і виконує цільову дію (fix/check/коверідж) для кожного id.
|
|
137
|
-
|
|
138
|
-
### Послідовність виконання при виклику
|
|
139
|
-
|
|
140
|
-
```
|
|
141
|
-
listRuleIds(dir, filter)
|
|
142
|
-
│
|
|
143
|
-
├─ readdir(dir, withFileTypes:true) ── async ──▶ [Dirent...]
|
|
144
|
-
│
|
|
145
|
-
├─ .filter(isDirectory && !startsWith('.'))
|
|
146
|
-
├─ .map(e => e.name)
|
|
147
|
-
├─ .filter(existsSync(<id>/fix.mjs)) ◀── sync I/O loop
|
|
148
|
-
├─ .filter(filter === undefined || id === filter)
|
|
149
|
-
├─ .toSorted(localeCompare)
|
|
150
|
-
│
|
|
151
|
-
▼
|
|
152
|
-
Promise<string[]> (відсортовані id)
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
### Очікувані помилки
|
|
156
|
-
|
|
157
|
-
- `ENOENT` / `ENOTDIR` від `readdir` — якщо переданий `bundledRulesDir` неіснуючий або не є директорією. Викликач має або переконатися в коректності шляху перед викликом, або обгорнути виклик у `try/catch`.
|
|
158
|
-
- `EACCES` — якщо немає прав на читання теки.
|
|
159
|
-
|
|
160
|
-
Усі інші помилки (відсутність окремого `fix.mjs`, відсутність відповідності `filter`) семантично не є помилками — вони лише звужують повернений масив.
|
|
27
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
@@ -3,30 +3,26 @@ type: JS Module
|
|
|
3
3
|
title: read-n-cursor-config-lite.mjs
|
|
4
4
|
resource: npm/scripts/lib/read-n-cursor-config-lite.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: a38ac2f4
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
7
9
|
---
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
## Огляд
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
Модуль надає легкий, лише для читання, інтерфейс для парсингу конфігурації `.n-cursor.json`. Він призначений для ізольованих, окремих викликів `check.mjs`. Модуль визначає стан кожного правила, ґрунтуючись на вмісті `.n-cursor.json`. Якщо файл відсутній, правило вважається активним (поведінка "open by default"). Якщо файл присутній, стан правила залежить від списків `rules` та `disableRules` у конфігурації. Модуль повертає об'єкт, що містить списки активних та вимкнених правил.
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
Зчитує конфігурацію з файлу `.n-cursor.json`. Повертає об'єкт з інформацією про правила та вимкнені правила. Якщо файл відсутній, повертає конфігурацію з порожнім масивом правил.
|
|
15
|
+
## Поведінка
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
Поведінка
|
|
18
|
+
readNCursorConfigLite читає конфігураційний файл .n-cursor.json у вказаному каталозі, повертаючи стан його існування та списки дозволених і вимкнених правил.
|
|
19
|
+
isRuleEnabled визначає, чи має бути виконане правило, виходячи зі стану конфігураційного файлу та ID правила.
|
|
18
20
|
|
|
19
21
|
## Публічний API
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
readNCursorConfigLite — зчитує базові налаштування курсора з конфігурації.
|
|
24
|
+
isRuleEnabled — визначає, чи діє певне правило на основі конфігурації. Якщо конфігурація відсутня, правило вважається активним за замовчуванням. Якщо правило явно вимкнено, воно не діє. Якщо правило визначено у списку правил, воно діє. В іншому випадку, правило не діє.
|
|
23
25
|
|
|
24
26
|
## Гарантії поведінки
|
|
25
27
|
|
|
26
|
-
-
|
|
27
|
-
- Якщо файл `.n-cursor.json` існує, але поле `rules` порожнє, вважається, що всі правила включені.
|
|
28
|
-
- Якщо файл `.n-cursor.json` існує і має поле `rules`, але поле `rules` порожнє, вважається, що всі правила включені.
|
|
29
|
-
- Якщо правило вказане в полі `disable-rules`, воно вимкнено.
|
|
30
|
-
- Повертає `false` якщо файл `.n-cursor.json` відсутній або недійсний.
|
|
31
|
-
- Повертає `null` якщо не вдалося прочитати файл `.n-cursor.json`.
|
|
32
|
-
- Не використовує кешування.
|
|
28
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
@@ -3,27 +3,27 @@ type: JS Module
|
|
|
3
3
|
title: run-lint-step.mjs
|
|
4
4
|
resource: npm/scripts/lib/run-lint-step.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: f37a61b9
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
7
9
|
---
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
Спільний хелпер для CLI-обгорток `lint-<rule>`. Він запускає один крок ланцюжка з логуванням команди та прокидає stdout/stderr на користувацькі stream-и (`stdio: 'inherit'`). Це дозволяє rule-адаптерам `n-cursor lint <rule>` уникнути дублювання логіки обгортки у файлах `rules/<id>/js/lint.mjs`. Функція не виконує операцій з файловою системою чи базою даних.
|
|
10
12
|
|
|
11
13
|
## Поведінка
|
|
12
14
|
|
|
13
|
-
1.
|
|
14
|
-
2.
|
|
15
|
-
3.
|
|
16
|
-
4.
|
|
17
|
-
5.
|
|
18
|
-
6.
|
|
15
|
+
1. Викликається `runLintStep` для запуску одного кроку ланцюжка лінтування.
|
|
16
|
+
2. Виводиться у консоль повідомлення про запуск команди з вказаним заголовком.
|
|
17
|
+
3. Визначається повний шлях до команди.
|
|
18
|
+
4. Якщо повний шлях до команди не знайдено в PATH, виводиться повідомлення про помилку, і функція повертає код 127.
|
|
19
|
+
5. Запускається дочірній процес з успадкованими потоками виводу та помилки.
|
|
20
|
+
6. Якщо виникає помилка при запуску процесу, виводиться повідомлення про помилку, і функція повертає код 1.
|
|
21
|
+
7. Якщо процес успішно запущено, функція повертає код виходу дочірнього процесу.
|
|
19
22
|
|
|
20
23
|
## Публічний API
|
|
21
24
|
|
|
22
|
-
runLintStep — запускає
|
|
25
|
+
runLintStep — запускає один етап перевірки коду, знаходячи відповідну команду в системному шляху та виконуючи її з передаченим вхідно-вихідним потоком.
|
|
23
26
|
|
|
24
27
|
## Гарантії поведінки
|
|
25
28
|
|
|
26
|
-
-
|
|
27
|
-
- Перенаправляє stdout та stderr на користувацькі stream-и (stdio: 'inherit').
|
|
28
|
-
- Не використовує кешування.
|
|
29
|
-
- Не має внутрішніх приватних імен.
|
|
29
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: JS Module
|
|
3
|
+
title: run-lint.mjs
|
|
4
|
+
resource: npm/scripts/lib/run-lint.mjs
|
|
5
|
+
docgen:
|
|
6
|
+
crc: dd80d058
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Модуль керує вибором та виконанням правил лінтування. Він визначає набір правил для лінтування, спираючись на конфігурації `meta.json` та `.n-cursor.json`. Публічна функція `selectLintRules` вибирає та сортує ці правила на основі їхньої лінт-поверхні. Публічна функція `runLint` ініціює виконання визначеного набору правил, перевіряючи змінені файли або весь репозиторій.
|
|
14
|
+
|
|
15
|
+
## Поведінка
|
|
16
|
+
|
|
17
|
+
selectLintRules вибирає і алфавітно сортує ідентифікатори правил для лінтування на основі їхньої лінт-поверхні та наявності в активних конфігураціях.
|
|
18
|
+
runLint запускає лінт-оркестрацію, виконуючи перевірку змінених файлів або повний прогін репозиторію, залежно від наданих опцій.
|
|
19
|
+
|
|
20
|
+
## Публічний API
|
|
21
|
+
|
|
22
|
+
selectLintRules — обирає ідентифікатори правил для контексту, розташовуючи їх в алфавітному порядку.
|
|
23
|
+
runLint — ініціює процес лінтування.
|
|
24
|
+
full — сканує весь репозиторій, порівнюючи його з початковим станом.
|
|
25
|
+
readOnly — лише виявляє проблеми без внесення змін.
|
|
26
|
+
rules — виконує повне сканування репозиторію, застосовуючи лише вказаний набір правил.
|
|
27
|
+
|
|
28
|
+
## Гарантії поведінки
|
|
29
|
+
|
|
30
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
@@ -3,22 +3,26 @@ type: JS Module
|
|
|
3
3
|
title: run-rule-cli.mjs
|
|
4
4
|
resource: npm/scripts/lib/run-rule-cli.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
7
|
-
|
|
6
|
+
crc: 1251c4d0
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 95
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Standalone CLI runner для одного правила. Викликається з `rules/<id>/check.mjs` у блоці `if (import.meta.main)`, що робить його повним еквівалентом `bun rules/<id>/check.mjs` або `npx @nitra/cursor fix <id>`. Цей запуск є свідомим (debug / override) і виконується без whitelist-гейту. Ініціалізує кеш для проходження файлової системи та виконує стандартну перевірку, друкуючи summary результату та повертаючи aggregated exit-code.
|
|
11
14
|
|
|
12
15
|
## Поведінка
|
|
13
16
|
|
|
14
|
-
1.
|
|
15
|
-
2.
|
|
16
|
-
3.
|
|
17
|
-
4.
|
|
18
|
-
5.
|
|
17
|
+
1. Викликається для виконання одного правила у режимі командного рядка.
|
|
18
|
+
2. Визначається ідентифікатор правила на основі шляху до директорії правила.
|
|
19
|
+
3. Виводиться повідомлення про початок перевірки для цього правила.
|
|
20
|
+
4. Ініціалізується кеш для проходження файлової системи.
|
|
21
|
+
5. Виконується стандартна перевірка для правила, використовуючи ініціалізований кеш.
|
|
22
|
+
6. Виводиться підсумок результату перевірки.
|
|
23
|
+
7. Повертається код виходу, що відображає успішність або наявність порушень.
|
|
19
24
|
|
|
20
25
|
## Гарантії поведінки
|
|
21
26
|
|
|
22
|
-
- Read-only:
|
|
27
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
23
28
|
- Кешує результати в межах одного прогону.
|
|
24
|
-
- Не звертається до мережі.
|
|
@@ -3,24 +3,43 @@ type: JS Module
|
|
|
3
3
|
title: run-standard-lint.mjs
|
|
4
4
|
resource: npm/scripts/lib/run-standard-lint.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 2b275963
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 90
|
|
7
9
|
---
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Спільна точка входу для канонічних `lint-<rule>` підкоманд `@nitra/cursor`. Файл серіалізує та дедуплікує запуски лінту через `withLock`. `ruleId` визначається зі шляху незалежно від глибини виклику (наприклад, `rules/<id>`). Це дозволяє уніфікувати крос-cutting концерни. Інтеграція з боку правила виглядає так:
|
|
14
|
+
|
|
15
|
+
- import { runStandardLint } from '../../scripts/lib/run-standard-lint.mjs'
|
|
16
|
+
-
|
|
17
|
+
- async function runLintFooSteps { ... }
|
|
18
|
+
-
|
|
19
|
+
- export function lint { return runStandardLint }
|
|
10
20
|
|
|
11
21
|
## Поведінка
|
|
12
22
|
|
|
13
|
-
|
|
14
|
-
runStandardLint: Серіалізує та дедуплікує запуск
|
|
23
|
+
lint: Викликає стандартизований лінт, використовуючи шлях каталогу правила для визначення його ідентифікатора.
|
|
24
|
+
runStandardLint: Серіалізує та дедуплікує запуск лінту для заданого правила, використовуючи ідентифікатор, виведений зі шляху каталогу правила.
|
|
15
25
|
|
|
16
26
|
## Публічний API
|
|
17
27
|
|
|
18
|
-
|
|
19
|
-
|
|
28
|
+
lint — є спільною точкою входу для канонічних `lint-<rule>` підкоманд `@nitra/cursor`. Він ініціює серіалізацію та дедуплікацію запусків лінтингу для вказаних файлів, забезпечуючи централізоване управління крос-cutting концернами.
|
|
29
|
+
|
|
30
|
+
runStandardLint — виконує стандартний лінтинг у директорії, приймаючи контекст директорії та функцію, що описує кроки лінтингу.
|
|
31
|
+
|
|
32
|
+
Приклад інтеграції:
|
|
33
|
+
|
|
34
|
+
```js
|
|
35
|
+
import { runStandardLint } from '../../scripts/lib/run-standard-lint.mjs'
|
|
36
|
+
|
|
37
|
+
async function runLintFooSteps { ... }
|
|
38
|
+
|
|
39
|
+
export function lint { return runStandardLint }
|
|
40
|
+
```
|
|
20
41
|
|
|
21
42
|
## Гарантії поведінки
|
|
22
43
|
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
- Використовує попередньо збережені результати для уникнення повторного виконання.
|
|
26
|
-
- Повертає результат виконання.
|
|
44
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
45
|
+
- Кешує результати в межах одного прогону.
|
|
@@ -3,23 +3,24 @@ type: JS Module
|
|
|
3
3
|
title: run-standard-rule.mjs
|
|
4
4
|
resource: npm/scripts/lib/run-standard-rule.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
7
|
-
|
|
6
|
+
crc: 0c3b2e60
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 70
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Файл надає публічний API для оркестрації правил, який викликається з `rules/<id>/check.mjs`. Він інкапсулює логіку пошуку єдиного правила (`discoverOneRule`) та його виконання (`runRule`). Виконання обертається у `withLock` для дедуплікації паралельних запусків того самого правила на основі стану git-дерева. Локальна логіка в правилах заборонена; розширення поведінки відбувається через `ctx`-опції. Це централізована точка для запуску стандартних правил з кешуванням у межах одного прогону.
|
|
11
14
|
|
|
12
15
|
## Поведінка
|
|
13
16
|
|
|
14
|
-
1.
|
|
15
|
-
2.
|
|
16
|
-
3.
|
|
17
|
-
4.
|
|
18
|
-
5.
|
|
19
|
-
6. Запуск виконання правила
|
|
17
|
+
1. Викликати `runStandardRule` для певного правила.
|
|
18
|
+
2. Забезпечити унікальну блокування для виконання цього правила, використовуючи його ID.
|
|
19
|
+
3. Виявити єдине правило, пов'язане з наданим шляхом.
|
|
20
|
+
4. Отримати або створити кеш для прогону.
|
|
21
|
+
5. Виконати правило, використовуючи виявлене правило, шлях до пакету та кеш прогону.
|
|
20
22
|
|
|
21
23
|
## Гарантії поведінки
|
|
22
24
|
|
|
23
|
-
- Read-only:
|
|
25
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
24
26
|
- Кешує результати в межах одного прогону.
|
|
25
|
-
- Не звертається до мережі.
|
|
@@ -3,26 +3,25 @@ type: JS Module
|
|
|
3
3
|
title: timing-summary.mjs
|
|
4
4
|
resource: npm/scripts/lib/timing-summary.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: ee74c1cd
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
7
9
|
---
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Формує таблицю-резюме часу виконання для оркестратора `fix` або `lint`. Таблиця використовується після прогону всіх правил перевірки (`runFixCommand` у `bin/n-cursor.js`) або після прогону скриптів лінтингу (`runLintCli` у `scripts/lib/run-lint-cli.mjs`), які визначаються у `package.json`. Звіт містить деталі часу виконання для кожного елемента у форматі `<ціла>.<десята>s`, а маркер `❌` на рядку вказує на невдачу (`ok === false`).
|
|
10
14
|
|
|
11
15
|
## Поведінка
|
|
12
16
|
|
|
13
|
-
formatDurationMs
|
|
14
|
-
formatTimingSummary
|
|
17
|
+
formatDurationMs перетворює тривалість у мілісекундах у рядок формату `<ціла>.<десята>s`.
|
|
18
|
+
formatTimingSummary генерує багаторядковий текст таблиці-резюме часу виконання на основі наданого заголовка та списку записів про час.
|
|
15
19
|
|
|
16
20
|
## Публічний API
|
|
17
21
|
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
⏱ formatDurationMs: Перетворює мілісекунди на формат `<sec>.<десята>s`, використовуючи округлення вниз.
|
|
23
|
+
⏱ formatTimingSummary: Генерує багаторядковий вивід у форматі таблиці-резюме для стандартного виводу.
|
|
20
24
|
|
|
21
25
|
## Гарантії поведінки
|
|
22
26
|
|
|
23
|
-
|
|
24
|
-
❌ Якщо час виконання перевищує 5 секунд, повертає `null`.
|
|
25
|
-
Повертає рядок, що містить таблицю з часом виконання.
|
|
26
|
-
Час виконання виражається у форматі `<ціла>.<десята>s`.
|
|
27
|
-
Повертає рядок з символом `\n` в кінці.
|
|
28
|
-
Не використовує кешування.
|
|
27
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
@@ -6,11 +6,8 @@ docgen:
|
|
|
6
6
|
crc: 1f7d5e0d
|
|
7
7
|
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
8
|
score: 100
|
|
9
|
-
judgeModel: openai-codex/gpt-5.4-mini
|
|
10
9
|
---
|
|
11
10
|
|
|
12
|
-
## Огляд
|
|
13
|
-
|
|
14
11
|
Цей файл вшиває worktree-інструкцію у синкнутий `SKILL.md` (рішення D2 зі spec). Коли `meta.json.worktree === true`, скіл вставляє/замінює ідемпотентний ре-синкнутий блок, що містить маркери WORKTREE_START та WORKTREE_END, забезпечуючи виконання скілу в окремому git-worktree та запобігаючи паралелізації. Функція `injectWorktreeNotice` керує наявністю або відсутністю цього блоку в `SKILL.md` на основі конфігурації.
|
|
15
12
|
|
|
16
13
|
## Поведінка
|
|
@@ -231,7 +231,10 @@ function buildSynthesisPrompt(partials) {
|
|
|
231
231
|
*/
|
|
232
232
|
function safeCall(call, prompt, model) {
|
|
233
233
|
try {
|
|
234
|
-
const text = call([{ role: 'user', content: prompt }], model, {
|
|
234
|
+
const text = call([{ role: 'user', content: prompt }], model, {
|
|
235
|
+
timeoutMs: ANALYZE_TIMEOUT_MS,
|
|
236
|
+
caller: 'fix-analyze'
|
|
237
|
+
})
|
|
235
238
|
return text || null
|
|
236
239
|
} catch {
|
|
237
240
|
return null
|
|
@@ -6,13 +6,14 @@ resource: npm/scripts/lib/fix/
|
|
|
6
6
|
|
|
7
7
|
# npm/scripts/lib/fix
|
|
8
8
|
|
|
9
|
-
| Файл
|
|
10
|
-
|
|
11
|
-
| [analyze-escalation.mjs](analyze-escalation.md)
|
|
12
|
-
| [escalation-log.mjs](escalation-log.md)
|
|
13
|
-
| [llm-fix-apply.mjs](llm-fix-apply.md)
|
|
14
|
-
| [llm-lint-fix.mjs](llm-lint-fix.md)
|
|
15
|
-
| [llm-worker.mjs](llm-worker.md)
|
|
16
|
-
| [orchestrator.mjs](orchestrator.md)
|
|
17
|
-
| [run-
|
|
18
|
-
| [
|
|
9
|
+
| Файл | Тип |
|
|
10
|
+
| ----------------------------------------------------- | --------- |
|
|
11
|
+
| [analyze-escalation.mjs](analyze-escalation.md) | JS Module |
|
|
12
|
+
| [escalation-log.mjs](escalation-log.md) | JS Module |
|
|
13
|
+
| [llm-fix-apply.mjs](llm-fix-apply.md) | JS Module |
|
|
14
|
+
| [llm-lint-fix.mjs](llm-lint-fix.md) | JS Module |
|
|
15
|
+
| [llm-worker.mjs](llm-worker.md) | JS Module |
|
|
16
|
+
| [orchestrator.mjs](orchestrator.md) | JS Module |
|
|
17
|
+
| [run-conformance-check.mjs](run-conformance-check.md) | JS Module |
|
|
18
|
+
| [run-fix-check.mjs](run-fix-check.md) | JS Module |
|
|
19
|
+
| [t0.mjs](t0.md) | JS Module |
|
|
@@ -3,34 +3,39 @@ type: JS Module
|
|
|
3
3
|
title: orchestrator.mjs
|
|
4
4
|
resource: npm/scripts/lib/fix/orchestrator.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: fbc91330
|
|
7
7
|
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Модуль керує процесом вирішення порушень за допомогою багаторівневої системи ескалації. Він збирає послідовність рівнів моделей, починаючи з локальних і закінчуючи хмарними. Модуль парсить параметри запуску за допомогою `parseOrchestratorArgs` та виконує повний цикл фіксації, застосовуючи детермінований фікс. Для невирішених проблем застосовується ескалація правил через `escalateRule`, а фінальний запуск оркестратора здійснюється через `runOrchestratorCli`, який використовує структуру, побудовану за допомогою `buildLadder`.
|
|
12
14
|
|
|
13
15
|
## Поведінка
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- рунг `local-min` — перший прохід без feedback;
|
|
20
|
-
- рунг `local-min-retry` — той самий локальний тир, але з feedback попереднього рунга (попередні зміни + залишковий violation);
|
|
21
|
-
- рунги `cloud-min` / `cloud-avg` — хмарні моделі (через pi), теж із feedback.
|
|
22
|
-
Кожен рунг має per-tier `timeoutMs`: локальні **fail-fast** (`N_LOCAL_FIX_TIMEOUT_MS`, дефолт 45s — не палити стіну 120s на повільному локальному inference), хмарні — повний (`N_CLOUD_FIX_TIMEOUT_MS`, дефолт 120s).
|
|
23
|
-
5. Достроковий вихід драбини: systemic-помилка локального тиру пропускає рунги тієї ж моделі; відсутній API-ключ на хмарному обриває драбину; хмарний транспортний збій (pi таймаут/spawn) обриває драбину, щоб не палити avg-бюджет на ту саму стіну; вичерпаний avg-кеп пропускає avg-рунг (із записом у лог).
|
|
24
|
-
6. Після обробки всіх правил — фінальна перевірка. Усі чисті → успіх; інакше — ознака нерозв'язаних.
|
|
17
|
+
buildLadder будує послідовність тирів ескалації для вирішення порушень, від локальних мінімальних моделей до хмарних середніх моделей.
|
|
18
|
+
escalateRule проводить один прохід по послідовності тирів, намагаючись вирішити порушення, і повертає статус вирішення та використаний бюджет хмарних викликів.
|
|
19
|
+
parseOrchestratorArgs парсить аргументи командного рядка для визначення максимального бюджету хмарних викликів та фільтра правил.
|
|
20
|
+
runOrchestratorCli виконує повний цикл фіксації: перевіряє правила, застосовує детермінований фікс (T0-auto), а потім використовує LLM-драбину ескалації для невирішених порушень.
|
|
25
21
|
|
|
26
22
|
## Публічний API
|
|
27
23
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
24
|
+
buildLadder — Створює послідовність моделей для ескалації, виходячи з доступних рівнів.
|
|
25
|
+
|
|
26
|
+
local-min — Запускає первинний прохід з найменшою локальною моделлю.
|
|
27
|
+
local-min-retry — Повторює локальний прохід, використовуючи відгук від попереднього кроку.
|
|
28
|
+
cloud-min — Запускає прохід з найменшою хмарною моделлю, використовуючи відгук.
|
|
29
|
+
cloud-avg — Запускає прохід з середньою хмарною моделлю, використовуючи відгук та обмеження середнього.
|
|
30
|
+
|
|
31
|
+
escalateRule — Виконує одне правило по драбині ескалації до першого успішного перевірки.
|
|
32
|
+
Кожен рунг — Запускає роботу моделі з урахуванням попереднього відгуку, перевіряє правило, фіксує результат у лозі.
|
|
33
|
+
Достроковий вихід — Зупиняє процес при певних умовах (відсутність ключа, пропуск моделі на системному рівні) або при досягненні ліміту середнього.
|
|
34
|
+
|
|
35
|
+
parseOrchestratorArgs — Витягує максимальне значення середнього та збирає список правил для фільтрації з командного рядка.
|
|
36
|
+
|
|
37
|
+
runOrchestratorCli — Запускає основний процес оркестрації, обробляючи аргументи та виконуючи ескалацію правил.
|
|
32
38
|
|
|
33
39
|
## Гарантії поведінки
|
|
34
40
|
|
|
35
|
-
-
|
|
36
|
-
- Звертається до мережі лише на хмарних рунгах драбини (через pi).
|
|
41
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|