@xiaoso/dsh-tool-plus 0.1.0-beta.2 → 0.1.0-beta.4

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 (235) hide show
  1. package/README.en.md +122 -0
  2. package/README.md +3 -2
  3. package/THIRD_PARTY_NOTICES.md +4 -35
  4. package/lib/abort-B7izMMna.mjs +51 -0
  5. package/lib/abort-D1_Z5Ut5.mjs +51 -0
  6. package/lib/abort-dIkZBV7Q.mjs +51 -0
  7. package/lib/amazon-bedrock-B0nxT06F.mjs +917 -0
  8. package/lib/amazon-bedrock-D-shAr1X.mjs +917 -0
  9. package/lib/amazon-bedrock-WQhvjHYu.mjs +917 -0
  10. package/lib/anthropic-BWsZFzU8.mjs +262 -0
  11. package/lib/anthropic-CJCauvYz.mjs +3115 -0
  12. package/lib/anthropic-CMT1Qj1t.mjs +3115 -0
  13. package/lib/anthropic-CZghe_9U.mjs +3115 -0
  14. package/lib/anthropic-sCMH7JID.mjs +262 -0
  15. package/lib/anthropic-tTntD8BD.mjs +262 -0
  16. package/lib/api-key-login-BzqNdM2y.mjs +157 -0
  17. package/lib/api-key-login-CWVwvHT1.mjs +157 -0
  18. package/lib/api-key-login-CpzSezsi.mjs +157 -0
  19. package/lib/aws-credentials-8Mgn5MAy.mjs +867 -0
  20. package/lib/aws-credentials-CXryMobh.mjs +867 -0
  21. package/lib/aws-credentials-ChG79ey-.mjs +867 -0
  22. package/lib/azure-openai-responses-CNkHiLUh.mjs +274 -0
  23. package/lib/azure-openai-responses-Cgmc-rbL.mjs +274 -0
  24. package/lib/azure-openai-responses-DuukbD0F.mjs +274 -0
  25. package/lib/bun-shim.mjs +252 -12
  26. package/lib/bundled-references-CSuBco5p.mjs +55 -0
  27. package/lib/bundled-references-Cavaffah.mjs +55 -0
  28. package/lib/bundled-references-sLN0YdXU.mjs +55 -0
  29. package/lib/callback-server-BEFNf-jf.mjs +398 -0
  30. package/lib/callback-server-CQ5Jo8F-.mjs +398 -0
  31. package/lib/callback-server-DDSrZ6l_.mjs +398 -0
  32. package/lib/client.js +111 -41
  33. package/lib/cursor-B3zg7EHj.mjs +273 -0
  34. package/lib/cursor-B6TUEmgP.mjs +135 -0
  35. package/lib/cursor-BIQfBC6V.mjs +135 -0
  36. package/lib/cursor-D8gvtTL3.mjs +135 -0
  37. package/lib/cursor-DNk6eXDd.mjs +5470 -0
  38. package/lib/cursor-DkSX2h3H.mjs +5441 -0
  39. package/lib/cursor-MjSm74IJ.mjs +273 -0
  40. package/lib/cursor-aJrXeYCb.mjs +273 -0
  41. package/lib/cursor-mJQwUKXK.mjs +5441 -0
  42. package/lib/device-code-DBo3B5nh.mjs +51 -0
  43. package/lib/device-code-DIb0FU-H.mjs +51 -0
  44. package/lib/device-code-OI_tQcmc.mjs +51 -0
  45. package/lib/devin-BHZZyMhO.mjs +95 -0
  46. package/lib/devin-BK7DHeca.mjs +114 -0
  47. package/lib/devin-CfMp3cXS.mjs +95 -0
  48. package/lib/devin-CldyPD8K.mjs +95 -0
  49. package/lib/devin-CzRpTUOA.mjs +114 -0
  50. package/lib/devin-D9zR5B_R.mjs +542 -0
  51. package/lib/devin-DXOeNyU7.mjs +542 -0
  52. package/lib/devin-Q1yem3lp.mjs +114 -0
  53. package/lib/devin-vNZTNUON.mjs +542 -0
  54. package/lib/error-B3bevhrs.mjs +1449 -0
  55. package/lib/error-Dd8DIqs-.mjs +1449 -0
  56. package/lib/error-yCSG0mGC.mjs +1449 -0
  57. package/lib/event-stream-BDPi64mK.mjs +151 -0
  58. package/lib/event-stream-BbFZJy-z.mjs +151 -0
  59. package/lib/event-stream-loUa0s1T.mjs +151 -0
  60. package/lib/fs-promises-shim-Bx0fpxuk.mjs +57 -0
  61. package/lib/github-copilot-4GaMtQmg.mjs +208 -0
  62. package/lib/github-copilot-B1yiyVRh.mjs +104 -0
  63. package/lib/github-copilot-B2HGSIJK.mjs +104 -0
  64. package/lib/github-copilot-BWT3eAOF.mjs +208 -0
  65. package/lib/github-copilot-CYkjeTi3.mjs +208 -0
  66. package/lib/github-copilot-jscUZ8Hf.mjs +104 -0
  67. package/lib/gitlab-duo-CM7Ref1H.mjs +155 -0
  68. package/lib/gitlab-duo-akICyfeD.mjs +155 -0
  69. package/lib/gitlab-duo-gubO4FNw.mjs +155 -0
  70. package/lib/gitlab-duo-workflow-BGAF6JDw.mjs +91 -0
  71. package/lib/gitlab-duo-workflow-CSEgYk3N.mjs +91 -0
  72. package/lib/gitlab-duo-workflow-D78tdn8E.mjs +91 -0
  73. package/lib/google-BS4T25Pn.mjs +30 -0
  74. package/lib/google-TFe-7-of.mjs +30 -0
  75. package/lib/google-antigravity-DGmwC2KV.mjs +198 -0
  76. package/lib/google-antigravity-DNYhgTpA.mjs +198 -0
  77. package/lib/google-antigravity-Dlkdhahq.mjs +198 -0
  78. package/lib/google-auth-B6gjsZvg.mjs +232 -0
  79. package/lib/google-auth-De7_s3eo.mjs +232 -0
  80. package/lib/google-auth-DhqpOYrX.mjs +232 -0
  81. package/lib/google-gemini-cli-BG_LRdIV.mjs +850 -0
  82. package/lib/google-gemini-cli-CWu8HvXW.mjs +211 -0
  83. package/lib/google-gemini-cli-Cb97bzQc.mjs +850 -0
  84. package/lib/google-gemini-cli-Cqds_Q5T.mjs +850 -0
  85. package/lib/google-gemini-cli-Dsztq0N5.mjs +211 -0
  86. package/lib/google-gemini-cli-zJhiOcND.mjs +211 -0
  87. package/lib/google-oauth-shared-CuEHaDDj.mjs +147 -0
  88. package/lib/google-oauth-shared-CwNWYdmR.mjs +147 -0
  89. package/lib/google-oauth-shared-yqlyqPPC.mjs +147 -0
  90. package/lib/google-shared-CgKmmdO3.mjs +760 -0
  91. package/lib/google-shared-Dr-VG-ap.mjs +760 -0
  92. package/lib/google-shared-DzhCb9b0.mjs +760 -0
  93. package/lib/google-vertex-BDN2tLaD.mjs +99 -0
  94. package/lib/google-vertex-DopVOQOG.mjs +99 -0
  95. package/lib/google-vertex-kscbkyRb.mjs +99 -0
  96. package/lib/google-zyDOG9x7.mjs +30 -0
  97. package/lib/identity-Da1GPU9a.mjs +219 -0
  98. package/lib/identity-DnB63pS7.mjs +219 -0
  99. package/lib/identity-xRP7_eSR.mjs +219 -0
  100. package/lib/idle-iterator-Baoyn3Hp.mjs +366 -0
  101. package/lib/idle-iterator-C6XbWcuB.mjs +366 -0
  102. package/lib/idle-iterator-DUjKQEGT.mjs +366 -0
  103. package/lib/index.mjs +4608 -3935
  104. package/lib/kimi--wUOWER5.mjs +236 -0
  105. package/lib/kimi-DMVI-zrZ.mjs +236 -0
  106. package/lib/kimi-Dh0pv3WZ.mjs +236 -0
  107. package/lib/markit-BL3cH47U.mjs +1417 -0
  108. package/lib/markit-BNiNY6SE.mjs +1417 -0
  109. package/lib/markit-M0jhziqU.mjs +1417 -0
  110. package/lib/minimax-code-BK-3eBbz.mjs +53 -0
  111. package/lib/minimax-code-DCbuA6Yk.mjs +53 -0
  112. package/lib/minimax-code-Uq8Qu9LW.mjs +53 -0
  113. package/lib/models-CfT4coYT.mjs +104660 -0
  114. package/lib/models-D_XnT6ay.mjs +104660 -0
  115. package/lib/models-SGASygJ3.mjs +104660 -0
  116. package/lib/ollama-BQMGPxtV.mjs +589 -0
  117. package/lib/ollama-DPzBmq89.mjs +589 -0
  118. package/lib/ollama-DoBz5SFm.mjs +589 -0
  119. package/lib/openai-codex-Bi-4S4PX.mjs +255 -0
  120. package/lib/openai-codex-CQL_kvYL.mjs +255 -0
  121. package/lib/openai-codex-Ch8CkT3p.mjs +255 -0
  122. package/lib/openai-codex-responses-CvxL_FMF.mjs +3144 -0
  123. package/lib/openai-codex-responses-Cz-2qpC7.mjs +3144 -0
  124. package/lib/openai-codex-responses-pejZgdZo.mjs +3144 -0
  125. package/lib/openai-completions-CF8IyNtP.mjs +1360 -0
  126. package/lib/openai-completions-DIf361kF.mjs +1360 -0
  127. package/lib/openai-completions-i8doczAk.mjs +1360 -0
  128. package/lib/openai-reasoning-fallback-DGVVLgd1.mjs +286 -0
  129. package/lib/openai-reasoning-fallback-Nj6yB2rY.mjs +286 -0
  130. package/lib/openai-reasoning-fallback-OdJREP1o.mjs +286 -0
  131. package/lib/openai-responses-BqXJInHX.mjs +867 -0
  132. package/lib/openai-responses-DTkBiiy-.mjs +867 -0
  133. package/lib/openai-responses-Db_a-U4-.mjs +867 -0
  134. package/lib/opencode-DaJjcUbf.mjs +38 -0
  135. package/lib/opencode-DhMolSoB.mjs +38 -0
  136. package/lib/opencode-Rq_Q2vAO.mjs +38 -0
  137. package/lib/perplexity-9b-RQ0mV.mjs +194 -0
  138. package/lib/perplexity-C4iLVMUj.mjs +194 -0
  139. package/lib/perplexity-Uu7Jzg5b.mjs +194 -0
  140. package/lib/proxy-DDqrmjjC.mjs +190 -0
  141. package/lib/proxy-ZtUcl6r5.mjs +190 -0
  142. package/lib/proxy-pM_NIv-H.mjs +190 -0
  143. package/lib/request-debug-HJMoJncL.mjs +183 -0
  144. package/lib/sanitize-text-CfcXzw5X.mjs +33 -0
  145. package/lib/scrapers-BkFfcPHj.mjs +9198 -0
  146. package/lib/scrapers-CL-WgdU1.mjs +9198 -0
  147. package/lib/scrapers-CVptboMs.mjs +9198 -0
  148. package/lib/scrapers-CipyKyCH.mjs +9198 -0
  149. package/lib/scrapers-DGfrYhtw.mjs +9198 -0
  150. package/lib/scrapers-DSUPYoUF.mjs +9198 -0
  151. package/lib/scrapers-DZ2GXmp7.mjs +9198 -0
  152. package/lib/scrapers-nhQAvc8d.mjs +9198 -0
  153. package/lib/shell-snapshot-fn-env.sh +67 -43
  154. package/lib/src-BgpusnsB.mjs +5076 -0
  155. package/lib/src-DTid0g4K.mjs +5001 -0
  156. package/lib/src-lDmkSRbm.mjs +5006 -0
  157. package/lib/stream-BlldLkVq.mjs +10236 -0
  158. package/lib/stream-CRtexYLe.mjs +10236 -0
  159. package/lib/stream-C_RAoxJC.mjs +10236 -0
  160. package/lib/stream-markup-healing-2toHXWXM.mjs +491 -0
  161. package/lib/stream-markup-healing-DMsxBx1L.mjs +491 -0
  162. package/lib/stream-markup-healing-KMkiAA00.mjs +491 -0
  163. package/lib/turndown-DN7ByzEI.mjs +667 -0
  164. package/lib/types/client/locales.d.ts +1 -1
  165. package/lib/types/config/fields.d.ts +1 -1
  166. package/lib/types/config/settings.d.ts +25 -3
  167. package/lib/types/config/truncate.d.ts +9 -5
  168. package/lib/types/tools/bash/background.d.ts +1 -1
  169. package/lib/types/tools/bash/bash-executor.d.ts +4 -0
  170. package/lib/types/tools/bash/bash-interceptor.d.ts +10 -8
  171. package/lib/types/tools/bash/cd-workdir.d.ts +35 -0
  172. package/lib/types/tools/bash/non-interactive-env.d.ts +2 -0
  173. package/lib/types/tools/bash/render.d.ts +4 -3
  174. package/lib/types/tools/bash/sanitize-text.d.ts +5 -0
  175. package/lib/types/tools/bash/shell-snapshot.d.ts +4 -1
  176. package/lib/types/tools/bash/shell-tokenize.d.ts +60 -0
  177. package/lib/types/tools/bash/streaming-output.d.ts +12 -212
  178. package/lib/types/tools/bash/which.d.ts +20 -0
  179. package/lib/types/tools/bash/windows-shell.d.ts +31 -0
  180. package/lib/types/tools/edit/adapter/index.d.ts +25 -3
  181. package/lib/types/tools/edit/adapter/tools/auto-generated-guard.d.ts +7 -17
  182. package/lib/types/tools/glob/adapter/index.d.ts +27 -1
  183. package/lib/types/tools/grep/adapter/index.d.ts +29 -1
  184. package/lib/types/tools/omp/edit/dispatch.d.ts +43 -0
  185. package/lib/types/tools/omp/edit/hashline/noop-loop-guard.d.ts +3 -1
  186. package/lib/types/tools/omp/sdk.d.ts +6 -0
  187. package/lib/types/tools/omp/tools/auto-generated-guard.d.ts +20 -0
  188. package/lib/types/tools/omp/tools/fetch.d.ts +2 -0
  189. package/lib/types/tools/omp/tools/read.d.ts +2 -8
  190. package/lib/types/tools/omp/tools/write.d.ts +4 -4
  191. package/lib/types/tools/omp/utils/image-loading.d.ts +10 -36
  192. package/lib/types/tools/read/adapter/index.d.ts +4 -1
  193. package/lib/types/tools/read-image/index.d.ts +4 -0
  194. package/lib/types/tools/shared/auto-generated-guard.dsh.d.ts +16 -4
  195. package/lib/types/tools/shared/bun-shim.d.ts +39 -3
  196. package/lib/types/tools/shared/fs-promises-shim.d.ts +3 -1
  197. package/lib/types/tools/shared/image-bridge.d.ts +98 -0
  198. package/lib/types/tools/shared/omp-prompt.d.ts +17 -9
  199. package/lib/types/tools/shared/session-state.d.ts +9 -3
  200. package/lib/utils-2Wq2eATG.mjs +8119 -0
  201. package/lib/utils-BnX8O3vi.mjs +12303 -0
  202. package/lib/utils-Bw139LTz.mjs +8119 -0
  203. package/lib/utils-CE8N8P4Q.mjs +12315 -0
  204. package/lib/utils-CZw4tVZQ.mjs +12315 -0
  205. package/lib/utils-C_MrQ_0z.mjs +12301 -0
  206. package/lib/utils-CiGN7OHR.mjs +12315 -0
  207. package/lib/utils-Cp76gCyk.mjs +8119 -0
  208. package/lib/utils-D0GRDgAr.mjs +12315 -0
  209. package/lib/utils-D0Z1fyoO.mjs +12299 -0
  210. package/lib/utils-D2YknRk4.mjs +51 -0
  211. package/lib/utils-DppGHXQB.mjs +51 -0
  212. package/lib/utils-DzXZDfYc.mjs +51 -0
  213. package/lib/utils-W8WdSBpX.mjs +12315 -0
  214. package/lib/vision-guard-01qSwFpf.mjs +92 -0
  215. package/lib/vision-guard-BDD4OrKo.mjs +92 -0
  216. package/lib/vision-guard-DzZGaOga.mjs +92 -0
  217. package/lib/wafer-CgtPHerf.mjs +17 -0
  218. package/lib/wafer-DRU0EjZX.mjs +17 -0
  219. package/lib/wafer-cBtrn6q9.mjs +17 -0
  220. package/lib/xai-oauth-Buk8XVvM.mjs +446 -0
  221. package/lib/xai-oauth-CMal8l1O.mjs +446 -0
  222. package/lib/xai-oauth-DPHDXKD7.mjs +446 -0
  223. package/lib/xiaomi-CZgwvX2G.mjs +157 -0
  224. package/lib/xiaomi-D2qT5cAC.mjs +157 -0
  225. package/lib/xiaomi-Dd87KSg5.mjs +157 -0
  226. package/lib/zai-7DWMkEqM.mjs +203 -0
  227. package/lib/zai-C59YnomG.mjs +203 -0
  228. package/lib/zai-CFeOt-53.mjs +203 -0
  229. package/lib/zip-Cg9ANN_U.mjs +1316 -0
  230. package/lib/zip-D36ZKsP8.mjs +1316 -0
  231. package/lib/zip-D6QXpvaJ.mjs +1316 -0
  232. package/package.json +14 -10
  233. package/presets/package.json +1 -1
  234. package/presets/tool-plus-ptc/preset.yml +1 -1
  235. package/presets/tool-plus-standard/preset.yml +1 -1
@@ -0,0 +1,236 @@
1
+ import { installBunShim as __installBunShim } from "./bun-shim.mjs";
2
+ __installBunShim();
3
+ import { r as __exportAll } from "./fs-promises-shim-Bx0fpxuk.mjs";
4
+ import { H as getAgentDir, P as $env } from "./src-BgpusnsB.mjs";
5
+ import { c as OAuthError, h as LoginCancelledError } from "./error-Dd8DIqs-.mjs";
6
+ import "./utils-Cp76gCyk.mjs";
7
+ import { n as isRecord } from "./type-guards-B9VVjRDK.mjs";
8
+ import * as path from "node:path";
9
+ import * as fs from "node:fs";
10
+ import * as os from "node:os";
11
+ import { scheduler } from "node:timers/promises";
12
+ import * as crypto from "node:crypto";
13
+ //#region node_modules/.pnpm/@oh-my-pi+pi-ai@17.3.5/node_modules/@oh-my-pi/pi-ai/package.json
14
+ var version = "17.3.5";
15
+ //#endregion
16
+ //#region node_modules/.pnpm/@oh-my-pi+pi-ai@17.3.5/node_modules/@oh-my-pi/pi-ai/src/registry/oauth/kimi.ts
17
+ /**
18
+ * Kimi Code OAuth flow (device authorization grant)
19
+ */
20
+ var kimi_exports = /* @__PURE__ */ __exportAll({
21
+ getKimiCommonHeaders: () => getKimiCommonHeaders,
22
+ loginKimi: () => loginKimi,
23
+ refreshKimiToken: () => refreshKimiToken
24
+ });
25
+ const CLIENT_ID = "17e5f671-d194-4dfb-9706-5516cb48c098";
26
+ const DEFAULT_OAUTH_HOST = "https://auth.kimi.com";
27
+ const DEVICE_ID_FILENAME = "kimi-device-id";
28
+ const DEFAULT_POLL_INTERVAL_MS = 5e3;
29
+ const DEFAULT_DEVICE_FLOW_TTL_MS = 9e5;
30
+ const OAUTH_EXPIRY_SKEW_MS = 3e5;
31
+ function resolveOAuthHost() {
32
+ return $env.KIMI_CODE_OAUTH_HOST || $env.KIMI_OAUTH_HOST || DEFAULT_OAUTH_HOST;
33
+ }
34
+ function formatDeviceModel(system, release, arch) {
35
+ return [
36
+ system,
37
+ release,
38
+ arch
39
+ ].filter(Boolean).join(" ").trim();
40
+ }
41
+ function getDeviceModel() {
42
+ const platform = os.platform();
43
+ const release = os.release();
44
+ const arch = os.arch();
45
+ if (platform === "darwin") return formatDeviceModel("macOS", release, arch);
46
+ if (platform === "win32") return formatDeviceModel("Windows", release, arch);
47
+ return formatDeviceModel(platform === "linux" ? "Linux" : platform, release, arch);
48
+ }
49
+ let getDeviceId = () => {
50
+ const deviceIdPath = path.join(getAgentDir(), DEVICE_ID_FILENAME);
51
+ try {
52
+ const existing = fs.readFileSync(deviceIdPath, "utf-8").trim();
53
+ if (existing) {
54
+ getDeviceId = () => existing;
55
+ return existing;
56
+ }
57
+ } catch {}
58
+ const deviceId = crypto.randomUUID().replace(/-/g, "");
59
+ try {
60
+ fs.mkdirSync(path.dirname(deviceIdPath), { recursive: true });
61
+ fs.writeFileSync(deviceIdPath, `${deviceId}\n`, { mode: 384 });
62
+ } catch {}
63
+ getDeviceId = () => deviceId;
64
+ return deviceId;
65
+ };
66
+ function sanitizeHeaderValue(value, fallback = "") {
67
+ return value.replace(/[^\x20-\x7E]/g, "").trim() || fallback;
68
+ }
69
+ let getKimiCommonHeaders = () => {
70
+ const headers = Object.freeze({
71
+ "User-Agent": `KimiCLI/${version}`,
72
+ "X-Msh-Platform": "kimi_cli",
73
+ "X-Msh-Version": version,
74
+ "X-Msh-Device-Name": sanitizeHeaderValue(os.hostname(), "unknown"),
75
+ "X-Msh-Device-Model": sanitizeHeaderValue(getDeviceModel(), "unknown"),
76
+ "X-Msh-Os-Version": sanitizeHeaderValue(os.version(), "unknown"),
77
+ "X-Msh-Device-Id": sanitizeHeaderValue(getDeviceId(), "unknown")
78
+ });
79
+ getKimiCommonHeaders = () => headers;
80
+ return headers;
81
+ };
82
+ async function requestDeviceAuthorization() {
83
+ const response = await fetch(`${resolveOAuthHost()}/api/oauth/device_authorization`, {
84
+ method: "POST",
85
+ headers: {
86
+ "Content-Type": "application/x-www-form-urlencoded",
87
+ ...getKimiCommonHeaders()
88
+ },
89
+ body: new URLSearchParams({ client_id: CLIENT_ID })
90
+ });
91
+ if (!response.ok) {
92
+ const text = await response.text();
93
+ throw new OAuthError(`Kimi device authorization failed: ${response.status} ${text}`, {
94
+ kind: "device-auth",
95
+ provider: "kimi",
96
+ status: response.status
97
+ });
98
+ }
99
+ const payload = await response.json();
100
+ const userCode = payload.user_code;
101
+ const deviceCode = payload.device_code;
102
+ const verificationUri = payload.verification_uri;
103
+ const verificationUriComplete = payload.verification_uri_complete;
104
+ if (!userCode || !deviceCode || !verificationUri) throw new OAuthError("Kimi device authorization response missing required fields", {
105
+ kind: "validation",
106
+ provider: "kimi"
107
+ });
108
+ const expiresInMs = typeof payload.expires_in === "number" ? payload.expires_in * 1e3 : DEFAULT_DEVICE_FLOW_TTL_MS;
109
+ const intervalMs = typeof payload.interval === "number" && payload.interval > 0 ? payload.interval * 1e3 : DEFAULT_POLL_INTERVAL_MS;
110
+ return {
111
+ userCode,
112
+ deviceCode,
113
+ verificationUri,
114
+ verificationUriComplete: verificationUriComplete || verificationUri,
115
+ expiresInMs,
116
+ intervalMs
117
+ };
118
+ }
119
+ function parseTokenPayload(payload, refreshTokenFallback) {
120
+ if (!payload.access_token || typeof payload.expires_in !== "number") throw new OAuthError("Kimi token response missing required fields", {
121
+ kind: "validation",
122
+ provider: "kimi"
123
+ });
124
+ const refresh = payload.refresh_token ?? refreshTokenFallback;
125
+ if (!refresh) throw new OAuthError("Kimi token response missing refresh token", {
126
+ kind: "validation",
127
+ provider: "kimi"
128
+ });
129
+ let accountId;
130
+ const tokenParts = payload.access_token.split(".");
131
+ const jwtPayloadPart = tokenParts.length === 3 ? tokenParts[1] : void 0;
132
+ if (jwtPayloadPart) try {
133
+ const jwtPayload = JSON.parse(new TextDecoder("utf-8").decode(Uint8Array.fromBase64(jwtPayloadPart, { alphabet: "base64url" })));
134
+ if (isRecord(jwtPayload)) {
135
+ const userId = typeof jwtPayload.user_id === "string" ? jwtPayload.user_id.trim() : "";
136
+ const subject = typeof jwtPayload.sub === "string" ? jwtPayload.sub.trim() : "";
137
+ accountId = userId || subject || void 0;
138
+ }
139
+ } catch {}
140
+ return {
141
+ access: payload.access_token,
142
+ refresh,
143
+ expires: Date.now() + payload.expires_in * 1e3 - OAUTH_EXPIRY_SKEW_MS,
144
+ accountId
145
+ };
146
+ }
147
+ async function pollForToken(deviceCode, intervalMs, expiresInMs, signal) {
148
+ const deadline = Date.now() + expiresInMs;
149
+ let waitMs = Math.max(1e3, intervalMs);
150
+ while (Date.now() < deadline) {
151
+ if (signal?.aborted) throw new LoginCancelledError();
152
+ const response = await fetch(`${resolveOAuthHost()}/api/oauth/token`, {
153
+ method: "POST",
154
+ headers: {
155
+ "Content-Type": "application/x-www-form-urlencoded",
156
+ ...getKimiCommonHeaders()
157
+ },
158
+ body: new URLSearchParams({
159
+ client_id: CLIENT_ID,
160
+ device_code: deviceCode,
161
+ grant_type: "urn:ietf:params:oauth:grant-type:device_code"
162
+ })
163
+ });
164
+ const payload = await response.json();
165
+ if (response.ok && payload.access_token) return parseTokenPayload(payload);
166
+ const error = payload.error;
167
+ if (error === "authorization_pending") {
168
+ await scheduler.wait(waitMs, { signal });
169
+ continue;
170
+ }
171
+ if (error === "slow_down") {
172
+ waitMs += 5e3;
173
+ const retryAfter = typeof payload.interval === "number" ? payload.interval * 1e3 : void 0;
174
+ if (retryAfter && retryAfter > waitMs) waitMs = retryAfter;
175
+ await scheduler.wait(waitMs, { signal });
176
+ continue;
177
+ }
178
+ if (error === "expired_token") throw new OAuthError("Kimi device authorization expired", {
179
+ kind: "validation",
180
+ provider: "kimi"
181
+ });
182
+ if (error === "access_denied") throw new OAuthError("Kimi device authorization denied", {
183
+ kind: "validation",
184
+ provider: "kimi"
185
+ });
186
+ const description = payload.error_description ? `: ${payload.error_description}` : "";
187
+ throw new OAuthError(`Kimi device flow failed: ${error ?? response.status}${description}`, {
188
+ kind: "polling",
189
+ provider: "kimi"
190
+ });
191
+ }
192
+ throw new OAuthError("Kimi device flow timed out", {
193
+ kind: "timeout",
194
+ provider: "kimi"
195
+ });
196
+ }
197
+ /**
198
+ * Login with Kimi Code OAuth (device code flow).
199
+ */
200
+ async function loginKimi(options) {
201
+ const device = await requestDeviceAuthorization();
202
+ options.onAuth?.({
203
+ url: device.verificationUriComplete,
204
+ instructions: `Enter code: ${device.userCode}`
205
+ });
206
+ return pollForToken(device.deviceCode, device.intervalMs, device.expiresInMs, options.signal);
207
+ }
208
+ /**
209
+ * Refresh Kimi OAuth token.
210
+ */
211
+ async function refreshKimiToken(refreshToken) {
212
+ const response = await fetch(`${resolveOAuthHost()}/api/oauth/token`, {
213
+ method: "POST",
214
+ headers: {
215
+ "Content-Type": "application/x-www-form-urlencoded",
216
+ ...getKimiCommonHeaders()
217
+ },
218
+ body: new URLSearchParams({
219
+ grant_type: "refresh_token",
220
+ refresh_token: refreshToken,
221
+ client_id: CLIENT_ID
222
+ })
223
+ });
224
+ if (!response.ok) {
225
+ const payload = await response.json().catch(() => void 0);
226
+ const description = payload?.error_description ? `: ${payload.error_description}` : "";
227
+ throw new OAuthError(`Kimi token refresh failed: ${response.status}${description}`, {
228
+ kind: "token-refresh",
229
+ provider: "kimi",
230
+ status: response.status
231
+ });
232
+ }
233
+ return parseTokenPayload(await response.json(), refreshToken);
234
+ }
235
+ //#endregion
236
+ export { kimi_exports as n, getKimiCommonHeaders as t };