ima2-gen 3.15.1 → 3.16.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 (764) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/README.md +7 -6
  3. package/bin/commands/grok.js +150 -64
  4. package/bin/commands/service.js +5 -4
  5. package/bin/ima2.js +3 -3
  6. package/bin/lib/doctor-providers.js +6 -1
  7. package/bin/lib/doctor-runtime.js +1 -1
  8. package/config.js +0 -9
  9. package/docs/API.md +7 -7
  10. package/docs/API.zh-CN.md +7 -7
  11. package/docs/API.zh-TW.md +7 -7
  12. package/docs/CLI.md +9 -8
  13. package/docs/CLI.zh-CN.md +8 -8
  14. package/docs/CLI.zh-TW.md +8 -8
  15. package/docs/README.ko.md +5 -6
  16. package/docs/README.zh-CN.md +6 -5
  17. package/docs/README.zh-TW.md +6 -5
  18. package/docs/migration/runtime-test-inventory.md +4 -6
  19. package/lib/agentPlannerModel.js +17 -16
  20. package/lib/capabilities.js +3 -2
  21. package/lib/errors/providerMap.js +13 -0
  22. package/lib/grokImageCore.js +9 -16
  23. package/lib/grokImagePlanner.js +15 -3
  24. package/lib/grokRuntime.js +47 -16
  25. package/lib/grokVideoAdapter.js +23 -7
  26. package/lib/grokVideoPoll.js +3 -3
  27. package/lib/grokVideoShared.js +6 -13
  28. package/lib/promptBuilder/router.js +22 -6
  29. package/lib/providers/adapters/grokExecution.js +15 -14
  30. package/lib/providers/adapters/grokMultimodeOperations.js +9 -7
  31. package/lib/providers/adapters/grokOperations.js +19 -12
  32. package/lib/providers/execution/admission.js +20 -4
  33. package/lib/providers/registry.js +1 -1
  34. package/lib/runtimeContext.js +0 -12
  35. package/lib/videoExtendI2vOperation.js +5 -1
  36. package/lib/xaiAuth.js +369 -0
  37. package/lib/xaiDeviceLogin.js +157 -0
  38. package/package.json +2 -4
  39. package/routes/auth.js +18 -26
  40. package/routes/grok.js +25 -19
  41. package/routes/health.js +4 -5
  42. package/routes/models.js +12 -26
  43. package/routes/quota.js +2 -1
  44. package/routes/video.js +7 -2
  45. package/routes/videoExtended.js +37 -24
  46. package/server.js +7 -58
  47. package/skills/ima2/SKILL.md +2 -2
  48. package/ui/dist/.vite/manifest.json +56 -56
  49. package/ui/dist/assets/{AgentWorkspace-CLJDCRMQ.js → AgentWorkspace-DlLaTsPK.js} +1 -1
  50. package/ui/dist/assets/{App-DkvU6Sex.js → App-BfpvLzSs.js} +4 -4
  51. package/ui/dist/assets/{AssetGenWorkspace-BepUrz23.js → AssetGenWorkspace-C8eIs-bS.js} +2 -2
  52. package/ui/dist/assets/{AssetsWorkspace-IipC1FdD.js → AssetsWorkspace-BcbAM8uC.js} +1 -1
  53. package/ui/dist/assets/{CardNewsWorkspace-ZXDwYz4l.js → CardNewsWorkspace-CM5hwbRV.js} +1 -1
  54. package/ui/dist/assets/{GenerationRequestLogPanel-BL2C0DcW.js → GenerationRequestLogPanel-CTs8OymS.js} +1 -1
  55. package/ui/dist/assets/{HomeWorkspace-DFfrwS9a.js → HomeWorkspace-KGUtIZyG.js} +1 -1
  56. package/ui/dist/assets/{KeyingPanel-BQkEMTe9.js → KeyingPanel-D8ZHmWcC.js} +1 -1
  57. package/ui/dist/assets/{NodeCanvas-5u8IO1MA.js → NodeCanvas-D2N3m-1s.js} +1 -1
  58. package/ui/dist/assets/{PromptBuilderPanel-DNt7LHMi.js → PromptBuilderPanel-BolZnOa7.js} +1 -1
  59. package/ui/dist/assets/{PromptImportDialog-Bl-SB4mK.js → PromptImportDialog-DBpe7Vkj.js} +2 -2
  60. package/ui/dist/assets/{PromptImportDiscoverySection-DdZAdRMW.js → PromptImportDiscoverySection-Dk6v6lUZ.js} +1 -1
  61. package/ui/dist/assets/{PromptImportFolderSection-DLHQKl9T.js → PromptImportFolderSection-BE7Nfq9Y.js} +1 -1
  62. package/ui/dist/assets/{PromptLibraryPanel-PLWyvEz1.js → PromptLibraryPanel-Qdujpb4L.js} +2 -2
  63. package/ui/dist/assets/{SettingsWorkspace-Etfeu2IF.js → SettingsWorkspace-Dm4wezu_.js} +1 -1
  64. package/ui/dist/assets/{SpriteRecipeWorkspace-D7H5seOM.js → SpriteRecipeWorkspace-D9do9V7F.js} +1 -1
  65. package/ui/dist/assets/index-CfGRmfFv.js +22 -0
  66. package/ui/dist/assets/{index-BAkbTbUC.js → index-CfrOcJIe.js} +3 -3
  67. package/ui/dist/assets/{pptxgen.es-Apxh5DQ9.js → pptxgen.es-BLI_YKez.js} +1 -1
  68. package/ui/dist/assets/{promptBuilderStore-prvdLIUP.js → promptBuilderStore-BMiudG9n.js} +1 -1
  69. package/ui/dist/assets/useAgentDialogFocus-CCj5EYE9.js +1 -0
  70. package/ui/dist/index.html +1 -1
  71. package/lib/grokProxyLauncher.js +0 -279
  72. package/node_modules/array-flatten/LICENSE +0 -21
  73. package/node_modules/array-flatten/README.md +0 -43
  74. package/node_modules/array-flatten/array-flatten.js +0 -64
  75. package/node_modules/array-flatten/package.json +0 -39
  76. package/node_modules/bundle-name/index.js +0 -5
  77. package/node_modules/bundle-name/license +0 -9
  78. package/node_modules/bundle-name/package.json +0 -45
  79. package/node_modules/bundle-name/readme.md +0 -23
  80. package/node_modules/bytes/History.md +0 -97
  81. package/node_modules/bytes/LICENSE +0 -23
  82. package/node_modules/bytes/Readme.md +0 -152
  83. package/node_modules/bytes/index.js +0 -170
  84. package/node_modules/bytes/package.json +0 -42
  85. package/node_modules/call-bind-apply-helpers/.eslintrc +0 -17
  86. package/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +0 -12
  87. package/node_modules/call-bind-apply-helpers/.nycrc +0 -9
  88. package/node_modules/call-bind-apply-helpers/CHANGELOG.md +0 -30
  89. package/node_modules/call-bind-apply-helpers/LICENSE +0 -21
  90. package/node_modules/call-bind-apply-helpers/README.md +0 -62
  91. package/node_modules/call-bind-apply-helpers/actualApply.d.ts +0 -1
  92. package/node_modules/call-bind-apply-helpers/actualApply.js +0 -10
  93. package/node_modules/call-bind-apply-helpers/applyBind.d.ts +0 -19
  94. package/node_modules/call-bind-apply-helpers/applyBind.js +0 -10
  95. package/node_modules/call-bind-apply-helpers/functionApply.d.ts +0 -1
  96. package/node_modules/call-bind-apply-helpers/functionApply.js +0 -4
  97. package/node_modules/call-bind-apply-helpers/functionCall.d.ts +0 -1
  98. package/node_modules/call-bind-apply-helpers/functionCall.js +0 -4
  99. package/node_modules/call-bind-apply-helpers/index.d.ts +0 -64
  100. package/node_modules/call-bind-apply-helpers/index.js +0 -15
  101. package/node_modules/call-bind-apply-helpers/package.json +0 -85
  102. package/node_modules/call-bind-apply-helpers/reflectApply.d.ts +0 -3
  103. package/node_modules/call-bind-apply-helpers/reflectApply.js +0 -4
  104. package/node_modules/call-bind-apply-helpers/test/index.js +0 -63
  105. package/node_modules/call-bind-apply-helpers/tsconfig.json +0 -9
  106. package/node_modules/call-bound/.eslintrc +0 -13
  107. package/node_modules/call-bound/.github/FUNDING.yml +0 -12
  108. package/node_modules/call-bound/.nycrc +0 -9
  109. package/node_modules/call-bound/CHANGELOG.md +0 -42
  110. package/node_modules/call-bound/LICENSE +0 -21
  111. package/node_modules/call-bound/README.md +0 -53
  112. package/node_modules/call-bound/index.d.ts +0 -94
  113. package/node_modules/call-bound/index.js +0 -19
  114. package/node_modules/call-bound/package.json +0 -99
  115. package/node_modules/call-bound/test/index.js +0 -61
  116. package/node_modules/call-bound/tsconfig.json +0 -10
  117. package/node_modules/commander/LICENSE +0 -22
  118. package/node_modules/commander/Readme.md +0 -1149
  119. package/node_modules/commander/esm.mjs +0 -16
  120. package/node_modules/commander/index.js +0 -24
  121. package/node_modules/commander/lib/argument.js +0 -149
  122. package/node_modules/commander/lib/command.js +0 -2662
  123. package/node_modules/commander/lib/error.js +0 -39
  124. package/node_modules/commander/lib/help.js +0 -709
  125. package/node_modules/commander/lib/option.js +0 -367
  126. package/node_modules/commander/lib/suggestSimilar.js +0 -101
  127. package/node_modules/commander/package-support.json +0 -16
  128. package/node_modules/commander/package.json +0 -82
  129. package/node_modules/commander/typings/esm.d.mts +0 -3
  130. package/node_modules/commander/typings/index.d.ts +0 -1045
  131. package/node_modules/content-type/HISTORY.md +0 -29
  132. package/node_modules/content-type/LICENSE +0 -22
  133. package/node_modules/content-type/README.md +0 -94
  134. package/node_modules/content-type/index.js +0 -225
  135. package/node_modules/content-type/package.json +0 -42
  136. package/node_modules/cookie/LICENSE +0 -24
  137. package/node_modules/cookie/README.md +0 -317
  138. package/node_modules/cookie/SECURITY.md +0 -25
  139. package/node_modules/cookie/index.js +0 -335
  140. package/node_modules/cookie/package.json +0 -44
  141. package/node_modules/default-browser/index.d.ts +0 -29
  142. package/node_modules/default-browser/index.js +0 -34
  143. package/node_modules/default-browser/license +0 -9
  144. package/node_modules/default-browser/package.json +0 -54
  145. package/node_modules/default-browser/readme.md +0 -24
  146. package/node_modules/default-browser/windows.js +0 -57
  147. package/node_modules/default-browser-id/index.js +0 -25
  148. package/node_modules/default-browser-id/license +0 -9
  149. package/node_modules/default-browser-id/package.json +0 -41
  150. package/node_modules/default-browser-id/readme.md +0 -19
  151. package/node_modules/define-lazy-prop/index.d.ts +0 -31
  152. package/node_modules/define-lazy-prop/index.js +0 -18
  153. package/node_modules/define-lazy-prop/license +0 -9
  154. package/node_modules/define-lazy-prop/package.json +0 -51
  155. package/node_modules/define-lazy-prop/readme.md +0 -55
  156. package/node_modules/depd/History.md +0 -103
  157. package/node_modules/depd/LICENSE +0 -22
  158. package/node_modules/depd/Readme.md +0 -280
  159. package/node_modules/depd/index.js +0 -538
  160. package/node_modules/depd/lib/browser/index.js +0 -77
  161. package/node_modules/depd/package.json +0 -45
  162. package/node_modules/destroy/LICENSE +0 -23
  163. package/node_modules/destroy/README.md +0 -63
  164. package/node_modules/destroy/index.js +0 -209
  165. package/node_modules/destroy/package.json +0 -48
  166. package/node_modules/dunder-proto/.eslintrc +0 -5
  167. package/node_modules/dunder-proto/.github/FUNDING.yml +0 -12
  168. package/node_modules/dunder-proto/.nycrc +0 -13
  169. package/node_modules/dunder-proto/CHANGELOG.md +0 -24
  170. package/node_modules/dunder-proto/LICENSE +0 -21
  171. package/node_modules/dunder-proto/README.md +0 -54
  172. package/node_modules/dunder-proto/get.d.ts +0 -5
  173. package/node_modules/dunder-proto/get.js +0 -30
  174. package/node_modules/dunder-proto/package.json +0 -76
  175. package/node_modules/dunder-proto/set.d.ts +0 -5
  176. package/node_modules/dunder-proto/set.js +0 -35
  177. package/node_modules/dunder-proto/test/get.js +0 -34
  178. package/node_modules/dunder-proto/test/index.js +0 -4
  179. package/node_modules/dunder-proto/test/set.js +0 -50
  180. package/node_modules/dunder-proto/tsconfig.json +0 -9
  181. package/node_modules/ee-first/LICENSE +0 -22
  182. package/node_modules/ee-first/README.md +0 -80
  183. package/node_modules/ee-first/index.js +0 -95
  184. package/node_modules/ee-first/package.json +0 -29
  185. package/node_modules/encodeurl/LICENSE +0 -22
  186. package/node_modules/encodeurl/README.md +0 -109
  187. package/node_modules/encodeurl/index.js +0 -60
  188. package/node_modules/encodeurl/package.json +0 -40
  189. package/node_modules/es-define-property/.eslintrc +0 -13
  190. package/node_modules/es-define-property/.github/FUNDING.yml +0 -12
  191. package/node_modules/es-define-property/.nycrc +0 -9
  192. package/node_modules/es-define-property/CHANGELOG.md +0 -29
  193. package/node_modules/es-define-property/LICENSE +0 -21
  194. package/node_modules/es-define-property/README.md +0 -49
  195. package/node_modules/es-define-property/index.d.ts +0 -3
  196. package/node_modules/es-define-property/index.js +0 -14
  197. package/node_modules/es-define-property/package.json +0 -81
  198. package/node_modules/es-define-property/test/index.js +0 -56
  199. package/node_modules/es-define-property/tsconfig.json +0 -10
  200. package/node_modules/es-errors/.eslintrc +0 -5
  201. package/node_modules/es-errors/.github/FUNDING.yml +0 -12
  202. package/node_modules/es-errors/CHANGELOG.md +0 -40
  203. package/node_modules/es-errors/LICENSE +0 -21
  204. package/node_modules/es-errors/README.md +0 -55
  205. package/node_modules/es-errors/eval.d.ts +0 -3
  206. package/node_modules/es-errors/eval.js +0 -4
  207. package/node_modules/es-errors/index.d.ts +0 -3
  208. package/node_modules/es-errors/index.js +0 -4
  209. package/node_modules/es-errors/package.json +0 -80
  210. package/node_modules/es-errors/range.d.ts +0 -3
  211. package/node_modules/es-errors/range.js +0 -4
  212. package/node_modules/es-errors/ref.d.ts +0 -3
  213. package/node_modules/es-errors/ref.js +0 -4
  214. package/node_modules/es-errors/syntax.d.ts +0 -3
  215. package/node_modules/es-errors/syntax.js +0 -4
  216. package/node_modules/es-errors/test/index.js +0 -19
  217. package/node_modules/es-errors/tsconfig.json +0 -49
  218. package/node_modules/es-errors/type.d.ts +0 -3
  219. package/node_modules/es-errors/type.js +0 -4
  220. package/node_modules/es-errors/uri.d.ts +0 -3
  221. package/node_modules/es-errors/uri.js +0 -4
  222. package/node_modules/es-object-atoms/.eslintrc +0 -16
  223. package/node_modules/es-object-atoms/.github/FUNDING.yml +0 -12
  224. package/node_modules/es-object-atoms/CHANGELOG.md +0 -37
  225. package/node_modules/es-object-atoms/LICENSE +0 -21
  226. package/node_modules/es-object-atoms/README.md +0 -63
  227. package/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +0 -3
  228. package/node_modules/es-object-atoms/RequireObjectCoercible.js +0 -11
  229. package/node_modules/es-object-atoms/ToObject.d.ts +0 -7
  230. package/node_modules/es-object-atoms/ToObject.js +0 -10
  231. package/node_modules/es-object-atoms/index.d.ts +0 -3
  232. package/node_modules/es-object-atoms/index.js +0 -4
  233. package/node_modules/es-object-atoms/isObject.d.ts +0 -3
  234. package/node_modules/es-object-atoms/isObject.js +0 -6
  235. package/node_modules/es-object-atoms/package.json +0 -80
  236. package/node_modules/es-object-atoms/test/index.js +0 -38
  237. package/node_modules/es-object-atoms/tsconfig.json +0 -6
  238. package/node_modules/escape-html/LICENSE +0 -24
  239. package/node_modules/escape-html/Readme.md +0 -43
  240. package/node_modules/escape-html/index.js +0 -78
  241. package/node_modules/escape-html/package.json +0 -24
  242. package/node_modules/etag/HISTORY.md +0 -83
  243. package/node_modules/etag/LICENSE +0 -22
  244. package/node_modules/etag/README.md +0 -159
  245. package/node_modules/etag/index.js +0 -131
  246. package/node_modules/etag/package.json +0 -47
  247. package/node_modules/forwarded/HISTORY.md +0 -21
  248. package/node_modules/forwarded/LICENSE +0 -22
  249. package/node_modules/forwarded/README.md +0 -57
  250. package/node_modules/forwarded/index.js +0 -90
  251. package/node_modules/forwarded/package.json +0 -45
  252. package/node_modules/function-bind/.eslintrc +0 -21
  253. package/node_modules/function-bind/.github/FUNDING.yml +0 -12
  254. package/node_modules/function-bind/.github/SECURITY.md +0 -3
  255. package/node_modules/function-bind/.nycrc +0 -13
  256. package/node_modules/function-bind/CHANGELOG.md +0 -136
  257. package/node_modules/function-bind/LICENSE +0 -20
  258. package/node_modules/function-bind/README.md +0 -46
  259. package/node_modules/function-bind/implementation.js +0 -84
  260. package/node_modules/function-bind/index.js +0 -5
  261. package/node_modules/function-bind/package.json +0 -87
  262. package/node_modules/function-bind/test/.eslintrc +0 -9
  263. package/node_modules/function-bind/test/index.js +0 -252
  264. package/node_modules/get-intrinsic/.eslintrc +0 -42
  265. package/node_modules/get-intrinsic/.github/FUNDING.yml +0 -12
  266. package/node_modules/get-intrinsic/.nycrc +0 -9
  267. package/node_modules/get-intrinsic/CHANGELOG.md +0 -186
  268. package/node_modules/get-intrinsic/LICENSE +0 -21
  269. package/node_modules/get-intrinsic/README.md +0 -71
  270. package/node_modules/get-intrinsic/index.js +0 -378
  271. package/node_modules/get-intrinsic/package.json +0 -97
  272. package/node_modules/get-intrinsic/test/GetIntrinsic.js +0 -274
  273. package/node_modules/get-proto/.eslintrc +0 -10
  274. package/node_modules/get-proto/.github/FUNDING.yml +0 -12
  275. package/node_modules/get-proto/.nycrc +0 -9
  276. package/node_modules/get-proto/CHANGELOG.md +0 -21
  277. package/node_modules/get-proto/LICENSE +0 -21
  278. package/node_modules/get-proto/Object.getPrototypeOf.d.ts +0 -5
  279. package/node_modules/get-proto/Object.getPrototypeOf.js +0 -6
  280. package/node_modules/get-proto/README.md +0 -50
  281. package/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +0 -3
  282. package/node_modules/get-proto/Reflect.getPrototypeOf.js +0 -4
  283. package/node_modules/get-proto/index.d.ts +0 -5
  284. package/node_modules/get-proto/index.js +0 -27
  285. package/node_modules/get-proto/package.json +0 -81
  286. package/node_modules/get-proto/test/index.js +0 -68
  287. package/node_modules/get-proto/tsconfig.json +0 -9
  288. package/node_modules/gopd/.eslintrc +0 -16
  289. package/node_modules/gopd/.github/FUNDING.yml +0 -12
  290. package/node_modules/gopd/CHANGELOG.md +0 -45
  291. package/node_modules/gopd/LICENSE +0 -21
  292. package/node_modules/gopd/README.md +0 -40
  293. package/node_modules/gopd/gOPD.d.ts +0 -1
  294. package/node_modules/gopd/gOPD.js +0 -4
  295. package/node_modules/gopd/index.d.ts +0 -5
  296. package/node_modules/gopd/index.js +0 -15
  297. package/node_modules/gopd/package.json +0 -77
  298. package/node_modules/gopd/test/index.js +0 -36
  299. package/node_modules/gopd/tsconfig.json +0 -9
  300. package/node_modules/has-symbols/.eslintrc +0 -11
  301. package/node_modules/has-symbols/.github/FUNDING.yml +0 -12
  302. package/node_modules/has-symbols/.nycrc +0 -9
  303. package/node_modules/has-symbols/CHANGELOG.md +0 -91
  304. package/node_modules/has-symbols/LICENSE +0 -21
  305. package/node_modules/has-symbols/README.md +0 -46
  306. package/node_modules/has-symbols/index.d.ts +0 -3
  307. package/node_modules/has-symbols/index.js +0 -14
  308. package/node_modules/has-symbols/package.json +0 -111
  309. package/node_modules/has-symbols/shams.d.ts +0 -3
  310. package/node_modules/has-symbols/shams.js +0 -45
  311. package/node_modules/has-symbols/test/index.js +0 -22
  312. package/node_modules/has-symbols/test/shams/core-js.js +0 -29
  313. package/node_modules/has-symbols/test/shams/get-own-property-symbols.js +0 -29
  314. package/node_modules/has-symbols/test/tests.js +0 -58
  315. package/node_modules/has-symbols/tsconfig.json +0 -10
  316. package/node_modules/hasown/.github/FUNDING.yml +0 -12
  317. package/node_modules/hasown/.nycrc +0 -13
  318. package/node_modules/hasown/CHANGELOG.md +0 -51
  319. package/node_modules/hasown/LICENSE +0 -21
  320. package/node_modules/hasown/README.md +0 -40
  321. package/node_modules/hasown/eslint.config.mjs +0 -6
  322. package/node_modules/hasown/index.d.ts +0 -4
  323. package/node_modules/hasown/index.js +0 -8
  324. package/node_modules/hasown/package.json +0 -92
  325. package/node_modules/hasown/tsconfig.json +0 -6
  326. package/node_modules/http-errors/HISTORY.md +0 -186
  327. package/node_modules/http-errors/LICENSE +0 -23
  328. package/node_modules/http-errors/README.md +0 -169
  329. package/node_modules/http-errors/index.js +0 -290
  330. package/node_modules/http-errors/package.json +0 -54
  331. package/node_modules/inherits/LICENSE +0 -16
  332. package/node_modules/inherits/README.md +0 -42
  333. package/node_modules/inherits/inherits.js +0 -9
  334. package/node_modules/inherits/inherits_browser.js +0 -27
  335. package/node_modules/inherits/package.json +0 -29
  336. package/node_modules/ipaddr.js/LICENSE +0 -19
  337. package/node_modules/ipaddr.js/README.md +0 -233
  338. package/node_modules/ipaddr.js/ipaddr.min.js +0 -1
  339. package/node_modules/ipaddr.js/lib/ipaddr.js +0 -673
  340. package/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +0 -68
  341. package/node_modules/ipaddr.js/package.json +0 -35
  342. package/node_modules/is-docker/cli.js +0 -5
  343. package/node_modules/is-docker/index.d.ts +0 -13
  344. package/node_modules/is-docker/index.js +0 -29
  345. package/node_modules/is-docker/license +0 -9
  346. package/node_modules/is-docker/package.json +0 -44
  347. package/node_modules/is-docker/readme.md +0 -27
  348. package/node_modules/is-inside-container/cli.js +0 -5
  349. package/node_modules/is-inside-container/index.d.ts +0 -13
  350. package/node_modules/is-inside-container/index.js +0 -23
  351. package/node_modules/is-inside-container/license +0 -9
  352. package/node_modules/is-inside-container/package.json +0 -51
  353. package/node_modules/is-inside-container/readme.md +0 -36
  354. package/node_modules/is-wsl/index.d.ts +0 -15
  355. package/node_modules/is-wsl/index.js +0 -36
  356. package/node_modules/is-wsl/license +0 -9
  357. package/node_modules/is-wsl/package.json +0 -58
  358. package/node_modules/is-wsl/readme.md +0 -21
  359. package/node_modules/math-intrinsics/.eslintrc +0 -16
  360. package/node_modules/math-intrinsics/.github/FUNDING.yml +0 -12
  361. package/node_modules/math-intrinsics/CHANGELOG.md +0 -24
  362. package/node_modules/math-intrinsics/LICENSE +0 -21
  363. package/node_modules/math-intrinsics/README.md +0 -50
  364. package/node_modules/math-intrinsics/abs.d.ts +0 -1
  365. package/node_modules/math-intrinsics/abs.js +0 -4
  366. package/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +0 -3
  367. package/node_modules/math-intrinsics/constants/maxArrayLength.js +0 -4
  368. package/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +0 -3
  369. package/node_modules/math-intrinsics/constants/maxSafeInteger.js +0 -5
  370. package/node_modules/math-intrinsics/constants/maxValue.d.ts +0 -3
  371. package/node_modules/math-intrinsics/constants/maxValue.js +0 -5
  372. package/node_modules/math-intrinsics/floor.d.ts +0 -1
  373. package/node_modules/math-intrinsics/floor.js +0 -4
  374. package/node_modules/math-intrinsics/isFinite.d.ts +0 -3
  375. package/node_modules/math-intrinsics/isFinite.js +0 -12
  376. package/node_modules/math-intrinsics/isInteger.d.ts +0 -3
  377. package/node_modules/math-intrinsics/isInteger.js +0 -16
  378. package/node_modules/math-intrinsics/isNaN.d.ts +0 -1
  379. package/node_modules/math-intrinsics/isNaN.js +0 -6
  380. package/node_modules/math-intrinsics/isNegativeZero.d.ts +0 -3
  381. package/node_modules/math-intrinsics/isNegativeZero.js +0 -6
  382. package/node_modules/math-intrinsics/max.d.ts +0 -1
  383. package/node_modules/math-intrinsics/max.js +0 -4
  384. package/node_modules/math-intrinsics/min.d.ts +0 -1
  385. package/node_modules/math-intrinsics/min.js +0 -4
  386. package/node_modules/math-intrinsics/mod.d.ts +0 -3
  387. package/node_modules/math-intrinsics/mod.js +0 -9
  388. package/node_modules/math-intrinsics/package.json +0 -86
  389. package/node_modules/math-intrinsics/pow.d.ts +0 -1
  390. package/node_modules/math-intrinsics/pow.js +0 -4
  391. package/node_modules/math-intrinsics/round.d.ts +0 -1
  392. package/node_modules/math-intrinsics/round.js +0 -4
  393. package/node_modules/math-intrinsics/sign.d.ts +0 -3
  394. package/node_modules/math-intrinsics/sign.js +0 -11
  395. package/node_modules/math-intrinsics/test/index.js +0 -192
  396. package/node_modules/math-intrinsics/tsconfig.json +0 -3
  397. package/node_modules/methods/HISTORY.md +0 -29
  398. package/node_modules/methods/LICENSE +0 -24
  399. package/node_modules/methods/README.md +0 -51
  400. package/node_modules/methods/index.js +0 -69
  401. package/node_modules/methods/package.json +0 -36
  402. package/node_modules/mime/.npmignore +0 -0
  403. package/node_modules/mime/CHANGELOG.md +0 -164
  404. package/node_modules/mime/LICENSE +0 -21
  405. package/node_modules/mime/README.md +0 -90
  406. package/node_modules/mime/cli.js +0 -8
  407. package/node_modules/mime/mime.js +0 -108
  408. package/node_modules/mime/package.json +0 -44
  409. package/node_modules/mime/src/build.js +0 -53
  410. package/node_modules/mime/src/test.js +0 -60
  411. package/node_modules/mime/types.json +0 -1
  412. package/node_modules/ms/index.js +0 -162
  413. package/node_modules/ms/license.md +0 -21
  414. package/node_modules/ms/package.json +0 -38
  415. package/node_modules/ms/readme.md +0 -59
  416. package/node_modules/object-inspect/.eslintrc +0 -53
  417. package/node_modules/object-inspect/.github/FUNDING.yml +0 -12
  418. package/node_modules/object-inspect/.nycrc +0 -13
  419. package/node_modules/object-inspect/CHANGELOG.md +0 -424
  420. package/node_modules/object-inspect/LICENSE +0 -21
  421. package/node_modules/object-inspect/example/all.js +0 -23
  422. package/node_modules/object-inspect/example/circular.js +0 -6
  423. package/node_modules/object-inspect/example/fn.js +0 -5
  424. package/node_modules/object-inspect/example/inspect.js +0 -10
  425. package/node_modules/object-inspect/index.js +0 -544
  426. package/node_modules/object-inspect/package-support.json +0 -20
  427. package/node_modules/object-inspect/package.json +0 -105
  428. package/node_modules/object-inspect/readme.markdown +0 -84
  429. package/node_modules/object-inspect/test/bigint.js +0 -58
  430. package/node_modules/object-inspect/test/browser/dom.js +0 -15
  431. package/node_modules/object-inspect/test/circular.js +0 -16
  432. package/node_modules/object-inspect/test/deep.js +0 -12
  433. package/node_modules/object-inspect/test/element.js +0 -53
  434. package/node_modules/object-inspect/test/err.js +0 -48
  435. package/node_modules/object-inspect/test/fakes.js +0 -29
  436. package/node_modules/object-inspect/test/fn.js +0 -76
  437. package/node_modules/object-inspect/test/global.js +0 -17
  438. package/node_modules/object-inspect/test/has.js +0 -15
  439. package/node_modules/object-inspect/test/holes.js +0 -15
  440. package/node_modules/object-inspect/test/indent-option.js +0 -271
  441. package/node_modules/object-inspect/test/inspect.js +0 -139
  442. package/node_modules/object-inspect/test/lowbyte.js +0 -12
  443. package/node_modules/object-inspect/test/number.js +0 -58
  444. package/node_modules/object-inspect/test/quoteStyle.js +0 -26
  445. package/node_modules/object-inspect/test/toStringTag.js +0 -40
  446. package/node_modules/object-inspect/test/undef.js +0 -12
  447. package/node_modules/object-inspect/test/values.js +0 -261
  448. package/node_modules/object-inspect/test-core-js.js +0 -26
  449. package/node_modules/object-inspect/util.inspect.js +0 -1
  450. package/node_modules/on-finished/HISTORY.md +0 -98
  451. package/node_modules/on-finished/LICENSE +0 -23
  452. package/node_modules/on-finished/README.md +0 -162
  453. package/node_modules/on-finished/index.js +0 -234
  454. package/node_modules/on-finished/package.json +0 -39
  455. package/node_modules/open/index.d.ts +0 -158
  456. package/node_modules/open/index.js +0 -366
  457. package/node_modules/open/license +0 -9
  458. package/node_modules/open/node_modules/wsl-utils/index.d.ts +0 -21
  459. package/node_modules/open/node_modules/wsl-utils/index.js +0 -57
  460. package/node_modules/open/node_modules/wsl-utils/license +0 -9
  461. package/node_modules/open/node_modules/wsl-utils/package.json +0 -46
  462. package/node_modules/open/node_modules/wsl-utils/readme.md +0 -50
  463. package/node_modules/open/package.json +0 -68
  464. package/node_modules/open/readme.md +0 -183
  465. package/node_modules/open/xdg-open +0 -1267
  466. package/node_modules/parseurl/HISTORY.md +0 -58
  467. package/node_modules/parseurl/LICENSE +0 -24
  468. package/node_modules/parseurl/README.md +0 -133
  469. package/node_modules/parseurl/index.js +0 -158
  470. package/node_modules/parseurl/package.json +0 -40
  471. package/node_modules/progrok/LICENSE +0 -21
  472. package/node_modules/progrok/README.md +0 -331
  473. package/node_modules/progrok/THIRD_PARTY_NOTICES.md +0 -13
  474. package/node_modules/progrok/dist/index.js +0 -1626
  475. package/node_modules/progrok/dist/index.js.map +0 -1
  476. package/node_modules/progrok/dist/public/app.js +0 -529
  477. package/node_modules/progrok/dist/public/index.html +0 -47
  478. package/node_modules/progrok/dist/public/style.css +0 -392
  479. package/node_modules/progrok/node_modules/accepts/HISTORY.md +0 -243
  480. package/node_modules/progrok/node_modules/accepts/LICENSE +0 -23
  481. package/node_modules/progrok/node_modules/accepts/README.md +0 -140
  482. package/node_modules/progrok/node_modules/accepts/index.js +0 -238
  483. package/node_modules/progrok/node_modules/accepts/package.json +0 -47
  484. package/node_modules/progrok/node_modules/body-parser/HISTORY.md +0 -686
  485. package/node_modules/progrok/node_modules/body-parser/LICENSE +0 -23
  486. package/node_modules/progrok/node_modules/body-parser/README.md +0 -476
  487. package/node_modules/progrok/node_modules/body-parser/index.js +0 -156
  488. package/node_modules/progrok/node_modules/body-parser/lib/read.js +0 -205
  489. package/node_modules/progrok/node_modules/body-parser/lib/types/json.js +0 -243
  490. package/node_modules/progrok/node_modules/body-parser/lib/types/raw.js +0 -101
  491. package/node_modules/progrok/node_modules/body-parser/lib/types/text.js +0 -121
  492. package/node_modules/progrok/node_modules/body-parser/lib/types/urlencoded.js +0 -299
  493. package/node_modules/progrok/node_modules/body-parser/package.json +0 -55
  494. package/node_modules/progrok/node_modules/content-disposition/HISTORY.md +0 -60
  495. package/node_modules/progrok/node_modules/content-disposition/LICENSE +0 -22
  496. package/node_modules/progrok/node_modules/content-disposition/README.md +0 -142
  497. package/node_modules/progrok/node_modules/content-disposition/index.js +0 -458
  498. package/node_modules/progrok/node_modules/content-disposition/package.json +0 -44
  499. package/node_modules/progrok/node_modules/cookie-signature/History.md +0 -42
  500. package/node_modules/progrok/node_modules/cookie-signature/Readme.md +0 -42
  501. package/node_modules/progrok/node_modules/cookie-signature/index.js +0 -51
  502. package/node_modules/progrok/node_modules/cookie-signature/package.json +0 -18
  503. package/node_modules/progrok/node_modules/debug/.coveralls.yml +0 -1
  504. package/node_modules/progrok/node_modules/debug/.eslintrc +0 -11
  505. package/node_modules/progrok/node_modules/debug/.npmignore +0 -9
  506. package/node_modules/progrok/node_modules/debug/.travis.yml +0 -14
  507. package/node_modules/progrok/node_modules/debug/CHANGELOG.md +0 -362
  508. package/node_modules/progrok/node_modules/debug/LICENSE +0 -19
  509. package/node_modules/progrok/node_modules/debug/Makefile +0 -50
  510. package/node_modules/progrok/node_modules/debug/README.md +0 -312
  511. package/node_modules/progrok/node_modules/debug/component.json +0 -19
  512. package/node_modules/progrok/node_modules/debug/karma.conf.js +0 -70
  513. package/node_modules/progrok/node_modules/debug/node.js +0 -1
  514. package/node_modules/progrok/node_modules/debug/node_modules/ms/index.js +0 -152
  515. package/node_modules/progrok/node_modules/debug/node_modules/ms/license.md +0 -21
  516. package/node_modules/progrok/node_modules/debug/node_modules/ms/package.json +0 -37
  517. package/node_modules/progrok/node_modules/debug/node_modules/ms/readme.md +0 -51
  518. package/node_modules/progrok/node_modules/debug/package.json +0 -49
  519. package/node_modules/progrok/node_modules/debug/src/browser.js +0 -185
  520. package/node_modules/progrok/node_modules/debug/src/debug.js +0 -202
  521. package/node_modules/progrok/node_modules/debug/src/index.js +0 -10
  522. package/node_modules/progrok/node_modules/debug/src/inspector-log.js +0 -15
  523. package/node_modules/progrok/node_modules/debug/src/node.js +0 -248
  524. package/node_modules/progrok/node_modules/express/History.md +0 -3676
  525. package/node_modules/progrok/node_modules/express/LICENSE +0 -24
  526. package/node_modules/progrok/node_modules/express/Readme.md +0 -260
  527. package/node_modules/progrok/node_modules/express/index.js +0 -11
  528. package/node_modules/progrok/node_modules/express/lib/application.js +0 -661
  529. package/node_modules/progrok/node_modules/express/lib/express.js +0 -116
  530. package/node_modules/progrok/node_modules/express/lib/middleware/init.js +0 -43
  531. package/node_modules/progrok/node_modules/express/lib/middleware/query.js +0 -47
  532. package/node_modules/progrok/node_modules/express/lib/request.js +0 -525
  533. package/node_modules/progrok/node_modules/express/lib/response.js +0 -1179
  534. package/node_modules/progrok/node_modules/express/lib/router/index.js +0 -673
  535. package/node_modules/progrok/node_modules/express/lib/router/layer.js +0 -181
  536. package/node_modules/progrok/node_modules/express/lib/router/route.js +0 -230
  537. package/node_modules/progrok/node_modules/express/lib/utils.js +0 -304
  538. package/node_modules/progrok/node_modules/express/lib/view.js +0 -182
  539. package/node_modules/progrok/node_modules/express/package.json +0 -102
  540. package/node_modules/progrok/node_modules/finalhandler/HISTORY.md +0 -216
  541. package/node_modules/progrok/node_modules/finalhandler/LICENSE +0 -22
  542. package/node_modules/progrok/node_modules/finalhandler/README.md +0 -147
  543. package/node_modules/progrok/node_modules/finalhandler/SECURITY.md +0 -25
  544. package/node_modules/progrok/node_modules/finalhandler/index.js +0 -341
  545. package/node_modules/progrok/node_modules/finalhandler/package.json +0 -47
  546. package/node_modules/progrok/node_modules/fresh/HISTORY.md +0 -70
  547. package/node_modules/progrok/node_modules/fresh/LICENSE +0 -23
  548. package/node_modules/progrok/node_modules/fresh/README.md +0 -119
  549. package/node_modules/progrok/node_modules/fresh/index.js +0 -137
  550. package/node_modules/progrok/node_modules/fresh/package.json +0 -46
  551. package/node_modules/progrok/node_modules/iconv-lite/Changelog.md +0 -162
  552. package/node_modules/progrok/node_modules/iconv-lite/LICENSE +0 -21
  553. package/node_modules/progrok/node_modules/iconv-lite/README.md +0 -156
  554. package/node_modules/progrok/node_modules/iconv-lite/encodings/dbcs-codec.js +0 -555
  555. package/node_modules/progrok/node_modules/iconv-lite/encodings/dbcs-data.js +0 -176
  556. package/node_modules/progrok/node_modules/iconv-lite/encodings/index.js +0 -22
  557. package/node_modules/progrok/node_modules/iconv-lite/encodings/internal.js +0 -188
  558. package/node_modules/progrok/node_modules/iconv-lite/encodings/sbcs-codec.js +0 -72
  559. package/node_modules/progrok/node_modules/iconv-lite/encodings/sbcs-data-generated.js +0 -451
  560. package/node_modules/progrok/node_modules/iconv-lite/encodings/sbcs-data.js +0 -174
  561. package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/big5-added.json +0 -122
  562. package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/cp936.json +0 -264
  563. package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/cp949.json +0 -273
  564. package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/cp950.json +0 -177
  565. package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/eucjp.json +0 -182
  566. package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +0 -1
  567. package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/gbk-added.json +0 -55
  568. package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/shiftjis.json +0 -125
  569. package/node_modules/progrok/node_modules/iconv-lite/encodings/utf16.js +0 -177
  570. package/node_modules/progrok/node_modules/iconv-lite/encodings/utf7.js +0 -290
  571. package/node_modules/progrok/node_modules/iconv-lite/lib/bom-handling.js +0 -52
  572. package/node_modules/progrok/node_modules/iconv-lite/lib/extend-node.js +0 -217
  573. package/node_modules/progrok/node_modules/iconv-lite/lib/index.d.ts +0 -24
  574. package/node_modules/progrok/node_modules/iconv-lite/lib/index.js +0 -153
  575. package/node_modules/progrok/node_modules/iconv-lite/lib/streams.js +0 -121
  576. package/node_modules/progrok/node_modules/iconv-lite/package.json +0 -46
  577. package/node_modules/progrok/node_modules/media-typer/HISTORY.md +0 -22
  578. package/node_modules/progrok/node_modules/media-typer/LICENSE +0 -22
  579. package/node_modules/progrok/node_modules/media-typer/README.md +0 -81
  580. package/node_modules/progrok/node_modules/media-typer/index.js +0 -270
  581. package/node_modules/progrok/node_modules/media-typer/package.json +0 -26
  582. package/node_modules/progrok/node_modules/merge-descriptors/HISTORY.md +0 -21
  583. package/node_modules/progrok/node_modules/merge-descriptors/LICENSE +0 -23
  584. package/node_modules/progrok/node_modules/merge-descriptors/README.md +0 -49
  585. package/node_modules/progrok/node_modules/merge-descriptors/index.js +0 -60
  586. package/node_modules/progrok/node_modules/merge-descriptors/package.json +0 -39
  587. package/node_modules/progrok/node_modules/mime-db/HISTORY.md +0 -507
  588. package/node_modules/progrok/node_modules/mime-db/LICENSE +0 -23
  589. package/node_modules/progrok/node_modules/mime-db/README.md +0 -100
  590. package/node_modules/progrok/node_modules/mime-db/db.json +0 -8519
  591. package/node_modules/progrok/node_modules/mime-db/index.js +0 -12
  592. package/node_modules/progrok/node_modules/mime-db/package.json +0 -60
  593. package/node_modules/progrok/node_modules/mime-types/HISTORY.md +0 -397
  594. package/node_modules/progrok/node_modules/mime-types/LICENSE +0 -23
  595. package/node_modules/progrok/node_modules/mime-types/README.md +0 -113
  596. package/node_modules/progrok/node_modules/mime-types/index.js +0 -188
  597. package/node_modules/progrok/node_modules/mime-types/package.json +0 -44
  598. package/node_modules/progrok/node_modules/negotiator/HISTORY.md +0 -108
  599. package/node_modules/progrok/node_modules/negotiator/LICENSE +0 -24
  600. package/node_modules/progrok/node_modules/negotiator/README.md +0 -203
  601. package/node_modules/progrok/node_modules/negotiator/index.js +0 -82
  602. package/node_modules/progrok/node_modules/negotiator/lib/charset.js +0 -169
  603. package/node_modules/progrok/node_modules/negotiator/lib/encoding.js +0 -184
  604. package/node_modules/progrok/node_modules/negotiator/lib/language.js +0 -179
  605. package/node_modules/progrok/node_modules/negotiator/lib/mediaType.js +0 -294
  606. package/node_modules/progrok/node_modules/negotiator/package.json +0 -42
  607. package/node_modules/progrok/node_modules/path-to-regexp/LICENSE +0 -21
  608. package/node_modules/progrok/node_modules/path-to-regexp/Readme.md +0 -35
  609. package/node_modules/progrok/node_modules/path-to-regexp/index.js +0 -158
  610. package/node_modules/progrok/node_modules/path-to-regexp/package.json +0 -30
  611. package/node_modules/progrok/node_modules/raw-body/LICENSE +0 -22
  612. package/node_modules/progrok/node_modules/raw-body/README.md +0 -223
  613. package/node_modules/progrok/node_modules/raw-body/index.d.ts +0 -87
  614. package/node_modules/progrok/node_modules/raw-body/index.js +0 -336
  615. package/node_modules/progrok/node_modules/raw-body/package.json +0 -47
  616. package/node_modules/progrok/node_modules/send/HISTORY.md +0 -538
  617. package/node_modules/progrok/node_modules/send/LICENSE +0 -23
  618. package/node_modules/progrok/node_modules/send/README.md +0 -327
  619. package/node_modules/progrok/node_modules/send/SECURITY.md +0 -24
  620. package/node_modules/progrok/node_modules/send/index.js +0 -1142
  621. package/node_modules/progrok/node_modules/send/package.json +0 -62
  622. package/node_modules/progrok/node_modules/serve-static/HISTORY.md +0 -493
  623. package/node_modules/progrok/node_modules/serve-static/LICENSE +0 -25
  624. package/node_modules/progrok/node_modules/serve-static/README.md +0 -257
  625. package/node_modules/progrok/node_modules/serve-static/index.js +0 -209
  626. package/node_modules/progrok/node_modules/serve-static/package.json +0 -42
  627. package/node_modules/progrok/node_modules/type-is/HISTORY.md +0 -259
  628. package/node_modules/progrok/node_modules/type-is/LICENSE +0 -23
  629. package/node_modules/progrok/node_modules/type-is/README.md +0 -170
  630. package/node_modules/progrok/node_modules/type-is/index.js +0 -266
  631. package/node_modules/progrok/node_modules/type-is/package.json +0 -45
  632. package/node_modules/progrok/package.json +0 -52
  633. package/node_modules/progrok/skills/progrok/SKILL.md +0 -293
  634. package/node_modules/proxy-addr/HISTORY.md +0 -161
  635. package/node_modules/proxy-addr/LICENSE +0 -22
  636. package/node_modules/proxy-addr/README.md +0 -139
  637. package/node_modules/proxy-addr/index.js +0 -327
  638. package/node_modules/proxy-addr/package.json +0 -47
  639. package/node_modules/qs/.editorconfig +0 -46
  640. package/node_modules/qs/.github/FUNDING.yml +0 -12
  641. package/node_modules/qs/.github/SECURITY.md +0 -11
  642. package/node_modules/qs/.github/THREAT_MODEL.md +0 -78
  643. package/node_modules/qs/.nycrc +0 -13
  644. package/node_modules/qs/CHANGELOG.md +0 -822
  645. package/node_modules/qs/LICENSE.md +0 -29
  646. package/node_modules/qs/README.md +0 -758
  647. package/node_modules/qs/dist/qs.js +0 -141
  648. package/node_modules/qs/eslint.config.mjs +0 -57
  649. package/node_modules/qs/lib/formats.js +0 -23
  650. package/node_modules/qs/lib/index.js +0 -11
  651. package/node_modules/qs/lib/parse.js +0 -403
  652. package/node_modules/qs/lib/stringify.js +0 -363
  653. package/node_modules/qs/lib/utils.js +0 -342
  654. package/node_modules/qs/package.json +0 -94
  655. package/node_modules/qs/test/empty-keys-cases.js +0 -267
  656. package/node_modules/qs/test/parse.js +0 -1703
  657. package/node_modules/qs/test/stringify.js +0 -1448
  658. package/node_modules/qs/test/utils.js +0 -432
  659. package/node_modules/range-parser/HISTORY.md +0 -56
  660. package/node_modules/range-parser/LICENSE +0 -23
  661. package/node_modules/range-parser/README.md +0 -84
  662. package/node_modules/range-parser/index.js +0 -162
  663. package/node_modules/range-parser/package.json +0 -44
  664. package/node_modules/run-applescript/index.d.ts +0 -66
  665. package/node_modules/run-applescript/index.js +0 -37
  666. package/node_modules/run-applescript/license +0 -9
  667. package/node_modules/run-applescript/package.json +0 -42
  668. package/node_modules/run-applescript/readme.md +0 -78
  669. package/node_modules/safe-buffer/LICENSE +0 -21
  670. package/node_modules/safe-buffer/README.md +0 -584
  671. package/node_modules/safe-buffer/index.d.ts +0 -187
  672. package/node_modules/safe-buffer/index.js +0 -65
  673. package/node_modules/safe-buffer/package.json +0 -51
  674. package/node_modules/safer-buffer/LICENSE +0 -21
  675. package/node_modules/safer-buffer/Porting-Buffer.md +0 -268
  676. package/node_modules/safer-buffer/Readme.md +0 -156
  677. package/node_modules/safer-buffer/dangerous.js +0 -58
  678. package/node_modules/safer-buffer/package.json +0 -34
  679. package/node_modules/safer-buffer/safer.js +0 -77
  680. package/node_modules/safer-buffer/tests.js +0 -406
  681. package/node_modules/setprototypeof/LICENSE +0 -13
  682. package/node_modules/setprototypeof/README.md +0 -31
  683. package/node_modules/setprototypeof/index.d.ts +0 -2
  684. package/node_modules/setprototypeof/index.js +0 -17
  685. package/node_modules/setprototypeof/package.json +0 -38
  686. package/node_modules/setprototypeof/test/index.js +0 -24
  687. package/node_modules/side-channel/.editorconfig +0 -9
  688. package/node_modules/side-channel/.eslintrc +0 -12
  689. package/node_modules/side-channel/.github/FUNDING.yml +0 -12
  690. package/node_modules/side-channel/.nycrc +0 -13
  691. package/node_modules/side-channel/CHANGELOG.md +0 -110
  692. package/node_modules/side-channel/LICENSE +0 -21
  693. package/node_modules/side-channel/README.md +0 -61
  694. package/node_modules/side-channel/index.d.ts +0 -14
  695. package/node_modules/side-channel/index.js +0 -43
  696. package/node_modules/side-channel/package.json +0 -85
  697. package/node_modules/side-channel/test/index.js +0 -104
  698. package/node_modules/side-channel/tsconfig.json +0 -9
  699. package/node_modules/side-channel-list/.editorconfig +0 -9
  700. package/node_modules/side-channel-list/.eslintrc +0 -11
  701. package/node_modules/side-channel-list/.github/FUNDING.yml +0 -12
  702. package/node_modules/side-channel-list/.nycrc +0 -13
  703. package/node_modules/side-channel-list/CHANGELOG.md +0 -36
  704. package/node_modules/side-channel-list/LICENSE +0 -21
  705. package/node_modules/side-channel-list/README.md +0 -62
  706. package/node_modules/side-channel-list/index.d.ts +0 -13
  707. package/node_modules/side-channel-list/index.js +0 -111
  708. package/node_modules/side-channel-list/list.d.ts +0 -14
  709. package/node_modules/side-channel-list/package.json +0 -77
  710. package/node_modules/side-channel-list/test/index.js +0 -154
  711. package/node_modules/side-channel-list/tsconfig.json +0 -9
  712. package/node_modules/side-channel-map/.editorconfig +0 -9
  713. package/node_modules/side-channel-map/.eslintrc +0 -11
  714. package/node_modules/side-channel-map/.github/FUNDING.yml +0 -12
  715. package/node_modules/side-channel-map/.nycrc +0 -13
  716. package/node_modules/side-channel-map/CHANGELOG.md +0 -22
  717. package/node_modules/side-channel-map/LICENSE +0 -21
  718. package/node_modules/side-channel-map/README.md +0 -62
  719. package/node_modules/side-channel-map/index.d.ts +0 -15
  720. package/node_modules/side-channel-map/index.js +0 -68
  721. package/node_modules/side-channel-map/package.json +0 -80
  722. package/node_modules/side-channel-map/test/index.js +0 -114
  723. package/node_modules/side-channel-map/tsconfig.json +0 -9
  724. package/node_modules/side-channel-weakmap/.editorconfig +0 -9
  725. package/node_modules/side-channel-weakmap/.eslintrc +0 -12
  726. package/node_modules/side-channel-weakmap/.github/FUNDING.yml +0 -12
  727. package/node_modules/side-channel-weakmap/.nycrc +0 -13
  728. package/node_modules/side-channel-weakmap/CHANGELOG.md +0 -28
  729. package/node_modules/side-channel-weakmap/LICENSE +0 -21
  730. package/node_modules/side-channel-weakmap/README.md +0 -62
  731. package/node_modules/side-channel-weakmap/index.d.ts +0 -15
  732. package/node_modules/side-channel-weakmap/index.js +0 -84
  733. package/node_modules/side-channel-weakmap/package.json +0 -87
  734. package/node_modules/side-channel-weakmap/test/index.js +0 -114
  735. package/node_modules/side-channel-weakmap/tsconfig.json +0 -9
  736. package/node_modules/statuses/HISTORY.md +0 -87
  737. package/node_modules/statuses/LICENSE +0 -23
  738. package/node_modules/statuses/README.md +0 -139
  739. package/node_modules/statuses/codes.json +0 -65
  740. package/node_modules/statuses/index.js +0 -146
  741. package/node_modules/statuses/package.json +0 -49
  742. package/node_modules/toidentifier/HISTORY.md +0 -9
  743. package/node_modules/toidentifier/LICENSE +0 -21
  744. package/node_modules/toidentifier/README.md +0 -61
  745. package/node_modules/toidentifier/index.js +0 -32
  746. package/node_modules/toidentifier/package.json +0 -38
  747. package/node_modules/unpipe/HISTORY.md +0 -4
  748. package/node_modules/unpipe/LICENSE +0 -22
  749. package/node_modules/unpipe/README.md +0 -43
  750. package/node_modules/unpipe/index.js +0 -69
  751. package/node_modules/unpipe/package.json +0 -27
  752. package/node_modules/utils-merge/.npmignore +0 -9
  753. package/node_modules/utils-merge/LICENSE +0 -20
  754. package/node_modules/utils-merge/README.md +0 -34
  755. package/node_modules/utils-merge/index.js +0 -23
  756. package/node_modules/utils-merge/package.json +0 -40
  757. package/node_modules/vary/HISTORY.md +0 -39
  758. package/node_modules/vary/LICENSE +0 -22
  759. package/node_modules/vary/README.md +0 -101
  760. package/node_modules/vary/index.js +0 -149
  761. package/node_modules/vary/package.json +0 -43
  762. package/ui/dist/assets/index-DYtUJ4t0.js +0 -22
  763. package/ui/dist/assets/useAgentDialogFocus-B2snKbzK.js +0 -1
  764. package/vendor/progrok-0.2.0.tgz +0 -0
package/lib/xaiAuth.js ADDED
@@ -0,0 +1,369 @@
1
+ /**
2
+ * xAI (Grok) OAuth credential store and refresh client.
3
+ *
4
+ * Ported from OpenCodex `src/oauth/xai.ts` (refresh path only) with the D1-D6/D9 fixes
5
+ * recorded in devlog/_plan/260909_grok_native_oauth/001_opencodex_port_spec.md.
6
+ *
7
+ * MUST stay a leaf module: only node:fs, node:crypto, node:os, node:path. No imports from
8
+ * config, routes, adapters, or the logger — adapters call loadGrokCredentials() synchronously.
9
+ *
10
+ * The file on disk (~/.progrok/auth.json) is the single source of truth. There is deliberately
11
+ * no in-memory credential cache: progrok may refresh the same file from another process, and a
12
+ * cache would make this module serve a token that was already rotated away.
13
+ */
14
+ import { randomBytes } from "node:crypto";
15
+ import { mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
16
+ import { homedir } from "node:os";
17
+ import { dirname, join } from "node:path";
18
+ export const XAI_OAUTH_ISSUER = "https://auth.x.ai";
19
+ export const XAI_OAUTH_DISCOVERY_URL = `${XAI_OAUTH_ISSUER}/.well-known/openid-configuration`;
20
+ export const XAI_OAUTH_CLIENT_ID = "b1a00492-073a-47ea-816f-4c329264a828";
21
+ export const XAI_OAUTH_SCOPE = "openid profile email offline_access grok-cli:access api:access";
22
+ export const XAI_TOKEN_ENDPOINT_FALLBACK = `${XAI_OAUTH_ISSUER}/oauth2/token`;
23
+ export const XAI_TOKEN_REFRESH_SKEW_MS = 120_000;
24
+ export const XAI_TOKEN_REQUEST_TIMEOUT_MS = 30_000;
25
+ /** progrok's CORS allow-list (dist/index.js:24). Any other host is a poisoned discovery doc. */
26
+ const XAI_TRUSTED_AUTH_HOSTS = new Set(["auth.x.ai", "accounts.x.ai"]);
27
+ const XAI_TOKEN_MAX_ATTEMPTS = 3;
28
+ /** Retry-After is honored as sent (D1), but never long enough to hang a request forever. */
29
+ const RETRY_AFTER_CAP_MS = 60_000;
30
+ const JITTER_CAP_MS = 2_000;
31
+ const FLIGHT_STALE_MS = 120_000;
32
+ const TERMINAL_FAILURE_TTL_MS = 30_000;
33
+ const TERMINAL_OAUTH_ERRORS = new Set(["invalid_grant", "refresh_token_reused", "revoked_token"]);
34
+ const httpStatusForGrokAuthCode = {
35
+ GROK_AUTH_REQUIRED: 401,
36
+ GROK_AUTH_REFRESH_FAILED: 502,
37
+ };
38
+ export class GrokAuthError extends Error {
39
+ code;
40
+ status;
41
+ oauthError;
42
+ constructor(code, message, options) {
43
+ super(message, options && "cause" in options ? { cause: options.cause } : undefined);
44
+ this.name = "GrokAuthError";
45
+ this.code = code;
46
+ this.status = httpStatusForGrokAuthCode[code];
47
+ if (options?.oauthError !== undefined)
48
+ this.oauthError = options.oauthError;
49
+ }
50
+ }
51
+ export class XaiTokenRequestError extends Error {
52
+ status;
53
+ oauthError;
54
+ constructor(status, oauthError, message = "xAI token request failed", options) {
55
+ super(message, options && "cause" in options ? { cause: options.cause } : undefined);
56
+ this.name = "XaiTokenRequestError";
57
+ if (status !== undefined)
58
+ this.status = status;
59
+ if (oauthError !== undefined)
60
+ this.oauthError = oauthError;
61
+ }
62
+ }
63
+ // ---------------------------------------------------------------------------
64
+ // Credential file I/O
65
+ // ---------------------------------------------------------------------------
66
+ export function grokAuthFilePath(homeDir = homedir()) {
67
+ return join(homeDir, ".progrok", "auth.json");
68
+ }
69
+ /** Never throws: a missing, unreadable, or malformed file is simply "not logged in". */
70
+ export function loadGrokCredentials(homeDir) {
71
+ try {
72
+ const parsed = JSON.parse(readFileSync(grokAuthFilePath(homeDir), "utf8"));
73
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed))
74
+ return null;
75
+ const record = parsed;
76
+ if (typeof record.accessToken !== "string" || record.accessToken.length === 0)
77
+ return null;
78
+ // Keep the raw record so unknown keys written by progrok survive a round-trip.
79
+ return record;
80
+ }
81
+ catch {
82
+ return null;
83
+ }
84
+ }
85
+ /** Atomic 0600 write (tmp + rename); the directory is forced to 0700. */
86
+ export function saveGrokCredentials(creds, homeDir) {
87
+ const target = grokAuthFilePath(homeDir);
88
+ const dir = dirname(target);
89
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
90
+ const tmp = join(dir, `auth.json.tmp-${randomBytes(6).toString("hex")}`);
91
+ writeFileSync(tmp, JSON.stringify(creds, null, 2), { mode: 0o600 });
92
+ renameSync(tmp, target);
93
+ }
94
+ /** Explicit logout only. A refresh failure must never delete the file. */
95
+ export function clearGrokCredentials(homeDir) {
96
+ rmSync(grokAuthFilePath(homeDir), { force: true });
97
+ }
98
+ // ---------------------------------------------------------------------------
99
+ // Discovery
100
+ // ---------------------------------------------------------------------------
101
+ function requestSignal(signal) {
102
+ const timeoutSignal = AbortSignal.timeout(XAI_TOKEN_REQUEST_TIMEOUT_MS);
103
+ return signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
104
+ }
105
+ /** D6: exact host allow-list, https only, and no userinfo that fetch could turn into auth. */
106
+ function validateXaiAuthEndpoint(rawUrl) {
107
+ const parsed = new URL(rawUrl);
108
+ const host = parsed.hostname.toLowerCase();
109
+ if (parsed.protocol !== "https:" || parsed.username || parsed.password || !XAI_TRUSTED_AUTH_HOSTS.has(host)) {
110
+ throw new Error(`xAI OAuth endpoint is not trusted: ${rawUrl}`);
111
+ }
112
+ return parsed.toString();
113
+ }
114
+ export async function discoverXaiOAuthEndpoints(signal) {
115
+ const response = await fetch(XAI_OAUTH_DISCOVERY_URL, {
116
+ headers: { Accept: "application/json" },
117
+ signal: requestSignal(signal),
118
+ });
119
+ if (!response.ok) {
120
+ throw new Error(`xAI OAuth discovery failed: ${response.status} ${await response.text()}`);
121
+ }
122
+ const payload = (await response.json());
123
+ if (typeof payload.authorization_endpoint !== "string" || typeof payload.token_endpoint !== "string") {
124
+ throw new Error("xAI OAuth discovery response missing authorization/token endpoints");
125
+ }
126
+ const discovery = {
127
+ authorizationEndpoint: validateXaiAuthEndpoint(payload.authorization_endpoint),
128
+ tokenEndpoint: validateXaiAuthEndpoint(payload.token_endpoint),
129
+ };
130
+ if (typeof payload.device_authorization_endpoint === "string") {
131
+ discovery.deviceAuthorizationEndpoint = validateXaiAuthEndpoint(payload.device_authorization_endpoint);
132
+ }
133
+ return discovery;
134
+ }
135
+ // ---------------------------------------------------------------------------
136
+ // Token endpoint
137
+ // ---------------------------------------------------------------------------
138
+ function defaultSleep(ms) {
139
+ return new Promise((resolve) => {
140
+ setTimeout(resolve, ms);
141
+ });
142
+ }
143
+ /** D2: RFC 9110 allows delay-seconds (including fractions) and HTTP-date. */
144
+ function parseRetryAfterMs(retryAfter) {
145
+ const raw = retryAfter?.trim();
146
+ if (!raw)
147
+ return undefined;
148
+ const seconds = Number(raw);
149
+ if (Number.isFinite(seconds))
150
+ return Math.max(0, seconds * 1000);
151
+ const dateMs = Date.parse(raw);
152
+ if (!Number.isFinite(dateMs))
153
+ return undefined;
154
+ return Math.max(0, dateMs - Date.now());
155
+ }
156
+ function retryDelayMs(attempt, retryAfter, random) {
157
+ const fromHeader = parseRetryAfterMs(retryAfter);
158
+ // D1: a server instruction wins over local jitter; only the absolute ceiling clamps it.
159
+ if (fromHeader !== undefined)
160
+ return Math.min(fromHeader, RETRY_AFTER_CAP_MS);
161
+ const base = attempt === 1 ? 100 : 250;
162
+ return Math.min(JITTER_CAP_MS, Math.round(base * (0.75 + random() * 0.5)));
163
+ }
164
+ function isTimeoutError(error) {
165
+ return error instanceof Error && error.name === "TimeoutError";
166
+ }
167
+ /** D9: always drain the failed body so undici can reuse the socket. */
168
+ async function readTokenError(response) {
169
+ let raw = "";
170
+ try {
171
+ raw = await response.text();
172
+ }
173
+ catch {
174
+ // Body already gone; the status alone still classifies the failure.
175
+ }
176
+ let oauthError;
177
+ let detail = "";
178
+ try {
179
+ const body = JSON.parse(raw);
180
+ if (typeof body.error === "string")
181
+ oauthError = body.error;
182
+ if (typeof body.error_description === "string")
183
+ detail = body.error_description;
184
+ }
185
+ catch {
186
+ // Non-JSON error body.
187
+ }
188
+ const suffix = detail ? `: ${detail}` : oauthError ? `: ${oauthError}` : "";
189
+ return new XaiTokenRequestError(response.status, oauthError, `xAI token request failed: ${response.status}${suffix}`);
190
+ }
191
+ function sendTokenRequest(tokenEndpoint, body, signal) {
192
+ return fetch(tokenEndpoint, {
193
+ method: "POST",
194
+ headers: { Accept: "application/json", "Content-Type": "application/x-www-form-urlencoded" },
195
+ body: new URLSearchParams(body).toString(),
196
+ signal: requestSignal(signal),
197
+ });
198
+ }
199
+ export async function postXaiToken(tokenEndpoint, body, signal, deps = {}) {
200
+ const sleep = deps.sleep ?? defaultSleep;
201
+ const random = deps.random ?? Math.random;
202
+ let last;
203
+ for (let attempt = 1; attempt <= XAI_TOKEN_MAX_ATTEMPTS; attempt++) {
204
+ let response;
205
+ try {
206
+ response = await sendTokenRequest(tokenEndpoint, body, signal);
207
+ }
208
+ catch (error) {
209
+ // D3: the caller's abort reason can be any value, so trust signal.aborted, not the error type.
210
+ if (signal?.aborted)
211
+ throw error;
212
+ if (isTimeoutError(error)) {
213
+ throw new XaiTokenRequestError(undefined, undefined, "xAI token request timed out", { cause: error });
214
+ }
215
+ last = error;
216
+ if (attempt === XAI_TOKEN_MAX_ATTEMPTS)
217
+ break;
218
+ await sleep(retryDelayMs(attempt, null, random));
219
+ continue;
220
+ }
221
+ if (response.ok)
222
+ return (await response.json());
223
+ const error = await readTokenError(response);
224
+ last = error;
225
+ if (!(response.status === 429 || response.status >= 500) || attempt === XAI_TOKEN_MAX_ATTEMPTS)
226
+ throw error;
227
+ await sleep(retryDelayMs(attempt, response.headers.get("retry-after"), random));
228
+ }
229
+ // D4: never rethrow the bare last value — it can be undefined and erases the failure shape.
230
+ throw new XaiTokenRequestError(undefined, undefined, "xAI token request exhausted retries", { cause: last });
231
+ }
232
+ // ---------------------------------------------------------------------------
233
+ // Refresh
234
+ // ---------------------------------------------------------------------------
235
+ function decodeJwtPayload(token) {
236
+ const parts = token.split(".");
237
+ const payload = parts[1];
238
+ if (parts.length !== 3 || !payload)
239
+ return undefined;
240
+ try {
241
+ return JSON.parse(Buffer.from(payload, "base64url").toString("utf8"));
242
+ }
243
+ catch {
244
+ return undefined;
245
+ }
246
+ }
247
+ /** Display metadata only: the signature is never verified, so this cannot gate authorization. */
248
+ function getTokenIdentity(accessToken, idToken) {
249
+ const payload = (idToken ? decodeJwtPayload(idToken) : undefined) ?? decodeJwtPayload(accessToken);
250
+ const identity = {};
251
+ if (typeof payload?.sub === "string" && payload.sub.length > 0)
252
+ identity.accountId = payload.sub;
253
+ if (typeof payload?.email === "string" && payload.email.length > 0)
254
+ identity.email = payload.email.toLowerCase();
255
+ return identity;
256
+ }
257
+ function credentialsFromTokenPayload(payload, refreshFallback, tokenEndpoint, now) {
258
+ if (typeof payload.access_token !== "string" || payload.access_token.length === 0) {
259
+ throw new Error("xAI token response did not include an access token");
260
+ }
261
+ const refreshToken = typeof payload.refresh_token === "string" && payload.refresh_token.length > 0
262
+ ? payload.refresh_token
263
+ : refreshFallback;
264
+ if (!refreshToken)
265
+ throw new Error("xAI token response did not include a refresh token");
266
+ const creds = { accessToken: payload.access_token, refreshToken, tokenEndpoint };
267
+ // D5: no 3600 fallback. An absent expires_in means "unknown", and 401 becomes the signal —
268
+ // inventing an hour would let this module hand out a token it already knows nothing about.
269
+ if (typeof payload.expires_in === "number" && Number.isFinite(payload.expires_in)) {
270
+ creds.expiresAt = now() + payload.expires_in * 1000;
271
+ }
272
+ if (typeof payload.id_token === "string" && payload.id_token.length > 0)
273
+ creds.idToken = payload.id_token;
274
+ const identity = getTokenIdentity(creds.accessToken, creds.idToken);
275
+ if (identity.accountId !== undefined)
276
+ creds.accountId = identity.accountId;
277
+ if (identity.email !== undefined)
278
+ creds.email = identity.email;
279
+ return creds;
280
+ }
281
+ export async function refreshXaiToken(refreshToken, opts = {}) {
282
+ if (!refreshToken)
283
+ throw new Error("xAI credentials are expired and do not include a refresh token");
284
+ const raw = opts.tokenEndpoint ?? (await discoverXaiOAuthEndpoints(opts.signal)).tokenEndpoint;
285
+ const tokenEndpoint = validateXaiAuthEndpoint(raw);
286
+ const payload = await postXaiToken(tokenEndpoint, { grant_type: "refresh_token", client_id: XAI_OAUTH_CLIENT_ID, refresh_token: refreshToken }, opts.signal, opts.deps);
287
+ return credentialsFromTokenPayload(payload, refreshToken, tokenEndpoint, opts.deps?.now ?? Date.now);
288
+ }
289
+ let refreshFlight;
290
+ let terminalFailureUntil = 0;
291
+ const LOGIN_REQUIRED_MESSAGE = "Grok login required. Run: ima2 grok login";
292
+ function toGrokAuthError(error, now) {
293
+ if (error instanceof GrokAuthError)
294
+ return error;
295
+ const oauthError = error instanceof XaiTokenRequestError ? error.oauthError : undefined;
296
+ if (oauthError !== undefined && TERMINAL_OAUTH_ERRORS.has(oauthError)) {
297
+ // Terminal: block further round-trips for a while, but leave the file alone so the user
298
+ // keeps their display metadata and a misclassified failure stays recoverable.
299
+ terminalFailureUntil = now() + TERMINAL_FAILURE_TTL_MS;
300
+ return new GrokAuthError("GROK_AUTH_REQUIRED", `Grok session is no longer valid. ${LOGIN_REQUIRED_MESSAGE}`, {
301
+ oauthError,
302
+ cause: error,
303
+ });
304
+ }
305
+ const detail = error instanceof Error ? error.message : String(error);
306
+ return new GrokAuthError("GROK_AUTH_REFRESH_FAILED", `Grok token refresh failed: ${detail}`, {
307
+ ...(oauthError !== undefined ? { oauthError } : {}),
308
+ cause: error,
309
+ });
310
+ }
311
+ async function performRefresh(stored, opts) {
312
+ const now = opts.deps?.now ?? Date.now;
313
+ try {
314
+ const fresh = await refreshXaiToken(stored.refreshToken ?? "", {
315
+ ...(stored.tokenEndpoint !== undefined ? { tokenEndpoint: stored.tokenEndpoint } : {}),
316
+ ...(opts.signal !== undefined ? { signal: opts.signal } : {}),
317
+ ...(opts.deps !== undefined ? { deps: opts.deps } : {}),
318
+ });
319
+ const merged = { ...stored, ...fresh };
320
+ // An unknown new expiry must erase the old one rather than inherit a stale deadline.
321
+ if (fresh.expiresAt === undefined)
322
+ delete merged.expiresAt;
323
+ saveGrokCredentials(merged, opts.homeDir);
324
+ return merged;
325
+ }
326
+ catch (error) {
327
+ throw toGrokAuthError(error, now);
328
+ }
329
+ }
330
+ function runRefreshFlight(stored, opts) {
331
+ const now = opts.deps?.now ?? Date.now;
332
+ const existing = refreshFlight;
333
+ if (existing && now() - existing.startedAt <= FLIGHT_STALE_MS)
334
+ return existing.promise;
335
+ const flight = { startedAt: now(), promise: performRefresh(stored, opts) };
336
+ // Release only when we are still the current flight, so a slow earlier refresh cannot
337
+ // clear a newer one (OpenCodex index.ts:537 pattern).
338
+ flight.promise = flight.promise.finally(() => {
339
+ if (refreshFlight === flight)
340
+ refreshFlight = undefined;
341
+ });
342
+ refreshFlight = flight;
343
+ return flight.promise;
344
+ }
345
+ export async function getGrokAccessToken(opts = {}) {
346
+ const now = opts.deps?.now ?? Date.now;
347
+ if (now() < terminalFailureUntil) {
348
+ throw new GrokAuthError("GROK_AUTH_REQUIRED", `Grok session is no longer valid. ${LOGIN_REQUIRED_MESSAGE}`);
349
+ }
350
+ const stored = loadGrokCredentials(opts.homeDir);
351
+ if (!stored)
352
+ throw new GrokAuthError("GROK_AUTH_REQUIRED", LOGIN_REQUIRED_MESSAGE);
353
+ if (opts.rejectedAccessToken !== undefined && stored.accessToken !== opts.rejectedAccessToken) {
354
+ return stored.accessToken;
355
+ }
356
+ const expiring = stored.expiresAt !== undefined && now() + XAI_TOKEN_REFRESH_SKEW_MS >= stored.expiresAt;
357
+ if (!opts.forceRefresh && !expiring)
358
+ return stored.accessToken;
359
+ if (!stored.refreshToken) {
360
+ throw new GrokAuthError("GROK_AUTH_REQUIRED", `Grok session expired and cannot be refreshed. ${LOGIN_REQUIRED_MESSAGE}`);
361
+ }
362
+ const fresh = await runRefreshFlight(stored, opts);
363
+ return fresh.accessToken;
364
+ }
365
+ /** Test-only: clears the single-flight slot and the terminal-failure negative cache. */
366
+ export function __resetGrokAuthStateForTest() {
367
+ refreshFlight = undefined;
368
+ terminalFailureUntil = 0;
369
+ }
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Stateless xAI (Grok) OAuth device-code login.
3
+ *
4
+ * routes/auth.ts keeps its own device-code flow because it is bound to the GUI session Map
5
+ * and its cleanup timers (030 wp4, audit item 6). This module is the CLI-side twin: one call,
6
+ * no module state, no timers left behind, and the only shared surface is lib/xaiAuth.ts.
7
+ *
8
+ * MUST stay a leaf module: only lib/xaiAuth.js. No config, routes, or adapters.
9
+ */
10
+ import { XAI_OAUTH_CLIENT_ID, XAI_OAUTH_SCOPE, discoverXaiOAuthEndpoints, saveGrokCredentials, } from "./xaiAuth.js";
11
+ const DEVICE_CODE_GRANT = "urn:ietf:params:oauth:grant-type:device_code";
12
+ /** RFC 8628 floor: never poll faster than this even if the server asks for less. */
13
+ const MIN_POLL_INTERVAL_SECONDS = 5;
14
+ const SLOW_DOWN_STEP_MS = 5_000;
15
+ const DEVICE_REQUEST_TIMEOUT_MS = 15_000;
16
+ const TOKEN_REQUEST_TIMEOUT_MS = 10_000;
17
+ function defaultSleep(ms) {
18
+ return new Promise((resolve) => {
19
+ setTimeout(resolve, ms);
20
+ });
21
+ }
22
+ function requestSignal(signal, timeoutMs) {
23
+ const timeoutSignal = AbortSignal.timeout(timeoutMs);
24
+ return signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
25
+ }
26
+ function formEncoded(body) {
27
+ return {
28
+ method: "POST",
29
+ headers: { Accept: "application/json", "Content-Type": "application/x-www-form-urlencoded" },
30
+ body: new URLSearchParams(body).toString(),
31
+ };
32
+ }
33
+ async function requestDeviceCode(endpoint, deps) {
34
+ const response = await deps.doFetch(endpoint, {
35
+ ...formEncoded({ client_id: XAI_OAUTH_CLIENT_ID, scope: XAI_OAUTH_SCOPE }),
36
+ signal: requestSignal(deps.signal, DEVICE_REQUEST_TIMEOUT_MS),
37
+ });
38
+ if (!response.ok) {
39
+ throw new Error(`xAI device code request failed: ${response.status} ${await response.text()}`);
40
+ }
41
+ const body = (await response.json());
42
+ const verification = typeof body.verification_uri_complete === "string" && body.verification_uri_complete
43
+ ? body.verification_uri_complete
44
+ : body.verification_uri;
45
+ if (typeof body.device_code !== "string" || typeof body.user_code !== "string" || typeof verification !== "string") {
46
+ throw new Error("xAI device code response is missing device_code/user_code/verification_uri");
47
+ }
48
+ return {
49
+ deviceCode: body.device_code,
50
+ userCode: body.user_code,
51
+ verificationUrl: verification,
52
+ expiresIn: typeof body.expires_in === "number" && Number.isFinite(body.expires_in) ? body.expires_in : 600,
53
+ intervalSeconds: typeof body.interval === "number" && Number.isFinite(body.interval) ? body.interval : MIN_POLL_INTERVAL_SECONDS,
54
+ };
55
+ }
56
+ async function pollTokenOnce(tokenEndpoint, deviceCode, deps) {
57
+ const response = await deps.doFetch(tokenEndpoint, {
58
+ ...formEncoded({ grant_type: DEVICE_CODE_GRANT, client_id: XAI_OAUTH_CLIENT_ID, device_code: deviceCode }),
59
+ signal: requestSignal(deps.signal, TOKEN_REQUEST_TIMEOUT_MS),
60
+ });
61
+ if (response.ok)
62
+ return { kind: "token", payload: (await response.json()) };
63
+ const raw = await response.text();
64
+ let oauthError;
65
+ try {
66
+ const parsed = JSON.parse(raw);
67
+ if (typeof parsed.error === "string")
68
+ oauthError = parsed.error;
69
+ }
70
+ catch {
71
+ // Non-JSON error body; the status alone classifies the failure.
72
+ }
73
+ if (oauthError === "authorization_pending")
74
+ return { kind: "pending" };
75
+ if (oauthError === "slow_down")
76
+ return { kind: "slow_down" };
77
+ throw new Error(`xAI device login failed: ${oauthError ?? `HTTP ${response.status}`}`);
78
+ }
79
+ /**
80
+ * Elapsed time is the larger of wall time and the time we asked to sleep, so an injected
81
+ * no-op sleep still walks the clock to expires_in instead of spinning forever.
82
+ */
83
+ async function pollUntilAuthorized(tokenEndpoint, grant, deps) {
84
+ const startedAt = Date.now();
85
+ const deadlineMs = grant.expiresIn * 1000;
86
+ let intervalMs = Math.max(grant.intervalSeconds, MIN_POLL_INTERVAL_SECONDS) * 1000;
87
+ let sleptMs = 0;
88
+ while (Math.max(Date.now() - startedAt, sleptMs) < deadlineMs) {
89
+ await deps.sleep(intervalMs);
90
+ sleptMs += intervalMs;
91
+ if (deps.signal?.aborted)
92
+ throw new Error("xAI device login was aborted");
93
+ const outcome = await pollTokenOnce(tokenEndpoint, grant.deviceCode, deps);
94
+ if (outcome.kind === "token")
95
+ return outcome.payload;
96
+ if (outcome.kind === "slow_down")
97
+ intervalMs += SLOW_DOWN_STEP_MS;
98
+ }
99
+ throw new Error("xAI device login expired before it was approved");
100
+ }
101
+ /** Display metadata only: the id_token signature is never verified here. */
102
+ function emailFromIdToken(idToken) {
103
+ const segment = idToken.split(".")[1];
104
+ if (!segment)
105
+ return undefined;
106
+ try {
107
+ const payload = JSON.parse(Buffer.from(segment, "base64url").toString("utf8"));
108
+ if (typeof payload.email !== "string" || payload.email.length === 0)
109
+ return undefined;
110
+ return payload.email.toLowerCase();
111
+ }
112
+ catch {
113
+ return undefined;
114
+ }
115
+ }
116
+ function credentialsFromDeviceToken(payload, tokenEndpoint) {
117
+ if (typeof payload.access_token !== "string" || payload.access_token.length === 0) {
118
+ throw new Error("xAI token response did not include an access token");
119
+ }
120
+ const creds = { accessToken: payload.access_token, tokenEndpoint };
121
+ if (typeof payload.refresh_token === "string" && payload.refresh_token.length > 0) {
122
+ creds.refreshToken = payload.refresh_token;
123
+ }
124
+ // Same rule as lib/xaiAuth.ts (D5): an absent expires_in means "unknown", never one hour.
125
+ if (typeof payload.expires_in === "number" && Number.isFinite(payload.expires_in)) {
126
+ creds.expiresAt = Date.now() + payload.expires_in * 1000;
127
+ }
128
+ if (typeof payload.id_token === "string" && payload.id_token.length > 0) {
129
+ creds.idToken = payload.id_token;
130
+ const email = emailFromIdToken(payload.id_token);
131
+ if (email !== undefined)
132
+ creds.email = email;
133
+ }
134
+ return creds;
135
+ }
136
+ /**
137
+ * Runs one complete device-code login and writes the session with saveGrokCredentials().
138
+ * Rejects on discovery failure, a missing device_authorization_endpoint, a terminal OAuth
139
+ * error, an abort, or expiry. Nothing is written unless a token actually came back.
140
+ */
141
+ export async function runXaiDeviceLogin(opts) {
142
+ const deps = {
143
+ doFetch: opts.fetchImpl ?? ((...args) => fetch(...args)),
144
+ sleep: opts.sleep ?? defaultSleep,
145
+ signal: opts.signal,
146
+ };
147
+ const discovery = await discoverXaiOAuthEndpoints(opts.signal);
148
+ const deviceEndpoint = discovery.deviceAuthorizationEndpoint;
149
+ if (!deviceEndpoint)
150
+ throw new Error("xAI does not expose device_authorization_endpoint");
151
+ const grant = await requestDeviceCode(deviceEndpoint, deps);
152
+ opts.onUserCode({ userCode: grant.userCode, verificationUrl: grant.verificationUrl, expiresIn: grant.expiresIn });
153
+ const payload = await pollUntilAuthorized(discovery.tokenEndpoint, grant, deps);
154
+ const creds = credentialsFromDeviceToken(payload, discovery.tokenEndpoint);
155
+ saveGrokCredentials(creds, opts.homeDir);
156
+ return creds;
157
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ima2-gen",
3
- "version": "3.15.1",
3
+ "version": "3.16.0",
4
4
  "packageManager": "npm@11.18.0",
5
5
  "description": "Local-first visual generation runtime and studio for people and coding agents, with reproducible image and video workflows across multiple providers.",
6
6
  "type": "module",
@@ -99,7 +99,6 @@
99
99
  "google-auth-library": "^11.0.1",
100
100
  "openai": "^7.4.0",
101
101
  "openai-oauth": "file:vendor/openai-oauth-1.0.2-ima2.1.tgz",
102
- "progrok": "file:vendor/progrok-0.2.0.tgz",
103
102
  "sharp": "^0.35.3",
104
103
  "trash": "^10.1.1",
105
104
  "ulid": "^3.0.2",
@@ -109,7 +108,6 @@
109
108
  "fast-uri": "3.1.7"
110
109
  },
111
110
  "bundleDependencies": [
112
- "progrok",
113
111
  "openai-oauth",
114
112
  "zod"
115
113
  ],
@@ -127,5 +125,5 @@
127
125
  "typescript": "^5.9.3",
128
126
  "yaml": "2.9.0"
129
127
  },
130
- "gitHead": "11900764a59e74146c9008ed296a23d3fc0ac06a"
128
+ "gitHead": "7fa7d426d92813caeeff667a458b781237029df0"
131
129
  }
package/routes/auth.js CHANGED
@@ -1,13 +1,8 @@
1
1
  import { spawn } from "node:child_process";
2
2
  import { randomBytes } from "node:crypto";
3
- import { writeFileSync, renameSync, mkdirSync, existsSync } from "node:fs";
4
- import { homedir } from "node:os";
5
- import { join } from "node:path";
6
3
  import { codexFileLoginArgs, detectCodexAuth } from "../lib/codexDetect.js";
7
4
  import { packageCliCommand } from "../lib/packageCli.js";
8
- const GROK_CLIENT_ID = "b1a00492-073a-47ea-816f-4c329264a828";
9
- const GROK_SCOPE = "openid profile email offline_access grok-cli:access api:access";
10
- const GROK_TOKEN_URL = "https://auth.x.ai/oauth2/token";
5
+ import { XAI_OAUTH_CLIENT_ID as GROK_CLIENT_ID, XAI_OAUTH_SCOPE as GROK_SCOPE, XAI_TOKEN_ENDPOINT_FALLBACK as GROK_TOKEN_URL, loadGrokCredentials, saveGrokCredentials, } from "../lib/xaiAuth.js";
11
6
  const CODEX_DEVICE_CODE_GRANT = "urn:ietf:params:oauth:grant-type:device_code";
12
7
  const MAX_CONCURRENT_SESSIONS = 20;
13
8
  const sessions = new Map();
@@ -28,9 +23,9 @@ function stripAnsi(s) {
28
23
  return s.replace(/\x1B\[[0-9;]*m/g, "");
29
24
  }
30
25
  function saveGrokTokens(tokens) {
31
- const dir = join(homedir(), ".progrok");
32
- if (!existsSync(dir))
33
- mkdirSync(dir, { recursive: true, mode: 0o700 });
26
+ if (typeof tokens.access_token !== "string" || tokens.access_token.length === 0) {
27
+ throw new Error("xAI token response did not include an access token");
28
+ }
34
29
  let email;
35
30
  if (typeof tokens.id_token === "string") {
36
31
  try {
@@ -42,23 +37,20 @@ function saveGrokTokens(tokens) {
42
37
  }
43
38
  catch { /* ignore */ }
44
39
  }
40
+ // Merge over the existing file so a field only progrok writes (idToken) survives a
41
+ // fresh login; the atomic 0600 write itself lives in lib/xaiAuth.ts.
45
42
  const data = {
43
+ ...(loadGrokCredentials() ?? {}),
46
44
  accessToken: tokens.access_token,
47
- refreshToken: tokens.refresh_token,
48
- expiresAt: typeof tokens.expires_in === "number" ? Date.now() + tokens.expires_in * 1000 : undefined,
45
+ ...(typeof tokens.refresh_token === "string" ? { refreshToken: tokens.refresh_token } : {}),
46
+ ...(typeof tokens.expires_in === "number" ? { expiresAt: Date.now() + tokens.expires_in * 1000 } : {}),
49
47
  tokenEndpoint: GROK_TOKEN_URL,
48
+ ...(typeof tokens.id_token === "string" ? { idToken: tokens.id_token } : {}),
49
+ ...(email ? { email } : {}),
50
50
  };
51
- if (email)
52
- data.email = email;
53
- // Atomic write: temp file (0600) + rename, so concurrent completions or a crash
54
- // mid-flush can never truncate/corrupt the only credential file. Rename also
55
- // guarantees final perms are 0600 even if a looser-perm file pre-existed.
56
- const target = join(dir, "auth.json");
57
- const tmp = join(dir, `auth.json.tmp-${randomBytes(6).toString("hex")}`);
58
- writeFileSync(tmp, JSON.stringify(data, null, 2), { mode: 0o600 });
59
- renameSync(tmp, target);
51
+ saveGrokCredentials(data);
60
52
  }
61
- async function startGrokDeviceCode(onCredentialsSaved) {
53
+ async function startGrokDeviceCode() {
62
54
  const discovery = await fetch("https://auth.x.ai/.well-known/openid-configuration", { signal: AbortSignal.timeout(10000) });
63
55
  const disc = await discovery.json();
64
56
  if (!disc.device_authorization_endpoint)
@@ -107,9 +99,6 @@ async function startGrokDeviceCode(onCredentialsSaved) {
107
99
  if (tokenRes.ok) {
108
100
  const tokens = await tokenRes.json();
109
101
  saveGrokTokens(tokens);
110
- // progrok checks credentials only at startup, so a proxy that gave up
111
- // before login stays dead until something tells it the world changed.
112
- onCredentialsSaved?.();
113
102
  session.status = "complete";
114
103
  cleanup(id);
115
104
  return;
@@ -218,7 +207,10 @@ function startCodexDeviceCode() {
218
207
  }, 30000);
219
208
  });
220
209
  }
221
- export function registerAuthRoutes(app, ctx) {
210
+ /** `_ctx` is accepted only to keep the registration signature uniform in
211
+ * routes/index.ts; the device-code flow writes credentials to disk and no
212
+ * longer notifies any in-process supervisor. */
213
+ export function registerAuthRoutes(app, _ctx) {
222
214
  app.post("/api/auth/switch", async (req, res) => {
223
215
  const provider = req.body?.provider;
224
216
  if (provider !== "grok" && provider !== "codex") {
@@ -229,7 +221,7 @@ export function registerAuthRoutes(app, ctx) {
229
221
  }
230
222
  try {
231
223
  const result = provider === "grok"
232
- ? await startGrokDeviceCode(() => ctx?.grokProxy?.notifyCredentialsChanged())
224
+ ? await startGrokDeviceCode()
233
225
  : await startCodexDeviceCode();
234
226
  res.json(result);
235
227
  }