@stsepelin/checktrail 0.1.0-alpha.1

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 (385) hide show
  1. package/CONTRIBUTING.md +42 -0
  2. package/LICENSE +21 -0
  3. package/README.md +355 -0
  4. package/SECURITY.md +46 -0
  5. package/dist/src/actionlint-evidence.d.ts +2 -0
  6. package/dist/src/actionlint-evidence.js +166 -0
  7. package/dist/src/actionlint-inputs.d.ts +5 -0
  8. package/dist/src/actionlint-inputs.js +123 -0
  9. package/dist/src/actionlint-runner.d.ts +1 -0
  10. package/dist/src/actionlint-runner.js +122 -0
  11. package/dist/src/actionlint.d.ts +19 -0
  12. package/dist/src/actionlint.js +80 -0
  13. package/dist/src/adapters.d.ts +49 -0
  14. package/dist/src/adapters.js +430 -0
  15. package/dist/src/architecture.d.ts +107 -0
  16. package/dist/src/architecture.js +230 -0
  17. package/dist/src/clang-evidence.d.ts +2 -0
  18. package/dist/src/clang-evidence.js +194 -0
  19. package/dist/src/clang-protocol.d.ts +3 -0
  20. package/dist/src/clang-protocol.js +25 -0
  21. package/dist/src/clang-runner.d.ts +1 -0
  22. package/dist/src/clang-runner.js +159 -0
  23. package/dist/src/clang.d.ts +44 -0
  24. package/dist/src/clang.js +197 -0
  25. package/dist/src/cli.d.ts +2 -0
  26. package/dist/src/cli.js +338 -0
  27. package/dist/src/config.d.ts +33 -0
  28. package/dist/src/config.js +140 -0
  29. package/dist/src/contract-schema.d.ts +85 -0
  30. package/dist/src/contract-schema.js +56 -0
  31. package/dist/src/contract-worker.d.ts +1 -0
  32. package/dist/src/contract-worker.js +123 -0
  33. package/dist/src/contracts.d.ts +22 -0
  34. package/dist/src/contracts.js +123 -0
  35. package/dist/src/django-evidence.d.ts +2 -0
  36. package/dist/src/django-evidence.js +100 -0
  37. package/dist/src/django-runner.d.ts +1 -0
  38. package/dist/src/django-runner.js +80 -0
  39. package/dist/src/django.d.ts +9 -0
  40. package/dist/src/django.js +50 -0
  41. package/dist/src/dotnet-compiler.d.ts +1 -0
  42. package/dist/src/dotnet-compiler.js +87 -0
  43. package/dist/src/dotnet-evidence.d.ts +2 -0
  44. package/dist/src/dotnet-evidence.js +127 -0
  45. package/dist/src/dotnet-runner.d.ts +1 -0
  46. package/dist/src/dotnet-runner.js +167 -0
  47. package/dist/src/dotnet.d.ts +65 -0
  48. package/dist/src/dotnet.js +120 -0
  49. package/dist/src/engine.d.ts +19 -0
  50. package/dist/src/engine.js +239 -0
  51. package/dist/src/environment.d.ts +6 -0
  52. package/dist/src/environment.js +36 -0
  53. package/dist/src/eslint-evidence.d.ts +2 -0
  54. package/dist/src/eslint-evidence.js +98 -0
  55. package/dist/src/eslint-runner.d.ts +1 -0
  56. package/dist/src/eslint-runner.js +61 -0
  57. package/dist/src/eslint.d.ts +2 -0
  58. package/dist/src/eslint.js +40 -0
  59. package/dist/src/evidence.d.ts +2 -0
  60. package/dist/src/evidence.js +313 -0
  61. package/dist/src/external-adapter.d.ts +164 -0
  62. package/dist/src/external-adapter.js +265 -0
  63. package/dist/src/external-evidence.d.ts +2 -0
  64. package/dist/src/external-evidence.js +127 -0
  65. package/dist/src/external-runner.d.ts +1 -0
  66. package/dist/src/external-runner.js +122 -0
  67. package/dist/src/fastapi-evidence.d.ts +2 -0
  68. package/dist/src/fastapi-evidence.js +126 -0
  69. package/dist/src/fastapi-runner.d.ts +1 -0
  70. package/dist/src/fastapi-runner.js +84 -0
  71. package/dist/src/fastapi.d.ts +10 -0
  72. package/dist/src/fastapi.js +52 -0
  73. package/dist/src/fetch-pack.d.ts +16 -0
  74. package/dist/src/fetch-pack.js +154 -0
  75. package/dist/src/finding-policy-schema.d.ts +146 -0
  76. package/dist/src/finding-policy-schema.js +70 -0
  77. package/dist/src/finding-policy.d.ts +62 -0
  78. package/dist/src/finding-policy.js +206 -0
  79. package/dist/src/git-selection.d.ts +3 -0
  80. package/dist/src/git-selection.js +229 -0
  81. package/dist/src/go-directives.d.ts +1 -0
  82. package/dist/src/go-directives.js +32 -0
  83. package/dist/src/go-scope.d.ts +11 -0
  84. package/dist/src/go-scope.js +122 -0
  85. package/dist/src/golangci-evidence.d.ts +2 -0
  86. package/dist/src/golangci-evidence.js +92 -0
  87. package/dist/src/golangci-runner.d.ts +1 -0
  88. package/dist/src/golangci-runner.js +124 -0
  89. package/dist/src/golangci.d.ts +2 -0
  90. package/dist/src/golangci.js +35 -0
  91. package/dist/src/guidance.d.ts +98 -0
  92. package/dist/src/guidance.js +247 -0
  93. package/dist/src/index.d.ts +31 -0
  94. package/dist/src/index.js +16 -0
  95. package/dist/src/inventory.d.ts +4 -0
  96. package/dist/src/inventory.js +94 -0
  97. package/dist/src/java-compiler.d.ts +1 -0
  98. package/dist/src/java-compiler.js +110 -0
  99. package/dist/src/java-evidence.d.ts +2 -0
  100. package/dist/src/java-evidence.js +114 -0
  101. package/dist/src/java-runner.d.ts +1 -0
  102. package/dist/src/java-runner.js +79 -0
  103. package/dist/src/java.d.ts +25 -0
  104. package/dist/src/java.js +102 -0
  105. package/dist/src/jest-evidence.d.ts +2 -0
  106. package/dist/src/jest-evidence.js +117 -0
  107. package/dist/src/jest-runner.d.ts +1 -0
  108. package/dist/src/jest-runner.js +46 -0
  109. package/dist/src/jest.d.ts +2 -0
  110. package/dist/src/jest.js +36 -0
  111. package/dist/src/junit.d.ts +18 -0
  112. package/dist/src/junit.js +157 -0
  113. package/dist/src/laravel-evidence.d.ts +2 -0
  114. package/dist/src/laravel-evidence.js +175 -0
  115. package/dist/src/laravel-runner.d.ts +1 -0
  116. package/dist/src/laravel-runner.js +168 -0
  117. package/dist/src/laravel.d.ts +8 -0
  118. package/dist/src/laravel.js +50 -0
  119. package/dist/src/local-tool.d.ts +1 -0
  120. package/dist/src/local-tool.js +19 -0
  121. package/dist/src/mcp.d.ts +14 -0
  122. package/dist/src/mcp.js +362 -0
  123. package/dist/src/mutation.d.ts +118 -0
  124. package/dist/src/mutation.js +370 -0
  125. package/dist/src/mypy-evidence.d.ts +2 -0
  126. package/dist/src/mypy-evidence.js +63 -0
  127. package/dist/src/mypy.d.ts +2 -0
  128. package/dist/src/mypy.js +59 -0
  129. package/dist/src/node-reporter.d.ts +1 -0
  130. package/dist/src/node-reporter.js +28 -0
  131. package/dist/src/nuxt-evidence.d.ts +2 -0
  132. package/dist/src/nuxt-evidence.js +160 -0
  133. package/dist/src/nuxt-protocol.d.ts +52 -0
  134. package/dist/src/nuxt-protocol.js +29 -0
  135. package/dist/src/nuxt-runner.d.ts +1 -0
  136. package/dist/src/nuxt-runner.js +165 -0
  137. package/dist/src/nuxt.d.ts +24 -0
  138. package/dist/src/nuxt.js +105 -0
  139. package/dist/src/output.d.ts +3 -0
  140. package/dist/src/output.js +48 -0
  141. package/dist/src/phpstan-evidence.d.ts +2 -0
  142. package/dist/src/phpstan-evidence.js +81 -0
  143. package/dist/src/phpstan.d.ts +2 -0
  144. package/dist/src/phpstan.js +51 -0
  145. package/dist/src/phpunit-evidence.d.ts +2 -0
  146. package/dist/src/phpunit-evidence.js +53 -0
  147. package/dist/src/phpunit.d.ts +2 -0
  148. package/dist/src/phpunit.js +58 -0
  149. package/dist/src/pint-evidence.d.ts +2 -0
  150. package/dist/src/pint-evidence.js +79 -0
  151. package/dist/src/pint-runner.d.ts +1 -0
  152. package/dist/src/pint-runner.js +53 -0
  153. package/dist/src/pint.d.ts +2 -0
  154. package/dist/src/pint.js +37 -0
  155. package/dist/src/playwright-evidence.d.ts +2 -0
  156. package/dist/src/playwright-evidence.js +127 -0
  157. package/dist/src/playwright-reporter.d.ts +10 -0
  158. package/dist/src/playwright-reporter.js +37 -0
  159. package/dist/src/playwright-runner.d.ts +1 -0
  160. package/dist/src/playwright-runner.js +61 -0
  161. package/dist/src/playwright.d.ts +2 -0
  162. package/dist/src/playwright.js +35 -0
  163. package/dist/src/policy-pack.d.ts +21 -0
  164. package/dist/src/policy-pack.js +41 -0
  165. package/dist/src/pytest-evidence.d.ts +2 -0
  166. package/dist/src/pytest-evidence.js +116 -0
  167. package/dist/src/pytest-runner.d.ts +1 -0
  168. package/dist/src/pytest-runner.js +48 -0
  169. package/dist/src/pytest.d.ts +2 -0
  170. package/dist/src/pytest.js +25 -0
  171. package/dist/src/report-validation.d.ts +129 -0
  172. package/dist/src/report-validation.js +27 -0
  173. package/dist/src/review.d.ts +270 -0
  174. package/dist/src/review.js +349 -0
  175. package/dist/src/ruby.d.ts +2 -0
  176. package/dist/src/ruby.js +25 -0
  177. package/dist/src/ruff-evidence.d.ts +2 -0
  178. package/dist/src/ruff-evidence.js +99 -0
  179. package/dist/src/ruff.d.ts +2 -0
  180. package/dist/src/ruff.js +40 -0
  181. package/dist/src/runner.d.ts +8 -0
  182. package/dist/src/runner.js +117 -0
  183. package/dist/src/runtime-inventory.d.ts +112 -0
  184. package/dist/src/runtime-inventory.js +200 -0
  185. package/dist/src/rust-dep-info.d.ts +1 -0
  186. package/dist/src/rust-dep-info.js +46 -0
  187. package/dist/src/rust-evidence.d.ts +2 -0
  188. package/dist/src/rust-evidence.js +157 -0
  189. package/dist/src/rust-runner.d.ts +1 -0
  190. package/dist/src/rust-runner.js +161 -0
  191. package/dist/src/rust.d.ts +7 -0
  192. package/dist/src/rust.js +39 -0
  193. package/dist/src/sarif.d.ts +86 -0
  194. package/dist/src/sarif.js +113 -0
  195. package/dist/src/schemas.d.ts +393 -0
  196. package/dist/src/schemas.js +222 -0
  197. package/dist/src/staticcheck-evidence.d.ts +2 -0
  198. package/dist/src/staticcheck-evidence.js +75 -0
  199. package/dist/src/swift.d.ts +2 -0
  200. package/dist/src/swift.js +20 -0
  201. package/dist/src/task-store.d.ts +37 -0
  202. package/dist/src/task-store.js +349 -0
  203. package/dist/src/tool-versions.d.ts +3 -0
  204. package/dist/src/tool-versions.js +260 -0
  205. package/dist/src/types.d.ts +157 -0
  206. package/dist/src/types.js +37 -0
  207. package/dist/src/typescript-build-evidence.d.ts +2 -0
  208. package/dist/src/typescript-build-evidence.js +86 -0
  209. package/dist/src/typescript-build-runner.d.ts +1 -0
  210. package/dist/src/typescript-build-runner.js +132 -0
  211. package/dist/src/typescript-build.d.ts +2 -0
  212. package/dist/src/typescript-build.js +41 -0
  213. package/dist/src/typescript.d.ts +2 -0
  214. package/dist/src/typescript.js +54 -0
  215. package/dist/src/validation-task-worker.d.ts +1 -0
  216. package/dist/src/validation-task-worker.js +205 -0
  217. package/dist/src/validation-tasks-protocol.d.ts +69 -0
  218. package/dist/src/validation-tasks-protocol.js +57 -0
  219. package/dist/src/validation-tasks.d.ts +11 -0
  220. package/dist/src/validation-tasks.js +144 -0
  221. package/dist/src/vitest-evidence.d.ts +2 -0
  222. package/dist/src/vitest-evidence.js +112 -0
  223. package/dist/src/vitest-runner.d.ts +1 -0
  224. package/dist/src/vitest-runner.js +48 -0
  225. package/dist/src/vitest.d.ts +2 -0
  226. package/dist/src/vitest.js +36 -0
  227. package/dist/src/vue-router-capture.d.ts +42 -0
  228. package/dist/src/vue-router-capture.js +87 -0
  229. package/dist/src/vue-router-evidence.d.ts +2 -0
  230. package/dist/src/vue-router-evidence.js +126 -0
  231. package/dist/src/vue-router-protocol.d.ts +63 -0
  232. package/dist/src/vue-router-protocol.js +44 -0
  233. package/dist/src/vue-router-runner.d.ts +1 -0
  234. package/dist/src/vue-router-runner.js +88 -0
  235. package/dist/src/vue-router.d.ts +23 -0
  236. package/dist/src/vue-router.js +108 -0
  237. package/dist/src/vue-tsc-runner.d.ts +1 -0
  238. package/dist/src/vue-tsc-runner.js +24 -0
  239. package/dist/src/workspace.d.ts +7 -0
  240. package/dist/src/workspace.js +53 -0
  241. package/docs/ACCEPTANCE.md +56 -0
  242. package/docs/ACTIONLINT.md +112 -0
  243. package/docs/ARCHITECTURE-POLICY.md +82 -0
  244. package/docs/ARCHITECTURE.md +122 -0
  245. package/docs/CLANG.md +113 -0
  246. package/docs/CLIENTS.md +109 -0
  247. package/docs/CONTRACTS.md +73 -0
  248. package/docs/DEPENDENCIES.md +42 -0
  249. package/docs/DJANGO.md +70 -0
  250. package/docs/DOTNET.md +114 -0
  251. package/docs/ENVIRONMENTS.md +52 -0
  252. package/docs/ESLINT.md +68 -0
  253. package/docs/EVALUATION.md +124 -0
  254. package/docs/EXECUTION.md +250 -0
  255. package/docs/EXTERNAL-ADAPTERS.md +170 -0
  256. package/docs/EXTERNAL-EVALUATION.md +155 -0
  257. package/docs/EXTERNAL-RUFF-EVALUATION.md +85 -0
  258. package/docs/FASTAPI.md +73 -0
  259. package/docs/FINDING-POLICY.md +67 -0
  260. package/docs/GO-RACE.md +19 -0
  261. package/docs/GO-SCOPE.md +63 -0
  262. package/docs/GOLANGCI-LINT.md +64 -0
  263. package/docs/GUIDANCE.md +46 -0
  264. package/docs/IMPACT-MEASUREMENT.md +97 -0
  265. package/docs/INSTALLATION.md +102 -0
  266. package/docs/JAVA.md +79 -0
  267. package/docs/JEST.md +36 -0
  268. package/docs/JUNIT.md +31 -0
  269. package/docs/LANGUAGES.md +113 -0
  270. package/docs/LARAVEL.md +111 -0
  271. package/docs/MCP-COMPATIBILITY.md +68 -0
  272. package/docs/MUTATIONS.md +93 -0
  273. package/docs/MYPY.md +37 -0
  274. package/docs/NATIVE-CI.md +96 -0
  275. package/docs/NUXT.md +123 -0
  276. package/docs/PACK-DISTRIBUTION.md +98 -0
  277. package/docs/PERFORMANCE.md +71 -0
  278. package/docs/PEST.md +36 -0
  279. package/docs/PHPSTAN.md +48 -0
  280. package/docs/PHPUNIT.md +32 -0
  281. package/docs/PINT.md +41 -0
  282. package/docs/PLAN.md +265 -0
  283. package/docs/PLAYWRIGHT.md +73 -0
  284. package/docs/POLICY-PACKS.md +106 -0
  285. package/docs/PRIOR-WORKFLOW-EVALUATION.md +116 -0
  286. package/docs/PUBLICATION.md +28 -0
  287. package/docs/PYTEST.md +51 -0
  288. package/docs/RELEASE.md +115 -0
  289. package/docs/RENAMING.md +55 -0
  290. package/docs/REVIEW-EXCHANGE.md +136 -0
  291. package/docs/RUBY.md +50 -0
  292. package/docs/RUFF.md +39 -0
  293. package/docs/RUNTIME-INVENTORY.md +56 -0
  294. package/docs/RUST.md +74 -0
  295. package/docs/SARIF.md +64 -0
  296. package/docs/STATUS.md +530 -0
  297. package/docs/SWIFT.md +48 -0
  298. package/docs/TASK-STORAGE.md +141 -0
  299. package/docs/TOOL-IDENTITY.md +30 -0
  300. package/docs/TYPESCRIPT-BUILD.md +55 -0
  301. package/docs/VALIDATION-TASKS.md +119 -0
  302. package/docs/VITEST.md +36 -0
  303. package/docs/VUE-ROUTER.md +130 -0
  304. package/docs/VUE-TSC.md +26 -0
  305. package/docs/WORKSPACES.md +81 -0
  306. package/docs/licenses/nodable-entities-3.0.0.txt +21 -0
  307. package/docs/measurements/client-claude-before-schema-fix-darwin-arm64-node26.json +60 -0
  308. package/docs/measurements/client-claude-darwin-arm64-node26.json +55 -0
  309. package/docs/measurements/client-codex-darwin-arm64-node26.json +175 -0
  310. package/docs/measurements/evaluation-corpus-repo-verifier.json +332 -0
  311. package/docs/measurements/evaluation-darwin-arm64-node26.json +1236 -0
  312. package/docs/measurements/evaluation-linux-arm64-node22.json +1236 -0
  313. package/docs/measurements/external-eslint-darwin-arm64-node26.json +11866 -0
  314. package/docs/measurements/external-eslint-linux-arm64-node22.json +11866 -0
  315. package/docs/measurements/external-eslint-preservation.json +1527 -0
  316. package/docs/measurements/external-ruff-darwin-arm64-node26.json +1031 -0
  317. package/docs/measurements/external-ruff-linux-arm64-node22.json +1031 -0
  318. package/docs/measurements/hosted-ci-52ba415.json +1005 -0
  319. package/docs/measurements/impact-darwin-arm64-node26.json +6685 -0
  320. package/docs/measurements/impact-linux-arm64-node22.json +6690 -0
  321. package/docs/measurements/performance-darwin-arm64-node26.json +845 -0
  322. package/docs/measurements/performance-linux-arm64-node22.json +845 -0
  323. package/docs/measurements/required-native-profiles.json +500 -0
  324. package/package.json +72 -0
  325. package/packs/actionlint.json +8 -0
  326. package/packs/cpp.json +8 -0
  327. package/packs/dotnet.json +8 -0
  328. package/packs/go.json +7 -0
  329. package/packs/java.json +8 -0
  330. package/packs/javascript-node.json +7 -0
  331. package/packs/nuxt.json +7 -0
  332. package/packs/php-pest.json +7 -0
  333. package/packs/php-phpunit.json +7 -0
  334. package/packs/python-pytest.json +7 -0
  335. package/packs/ruby.json +7 -0
  336. package/packs/rust.json +7 -0
  337. package/packs/swift.json +7 -0
  338. package/packs/vue-router.json +7 -0
  339. package/packs/vue.json +11 -0
  340. package/schemas/actionlint-config.schema.json +19 -0
  341. package/schemas/architecture-policy.schema.json +51 -0
  342. package/schemas/architecture-report.schema.json +123 -0
  343. package/schemas/architecture-summary.schema.json +82 -0
  344. package/schemas/clang-database.schema.json +23 -0
  345. package/schemas/config.schema.json +69 -0
  346. package/schemas/contract-bundle.schema.json +78 -0
  347. package/schemas/contract-report.schema.json +114 -0
  348. package/schemas/contract-summary.schema.json +72 -0
  349. package/schemas/dependency-graph.schema.json +65 -0
  350. package/schemas/django-config.schema.json +16 -0
  351. package/schemas/dotnet-config.schema.json +60 -0
  352. package/schemas/external-manifest.schema.json +97 -0
  353. package/schemas/external-reference.schema.json +10 -0
  354. package/schemas/external-request.schema.json +56 -0
  355. package/schemas/external-result.schema.json +111 -0
  356. package/schemas/fastapi-config.schema.json +27 -0
  357. package/schemas/finding-baseline.schema.json +92 -0
  358. package/schemas/finding-comparison-summary.schema.json +95 -0
  359. package/schemas/finding-comparison.schema.json +121 -0
  360. package/schemas/guidance-context.schema.json +34 -0
  361. package/schemas/guidance-report.schema.json +176 -0
  362. package/schemas/guidance-summary.schema.json +68 -0
  363. package/schemas/java-config.schema.json +24 -0
  364. package/schemas/junit.schema.json +69 -0
  365. package/schemas/laravel-config.schema.json +11 -0
  366. package/schemas/mutation-recipe.schema.json +31 -0
  367. package/schemas/mutation-report.schema.json +238 -0
  368. package/schemas/mutation-summary.schema.json +98 -0
  369. package/schemas/nuxt-config.schema.json +51 -0
  370. package/schemas/plan-summary.schema.json +63 -0
  371. package/schemas/plan.schema.json +244 -0
  372. package/schemas/policy-pack.schema.json +41 -0
  373. package/schemas/report-summary.schema.json +100 -0
  374. package/schemas/report.schema.json +463 -0
  375. package/schemas/review-assessment.schema.json +133 -0
  376. package/schemas/review-context-summary.schema.json +31 -0
  377. package/schemas/review-context.schema.json +254 -0
  378. package/schemas/review-receipt-summary.schema.json +104 -0
  379. package/schemas/review-receipt.schema.json +271 -0
  380. package/schemas/review-selection.schema.json +30 -0
  381. package/schemas/runtime-comparison-summary.schema.json +68 -0
  382. package/schemas/runtime-comparison.schema.json +127 -0
  383. package/schemas/runtime-inventory.schema.json +99 -0
  384. package/schemas/vue-router-config.schema.json +67 -0
  385. package/server.json +47 -0
@@ -0,0 +1,430 @@
1
+ import { actionlintCheck, workflowRoot } from "./actionlint.js";
2
+ import { clangCheck } from "./clang.js";
3
+ import { javaCheck } from "./java.js";
4
+ import { dotnetCheck } from "./dotnet.js";
5
+ import { swiftCheck } from "./swift.js";
6
+ import { rubyCheck } from "./ruby.js";
7
+ import { rustCheck } from "./rust.js";
8
+ import { golangciCheck } from "./golangci.js";
9
+ import { fastapiCheck } from "./fastapi.js";
10
+ import { laravelCheck } from "./laravel.js";
11
+ import { djangoCheck } from "./django.js";
12
+ import { nuxtCheck } from "./nuxt.js";
13
+ import { vueRouterCheck } from "./vue-router.js";
14
+ import { goEnvironment, goScopeCommand } from "./go-scope.js";
15
+ import { pintCheck } from "./pint.js";
16
+ import path from "node:path";
17
+ import { phpunitCheck } from "./phpunit.js";
18
+ import { phpstanCheck } from "./phpstan.js";
19
+ import { mypyCheck } from "./mypy.js";
20
+ import { ruffCheck } from "./ruff.js";
21
+ import { pytestCheck } from "./pytest.js";
22
+ import { fileURLToPath } from "node:url";
23
+ import { readProjectFile } from "./inventory.js";
24
+ import { typescriptBuildCheck } from "./typescript-build.js";
25
+ import { typescriptCheck } from "./typescript.js";
26
+ import { eslintCheck } from "./eslint.js";
27
+ import { playwrightCheck } from "./playwright.js";
28
+ import { jestCheck } from "./jest.js";
29
+ import { vitestCheck } from "./vitest.js";
30
+ export const adapters = [
31
+ {
32
+ id: "javascript",
33
+ markers: ["package.json"],
34
+ checks: [
35
+ "javascript.node-test",
36
+ "javascript.typescript",
37
+ "javascript.typescript-build",
38
+ "javascript.vue-tsc",
39
+ "javascript.vue-router",
40
+ "javascript.nuxt-runtime",
41
+ "javascript.eslint",
42
+ "javascript.vitest",
43
+ "javascript.jest",
44
+ "javascript.playwright",
45
+ ],
46
+ },
47
+ {
48
+ id: "python",
49
+ markers: ["pyproject.toml", "setup.py", "requirements.txt"],
50
+ checks: [
51
+ "python.unittest",
52
+ "python.pytest",
53
+ "python.ruff",
54
+ "python.mypy",
55
+ "python.fastapi-routes",
56
+ "python.django-routes",
57
+ ],
58
+ },
59
+ {
60
+ id: "go",
61
+ markers: ["go.mod"],
62
+ checks: [
63
+ "go.format",
64
+ "go.vet",
65
+ "go.test",
66
+ "go.test-race",
67
+ "go.staticcheck",
68
+ "go.golangci-lint",
69
+ ],
70
+ },
71
+ {
72
+ id: "php",
73
+ markers: ["composer.json"],
74
+ checks: [
75
+ "php.syntax",
76
+ "php.phpstan",
77
+ "php.phpunit",
78
+ "php.pest",
79
+ "php.pint",
80
+ "php.laravel-runtime",
81
+ ],
82
+ },
83
+ { id: "rust", markers: ["Cargo.toml"], checks: ["rust.cargo-check"] },
84
+ {
85
+ id: "jvm",
86
+ markers: ["pom.xml", "build.gradle", "build.gradle.kts"],
87
+ checks: ["jvm.javac"],
88
+ },
89
+ { id: "dotnet", markers: [], checks: ["dotnet.csharp"] },
90
+ { id: "ruby", markers: ["Gemfile"], checks: ["ruby.syntax"] },
91
+ { id: "swift", markers: ["Package.swift"], checks: ["swift.syntax"] },
92
+ {
93
+ id: "cpp",
94
+ markers: ["CMakeLists.txt", "meson.build", "compile_commands.json"],
95
+ checks: ["cpp.clang-check"],
96
+ },
97
+ {
98
+ id: "infrastructure",
99
+ markers: ["Chart.yaml", "kustomization.yaml"],
100
+ checks: ["infrastructure.actionlint"],
101
+ },
102
+ ];
103
+ function matches(adapter, name) {
104
+ return (adapter.markers.includes(name) ||
105
+ (adapter.id === "dotnet" &&
106
+ /\.(csproj|fsproj|vbproj|sln|slnx)$/.test(name)) ||
107
+ (adapter.id === "ruby" && name.endsWith(".gemspec")) ||
108
+ (adapter.id === "infrastructure" && name.endsWith(".tf")));
109
+ }
110
+ export function discover(source, external = []) {
111
+ const found = new Map();
112
+ for (const file of source.files) {
113
+ const name = path.posix.basename(file);
114
+ for (const adapter of [
115
+ ...adapters,
116
+ ...external.map((item) => ({
117
+ id: item.identity.id,
118
+ markers: item.manifest.markers,
119
+ })),
120
+ ]) {
121
+ const workflow = adapter.id === "infrastructure" ? workflowRoot(file) : undefined;
122
+ if (!matches(adapter, name) && workflow === undefined)
123
+ continue;
124
+ const directory = workflow ?? path.posix.dirname(file);
125
+ const key = `${directory}:${adapter.id}`;
126
+ const project = found.get(key) ?? {
127
+ path: directory,
128
+ adapter: adapter.id,
129
+ markers: [],
130
+ files: [],
131
+ };
132
+ project.markers.push(file);
133
+ found.set(key, project);
134
+ }
135
+ }
136
+ const projects = [...found.values()].sort((a, b) => `${a.path}:${a.adapter}`.localeCompare(`${b.path}:${b.adapter}`, "en"));
137
+ for (const project of projects) {
138
+ const prefix = project.path === "." ? "" : `${project.path}/`;
139
+ const children = projects.filter((child) => child.path !== project.path && child.path.startsWith(prefix));
140
+ project.files = source.files
141
+ .filter((file) => file.startsWith(prefix) &&
142
+ !children.some((child) => file.startsWith(`${child.path}/`)))
143
+ .map((file) => file.slice(prefix.length));
144
+ }
145
+ return projects;
146
+ }
147
+ export async function checksFor(source, project, requested) {
148
+ const explicit = requested !== undefined;
149
+ const base = {
150
+ adapter: project.adapter,
151
+ project: project.path,
152
+ scope: project.files,
153
+ commands: [],
154
+ parser: "exit",
155
+ };
156
+ if (project.adapter === "javascript") {
157
+ const manifest = JSON.parse(await readProjectFile(source.root, path.posix.join(project.path, "package.json")));
158
+ const scripts = typeof manifest === "object" && manifest !== null && "scripts" in manifest
159
+ ? manifest.scripts
160
+ : undefined;
161
+ const script = typeof scripts === "object" && scripts !== null && "test" in scripts
162
+ ? scripts.test
163
+ : undefined;
164
+ const files = project.files.filter((file) => /\.(test|spec)\.[cm]?js$/.test(file));
165
+ const reason = "Run JavaScript tests with the native Node runner; TypeScript and framework runners need separate adapters.";
166
+ const check = {
167
+ ...base,
168
+ id: "javascript.node-test",
169
+ kind: "test",
170
+ parser: "node-events",
171
+ scope: files,
172
+ reason,
173
+ commands: [
174
+ {
175
+ executable: process.execPath,
176
+ args: [
177
+ "--test",
178
+ `--test-reporter=${fileURLToPath(new URL("./node-reporter.js", import.meta.url))}`,
179
+ ...files.map((file) => `./${file}`),
180
+ ],
181
+ cwd: project.path,
182
+ },
183
+ ],
184
+ };
185
+ if (!explicit && script !== "node --test") {
186
+ check.unavailableReason =
187
+ "Node runner is not explicitly selected. Set scripts.test to node --test or select javascript.node-test in policy after verifying the runner.";
188
+ }
189
+ else if (files.length === 0) {
190
+ check.unavailableReason =
191
+ "No .test.js/.spec.js (or .mjs/.cjs) files were discovered.";
192
+ }
193
+ return explicit
194
+ ? [
195
+ check,
196
+ await typescriptCheck(source, project),
197
+ await typescriptBuildCheck(source, project),
198
+ await typescriptCheck(source, project, true),
199
+ ...(requested?.includes("javascript.nuxt-runtime")
200
+ ? [await nuxtCheck(source, project)]
201
+ : []),
202
+ ...(requested?.includes("javascript.vue-router")
203
+ ? [await vueRouterCheck(source, project)]
204
+ : []),
205
+ await eslintCheck(source, project),
206
+ await vitestCheck(source, project),
207
+ await jestCheck(source, project),
208
+ await playwrightCheck(source, project),
209
+ ]
210
+ : [check];
211
+ }
212
+ if (project.adapter === "python") {
213
+ const files = project.files.filter((file) => /(^|\/)test[^/]*\.py$/.test(file));
214
+ const start = files.some((file) => file.startsWith("tests/"))
215
+ ? "tests"
216
+ : ".";
217
+ const check = {
218
+ ...base,
219
+ id: "python.unittest",
220
+ kind: "test",
221
+ parser: "unittest",
222
+ scope: files,
223
+ commands: [
224
+ {
225
+ executable: "python3",
226
+ args: ["-m", "unittest", "discover", "-s", start, "-p", "test*.py"],
227
+ cwd: project.path,
228
+ env: { PYTHONDONTWRITEBYTECODE: "1" },
229
+ },
230
+ ],
231
+ reason: "Use the standard-library unittest runner only when explicitly selected.",
232
+ };
233
+ if (!explicit)
234
+ check.unavailableReason =
235
+ "Select python.unittest explicitly; a Python manifest does not identify its test framework.";
236
+ else if (files.length === 0)
237
+ check.unavailableReason = "No unittest candidate files were discovered.";
238
+ return explicit
239
+ ? [
240
+ check,
241
+ pytestCheck(project),
242
+ ruffCheck(project),
243
+ mypyCheck(project),
244
+ ...(requested?.includes("python.fastapi-routes")
245
+ ? [await fastapiCheck(source, project)]
246
+ : []),
247
+ ...(requested?.includes("python.django-routes")
248
+ ? [await djangoCheck(source, project)]
249
+ : []),
250
+ ]
251
+ : [check];
252
+ }
253
+ if (project.adapter === "go") {
254
+ const goFiles = project.files.filter((file) => file.endsWith(".go"));
255
+ const env = goEnvironment;
256
+ const format = {
257
+ ...base,
258
+ id: "go.format",
259
+ kind: "format",
260
+ parser: "empty",
261
+ scope: goFiles,
262
+ commands: goFiles.map((file) => ({
263
+ executable: "gofmt",
264
+ args: ["-l", `./${file}`],
265
+ cwd: project.path,
266
+ })),
267
+ reason: "Check formatting of inventoried Go files without rewriting them.",
268
+ };
269
+ if (!goFiles.length)
270
+ format.unavailableReason = "No Go files were discovered.";
271
+ const checks = [
272
+ format,
273
+ {
274
+ ...base,
275
+ id: "go.vet",
276
+ kind: "analysis",
277
+ parser: "go-scope-analysis",
278
+ scope: goFiles,
279
+ commands: [
280
+ goScopeCommand(project.path),
281
+ { executable: "go", args: ["vet", "./..."], cwd: project.path, env },
282
+ ],
283
+ reason: "Vet the whole Go module; dependency downloads and module edits are disabled.",
284
+ },
285
+ {
286
+ ...base,
287
+ id: "go.test",
288
+ kind: "test",
289
+ parser: "go-scope-test",
290
+ scope: goFiles,
291
+ commands: [
292
+ goScopeCommand(project.path),
293
+ {
294
+ executable: "go",
295
+ args: ["test", "-json", "-count=1", "./..."],
296
+ cwd: project.path,
297
+ env,
298
+ },
299
+ ],
300
+ reason: "Run module tests without cached results and parse test events.",
301
+ },
302
+ ];
303
+ if (explicit)
304
+ checks.push({
305
+ ...base,
306
+ id: "go.test-race",
307
+ kind: "test",
308
+ parser: "go-scope-test",
309
+ scope: goFiles,
310
+ commands: [
311
+ goScopeCommand(project.path, {
312
+ ...env,
313
+ CGO_ENABLED: "1",
314
+ GORACE: "exitcode=66 log_path=stderr",
315
+ }),
316
+ {
317
+ executable: "go",
318
+ args: ["test", "-race", "-json", "-count=1", "./..."],
319
+ cwd: project.path,
320
+ env: {
321
+ ...env,
322
+ CGO_ENABLED: "1",
323
+ GORACE: "exitcode=66 log_path=stderr",
324
+ },
325
+ },
326
+ ],
327
+ reason: "Run uncached module tests with the native race detector; requires a supported platform and C compiler.",
328
+ });
329
+ if (explicit)
330
+ checks.push({
331
+ ...base,
332
+ id: "go.staticcheck",
333
+ kind: "analysis",
334
+ parser: "staticcheck-json",
335
+ scope: goFiles,
336
+ commands: [
337
+ goScopeCommand(project.path),
338
+ {
339
+ executable: "staticcheck",
340
+ args: [
341
+ "-f",
342
+ "json",
343
+ "-checks=all",
344
+ "-fail=all",
345
+ "-show-ignored",
346
+ "-tests=true",
347
+ "./...",
348
+ ],
349
+ cwd: project.path,
350
+ env,
351
+ },
352
+ ],
353
+ reason: "Run installed Staticcheck with all checks, surfaced suppressions and native Go file accounting.",
354
+ });
355
+ if (explicit)
356
+ checks.push(await golangciCheck(source, project));
357
+ return checks;
358
+ }
359
+ if (project.adapter === "infrastructure") {
360
+ const workflow = project.markers.some((file) => workflowRoot(file) === project.path);
361
+ const other = project.markers.filter((file) => workflowRoot(file) !== project.path);
362
+ return [
363
+ ...(workflow || requested?.includes("infrastructure.actionlint")
364
+ ? [await actionlintCheck(source, project)]
365
+ : []),
366
+ ...(!explicit && other.length
367
+ ? [
368
+ {
369
+ ...base,
370
+ id: "infrastructure.unsupported",
371
+ kind: "unsupported",
372
+ scope: other.map((file) => path.posix.relative(project.path, file)),
373
+ reason: "Terraform, Helm and Kustomize execution require separate verified profiles.",
374
+ unavailableReason: "No registered execution profile for these infrastructure inputs.",
375
+ },
376
+ ]
377
+ : []),
378
+ ];
379
+ }
380
+ if (project.adapter === "cpp")
381
+ return [await clangCheck(source, project)];
382
+ if (project.adapter === "jvm")
383
+ return [await javaCheck(source, project)];
384
+ if (project.adapter === "dotnet")
385
+ return [await dotnetCheck(source, project)];
386
+ if (project.adapter === "swift")
387
+ return [swiftCheck(project)];
388
+ if (project.adapter === "ruby")
389
+ return [rubyCheck(project)];
390
+ if (project.adapter === "rust")
391
+ return [rustCheck(source, project)];
392
+ if (project.adapter === "php") {
393
+ const files = project.files.filter((file) => file.endsWith(".php"));
394
+ const check = {
395
+ ...base,
396
+ id: "php.syntax",
397
+ kind: "syntax",
398
+ scope: files,
399
+ commands: files.map((file) => ({
400
+ executable: "php",
401
+ args: ["-n", "-l", `./${file}`],
402
+ cwd: project.path,
403
+ })),
404
+ reason: "Lint PHP syntax without loading php.ini; this provides no test or type evidence.",
405
+ };
406
+ if (!files.length)
407
+ check.unavailableReason = "No PHP files were discovered.";
408
+ return explicit
409
+ ? [
410
+ check,
411
+ await phpstanCheck(source, project),
412
+ await phpunitCheck(source, project),
413
+ await phpunitCheck(source, project, true),
414
+ await pintCheck(source, project),
415
+ ...(requested?.includes("php.laravel-runtime")
416
+ ? [await laravelCheck(source, project)]
417
+ : []),
418
+ ]
419
+ : [check];
420
+ }
421
+ return [
422
+ {
423
+ ...base,
424
+ id: `${project.adapter}.unsupported`,
425
+ kind: "unsupported",
426
+ reason: "This ecosystem is detected but execution support is not implemented.",
427
+ unavailableReason: "No registered execution adapter for this ecosystem.",
428
+ },
429
+ ];
430
+ }
@@ -0,0 +1,107 @@
1
+ import { z } from "zod";
2
+ export declare const dependencyGraphSchema: z.ZodObject<{
3
+ schemaVersion: z.ZodLiteral<1>;
4
+ format: z.ZodLiteral<"dependency-graph">;
5
+ capturedAt: z.ZodISODateTime;
6
+ collector: z.ZodObject<{
7
+ name: z.ZodString;
8
+ version: z.ZodString;
9
+ }, z.core.$strict>;
10
+ complete: z.ZodBoolean;
11
+ projects: z.ZodArray<z.ZodObject<{
12
+ id: z.ZodString;
13
+ language: z.ZodString;
14
+ sourceFingerprint: z.ZodString;
15
+ complete: z.ZodBoolean;
16
+ }, z.core.$strict>>;
17
+ dependencies: z.ZodArray<z.ZodObject<{
18
+ consumer: z.ZodString;
19
+ producer: z.ZodString;
20
+ }, z.core.$strict>>;
21
+ }, z.core.$strict>;
22
+ export declare const architecturePolicySchema: z.ZodObject<{
23
+ schemaVersion: z.ZodLiteral<1>;
24
+ format: z.ZodLiteral<"architecture-policy">;
25
+ projects: z.ZodArray<z.ZodObject<{
26
+ id: z.ZodString;
27
+ layer: z.ZodString;
28
+ }, z.core.$strict>>;
29
+ layers: z.ZodArray<z.ZodString>;
30
+ allowedDependencies: z.ZodArray<z.ZodObject<{
31
+ consumer: z.ZodString;
32
+ producer: z.ZodString;
33
+ }, z.core.$strict>>;
34
+ requireAcyclic: z.ZodBoolean;
35
+ }, z.core.$strict>;
36
+ export declare const architectureReportSchema: z.ZodObject<{
37
+ schemaVersion: z.ZodLiteral<1>;
38
+ engineVersion: z.ZodString;
39
+ provenance: z.ZodLiteral<"imported-dependency-graph">;
40
+ outcome: z.ZodEnum<{
41
+ passed: "passed";
42
+ failed: "failed";
43
+ incomplete: "incomplete";
44
+ }>;
45
+ reason: z.ZodString;
46
+ artifactFingerprint: z.ZodString;
47
+ policyFingerprint: z.ZodString;
48
+ captureComplete: z.ZodBoolean;
49
+ counts: z.ZodObject<{
50
+ projects: z.ZodNumber;
51
+ verifiedProjects: z.ZodNumber;
52
+ unverifiedProjects: z.ZodNumber;
53
+ dependencies: z.ZodNumber;
54
+ allowed: z.ZodNumber;
55
+ forbidden: z.ZodNumber;
56
+ unverified: z.ZodNumber;
57
+ cycles: z.ZodNumber;
58
+ }, z.core.$strict>;
59
+ projects: z.ZodArray<z.ZodObject<{
60
+ id: z.ZodString;
61
+ status: z.ZodEnum<{
62
+ incomplete: "incomplete";
63
+ verified: "verified";
64
+ missing: "missing";
65
+ unconfigured: "unconfigured";
66
+ }>;
67
+ }, z.core.$strict>>;
68
+ dependencies: z.ZodArray<z.ZodObject<{
69
+ consumer: z.ZodString;
70
+ producer: z.ZodString;
71
+ status: z.ZodEnum<{
72
+ unverified: "unverified";
73
+ allowed: "allowed";
74
+ forbidden: "forbidden";
75
+ }>;
76
+ }, z.core.$strict>>;
77
+ cycles: z.ZodArray<z.ZodArray<z.ZodString>>;
78
+ }, z.core.$strict>;
79
+ export declare const architectureSummarySchema: z.ZodObject<{
80
+ schemaVersion: z.ZodLiteral<1>;
81
+ engineVersion: z.ZodString;
82
+ provenance: z.ZodLiteral<"imported-dependency-graph">;
83
+ outcome: z.ZodEnum<{
84
+ passed: "passed";
85
+ failed: "failed";
86
+ incomplete: "incomplete";
87
+ }>;
88
+ reason: z.ZodString;
89
+ counts: z.ZodObject<{
90
+ projects: z.ZodNumber;
91
+ verifiedProjects: z.ZodNumber;
92
+ unverifiedProjects: z.ZodNumber;
93
+ dependencies: z.ZodNumber;
94
+ allowed: z.ZodNumber;
95
+ forbidden: z.ZodNumber;
96
+ unverified: z.ZodNumber;
97
+ cycles: z.ZodNumber;
98
+ }, z.core.$strict>;
99
+ artifactFingerprint: z.ZodString;
100
+ policyFingerprint: z.ZodString;
101
+ captureComplete: z.ZodBoolean;
102
+ }, z.core.$strict>;
103
+ export type DependencyGraph = z.infer<typeof dependencyGraphSchema>;
104
+ export type ArchitecturePolicy = z.infer<typeof architecturePolicySchema>;
105
+ export type ArchitectureReport = z.infer<typeof architectureReportSchema>;
106
+ export declare function checkArchitecture(graphInput: unknown, policyInput: unknown): ArchitectureReport;
107
+ export declare function projectArchitectureReport(report: ArchitectureReport, detailed: boolean): Record<string, unknown>;