@lyse-labs/lyse 0.1.0-alpha.2

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 (510) hide show
  1. package/LICENSE +45 -0
  2. package/PRIVACY.md +181 -0
  3. package/README.md +34 -0
  4. package/SECURITY.md +43 -0
  5. package/dist/bench/evidence-pack/anti-dummy.d.ts +11 -0
  6. package/dist/bench/evidence-pack/anti-dummy.js +20 -0
  7. package/dist/bench/evidence-pack/anti-dummy.js.map +1 -0
  8. package/dist/bench/evidence-pack/builder.d.ts +14 -0
  9. package/dist/bench/evidence-pack/builder.js +77 -0
  10. package/dist/bench/evidence-pack/builder.js.map +1 -0
  11. package/dist/bench/evidence-pack/histograms.d.ts +2 -0
  12. package/dist/bench/evidence-pack/histograms.js +131 -0
  13. package/dist/bench/evidence-pack/histograms.js.map +1 -0
  14. package/dist/bench/evidence-pack/manifest-detector.d.ts +2 -0
  15. package/dist/bench/evidence-pack/manifest-detector.js +65 -0
  16. package/dist/bench/evidence-pack/manifest-detector.js.map +1 -0
  17. package/dist/bench/evidence-pack/package-json-digest.d.ts +2 -0
  18. package/dist/bench/evidence-pack/package-json-digest.js +51 -0
  19. package/dist/bench/evidence-pack/package-json-digest.js.map +1 -0
  20. package/dist/bench/evidence-pack/sampler.d.ts +2 -0
  21. package/dist/bench/evidence-pack/sampler.js +140 -0
  22. package/dist/bench/evidence-pack/sampler.js.map +1 -0
  23. package/dist/bench/evidence-pack/types.d.ts +127 -0
  24. package/dist/bench/evidence-pack/types.js +2 -0
  25. package/dist/bench/evidence-pack/types.js.map +1 -0
  26. package/dist/bench/evidence-pack/verifier-corpus.d.ts +5 -0
  27. package/dist/bench/evidence-pack/verifier-corpus.js +13 -0
  28. package/dist/bench/evidence-pack/verifier-corpus.js.map +1 -0
  29. package/dist/bench/taxonomy-loader.d.ts +20 -0
  30. package/dist/bench/taxonomy-loader.js +28 -0
  31. package/dist/bench/taxonomy-loader.js.map +1 -0
  32. package/dist/bench/taxonomy.v3.json +20 -0
  33. package/dist/cli/__tests__/version-migration.test.d.ts +1 -0
  34. package/dist/cli/__tests__/version-migration.test.js +69 -0
  35. package/dist/cli/__tests__/version-migration.test.js.map +1 -0
  36. package/dist/cli/output/__tests__/eslint-style.test.d.ts +1 -0
  37. package/dist/cli/output/__tests__/eslint-style.test.js +205 -0
  38. package/dist/cli/output/__tests__/eslint-style.test.js.map +1 -0
  39. package/dist/cli/output/__tests__/limit.test.d.ts +1 -0
  40. package/dist/cli/output/__tests__/limit.test.js +65 -0
  41. package/dist/cli/output/__tests__/limit.test.js.map +1 -0
  42. package/dist/cli/output/eslint-style.d.ts +18 -0
  43. package/dist/cli/output/eslint-style.js +42 -0
  44. package/dist/cli/output/eslint-style.js.map +1 -0
  45. package/dist/cli/output/limit.d.ts +5 -0
  46. package/dist/cli/output/limit.js +32 -0
  47. package/dist/cli/output/limit.js.map +1 -0
  48. package/dist/cli/output/score-gauge.d.ts +4 -0
  49. package/dist/cli/output/score-gauge.js +15 -0
  50. package/dist/cli/output/score-gauge.js.map +1 -0
  51. package/dist/cli/version-migration.d.ts +18 -0
  52. package/dist/cli/version-migration.js +49 -0
  53. package/dist/cli/version-migration.js.map +1 -0
  54. package/dist/cli.d.ts +2 -0
  55. package/dist/cli.js +856 -0
  56. package/dist/cli.js.map +1 -0
  57. package/dist/codemods/diff.d.ts +17 -0
  58. package/dist/codemods/diff.js +77 -0
  59. package/dist/codemods/diff.js.map +1 -0
  60. package/dist/codemods/git-helpers.d.ts +10 -0
  61. package/dist/codemods/git-helpers.js +75 -0
  62. package/dist/codemods/git-helpers.js.map +1 -0
  63. package/dist/codemods/index.d.ts +27 -0
  64. package/dist/codemods/index.js +40 -0
  65. package/dist/codemods/index.js.map +1 -0
  66. package/dist/codemods/naming-component-pascalcase.d.ts +13 -0
  67. package/dist/codemods/naming-component-pascalcase.js +106 -0
  68. package/dist/codemods/naming-component-pascalcase.js.map +1 -0
  69. package/dist/codemods/naming-hook-prefix.d.ts +13 -0
  70. package/dist/codemods/naming-hook-prefix.js +86 -0
  71. package/dist/codemods/naming-hook-prefix.js.map +1 -0
  72. package/dist/codemods/safety.d.ts +50 -0
  73. package/dist/codemods/safety.js +109 -0
  74. package/dist/codemods/safety.js.map +1 -0
  75. package/dist/codemods/safety.test.d.ts +1 -0
  76. package/dist/codemods/safety.test.js +154 -0
  77. package/dist/codemods/safety.test.js.map +1 -0
  78. package/dist/codemods/shadow-native.d.ts +2 -0
  79. package/dist/codemods/shadow-native.js +103 -0
  80. package/dist/codemods/shadow-native.js.map +1 -0
  81. package/dist/codemods/tokens-color.d.ts +2 -0
  82. package/dist/codemods/tokens-color.js +69 -0
  83. package/dist/codemods/tokens-color.js.map +1 -0
  84. package/dist/codemods/tokens-spacing.d.ts +2 -0
  85. package/dist/codemods/tokens-spacing.js +66 -0
  86. package/dist/codemods/tokens-spacing.js.map +1 -0
  87. package/dist/commands/__tests__/email-prompt.test.d.ts +1 -0
  88. package/dist/commands/__tests__/email-prompt.test.js +126 -0
  89. package/dist/commands/__tests__/email-prompt.test.js.map +1 -0
  90. package/dist/commands/__tests__/explain-score.test.d.ts +1 -0
  91. package/dist/commands/__tests__/explain-score.test.js +88 -0
  92. package/dist/commands/__tests__/explain-score.test.js.map +1 -0
  93. package/dist/commands/__tests__/feedback.test.d.ts +1 -0
  94. package/dist/commands/__tests__/feedback.test.js +186 -0
  95. package/dist/commands/__tests__/feedback.test.js.map +1 -0
  96. package/dist/commands/audit-flags.d.ts +49 -0
  97. package/dist/commands/audit-flags.js +17 -0
  98. package/dist/commands/audit-flags.js.map +1 -0
  99. package/dist/commands/audit-pipeline.d.ts +31 -0
  100. package/dist/commands/audit-pipeline.js +342 -0
  101. package/dist/commands/audit-pipeline.js.map +1 -0
  102. package/dist/commands/bench-pack.d.ts +5 -0
  103. package/dist/commands/bench-pack.js +61 -0
  104. package/dist/commands/bench-pack.js.map +1 -0
  105. package/dist/commands/ci-setup.d.ts +9 -0
  106. package/dist/commands/ci-setup.js +42 -0
  107. package/dist/commands/ci-setup.js.map +1 -0
  108. package/dist/commands/email-prompt.d.ts +36 -0
  109. package/dist/commands/email-prompt.js +160 -0
  110. package/dist/commands/email-prompt.js.map +1 -0
  111. package/dist/commands/explain-score.d.ts +35 -0
  112. package/dist/commands/explain-score.js +137 -0
  113. package/dist/commands/explain-score.js.map +1 -0
  114. package/dist/commands/explain.d.ts +6 -0
  115. package/dist/commands/explain.js +93 -0
  116. package/dist/commands/explain.js.map +1 -0
  117. package/dist/commands/feedback.d.ts +31 -0
  118. package/dist/commands/feedback.js +155 -0
  119. package/dist/commands/feedback.js.map +1 -0
  120. package/dist/commands/fix.d.ts +48 -0
  121. package/dist/commands/fix.js +191 -0
  122. package/dist/commands/fix.js.map +1 -0
  123. package/dist/commands/init-detect.d.ts +20 -0
  124. package/dist/commands/init-detect.js +124 -0
  125. package/dist/commands/init-detect.js.map +1 -0
  126. package/dist/commands/init-write-agents-md.d.ts +14 -0
  127. package/dist/commands/init-write-agents-md.js +71 -0
  128. package/dist/commands/init-write-agents-md.js.map +1 -0
  129. package/dist/commands/init-write-lyse-md.d.ts +14 -0
  130. package/dist/commands/init-write-lyse-md.js +253 -0
  131. package/dist/commands/init-write-lyse-md.js.map +1 -0
  132. package/dist/commands/init.d.ts +8 -0
  133. package/dist/commands/init.js +147 -0
  134. package/dist/commands/init.js.map +1 -0
  135. package/dist/commands/mcp-entry.d.ts +33 -0
  136. package/dist/commands/mcp-entry.js +47 -0
  137. package/dist/commands/mcp-entry.js.map +1 -0
  138. package/dist/commands/mcp-setup.d.ts +10 -0
  139. package/dist/commands/mcp-setup.js +74 -0
  140. package/dist/commands/mcp-setup.js.map +1 -0
  141. package/dist/commands/share.d.ts +4 -0
  142. package/dist/commands/share.js +60 -0
  143. package/dist/commands/share.js.map +1 -0
  144. package/dist/commands/telemetry.d.ts +4 -0
  145. package/dist/commands/telemetry.js +27 -0
  146. package/dist/commands/telemetry.js.map +1 -0
  147. package/dist/commands/templates/lyse-workflow.yml.template +30 -0
  148. package/dist/config/schema.d.ts +158 -0
  149. package/dist/config/schema.js +136 -0
  150. package/dist/config/schema.js.map +1 -0
  151. package/dist/credentials/keychain.d.ts +20 -0
  152. package/dist/credentials/keychain.js +35 -0
  153. package/dist/credentials/keychain.js.map +1 -0
  154. package/dist/credentials/keychain.test.d.ts +1 -0
  155. package/dist/credentials/keychain.test.js +32 -0
  156. package/dist/credentials/keychain.test.js.map +1 -0
  157. package/dist/credentials/paths.d.ts +1 -0
  158. package/dist/credentials/paths.js +6 -0
  159. package/dist/credentials/paths.js.map +1 -0
  160. package/dist/credentials/store.d.ts +17 -0
  161. package/dist/credentials/store.js +60 -0
  162. package/dist/credentials/store.js.map +1 -0
  163. package/dist/credentials/store.test.d.ts +1 -0
  164. package/dist/credentials/store.test.js +48 -0
  165. package/dist/credentials/store.test.js.map +1 -0
  166. package/dist/detection/from-filesystem.d.ts +2 -0
  167. package/dist/detection/from-filesystem.js +26 -0
  168. package/dist/detection/from-filesystem.js.map +1 -0
  169. package/dist/detection/from-git.d.ts +2 -0
  170. package/dist/detection/from-git.js +53 -0
  171. package/dist/detection/from-git.js.map +1 -0
  172. package/dist/detection/from-package-json.d.ts +2 -0
  173. package/dist/detection/from-package-json.js +194 -0
  174. package/dist/detection/from-package-json.js.map +1 -0
  175. package/dist/detection/pre-flight.d.ts +5 -0
  176. package/dist/detection/pre-flight.js +47 -0
  177. package/dist/detection/pre-flight.js.map +1 -0
  178. package/dist/detection/types.d.ts +27 -0
  179. package/dist/detection/types.js +2 -0
  180. package/dist/detection/types.js.map +1 -0
  181. package/dist/entitlement/check.d.ts +7 -0
  182. package/dist/entitlement/check.js +37 -0
  183. package/dist/entitlement/check.js.map +1 -0
  184. package/dist/entitlement/index.d.ts +1 -0
  185. package/dist/entitlement/index.js +2 -0
  186. package/dist/entitlement/index.js.map +1 -0
  187. package/dist/entitlement/keys.d.ts +10 -0
  188. package/dist/entitlement/keys.js +14 -0
  189. package/dist/entitlement/keys.js.map +1 -0
  190. package/dist/history/ndjson-store.d.ts +70 -0
  191. package/dist/history/ndjson-store.js +102 -0
  192. package/dist/history/ndjson-store.js.map +1 -0
  193. package/dist/identity/index.d.ts +1 -0
  194. package/dist/identity/index.js +2 -0
  195. package/dist/identity/index.js.map +1 -0
  196. package/dist/identity/repo-bucket.d.ts +22 -0
  197. package/dist/identity/repo-bucket.js +78 -0
  198. package/dist/identity/repo-bucket.js.map +1 -0
  199. package/dist/index.d.ts +1 -0
  200. package/dist/index.js +15 -0
  201. package/dist/index.js.map +1 -0
  202. package/dist/llm/layer4-stage.d.ts +18 -0
  203. package/dist/llm/layer4-stage.js +12 -0
  204. package/dist/llm/layer4-stage.js.map +1 -0
  205. package/dist/loaders/components.d.ts +26 -0
  206. package/dist/loaders/components.js +285 -0
  207. package/dist/loaders/components.js.map +1 -0
  208. package/dist/loaders/stories.d.ts +2 -0
  209. package/dist/loaders/stories.js +231 -0
  210. package/dist/loaders/stories.js.map +1 -0
  211. package/dist/loaders/token-graph.d.ts +39 -0
  212. package/dist/loaders/token-graph.js +146 -0
  213. package/dist/loaders/token-graph.js.map +1 -0
  214. package/dist/loaders/tokens.d.ts +2 -0
  215. package/dist/loaders/tokens.js +521 -0
  216. package/dist/loaders/tokens.js.map +1 -0
  217. package/dist/mcp/_find-root.d.ts +12 -0
  218. package/dist/mcp/_find-root.js +28 -0
  219. package/dist/mcp/_find-root.js.map +1 -0
  220. package/dist/mcp/server.d.ts +1 -0
  221. package/dist/mcp/server.js +42 -0
  222. package/dist/mcp/server.js.map +1 -0
  223. package/dist/mcp/tools/audit-file.d.ts +25 -0
  224. package/dist/mcp/tools/audit-file.js +147 -0
  225. package/dist/mcp/tools/audit-file.js.map +1 -0
  226. package/dist/mcp/tools/suggest-fix.d.ts +13 -0
  227. package/dist/mcp/tools/suggest-fix.js +100 -0
  228. package/dist/mcp/tools/suggest-fix.js.map +1 -0
  229. package/dist/menu/action-menu.d.ts +6 -0
  230. package/dist/menu/action-menu.js +15 -0
  231. package/dist/menu/action-menu.js.map +1 -0
  232. package/dist/menu/prompts.d.ts +7 -0
  233. package/dist/menu/prompts.js +30 -0
  234. package/dist/menu/prompts.js.map +1 -0
  235. package/dist/menu/repl.d.ts +17 -0
  236. package/dist/menu/repl.js +77 -0
  237. package/dist/menu/repl.js.map +1 -0
  238. package/dist/parsers/css-in-js.d.ts +2 -0
  239. package/dist/parsers/css-in-js.js +69 -0
  240. package/dist/parsers/css-in-js.js.map +1 -0
  241. package/dist/parsers/css.d.ts +2 -0
  242. package/dist/parsers/css.js +32 -0
  243. package/dist/parsers/css.js.map +1 -0
  244. package/dist/parsers/scss-transform.d.ts +25 -0
  245. package/dist/parsers/scss-transform.js +55 -0
  246. package/dist/parsers/scss-transform.js.map +1 -0
  247. package/dist/parsers/tailwind-v4.d.ts +8 -0
  248. package/dist/parsers/tailwind-v4.js +90 -0
  249. package/dist/parsers/tailwind-v4.js.map +1 -0
  250. package/dist/parsers/ts-morph-project.d.ts +16 -0
  251. package/dist/parsers/ts-morph-project.js +77 -0
  252. package/dist/parsers/ts-morph-project.js.map +1 -0
  253. package/dist/parsers/ts.d.ts +2 -0
  254. package/dist/parsers/ts.js +61 -0
  255. package/dist/parsers/ts.js.map +1 -0
  256. package/dist/reliability/__tests__/types.test.d.ts +1 -0
  257. package/dist/reliability/__tests__/types.test.js +14 -0
  258. package/dist/reliability/__tests__/types.test.js.map +1 -0
  259. package/dist/reliability/catalogue/__tests__/promotion.test.d.ts +1 -0
  260. package/dist/reliability/catalogue/__tests__/promotion.test.js +23 -0
  261. package/dist/reliability/catalogue/__tests__/promotion.test.js.map +1 -0
  262. package/dist/reliability/catalogue/__tests__/sub-axes.test.d.ts +1 -0
  263. package/dist/reliability/catalogue/__tests__/sub-axes.test.js +27 -0
  264. package/dist/reliability/catalogue/__tests__/sub-axes.test.js.map +1 -0
  265. package/dist/reliability/catalogue/promotion.d.ts +8 -0
  266. package/dist/reliability/catalogue/promotion.js +25 -0
  267. package/dist/reliability/catalogue/promotion.js.map +1 -0
  268. package/dist/reliability/catalogue/sub-axes.d.ts +3 -0
  269. package/dist/reliability/catalogue/sub-axes.js +18 -0
  270. package/dist/reliability/catalogue/sub-axes.js.map +1 -0
  271. package/dist/reliability/confidence/__tests__/manifest-loader.test.d.ts +1 -0
  272. package/dist/reliability/confidence/__tests__/manifest-loader.test.js +103 -0
  273. package/dist/reliability/confidence/__tests__/manifest-loader.test.js.map +1 -0
  274. package/dist/reliability/confidence/bundled-manifest.d.ts +2 -0
  275. package/dist/reliability/confidence/bundled-manifest.js +8 -0
  276. package/dist/reliability/confidence/bundled-manifest.js.map +1 -0
  277. package/dist/reliability/confidence/index.d.ts +3 -0
  278. package/dist/reliability/confidence/index.js +3 -0
  279. package/dist/reliability/confidence/index.js.map +1 -0
  280. package/dist/reliability/confidence/manifest-loader.d.ts +8 -0
  281. package/dist/reliability/confidence/manifest-loader.js +53 -0
  282. package/dist/reliability/confidence/manifest-loader.js.map +1 -0
  283. package/dist/reliability/feedback/__tests__/interactive.test.d.ts +1 -0
  284. package/dist/reliability/feedback/__tests__/interactive.test.js +85 -0
  285. package/dist/reliability/feedback/__tests__/interactive.test.js.map +1 -0
  286. package/dist/reliability/feedback/__tests__/repo-bucket.test.d.ts +1 -0
  287. package/dist/reliability/feedback/__tests__/repo-bucket.test.js +18 -0
  288. package/dist/reliability/feedback/__tests__/repo-bucket.test.js.map +1 -0
  289. package/dist/reliability/feedback/__tests__/sender.test.d.ts +1 -0
  290. package/dist/reliability/feedback/__tests__/sender.test.js +101 -0
  291. package/dist/reliability/feedback/__tests__/sender.test.js.map +1 -0
  292. package/dist/reliability/feedback/interactive.d.ts +20 -0
  293. package/dist/reliability/feedback/interactive.js +150 -0
  294. package/dist/reliability/feedback/interactive.js.map +1 -0
  295. package/dist/reliability/feedback/repo-bucket.d.ts +2 -0
  296. package/dist/reliability/feedback/repo-bucket.js +9 -0
  297. package/dist/reliability/feedback/repo-bucket.js.map +1 -0
  298. package/dist/reliability/feedback/sender.d.ts +16 -0
  299. package/dist/reliability/feedback/sender.js +28 -0
  300. package/dist/reliability/feedback/sender.js.map +1 -0
  301. package/dist/reliability/index.d.ts +1 -0
  302. package/dist/reliability/index.js +2 -0
  303. package/dist/reliability/index.js.map +1 -0
  304. package/dist/reliability/llm-eval/__tests__/budget.test.d.ts +1 -0
  305. package/dist/reliability/llm-eval/__tests__/budget.test.js +39 -0
  306. package/dist/reliability/llm-eval/__tests__/budget.test.js.map +1 -0
  307. package/dist/reliability/llm-eval/budget.d.ts +14 -0
  308. package/dist/reliability/llm-eval/budget.js +43 -0
  309. package/dist/reliability/llm-eval/budget.js.map +1 -0
  310. package/dist/reliability/score/__tests__/formula-v1.test.d.ts +1 -0
  311. package/dist/reliability/score/__tests__/formula-v1.test.js +29 -0
  312. package/dist/reliability/score/__tests__/formula-v1.test.js.map +1 -0
  313. package/dist/reliability/score/formula-v1.d.ts +13 -0
  314. package/dist/reliability/score/formula-v1.js +19 -0
  315. package/dist/reliability/score/formula-v1.js.map +1 -0
  316. package/dist/reliability/score/version-pin.d.ts +1 -0
  317. package/dist/reliability/score/version-pin.js +2 -0
  318. package/dist/reliability/score/version-pin.js.map +1 -0
  319. package/dist/reliability/score/weight.d.ts +1 -0
  320. package/dist/reliability/score/weight.js +5 -0
  321. package/dist/reliability/score/weight.js.map +1 -0
  322. package/dist/reliability/types.d.ts +39 -0
  323. package/dist/reliability/types.js +2 -0
  324. package/dist/reliability/types.js.map +1 -0
  325. package/dist/reporters/coverage-footer.d.ts +2 -0
  326. package/dist/reporters/coverage-footer.js +7 -0
  327. package/dist/reporters/coverage-footer.js.map +1 -0
  328. package/dist/reporters/json.d.ts +5 -0
  329. package/dist/reporters/json.js +51 -0
  330. package/dist/reporters/json.js.map +1 -0
  331. package/dist/reporters/markdown.d.ts +7 -0
  332. package/dist/reporters/markdown.js +35 -0
  333. package/dist/reporters/markdown.js.map +1 -0
  334. package/dist/reporters/sarif.d.ts +5 -0
  335. package/dist/reporters/sarif.js +109 -0
  336. package/dist/reporters/sarif.js.map +1 -0
  337. package/dist/reporters/terminal-format.d.ts +34 -0
  338. package/dist/reporters/terminal-format.js +97 -0
  339. package/dist/reporters/terminal-format.js.map +1 -0
  340. package/dist/reporters/terminal.d.ts +4 -0
  341. package/dist/reporters/terminal.js +201 -0
  342. package/dist/reporters/terminal.js.map +1 -0
  343. package/dist/rule-runner.d.ts +8 -0
  344. package/dist/rule-runner.js +22 -0
  345. package/dist/rule-runner.js.map +1 -0
  346. package/dist/rules/_codemod-adapter.d.ts +16 -0
  347. package/dist/rules/_codemod-adapter.js +49 -0
  348. package/dist/rules/_codemod-adapter.js.map +1 -0
  349. package/dist/rules/_exclude.d.ts +11 -0
  350. package/dist/rules/_exclude.js +17 -0
  351. package/dist/rules/_exclude.js.map +1 -0
  352. package/dist/rules/_function-body-analysis.d.ts +82 -0
  353. package/dist/rules/_function-body-analysis.js +379 -0
  354. package/dist/rules/_function-body-analysis.js.map +1 -0
  355. package/dist/rules/_rule-module.d.ts +31 -0
  356. package/dist/rules/_rule-module.js +32 -0
  357. package/dist/rules/_rule-module.js.map +1 -0
  358. package/dist/rules/_skip-context.d.ts +36 -0
  359. package/dist/rules/_skip-context.js +128 -0
  360. package/dist/rules/_skip-context.js.map +1 -0
  361. package/dist/rules/a11y-essentials.d.ts +1 -0
  362. package/dist/rules/a11y-essentials.js +140 -0
  363. package/dist/rules/a11y-essentials.js.map +1 -0
  364. package/dist/rules/ai-surface-agents-md-quality.d.ts +22 -0
  365. package/dist/rules/ai-surface-agents-md-quality.js +233 -0
  366. package/dist/rules/ai-surface-agents-md-quality.js.map +1 -0
  367. package/dist/rules/ai-surface-component-manifest-json.d.ts +19 -0
  368. package/dist/rules/ai-surface-component-manifest-json.js +232 -0
  369. package/dist/rules/ai-surface-component-manifest-json.js.map +1 -0
  370. package/dist/rules/ai-surface-ds-index-exported.d.ts +19 -0
  371. package/dist/rules/ai-surface-ds-index-exported.js +239 -0
  372. package/dist/rules/ai-surface-ds-index-exported.js.map +1 -0
  373. package/dist/rules/components-shadow-native.d.ts +2 -0
  374. package/dist/rules/components-shadow-native.js +118 -0
  375. package/dist/rules/components-shadow-native.js.map +1 -0
  376. package/dist/rules/manifest.d.ts +5 -0
  377. package/dist/rules/manifest.js +20 -0
  378. package/dist/rules/manifest.js.map +1 -0
  379. package/dist/rules/naming-component-pascalcase.d.ts +7 -0
  380. package/dist/rules/naming-component-pascalcase.js +197 -0
  381. package/dist/rules/naming-component-pascalcase.js.map +1 -0
  382. package/dist/rules/naming-hook-prefix.d.ts +6 -0
  383. package/dist/rules/naming-hook-prefix.js +185 -0
  384. package/dist/rules/naming-hook-prefix.js.map +1 -0
  385. package/dist/rules/pack-loader.d.ts +30 -0
  386. package/dist/rules/pack-loader.js +60 -0
  387. package/dist/rules/pack-loader.js.map +1 -0
  388. package/dist/rules/pack-validator.d.ts +8 -0
  389. package/dist/rules/pack-validator.js +97 -0
  390. package/dist/rules/pack-validator.js.map +1 -0
  391. package/dist/rules/registry.d.ts +3 -0
  392. package/dist/rules/registry.js +28 -0
  393. package/dist/rules/registry.js.map +1 -0
  394. package/dist/rules/storybook-coverage.d.ts +1 -0
  395. package/dist/rules/storybook-coverage.js +49 -0
  396. package/dist/rules/storybook-coverage.js.map +1 -0
  397. package/dist/rules/templates/_regex-utils.d.ts +5 -0
  398. package/dist/rules/templates/_regex-utils.js +8 -0
  399. package/dist/rules/templates/_regex-utils.js.map +1 -0
  400. package/dist/rules/templates/a11y-jsx-template.d.ts +15 -0
  401. package/dist/rules/templates/a11y-jsx-template.js +69 -0
  402. package/dist/rules/templates/a11y-jsx-template.js.map +1 -0
  403. package/dist/rules/templates/css-property-token-compliance.d.ts +18 -0
  404. package/dist/rules/templates/css-property-token-compliance.js +56 -0
  405. package/dist/rules/templates/css-property-token-compliance.js.map +1 -0
  406. package/dist/rules/templates/import-source-restriction.d.ts +18 -0
  407. package/dist/rules/templates/import-source-restriction.js +60 -0
  408. package/dist/rules/templates/import-source-restriction.js.map +1 -0
  409. package/dist/rules/templates/js-call-token-compliance.d.ts +18 -0
  410. package/dist/rules/templates/js-call-token-compliance.js +61 -0
  411. package/dist/rules/templates/js-call-token-compliance.js.map +1 -0
  412. package/dist/rules/templates/js-prop-token-compliance.d.ts +21 -0
  413. package/dist/rules/templates/js-prop-token-compliance.js +56 -0
  414. package/dist/rules/templates/js-prop-token-compliance.js.map +1 -0
  415. package/dist/rules/templates/naming-convention.d.ts +18 -0
  416. package/dist/rules/templates/naming-convention.js +76 -0
  417. package/dist/rules/templates/naming-convention.js.map +1 -0
  418. package/dist/rules/templates/registry.d.ts +5 -0
  419. package/dist/rules/templates/registry.js +30 -0
  420. package/dist/rules/templates/registry.js.map +1 -0
  421. package/dist/rules/templates/storybook-coverage-template.d.ts +15 -0
  422. package/dist/rules/templates/storybook-coverage-template.js +58 -0
  423. package/dist/rules/templates/storybook-coverage-template.js.map +1 -0
  424. package/dist/rules/templates/tailwind-utility-class-compliance.d.ts +15 -0
  425. package/dist/rules/templates/tailwind-utility-class-compliance.js +70 -0
  426. package/dist/rules/templates/tailwind-utility-class-compliance.js.map +1 -0
  427. package/dist/rules/templates/types.d.ts +16 -0
  428. package/dist/rules/templates/types.js +2 -0
  429. package/dist/rules/templates/types.js.map +1 -0
  430. package/dist/rules/tokens-description-coverage.d.ts +15 -0
  431. package/dist/rules/tokens-description-coverage.js +193 -0
  432. package/dist/rules/tokens-description-coverage.js.map +1 -0
  433. package/dist/rules/tokens-dtcg-conformance.d.ts +47 -0
  434. package/dist/rules/tokens-dtcg-conformance.js +363 -0
  435. package/dist/rules/tokens-dtcg-conformance.js.map +1 -0
  436. package/dist/rules/tokens-no-hardcoded-color.d.ts +18 -0
  437. package/dist/rules/tokens-no-hardcoded-color.js +436 -0
  438. package/dist/rules/tokens-no-hardcoded-color.js.map +1 -0
  439. package/dist/rules/tokens-no-hardcoded-spacing.d.ts +8 -0
  440. package/dist/rules/tokens-no-hardcoded-spacing.js +193 -0
  441. package/dist/rules/tokens-no-hardcoded-spacing.js.map +1 -0
  442. package/dist/scorer.d.ts +38 -0
  443. package/dist/scorer.js +126 -0
  444. package/dist/scorer.js.map +1 -0
  445. package/dist/share/clipboard.d.ts +26 -0
  446. package/dist/share/clipboard.js +76 -0
  447. package/dist/share/clipboard.js.map +1 -0
  448. package/dist/suppression/__tests__/inline.test.d.ts +1 -0
  449. package/dist/suppression/__tests__/inline.test.js +25 -0
  450. package/dist/suppression/__tests__/inline.test.js.map +1 -0
  451. package/dist/suppression/__tests__/lyseignore.test.d.ts +1 -0
  452. package/dist/suppression/__tests__/lyseignore.test.js +32 -0
  453. package/dist/suppression/__tests__/lyseignore.test.js.map +1 -0
  454. package/dist/suppression/defaults.d.ts +1 -0
  455. package/dist/suppression/defaults.js +14 -0
  456. package/dist/suppression/defaults.js.map +1 -0
  457. package/dist/suppression/inline.d.ts +7 -0
  458. package/dist/suppression/inline.js +32 -0
  459. package/dist/suppression/inline.js.map +1 -0
  460. package/dist/suppression/lyseignore.d.ts +2 -0
  461. package/dist/suppression/lyseignore.js +22 -0
  462. package/dist/suppression/lyseignore.js.map +1 -0
  463. package/dist/telemetry/consent.d.ts +48 -0
  464. package/dist/telemetry/consent.js +139 -0
  465. package/dist/telemetry/consent.js.map +1 -0
  466. package/dist/telemetry/index.d.ts +2 -0
  467. package/dist/telemetry/index.js +3 -0
  468. package/dist/telemetry/index.js.map +1 -0
  469. package/dist/telemetry/local-log.d.ts +64 -0
  470. package/dist/telemetry/local-log.js +123 -0
  471. package/dist/telemetry/local-log.js.map +1 -0
  472. package/dist/tokens/dtcg-model.d.ts +53 -0
  473. package/dist/tokens/dtcg-model.js +18 -0
  474. package/dist/tokens/dtcg-model.js.map +1 -0
  475. package/dist/tokens/normalizer.d.ts +17 -0
  476. package/dist/tokens/normalizer.js +360 -0
  477. package/dist/tokens/normalizer.js.map +1 -0
  478. package/dist/types.d.ts +300 -0
  479. package/dist/types.js +4 -0
  480. package/dist/types.js.map +1 -0
  481. package/dist/util/git.d.ts +6 -0
  482. package/dist/util/git.js +40 -0
  483. package/dist/util/git.js.map +1 -0
  484. package/dist/util/git.test.d.ts +5 -0
  485. package/dist/util/git.test.js +42 -0
  486. package/dist/util/git.test.js.map +1 -0
  487. package/dist/util/gitignore.d.ts +9 -0
  488. package/dist/util/gitignore.js +39 -0
  489. package/dist/util/gitignore.js.map +1 -0
  490. package/dist/util/hash-deps.d.ts +6 -0
  491. package/dist/util/hash-deps.js +24 -0
  492. package/dist/util/hash-deps.js.map +1 -0
  493. package/dist/util/spinner.d.ts +41 -0
  494. package/dist/util/spinner.js +126 -0
  495. package/dist/util/spinner.js.map +1 -0
  496. package/dist/util/with-spinner.d.ts +11 -0
  497. package/dist/util/with-spinner.js +19 -0
  498. package/dist/util/with-spinner.js.map +1 -0
  499. package/dist/walker.d.ts +14 -0
  500. package/dist/walker.js +91 -0
  501. package/dist/walker.js.map +1 -0
  502. package/package.json +83 -0
  503. package/rules-manifest.json +289 -0
  504. package/schemas/v1/lyse-config.json +82 -0
  505. package/schemas/v1/lyse-event.json +68 -0
  506. package/schemas/v1/lyse-license.json +19 -0
  507. package/schemas/v1/lyse-llm-payload.json +53 -0
  508. package/schemas/v1/lyse-llm-response.json +45 -0
  509. package/schemas/v1/lyse-result.json +98 -0
  510. package/schemas/v1/lyse-rules.json +42 -0
@@ -0,0 +1,39 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { mkdtempSync, writeFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { LLMBudget } from "../budget.js";
6
+ describe("LLM budget", () => {
7
+ it("allows calls under budget", () => {
8
+ const b = new LLMBudget({
9
+ dailyUsd: 10,
10
+ statePath: join(mkdtempSync(join(tmpdir(), "lyse-")), "budget.json"),
11
+ });
12
+ expect(b.canSpend(2.0)).toBe(true);
13
+ b.record(2.0);
14
+ expect(b.canSpend(3.0)).toBe(true);
15
+ });
16
+ it("blocks when daily cap exceeded", () => {
17
+ const b = new LLMBudget({
18
+ dailyUsd: 10,
19
+ statePath: join(mkdtempSync(join(tmpdir(), "lyse-")), "budget.json"),
20
+ });
21
+ b.record(9.5);
22
+ expect(b.canSpend(1.0)).toBe(false);
23
+ });
24
+ it("resets spent count on day rollover", () => {
25
+ const stateDir = mkdtempSync(join(tmpdir(), "lyse-"));
26
+ const statePath = join(stateDir, "budget.json");
27
+ writeFileSync(statePath, JSON.stringify({ date: "1970-01-01", spentUsd: 9.5 }));
28
+ const b = new LLMBudget({ dailyUsd: 10, statePath });
29
+ expect(b.canSpend(1.0)).toBe(true);
30
+ });
31
+ it("returns zeroed state on corrupted JSON", () => {
32
+ const stateDir = mkdtempSync(join(tmpdir(), "lyse-"));
33
+ const statePath = join(stateDir, "budget.json");
34
+ writeFileSync(statePath, "not-json{{{");
35
+ const b = new LLMBudget({ dailyUsd: 10, statePath });
36
+ expect(b.canSpend(5.0)).toBe(true);
37
+ });
38
+ });
39
+ //# sourceMappingURL=budget.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.test.js","sourceRoot":"","sources":["../../../../src/reliability/llm-eval/__tests__/budget.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC;YACtB,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,aAAa,CAAC;SACrE,CAAC,CAAC;QACH,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC;YACtB,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,aAAa,CAAC;SACrE,CAAC,CAAC;QACH,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChD,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAChF,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChD,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare const DEFAULT_BUDGET_STATE_PATH: string;
2
+ export declare class LLMBudget {
3
+ private opts;
4
+ constructor(opts: {
5
+ dailyUsd: number;
6
+ statePath: string;
7
+ });
8
+ private todayIso;
9
+ private load;
10
+ private save;
11
+ canSpend(estimateUsd: number): boolean;
12
+ record(actualUsd: number): void;
13
+ }
14
+ export declare function defaultBudget(): LLMBudget;
@@ -0,0 +1,43 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { dirname, resolve } from "node:path";
4
+ export const DEFAULT_BUDGET_STATE_PATH = resolve(homedir(), ".cache", "lyse", "llm-budget.json");
5
+ export class LLMBudget {
6
+ opts;
7
+ constructor(opts) {
8
+ this.opts = opts;
9
+ }
10
+ todayIso() {
11
+ return new Date().toISOString().slice(0, 10);
12
+ }
13
+ load() {
14
+ const today = this.todayIso();
15
+ if (!existsSync(this.opts.statePath))
16
+ return { date: today, spentUsd: 0 };
17
+ try {
18
+ const s = JSON.parse(readFileSync(this.opts.statePath, "utf8"));
19
+ return s.date === today ? s : { date: today, spentUsd: 0 };
20
+ }
21
+ catch {
22
+ return { date: today, spentUsd: 0 };
23
+ }
24
+ }
25
+ save(s) {
26
+ mkdirSync(dirname(this.opts.statePath), { recursive: true });
27
+ writeFileSync(this.opts.statePath, JSON.stringify(s));
28
+ }
29
+ canSpend(estimateUsd) {
30
+ const s = this.load();
31
+ return s.spentUsd + estimateUsd <= this.opts.dailyUsd;
32
+ }
33
+ record(actualUsd) {
34
+ const s = this.load();
35
+ s.spentUsd += actualUsd;
36
+ this.save(s);
37
+ }
38
+ }
39
+ export function defaultBudget() {
40
+ const cap = Number(process.env["LYSE_LLM_BUDGET_DAILY_USD"] ?? 50);
41
+ return new LLMBudget({ dailyUsd: cap, statePath: DEFAULT_BUDGET_STATE_PATH });
42
+ }
43
+ //# sourceMappingURL=budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.js","sourceRoot":"","sources":["../../../src/reliability/llm-eval/budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAO7C,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAEjG,MAAM,OAAO,SAAS;IACA;IAApB,YAAoB,IAA6C;QAA7C,SAAI,GAAJ,IAAI,CAAyC;IAAG,CAAC;IAE7D,QAAQ;QACd,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/C,CAAC;IAEO,IAAI;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAC1E,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAU,CAAC;YACzE,OAAO,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,CAAQ;QACnB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,QAAQ,CAAC,WAAmB;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,SAAiB;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;CACF;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,OAAO,IAAI,SAAS,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC,CAAC;AAChF,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { computeScoreV1 } from "../formula-v1.js";
3
+ const sample = [
4
+ { ruleId: "tokens/no-hardcoded-color", subAxisId: "tokens.color", severity: "error", confidence: "high", message: "", file: "Button.tsx", line: 1, column: null },
5
+ { ruleId: "a11y/essentials", subAxisId: "a11y.essentials", severity: "warning", confidence: "high", message: "", file: "Card.tsx", line: 1, column: null },
6
+ ];
7
+ describe("scoring-v1", () => {
8
+ it("returns 100 with no findings", () => {
9
+ const r = computeScoreV1({ findings: [], stableSubAxes: new Set(), confidenceByAxis: {} });
10
+ expect(r.score).toBe(100);
11
+ expect(r.version).toBe("scoring-v1");
12
+ });
13
+ it("only weights stable sub-axes", () => {
14
+ const r = computeScoreV1({
15
+ findings: sample,
16
+ stableSubAxes: new Set(["tokens.color"]),
17
+ confidenceByAxis: { "tokens.color": 1.0, "a11y.essentials": 1.0 },
18
+ });
19
+ expect(r.score).toBeLessThan(100);
20
+ expect(r.findingsCountedInScore).toBe(1);
21
+ expect(r.findingsReportedOnly).toBe(1);
22
+ });
23
+ it("deterministic — same input → same score", () => {
24
+ const a = computeScoreV1({ findings: sample, stableSubAxes: new Set(["tokens.color"]), confidenceByAxis: { "tokens.color": 1.0 } });
25
+ const b = computeScoreV1({ findings: sample, stableSubAxes: new Set(["tokens.color"]), confidenceByAxis: { "tokens.color": 1.0 } });
26
+ expect(a.score).toBe(b.score);
27
+ });
28
+ });
29
+ //# sourceMappingURL=formula-v1.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formula-v1.test.js","sourceRoot":"","sources":["../../../../src/reliability/score/__tests__/formula-v1.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,MAAM,MAAM,GAAc;IACxB,EAAE,MAAM,EAAE,2BAA2B,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;IACjK,EAAE,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;CAC3J,CAAC;AAEF,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,GAAG,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3F,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,GAAG,cAAc,CAAC;YACvB,QAAQ,EAAE,MAAM;YAChB,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;YACxC,gBAAgB,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE;SAClE,CAAC,CAAC;QACH,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,gBAAgB,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACpI,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,gBAAgB,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACpI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Finding } from "../types.js";
2
+ export interface ScoreInput {
3
+ findings: Finding[];
4
+ stableSubAxes: Set<string>;
5
+ confidenceByAxis: Record<string, number>;
6
+ }
7
+ export interface ScoreOutput {
8
+ score: number;
9
+ version: "scoring-v1";
10
+ findingsCountedInScore: number;
11
+ findingsReportedOnly: number;
12
+ }
13
+ export declare function computeScoreV1(input: ScoreInput): ScoreOutput;
@@ -0,0 +1,19 @@
1
+ import { findingWeight } from "./weight.js";
2
+ import { CURRENT_SCORING_VERSION } from "./version-pin.js";
3
+ export function computeScoreV1(input) {
4
+ let penalty = 0;
5
+ let counted = 0;
6
+ let reportedOnly = 0;
7
+ for (const f of input.findings) {
8
+ if (!input.stableSubAxes.has(f.subAxisId)) {
9
+ reportedOnly++;
10
+ continue;
11
+ }
12
+ const conf = input.confidenceByAxis[f.subAxisId] ?? 0;
13
+ penalty += findingWeight(f.severity, conf);
14
+ counted++;
15
+ }
16
+ const score = Math.max(0, Math.min(100, Math.round(100 - penalty * 1.5)));
17
+ return { score, version: CURRENT_SCORING_VERSION, findingsCountedInScore: counted, findingsReportedOnly: reportedOnly };
18
+ }
19
+ //# sourceMappingURL=formula-v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formula-v1.js","sourceRoot":"","sources":["../../../src/reliability/score/formula-v1.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAe3D,MAAM,UAAU,cAAc,CAAC,KAAiB;IAC9C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,YAAY,EAAE,CAAC;YACf,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO,IAAI,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC3C,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1E,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,CAAC;AAC1H,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const CURRENT_SCORING_VERSION: "scoring-v1";
@@ -0,0 +1,2 @@
1
+ export const CURRENT_SCORING_VERSION = "scoring-v1";
2
+ //# sourceMappingURL=version-pin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-pin.js","sourceRoot":"","sources":["../../../src/reliability/score/version-pin.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG,YAAqB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function findingWeight(severity: string, axisConfidence: number): number;
@@ -0,0 +1,5 @@
1
+ const SEVERITY_WEIGHT = { error: 4, warning: 2, info: 1 };
2
+ export function findingWeight(severity, axisConfidence) {
3
+ return (SEVERITY_WEIGHT[severity] ?? 1) * axisConfidence;
4
+ }
5
+ //# sourceMappingURL=weight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weight.js","sourceRoot":"","sources":["../../../src/reliability/score/weight.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAElF,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,cAAsB;IACpE,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,cAAc,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,39 @@
1
+ export type ScoringVersion = `scoring-v${number}`;
2
+ export type SubAxisStatus = "stable" | "experimental" | "disabled";
3
+ export type SubAxisId = string;
4
+ export type AxisLabel = "tokens" | "a11y" | "components" | "stories" | "ai-surface";
5
+ export interface SubAxisRecord {
6
+ id: SubAxisId;
7
+ axis: AxisLabel;
8
+ name: string;
9
+ status: SubAxisStatus;
10
+ precisionMeasured: number | null;
11
+ recallMeasured: number | null;
12
+ precisionWilsonLowerBound: number | null;
13
+ recallWilsonLowerBound: number | null;
14
+ lastCalibrated: string | null;
15
+ contributesToScore: boolean;
16
+ ruleIds: string[];
17
+ llmDriven: boolean;
18
+ }
19
+ export interface ConfidenceManifest {
20
+ version: ScoringVersion;
21
+ generatedAt: string;
22
+ validFrom: string;
23
+ validUntil: string;
24
+ subAxes: Record<SubAxisId, {
25
+ precision: number;
26
+ recall: number;
27
+ nSamples: number;
28
+ }>;
29
+ }
30
+ export interface Finding {
31
+ ruleId: string;
32
+ subAxisId: SubAxisId;
33
+ severity: "error" | "warning" | "info";
34
+ confidence: "high" | "medium" | "low";
35
+ message: string;
36
+ file: string;
37
+ line: number | null;
38
+ column: number | null;
39
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/reliability/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import type { CoverageMeta } from "../types.js";
2
+ export declare function formatCoverageFooter(coverage: CoverageMeta): string;
@@ -0,0 +1,7 @@
1
+ export function formatCoverageFooter(coverage) {
2
+ const count = coverage.scannedFiles.toLocaleString("en-US");
3
+ const noun = coverage.scannedFiles === 1 ? "file" : "files";
4
+ const seconds = (coverage.durationMs / 1000).toFixed(1);
5
+ return `Scanned: ${count} ${noun} in ${seconds}s.`;
6
+ }
7
+ //# sourceMappingURL=coverage-footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-footer.js","sourceRoot":"","sources":["../../src/reporters/coverage-footer.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,QAAsB;IACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5D,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,YAAY,KAAK,IAAI,IAAI,OAAO,OAAO,IAAI,CAAC;AACrD,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AuditResult } from "../types.js";
2
+ export interface JsonRenderOptions {
3
+ includeTimestamp?: boolean;
4
+ }
5
+ export declare function renderJson(result: AuditResult, options?: JsonRenderOptions): string;
@@ -0,0 +1,51 @@
1
+ const SCHEMA_URL = "https://github.com/lyse-labs/lyse/raw/main/schemas/v1/lyse-result.json";
2
+ const SEVERITY_ORDER = { error: 0, warning: 1, info: 2 };
3
+ function sortFindings(a, b) {
4
+ if (a.severity !== b.severity)
5
+ return SEVERITY_ORDER[a.severity] - SEVERITY_ORDER[b.severity];
6
+ if (a.location.file !== b.location.file)
7
+ return a.location.file < b.location.file ? -1 : 1;
8
+ if (a.location.line !== b.location.line)
9
+ return a.location.line - b.location.line;
10
+ if (a.location.column !== b.location.column)
11
+ return a.location.column - b.location.column;
12
+ return a.ruleId < b.ruleId ? -1 : 1;
13
+ }
14
+ function sortKeysDeep(value) {
15
+ if (Array.isArray(value))
16
+ return value.map(sortKeysDeep);
17
+ if (value && typeof value === "object") {
18
+ const obj = value;
19
+ const sorted = {};
20
+ for (const key of Object.keys(obj).sort()) {
21
+ sorted[key] = sortKeysDeep(obj[key]);
22
+ }
23
+ return sorted;
24
+ }
25
+ return value;
26
+ }
27
+ export function renderJson(result, options = {}) {
28
+ // Clone deeply so the input isn't mutated.
29
+ const cloned = JSON.parse(JSON.stringify(result));
30
+ // Sort findings deterministically.
31
+ cloned.findings = [...cloned.findings].sort(sortFindings);
32
+ if (!options.includeTimestamp) {
33
+ cloned.timestamp = "";
34
+ if (cloned.meta) {
35
+ delete cloned.meta.layer4;
36
+ if (cloned.meta.coverage) {
37
+ // durationMs is wallclock — non-deterministic. Strip in the default
38
+ // (deterministic) JSON output. Available via --include-timestamp.
39
+ delete cloned.meta.coverage.durationMs;
40
+ }
41
+ if (Object.keys(cloned.meta).length === 0) {
42
+ delete cloned.meta;
43
+ }
44
+ }
45
+ }
46
+ // Merge $schema as the first key (will land alphabetically anyway — `$` comes before letters).
47
+ const withSchema = { $schema: SCHEMA_URL, ...cloned };
48
+ // Sort keys recursively, JSON.stringify with 2-space indent, add trailing newline.
49
+ return JSON.stringify(sortKeysDeep(withSchema), null, 2) + "\n";
50
+ }
51
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/reporters/json.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { AuditResult } from "../types.js";
2
+ interface MdContext {
3
+ tokenNamespaces: string[];
4
+ components: string[];
5
+ }
6
+ export declare function renderAgentsMd(result: AuditResult, mdCtx: MdContext): string;
7
+ export {};
@@ -0,0 +1,35 @@
1
+ export function renderAgentsMd(result, mdCtx) {
2
+ return [
3
+ `# AGENTS.md — Design System Contract`,
4
+ ``,
5
+ `> Auto-generated by Lyse v${result.toolVersion} on ${result.timestamp}.`,
6
+ `> Do not hand-edit; re-run \`lyse audit\` to refresh.`,
7
+ ``,
8
+ `## 1. Stack detected`,
9
+ ...result.stack.map((s) => `- ${s}`),
10
+ ``,
11
+ `## 2. Component inventory`,
12
+ ...mdCtx.components.map((c) => `- \`${c}\``),
13
+ ``,
14
+ `## 3. Token namespaces`,
15
+ ...mdCtx.tokenNamespaces.map((n) => `- \`${n}\``),
16
+ ``,
17
+ `## 4. Hard rules for AI-generated code`,
18
+ `- Never use hardcoded colors. Always use a token from the namespaces above.`,
19
+ `- Never use native \`<button>\`, \`<input>\`, \`<select>\`, \`<textarea>\`, \`<a>\` when a DS equivalent exists.`,
20
+ `- Always include \`alt\` on \`<img>\`, \`aria-label\` on icon-only buttons.`,
21
+ `- Always ship a Storybook story with new DS components.`,
22
+ ``,
23
+ `## 5. Lyse contract`,
24
+ `Scoring: \`${result.scoringVersion}\``,
25
+ ``,
26
+ `\`\`\``,
27
+ `schema: 1`,
28
+ `rules_version: ${result.rulesVersion}`,
29
+ `tool_version: ${result.toolVersion}`,
30
+ `scoring_version: ${result.scoringVersion}`,
31
+ `\`\`\``,
32
+ ``,
33
+ ].join("\n");
34
+ }
35
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/reporters/markdown.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,cAAc,CAAC,MAAmB,EAAE,KAAgB;IAClE,OAAO;QACL,sCAAsC;QACtC,EAAE;QACF,6BAA6B,MAAM,CAAC,WAAW,OAAO,MAAM,CAAC,SAAS,GAAG;QACzE,uDAAuD;QACvD,EAAE;QACF,sBAAsB;QACtB,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,EAAE;QACF,2BAA2B;QAC3B,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC5C,EAAE;QACF,wBAAwB;QACxB,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACjD,EAAE;QACF,wCAAwC;QACxC,6EAA6E;QAC7E,kHAAkH;QAClH,6EAA6E;QAC7E,yDAAyD;QACzD,EAAE;QACF,qBAAqB;QACrB,cAAc,MAAM,CAAC,cAAc,IAAI;QACvC,EAAE;QACF,QAAQ;QACR,WAAW;QACX,kBAAkB,MAAM,CAAC,YAAY,EAAE;QACvC,iBAAiB,MAAM,CAAC,WAAW,EAAE;QACrC,oBAAoB,MAAM,CAAC,cAAc,EAAE;QAC3C,QAAQ;QACR,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AuditResult } from "../types.js";
2
+ export interface SarifRenderOptions {
3
+ includeTimestamp?: boolean;
4
+ }
5
+ export declare function renderSarif(result: AuditResult, options?: SarifRenderOptions): string;
@@ -0,0 +1,109 @@
1
+ import { RULE_METADATA, RULES_VERSION } from "../rules/manifest.js";
2
+ const SARIF_VERSION = "2.1.0";
3
+ const SARIF_SCHEMA = "https://json.schemastore.org/sarif-2.1.0.json";
4
+ const TOOL_INFO_URI = "https://github.com/lyse-labs/lyse";
5
+ function severityToSarifLevel(severity) {
6
+ if (severity === "error")
7
+ return "error";
8
+ if (severity === "warning")
9
+ return "warning";
10
+ return "note";
11
+ }
12
+ function ruleDefinitionFromMeta(meta) {
13
+ return {
14
+ id: meta.id,
15
+ name: meta.id.replace(/[/-]/g, "_"),
16
+ shortDescription: { text: meta.shortDescription },
17
+ fullDescription: { text: meta.fullDescription },
18
+ helpUri: meta.helpUri,
19
+ help: {
20
+ text: meta.rationale,
21
+ markdown: meta.rationale,
22
+ },
23
+ defaultConfiguration: {
24
+ level: severityToSarifLevel(meta.defaultSeverity),
25
+ },
26
+ properties: {
27
+ axis: meta.axis,
28
+ tags: [`lyse:${meta.axis}`],
29
+ },
30
+ };
31
+ }
32
+ function findingToResult(finding) {
33
+ const result = {
34
+ ruleId: finding.ruleId,
35
+ level: severityToSarifLevel(finding.severity),
36
+ message: { text: finding.message },
37
+ locations: [
38
+ {
39
+ physicalLocation: {
40
+ artifactLocation: {
41
+ uri: finding.location.file,
42
+ uriBaseId: "%SRCROOT%",
43
+ },
44
+ region: {
45
+ startLine: Math.max(1, finding.location.line),
46
+ startColumn: Math.max(1, finding.location.column),
47
+ },
48
+ },
49
+ },
50
+ ],
51
+ };
52
+ if (finding.suggestion) {
53
+ result["fixes"] = [
54
+ {
55
+ description: { text: finding.suggestion },
56
+ },
57
+ ];
58
+ }
59
+ return result;
60
+ }
61
+ export function renderSarif(result, options = {}) {
62
+ // Include ALL rules in the tool driver (so GitHub Security tab knows the full rule set),
63
+ // not just the ones with findings.
64
+ const rules = RULE_METADATA.map(ruleDefinitionFromMeta);
65
+ const sarif = {
66
+ $schema: SARIF_SCHEMA,
67
+ version: SARIF_VERSION,
68
+ runs: [
69
+ {
70
+ tool: {
71
+ driver: {
72
+ name: "Lyse",
73
+ version: result.toolVersion,
74
+ semanticVersion: result.toolVersion,
75
+ informationUri: TOOL_INFO_URI,
76
+ organization: "lyse-labs",
77
+ rules,
78
+ properties: {
79
+ "lyse.scoringVersion": result.scoringVersion,
80
+ },
81
+ },
82
+ },
83
+ results: result.findings.map(findingToResult),
84
+ invocations: [
85
+ {
86
+ executionSuccessful: true,
87
+ ...(options.includeTimestamp && result.timestamp
88
+ ? { startTimeUtc: result.timestamp, endTimeUtc: result.timestamp }
89
+ : {}),
90
+ },
91
+ ],
92
+ originalUriBaseIds: {
93
+ "%SRCROOT%": { uri: "file://" + result.repoRoot + "/" },
94
+ },
95
+ properties: {
96
+ lyse: {
97
+ health_score: result.finalScore,
98
+ axes: result.axes,
99
+ stack: result.stack,
100
+ rules_version: RULES_VERSION,
101
+ scoring_version: result.scoringVersion,
102
+ },
103
+ },
104
+ },
105
+ ],
106
+ };
107
+ return JSON.stringify(sarif, null, 2) + "\n";
108
+ }
109
+ //# sourceMappingURL=sarif.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sarif.js","sourceRoot":"","sources":["../../src/reporters/sarif.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export type TerminalMode = "default" | "quiet" | "verbose";
2
+ export interface TerminalOpts {
3
+ mode: TerminalMode;
4
+ color: boolean;
5
+ unicode: boolean;
6
+ width: number;
7
+ outDir: string | undefined;
8
+ fileCount: number;
9
+ durationMs: number;
10
+ cwd: string;
11
+ /** When false/undefined, a "no token registry" educational hint is shown after the score. */
12
+ hasTokenRegistry?: boolean;
13
+ findingsLimit?: number | null;
14
+ }
15
+ export declare function teal(s: string, opts: TerminalOpts): string;
16
+ export declare function thresholdColor(score: number | "N/A", opts: TerminalOpts): (s: string) => string;
17
+ export declare function severityColor(severity: "error" | "warning" | "info", opts: TerminalOpts): (s: string) => string;
18
+ export declare function dim(s: string, opts: TerminalOpts): string;
19
+ export declare function bold(s: string, opts: TerminalOpts): string;
20
+ export declare function bar(score: number | "N/A", opts: TerminalOpts, cells?: number): string;
21
+ /**
22
+ * Pads `text` to `targetWidth` visible columns. Uses string-width to count
23
+ * visible characters, so it works correctly on ANSI-colored or OSC 8 strings.
24
+ * For widths smaller than the visible text, returns the text unchanged.
25
+ */
26
+ export declare function visiblePad(text: string, targetWidth: number, side?: "left" | "right"): string;
27
+ /**
28
+ * Returns `text` if it fits within `maxWidth` visible columns. Otherwise
29
+ * truncates from the START (keeping the most meaningful tail — file leaf,
30
+ * line number) prefixed with `…`. Width-aware via string-width.
31
+ */
32
+ export declare function truncateStart(text: string, maxWidth: number): string;
33
+ export declare function statusDot(score: number | "N/A", opts: TerminalOpts): string;
34
+ export declare function link(text: string, url: string, opts: TerminalOpts): string;