@nitra/cursor 1.9.21 → 1.9.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/bin/n-cursor.js +55 -49
  3. package/package.json +10 -5
  4. package/rules/abie/auto.md +1 -0
  5. package/{scripts/check-abie.mjs → rules/abie/js/check.mjs} +5 -5
  6. package/{scripts/check-adr.mjs → rules/adr/js/check.mjs} +1 -1
  7. package/rules/bun/auto.md +1 -0
  8. package/{scripts/check-bun.mjs → rules/bun/js/check.mjs} +1 -1
  9. package/rules/capacitor/auto.md +1 -0
  10. package/{scripts/check-capacitor.mjs → rules/capacitor/js/check.mjs} +1 -1
  11. package/rules/changelog/auto.md +1 -0
  12. package/{scripts/check-changelog.mjs → rules/changelog/js/check.mjs} +2 -2
  13. package/rules/docker/auto.md +1 -0
  14. package/{scripts/check-docker.mjs → rules/docker/js/check.mjs} +5 -5
  15. package/{scripts/run-docker.mjs → rules/docker/js/run.mjs} +5 -5
  16. package/rules/ga/auto.md +1 -0
  17. package/{scripts/check-ga.mjs → rules/ga/js/check.mjs} +4 -4
  18. package/{scripts/lint-ga.mjs → rules/ga/js/lint.mjs} +2 -2
  19. package/rules/graphql/auto.md +1 -0
  20. package/{scripts/check-graphql.mjs → rules/graphql/js/check.mjs} +5 -5
  21. package/rules/hasura/auto.md +1 -0
  22. package/{scripts/check-hasura.mjs → rules/hasura/js/check.mjs} +4 -4
  23. package/rules/image-avif/auto.md +1 -0
  24. package/{scripts/check-image-avif.mjs → rules/image-avif/js/check.mjs} +5 -5
  25. package/rules/image-compress/auto.md +1 -0
  26. package/{scripts/check-image-compress.mjs → rules/image-compress/js/check.mjs} +1 -1
  27. package/rules/js-bun-db/auto.md +1 -0
  28. package/{scripts/check-js-bun-db.mjs → rules/js-bun-db/js/check.mjs} +5 -5
  29. package/rules/js-bun-redis/auto.md +1 -0
  30. package/{scripts/check-js-bun-redis.mjs → rules/js-bun-redis/js/check.mjs} +4 -4
  31. package/rules/js-lint/auto.md +1 -0
  32. package/{scripts/check-js-lint.mjs → rules/js-lint/js/check.mjs} +1 -1
  33. package/rules/js-mssql/auto.md +1 -0
  34. package/{scripts/check-js-mssql.mjs → rules/js-mssql/js/check.mjs} +5 -5
  35. package/rules/js-run/auto.md +1 -0
  36. package/{scripts/check-js-run.mjs → rules/js-run/js/check.mjs} +11 -11
  37. package/rules/k8s/auto.md +1 -0
  38. package/{scripts/check-k8s.mjs → rules/k8s/js/check.mjs} +4 -4
  39. package/{scripts/run-k8s.mjs → rules/k8s/js/run.mjs} +4 -4
  40. package/rules/nginx-default-tpl/auto.md +1 -0
  41. package/{scripts/check-nginx-default-tpl.mjs → rules/nginx-default-tpl/js/check.mjs} +7 -7
  42. package/rules/npm-module/auto.md +1 -0
  43. package/{scripts/check-npm-module.mjs → rules/npm-module/js/check.mjs} +4 -4
  44. package/rules/php/auto.md +1 -0
  45. package/{scripts/check-php.mjs → rules/php/js/check.mjs} +1 -1
  46. package/{scripts/run-php.mjs → rules/php/js/run.mjs} +3 -3
  47. package/rules/rego/auto.md +1 -0
  48. package/{scripts/check-rego.mjs → rules/rego/js/check.mjs} +4 -4
  49. package/{scripts/lint-rego.mjs → rules/rego/js/lint.mjs} +1 -1
  50. package/rules/style-lint/auto.md +1 -0
  51. package/{scripts/check-style-lint.mjs → rules/style-lint/js/check.mjs} +1 -1
  52. package/rules/tauri/auto.md +1 -0
  53. package/{scripts/check-tauri.mjs → rules/tauri/js/check.mjs} +2 -2
  54. package/rules/text/auto.md +1 -0
  55. package/{scripts/check-text.mjs → rules/text/js/check.mjs} +2 -2
  56. package/{scripts/run-shellcheck-text.mjs → rules/text/js/run-shellcheck.mjs} +2 -2
  57. package/{scripts → rules/text/js}/run-v8r.mjs +2 -2
  58. package/{mdc → rules/text}/text.mdc +4 -0
  59. package/rules/vue/auto.md +1 -0
  60. package/{scripts/check-vue.mjs → rules/vue/js/check.mjs} +5 -5
  61. package/scripts/auto-rules.mjs +5 -5
  62. package/scripts/auto-skills.mjs +6 -6
  63. package/scripts/lint-conftest.mjs +13 -13
  64. package/scripts/utils/run-conftest-batch.mjs +9 -4
  65. package/skills/abie-clean/auto.md +1 -0
  66. package/skills/abie-kustomize/auto.md +1 -0
  67. package/skills/fix/auto.md +1 -0
  68. package/skills/lint/auto.md +1 -0
  69. package/skills/llm-patch/auto.md +1 -0
  70. package/skills/publish-telegram/auto.md +1 -0
  71. package/skills/taze/auto.md +1 -0
  72. package/bin/auto-rules.md +0 -59
  73. package/bin/auto-skills.md +0 -25
  74. /package/{mdc → rules/abie}/abie.mdc +0 -0
  75. /package/{policy/abie → rules/abie/policy}/base_deployment_preem/base_deployment_preem.rego +0 -0
  76. /package/{policy/abie → rules/abie/policy}/base_deployment_preem/base_deployment_preem_test.rego +0 -0
  77. /package/{policy/abie → rules/abie/policy}/clean_merged_ignore_branches/clean_merged_ignore_branches.rego +0 -0
  78. /package/{policy/abie → rules/abie/policy}/clean_merged_ignore_branches/clean_merged_ignore_branches_test.rego +0 -0
  79. /package/{policy/abie → rules/abie/policy}/health_check_policy/health_check_policy.rego +0 -0
  80. /package/{policy/abie → rules/abie/policy}/health_check_policy/health_check_policy_test.rego +0 -0
  81. /package/{policy/abie → rules/abie/policy}/http_route_base/http_route_base.rego +0 -0
  82. /package/{policy/abie → rules/abie/policy}/http_route_base/http_route_base_test.rego +0 -0
  83. /package/{mdc → rules/adr}/adr.mdc +0 -0
  84. /package/{policy/adr → rules/adr/policy}/settings_json/settings_json.rego +0 -0
  85. /package/{policy/adr → rules/adr/policy}/settings_local_json/settings_local_json.rego +0 -0
  86. /package/{mdc → rules/bun}/bun.mdc +0 -0
  87. /package/{policy/bun → rules/bun/policy}/bunfig/bunfig.rego +0 -0
  88. /package/{policy/bun → rules/bun/policy}/package_json/package_json.rego +0 -0
  89. /package/{policy/bun → rules/bun/policy}/package_json/package_json_test.rego +0 -0
  90. /package/{mdc → rules/capacitor}/capacitor.mdc +0 -0
  91. /package/{policy/capacitor → rules/capacitor/policy}/package_json/package_json.rego +0 -0
  92. /package/{mdc → rules/changelog}/changelog.mdc +0 -0
  93. /package/{mdc → rules/ci4}/ci4.mdc +0 -0
  94. /package/{mdc → rules/docker}/docker.mdc +0 -0
  95. /package/{policy/docker → rules/docker/policy}/lint_docker_yml/lint_docker_yml.rego +0 -0
  96. /package/{policy/docker → rules/docker/policy}/lint_docker_yml/lint_docker_yml_test.rego +0 -0
  97. /package/{policy/docker → rules/docker/policy}/package_json/package_json.rego +0 -0
  98. /package/{policy/docker → rules/docker/policy}/package_json/package_json_test.rego +0 -0
  99. /package/{mdc → rules/ga}/ga.mdc +0 -0
  100. /package/{policy/ga → rules/ga/policy}/clean_ga_workflows/clean_ga_workflows.rego +0 -0
  101. /package/{policy/ga → rules/ga/policy}/clean_merged_branch/clean_merged_branch.rego +0 -0
  102. /package/{policy/ga → rules/ga/policy}/git_ai/git_ai.rego +0 -0
  103. /package/{policy/ga → rules/ga/policy}/lint_ga/lint_ga.rego +0 -0
  104. /package/{policy/ga → rules/ga/policy}/workflow_common/workflow_common.rego +0 -0
  105. /package/{mdc → rules/graphql}/graphql.mdc +0 -0
  106. /package/{policy/graphql → rules/graphql/policy}/vscode_extensions/vscode_extensions.rego +0 -0
  107. /package/{policy/graphql → rules/graphql/policy}/vscode_extensions/vscode_extensions_test.rego +0 -0
  108. /package/{mdc → rules/hasura}/hasura.mdc +0 -0
  109. /package/{policy/hasura → rules/hasura/policy}/svc_hl/svc_hl.rego +0 -0
  110. /package/{mdc → rules/image-avif}/image-avif.mdc +0 -0
  111. /package/{policy/image_avif → rules/image-avif/policy}/package_json/package_json.rego +0 -0
  112. /package/{policy/image_avif → rules/image-avif/policy}/package_json/package_json_test.rego +0 -0
  113. /package/{mdc → rules/image-compress}/image-compress.mdc +0 -0
  114. /package/{policy/image_compress → rules/image-compress/policy}/package_json/package_json.rego +0 -0
  115. /package/{mdc → rules/js-bun-db}/js-bun-db.mdc +0 -0
  116. /package/{policy/js_bun_db → rules/js-bun-db/policy}/package_json/package_json.rego +0 -0
  117. /package/{mdc → rules/js-bun-redis}/js-bun-redis.mdc +0 -0
  118. /package/{policy/js_bun_redis → rules/js-bun-redis/policy}/package_json/package_json.rego +0 -0
  119. /package/{mdc → rules/js-lint}/js-lint.mdc +0 -0
  120. /package/{policy/js_lint → rules/js-lint/policy}/lint_js_yml/lint_js_yml.rego +0 -0
  121. /package/{policy/js_lint → rules/js-lint/policy}/package_json/package_json.rego +0 -0
  122. /package/{policy/js_lint → rules/js-lint/policy}/package_json/package_json_test.rego +0 -0
  123. /package/{mdc → rules/js-mssql}/js-mssql.mdc +0 -0
  124. /package/{policy/js_mssql → rules/js-mssql/policy}/package_json/package_json.rego +0 -0
  125. /package/{mdc → rules/js-run}/js-run.mdc +0 -0
  126. /package/{policy/js_run → rules/js-run/policy}/configmap/configmap.rego +0 -0
  127. /package/{policy/js_run → rules/js-run/policy}/jsconfig/jsconfig.rego +0 -0
  128. /package/{policy/js_run → rules/js-run/policy}/jsconfig/jsconfig_test.rego +0 -0
  129. /package/{policy/js_run → rules/js-run/policy}/package_json/package_json.rego +0 -0
  130. /package/{mdc → rules/k8s}/k8s.mdc +0 -0
  131. /package/{policy/k8s → rules/k8s/policy}/base_kustomization/base_kustomization.rego +0 -0
  132. /package/{policy/k8s → rules/k8s/policy}/base_kustomization/base_kustomization_test.rego +0 -0
  133. /package/{policy/k8s → rules/k8s/policy}/base_manifest/base_manifest.rego +0 -0
  134. /package/{policy/k8s → rules/k8s/policy}/base_manifest/base_manifest_test.rego +0 -0
  135. /package/{policy/k8s → rules/k8s/policy}/gateway/gateway.rego +0 -0
  136. /package/{policy/k8s → rules/k8s/policy}/gateway/gateway_test.rego +0 -0
  137. /package/{policy/k8s → rules/k8s/policy}/hasura_configmap/hasura_configmap.rego +0 -0
  138. /package/{policy/k8s → rules/k8s/policy}/hasura_configmap/hasura_configmap_test.rego +0 -0
  139. /package/{policy/k8s → rules/k8s/policy}/hasura_httproute/hasura_httproute.rego +0 -0
  140. /package/{policy/k8s → rules/k8s/policy}/hasura_httproute/hasura_httproute_test.rego +0 -0
  141. /package/{policy/k8s → rules/k8s/policy}/hpa_pdb/hpa_pdb.rego +0 -0
  142. /package/{policy/k8s → rules/k8s/policy}/hpa_pdb/hpa_pdb_test.rego +0 -0
  143. /package/{policy/k8s → rules/k8s/policy}/kustomization/kustomization.rego +0 -0
  144. /package/{policy/k8s → rules/k8s/policy}/kustomization/kustomization_test.rego +0 -0
  145. /package/{policy/k8s → rules/k8s/policy}/manifest/manifest.rego +0 -0
  146. /package/{policy/k8s → rules/k8s/policy}/manifest/manifest_test.rego +0 -0
  147. /package/{policy/k8s → rules/k8s/policy}/svc_hl_yaml/svc_hl_yaml.rego +0 -0
  148. /package/{policy/k8s → rules/k8s/policy}/svc_hl_yaml/svc_hl_yaml_test.rego +0 -0
  149. /package/{policy/k8s → rules/k8s/policy}/svc_yaml/svc_yaml.rego +0 -0
  150. /package/{policy/k8s → rules/k8s/policy}/svc_yaml/svc_yaml_test.rego +0 -0
  151. /package/{mdc → rules/nginx-default-tpl}/nginx-default-tpl.mdc +0 -0
  152. /package/{policy/nginx_default_tpl → rules/nginx-default-tpl/policy}/vscode_extensions/vscode_extensions.rego +0 -0
  153. /package/{policy/nginx_default_tpl → rules/nginx-default-tpl/policy}/vscode_extensions/vscode_extensions_test.rego +0 -0
  154. /package/{policy/nginx_default_tpl → rules/nginx-default-tpl/policy}/vscode_settings/vscode_settings.rego +0 -0
  155. /package/{policy/nginx_default_tpl → rules/nginx-default-tpl/policy}/vscode_settings/vscode_settings_test.rego +0 -0
  156. /package/{mdc → rules/npm-module}/npm-module.mdc +0 -0
  157. /package/{policy/npm_module → rules/npm-module/policy}/emit_types_config/emit_types_config.rego +0 -0
  158. /package/{policy/npm_module → rules/npm-module/policy}/npm_package_json/npm_package_json.rego +0 -0
  159. /package/{policy/npm_module → rules/npm-module/policy}/npm_package_json/npm_package_json_test.rego +0 -0
  160. /package/{policy/npm_module → rules/npm-module/policy}/npm_publish_yml/npm_publish_yml.rego +0 -0
  161. /package/{policy/npm_module → rules/npm-module/policy}/root_package_json/root_package_json.rego +0 -0
  162. /package/{mdc → rules/php}/php.mdc +0 -0
  163. /package/{policy/php → rules/php/policy}/lint_php_yml/lint_php_yml.rego +0 -0
  164. /package/{policy/php → rules/php/policy}/package_json/package_json.rego +0 -0
  165. /package/{policy/rego → rules/rego/policy}/package_json/package_json.rego +0 -0
  166. /package/{policy/rego → rules/rego/policy}/package_json/package_json_test.rego +0 -0
  167. /package/{policy/rego → rules/rego/policy}/vscode_extensions/vscode_extensions.rego +0 -0
  168. /package/{policy/rego → rules/rego/policy}/vscode_extensions/vscode_extensions_test.rego +0 -0
  169. /package/{policy/rego → rules/rego/policy}/vscode_settings/vscode_settings.rego +0 -0
  170. /package/{policy/rego → rules/rego/policy}/vscode_settings/vscode_settings_test.rego +0 -0
  171. /package/{mdc → rules/rego}/rego.mdc +0 -0
  172. /package/{policy/style_lint → rules/style-lint/policy}/lint_style_yml/lint_style_yml.rego +0 -0
  173. /package/{policy/style_lint → rules/style-lint/policy}/package_json/package_json.rego +0 -0
  174. /package/{policy/style_lint → rules/style-lint/policy}/vscode_extensions/vscode_extensions.rego +0 -0
  175. /package/{policy/style_lint → rules/style-lint/policy}/vscode_extensions/vscode_extensions_test.rego +0 -0
  176. /package/{policy/style_lint → rules/style-lint/policy}/vscode_settings/vscode_settings.rego +0 -0
  177. /package/{policy/style_lint → rules/style-lint/policy}/vscode_settings/vscode_settings_test.rego +0 -0
  178. /package/{mdc → rules/style-lint}/style-lint.mdc +0 -0
  179. /package/{policy/tauri → rules/tauri/policy}/vscode_extensions/vscode_extensions.rego +0 -0
  180. /package/{policy/tauri → rules/tauri/policy}/vscode_extensions/vscode_extensions_test.rego +0 -0
  181. /package/{mdc → rules/tauri}/tauri.mdc +0 -0
  182. /package/{policy/text → rules/text/policy}/cspell/cspell.rego +0 -0
  183. /package/{policy/text → rules/text/policy}/markdownlint/markdownlint.rego +0 -0
  184. /package/{policy/text → rules/text/policy}/markdownlint/markdownlint_test.rego +0 -0
  185. /package/{policy/text → rules/text/policy}/oxfmtrc/oxfmtrc.rego +0 -0
  186. /package/{policy/text → rules/text/policy}/package_json/package_json.rego +0 -0
  187. /package/{policy/text → rules/text/policy}/vscode_extensions/vscode_extensions.rego +0 -0
  188. /package/{policy/text → rules/text/policy}/vscode_extensions/vscode_extensions_test.rego +0 -0
  189. /package/{policy/text → rules/text/policy}/vscode_settings/vscode_settings.rego +0 -0
  190. /package/{policy/text → rules/text/policy}/vscode_settings/vscode_settings_test.rego +0 -0
  191. /package/{policy/vue → rules/vue/policy}/package_json/package_json.rego +0 -0
  192. /package/{mdc → rules/vue}/vue.mdc +0 -0
@@ -12,8 +12,8 @@ import { existsSync } from 'node:fs'
12
12
  import { readFile } from 'node:fs/promises'
13
13
  import { join, relative } from 'node:path'
14
14
 
15
- import { createCheckReporter } from './utils/check-reporter.mjs'
16
- import { findAllPackageJsonPaths } from './utils/find-package-json-paths.mjs'
15
+ import { createCheckReporter } from '../../../scripts/utils/check-reporter.mjs'
16
+ import { findAllPackageJsonPaths } from '../../../scripts/utils/find-package-json-paths.mjs'
17
17
  import {
18
18
  findMssqlPerRequestConnectionInText,
19
19
  findSharedMssqlRequestInText,
@@ -22,9 +22,9 @@ import {
22
22
  findUnsafeMssqlInListUnparsedInText,
23
23
  findUnsafeMssqlInListMissingEmptyGuardInText,
24
24
  isMssqlScanSourceFile
25
- } from './utils/mssql-pool-scan.mjs'
26
- import { loadCursorIgnorePaths } from './utils/load-cursor-config.mjs'
27
- import { walkDir } from './utils/walkDir.mjs'
25
+ } from '../../../scripts/utils/mssql-pool-scan.mjs'
26
+ import { loadCursorIgnorePaths } from '../../../scripts/utils/load-cursor-config.mjs'
27
+ import { walkDir } from '../../../scripts/utils/walkDir.mjs'
28
28
 
29
29
  const VERSION_PREFIX_RE = /^[\^~>=<]+\s*/u
30
30
  const SEMVER_RE = /^(\d+)\.(\d+)\.(\d+)/u
@@ -0,0 +1 @@
1
+ якщо це вкладена директорія з package.json (не в корені) та в devDependencies немає vite
@@ -37,21 +37,21 @@ import {
37
37
  findBunyanImportsInText,
38
38
  isBunyanScanSourceFile,
39
39
  shouldSkipFileForBunyanScan
40
- } from './utils/bunyan-imports.mjs'
41
- import { findUncheckedProcessEnvInText, isCheckEnvScanSourceFile } from './utils/check-env-scan.mjs'
42
- import { createCheckReporter } from './utils/check-reporter.mjs'
43
- import { runConftestBatch } from './utils/run-conftest-batch.mjs'
44
- import { findConnFileRuleViolations, isConnFileRulesSourceFile } from './utils/conn-file-rules.mjs'
40
+ } from '../../../scripts/utils/bunyan-imports.mjs'
41
+ import { findUncheckedProcessEnvInText, isCheckEnvScanSourceFile } from '../../../scripts/utils/check-env-scan.mjs'
42
+ import { createCheckReporter } from '../../../scripts/utils/check-reporter.mjs'
43
+ import { runConftestBatch } from '../../../scripts/utils/run-conftest-batch.mjs'
44
+ import { findConnFileRuleViolations, isConnFileRulesSourceFile } from '../../../scripts/utils/conn-file-rules.mjs'
45
45
  import {
46
46
  findConnFactoryImportsInText,
47
47
  isConnImportsScanSourceFile,
48
48
  isInsideConnDir,
49
49
  resolveConnDirFromPackageJson
50
- } from './utils/conn-imports-scan.mjs'
51
- import { loadCursorIgnorePaths } from './utils/load-cursor-config.mjs'
52
- import { findPromiseSetTimeoutInText, isPromiseSetTimeoutScanSourceFile } from './utils/promise-settimeout-scan.mjs'
53
- import { walkDir } from './utils/walkDir.mjs'
54
- import { getMonorepoPackageRootDirs } from './utils/workspaces.mjs'
50
+ } from '../../../scripts/utils/conn-imports-scan.mjs'
51
+ import { loadCursorIgnorePaths } from '../../../scripts/utils/load-cursor-config.mjs'
52
+ import { findPromiseSetTimeoutInText, isPromiseSetTimeoutScanSourceFile } from '../../../scripts/utils/promise-settimeout-scan.mjs'
53
+ import { walkDir } from '../../../scripts/utils/walkDir.mjs'
54
+ import { getMonorepoPackageRootDirs } from '../../../scripts/utils/workspaces.mjs'
55
55
 
56
56
  /**
57
57
  * Чи існує непорожній за змістом маркер каталогу `src/` (рекомендована структура js-run).
@@ -92,7 +92,7 @@ function checkBackendJsconfigWhenSrcPresent(rootDir, absPackageRoot, label, fail
92
92
  return
93
93
  }
94
94
  const violations = runConftestBatch({
95
- policyDirRel: 'js_run/jsconfig',
95
+ policyDirRel: 'js-run/jsconfig',
96
96
  namespace: 'js_run.jsconfig',
97
97
  files: [jcPath]
98
98
  })
@@ -0,0 +1 @@
1
+ якщо присутня хоч одна директорія k8s
@@ -134,10 +134,10 @@ import { basename, dirname, join, relative, resolve } from 'node:path'
134
134
 
135
135
  import { isSeq, parseAllDocuments, parseDocument } from 'yaml'
136
136
 
137
- import { createCheckReporter } from './utils/check-reporter.mjs'
138
- import { loadCursorIgnorePaths } from './utils/load-cursor-config.mjs'
139
- import { runConftestBatch } from './utils/run-conftest-batch.mjs'
140
- import { walkDir } from './utils/walkDir.mjs'
137
+ import { createCheckReporter } from '../../../scripts/utils/check-reporter.mjs'
138
+ import { loadCursorIgnorePaths } from '../../../scripts/utils/load-cursor-config.mjs'
139
+ import { runConftestBatch } from '../../../scripts/utils/run-conftest-batch.mjs'
140
+ import { walkDir } from '../../../scripts/utils/walkDir.mjs'
141
141
 
142
142
  /** Версія набору схем yannh — узгоджено з k8s.mdc */
143
143
  const YANNH_PIN = 'v1.33.9-standalone-strict'
@@ -15,10 +15,10 @@
15
15
  import { spawnSync } from 'node:child_process'
16
16
  import { basename, dirname, relative } from 'node:path'
17
17
 
18
- import { isRunAsCli } from './cli-entry.mjs'
19
- import { loadCursorIgnorePaths } from './utils/load-cursor-config.mjs'
20
- import { resolveCmd } from './utils/resolve-cmd.mjs'
21
- import { walkDir } from './utils/walkDir.mjs'
18
+ import { isRunAsCli } from '../../../scripts/cli-entry.mjs'
19
+ import { loadCursorIgnorePaths } from '../../../scripts/utils/load-cursor-config.mjs'
20
+ import { resolveCmd } from '../../../scripts/utils/resolve-cmd.mjs'
21
+ import { walkDir } from '../../../scripts/utils/walkDir.mjs'
22
22
 
23
23
  const PATH_SEPARATOR_RE = /[/\\]/u
24
24
  const YAML_EXT_RE = /\.yaml$/iu
@@ -0,0 +1 @@
1
+ якщо присутній хоч один файл з переліку - default.conf.template, default.conf, nginx.conf
@@ -17,11 +17,11 @@ import { existsSync } from 'node:fs'
17
17
  import { readdir, readFile, rename, unlink, writeFile } from 'node:fs/promises'
18
18
  import { basename, dirname, join, relative } from 'node:path'
19
19
 
20
- import { findDockerfilePaths } from './check-docker.mjs'
21
- import { createCheckReporter } from './utils/check-reporter.mjs'
22
- import { loadCursorIgnorePaths } from './utils/load-cursor-config.mjs'
23
- import { runConftestBatch } from './utils/run-conftest-batch.mjs'
24
- import { walkDir } from './utils/walkDir.mjs'
20
+ import { findDockerfilePaths } from '../../docker/js/check.mjs'
21
+ import { createCheckReporter } from '../../../scripts/utils/check-reporter.mjs'
22
+ import { loadCursorIgnorePaths } from '../../../scripts/utils/load-cursor-config.mjs'
23
+ import { runConftestBatch } from '../../../scripts/utils/run-conftest-batch.mjs'
24
+ import { walkDir } from '../../../scripts/utils/walkDir.mjs'
25
25
 
26
26
  const LINE_SPLIT_RE = /\r?\n/u
27
27
  const INI_KEY_RE = /^([A-Za-z_]\w*)\s*=/u
@@ -363,7 +363,7 @@ function checkVscodeNginx(passFn, failFn) {
363
363
  const extPath = '.vscode/extensions.json'
364
364
  if (existsSync(extPath)) {
365
365
  const violations = runConftestBatch({
366
- policyDirRel: 'nginx_default_tpl/vscode_extensions',
366
+ policyDirRel: 'nginx-default-tpl/vscode_extensions',
367
367
  namespace: 'nginx_default_tpl.vscode_extensions',
368
368
  files: [extPath]
369
369
  })
@@ -382,7 +382,7 @@ function checkVscodeNginx(passFn, failFn) {
382
382
  return
383
383
  }
384
384
  const violations = runConftestBatch({
385
- policyDirRel: 'nginx_default_tpl/vscode_settings',
385
+ policyDirRel: 'nginx-default-tpl/vscode_settings',
386
386
  namespace: 'nginx_default_tpl.vscode_settings',
387
387
  files: [setPath]
388
388
  })
@@ -0,0 +1 @@
1
+ якщо в корені присутня директорія npm
@@ -32,10 +32,10 @@ import { promisify } from 'node:util'
32
32
 
33
33
  import { parseSync } from 'oxc-parser'
34
34
 
35
- import { dynamicImportModule, langFromPath, requireCallModule, walkAstWithAncestors } from './utils/ast-scan-utils.mjs'
36
- import { createCheckReporter } from './utils/check-reporter.mjs'
37
- import { loadCursorIgnorePaths } from './utils/load-cursor-config.mjs'
38
- import { walkDir } from './utils/walkDir.mjs'
35
+ import { dynamicImportModule, langFromPath, requireCallModule, walkAstWithAncestors } from '../../../scripts/utils/ast-scan-utils.mjs'
36
+ import { createCheckReporter } from '../../../scripts/utils/check-reporter.mjs'
37
+ import { loadCursorIgnorePaths } from '../../../scripts/utils/load-cursor-config.mjs'
38
+ import { walkDir } from '../../../scripts/utils/walkDir.mjs'
39
39
 
40
40
  const execFileAsync = promisify(execFile)
41
41
 
@@ -0,0 +1 @@
1
+ якщо в корені є composer.json
@@ -11,7 +11,7 @@
11
11
  */
12
12
  import { existsSync } from 'node:fs'
13
13
 
14
- import { createCheckReporter } from './utils/check-reporter.mjs'
14
+ import { createCheckReporter } from '../../../scripts/utils/check-reporter.mjs'
15
15
 
16
16
  /**
17
17
  * Перевіряє відповідність проєкту правилам php.mdc.
@@ -12,9 +12,9 @@ import { spawnSync } from 'node:child_process'
12
12
  import { existsSync, statSync } from 'node:fs'
13
13
  import { join, resolve } from 'node:path'
14
14
 
15
- import { isRunAsCli } from './cli-entry.mjs'
16
- import { createCheckReporter } from './utils/check-reporter.mjs'
17
- import { resolveCmd } from './utils/resolve-cmd.mjs'
15
+ import { isRunAsCli } from '../../../scripts/cli-entry.mjs'
16
+ import { createCheckReporter } from '../../../scripts/utils/check-reporter.mjs'
17
+ import { resolveCmd } from '../../../scripts/utils/resolve-cmd.mjs'
18
18
 
19
19
  const PHPCS_CODE_DIR_CANDIDATES = ['app', 'src', 'lib', 'public', 'www']
20
20
 
@@ -0,0 +1 @@
1
+ якщо в проекті є хоч один rego
@@ -25,10 +25,10 @@
25
25
  */
26
26
  import { existsSync } from 'node:fs'
27
27
 
28
- import { createCheckReporter } from './utils/check-reporter.mjs'
29
- import { loadCursorIgnorePaths } from './utils/load-cursor-config.mjs'
30
- import { runConftestBatch } from './utils/run-conftest-batch.mjs'
31
- import { walkDir } from './utils/walkDir.mjs'
28
+ import { createCheckReporter } from '../../../scripts/utils/check-reporter.mjs'
29
+ import { loadCursorIgnorePaths } from '../../../scripts/utils/load-cursor-config.mjs'
30
+ import { runConftestBatch } from '../../../scripts/utils/run-conftest-batch.mjs'
31
+ import { walkDir } from '../../../scripts/utils/walkDir.mjs'
32
32
 
33
33
  /** Список (path, namespace, policyDirRel) для трьох канонічних конфігів rego.mdc. */
34
34
  const REGO_TARGETS = [
@@ -26,7 +26,7 @@ import { spawnSync } from 'node:child_process'
26
26
  import { existsSync } from 'node:fs'
27
27
  import { resolve } from 'node:path'
28
28
 
29
- import { resolveCmd } from './utils/resolve-cmd.mjs'
29
+ import { resolveCmd } from '../../../scripts/utils/resolve-cmd.mjs'
30
30
 
31
31
  /** Шляхи з Rego-полісі (відносно cwd). Існують не всі на ранніх стадіях — фільтруємо нижче. */
32
32
  const LINT_TARGETS = ['npm/policy']
@@ -0,0 +1 @@
1
+ якщо присутній хоч один vue або css файл
@@ -19,7 +19,7 @@
19
19
  import { existsSync } from 'node:fs'
20
20
  import { readFile } from 'node:fs/promises'
21
21
 
22
- import { createCheckReporter } from './utils/check-reporter.mjs'
22
+ import { createCheckReporter } from '../../../scripts/utils/check-reporter.mjs'
23
23
 
24
24
  /**
25
25
  * Альтернатива полю `stylelint` у `package.json` — зовнішній файл конфігу. Якщо
@@ -0,0 +1 @@
1
+ якщо в хоч в package.json в секції dependencies присутній пакет @tauri-apps/api
@@ -18,8 +18,8 @@
18
18
  import { existsSync, statSync } from 'node:fs'
19
19
  import { readFile } from 'node:fs/promises'
20
20
 
21
- import { createCheckReporter } from './utils/check-reporter.mjs'
22
- import { runConftestBatch } from './utils/run-conftest-batch.mjs'
21
+ import { createCheckReporter } from '../../../scripts/utils/check-reporter.mjs'
22
+ import { runConftestBatch } from '../../../scripts/utils/run-conftest-batch.mjs'
23
23
 
24
24
  /**
25
25
  * Чи є префікс `@tauri-apps/` у ключах `dependencies` або `devDependencies`.
@@ -0,0 +1 @@
1
+ завжди
@@ -32,8 +32,8 @@
32
32
  import { existsSync } from 'node:fs'
33
33
  import { readFile } from 'node:fs/promises'
34
34
 
35
- import { createCheckReporter } from './utils/check-reporter.mjs'
36
- import { anyRunStepIncludes, parseWorkflowYaml } from './utils/gha-workflow.mjs'
35
+ import { createCheckReporter } from '../../../scripts/utils/check-reporter.mjs'
36
+ import { anyRunStepIncludes, parseWorkflowYaml } from '../../../scripts/utils/gha-workflow.mjs'
37
37
 
38
38
  /** Заголовок абзацу про апостроф у text.mdc / n-text.mdc. */
39
39
  const UK_APOSTROPHE_HEADING = '**Український апостроф:**'
@@ -19,8 +19,8 @@ import { spawnSync } from 'node:child_process'
19
19
  import { globSync } from 'node:fs'
20
20
  import { resolve } from 'node:path'
21
21
 
22
- import { isRunAsCli } from './cli-entry.mjs'
23
- import { resolveCmd } from './utils/resolve-cmd.mjs'
22
+ import { isRunAsCli } from '../../../scripts/cli-entry.mjs'
23
+ import { resolveCmd } from '../../../scripts/utils/resolve-cmd.mjs'
24
24
 
25
25
  /** Підрядок у stderr ShellCheck, коли є зауваження, але без авто-виправлення у форматі diff. */
26
26
  const NON_AUTOFIXABLE_HINT = 'none were auto-fixable'
@@ -18,8 +18,8 @@ import { existsSync } from 'node:fs'
18
18
  import { dirname, join } from 'node:path'
19
19
  import { fileURLToPath } from 'node:url'
20
20
 
21
- import { isRunAsCli } from './cli-entry.mjs'
22
- import { resolveCmd } from './utils/resolve-cmd.mjs'
21
+ import { isRunAsCli } from '../../../scripts/cli-entry.mjs'
22
+ import { resolveCmd } from '../../../scripts/utils/resolve-cmd.mjs'
23
23
 
24
24
  /** Типові glob-и для форматів, які обробляє v8r (див. опис CLI v8r). */
25
25
  export const DEFAULT_V8R_GLOBS = ['**/*.json', '**/*.json5', '**/*.yml', '**/*.yaml', '**/*.toml']
@@ -296,6 +296,10 @@ jobs:
296
296
 
297
297
  Якщо потрібна мова вже є в залежностях **`@nitra/cspell-dict`** — додай лише код у **`language`**, без окремих **`@cspell/dict-*`** у споживачі. Якщо мови немає в корпоративному пакеті — розширюй **`@nitra/cspell-dict`**, а не підключай **`@cspell/dict-*`** у корені репозиторію-споживача. Огляд upstream-словників: [streetsidesoftware/cspell-dicts](https://github.com/streetsidesoftware/cspell-dicts).
298
298
 
299
+ ## Найменування каталогів
300
+
301
+ kebab-case
302
+
299
303
  ## Перевірка
300
304
 
301
305
  `npx @nitra/cursor check text` (охоплює oxfmt, cspell, shellcheck у `lint-text`, markdownlint, v8r, CI для `lint-text`)
@@ -0,0 +1 @@
1
+ якщо присутній хоч один vue файл
@@ -21,16 +21,16 @@ import { existsSync } from 'node:fs'
21
21
  import { readFile } from 'node:fs/promises'
22
22
  import { join, relative } from 'node:path'
23
23
 
24
- import { createCheckReporter } from './utils/check-reporter.mjs'
24
+ import { createCheckReporter } from '../../../scripts/utils/check-reporter.mjs'
25
25
  import {
26
26
  findForbiddenNodeImportsInVueFile,
27
27
  findForbiddenVueImportsInSourceFile,
28
28
  isVueImportScanSourceFile,
29
29
  shouldSkipFileForVueImportScan
30
- } from './utils/vue-forbidden-imports.mjs'
31
- import { loadCursorIgnorePaths } from './utils/load-cursor-config.mjs'
32
- import { walkDir } from './utils/walkDir.mjs'
33
- import { getMonorepoPackageRootDirs } from './utils/workspaces.mjs'
30
+ } from '../../../scripts/utils/vue-forbidden-imports.mjs'
31
+ import { loadCursorIgnorePaths } from '../../../scripts/utils/load-cursor-config.mjs'
32
+ import { walkDir } from '../../../scripts/utils/walkDir.mjs'
33
+ import { getMonorepoPackageRootDirs } from '../../../scripts/utils/workspaces.mjs'
34
34
 
35
35
  const ESBUILD_RE = /\besbuild\b/
36
36
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Автовизначення правил для `.n-cursor.json` за умовами з `npm/bin/auto-rules.md`.
2
+ * Автовизначення правил для `.n-cursor.json` за умовами з `npm/rules/<rule>/auto.md`.
3
3
  *
4
4
  * Модуль аналізує дерево проєкту (наявність файлів/директорій, `gql\`...\`` у source,
5
5
  * залежності `mssql` / `pg` / `pg-format` / `mysql2` / `ioredis` / `node-redis` у `package.json`,
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * Враховує винятки `disable-rules`: елементи зі списку не додаються автоматично.
10
10
  *
11
- * Автодетект скілів — у `./auto-skills.mjs` (умови — у `npm/bin/auto-skills.md`).
11
+ * Автодетект скілів — у `./auto-skills.mjs` (умови — у `npm/skills/<skill>/auto.md`).
12
12
  * `mergeConfigWithAutoDetected` нижче приймає вже виявлені rules і skills і вливає
13
13
  * їх у конфіг із поправкою на legacy-id (`migrateRuleIds`).
14
14
  */
@@ -24,7 +24,7 @@ import {
24
24
  } from './utils/graphql-gql-scan.mjs'
25
25
  import { contentForVueImportScan } from './utils/vue-forbidden-imports.mjs'
26
26
 
27
- /** Порядок автододавання правил відповідно до `auto-rules.md`. */
27
+ /** Порядок автододавання правил відповідно до `rules/<rule>/auto.md`. */
28
28
  export const AUTO_RULE_ORDER = Object.freeze([
29
29
  'abie',
30
30
  'bun',
@@ -91,7 +91,7 @@ export function detectLegacyRuleIds(ids) {
91
91
  }
92
92
 
93
93
  /**
94
- * Граф залежностей між правилами (`auto-rules.md` синтаксис `rule - [other]`).
94
+ * Граф залежностей між правилами (`rules/<rule>/auto.md` синтаксис `rule - [other]`).
95
95
  * Ключ варто автододати, коли всі правила-залежності вже додані до конфігу — щоб
96
96
  * не дублювати вихідну умову, достатньо описати її у залежності.
97
97
  */
@@ -576,7 +576,7 @@ function resolveRuleDependencies(detectedRules, addRule) {
576
576
  }
577
577
 
578
578
  /**
579
- * Визначає авто-правила згідно з `auto-rules.md`.
579
+ * Визначає авто-правила згідно з `rules/<rule>/auto.md`.
580
580
  * @param {object} params параметри аналізу
581
581
  * @param {string} params.root абсолютний шлях до кореня репозиторію
582
582
  * @param {string[]} params.availableRules перелік доступних правил з пакету
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Автовизначення skills для `.n-cursor.json` за умовами з `npm/bin/auto-skills.md`.
2
+ * Автовизначення skills для `.n-cursor.json` за умовами з `npm/skills/<skill>/auto.md`.
3
3
  *
4
4
  * Скіли автододаються залежно від уже виявлених правил (auto-rules) — щоб не дублювати
5
5
  * умови, які вже формалізовані для відповідного правила. Наприклад:
@@ -7,11 +7,11 @@
7
7
  * - `abie-kustomize - [abie]` — додається разом з правилом `abie`
8
8
  * - `taze - [bun]` — додається разом з правилом `bun`
9
9
  *
10
- * Скіли без секції `[rules]` у `auto-skills.md` (`fix`, `lint`, `llm-patch`, `publish-telegram`)
10
+ * Скіли без секції `[rules]` у `skills/<skill>/auto.md` (`fix`, `lint`, `llm-patch`, `publish-telegram`)
11
11
  * додаються завжди, якщо доступні в пакеті й не у `disable-skills`.
12
12
  */
13
13
 
14
- /** Порядок автододавання skills відповідно до `auto-skills.md`. */
14
+ /** Порядок автододавання skills відповідно до `skills/<skill>/auto.md`. */
15
15
  export const AUTO_SKILL_ORDER = Object.freeze([
16
16
  'abie-kustomize',
17
17
  'fix',
@@ -22,7 +22,7 @@ export const AUTO_SKILL_ORDER = Object.freeze([
22
22
  ])
23
23
 
24
24
  /**
25
- * Залежність скілів від правил (`auto-skills.md` синтаксис `skill - [rules]`).
25
+ * Залежність скілів від правил (`skills/<skill>/auto.md` синтаксис `skill - [rules]`).
26
26
  * Ключ варто автододати, коли всі правила-залежності вже додані до конфігу автодетектом.
27
27
  */
28
28
  export const AUTO_SKILL_RULE_DEPENDENCIES = Object.freeze(
@@ -32,13 +32,13 @@ export const AUTO_SKILL_RULE_DEPENDENCIES = Object.freeze(
32
32
  })
33
33
  )
34
34
 
35
- /** Скіли без залежностей — додаються завжди (рядок «завжди» в `auto-skills.md`). */
35
+ /** Скіли без залежностей — додаються завжди (рядок «завжди» в `skills/<skill>/auto.md`). */
36
36
  const ALWAYS_ON_SKILLS = Object.freeze(['fix', 'lint', 'llm-patch', 'publish-telegram'])
37
37
 
38
38
  const DEFAULT_DISABLED_LIST = Object.freeze([])
39
39
 
40
40
  /**
41
- * Визначає авто-skills згідно з `auto-skills.md`.
41
+ * Визначає авто-skills згідно з `skills/<skill>/auto.md`.
42
42
  * @param {object} params параметри
43
43
  * @param {string[]} params.availableSkills перелік доступних skills із пакету (id без префікса n-)
44
44
  * @param {string[]} params.detectedRules id правил, виявлених auto-rules (вхідні залежності)
@@ -1,17 +1,17 @@
1
1
  /**
2
- * Прогоняє `conftest test` по всіх Rego-полісі з `npm/policy/` (окрім `ga/*`,
3
- * які вже виконуються через `lint-ga.mjs`).
2
+ * Прогоняє `conftest test` по всіх Rego-полісі з `npm/rules/<rule>/policy/` (окрім `ga/*`,
3
+ * які вже виконуються через `npm/rules/ga/js/lint.mjs`).
4
4
  *
5
- * Кожна полісі має свій namespace, опційний `rule` (id у `.n-cursor.json:rules`,
6
- * інакше таргет пропускається — як гейтинг у `check-*.mjs`), і список цільових
5
+ * Кожна полісі має свій namespace, обов'язковий `rule` (id у `.n-cursor.json:rules`,
6
+ * інакше таргет пропускається — як гейтинг у `check.mjs`), і список цільових
7
7
  * файлів — single-file або walk-предикат для дерева. Якщо цільових файлів немає
8
8
  * або правило не активне — таргет мовчки пропускається.
9
9
  *
10
10
  * Поведінка fallback:
11
11
  * - якщо `conftest` не в `PATH` — друкуємо `ℹ` повідомлення з підказкою
12
- * встановлення і повертаємо 0 (структурні JS-перевірки в `check-*.mjs`
13
- * лишаються паралельно). Те саме рішення — у `lint-ga.mjs`.
14
- * - якщо `npm/policy/` не існує (нетипова інсталяція) — також `ℹ` skip.
12
+ * встановлення і повертаємо 0 (структурні JS-перевірки в `check.mjs`
13
+ * лишаються паралельно). Те саме рішення — у `rules/ga/js/lint.mjs`.
14
+ * - якщо `npm/rules/` не існує (нетипова інсталяція) — також `ℹ` skip.
15
15
  *
16
16
  * Перший ненульовий exit-код conftest — повертаємо як результат, але всі
17
17
  * наступні таргети все одно виконуємо, щоб одразу побачити повний список
@@ -27,11 +27,11 @@ import { fileURLToPath } from 'node:url'
27
27
 
28
28
  import { resolveCmd } from './utils/resolve-cmd.mjs'
29
29
 
30
- /** Каталог пакету `@nitra/cursor`, від якого ресолвимо вшиту директорію policy/. */
30
+ /** Каталог пакету `@nitra/cursor`, від якого ресолвимо вшиті директорії правил. */
31
31
  const PACKAGE_ROOT = dirname(dirname(fileURLToPath(import.meta.url)))
32
32
 
33
- /** Шлях до кореня Rego-полісі. У npm-tarball публікується через `files: ["policy"]`. */
34
- const POLICY_DIR = join(PACKAGE_ROOT, 'policy')
33
+ /** Шлях до кореня правил. У npm-tarball публікується через `files: ["rules"]`. Кожне правило: `rules/<id>/policy/`. */
34
+ const RULES_DIR = join(PACKAGE_ROOT, 'rules')
35
35
 
36
36
  /**
37
37
  * Опис одного таргета: namespace + спосіб розвʼязати цільові файли.
@@ -438,7 +438,7 @@ function resolveTargetFiles(target, cwd) {
438
438
  * @returns {number} exit-код
439
439
  */
440
440
  function runConftestForTarget(conftestBin, target, files) {
441
- const policyAbs = join(POLICY_DIR, target.policyDir)
441
+ const policyAbs = join(RULES_DIR, target.rule, 'policy')
442
442
  if (!existsSync(policyAbs)) {
443
443
  return 0
444
444
  }
@@ -471,8 +471,8 @@ export function runLintConftestCli() {
471
471
  )
472
472
  return 0
473
473
  }
474
- if (!existsSync(POLICY_DIR)) {
475
- console.log(`ℹ Каталог Rego-полісі не знайдено (${POLICY_DIR}) — пропускаю conftest.`)
474
+ if (!existsSync(RULES_DIR)) {
475
+ console.log(`ℹ Каталог правил не знайдено (${RULES_DIR}) — пропускаю conftest.`)
476
476
  return 0
477
477
  }
478
478
 
@@ -21,11 +21,11 @@ import { fileURLToPath } from 'node:url'
21
21
 
22
22
  import { resolveCmd } from './resolve-cmd.mjs'
23
23
 
24
- /** Каталог пакета `@nitra/cursor`, від якого ресолвимо вшиту директорію `policy/`. */
24
+ /** Каталог пакета `@nitra/cursor`, від якого ресолвимо вшиті директорії правил. */
25
25
  const PACKAGE_ROOT = dirname(dirname(dirname(fileURLToPath(import.meta.url))))
26
26
 
27
- /** Шлях до кореня rego-полісі. У npm-tarball публікується через `files: ["policy"]`. */
28
- const POLICY_ROOT = join(PACKAGE_ROOT, 'policy')
27
+ /** Шлях до кореня правил. У npm-tarball публікується через `files: ["rules"]`. Кожне правило: `rules/<id>/policy/<name>/`. */
28
+ const RULES_ROOT = join(PACKAGE_ROOT, 'rules')
29
29
 
30
30
  /**
31
31
  * Друкує install-hint для conftest і кидає виняток, щоб викликана `check-*`
@@ -72,7 +72,12 @@ export function runConftestBatch(opts) {
72
72
  if (!conftestBin) {
73
73
  failConftestMissing()
74
74
  }
75
- const policyAbs = join(POLICY_ROOT, opts.policyDirRel)
75
+ // policyDirRel формат `<rule>/<name>` (наприклад `abie/base_deployment_preem`).
76
+ // Реальний шлях у новій структурі: `rules/<rule>/policy/<name>`.
77
+ const slash = opts.policyDirRel.indexOf('/')
78
+ const ruleId = slash === -1 ? opts.policyDirRel : opts.policyDirRel.slice(0, slash)
79
+ const sub = slash === -1 ? '' : opts.policyDirRel.slice(slash + 1)
80
+ const policyAbs = sub ? join(RULES_ROOT, ruleId, 'policy', sub) : join(RULES_ROOT, ruleId, 'policy')
76
81
  if (!existsSync(policyAbs)) {
77
82
  throw new Error(`runConftestBatch: rego-каталог не знайдено: ${policyAbs}`)
78
83
  }
@@ -0,0 +1 @@
1
+ [abie]
@@ -0,0 +1 @@
1
+ [abie]
@@ -0,0 +1 @@
1
+ завжди
@@ -0,0 +1 @@
1
+ завжди
@@ -0,0 +1 @@
1
+ завжди
@@ -0,0 +1 @@
1
+ завжди
@@ -0,0 +1 @@
1
+ [bun]
package/bin/auto-rules.md DELETED
@@ -1,59 +0,0 @@
1
- # Авто вмикання правил
2
-
3
- В цьому файлі описані умови, по яким повинні правила автододаватись в конфіг. Умови автододавання скілів — у `auto-skills.md` (виносить логіку зі словника правил у пару «правило → скіл»).
4
-
5
- ## Правила, які автоматично додається до .n-cursor.json
6
-
7
- Синтаксис `rule - [other]` означає: правило `rule` варто автододати лише якщо всі правила у списку `[other]` вже додані до конфігу (граф залежностей між правилами; умова не дублюється).
8
-
9
- abie - якщо в кореневому package.json в секції "repository" присутній текст "<https://github.com/abinbevefes/**/>"
10
-
11
- bun - якщо в корені проекту є package.json
12
-
13
- capacitor - якщо в проекті є хоч один файл capacitor.config.json
14
-
15
- changelog - [bun]
16
-
17
- docker - якщо в проекті є хоч один Dockerfile
18
-
19
- ga - якщо присутня директорія .github/workflows
20
-
21
- graphql - якщо хоч в одному js або vue файлі присутній gql` темплейт літерал
22
-
23
- hasura - якщо в директорії присутній config.yaml, який містить рядок `metadata_directory: metadata`
24
-
25
- image-compress - [bun]
26
-
27
- image-avif - [vue, image-compress]
28
-
29
- js-lint - якщо присутній хоч один js файл
30
-
31
- js-run - якщо це вкладена директорія з package.json (не в корені) та в devDependencies немає vite
32
-
33
- js-mssql - якщо в хоч одному package.json в секції dependencies присутній пакет mssql
34
-
35
- js-bun-db - якщо в хоч одному package.json в секції dependencies присутній пакет pg, pg-format або mysql2 або є імпорт sql/SQL з Bun (приклад: import { sql } from "bun")
36
-
37
- js-bun-redis - якщо в хоч одному package.json в секції dependencies присутній пакет ioredis або node-redis
38
-
39
- k8s - якщо присутня хоч одна директорія k8s
40
-
41
- nginx-default-tpl - якщо присутній хоч один файл з переліку - default.conf.template, default.conf, nginx.conf
42
-
43
- npm-module - якщо в корені присутня директорія npm
44
-
45
- php - якщо в корені є composer.json
46
-
47
- rego - якщо в проекті є хоч один rego
48
-
49
- style-lint - якщо присутній хоч один vue або css файл
50
-
51
- tauri - - якщо в хоч в package.json в секції dependencies присутній пакет @tauri-apps/api
52
-
53
- text - завжди
54
-
55
- vue - якщо присутній хоч один vue файл
56
-
57
- ## Виключення
58
-
59
- Якщо в .n-cursor.json задано в секції disable-rules правило, то воно автоматично додаватись не повинно.
@@ -1,25 +0,0 @@
1
- # Авто вмикання скілів
2
-
3
- В цьому файлі описані умови, по яким повинні скіли автододаватись в конфіг.
4
-
5
- ## Скіли, які автоматично додається до .n-cursor.json
6
-
7
- Синтаксис `skill - [rules]` означає: скіл `skill` варто автододати лише якщо всі правила у списку `[rules]` уже додані до конфігу автодетектом (з `auto-rules.md`). Так залежність не дублює вихідну умову правила.
8
-
9
- abie-kustomize - [abie]
10
-
11
- abie-clean - [abie]
12
-
13
- fix - завжди
14
-
15
- llm-patch - завжди
16
-
17
- lint - завжди
18
-
19
- publish-telegram - завжди
20
-
21
- taze - [bun]
22
-
23
- ## Виключення
24
-
25
- Якщо в .n-cursor.json задано в секції disable-skills скіл, то він автоматично додаватись не повинен.