korext 0.7.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (523) hide show
  1. package/README.md +102 -28
  2. package/bin/korext.js +251 -56
  3. package/package.json +21 -14
  4. package/CHANGELOG.md +0 -51
  5. package/dummy.pdf +0 -0
  6. package/korext.json +0 -11
  7. package/node_modules/ansi-regex/index.d.ts +0 -37
  8. package/node_modules/ansi-regex/index.js +0 -10
  9. package/node_modules/ansi-regex/license +0 -9
  10. package/node_modules/ansi-regex/package.json +0 -55
  11. package/node_modules/ansi-regex/readme.md +0 -78
  12. package/node_modules/ansi-styles/index.d.ts +0 -345
  13. package/node_modules/ansi-styles/index.js +0 -163
  14. package/node_modules/ansi-styles/license +0 -9
  15. package/node_modules/ansi-styles/package.json +0 -56
  16. package/node_modules/ansi-styles/readme.md +0 -152
  17. package/node_modules/balanced-match/LICENSE.md +0 -23
  18. package/node_modules/balanced-match/README.md +0 -57
  19. package/node_modules/balanced-match/dist/commonjs/index.d.ts +0 -9
  20. package/node_modules/balanced-match/dist/commonjs/index.d.ts.map +0 -1
  21. package/node_modules/balanced-match/dist/commonjs/index.js +0 -59
  22. package/node_modules/balanced-match/dist/commonjs/index.js.map +0 -1
  23. package/node_modules/balanced-match/dist/commonjs/package.json +0 -3
  24. package/node_modules/balanced-match/dist/esm/index.d.ts +0 -9
  25. package/node_modules/balanced-match/dist/esm/index.d.ts.map +0 -1
  26. package/node_modules/balanced-match/dist/esm/index.js +0 -54
  27. package/node_modules/balanced-match/dist/esm/index.js.map +0 -1
  28. package/node_modules/balanced-match/dist/esm/package.json +0 -3
  29. package/node_modules/balanced-match/package.json +0 -68
  30. package/node_modules/base64-js/LICENSE +0 -21
  31. package/node_modules/base64-js/README.md +0 -34
  32. package/node_modules/base64-js/base64js.min.js +0 -1
  33. package/node_modules/base64-js/index.d.ts +0 -3
  34. package/node_modules/base64-js/index.js +0 -150
  35. package/node_modules/base64-js/package.json +0 -47
  36. package/node_modules/bl/.travis.yml +0 -17
  37. package/node_modules/bl/BufferList.js +0 -396
  38. package/node_modules/bl/LICENSE.md +0 -13
  39. package/node_modules/bl/README.md +0 -247
  40. package/node_modules/bl/bl.js +0 -84
  41. package/node_modules/bl/package.json +0 -37
  42. package/node_modules/bl/test/convert.js +0 -21
  43. package/node_modules/bl/test/indexOf.js +0 -492
  44. package/node_modules/bl/test/isBufferList.js +0 -32
  45. package/node_modules/bl/test/test.js +0 -869
  46. package/node_modules/brace-expansion/LICENSE +0 -23
  47. package/node_modules/brace-expansion/README.md +0 -94
  48. package/node_modules/brace-expansion/dist/commonjs/index.d.ts +0 -6
  49. package/node_modules/brace-expansion/dist/commonjs/index.d.ts.map +0 -1
  50. package/node_modules/brace-expansion/dist/commonjs/index.js +0 -199
  51. package/node_modules/brace-expansion/dist/commonjs/index.js.map +0 -1
  52. package/node_modules/brace-expansion/dist/commonjs/package.json +0 -3
  53. package/node_modules/brace-expansion/dist/esm/index.d.ts +0 -6
  54. package/node_modules/brace-expansion/dist/esm/index.d.ts.map +0 -1
  55. package/node_modules/brace-expansion/dist/esm/index.js +0 -195
  56. package/node_modules/brace-expansion/dist/esm/index.js.map +0 -1
  57. package/node_modules/brace-expansion/dist/esm/package.json +0 -3
  58. package/node_modules/brace-expansion/package.json +0 -64
  59. package/node_modules/buffer/AUTHORS.md +0 -70
  60. package/node_modules/buffer/LICENSE +0 -21
  61. package/node_modules/buffer/README.md +0 -410
  62. package/node_modules/buffer/index.d.ts +0 -186
  63. package/node_modules/buffer/index.js +0 -1817
  64. package/node_modules/buffer/package.json +0 -96
  65. package/node_modules/chalk/index.d.ts +0 -415
  66. package/node_modules/chalk/license +0 -9
  67. package/node_modules/chalk/package.json +0 -68
  68. package/node_modules/chalk/readme.md +0 -341
  69. package/node_modules/chalk/source/index.js +0 -229
  70. package/node_modules/chalk/source/templates.js +0 -134
  71. package/node_modules/chalk/source/util.js +0 -39
  72. package/node_modules/cli-cursor/index.d.ts +0 -45
  73. package/node_modules/cli-cursor/index.js +0 -35
  74. package/node_modules/cli-cursor/license +0 -9
  75. package/node_modules/cli-cursor/package.json +0 -46
  76. package/node_modules/cli-cursor/readme.md +0 -55
  77. package/node_modules/cli-spinners/index.d.ts +0 -128
  78. package/node_modules/cli-spinners/index.js +0 -15
  79. package/node_modules/cli-spinners/license +0 -9
  80. package/node_modules/cli-spinners/package.json +0 -50
  81. package/node_modules/cli-spinners/readme.md +0 -54
  82. package/node_modules/cli-spinners/spinners.json +0 -1622
  83. package/node_modules/clone/.npmignore +0 -4
  84. package/node_modules/clone/LICENSE +0 -18
  85. package/node_modules/clone/README.md +0 -126
  86. package/node_modules/clone/clone.iml +0 -10
  87. package/node_modules/clone/clone.js +0 -166
  88. package/node_modules/clone/package.json +0 -51
  89. package/node_modules/color-convert/CHANGELOG.md +0 -54
  90. package/node_modules/color-convert/LICENSE +0 -21
  91. package/node_modules/color-convert/README.md +0 -68
  92. package/node_modules/color-convert/conversions.js +0 -839
  93. package/node_modules/color-convert/index.js +0 -81
  94. package/node_modules/color-convert/package.json +0 -48
  95. package/node_modules/color-convert/route.js +0 -97
  96. package/node_modules/color-name/LICENSE +0 -8
  97. package/node_modules/color-name/README.md +0 -11
  98. package/node_modules/color-name/index.js +0 -152
  99. package/node_modules/color-name/package.json +0 -28
  100. package/node_modules/commander/LICENSE +0 -22
  101. package/node_modules/commander/Readme.md +0 -1176
  102. package/node_modules/commander/esm.mjs +0 -16
  103. package/node_modules/commander/index.js +0 -24
  104. package/node_modules/commander/lib/argument.js +0 -150
  105. package/node_modules/commander/lib/command.js +0 -2777
  106. package/node_modules/commander/lib/error.js +0 -39
  107. package/node_modules/commander/lib/help.js +0 -747
  108. package/node_modules/commander/lib/option.js +0 -380
  109. package/node_modules/commander/lib/suggestSimilar.js +0 -101
  110. package/node_modules/commander/package-support.json +0 -19
  111. package/node_modules/commander/package.json +0 -82
  112. package/node_modules/commander/typings/esm.d.mts +0 -3
  113. package/node_modules/commander/typings/index.d.ts +0 -1113
  114. package/node_modules/data-uri-to-buffer/README.md +0 -88
  115. package/node_modules/data-uri-to-buffer/dist/index.d.ts +0 -15
  116. package/node_modules/data-uri-to-buffer/dist/index.js +0 -53
  117. package/node_modules/data-uri-to-buffer/dist/index.js.map +0 -1
  118. package/node_modules/data-uri-to-buffer/package.json +0 -62
  119. package/node_modules/data-uri-to-buffer/src/index.ts +0 -68
  120. package/node_modules/defaults/LICENSE +0 -22
  121. package/node_modules/defaults/README.md +0 -39
  122. package/node_modules/defaults/index.js +0 -13
  123. package/node_modules/defaults/package.json +0 -33
  124. package/node_modules/defaults/test.js +0 -34
  125. package/node_modules/fetch-blob/LICENSE +0 -21
  126. package/node_modules/fetch-blob/README.md +0 -106
  127. package/node_modules/fetch-blob/file.d.ts +0 -2
  128. package/node_modules/fetch-blob/file.js +0 -49
  129. package/node_modules/fetch-blob/from.d.ts +0 -26
  130. package/node_modules/fetch-blob/from.js +0 -100
  131. package/node_modules/fetch-blob/index.d.ts +0 -3
  132. package/node_modules/fetch-blob/index.js +0 -250
  133. package/node_modules/fetch-blob/package.json +0 -56
  134. package/node_modules/fetch-blob/streams.cjs +0 -51
  135. package/node_modules/formdata-polyfill/FormData.js +0 -441
  136. package/node_modules/formdata-polyfill/LICENSE +0 -21
  137. package/node_modules/formdata-polyfill/README.md +0 -145
  138. package/node_modules/formdata-polyfill/esm.min.d.ts +0 -5
  139. package/node_modules/formdata-polyfill/esm.min.js +0 -40
  140. package/node_modules/formdata-polyfill/formdata-to-blob.js +0 -39
  141. package/node_modules/formdata-polyfill/formdata.min.js +0 -21
  142. package/node_modules/formdata-polyfill/package.json +0 -50
  143. package/node_modules/glob/LICENSE.md +0 -63
  144. package/node_modules/glob/README.md +0 -1203
  145. package/node_modules/glob/dist/commonjs/glob.d.ts +0 -396
  146. package/node_modules/glob/dist/commonjs/glob.d.ts.map +0 -1
  147. package/node_modules/glob/dist/commonjs/glob.js +0 -248
  148. package/node_modules/glob/dist/commonjs/glob.js.map +0 -1
  149. package/node_modules/glob/dist/commonjs/has-magic.d.ts +0 -14
  150. package/node_modules/glob/dist/commonjs/has-magic.d.ts.map +0 -1
  151. package/node_modules/glob/dist/commonjs/has-magic.js +0 -27
  152. package/node_modules/glob/dist/commonjs/has-magic.js.map +0 -1
  153. package/node_modules/glob/dist/commonjs/ignore.d.ts +0 -24
  154. package/node_modules/glob/dist/commonjs/ignore.d.ts.map +0 -1
  155. package/node_modules/glob/dist/commonjs/ignore.js +0 -119
  156. package/node_modules/glob/dist/commonjs/ignore.js.map +0 -1
  157. package/node_modules/glob/dist/commonjs/index.d.ts +0 -97
  158. package/node_modules/glob/dist/commonjs/index.d.ts.map +0 -1
  159. package/node_modules/glob/dist/commonjs/index.js +0 -68
  160. package/node_modules/glob/dist/commonjs/index.js.map +0 -1
  161. package/node_modules/glob/dist/commonjs/index.min.js +0 -4
  162. package/node_modules/glob/dist/commonjs/index.min.js.map +0 -7
  163. package/node_modules/glob/dist/commonjs/package.json +0 -3
  164. package/node_modules/glob/dist/commonjs/pattern.d.ts +0 -79
  165. package/node_modules/glob/dist/commonjs/pattern.d.ts.map +0 -1
  166. package/node_modules/glob/dist/commonjs/pattern.js +0 -223
  167. package/node_modules/glob/dist/commonjs/pattern.js.map +0 -1
  168. package/node_modules/glob/dist/commonjs/processor.d.ts +0 -59
  169. package/node_modules/glob/dist/commonjs/processor.d.ts.map +0 -1
  170. package/node_modules/glob/dist/commonjs/processor.js +0 -301
  171. package/node_modules/glob/dist/commonjs/processor.js.map +0 -1
  172. package/node_modules/glob/dist/commonjs/walker.d.ts +0 -97
  173. package/node_modules/glob/dist/commonjs/walker.d.ts.map +0 -1
  174. package/node_modules/glob/dist/commonjs/walker.js +0 -387
  175. package/node_modules/glob/dist/commonjs/walker.js.map +0 -1
  176. package/node_modules/glob/dist/esm/glob.d.ts +0 -396
  177. package/node_modules/glob/dist/esm/glob.d.ts.map +0 -1
  178. package/node_modules/glob/dist/esm/glob.js +0 -244
  179. package/node_modules/glob/dist/esm/glob.js.map +0 -1
  180. package/node_modules/glob/dist/esm/has-magic.d.ts +0 -14
  181. package/node_modules/glob/dist/esm/has-magic.d.ts.map +0 -1
  182. package/node_modules/glob/dist/esm/has-magic.js +0 -23
  183. package/node_modules/glob/dist/esm/has-magic.js.map +0 -1
  184. package/node_modules/glob/dist/esm/ignore.d.ts +0 -24
  185. package/node_modules/glob/dist/esm/ignore.d.ts.map +0 -1
  186. package/node_modules/glob/dist/esm/ignore.js +0 -115
  187. package/node_modules/glob/dist/esm/ignore.js.map +0 -1
  188. package/node_modules/glob/dist/esm/index.d.ts +0 -97
  189. package/node_modules/glob/dist/esm/index.d.ts.map +0 -1
  190. package/node_modules/glob/dist/esm/index.js +0 -55
  191. package/node_modules/glob/dist/esm/index.js.map +0 -1
  192. package/node_modules/glob/dist/esm/index.min.js +0 -4
  193. package/node_modules/glob/dist/esm/index.min.js.map +0 -7
  194. package/node_modules/glob/dist/esm/package.json +0 -3
  195. package/node_modules/glob/dist/esm/pattern.d.ts +0 -79
  196. package/node_modules/glob/dist/esm/pattern.d.ts.map +0 -1
  197. package/node_modules/glob/dist/esm/pattern.js +0 -219
  198. package/node_modules/glob/dist/esm/pattern.js.map +0 -1
  199. package/node_modules/glob/dist/esm/processor.d.ts +0 -59
  200. package/node_modules/glob/dist/esm/processor.d.ts.map +0 -1
  201. package/node_modules/glob/dist/esm/processor.js +0 -294
  202. package/node_modules/glob/dist/esm/processor.js.map +0 -1
  203. package/node_modules/glob/dist/esm/walker.d.ts +0 -97
  204. package/node_modules/glob/dist/esm/walker.d.ts.map +0 -1
  205. package/node_modules/glob/dist/esm/walker.js +0 -381
  206. package/node_modules/glob/dist/esm/walker.js.map +0 -1
  207. package/node_modules/glob/package.json +0 -98
  208. package/node_modules/has-flag/index.d.ts +0 -39
  209. package/node_modules/has-flag/index.js +0 -8
  210. package/node_modules/has-flag/license +0 -9
  211. package/node_modules/has-flag/package.json +0 -46
  212. package/node_modules/has-flag/readme.md +0 -89
  213. package/node_modules/ieee754/LICENSE +0 -11
  214. package/node_modules/ieee754/README.md +0 -51
  215. package/node_modules/ieee754/index.d.ts +0 -10
  216. package/node_modules/ieee754/index.js +0 -85
  217. package/node_modules/ieee754/package.json +0 -52
  218. package/node_modules/inherits/LICENSE +0 -16
  219. package/node_modules/inherits/README.md +0 -42
  220. package/node_modules/inherits/inherits.js +0 -9
  221. package/node_modules/inherits/inherits_browser.js +0 -27
  222. package/node_modules/inherits/package.json +0 -29
  223. package/node_modules/is-interactive/index.d.ts +0 -31
  224. package/node_modules/is-interactive/index.js +0 -9
  225. package/node_modules/is-interactive/license +0 -9
  226. package/node_modules/is-interactive/package.json +0 -38
  227. package/node_modules/is-interactive/readme.md +0 -51
  228. package/node_modules/is-unicode-supported/index.d.ts +0 -14
  229. package/node_modules/is-unicode-supported/index.js +0 -13
  230. package/node_modules/is-unicode-supported/license +0 -9
  231. package/node_modules/is-unicode-supported/package.json +0 -41
  232. package/node_modules/is-unicode-supported/readme.md +0 -35
  233. package/node_modules/log-symbols/browser.js +0 -8
  234. package/node_modules/log-symbols/index.d.ts +0 -25
  235. package/node_modules/log-symbols/index.js +0 -19
  236. package/node_modules/log-symbols/license +0 -9
  237. package/node_modules/log-symbols/package.json +0 -52
  238. package/node_modules/log-symbols/readme.md +0 -51
  239. package/node_modules/lru-cache/LICENSE.md +0 -55
  240. package/node_modules/lru-cache/README.md +0 -383
  241. package/node_modules/lru-cache/dist/commonjs/index.d.ts +0 -1323
  242. package/node_modules/lru-cache/dist/commonjs/index.d.ts.map +0 -1
  243. package/node_modules/lru-cache/dist/commonjs/index.js +0 -1595
  244. package/node_modules/lru-cache/dist/commonjs/index.js.map +0 -1
  245. package/node_modules/lru-cache/dist/commonjs/index.min.js +0 -2
  246. package/node_modules/lru-cache/dist/commonjs/index.min.js.map +0 -7
  247. package/node_modules/lru-cache/dist/commonjs/package.json +0 -3
  248. package/node_modules/lru-cache/dist/esm/index.d.ts +0 -1323
  249. package/node_modules/lru-cache/dist/esm/index.d.ts.map +0 -1
  250. package/node_modules/lru-cache/dist/esm/index.js +0 -1591
  251. package/node_modules/lru-cache/dist/esm/index.js.map +0 -1
  252. package/node_modules/lru-cache/dist/esm/index.min.js +0 -2
  253. package/node_modules/lru-cache/dist/esm/index.min.js.map +0 -7
  254. package/node_modules/lru-cache/dist/esm/package.json +0 -3
  255. package/node_modules/lru-cache/package.json +0 -93
  256. package/node_modules/mimic-fn/index.d.ts +0 -54
  257. package/node_modules/mimic-fn/index.js +0 -13
  258. package/node_modules/mimic-fn/license +0 -9
  259. package/node_modules/mimic-fn/package.json +0 -42
  260. package/node_modules/mimic-fn/readme.md +0 -69
  261. package/node_modules/minimatch/LICENSE.md +0 -55
  262. package/node_modules/minimatch/README.md +0 -528
  263. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts +0 -2
  264. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map +0 -1
  265. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js +0 -14
  266. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map +0 -1
  267. package/node_modules/minimatch/dist/commonjs/ast.d.ts +0 -22
  268. package/node_modules/minimatch/dist/commonjs/ast.d.ts.map +0 -1
  269. package/node_modules/minimatch/dist/commonjs/ast.js +0 -846
  270. package/node_modules/minimatch/dist/commonjs/ast.js.map +0 -1
  271. package/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts +0 -8
  272. package/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map +0 -1
  273. package/node_modules/minimatch/dist/commonjs/brace-expressions.js +0 -150
  274. package/node_modules/minimatch/dist/commonjs/brace-expressions.js.map +0 -1
  275. package/node_modules/minimatch/dist/commonjs/escape.d.ts +0 -15
  276. package/node_modules/minimatch/dist/commonjs/escape.d.ts.map +0 -1
  277. package/node_modules/minimatch/dist/commonjs/escape.js +0 -30
  278. package/node_modules/minimatch/dist/commonjs/escape.js.map +0 -1
  279. package/node_modules/minimatch/dist/commonjs/index.d.ts +0 -174
  280. package/node_modules/minimatch/dist/commonjs/index.d.ts.map +0 -1
  281. package/node_modules/minimatch/dist/commonjs/index.js +0 -1121
  282. package/node_modules/minimatch/dist/commonjs/index.js.map +0 -1
  283. package/node_modules/minimatch/dist/commonjs/package.json +0 -3
  284. package/node_modules/minimatch/dist/commonjs/unescape.d.ts +0 -22
  285. package/node_modules/minimatch/dist/commonjs/unescape.d.ts.map +0 -1
  286. package/node_modules/minimatch/dist/commonjs/unescape.js +0 -38
  287. package/node_modules/minimatch/dist/commonjs/unescape.js.map +0 -1
  288. package/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts +0 -2
  289. package/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map +0 -1
  290. package/node_modules/minimatch/dist/esm/assert-valid-pattern.js +0 -10
  291. package/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +0 -1
  292. package/node_modules/minimatch/dist/esm/ast.d.ts +0 -22
  293. package/node_modules/minimatch/dist/esm/ast.d.ts.map +0 -1
  294. package/node_modules/minimatch/dist/esm/ast.js +0 -842
  295. package/node_modules/minimatch/dist/esm/ast.js.map +0 -1
  296. package/node_modules/minimatch/dist/esm/brace-expressions.d.ts +0 -8
  297. package/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map +0 -1
  298. package/node_modules/minimatch/dist/esm/brace-expressions.js +0 -146
  299. package/node_modules/minimatch/dist/esm/brace-expressions.js.map +0 -1
  300. package/node_modules/minimatch/dist/esm/escape.d.ts +0 -15
  301. package/node_modules/minimatch/dist/esm/escape.d.ts.map +0 -1
  302. package/node_modules/minimatch/dist/esm/escape.js +0 -26
  303. package/node_modules/minimatch/dist/esm/escape.js.map +0 -1
  304. package/node_modules/minimatch/dist/esm/index.d.ts +0 -174
  305. package/node_modules/minimatch/dist/esm/index.d.ts.map +0 -1
  306. package/node_modules/minimatch/dist/esm/index.js +0 -1108
  307. package/node_modules/minimatch/dist/esm/index.js.map +0 -1
  308. package/node_modules/minimatch/dist/esm/package.json +0 -3
  309. package/node_modules/minimatch/dist/esm/unescape.d.ts +0 -22
  310. package/node_modules/minimatch/dist/esm/unescape.d.ts.map +0 -1
  311. package/node_modules/minimatch/dist/esm/unescape.js +0 -34
  312. package/node_modules/minimatch/dist/esm/unescape.js.map +0 -1
  313. package/node_modules/minimatch/package.json +0 -67
  314. package/node_modules/minipass/LICENSE.md +0 -55
  315. package/node_modules/minipass/README.md +0 -825
  316. package/node_modules/minipass/dist/commonjs/index.d.ts +0 -545
  317. package/node_modules/minipass/dist/commonjs/index.d.ts.map +0 -1
  318. package/node_modules/minipass/dist/commonjs/index.js +0 -1038
  319. package/node_modules/minipass/dist/commonjs/index.js.map +0 -1
  320. package/node_modules/minipass/dist/commonjs/package.json +0 -3
  321. package/node_modules/minipass/dist/esm/index.d.ts +0 -545
  322. package/node_modules/minipass/dist/esm/index.d.ts.map +0 -1
  323. package/node_modules/minipass/dist/esm/index.js +0 -1020
  324. package/node_modules/minipass/dist/esm/index.js.map +0 -1
  325. package/node_modules/minipass/dist/esm/package.json +0 -3
  326. package/node_modules/minipass/package.json +0 -77
  327. package/node_modules/node-domexception/.history/README_20210527203617.md +0 -2
  328. package/node_modules/node-domexception/.history/README_20210527212714.md +0 -41
  329. package/node_modules/node-domexception/.history/README_20210527213345.md +0 -36
  330. package/node_modules/node-domexception/.history/README_20210527213411.md +0 -36
  331. package/node_modules/node-domexception/.history/README_20210527213803.md +0 -36
  332. package/node_modules/node-domexception/.history/README_20210527214323.md +0 -38
  333. package/node_modules/node-domexception/.history/README_20210527214408.md +0 -38
  334. package/node_modules/node-domexception/.history/index_20210527203842.js +0 -0
  335. package/node_modules/node-domexception/.history/index_20210527203947.js +0 -8
  336. package/node_modules/node-domexception/.history/index_20210527204259.js +0 -9
  337. package/node_modules/node-domexception/.history/index_20210527204418.js +0 -9
  338. package/node_modules/node-domexception/.history/index_20210527204756.js +0 -11
  339. package/node_modules/node-domexception/.history/index_20210527204833.js +0 -11
  340. package/node_modules/node-domexception/.history/index_20210527211208.js +0 -15
  341. package/node_modules/node-domexception/.history/index_20210527211248.js +0 -15
  342. package/node_modules/node-domexception/.history/index_20210527212722.js +0 -23
  343. package/node_modules/node-domexception/.history/index_20210527212731.js +0 -23
  344. package/node_modules/node-domexception/.history/index_20210527212746.js +0 -15
  345. package/node_modules/node-domexception/.history/index_20210527212900.js +0 -16
  346. package/node_modules/node-domexception/.history/index_20210527213022.js +0 -16
  347. package/node_modules/node-domexception/.history/index_20210527213822.js +0 -16
  348. package/node_modules/node-domexception/.history/index_20210527213843.js +0 -17
  349. package/node_modules/node-domexception/.history/index_20210527213852.js +0 -17
  350. package/node_modules/node-domexception/.history/index_20210527213910.js +0 -16
  351. package/node_modules/node-domexception/.history/index_20210527214034.js +0 -16
  352. package/node_modules/node-domexception/.history/index_20210527214643.js +0 -41
  353. package/node_modules/node-domexception/.history/index_20210527214654.js +0 -41
  354. package/node_modules/node-domexception/.history/index_20210527214700.js +0 -16
  355. package/node_modules/node-domexception/.history/package_20210527203733.json +0 -19
  356. package/node_modules/node-domexception/.history/package_20210527203825.json +0 -16
  357. package/node_modules/node-domexception/.history/package_20210527204621.json +0 -19
  358. package/node_modules/node-domexception/.history/package_20210527204913.json +0 -25
  359. package/node_modules/node-domexception/.history/package_20210527204925.json +0 -25
  360. package/node_modules/node-domexception/.history/package_20210527205145.json +0 -29
  361. package/node_modules/node-domexception/.history/package_20210527205156.json +0 -29
  362. package/node_modules/node-domexception/.history/test_20210527205603.js +0 -0
  363. package/node_modules/node-domexception/.history/test_20210527205957.js +0 -3
  364. package/node_modules/node-domexception/.history/test_20210527210021.js +0 -3
  365. package/node_modules/node-domexception/LICENSE +0 -21
  366. package/node_modules/node-domexception/README.md +0 -46
  367. package/node_modules/node-domexception/index.js +0 -16
  368. package/node_modules/node-domexception/package.json +0 -29
  369. package/node_modules/node-fetch/@types/index.d.ts +0 -219
  370. package/node_modules/node-fetch/LICENSE.md +0 -22
  371. package/node_modules/node-fetch/README.md +0 -872
  372. package/node_modules/node-fetch/package.json +0 -131
  373. package/node_modules/node-fetch/src/body.js +0 -397
  374. package/node_modules/node-fetch/src/errors/abort-error.js +0 -10
  375. package/node_modules/node-fetch/src/errors/base.js +0 -17
  376. package/node_modules/node-fetch/src/errors/fetch-error.js +0 -26
  377. package/node_modules/node-fetch/src/headers.js +0 -267
  378. package/node_modules/node-fetch/src/index.js +0 -417
  379. package/node_modules/node-fetch/src/request.js +0 -313
  380. package/node_modules/node-fetch/src/response.js +0 -160
  381. package/node_modules/node-fetch/src/utils/get-search.js +0 -9
  382. package/node_modules/node-fetch/src/utils/is-redirect.js +0 -11
  383. package/node_modules/node-fetch/src/utils/is.js +0 -87
  384. package/node_modules/node-fetch/src/utils/multipart-parser.js +0 -432
  385. package/node_modules/node-fetch/src/utils/referrer.js +0 -340
  386. package/node_modules/onetime/index.d.ts +0 -64
  387. package/node_modules/onetime/index.js +0 -44
  388. package/node_modules/onetime/license +0 -9
  389. package/node_modules/onetime/package.json +0 -43
  390. package/node_modules/onetime/readme.md +0 -94
  391. package/node_modules/ora/index.d.ts +0 -277
  392. package/node_modules/ora/index.js +0 -407
  393. package/node_modules/ora/license +0 -9
  394. package/node_modules/ora/package.json +0 -57
  395. package/node_modules/ora/readme.md +0 -264
  396. package/node_modules/path-scurry/LICENSE.md +0 -55
  397. package/node_modules/path-scurry/README.md +0 -636
  398. package/node_modules/path-scurry/dist/commonjs/index.d.ts +0 -1115
  399. package/node_modules/path-scurry/dist/commonjs/index.d.ts.map +0 -1
  400. package/node_modules/path-scurry/dist/commonjs/index.js +0 -2018
  401. package/node_modules/path-scurry/dist/commonjs/index.js.map +0 -1
  402. package/node_modules/path-scurry/dist/commonjs/package.json +0 -3
  403. package/node_modules/path-scurry/dist/esm/index.d.ts +0 -1115
  404. package/node_modules/path-scurry/dist/esm/index.d.ts.map +0 -1
  405. package/node_modules/path-scurry/dist/esm/index.js +0 -1983
  406. package/node_modules/path-scurry/dist/esm/index.js.map +0 -1
  407. package/node_modules/path-scurry/dist/esm/package.json +0 -3
  408. package/node_modules/path-scurry/package.json +0 -72
  409. package/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  410. package/node_modules/readable-stream/GOVERNANCE.md +0 -136
  411. package/node_modules/readable-stream/LICENSE +0 -47
  412. package/node_modules/readable-stream/README.md +0 -106
  413. package/node_modules/readable-stream/errors-browser.js +0 -127
  414. package/node_modules/readable-stream/errors.js +0 -116
  415. package/node_modules/readable-stream/experimentalWarning.js +0 -17
  416. package/node_modules/readable-stream/lib/_stream_duplex.js +0 -126
  417. package/node_modules/readable-stream/lib/_stream_passthrough.js +0 -37
  418. package/node_modules/readable-stream/lib/_stream_readable.js +0 -1027
  419. package/node_modules/readable-stream/lib/_stream_transform.js +0 -190
  420. package/node_modules/readable-stream/lib/_stream_writable.js +0 -641
  421. package/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -180
  422. package/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -183
  423. package/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -96
  424. package/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -86
  425. package/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
  426. package/node_modules/readable-stream/lib/internal/streams/from.js +0 -52
  427. package/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -86
  428. package/node_modules/readable-stream/lib/internal/streams/state.js +0 -22
  429. package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  430. package/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  431. package/node_modules/readable-stream/package.json +0 -68
  432. package/node_modules/readable-stream/readable-browser.js +0 -9
  433. package/node_modules/readable-stream/readable.js +0 -16
  434. package/node_modules/restore-cursor/index.d.ts +0 -13
  435. package/node_modules/restore-cursor/index.js +0 -9
  436. package/node_modules/restore-cursor/license +0 -9
  437. package/node_modules/restore-cursor/package.json +0 -52
  438. package/node_modules/restore-cursor/readme.md +0 -26
  439. package/node_modules/safe-buffer/LICENSE +0 -21
  440. package/node_modules/safe-buffer/README.md +0 -584
  441. package/node_modules/safe-buffer/index.d.ts +0 -187
  442. package/node_modules/safe-buffer/index.js +0 -65
  443. package/node_modules/safe-buffer/package.json +0 -51
  444. package/node_modules/signal-exit/LICENSE.txt +0 -16
  445. package/node_modules/signal-exit/README.md +0 -39
  446. package/node_modules/signal-exit/index.js +0 -202
  447. package/node_modules/signal-exit/package.json +0 -38
  448. package/node_modules/signal-exit/signals.js +0 -53
  449. package/node_modules/string_decoder/LICENSE +0 -48
  450. package/node_modules/string_decoder/README.md +0 -47
  451. package/node_modules/string_decoder/lib/string_decoder.js +0 -296
  452. package/node_modules/string_decoder/package.json +0 -34
  453. package/node_modules/strip-ansi/index.d.ts +0 -17
  454. package/node_modules/strip-ansi/index.js +0 -4
  455. package/node_modules/strip-ansi/license +0 -9
  456. package/node_modules/strip-ansi/package.json +0 -54
  457. package/node_modules/strip-ansi/readme.md +0 -46
  458. package/node_modules/supports-color/browser.js +0 -5
  459. package/node_modules/supports-color/index.js +0 -135
  460. package/node_modules/supports-color/license +0 -9
  461. package/node_modules/supports-color/package.json +0 -53
  462. package/node_modules/supports-color/readme.md +0 -76
  463. package/node_modules/util-deprecate/History.md +0 -16
  464. package/node_modules/util-deprecate/LICENSE +0 -24
  465. package/node_modules/util-deprecate/README.md +0 -53
  466. package/node_modules/util-deprecate/browser.js +0 -67
  467. package/node_modules/util-deprecate/node.js +0 -6
  468. package/node_modules/util-deprecate/package.json +0 -27
  469. package/node_modules/wcwidth/.npmignore +0 -1
  470. package/node_modules/wcwidth/LICENSE +0 -30
  471. package/node_modules/wcwidth/Readme.md +0 -33
  472. package/node_modules/wcwidth/combining.js +0 -50
  473. package/node_modules/wcwidth/docs/index.md +0 -65
  474. package/node_modules/wcwidth/index.js +0 -99
  475. package/node_modules/wcwidth/package.json +0 -42
  476. package/node_modules/wcwidth/test/index.js +0 -64
  477. package/node_modules/web-streams-polyfill/LICENSE +0 -22
  478. package/node_modules/web-streams-polyfill/README.md +0 -110
  479. package/node_modules/web-streams-polyfill/dist/polyfill.es2018.js +0 -4765
  480. package/node_modules/web-streams-polyfill/dist/polyfill.es2018.js.map +0 -1
  481. package/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js +0 -9
  482. package/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js.map +0 -1
  483. package/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs +0 -4745
  484. package/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs.map +0 -1
  485. package/node_modules/web-streams-polyfill/dist/polyfill.es6.js +0 -4838
  486. package/node_modules/web-streams-polyfill/dist/polyfill.es6.js.map +0 -1
  487. package/node_modules/web-streams-polyfill/dist/polyfill.es6.min.js +0 -9
  488. package/node_modules/web-streams-polyfill/dist/polyfill.es6.min.js.map +0 -1
  489. package/node_modules/web-streams-polyfill/dist/polyfill.es6.mjs +0 -4818
  490. package/node_modules/web-streams-polyfill/dist/polyfill.es6.mjs.map +0 -1
  491. package/node_modules/web-streams-polyfill/dist/polyfill.js +0 -5011
  492. package/node_modules/web-streams-polyfill/dist/polyfill.js.map +0 -1
  493. package/node_modules/web-streams-polyfill/dist/polyfill.min.js +0 -9
  494. package/node_modules/web-streams-polyfill/dist/polyfill.min.js.map +0 -1
  495. package/node_modules/web-streams-polyfill/dist/polyfill.mjs +0 -4991
  496. package/node_modules/web-streams-polyfill/dist/polyfill.mjs.map +0 -1
  497. package/node_modules/web-streams-polyfill/dist/ponyfill.es2018.js +0 -4737
  498. package/node_modules/web-streams-polyfill/dist/ponyfill.es2018.js.map +0 -1
  499. package/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs +0 -4717
  500. package/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs.map +0 -1
  501. package/node_modules/web-streams-polyfill/dist/ponyfill.es6.js +0 -4810
  502. package/node_modules/web-streams-polyfill/dist/ponyfill.es6.js.map +0 -1
  503. package/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs +0 -4790
  504. package/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs.map +0 -1
  505. package/node_modules/web-streams-polyfill/dist/ponyfill.js +0 -4983
  506. package/node_modules/web-streams-polyfill/dist/ponyfill.js.map +0 -1
  507. package/node_modules/web-streams-polyfill/dist/ponyfill.mjs +0 -4963
  508. package/node_modules/web-streams-polyfill/dist/ponyfill.mjs.map +0 -1
  509. package/node_modules/web-streams-polyfill/dist/types/polyfill.d.ts +0 -24
  510. package/node_modules/web-streams-polyfill/dist/types/ponyfill.d.ts +0 -780
  511. package/node_modules/web-streams-polyfill/dist/types/ts3.6/polyfill.d.ts +0 -28
  512. package/node_modules/web-streams-polyfill/dist/types/ts3.6/ponyfill.d.ts +0 -821
  513. package/node_modules/web-streams-polyfill/dist/types/tsdoc-metadata.json +0 -11
  514. package/node_modules/web-streams-polyfill/es2018/package.json +0 -14
  515. package/node_modules/web-streams-polyfill/es6/package.json +0 -14
  516. package/node_modules/web-streams-polyfill/package.json +0 -83
  517. package/node_modules/web-streams-polyfill/ponyfill/es2018/package.json +0 -13
  518. package/node_modules/web-streams-polyfill/ponyfill/es6/package.json +0 -13
  519. package/node_modules/web-streams-polyfill/ponyfill/package.json +0 -13
  520. package/src/commands/policy.ts +0 -146
  521. package/test-policy.md +0 -55
  522. package/test_cli.ts +0 -16
  523. package/version.json +0 -18
package/README.md CHANGED
@@ -1,41 +1,115 @@
1
- # KOREXT - AI Code Governance
1
+ # Korext CLI
2
2
 
3
- Real time policy enforcement and compliance proof for AI-generated code.
3
+ Enforce compliance on AI-generated code from the command line and CI/CD pipelines. 478 rules across 44 policy packs with real detection logic. Every violation mapped to specific regulatory clauses. SARIF output for CI scanner integration.
4
4
 
5
- ## What It Does
5
+ ## Install
6
6
 
7
- KOREXT enforces your compliance policies at the point of code generation. Every file is checked against your selected policy pack. Violations appear as CLI-based error logs with severity, governance context (regulatory, technical standards, security intelligence), and an AI-powered explanation. One click applies a verified fix with diff preview. Every enforcement decision generates a cryptographically signed proof bundle your compliance team can verify.
7
+ ```bash
8
+ npm install -g korext
9
+ ```
8
10
 
9
- ## Core Commands
11
+ ## Quick Start
10
12
 
11
- - `korext login`: Login via browser (recommended)
12
- - `korext status`: View your current authentication state and active Policy Pack
13
- - `korext enforce`: Scan a target directory or file and cross-reference it against your policy pack
14
- - `korext packs list`: Retrieve and list all available internal Policy Packs
15
- - `korext policy init`: Initialize a new custom policy workflow
16
- - `korext policy extract`: Extract rules from a PDF/Markdown policy document
17
- - `korext policy review`: Interactively review extracted rules
18
- - `korext policy publish`: Deploy and activate custom policy packs
13
+ ```bash
14
+ korext login
15
+ korext enforce ./src --pack web-platform-v2
16
+ ```
19
17
 
20
- ## Features
18
+ ## Commands
21
19
 
22
- - CLI violation detection
23
- - Three-layer governance context: regulatory compliance, technical standards, security intelligence
24
- - Command line verified code fixes via Shadow Test Protocol
25
- - Cryptographically signed proof bundles
26
- - Publication-quality PDF export for auditors
27
- - Covers PCI-DSS, HIPAA, GDPR, SOC 2, OWASP, NIST, CIS, and more
28
- - Custom policy packs on Team plan
29
- - Air-gapped deployment for Enterprise
20
+ | Command | Description |
21
+ |---------|-------------|
22
+ | `korext login [token]` | Save API token |
23
+ | `korext status` | Check connection and subscription |
24
+ | `korext enforce [dir]` | Scan files for violations |
25
+ | `korext policy init` | Initialize a policy document |
26
+ | `korext policy extract` | AI rule extraction from documents |
27
+ | `korext policy review` | Review extracted rules |
28
+ | `korext rules sync` | Cache rules for offline use |
30
29
 
31
- ## Getting Started
30
+ ### Enforce Options
32
31
 
33
- Install the CLI via `npm install -g korext` and sign in. Select a policy pack. Run `korext enforce`. KOREXT runs in the terminal and surfaces violations instantly.
32
+ | Flag | Description |
33
+ |------|-------------|
34
+ | `--pack <id>` | Select a policy pack |
35
+ | `--format text\|json\|sarif` | Output format |
36
+ | `--offline` | Use cached rules only |
37
+ | `--sync-rules` | Download rule cache before scan |
34
38
 
35
- Free tier available. Team and Enterprise plans for organisations that need signed proof bundles, PDF export, and compliance reporting.
39
+ ## CI/CD Integration
40
+
41
+ ### GitHub Actions
42
+
43
+ ```yaml
44
+ - name: Korext Compliance Check
45
+ run: |
46
+ npm install -g korext
47
+ korext enforce ./src \
48
+ --pack cmmc-level2-v1 \
49
+ --format sarif
50
+ env:
51
+ KOREXT_API_TOKEN: ${{ secrets.KOREXT_API_TOKEN }}
52
+ ```
53
+
54
+ ### Exit Codes
55
+
56
+ | Code | Meaning |
57
+ |------|---------|
58
+ | `0` | Clean (no critical or high violations) |
59
+ | `1` | Violations found |
60
+ | `2` | Error |
61
+
62
+ Writes GitHub Actions Step Summary via `GITHUB_STEP_SUMMARY` when detected.
63
+
64
+ ## SARIF Output
65
+
66
+ ```bash
67
+ korext enforce ./src --format sarif > results.sarif
68
+ ```
69
+
70
+ Generates OASIS SARIF 2.1.0 for CI scanner integration (GitHub Code Scanning, Azure DevOps, etc.).
71
+
72
+ ## Offline Mode
73
+
74
+ ```bash
75
+ korext rules sync
76
+ korext enforce ./src --offline
77
+ ```
78
+
79
+ Cached rules enforce locally with zero network calls. Status output shows "Offline (local rules only)".
80
+
81
+ ## Supported Compliance Frameworks
82
+
83
+ OWASP Top 10 | PCI-DSS | HIPAA | GDPR | SOC 2 | NIST SP 800-53 | NIST SP 800-171 | CMMC Level 2/3 | FedRAMP | ISO 27001 | DORA | NIS2 | CIS Benchmarks | UK DPA | Australian Privacy Act | APPI (Japan) | PDPA (Singapore, Taiwan) | and 25+ more
84
+
85
+ ## Key Features
86
+
87
+ - 478 rules across 44 policy packs
88
+ - Three-layer governance: regulatory, technical standards (CWE, OWASP), security intelligence (MITRE ATT&CK)
89
+ - 9 jurisdiction coverage (US, EU, UK, Canada, Australia, New Zealand, Japan, Taiwan, Singapore)
90
+ - SARIF 2.1.0 output for CI scanner integration
91
+ - GitHub Actions Step Summary generation
92
+ - Offline mode with cached rules
93
+ - Custom policy packs from uploaded documents
94
+
95
+ ## Environment Variables
96
+
97
+ | Variable | Description |
98
+ |----------|-------------|
99
+ | `KOREXT_API_TOKEN` | API authentication token (recommended) |
100
+ | `KOREXT_TOKEN` | Deprecated alias (shows warning) |
36
101
 
37
102
  ## Links
38
103
 
39
- - Website: https://www.korext.com
40
- - Dashboard: https://app.korext.com
41
- - Documentation: https://www.korext.com/docs
104
+ - Website: [korext.com](https://www.korext.com)
105
+ - Dashboard: [app.korext.com](https://app.korext.com)
106
+ - VS Code Extension: [marketplace.visualstudio.com](https://marketplace.visualstudio.com/items?itemName=Korext.korext)
107
+ - LinkedIn: [linkedin.com/company/korext](https://www.linkedin.com/company/korext)
108
+ - GitHub: [github.com/Korext](https://github.com/Korext)
109
+ - Support: support@korext.com
110
+
111
+ ---
112
+
113
+ **Publisher**: Korext
114
+ **License**: Proprietary
115
+ **Version**: 0.8.0
package/bin/korext.js CHANGED
@@ -34,8 +34,17 @@ function saveConfig(config) {
34
34
  fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), 'utf-8');
35
35
  }
36
36
 
37
+ let _deprecationWarned = false;
37
38
  function getToken() {
38
- return process.env.KOREXT_TOKEN || getConfig().token || null;
39
+ if (process.env.KOREXT_API_TOKEN) return process.env.KOREXT_API_TOKEN;
40
+ if (process.env.KOREXT_TOKEN) {
41
+ if (!_deprecationWarned) {
42
+ console.warn('\x1b[33m⚠ KOREXT_TOKEN is deprecated. Use KOREXT_API_TOKEN instead.\x1b[0m');
43
+ _deprecationWarned = true;
44
+ }
45
+ return process.env.KOREXT_TOKEN;
46
+ }
47
+ return getConfig().token || null;
39
48
  }
40
49
 
41
50
  function getLanguageFromExt(ext) {
@@ -48,6 +57,90 @@ function getLanguageFromExt(ext) {
48
57
  return map[ext] || 'plaintext';
49
58
  }
50
59
 
60
+ // ─── LOCAL ENGINE: Rule Definition Caching + Offline Analysis ─────────────────
61
+
62
+ const RULES_CACHE_FILE = path.join(CONFIG_DIR, 'rule-definitions.json');
63
+
64
+ function getRuleDefinitionsCache() {
65
+ if (fs.existsSync(RULES_CACHE_FILE)) {
66
+ try {
67
+ const cached = JSON.parse(fs.readFileSync(RULES_CACHE_FILE, 'utf-8'));
68
+ if (cached && cached.rules && cached.packs) return cached;
69
+ } catch { /* corrupt cache, ignore */ }
70
+ }
71
+ return null;
72
+ }
73
+
74
+ function saveRuleDefinitionsCache(payload) {
75
+ if (!fs.existsSync(CONFIG_DIR)) {
76
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
77
+ }
78
+ fs.writeFileSync(RULES_CACHE_FILE, JSON.stringify(payload, null, 2), { mode: 0o600 });
79
+ }
80
+
81
+ async function fetchAndCacheRules() {
82
+ const token = getToken();
83
+ const res = await fetch(`${API_URL}/api/rules/definitions`, {
84
+ method: 'GET',
85
+ headers: {
86
+ 'Content-Type': 'application/json',
87
+ ...(token && { 'Authorization': `Bearer ${token}` })
88
+ }
89
+ });
90
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
91
+ const payload = await res.json();
92
+ saveRuleDefinitionsCache(payload);
93
+ return payload;
94
+ }
95
+
96
+ /**
97
+ * Run rules locally against code using cached regex definitions.
98
+ * Mirrors korext-core/src/engine/localEngine.ts analyzeLocally().
99
+ */
100
+ function analyzeLocally(code, packId, definitions) {
101
+ const pack = definitions.packs[packId];
102
+ if (!pack) return [];
103
+
104
+ const violations = [];
105
+ const lines = code.split('\n');
106
+
107
+ for (const ruleId of pack.rules) {
108
+ const rule = definitions.rules[ruleId];
109
+ if (!rule) continue;
110
+ if (rule.checkMode === 'server-only') continue;
111
+ if (!rule.patterns || rule.patterns.length === 0) continue;
112
+
113
+ for (const pattern of rule.patterns) {
114
+ try {
115
+ const re = new RegExp(pattern.regex, pattern.flags || 'gi');
116
+ lines.forEach((line, i) => {
117
+ re.lastIndex = 0;
118
+ if (re.test(line)) {
119
+ violations.push({
120
+ ruleName: rule.label,
121
+ severity: rule.severity,
122
+ explanation: pattern.message || rule.message || `${rule.label} violation detected`,
123
+ line: i + 1,
124
+ column: 0,
125
+ snippet: line.trim().slice(0, 90),
126
+ detectedBy: 'local-static'
127
+ });
128
+ }
129
+ });
130
+ } catch { /* invalid regex, skip */ }
131
+ }
132
+ }
133
+
134
+ // Deduplicate by ruleId + line + message
135
+ const seen = new Set();
136
+ return violations.filter(v => {
137
+ const key = `${v.ruleName}:${v.line}:${v.explanation}`;
138
+ if (seen.has(key)) return false;
139
+ seen.add(key);
140
+ return true;
141
+ });
142
+ }
143
+
51
144
  function findFiles(dir, fileList = []) {
52
145
  if (!fs.existsSync(dir)) return fileList;
53
146
  const files = fs.readdirSync(dir);
@@ -160,19 +253,51 @@ program
160
253
  .description('Statically analyze files in a directory against Korext policies')
161
254
  .option('-p, --pack <packId>', 'Policy Pack ID to enforce', 'web')
162
255
  .option('-f, --format <format>', 'Output format (text, json, sarif)', 'text')
256
+ .option('--offline', 'Force local-only analysis using cached rule definitions (no server calls)', false)
257
+ .option('--sync-rules', 'Fetch and cache latest rule definitions before running analysis', false)
163
258
  .action(async (dirArg, options) => {
164
259
  const dir = dirArg || '.';
165
260
  const pack = options.pack;
166
261
  const format = options.format.toLowerCase();
167
262
  const isText = format === 'text';
168
263
 
264
+ let forceOffline = options.offline;
265
+ let localDefinitions = null;
266
+
169
267
  if (isText) {
170
268
  console.log(`\n${chalk.bold.hex('#F27D26')('▲ KOREXT CLI ENFORCEMENT ENGINE')} v${version}`);
171
269
  console.log(chalk.dim('======================================='));
172
270
  }
173
271
 
272
+ // Pre-flight: sync rules if requested
273
+ if (options.syncRules) {
274
+ const syncSpinner = isText ? ora('Syncing rule definitions...').start() : null;
275
+ try {
276
+ const defs = await fetchAndCacheRules();
277
+ if (syncSpinner) syncSpinner.succeed(chalk.green(`Synced ${defs.ruleCount} rules, ${defs.packCount} packs (v${defs.version})`));
278
+ } catch (e) {
279
+ if (syncSpinner) syncSpinner.warn(chalk.yellow(`Rule sync failed: ${e.message}. Will use cached definitions if available.`));
280
+ }
281
+ }
282
+
283
+ // Load cached rule definitions for offline/fallback use
284
+ localDefinitions = getRuleDefinitionsCache();
285
+
286
+ if (forceOffline) {
287
+ if (!localDefinitions) {
288
+ if (isText) console.error(chalk.red('\n✖ Offline mode requires cached rule definitions.'));
289
+ if (isText) console.error(chalk.dim(` Run ${chalk.green('korext rules sync')} or ${chalk.green('korext enforce --sync-rules')} first while online.`));
290
+ process.exit(1);
291
+ }
292
+ if (isText) {
293
+ console.log(chalk.yellow('\n⚡ Offline mode: using local rule engine (regex-based analysis)'));
294
+ console.log(chalk.dim(` Cached rules: v${localDefinitions.version} · ${localDefinitions.ruleCount} rules · ${localDefinitions.packCount} packs`));
295
+ console.log(chalk.dim(' Note: AI-powered deep analysis is unavailable in offline mode.\n'));
296
+ }
297
+ }
298
+
174
299
  const token = getToken();
175
- if (!token && isText) {
300
+ if (!token && !forceOffline && isText) {
176
301
  console.log(chalk.yellow('\n⚠ Warning: No authentication token found.'));
177
302
  console.log(chalk.dim('Anonymous evaluation runs are limited to 20 requests per hour per IP.'));
178
303
  console.log(chalk.dim(`Run ${chalk.green('korext login')} to authenticate for unlimited CI/CD analytics.\n`));
@@ -204,6 +329,8 @@ program
204
329
 
205
330
  if (isText) console.log(`Found ${files.length} files. Starting analysis with pack: ${chalk.cyan(pack)}...\n`);
206
331
 
332
+ let usedLocalEngine = false;
333
+
207
334
  for (let i = 0; i < files.length; i++) {
208
335
  const file = files[i];
209
336
  const displayPath = path.relative(process.cwd(), file);
@@ -221,66 +348,94 @@ program
221
348
  const ext = path.extname(file);
222
349
  const language = getLanguageFromExt(ext);
223
350
 
224
- try {
225
- const res = await fetch(`${API_URL}/api/ide/analyze`, {
226
- method: 'POST',
227
- headers: {
228
- 'Content-Type': 'application/json',
229
- ...(token && { 'Authorization': `Bearer ${token}` })
230
- },
231
- body: JSON.stringify({
232
- fileContent,
233
- language,
234
- fileName: file,
235
- packId: pack,
236
- requestSignature: false
237
- })
238
- });
351
+ // ── Analysis: server-first with local fallback ─────────────────────
352
+ let fileViolations = [];
239
353
 
240
- if (!res.ok) {
241
- if (fileSpinner) fileSpinner.fail(chalk.red(`Server error analyzing ${displayPath}: HTTP ${res.status}`));
242
- report.summary.errorFiles++;
243
- continue;
244
- }
354
+ if (forceOffline) {
355
+ // Offline mode: local engine only
356
+ fileViolations = analyzeLocally(fileContent, pack, localDefinitions);
357
+ usedLocalEngine = true;
358
+ } else {
359
+ // Online mode: try server, fall back to local on failure
360
+ try {
361
+ const res = await fetch(`${API_URL}/api/ide/analyze`, {
362
+ method: 'POST',
363
+ headers: {
364
+ 'Content-Type': 'application/json',
365
+ ...(token && { 'Authorization': `Bearer ${token}` })
366
+ },
367
+ body: JSON.stringify({
368
+ fileContent,
369
+ language,
370
+ fileName: file,
371
+ packId: pack,
372
+ requestSignature: false
373
+ })
374
+ });
245
375
 
246
- const result = await res.json();
247
-
248
- if (result.skipped) {
249
- if (fileSpinner) fileSpinner.info(chalk.yellow(`Skipped ${displayPath}: ${result.reason}`));
250
- report.summary.skippedFiles++;
251
- continue;
252
- }
376
+ if (!res.ok) {
377
+ throw new Error(`HTTP ${res.status}`);
378
+ }
379
+
380
+ const result = await res.json();
381
+
382
+ if (result.skipped) {
383
+ if (fileSpinner) fileSpinner.info(chalk.yellow(`Skipped ${displayPath}: ${result.reason}`));
384
+ report.summary.skippedFiles++;
385
+ continue;
386
+ }
253
387
 
254
- report.summary.scannedFiles++;
255
- const fileViolations = result.violations || [];
256
- report.summary.totalViolations += fileViolations.length;
257
-
258
- if (fileViolations.length > 0) {
259
- if (fileSpinner) fileSpinner.stop();
260
- if (isText) console.log(`\n📄 ${chalk.bold.underline(displayPath)}`);
261
-
262
- const storedV = [];
263
- for (const v of fileViolations) {
264
- let severityTag = chalk.blue('LOW');
265
- if (v.severity === 'critical') { severityTag = chalk.bgRed.white.bold(' CRITICAL '); report.summary.critical++; }
266
- else if (v.severity === 'high') { severityTag = chalk.red.bold('HIGH'); report.summary.high++; }
267
- else if (v.severity === 'medium') { severityTag = chalk.yellow.bold('MED'); report.summary.medium++; }
268
- else { report.summary.low++; }
269
-
270
- if (isText) {
271
- console.log(` ${chalk.dim(v.line + ':' + (v.column || 0))} ${severityTag} ${v.ruleName}`);
272
- console.log(` ${chalk.dim('↳')} ${chalk.italic(v.explanation)} `);
388
+ fileViolations = result.violations || [];
389
+
390
+ // Cache rule definitions on first successful server response (opportunistic sync)
391
+ if (!localDefinitions && i === 0) {
392
+ fetchAndCacheRules().catch(() => {});
393
+ }
394
+ } catch (e) {
395
+ // Server unreachable — fall back to local engine
396
+ if (localDefinitions) {
397
+ if (!usedLocalEngine && isText && i === 0) {
398
+ // Show fallback banner once
399
+ console.log(chalk.yellow(`\n⚡ Server unreachable. Falling back to local engine (regex-based analysis).`));
400
+ console.log(chalk.dim(` Cached rules: v${localDefinitions.version} · ${localDefinitions.ruleCount} rules\n`));
273
401
  }
274
- storedV.push(v);
402
+ fileViolations = analyzeLocally(fileContent, pack, localDefinitions);
403
+ usedLocalEngine = true;
404
+ forceOffline = true; // Don't retry server for remaining files
405
+ } else {
406
+ if (fileSpinner) fileSpinner.fail(chalk.red(`Failed to analyze ${displayPath}: ${e.message}`));
407
+ report.summary.errorFiles++;
408
+ continue;
275
409
  }
276
- report.results.push({ file: displayPath, violations: storedV });
277
- } else {
278
- if (fileSpinner) fileSpinner.stop();
279
- report.results.push({ file: displayPath, violations: [] });
280
410
  }
281
- } catch (e) {
282
- if (fileSpinner) fileSpinner.fail(chalk.red(`Failed to analyze ${displayPath}: ${e.message}`));
283
- report.summary.errorFiles++;
411
+ }
412
+
413
+ report.summary.scannedFiles++;
414
+ report.summary.totalViolations += fileViolations.length;
415
+
416
+ if (fileViolations.length > 0) {
417
+ if (fileSpinner) fileSpinner.stop();
418
+ if (isText) console.log(`\n📄 ${chalk.bold.underline(displayPath)}`);
419
+
420
+ const storedV = [];
421
+ for (const v of fileViolations) {
422
+ let severityTag = chalk.blue('LOW');
423
+ if (v.severity === 'critical') { severityTag = chalk.bgRed.white.bold(' CRITICAL '); report.summary.critical++; }
424
+ else if (v.severity === 'high') { severityTag = chalk.red.bold('HIGH'); report.summary.high++; }
425
+ else if (v.severity === 'medium') { severityTag = chalk.yellow.bold('MED'); report.summary.medium++; }
426
+ else { report.summary.low++; }
427
+
428
+ if (isText) {
429
+ const localTag = v.detectedBy === 'local-static' ? chalk.dim(' [local]') : '';
430
+ console.log(` ${chalk.dim(v.line + ':' + (v.column || 0))} ${severityTag} ${v.ruleName}${localTag}`);
431
+ console.log(` ${chalk.dim('↳')} ${chalk.italic(v.explanation)} `);
432
+ }
433
+ storedV.push(v);
434
+ }
435
+ report.results.push({ file: displayPath, violations: storedV });
436
+ } else {
437
+ if (fileSpinner) fileSpinner.stop();
438
+ report.results.push({ file: displayPath, violations: [] });
284
439
  }
285
440
  }
286
441
 
@@ -313,6 +468,9 @@ program
313
468
  console.log(JSON.stringify(sarif, null, 2));
314
469
  } else {
315
470
  console.log('\n' + chalk.dim('======================================='));
471
+ if (usedLocalEngine) {
472
+ console.log(chalk.dim('Engine: LOCAL (regex-based, cached rules)'));
473
+ }
316
474
  if (report.summary.totalViolations === 0 && report.summary.errorFiles === 0) {
317
475
  console.log(chalk.green.bold('✔ Success! Found 0 policy violations. Your code is clean.\n'));
318
476
  } else {
@@ -359,6 +517,43 @@ program
359
517
  process.exit(0);
360
518
  });
361
519
 
520
+ // ─── RULE SYNC COMMAND ──────────────────────────────────────────────────────
521
+
522
+ const rulesCmd = program.command('rules').description('Rule definition management commands');
523
+
524
+ rulesCmd
525
+ .command('sync')
526
+ .description('Download and cache rule definitions for offline enforcement')
527
+ .action(async () => {
528
+ console.log(chalk.bold.hex('#F27D26')('\n▲ KOREXT RULE SYNC'));
529
+ console.log(chalk.dim('======================================='));
530
+ const spinner = ora('Fetching rule definitions...').start();
531
+ try {
532
+ const defs = await fetchAndCacheRules();
533
+ spinner.succeed(chalk.green(`Cached ${defs.ruleCount} rules across ${defs.packCount} packs`));
534
+ console.log(chalk.dim(` Version: ${defs.version}`));
535
+ console.log(chalk.dim(` Saved to: ${RULES_CACHE_FILE}`));
536
+ console.log(chalk.dim(` Generated: ${defs.generatedAt}`));
537
+
538
+ // List available packs
539
+ console.log(`\n${chalk.bold('Available packs for offline enforcement:')}`);
540
+ for (const [packId, pack] of Object.entries(defs.packs)) {
541
+ const ruleCount = pack.rules ? pack.rules.length : 0;
542
+ console.log(` ${chalk.cyan(packId)} — ${pack.label} (${ruleCount} rules)`);
543
+ }
544
+ console.log(`\n Run: ${chalk.green('korext enforce . --offline --pack <packId>')} to enforce offline.\n`);
545
+ } catch (e) {
546
+ spinner.fail(chalk.red(`Failed to fetch rule definitions: ${e.message}`));
547
+ const cached = getRuleDefinitionsCache();
548
+ if (cached) {
549
+ console.log(chalk.yellow(` Existing cache still available (v${cached.version}, ${cached.ruleCount} rules)`));
550
+ } else {
551
+ console.log(chalk.dim(' No cached definitions available. Connect to the network and try again.'));
552
+ }
553
+ process.exit(1);
554
+ }
555
+ });
556
+
362
557
  // ─── POLICY COMMANDS ─────────────────────────────────────────────────────────
363
558
 
364
559
  const LOCAL_DRAFT_DIR = path.join(process.cwd(), '.korext');
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "korext",
3
- "version": "0.7.0",
3
+ "version": "0.8.1",
4
4
  "description": "Korext Command Line Interface",
5
5
  "type": "module",
6
6
  "main": "bin/korext.js",
7
7
  "bin": {
8
8
  "korext": "bin/korext.js"
9
9
  },
10
- "author": "Korext",
10
+ "author": "Korext <support@korext.com>",
11
11
  "license": "ISC",
12
12
  "dependencies": {
13
13
  "chalk": "^4.1.2",
@@ -17,18 +17,25 @@
17
17
  "node-fetch": "^3.3.2",
18
18
  "ora": "^5.4.1"
19
19
  },
20
- "bundledDependencies": [
21
- "chalk",
22
- "commander",
23
- "glob",
24
- "node-fetch",
25
- "ora"
20
+ "files": [
21
+ "bin/"
26
22
  ],
27
- "bundleDependencies": [
28
- "chalk",
29
- "commander",
30
- "glob",
31
- "node-fetch",
32
- "ora"
23
+ "homepage": "https://www.korext.com",
24
+ "bugs": {
25
+ "email": "support@korext.com"
26
+ },
27
+ "keywords": [
28
+ "governance",
29
+ "compliance",
30
+ "security",
31
+ "cli",
32
+ "cicd",
33
+ "sarif",
34
+ "AI",
35
+ "code review",
36
+ "PCI-DSS",
37
+ "HIPAA",
38
+ "OWASP",
39
+ "korext"
33
40
  ]
34
41
  }
package/CHANGELOG.md DELETED
@@ -1,51 +0,0 @@
1
- ## 0.7.0 - 2026-03-19
2
-
3
- ### Added
4
- - Three layer governance context on every
5
- violation: regulatory compliance, technical
6
- standards, and security intelligence
7
- - Per violation AI explanations with individual
8
- reasoning for each finding
9
- - Code snippet extraction showing the exact
10
- lines around each violation
11
- - Real Shadow Test verification on dashboard
12
- fixes for Team and Enterprise tiers
13
- - Diff preview before applying fixes, showing
14
- exactly what changed before accepting
15
- - Undo support to restore original code after
16
- applying a fix
17
- - Git context (repository, branch, commit)
18
- included in proof bundles from IDE and CLI
19
- - Organisation ID on proof bundles for
20
- enterprise filtering
21
- - Honest hash type labelling: deterministic
22
- replay hash for IDE and CLI, session
23
- identifier for dashboard
24
- - Publication quality proof bundle PDF export
25
- with QR verification, governance coverage
26
- tables, and three layer compliance mapping
27
- - Enterprise branding on proof bundle PDFs
28
- - Public bundle verification page
29
- - Expanded knowledge graph sources including
30
- MITRE ATLAS, CISA KEV, NIST AI RMF,
31
- ISO 42001, EU AI Act, OWASP Top 10 for
32
- LLMs, OSV, and FIRST EPSS
33
-
34
- ### Changed
35
- - HMAC signing consolidated to server side
36
- for all paths
37
- - Governance mappings restructured from flat
38
- citations to three layer context covering
39
- US, EU, UK, Canadian, and Australian
40
- regulatory frameworks
41
- - Security hardening: environment aware HMAC
42
- key validation, Zod validation on all
43
- endpoints, typed request interfaces
44
-
45
- ### Fixed
46
- - Original code preserved in dashboard state
47
- after applying fixes
48
- - Shadow Test Protocol section on dashboard
49
- now shows real results instead of static UI
50
- - Documentation formatting corrected across
51
- all marketplace listings
package/dummy.pdf DELETED
File without changes
package/korext.json DELETED
@@ -1,11 +0,0 @@
1
- {
2
- "project": "my-app",
3
- "targetPacks": [
4
- "security-strict-v1",
5
- "web-platform-v2"
6
- ],
7
- "exclude": [
8
- "node_modules/**",
9
- "dist/**"
10
- ]
11
- }
@@ -1,37 +0,0 @@
1
- declare namespace ansiRegex {
2
- interface Options {
3
- /**
4
- Match only the first ANSI escape.
5
-
6
- @default false
7
- */
8
- onlyFirst: boolean;
9
- }
10
- }
11
-
12
- /**
13
- Regular expression for matching ANSI escape codes.
14
-
15
- @example
16
- ```
17
- import ansiRegex = require('ansi-regex');
18
-
19
- ansiRegex().test('\u001B[4mcake\u001B[0m');
20
- //=> true
21
-
22
- ansiRegex().test('cake');
23
- //=> false
24
-
25
- '\u001B[4mcake\u001B[0m'.match(ansiRegex());
26
- //=> ['\u001B[4m', '\u001B[0m']
27
-
28
- '\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true}));
29
- //=> ['\u001B[4m']
30
-
31
- '\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex());
32
- //=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007']
33
- ```
34
- */
35
- declare function ansiRegex(options?: ansiRegex.Options): RegExp;
36
-
37
- export = ansiRegex;