@opensip-cli/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (604) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +8 -0
  3. package/README.md +31 -0
  4. package/dist/__tests__/config-resolution.test.d.ts +2 -0
  5. package/dist/__tests__/config-resolution.test.d.ts.map +1 -0
  6. package/dist/__tests__/config-resolution.test.js +94 -0
  7. package/dist/__tests__/config-resolution.test.js.map +1 -0
  8. package/dist/__tests__/public-api.test.d.ts +16 -0
  9. package/dist/__tests__/public-api.test.d.ts.map +1 -0
  10. package/dist/__tests__/public-api.test.js +209 -0
  11. package/dist/__tests__/public-api.test.js.map +1 -0
  12. package/dist/__tests__/signal-batch.test.d.ts +2 -0
  13. package/dist/__tests__/signal-batch.test.d.ts.map +1 -0
  14. package/dist/__tests__/signal-batch.test.js +39 -0
  15. package/dist/__tests__/signal-batch.test.js.map +1 -0
  16. package/dist/__tests__/signal-sink.test.d.ts +2 -0
  17. package/dist/__tests__/signal-sink.test.d.ts.map +1 -0
  18. package/dist/__tests__/signal-sink.test.js +25 -0
  19. package/dist/__tests__/signal-sink.test.js.map +1 -0
  20. package/dist/__tests__/strip-utils.test.d.ts +2 -0
  21. package/dist/__tests__/strip-utils.test.d.ts.map +1 -0
  22. package/dist/__tests__/strip-utils.test.js +397 -0
  23. package/dist/__tests__/strip-utils.test.js.map +1 -0
  24. package/dist/__tests__/text-tree.test.d.ts +2 -0
  25. package/dist/__tests__/text-tree.test.d.ts.map +1 -0
  26. package/dist/__tests__/text-tree.test.js +31 -0
  27. package/dist/__tests__/text-tree.test.js.map +1 -0
  28. package/dist/baseline/__tests__/fingerprint-strategy.test.d.ts +2 -0
  29. package/dist/baseline/__tests__/fingerprint-strategy.test.d.ts.map +1 -0
  30. package/dist/baseline/__tests__/fingerprint-strategy.test.js +69 -0
  31. package/dist/baseline/__tests__/fingerprint-strategy.test.js.map +1 -0
  32. package/dist/baseline/fingerprint-strategy.d.ts +70 -0
  33. package/dist/baseline/fingerprint-strategy.d.ts.map +1 -0
  34. package/dist/baseline/fingerprint-strategy.js +90 -0
  35. package/dist/baseline/fingerprint-strategy.js.map +1 -0
  36. package/dist/config-resolution.d.ts +27 -0
  37. package/dist/config-resolution.d.ts.map +1 -0
  38. package/dist/config-resolution.js +92 -0
  39. package/dist/config-resolution.js.map +1 -0
  40. package/dist/index.d.ts +81 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +165 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/languages/__tests__/content-filter-dispatch.test.d.ts +2 -0
  45. package/dist/languages/__tests__/content-filter-dispatch.test.d.ts.map +1 -0
  46. package/dist/languages/__tests__/content-filter-dispatch.test.js +87 -0
  47. package/dist/languages/__tests__/content-filter-dispatch.test.js.map +1 -0
  48. package/dist/languages/__tests__/non-code-formats.test.d.ts +2 -0
  49. package/dist/languages/__tests__/non-code-formats.test.d.ts.map +1 -0
  50. package/dist/languages/__tests__/non-code-formats.test.js +31 -0
  51. package/dist/languages/__tests__/non-code-formats.test.js.map +1 -0
  52. package/dist/languages/__tests__/parse-cache.test.d.ts +2 -0
  53. package/dist/languages/__tests__/parse-cache.test.d.ts.map +1 -0
  54. package/dist/languages/__tests__/parse-cache.test.js +228 -0
  55. package/dist/languages/__tests__/parse-cache.test.js.map +1 -0
  56. package/dist/languages/__tests__/registry.test.d.ts +2 -0
  57. package/dist/languages/__tests__/registry.test.d.ts.map +1 -0
  58. package/dist/languages/__tests__/registry.test.js +193 -0
  59. package/dist/languages/__tests__/registry.test.js.map +1 -0
  60. package/dist/languages/__tests__/workspace-unit-contract.test.d.ts +2 -0
  61. package/dist/languages/__tests__/workspace-unit-contract.test.d.ts.map +1 -0
  62. package/dist/languages/__tests__/workspace-unit-contract.test.js +66 -0
  63. package/dist/languages/__tests__/workspace-unit-contract.test.js.map +1 -0
  64. package/dist/languages/adapter.d.ts +66 -0
  65. package/dist/languages/adapter.d.ts.map +1 -0
  66. package/dist/languages/adapter.js +2 -0
  67. package/dist/languages/adapter.js.map +1 -0
  68. package/dist/languages/content-filter-dispatch.d.ts +36 -0
  69. package/dist/languages/content-filter-dispatch.d.ts.map +1 -0
  70. package/dist/languages/content-filter-dispatch.js +75 -0
  71. package/dist/languages/content-filter-dispatch.js.map +1 -0
  72. package/dist/languages/generic-types.d.ts +22 -0
  73. package/dist/languages/generic-types.d.ts.map +1 -0
  74. package/dist/languages/generic-types.js +3 -0
  75. package/dist/languages/generic-types.js.map +1 -0
  76. package/dist/languages/index.d.ts +12 -0
  77. package/dist/languages/index.d.ts.map +1 -0
  78. package/dist/languages/index.js +7 -0
  79. package/dist/languages/index.js.map +1 -0
  80. package/dist/languages/non-code-formats.d.ts +37 -0
  81. package/dist/languages/non-code-formats.d.ts.map +1 -0
  82. package/dist/languages/non-code-formats.js +45 -0
  83. package/dist/languages/non-code-formats.js.map +1 -0
  84. package/dist/languages/parse-cache-class.d.ts +69 -0
  85. package/dist/languages/parse-cache-class.d.ts.map +1 -0
  86. package/dist/languages/parse-cache-class.js +135 -0
  87. package/dist/languages/parse-cache-class.js.map +1 -0
  88. package/dist/languages/parse-cache.d.ts +54 -0
  89. package/dist/languages/parse-cache.d.ts.map +1 -0
  90. package/dist/languages/parse-cache.js +88 -0
  91. package/dist/languages/parse-cache.js.map +1 -0
  92. package/dist/languages/registry.d.ts +35 -0
  93. package/dist/languages/registry.d.ts.map +1 -0
  94. package/dist/languages/registry.js +123 -0
  95. package/dist/languages/registry.js.map +1 -0
  96. package/dist/languages/strip-scanners.d.ts +170 -0
  97. package/dist/languages/strip-scanners.d.ts.map +1 -0
  98. package/dist/languages/strip-scanners.js +233 -0
  99. package/dist/languages/strip-scanners.js.map +1 -0
  100. package/dist/languages/strip-utils.d.ts +66 -0
  101. package/dist/languages/strip-utils.d.ts.map +1 -0
  102. package/dist/languages/strip-utils.js +88 -0
  103. package/dist/languages/strip-utils.js.map +1 -0
  104. package/dist/languages/text-tree.d.ts +44 -0
  105. package/dist/languages/text-tree.d.ts.map +1 -0
  106. package/dist/languages/text-tree.js +34 -0
  107. package/dist/languages/text-tree.js.map +1 -0
  108. package/dist/languages/workspace-unit.d.ts +18 -0
  109. package/dist/languages/workspace-unit.d.ts.map +1 -0
  110. package/dist/languages/workspace-unit.js +2 -0
  111. package/dist/languages/workspace-unit.js.map +1 -0
  112. package/dist/lib/__tests__/config-version.test.d.ts +12 -0
  113. package/dist/lib/__tests__/config-version.test.d.ts.map +1 -0
  114. package/dist/lib/__tests__/config-version.test.js +92 -0
  115. package/dist/lib/__tests__/config-version.test.js.map +1 -0
  116. package/dist/lib/__tests__/diagnostics-bus.test.d.ts +7 -0
  117. package/dist/lib/__tests__/diagnostics-bus.test.d.ts.map +1 -0
  118. package/dist/lib/__tests__/diagnostics-bus.test.js +44 -0
  119. package/dist/lib/__tests__/diagnostics-bus.test.js.map +1 -0
  120. package/dist/lib/__tests__/env-registry.test.d.ts +7 -0
  121. package/dist/lib/__tests__/env-registry.test.d.ts.map +1 -0
  122. package/dist/lib/__tests__/env-registry.test.js +82 -0
  123. package/dist/lib/__tests__/env-registry.test.js.map +1 -0
  124. package/dist/lib/__tests__/errors.test.d.ts +2 -0
  125. package/dist/lib/__tests__/errors.test.d.ts.map +1 -0
  126. package/dist/lib/__tests__/errors.test.js +218 -0
  127. package/dist/lib/__tests__/errors.test.js.map +1 -0
  128. package/dist/lib/__tests__/format.test.d.ts +2 -0
  129. package/dist/lib/__tests__/format.test.d.ts.map +1 -0
  130. package/dist/lib/__tests__/format.test.js +23 -0
  131. package/dist/lib/__tests__/format.test.js.map +1 -0
  132. package/dist/lib/__tests__/ids.test.d.ts +2 -0
  133. package/dist/lib/__tests__/ids.test.d.ts.map +1 -0
  134. package/dist/lib/__tests__/ids.test.js +80 -0
  135. package/dist/lib/__tests__/ids.test.js.map +1 -0
  136. package/dist/lib/__tests__/logger.test.d.ts +2 -0
  137. package/dist/lib/__tests__/logger.test.d.ts.map +1 -0
  138. package/dist/lib/__tests__/logger.test.js +284 -0
  139. package/dist/lib/__tests__/logger.test.js.map +1 -0
  140. package/dist/lib/__tests__/package-version.test.d.ts +2 -0
  141. package/dist/lib/__tests__/package-version.test.d.ts.map +1 -0
  142. package/dist/lib/__tests__/package-version.test.js +47 -0
  143. package/dist/lib/__tests__/package-version.test.js.map +1 -0
  144. package/dist/lib/__tests__/paths.test.d.ts +5 -0
  145. package/dist/lib/__tests__/paths.test.d.ts.map +1 -0
  146. package/dist/lib/__tests__/paths.test.js +59 -0
  147. package/dist/lib/__tests__/paths.test.js.map +1 -0
  148. package/dist/lib/__tests__/payload-version.test.d.ts +2 -0
  149. package/dist/lib/__tests__/payload-version.test.d.ts.map +1 -0
  150. package/dist/lib/__tests__/payload-version.test.js +35 -0
  151. package/dist/lib/__tests__/payload-version.test.js.map +1 -0
  152. package/dist/lib/__tests__/phantom-detect.test.d.ts +10 -0
  153. package/dist/lib/__tests__/phantom-detect.test.d.ts.map +1 -0
  154. package/dist/lib/__tests__/phantom-detect.test.js +84 -0
  155. package/dist/lib/__tests__/phantom-detect.test.js.map +1 -0
  156. package/dist/lib/__tests__/project-context.test.d.ts +10 -0
  157. package/dist/lib/__tests__/project-context.test.d.ts.map +1 -0
  158. package/dist/lib/__tests__/project-context.test.js +240 -0
  159. package/dist/lib/__tests__/project-context.test.js.map +1 -0
  160. package/dist/lib/__tests__/registry.test.d.ts +2 -0
  161. package/dist/lib/__tests__/registry.test.d.ts.map +1 -0
  162. package/dist/lib/__tests__/registry.test.js +333 -0
  163. package/dist/lib/__tests__/registry.test.js.map +1 -0
  164. package/dist/lib/__tests__/retry.test.d.ts +2 -0
  165. package/dist/lib/__tests__/retry.test.d.ts.map +1 -0
  166. package/dist/lib/__tests__/retry.test.js +71 -0
  167. package/dist/lib/__tests__/retry.test.js.map +1 -0
  168. package/dist/lib/__tests__/run-diagnostics.test.d.ts +9 -0
  169. package/dist/lib/__tests__/run-diagnostics.test.d.ts.map +1 -0
  170. package/dist/lib/__tests__/run-diagnostics.test.js +61 -0
  171. package/dist/lib/__tests__/run-diagnostics.test.js.map +1 -0
  172. package/dist/lib/__tests__/run-scope.test.d.ts +2 -0
  173. package/dist/lib/__tests__/run-scope.test.d.ts.map +1 -0
  174. package/dist/lib/__tests__/run-scope.test.js +202 -0
  175. package/dist/lib/__tests__/run-scope.test.js.map +1 -0
  176. package/dist/lib/__tests__/run-timer.test.d.ts +2 -0
  177. package/dist/lib/__tests__/run-timer.test.d.ts.map +1 -0
  178. package/dist/lib/__tests__/run-timer.test.js +152 -0
  179. package/dist/lib/__tests__/run-timer.test.js.map +1 -0
  180. package/dist/lib/__tests__/severity-policy.test.d.ts +6 -0
  181. package/dist/lib/__tests__/severity-policy.test.d.ts.map +1 -0
  182. package/dist/lib/__tests__/severity-policy.test.js +47 -0
  183. package/dist/lib/__tests__/severity-policy.test.js.map +1 -0
  184. package/dist/lib/__tests__/telemetry.test.d.ts +2 -0
  185. package/dist/lib/__tests__/telemetry.test.d.ts.map +1 -0
  186. package/dist/lib/__tests__/telemetry.test.js +212 -0
  187. package/dist/lib/__tests__/telemetry.test.js.map +1 -0
  188. package/dist/lib/__tests__/verdict-policy.test.d.ts +7 -0
  189. package/dist/lib/__tests__/verdict-policy.test.d.ts.map +1 -0
  190. package/dist/lib/__tests__/verdict-policy.test.js +91 -0
  191. package/dist/lib/__tests__/verdict-policy.test.js.map +1 -0
  192. package/dist/lib/__tests__/yaml.test.d.ts +6 -0
  193. package/dist/lib/__tests__/yaml.test.d.ts.map +1 -0
  194. package/dist/lib/__tests__/yaml.test.js +79 -0
  195. package/dist/lib/__tests__/yaml.test.js.map +1 -0
  196. package/dist/lib/config-version.d.ts +49 -0
  197. package/dist/lib/config-version.d.ts.map +1 -0
  198. package/dist/lib/config-version.js +56 -0
  199. package/dist/lib/config-version.js.map +1 -0
  200. package/dist/lib/diagnostics-bus.d.ts +48 -0
  201. package/dist/lib/diagnostics-bus.d.ts.map +1 -0
  202. package/dist/lib/diagnostics-bus.js +74 -0
  203. package/dist/lib/diagnostics-bus.js.map +1 -0
  204. package/dist/lib/env-registry.d.ts +108 -0
  205. package/dist/lib/env-registry.d.ts.map +1 -0
  206. package/dist/lib/env-registry.js +92 -0
  207. package/dist/lib/env-registry.js.map +1 -0
  208. package/dist/lib/errors.d.ts +132 -0
  209. package/dist/lib/errors.d.ts.map +1 -0
  210. package/dist/lib/errors.js +160 -0
  211. package/dist/lib/errors.js.map +1 -0
  212. package/dist/lib/execution/__tests__/execution.test.d.ts +7 -0
  213. package/dist/lib/execution/__tests__/execution.test.d.ts.map +1 -0
  214. package/dist/lib/execution/__tests__/execution.test.js +254 -0
  215. package/dist/lib/execution/__tests__/execution.test.js.map +1 -0
  216. package/dist/lib/execution/index.d.ts +15 -0
  217. package/dist/lib/execution/index.d.ts.map +1 -0
  218. package/dist/lib/execution/index.js +10 -0
  219. package/dist/lib/execution/index.js.map +1 -0
  220. package/dist/lib/execution/options.d.ts +32 -0
  221. package/dist/lib/execution/options.d.ts.map +1 -0
  222. package/dist/lib/execution/options.js +15 -0
  223. package/dist/lib/execution/options.js.map +1 -0
  224. package/dist/lib/execution/pipeline.d.ts +36 -0
  225. package/dist/lib/execution/pipeline.d.ts.map +1 -0
  226. package/dist/lib/execution/pipeline.js +38 -0
  227. package/dist/lib/execution/pipeline.js.map +1 -0
  228. package/dist/lib/execution/retry.d.ts +38 -0
  229. package/dist/lib/execution/retry.d.ts.map +1 -0
  230. package/dist/lib/execution/retry.js +56 -0
  231. package/dist/lib/execution/retry.js.map +1 -0
  232. package/dist/lib/execution/run-with-timeout.d.ts +46 -0
  233. package/dist/lib/execution/run-with-timeout.d.ts.map +1 -0
  234. package/dist/lib/execution/run-with-timeout.js +86 -0
  235. package/dist/lib/execution/run-with-timeout.js.map +1 -0
  236. package/dist/lib/execution/schedule.d.ts +62 -0
  237. package/dist/lib/execution/schedule.d.ts.map +1 -0
  238. package/dist/lib/execution/schedule.js +130 -0
  239. package/dist/lib/execution/schedule.js.map +1 -0
  240. package/dist/lib/format.d.ts +17 -0
  241. package/dist/lib/format.d.ts.map +1 -0
  242. package/dist/lib/format.js +26 -0
  243. package/dist/lib/format.js.map +1 -0
  244. package/dist/lib/ids.d.ts +13 -0
  245. package/dist/lib/ids.d.ts.map +1 -0
  246. package/dist/lib/ids.js +48 -0
  247. package/dist/lib/ids.js.map +1 -0
  248. package/dist/lib/logger.d.ts +166 -0
  249. package/dist/lib/logger.d.ts.map +1 -0
  250. package/dist/lib/logger.js +283 -0
  251. package/dist/lib/logger.js.map +1 -0
  252. package/dist/lib/package-version.d.ts +17 -0
  253. package/dist/lib/package-version.d.ts.map +1 -0
  254. package/dist/lib/package-version.js +52 -0
  255. package/dist/lib/package-version.js.map +1 -0
  256. package/dist/lib/paths.d.ts +139 -0
  257. package/dist/lib/paths.d.ts.map +1 -0
  258. package/dist/lib/paths.js +105 -0
  259. package/dist/lib/paths.js.map +1 -0
  260. package/dist/lib/payload-version.d.ts +15 -0
  261. package/dist/lib/payload-version.d.ts.map +1 -0
  262. package/dist/lib/payload-version.js +24 -0
  263. package/dist/lib/payload-version.js.map +1 -0
  264. package/dist/lib/phantom-detect.d.ts +21 -0
  265. package/dist/lib/phantom-detect.d.ts.map +1 -0
  266. package/dist/lib/phantom-detect.js +76 -0
  267. package/dist/lib/phantom-detect.js.map +1 -0
  268. package/dist/lib/project-context.d.ts +66 -0
  269. package/dist/lib/project-context.d.ts.map +1 -0
  270. package/dist/lib/project-context.js +112 -0
  271. package/dist/lib/project-context.js.map +1 -0
  272. package/dist/lib/recipe-id.d.ts +13 -0
  273. package/dist/lib/recipe-id.d.ts.map +1 -0
  274. package/dist/lib/recipe-id.js +15 -0
  275. package/dist/lib/recipe-id.js.map +1 -0
  276. package/dist/lib/registry.d.ts +98 -0
  277. package/dist/lib/registry.d.ts.map +1 -0
  278. package/dist/lib/registry.js +152 -0
  279. package/dist/lib/registry.js.map +1 -0
  280. package/dist/lib/retry.d.ts +26 -0
  281. package/dist/lib/retry.d.ts.map +1 -0
  282. package/dist/lib/retry.js +48 -0
  283. package/dist/lib/retry.js.map +1 -0
  284. package/dist/lib/run-diagnostics.d.ts +64 -0
  285. package/dist/lib/run-diagnostics.d.ts.map +1 -0
  286. package/dist/lib/run-diagnostics.js +25 -0
  287. package/dist/lib/run-diagnostics.js.map +1 -0
  288. package/dist/lib/run-scope.d.ts +167 -0
  289. package/dist/lib/run-scope.d.ts.map +1 -0
  290. package/dist/lib/run-scope.js +176 -0
  291. package/dist/lib/run-scope.js.map +1 -0
  292. package/dist/lib/run-timer.d.ts +82 -0
  293. package/dist/lib/run-timer.d.ts.map +1 -0
  294. package/dist/lib/run-timer.js +79 -0
  295. package/dist/lib/run-timer.js.map +1 -0
  296. package/dist/lib/scope-types.d.ts +172 -0
  297. package/dist/lib/scope-types.d.ts.map +1 -0
  298. package/dist/lib/scope-types.js +27 -0
  299. package/dist/lib/scope-types.js.map +1 -0
  300. package/dist/lib/severity-policy.d.ts +38 -0
  301. package/dist/lib/severity-policy.d.ts.map +1 -0
  302. package/dist/lib/severity-policy.js +44 -0
  303. package/dist/lib/severity-policy.js.map +1 -0
  304. package/dist/lib/telemetry.d.ts +93 -0
  305. package/dist/lib/telemetry.d.ts.map +1 -0
  306. package/dist/lib/telemetry.js +144 -0
  307. package/dist/lib/telemetry.js.map +1 -0
  308. package/dist/lib/ui-context.d.ts +34 -0
  309. package/dist/lib/ui-context.d.ts.map +1 -0
  310. package/dist/lib/ui-context.js +16 -0
  311. package/dist/lib/ui-context.js.map +1 -0
  312. package/dist/lib/verdict-policy.d.ts +71 -0
  313. package/dist/lib/verdict-policy.d.ts.map +1 -0
  314. package/dist/lib/verdict-policy.js +82 -0
  315. package/dist/lib/verdict-policy.js.map +1 -0
  316. package/dist/lib/yaml.d.ts +74 -0
  317. package/dist/lib/yaml.d.ts.map +1 -0
  318. package/dist/lib/yaml.js +118 -0
  319. package/dist/lib/yaml.js.map +1 -0
  320. package/dist/plugins/__tests__/as-if-external.test.d.ts +18 -0
  321. package/dist/plugins/__tests__/as-if-external.test.d.ts.map +1 -0
  322. package/dist/plugins/__tests__/as-if-external.test.js +159 -0
  323. package/dist/plugins/__tests__/as-if-external.test.js.map +1 -0
  324. package/dist/plugins/__tests__/authored-tool-discovery.test.d.ts +8 -0
  325. package/dist/plugins/__tests__/authored-tool-discovery.test.d.ts.map +1 -0
  326. package/dist/plugins/__tests__/authored-tool-discovery.test.js +97 -0
  327. package/dist/plugins/__tests__/authored-tool-discovery.test.js.map +1 -0
  328. package/dist/plugins/__tests__/capability-discovery.test.d.ts +2 -0
  329. package/dist/plugins/__tests__/capability-discovery.test.d.ts.map +1 -0
  330. package/dist/plugins/__tests__/capability-discovery.test.js +349 -0
  331. package/dist/plugins/__tests__/capability-discovery.test.js.map +1 -0
  332. package/dist/plugins/__tests__/capability-from-manifest.test.d.ts +2 -0
  333. package/dist/plugins/__tests__/capability-from-manifest.test.d.ts.map +1 -0
  334. package/dist/plugins/__tests__/capability-from-manifest.test.js +172 -0
  335. package/dist/plugins/__tests__/capability-from-manifest.test.js.map +1 -0
  336. package/dist/plugins/__tests__/capability-loader.test.d.ts +2 -0
  337. package/dist/plugins/__tests__/capability-loader.test.d.ts.map +1 -0
  338. package/dist/plugins/__tests__/capability-loader.test.js +122 -0
  339. package/dist/plugins/__tests__/capability-loader.test.js.map +1 -0
  340. package/dist/plugins/__tests__/capability-registry.test.d.ts +2 -0
  341. package/dist/plugins/__tests__/capability-registry.test.d.ts.map +1 -0
  342. package/dist/plugins/__tests__/capability-registry.test.js +185 -0
  343. package/dist/plugins/__tests__/capability-registry.test.js.map +1 -0
  344. package/dist/plugins/__tests__/discover.test.d.ts +2 -0
  345. package/dist/plugins/__tests__/discover.test.d.ts.map +1 -0
  346. package/dist/plugins/__tests__/discover.test.js +311 -0
  347. package/dist/plugins/__tests__/discover.test.js.map +1 -0
  348. package/dist/plugins/__tests__/loader.test.d.ts +2 -0
  349. package/dist/plugins/__tests__/loader.test.d.ts.map +1 -0
  350. package/dist/plugins/__tests__/loader.test.js +191 -0
  351. package/dist/plugins/__tests__/loader.test.js.map +1 -0
  352. package/dist/plugins/__tests__/manifest-discovery.test.d.ts +2 -0
  353. package/dist/plugins/__tests__/manifest-discovery.test.d.ts.map +1 -0
  354. package/dist/plugins/__tests__/manifest-discovery.test.js +132 -0
  355. package/dist/plugins/__tests__/manifest-discovery.test.js.map +1 -0
  356. package/dist/plugins/__tests__/manifest-loader.test.d.ts +2 -0
  357. package/dist/plugins/__tests__/manifest-loader.test.d.ts.map +1 -0
  358. package/dist/plugins/__tests__/manifest-loader.test.js +434 -0
  359. package/dist/plugins/__tests__/manifest-loader.test.js.map +1 -0
  360. package/dist/plugins/__tests__/marker-discovery.test.d.ts +2 -0
  361. package/dist/plugins/__tests__/marker-discovery.test.d.ts.map +1 -0
  362. package/dist/plugins/__tests__/marker-discovery.test.js +164 -0
  363. package/dist/plugins/__tests__/marker-discovery.test.js.map +1 -0
  364. package/dist/plugins/__tests__/node-modules-walk.test.d.ts +2 -0
  365. package/dist/plugins/__tests__/node-modules-walk.test.d.ts.map +1 -0
  366. package/dist/plugins/__tests__/node-modules-walk.test.js +76 -0
  367. package/dist/plugins/__tests__/node-modules-walk.test.js.map +1 -0
  368. package/dist/plugins/__tests__/package-entry.test.d.ts +9 -0
  369. package/dist/plugins/__tests__/package-entry.test.d.ts.map +1 -0
  370. package/dist/plugins/__tests__/package-entry.test.js +117 -0
  371. package/dist/plugins/__tests__/package-entry.test.js.map +1 -0
  372. package/dist/plugins/__tests__/recipe-loader.test.d.ts +2 -0
  373. package/dist/plugins/__tests__/recipe-loader.test.d.ts.map +1 -0
  374. package/dist/plugins/__tests__/recipe-loader.test.js +130 -0
  375. package/dist/plugins/__tests__/recipe-loader.test.js.map +1 -0
  376. package/dist/plugins/__tests__/scope-validation.test.d.ts +2 -0
  377. package/dist/plugins/__tests__/scope-validation.test.d.ts.map +1 -0
  378. package/dist/plugins/__tests__/scope-validation.test.js +68 -0
  379. package/dist/plugins/__tests__/scope-validation.test.js.map +1 -0
  380. package/dist/plugins/__tests__/single-core-guard.test.d.ts +10 -0
  381. package/dist/plugins/__tests__/single-core-guard.test.d.ts.map +1 -0
  382. package/dist/plugins/__tests__/single-core-guard.test.js +89 -0
  383. package/dist/plugins/__tests__/single-core-guard.test.js.map +1 -0
  384. package/dist/plugins/__tests__/tool-package-discovery.test.d.ts +2 -0
  385. package/dist/plugins/__tests__/tool-package-discovery.test.d.ts.map +1 -0
  386. package/dist/plugins/__tests__/tool-package-discovery.test.js +215 -0
  387. package/dist/plugins/__tests__/tool-package-discovery.test.js.map +1 -0
  388. package/dist/plugins/authored-tool-discovery.d.ts +45 -0
  389. package/dist/plugins/authored-tool-discovery.d.ts.map +1 -0
  390. package/dist/plugins/authored-tool-discovery.js +61 -0
  391. package/dist/plugins/authored-tool-discovery.js.map +1 -0
  392. package/dist/plugins/capability-discovery.d.ts +80 -0
  393. package/dist/plugins/capability-discovery.d.ts.map +1 -0
  394. package/dist/plugins/capability-discovery.js +278 -0
  395. package/dist/plugins/capability-discovery.js.map +1 -0
  396. package/dist/plugins/capability-loader.d.ts +50 -0
  397. package/dist/plugins/capability-loader.d.ts.map +1 -0
  398. package/dist/plugins/capability-loader.js +85 -0
  399. package/dist/plugins/capability-loader.js.map +1 -0
  400. package/dist/plugins/capability-registry.d.ts +169 -0
  401. package/dist/plugins/capability-registry.d.ts.map +1 -0
  402. package/dist/plugins/capability-registry.js +319 -0
  403. package/dist/plugins/capability-registry.js.map +1 -0
  404. package/dist/plugins/discover.d.ts +64 -0
  405. package/dist/plugins/discover.d.ts.map +1 -0
  406. package/dist/plugins/discover.js +303 -0
  407. package/dist/plugins/discover.js.map +1 -0
  408. package/dist/plugins/index.d.ts +37 -0
  409. package/dist/plugins/index.d.ts.map +1 -0
  410. package/dist/plugins/index.js +40 -0
  411. package/dist/plugins/index.js.map +1 -0
  412. package/dist/plugins/json-guards.d.ts +11 -0
  413. package/dist/plugins/json-guards.d.ts.map +1 -0
  414. package/dist/plugins/json-guards.js +15 -0
  415. package/dist/plugins/json-guards.js.map +1 -0
  416. package/dist/plugins/loader.d.ts +67 -0
  417. package/dist/plugins/loader.d.ts.map +1 -0
  418. package/dist/plugins/loader.js +137 -0
  419. package/dist/plugins/loader.js.map +1 -0
  420. package/dist/plugins/manifest-discovery.d.ts +28 -0
  421. package/dist/plugins/manifest-discovery.d.ts.map +1 -0
  422. package/dist/plugins/manifest-discovery.js +103 -0
  423. package/dist/plugins/manifest-discovery.js.map +1 -0
  424. package/dist/plugins/manifest-loader.d.ts +120 -0
  425. package/dist/plugins/manifest-loader.d.ts.map +1 -0
  426. package/dist/plugins/manifest-loader.js +410 -0
  427. package/dist/plugins/manifest-loader.js.map +1 -0
  428. package/dist/plugins/marker-discovery.d.ts +115 -0
  429. package/dist/plugins/marker-discovery.d.ts.map +1 -0
  430. package/dist/plugins/marker-discovery.js +172 -0
  431. package/dist/plugins/marker-discovery.js.map +1 -0
  432. package/dist/plugins/node-modules-walk.d.ts +61 -0
  433. package/dist/plugins/node-modules-walk.d.ts.map +1 -0
  434. package/dist/plugins/node-modules-walk.js +99 -0
  435. package/dist/plugins/node-modules-walk.js.map +1 -0
  436. package/dist/plugins/package-entry.d.ts +38 -0
  437. package/dist/plugins/package-entry.d.ts.map +1 -0
  438. package/dist/plugins/package-entry.js +86 -0
  439. package/dist/plugins/package-entry.js.map +1 -0
  440. package/dist/plugins/recipe-loader.d.ts +63 -0
  441. package/dist/plugins/recipe-loader.d.ts.map +1 -0
  442. package/dist/plugins/recipe-loader.js +67 -0
  443. package/dist/plugins/recipe-loader.js.map +1 -0
  444. package/dist/plugins/scope-validation.d.ts +35 -0
  445. package/dist/plugins/scope-validation.d.ts.map +1 -0
  446. package/dist/plugins/scope-validation.js +55 -0
  447. package/dist/plugins/scope-validation.js.map +1 -0
  448. package/dist/plugins/single-core-guard.d.ts +28 -0
  449. package/dist/plugins/single-core-guard.d.ts.map +1 -0
  450. package/dist/plugins/single-core-guard.js +69 -0
  451. package/dist/plugins/single-core-guard.js.map +1 -0
  452. package/dist/plugins/tool-package-discovery.d.ts +93 -0
  453. package/dist/plugins/tool-package-discovery.d.ts.map +1 -0
  454. package/dist/plugins/tool-package-discovery.js +118 -0
  455. package/dist/plugins/tool-package-discovery.js.map +1 -0
  456. package/dist/plugins/types.d.ts +78 -0
  457. package/dist/plugins/types.d.ts.map +1 -0
  458. package/dist/plugins/types.js +15 -0
  459. package/dist/plugins/types.js.map +1 -0
  460. package/dist/recipes/__tests__/registry.test.d.ts +2 -0
  461. package/dist/recipes/__tests__/registry.test.d.ts.map +1 -0
  462. package/dist/recipes/__tests__/registry.test.js +170 -0
  463. package/dist/recipes/__tests__/registry.test.js.map +1 -0
  464. package/dist/recipes/__tests__/selector.test.d.ts +20 -0
  465. package/dist/recipes/__tests__/selector.test.d.ts.map +1 -0
  466. package/dist/recipes/__tests__/selector.test.js +173 -0
  467. package/dist/recipes/__tests__/selector.test.js.map +1 -0
  468. package/dist/recipes/__tests__/unit-config.test.d.ts +7 -0
  469. package/dist/recipes/__tests__/unit-config.test.d.ts.map +1 -0
  470. package/dist/recipes/__tests__/unit-config.test.js +52 -0
  471. package/dist/recipes/__tests__/unit-config.test.js.map +1 -0
  472. package/dist/recipes/registry.d.ts +105 -0
  473. package/dist/recipes/registry.d.ts.map +1 -0
  474. package/dist/recipes/registry.js +141 -0
  475. package/dist/recipes/registry.js.map +1 -0
  476. package/dist/recipes/selector.d.ts +112 -0
  477. package/dist/recipes/selector.d.ts.map +1 -0
  478. package/dist/recipes/selector.js +134 -0
  479. package/dist/recipes/selector.js.map +1 -0
  480. package/dist/recipes/unit-config.d.ts +63 -0
  481. package/dist/recipes/unit-config.d.ts.map +1 -0
  482. package/dist/recipes/unit-config.js +68 -0
  483. package/dist/recipes/unit-config.js.map +1 -0
  484. package/dist/runtime/__tests__/in-process-transport.test.d.ts +6 -0
  485. package/dist/runtime/__tests__/in-process-transport.test.d.ts.map +1 -0
  486. package/dist/runtime/__tests__/in-process-transport.test.js +73 -0
  487. package/dist/runtime/__tests__/in-process-transport.test.js.map +1 -0
  488. package/dist/runtime/__tests__/subprocess-transport.test.d.ts +11 -0
  489. package/dist/runtime/__tests__/subprocess-transport.test.d.ts.map +1 -0
  490. package/dist/runtime/__tests__/subprocess-transport.test.js +118 -0
  491. package/dist/runtime/__tests__/subprocess-transport.test.js.map +1 -0
  492. package/dist/runtime/in-process-transport.d.ts +20 -0
  493. package/dist/runtime/in-process-transport.d.ts.map +1 -0
  494. package/dist/runtime/in-process-transport.js +49 -0
  495. package/dist/runtime/in-process-transport.js.map +1 -0
  496. package/dist/runtime/progress-transport.d.ts +73 -0
  497. package/dist/runtime/progress-transport.d.ts.map +1 -0
  498. package/dist/runtime/progress-transport.js +17 -0
  499. package/dist/runtime/progress-transport.js.map +1 -0
  500. package/dist/runtime/subprocess-transport.d.ts +43 -0
  501. package/dist/runtime/subprocess-transport.d.ts.map +1 -0
  502. package/dist/runtime/subprocess-transport.js +134 -0
  503. package/dist/runtime/subprocess-transport.js.map +1 -0
  504. package/dist/signals/comment-openers.d.ts +29 -0
  505. package/dist/signals/comment-openers.d.ts.map +1 -0
  506. package/dist/signals/comment-openers.js +41 -0
  507. package/dist/signals/comment-openers.js.map +1 -0
  508. package/dist/signals/comment-openers.test.d.ts +7 -0
  509. package/dist/signals/comment-openers.test.d.ts.map +1 -0
  510. package/dist/signals/comment-openers.test.js +41 -0
  511. package/dist/signals/comment-openers.test.js.map +1 -0
  512. package/dist/signals/create-signal-from-violation.d.ts +29 -0
  513. package/dist/signals/create-signal-from-violation.d.ts.map +1 -0
  514. package/dist/signals/create-signal-from-violation.js +29 -0
  515. package/dist/signals/create-signal-from-violation.js.map +1 -0
  516. package/dist/signals/signal-sink.d.ts +49 -0
  517. package/dist/signals/signal-sink.d.ts.map +1 -0
  518. package/dist/signals/signal-sink.js +6 -0
  519. package/dist/signals/signal-sink.js.map +1 -0
  520. package/dist/signals/suppress.d.ts +102 -0
  521. package/dist/signals/suppress.d.ts.map +1 -0
  522. package/dist/signals/suppress.js +325 -0
  523. package/dist/signals/suppress.js.map +1 -0
  524. package/dist/signals/suppress.test.d.ts +2 -0
  525. package/dist/signals/suppress.test.d.ts.map +1 -0
  526. package/dist/signals/suppress.test.js +213 -0
  527. package/dist/signals/suppress.test.js.map +1 -0
  528. package/dist/tools/__tests__/command-spec.test.d.ts +2 -0
  529. package/dist/tools/__tests__/command-spec.test.d.ts.map +1 -0
  530. package/dist/tools/__tests__/command-spec.test.js +191 -0
  531. package/dist/tools/__tests__/command-spec.test.js.map +1 -0
  532. package/dist/tools/__tests__/compatibility.test.d.ts +5 -0
  533. package/dist/tools/__tests__/compatibility.test.d.ts.map +1 -0
  534. package/dist/tools/__tests__/compatibility.test.js +41 -0
  535. package/dist/tools/__tests__/compatibility.test.js.map +1 -0
  536. package/dist/tools/__tests__/ids.test.d.ts +5 -0
  537. package/dist/tools/__tests__/ids.test.d.ts.map +1 -0
  538. package/dist/tools/__tests__/ids.test.js +56 -0
  539. package/dist/tools/__tests__/ids.test.js.map +1 -0
  540. package/dist/tools/__tests__/manifest-assert.test.d.ts +5 -0
  541. package/dist/tools/__tests__/manifest-assert.test.d.ts.map +1 -0
  542. package/dist/tools/__tests__/manifest-assert.test.js +66 -0
  543. package/dist/tools/__tests__/manifest-assert.test.js.map +1 -0
  544. package/dist/tools/__tests__/registry.test.d.ts +2 -0
  545. package/dist/tools/__tests__/registry.test.d.ts.map +1 -0
  546. package/dist/tools/__tests__/registry.test.js +93 -0
  547. package/dist/tools/__tests__/registry.test.js.map +1 -0
  548. package/dist/tools/__tests__/types.test.d.ts +2 -0
  549. package/dist/tools/__tests__/types.test.d.ts.map +1 -0
  550. package/dist/tools/__tests__/types.test.js +51 -0
  551. package/dist/tools/__tests__/types.test.js.map +1 -0
  552. package/dist/tools/capability.d.ts +257 -0
  553. package/dist/tools/capability.d.ts.map +1 -0
  554. package/dist/tools/capability.js +46 -0
  555. package/dist/tools/capability.js.map +1 -0
  556. package/dist/tools/command-spec.d.ts +211 -0
  557. package/dist/tools/command-spec.d.ts.map +1 -0
  558. package/dist/tools/command-spec.js +110 -0
  559. package/dist/tools/command-spec.js.map +1 -0
  560. package/dist/tools/compatibility.d.ts +45 -0
  561. package/dist/tools/compatibility.d.ts.map +1 -0
  562. package/dist/tools/compatibility.js +49 -0
  563. package/dist/tools/compatibility.js.map +1 -0
  564. package/dist/tools/ids.d.ts +61 -0
  565. package/dist/tools/ids.d.ts.map +1 -0
  566. package/dist/tools/ids.js +61 -0
  567. package/dist/tools/ids.js.map +1 -0
  568. package/dist/tools/index.d.ts +22 -0
  569. package/dist/tools/index.d.ts.map +1 -0
  570. package/dist/tools/index.js +28 -0
  571. package/dist/tools/index.js.map +1 -0
  572. package/dist/tools/manifest-assert.d.ts +35 -0
  573. package/dist/tools/manifest-assert.d.ts.map +1 -0
  574. package/dist/tools/manifest-assert.js +67 -0
  575. package/dist/tools/manifest-assert.js.map +1 -0
  576. package/dist/tools/manifest.d.ts +178 -0
  577. package/dist/tools/manifest.d.ts.map +1 -0
  578. package/dist/tools/manifest.js +35 -0
  579. package/dist/tools/manifest.js.map +1 -0
  580. package/dist/tools/registry.d.ts +37 -0
  581. package/dist/tools/registry.d.ts.map +1 -0
  582. package/dist/tools/registry.js +49 -0
  583. package/dist/tools/registry.js.map +1 -0
  584. package/dist/tools/types.d.ts +1021 -0
  585. package/dist/tools/types.d.ts.map +1 -0
  586. package/dist/tools/types.js +77 -0
  587. package/dist/tools/types.js.map +1 -0
  588. package/dist/types/__tests__/signal.test.d.ts +2 -0
  589. package/dist/types/__tests__/signal.test.d.ts.map +1 -0
  590. package/dist/types/__tests__/signal.test.js +111 -0
  591. package/dist/types/__tests__/signal.test.js.map +1 -0
  592. package/dist/types/index.d.ts +5 -0
  593. package/dist/types/index.d.ts.map +1 -0
  594. package/dist/types/index.js +3 -0
  595. package/dist/types/index.js.map +1 -0
  596. package/dist/types/signal-batch.d.ts +56 -0
  597. package/dist/types/signal-batch.d.ts.map +1 -0
  598. package/dist/types/signal-batch.js +54 -0
  599. package/dist/types/signal-batch.js.map +1 -0
  600. package/dist/types/signal.d.ts +77 -0
  601. package/dist/types/signal.d.ts.map +1 -0
  602. package/dist/types/signal.js +42 -0
  603. package/dist/types/signal.js.map +1 -0
  604. package/package.json +57 -0
@@ -0,0 +1,29 @@
1
+ /**
2
+ * createSignalFromViolation — the generic identity-stamping signal factory
3
+ * (north-star §5.9, launch).
4
+ *
5
+ * Generalizes fitness's `violationToSignal`: a tool hands a flat violation
6
+ * (`message`, author `severity`, location, optional suggestion) plus its
7
+ * `toolSource` + rule `slug`, and the factory STAMPS the `Signal` identity —
8
+ * `source`, `ruleId`, and the wire `severity` (via {@link SeverityPolicy}) — so an
9
+ * author never retypes fingerprint-relevant identity. Output is byte-identical to
10
+ * the per-tool hand-mapping it replaces.
11
+ */
12
+ import { type AuthorSeverity } from '../lib/severity-policy.js';
13
+ import { type Signal } from '../types/signal.js';
14
+ /** A flat violation: a message at a location with an author-level severity. */
15
+ export interface ViolationInput {
16
+ readonly message: string;
17
+ readonly severity: AuthorSeverity;
18
+ readonly suggestion?: string;
19
+ readonly file?: string;
20
+ readonly line?: number;
21
+ readonly column?: number;
22
+ }
23
+ /**
24
+ * Build a {@link Signal} from a violation, stamping `source`/`ruleId` from the
25
+ * tool + slug and the wire `severity` from the policy. `category` defaults to the
26
+ * neutral `quality` (via `createSignal`); the location rides on `code`.
27
+ */
28
+ export declare function createSignalFromViolation(toolSource: string, slug: string, violation: ViolationInput): Signal;
29
+ //# sourceMappingURL=create-signal-from-violation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-signal-from-violation.d.ts","sourceRoot":"","sources":["../../src/signals/create-signal-from-violation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE/D,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,cAAc,GACxB,MAAM,CASR"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * createSignalFromViolation — the generic identity-stamping signal factory
3
+ * (north-star §5.9, launch).
4
+ *
5
+ * Generalizes fitness's `violationToSignal`: a tool hands a flat violation
6
+ * (`message`, author `severity`, location, optional suggestion) plus its
7
+ * `toolSource` + rule `slug`, and the factory STAMPS the `Signal` identity —
8
+ * `source`, `ruleId`, and the wire `severity` (via {@link SeverityPolicy}) — so an
9
+ * author never retypes fingerprint-relevant identity. Output is byte-identical to
10
+ * the per-tool hand-mapping it replaces.
11
+ */
12
+ import { SeverityPolicy } from '../lib/severity-policy.js';
13
+ import { createSignal } from '../types/signal.js';
14
+ /**
15
+ * Build a {@link Signal} from a violation, stamping `source`/`ruleId` from the
16
+ * tool + slug and the wire `severity` from the policy. `category` defaults to the
17
+ * neutral `quality` (via `createSignal`); the location rides on `code`.
18
+ */
19
+ export function createSignalFromViolation(toolSource, slug, violation) {
20
+ return createSignal({
21
+ source: toolSource,
22
+ ruleId: slug,
23
+ severity: SeverityPolicy.liftAuthorSeverity(violation.severity),
24
+ message: violation.message,
25
+ suggestion: violation.suggestion,
26
+ code: { file: violation.file, line: violation.line, column: violation.column },
27
+ });
28
+ }
29
+ //# sourceMappingURL=create-signal-from-violation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-signal-from-violation.js","sourceRoot":"","sources":["../../src/signals/create-signal-from-violation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAuB,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAC;AAY/D;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,UAAkB,EAClB,IAAY,EACZ,SAAyB;IAEzB,OAAO,YAAY,CAAC;QAClB,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,cAAc,CAAC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC/D,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE;KAC/E,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * SignalSink — the decoupling seam for cloud signal egress (ADR-0008).
3
+ *
4
+ * A Strategy: callers depend on this interface, never on a concrete cloud
5
+ * client. The default is the Null-Object `noopSignalSink` (OSS / embedded /
6
+ * not-entitled → nothing happens). The OpenSIP Cloud implementation lives in
7
+ * @opensip-cli/output and depends *up* on core — core never imports it,
8
+ * keeping the kernel free of network concerns.
9
+ *
10
+ * Non-blocking invariant: `emit` MUST NOT throw and MUST NOT affect the run's
11
+ * exit code. A failing sink returns `{ accepted: 0, … }`. `authRejected` is the
12
+ * single piece of feedback a caller acts on — the CLI invalidates the cached
13
+ * entitlement on a 401/403 so a lapsed plan stops syncing within one run rather
14
+ * than one cache-TTL.
15
+ */
16
+ import type { SignalBatch } from '../types/signal-batch.js';
17
+ /** Outcome of an emit. `accepted` drives the "Sent N signals" message. */
18
+ export interface EmitResult {
19
+ /** Signals the server acknowledged. */
20
+ readonly accepted: number;
21
+ /** Server rejected auth (401/403) — caller busts the entitlement cache. */
22
+ readonly authRejected: boolean;
23
+ /**
24
+ * Why an active sink accepted nothing, when that is knowable. Best-effort
25
+ * delivery stays non-blocking (ADR-0008) — this exists so the composition
26
+ * root can SURFACE a skip ("0 of N signals delivered: not entitled") instead
27
+ * of the user silently believing their signals shipped. `'unentitled'` — the
28
+ * entitlement check said no; `'error'` — the emit faulted (network, server).
29
+ * Omitted on success and on the no-op sink (where silence is correct: the
30
+ * user opted out or never configured a key).
31
+ */
32
+ readonly skippedReason?: 'unentitled' | 'error';
33
+ }
34
+ /** A best-effort destination for a run's signals. Implementations MUST NOT throw. */
35
+ export interface SignalSink {
36
+ emit(batch: SignalBatch): Promise<EmitResult>;
37
+ /**
38
+ * Marks an INTENTIONAL no-delivery sink (the user opted out or never
39
+ * configured a key). The composition root keeps such sinks silent — no
40
+ * "0 signals uploaded" notice — whereas an active sink that ships nothing
41
+ * gets a skip notice. A behavioral discriminator, deliberately NOT an
42
+ * identity check against {@link noopSignalSink}: any host (embedded/SaaS)
43
+ * may construct its own no-op sink and it must substitute cleanly.
44
+ */
45
+ readonly noop?: true;
46
+ }
47
+ /** The default sink: does nothing, accepts nothing. Used whenever cloud sync is off. */
48
+ export declare const noopSignalSink: SignalSink;
49
+ //# sourceMappingURL=signal-sink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-sink.d.ts","sourceRoot":"","sources":["../../src/signals/signal-sink.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,0EAA0E;AAC1E,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B;;;;;;;;OAQG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC;CACjD;AAED,qFAAqF;AACrF,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C;;;;;;;OAOG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;CACtB;AAED,wFAAwF;AACxF,eAAO,MAAM,cAAc,EAAE,UAG5B,CAAC"}
@@ -0,0 +1,6 @@
1
+ /** The default sink: does nothing, accepts nothing. Used whenever cloud sync is off. */
2
+ export const noopSignalSink = {
3
+ noop: true,
4
+ emit: () => Promise.resolve({ accepted: 0, authRejected: false }),
5
+ };
6
+ //# sourceMappingURL=signal-sink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-sink.js","sourceRoot":"","sources":["../../src/signals/signal-sink.ts"],"names":[],"mappings":"AAiDA,wFAAwF;AACxF,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;CAClE,CAAC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * @fileoverview Keyword-agnostic inline-suppression primitive (ADR-0014).
3
+ *
4
+ * The shared machinery behind `@fitness-ignore-*` and `@graph-ignore-*`: a
5
+ * pure text scan of comment directives plus a `Signal`-stream filter. It is
6
+ * keyword-agnostic (the directive keywords are a parameter) and performs no
7
+ * file I/O — content is read through an injected reader, keeping the kernel
8
+ * pure. The *vocabulary* (which keyword a tool uses) stays tool-owned and
9
+ * explicit; only the *machinery* is shared.
10
+ *
11
+ * Matching unit: each signal is tested against a set of **candidate source
12
+ * locations** (default: the signal's own `code`). Graph supplies extra
13
+ * candidate locations for `graph:cycle` (the SCC members) so a directive above
14
+ * any member matches — without this module knowing what an SCC is.
15
+ *
16
+ * Suppression is **unconditional**: a directive with no `-- reason` still
17
+ * suppresses. Reason quality is audited out-of-band (e.g. the
18
+ * `graph-ignore-hygiene` / `fitness-ignore-hygiene` checks), never enforced
19
+ * here.
20
+ */
21
+ import type { Signal } from '../types/signal.js';
22
+ /** The two directive keywords a tool owns. */
23
+ export interface SuppressionKeywords {
24
+ /** File-level directive, e.g. `@fitness-ignore-file` / `@graph-ignore-file`. */
25
+ readonly file: string;
26
+ /** Next-line directive, e.g. `@fitness-ignore-next-line` / `@graph-ignore-next-line`. */
27
+ readonly nextLine: string;
28
+ }
29
+ /** A candidate source location a directive may target for a given signal. */
30
+ export interface SuppressionLocation {
31
+ readonly file: string;
32
+ /** 1-based line; omit for a file-only candidate. */
33
+ readonly line?: number;
34
+ }
35
+ /** Request for {@link filterSignalsBySuppressions}. */
36
+ export interface SuppressionRequest {
37
+ readonly signals: readonly Signal[];
38
+ /** The tool's explicit directive keywords. */
39
+ readonly keywords: SuppressionKeywords;
40
+ /** Injected content reader (kernel performs no file I/O). */
41
+ readonly readFile: (filePath: string) => Promise<string>;
42
+ /**
43
+ * Candidate locations a directive may target for this signal. Defaults to
44
+ * the signal's own `code` location. Graph overrides this for `graph:cycle`.
45
+ */
46
+ readonly locate?: (signal: Signal) => readonly SuppressionLocation[];
47
+ /**
48
+ * The id a directive must name to suppress this signal. Defaults to
49
+ * `signal.ruleId`. Fitness passes `() => checkId` to reproduce its exact
50
+ * per-check semantics.
51
+ */
52
+ readonly ruleIdOf?: (signal: Signal) => string;
53
+ }
54
+ /** One suppressed signal + the directive that suppressed it. */
55
+ export interface SuppressionMatch {
56
+ readonly signal: Signal;
57
+ readonly ruleId: string;
58
+ readonly file: string;
59
+ /** The 1-based line, or `'file'` for a file-level directive. */
60
+ readonly line: number | 'file';
61
+ }
62
+ /** Result of {@link filterSignalsBySuppressions}. */
63
+ export interface SuppressionResult {
64
+ readonly kept: readonly Signal[];
65
+ readonly suppressed: readonly SuppressionMatch[];
66
+ }
67
+ /**
68
+ * Per-file scan result. Exposed so lower-level callers (e.g. fitness's
69
+ * `parseFileIgnoreDirective` / `parseIgnoreDirectives` wrappers) can build on
70
+ * the same single scan implementation instead of re-deriving it.
71
+ */
72
+ export interface SuppressionScan {
73
+ /** Ids named by a file-level directive. */
74
+ readonly fileIgnoredIds: ReadonlySet<string>;
75
+ /** Target 1-based line → ids named by a next-line directive. */
76
+ readonly lineIgnoredIds: ReadonlyMap<number, ReadonlySet<string>>;
77
+ /** 1-based lines that ARE directive comments (anti-recursion guard). */
78
+ readonly directiveLines: ReadonlySet<number>;
79
+ }
80
+ /** Scan a file's content once, extracting every directive for `keywords`. */
81
+ export declare function scanSuppressionDirectives(content: string, keywords: SuppressionKeywords): SuppressionScan;
82
+ /**
83
+ * Filter a `Signal` stream by inline suppression directives.
84
+ *
85
+ * Each file referenced by a candidate location is read once (via the injected
86
+ * `readFile`) and scanned once. A signal is suppressed when, for ANY of its
87
+ * candidate locations, the directive id (`ruleIdOf(signal)`, default
88
+ * `signal.ruleId`) is file-ignored for that file, or next-line-ignored at that
89
+ * location's line. A location pointing AT a directive line is never suppressed
90
+ * by a next-line directive (anti-recursion); file-level still applies.
91
+ *
92
+ * Read-failure posture (fail-loud; Phase 5): the injected `readFile` reads
93
+ * project SOURCE files the analyzers already loaded, so a read failure is
94
+ * UNEXPECTED. An `ENOENT` (the file was genuinely removed) is non-fatal but
95
+ * ATTRIBUTED — it is surfaced via a warning-level `signals.suppress.directive-
96
+ * file-missing` log (so a potentially-dropped waiver is diagnosable) and that
97
+ * file contributes no directives. ANY other read failure (`EACCES`, `EMFILE`,
98
+ * decode error, …) is propagated (THROWS) — the run aborts loudly rather than
99
+ * silently dropping a waiver and leaking the waived signal as a finding.
100
+ */
101
+ export declare function filterSignalsBySuppressions(request: SuppressionRequest): Promise<SuppressionResult>;
102
+ //# sourceMappingURL=suppress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suppress.d.ts","sourceRoot":"","sources":["../../src/signals/suppress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAMjD,8CAA8C;AAC9C,MAAM,WAAW,mBAAmB;IAClC,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,6EAA6E;AAC7E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,uDAAuD;AACvD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,mBAAmB,EAAE,CAAC;IACrE;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CAChD;AAED,gEAAgE;AAChE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAClD;AA+HD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,gEAAgE;IAChE,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,wEAAwE;IACxE,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC9C;AAED,6EAA6E;AAC7E,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,mBAAmB,GAC5B,eAAe,CA0CjB;AAeD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CA2D5B"}
@@ -0,0 +1,325 @@
1
+ /**
2
+ * @fileoverview Keyword-agnostic inline-suppression primitive (ADR-0014).
3
+ *
4
+ * The shared machinery behind `@fitness-ignore-*` and `@graph-ignore-*`: a
5
+ * pure text scan of comment directives plus a `Signal`-stream filter. It is
6
+ * keyword-agnostic (the directive keywords are a parameter) and performs no
7
+ * file I/O — content is read through an injected reader, keeping the kernel
8
+ * pure. The *vocabulary* (which keyword a tool uses) stays tool-owned and
9
+ * explicit; only the *machinery* is shared.
10
+ *
11
+ * Matching unit: each signal is tested against a set of **candidate source
12
+ * locations** (default: the signal's own `code`). Graph supplies extra
13
+ * candidate locations for `graph:cycle` (the SCC members) so a directive above
14
+ * any member matches — without this module knowing what an SCC is.
15
+ *
16
+ * Suppression is **unconditional**: a directive with no `-- reason` still
17
+ * suppresses. Reason quality is audited out-of-band (e.g. the
18
+ * `graph-ignore-hygiene` / `fitness-ignore-hygiene` checks), never enforced
19
+ * here.
20
+ */
21
+ import { logger } from '../lib/logger.js';
22
+ import { COMMENT_OPENERS } from './comment-openers.js';
23
+ // =============================================================================
24
+ // INTERNAL CONSTANTS
25
+ // =============================================================================
26
+ /**
27
+ * When a next-line directive is itself preceded by other directive lines, the
28
+ * scanner skips over up to this many stacked directives to find the line the
29
+ * suppression actually targets.
30
+ */
31
+ const MAX_DIRECTIVE_SKIP = 3;
32
+ /**
33
+ * File-level directives are only honored in the first N lines of a file (they
34
+ * are a "near the top" convention). Matches the historical fitness limit.
35
+ */
36
+ const FILE_DIRECTIVE_SCAN_LIMIT = 50;
37
+ /**
38
+ * Directive keyword prefixes recognized when skipping over stacked directive
39
+ * lines to find a next-line target. Covers both first-party tools plus the
40
+ * common foreign suppressors so a stacked directive of any kind is skipped.
41
+ */
42
+ const KNOWN_DIRECTIVE_KEYWORDS = [
43
+ 'eslint-disable-next-line',
44
+ 'eslint-disable-line',
45
+ '@ts-expect-error',
46
+ '@ts-ignore',
47
+ '@ts-nocheck',
48
+ 'prettier-ignore',
49
+ 'biome-ignore',
50
+ '@fitness-ignore-next-line',
51
+ '@fitness-ignore-file',
52
+ '@graph-ignore-next-line',
53
+ '@graph-ignore-file',
54
+ ];
55
+ // =============================================================================
56
+ // INTERNAL — directive text scanning
57
+ // =============================================================================
58
+ function isIdChar(char) {
59
+ const code = char.codePointAt(0) ?? 0;
60
+ const isLowerCase = code >= 97 && code <= 122;
61
+ const isUpperCase = code >= 65 && code <= 90;
62
+ const isDigit = code >= 48 && code <= 57;
63
+ // `_` `-` `/` `:` — `:` admits namespaced ids like `graph:cycle`.
64
+ const isSpecialChar = code === 95 || code === 45 || code === 47 || code === 58;
65
+ return isLowerCase || isUpperCase || isDigit || isSpecialChar;
66
+ }
67
+ /**
68
+ * Extract the id token a directive names, or `null` when `line` is not a
69
+ * `<comment> <directiveKeyword> <id>` directive.
70
+ */
71
+ /**
72
+ * Find the first comment opener that is not inside a string literal.
73
+ * This prevents matching `//` inside "http://..." or "foo//bar" or directives
74
+ * hidden inside string literals (false positives) and ensures trailing
75
+ * directives after code-with-embedded-// are found (false negatives).
76
+ */
77
+ function findFirstRealCommentOpener(line) {
78
+ let i = 0;
79
+ const len = line.length;
80
+ let inString = null; // ' or "
81
+ while (i < len) {
82
+ const ch = line[i];
83
+ if (inString) {
84
+ if (ch === inString) {
85
+ // naive: no escape handling (sufficient for directive scanner; escaped quotes are rare in practice here)
86
+ inString = null;
87
+ }
88
+ i++;
89
+ continue;
90
+ }
91
+ if (ch === '"' || ch === "'") {
92
+ inString = ch;
93
+ i++;
94
+ continue;
95
+ }
96
+ // check for openers
97
+ for (const [opener, length] of COMMENT_OPENERS) {
98
+ if (line.startsWith(opener, i)) {
99
+ return { index: i, length };
100
+ }
101
+ }
102
+ i++;
103
+ }
104
+ return null;
105
+ }
106
+ function extractDirectiveId(line, directiveKeyword) {
107
+ const openerHit = findFirstRealCommentOpener(line);
108
+ if (!openerHit)
109
+ return null;
110
+ const afterComment = line.slice(openerHit.index + openerHit.length).trimStart();
111
+ if (!afterComment.startsWith(directiveKeyword))
112
+ return null;
113
+ const afterDirective = afterComment.slice(directiveKeyword.length);
114
+ if (afterDirective.length === 0 ||
115
+ (!afterDirective.startsWith(' ') && !afterDirective.startsWith('\t'))) {
116
+ return null;
117
+ }
118
+ let id = '';
119
+ for (const char of afterDirective.trimStart()) {
120
+ if (isIdChar(char))
121
+ id += char;
122
+ else
123
+ break;
124
+ }
125
+ return id.length > 0 ? id : null;
126
+ }
127
+ /** True when a line is a known directive comment (used to skip stacked directives). */
128
+ function isKnownDirectiveLine(line) {
129
+ const trimmed = line.trimStart();
130
+ if (!trimmed.startsWith('//') && !trimmed.startsWith('/*'))
131
+ return false;
132
+ const content = trimmed.slice(2).trimStart();
133
+ return KNOWN_DIRECTIVE_KEYWORDS.some((keyword) => {
134
+ if (!content.startsWith(keyword))
135
+ return false;
136
+ const next = content[keyword.length];
137
+ return next === undefined || next === ' ' || next === '\t' || next === ':';
138
+ });
139
+ }
140
+ /** Scan a file's content once, extracting every directive for `keywords`. */
141
+ export function scanSuppressionDirectives(content, keywords) {
142
+ const lines = content.split('\n');
143
+ const fileIgnoredIds = new Set();
144
+ const lineIgnoredIds = new Map();
145
+ const directiveLines = new Set();
146
+ for (let i = 0; i < lines.length; i++) {
147
+ const line = lines[i] ?? '';
148
+ if (i < FILE_DIRECTIVE_SCAN_LIMIT) {
149
+ const fileId = extractDirectiveId(line, keywords.file);
150
+ if (fileId !== null) {
151
+ fileIgnoredIds.add(fileId);
152
+ directiveLines.add(i + 1);
153
+ }
154
+ }
155
+ const nextLineId = extractDirectiveId(line, keywords.nextLine);
156
+ if (nextLineId !== null) {
157
+ directiveLines.add(i + 1);
158
+ // Resolve the line the directive targets, skipping stacked directives.
159
+ let target = i + 1; // 0-based index of the next line
160
+ let skipped = 0;
161
+ while (target < lines.length &&
162
+ skipped < MAX_DIRECTIVE_SKIP &&
163
+ isKnownDirectiveLine(lines[target] ?? '')) {
164
+ target++;
165
+ skipped++;
166
+ }
167
+ const targetLine = target + 1; // 1-based
168
+ let set = lineIgnoredIds.get(targetLine);
169
+ if (!set) {
170
+ set = new Set();
171
+ lineIgnoredIds.set(targetLine, set);
172
+ }
173
+ set.add(nextLineId);
174
+ }
175
+ }
176
+ return { fileIgnoredIds, lineIgnoredIds, directiveLines };
177
+ }
178
+ // =============================================================================
179
+ // PUBLIC API
180
+ // =============================================================================
181
+ const defaultLocate = (signal) => {
182
+ const file = signal.code?.file;
183
+ // An absent OR empty file path is not a real candidate location — it can
184
+ // carry no directive and (post-Phase-5) must never be handed to `readFile`,
185
+ // where it would resolve to a directory and fail loud spuriously.
186
+ if (file === undefined || file === '')
187
+ return [];
188
+ return [{ file, line: signal.code?.line }];
189
+ };
190
+ /**
191
+ * Filter a `Signal` stream by inline suppression directives.
192
+ *
193
+ * Each file referenced by a candidate location is read once (via the injected
194
+ * `readFile`) and scanned once. A signal is suppressed when, for ANY of its
195
+ * candidate locations, the directive id (`ruleIdOf(signal)`, default
196
+ * `signal.ruleId`) is file-ignored for that file, or next-line-ignored at that
197
+ * location's line. A location pointing AT a directive line is never suppressed
198
+ * by a next-line directive (anti-recursion); file-level still applies.
199
+ *
200
+ * Read-failure posture (fail-loud; Phase 5): the injected `readFile` reads
201
+ * project SOURCE files the analyzers already loaded, so a read failure is
202
+ * UNEXPECTED. An `ENOENT` (the file was genuinely removed) is non-fatal but
203
+ * ATTRIBUTED — it is surfaced via a warning-level `signals.suppress.directive-
204
+ * file-missing` log (so a potentially-dropped waiver is diagnosable) and that
205
+ * file contributes no directives. ANY other read failure (`EACCES`, `EMFILE`,
206
+ * decode error, …) is propagated (THROWS) — the run aborts loudly rather than
207
+ * silently dropping a waiver and leaking the waived signal as a finding.
208
+ */
209
+ export async function filterSignalsBySuppressions(request) {
210
+ const { signals, keywords, readFile } = request;
211
+ const locate = request.locate ?? defaultLocate;
212
+ const ruleIdOf = request.ruleIdOf ?? ((s) => s.ruleId);
213
+ // Resolve candidate locations once per signal; collect the unique files.
214
+ const locationsBySignal = new Map();
215
+ const uniqueFiles = new Set();
216
+ for (const signal of signals) {
217
+ const locations = locate(signal);
218
+ locationsBySignal.set(signal, locations);
219
+ for (const loc of locations)
220
+ uniqueFiles.add(loc.file);
221
+ }
222
+ // Scan each unique file once, in parallel. A read failure is UNEXPECTED
223
+ // (these are project SOURCE files the analyzers already loaded), so it must
224
+ // not silently degrade a file to "no directives" and leak its waivers: an
225
+ // `ENOENT` is non-fatal but attributed (logged + recorded below), any other
226
+ // error propagates and aborts the run.
227
+ const scanByFile = new Map();
228
+ const missingFiles = new Set();
229
+ await Promise.all([...uniqueFiles].map(async (filePath) => {
230
+ try {
231
+ // @fitness-ignore-next-line unbounded-memory -- `readFile` is the injected reader (the kernel does no real I/O); callers read project SOURCE files the analyzers already loaded — inherently bounded, not attacker-controlled blobs.
232
+ const content = await readFile(filePath);
233
+ scanByFile.set(filePath, scanSuppressionDirectives(content, keywords));
234
+ }
235
+ catch (error) {
236
+ if (!isEnoent(error)) {
237
+ // Unexpected read failure (EACCES, EMFILE, decode, …) — fail loud
238
+ // rather than drop a waiver and leak the waived signal as a finding.
239
+ throw error;
240
+ }
241
+ // ENOENT: the file was genuinely removed. A removed source file yields
242
+ // no occurrences, so its signals should not exist — but we surface it
243
+ // (attribution below) instead of silently treating it as "no
244
+ // directives", so a leaked waiver is always diagnosable.
245
+ missingFiles.add(filePath);
246
+ }
247
+ }));
248
+ // @fitness-ignore-next-line detached-promises -- attributeMissingFiles is synchronous (returns void; only emits logger.warn) — there is no promise to await.
249
+ attributeMissingFiles(missingFiles, request);
250
+ const kept = [];
251
+ const suppressed = [];
252
+ for (const signal of signals) {
253
+ const id = ruleIdOf(signal);
254
+ const match = matchSuppression(locationsBySignal.get(signal) ?? [], id, scanByFile);
255
+ if (match === null) {
256
+ kept.push(signal);
257
+ }
258
+ else {
259
+ suppressed.push({ signal, ruleId: id, file: match.file, line: match.line });
260
+ }
261
+ }
262
+ return { kept, suppressed };
263
+ }
264
+ /** True when `error` is a Node `ENOENT` (file genuinely absent). */
265
+ function isEnoent(error) {
266
+ return (typeof error === 'object' && error !== null && error.code === 'ENOENT');
267
+ }
268
+ /**
269
+ * Surface every `ENOENT`-absent directive file as a warning-level structured
270
+ * log, one `evt` per `(file, ruleId)` pair so a potentially-dropped waiver
271
+ * names both the unreadable file AND the signal whose suppression could not be
272
+ * evaluated. Emitting per-ruleId (rather than per-file) is what makes a leaked
273
+ * waiver a 1-minute find. The `logger` singleton stamps `runId` from the
274
+ * current scope, so no logger injection is threaded through the pure scan.
275
+ */
276
+ function attributeMissingFiles(missingFiles, request) {
277
+ if (missingFiles.size === 0)
278
+ return;
279
+ const locate = request.locate ?? defaultLocate;
280
+ const ruleIdOf = request.ruleIdOf ?? ((s) => s.ruleId);
281
+ // ruleIds whose candidate locations reference each missing file.
282
+ const ruleIdsByFile = new Map();
283
+ for (const signal of request.signals) {
284
+ const id = ruleIdOf(signal);
285
+ for (const loc of locate(signal)) {
286
+ if (!missingFiles.has(loc.file))
287
+ continue;
288
+ let ids = ruleIdsByFile.get(loc.file);
289
+ if (!ids) {
290
+ ids = new Set();
291
+ ruleIdsByFile.set(loc.file, ids);
292
+ }
293
+ ids.add(id);
294
+ }
295
+ }
296
+ for (const file of missingFiles) {
297
+ for (const ruleId of ruleIdsByFile.get(file) ?? []) {
298
+ logger.warn('Suppression directive file is missing; a waiver may not be applied', {
299
+ evt: 'signals.suppress.directive-file-missing',
300
+ module: 'core:signals:suppress',
301
+ file,
302
+ ruleId,
303
+ });
304
+ }
305
+ }
306
+ }
307
+ /** The first candidate location that suppresses `id`, or `null`. */
308
+ function matchSuppression(locations, id, scanByFile) {
309
+ for (const loc of locations) {
310
+ const scan = scanByFile.get(loc.file);
311
+ if (scan === undefined)
312
+ continue;
313
+ if (scan.fileIgnoredIds.has(id)) {
314
+ return { file: loc.file, line: 'file' };
315
+ }
316
+ const line = loc.line;
317
+ if (line !== undefined &&
318
+ !scan.directiveLines.has(line) && // anti-recursion: never suppress a directive line itself
319
+ scan.lineIgnoredIds.get(line)?.has(id) === true) {
320
+ return { file: loc.file, line };
321
+ }
322
+ }
323
+ return null;
324
+ }
325
+ //# sourceMappingURL=suppress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suppress.js","sourceRoot":"","sources":["../../src/signals/suppress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=suppress.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suppress.test.d.ts","sourceRoot":"","sources":["../../src/signals/suppress.test.ts"],"names":[],"mappings":""}