@prestyj/cli 4.6.4 → 4.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. package/dist/cli/auth.d.ts.map +1 -1
  2. package/dist/cli/auth.js +11 -10
  3. package/dist/cli/auth.js.map +1 -1
  4. package/dist/cli/mcp.js +1 -1
  5. package/dist/cli/shared.d.ts +12 -0
  6. package/dist/cli/shared.d.ts.map +1 -1
  7. package/dist/cli/shared.js +31 -6
  8. package/dist/cli/shared.js.map +1 -1
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +63 -62
  11. package/dist/cli.js.map +1 -1
  12. package/dist/config.d.ts +7 -14
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +13 -17
  15. package/dist/config.js.map +1 -1
  16. package/dist/core/agent-session-compaction.test.js +1 -1
  17. package/dist/core/agent-session-compaction.test.js.map +1 -1
  18. package/dist/core/agent-session.d.ts +1 -0
  19. package/dist/core/agent-session.d.ts.map +1 -1
  20. package/dist/core/agent-session.js +6 -2
  21. package/dist/core/agent-session.js.map +1 -1
  22. package/dist/core/auth-storage.d.ts +1 -58
  23. package/dist/core/auth-storage.d.ts.map +1 -1
  24. package/dist/core/auth-storage.js +3 -254
  25. package/dist/core/auth-storage.js.map +1 -1
  26. package/dist/core/auto-update.d.ts +4 -26
  27. package/dist/core/auto-update.d.ts.map +1 -1
  28. package/dist/core/auto-update.js +12 -237
  29. package/dist/core/auto-update.js.map +1 -1
  30. package/dist/core/claude-code-version.d.ts +1 -9
  31. package/dist/core/claude-code-version.d.ts.map +1 -1
  32. package/dist/core/claude-code-version.js +2 -105
  33. package/dist/core/claude-code-version.js.map +1 -1
  34. package/dist/core/compaction/compactor.test.js +2 -2
  35. package/dist/core/compaction/compactor.test.js.map +1 -1
  36. package/dist/core/file-lock.d.ts +1 -5
  37. package/dist/core/file-lock.d.ts.map +1 -1
  38. package/dist/core/file-lock.js +2 -75
  39. package/dist/core/file-lock.js.map +1 -1
  40. package/dist/core/logger.d.ts +4 -17
  41. package/dist/core/logger.d.ts.map +1 -1
  42. package/dist/core/logger.js +21 -110
  43. package/dist/core/logger.js.map +1 -1
  44. package/dist/core/lsp/client.d.ts +63 -0
  45. package/dist/core/lsp/client.d.ts.map +1 -0
  46. package/dist/core/lsp/client.js +215 -0
  47. package/dist/core/lsp/client.js.map +1 -0
  48. package/dist/core/lsp/format.d.ts +12 -0
  49. package/dist/core/lsp/format.d.ts.map +1 -0
  50. package/dist/core/lsp/format.js +30 -0
  51. package/dist/core/lsp/format.js.map +1 -0
  52. package/dist/core/lsp/format.test.d.ts +2 -0
  53. package/dist/core/lsp/format.test.d.ts.map +1 -0
  54. package/dist/core/lsp/format.test.js +56 -0
  55. package/dist/core/lsp/format.test.js.map +1 -0
  56. package/dist/core/lsp/integration.test.d.ts +2 -0
  57. package/dist/core/lsp/integration.test.d.ts.map +1 -0
  58. package/dist/core/lsp/integration.test.js +60 -0
  59. package/dist/core/lsp/integration.test.js.map +1 -0
  60. package/dist/core/lsp/jsonrpc.d.ts +32 -0
  61. package/dist/core/lsp/jsonrpc.d.ts.map +1 -0
  62. package/dist/core/lsp/jsonrpc.js +141 -0
  63. package/dist/core/lsp/jsonrpc.js.map +1 -0
  64. package/dist/core/lsp/jsonrpc.test.d.ts +2 -0
  65. package/dist/core/lsp/jsonrpc.test.d.ts.map +1 -0
  66. package/dist/core/lsp/jsonrpc.test.js +127 -0
  67. package/dist/core/lsp/jsonrpc.test.js.map +1 -0
  68. package/dist/core/lsp/manager.d.ts +40 -0
  69. package/dist/core/lsp/manager.d.ts.map +1 -0
  70. package/dist/core/lsp/manager.js +135 -0
  71. package/dist/core/lsp/manager.js.map +1 -0
  72. package/dist/core/lsp/manager.test.d.ts +2 -0
  73. package/dist/core/lsp/manager.test.d.ts.map +1 -0
  74. package/dist/core/lsp/manager.test.js +119 -0
  75. package/dist/core/lsp/manager.test.js.map +1 -0
  76. package/dist/core/lsp/servers.d.ts +45 -0
  77. package/dist/core/lsp/servers.d.ts.map +1 -0
  78. package/dist/core/lsp/servers.js +247 -0
  79. package/dist/core/lsp/servers.js.map +1 -0
  80. package/dist/core/mcp/defaults.d.ts +1 -1
  81. package/dist/core/mcp/defaults.js +1 -1
  82. package/dist/core/mcp/store.d.ts +1 -1
  83. package/dist/core/mcp/store.test.js +1 -1
  84. package/dist/core/mcp/store.test.js.map +1 -1
  85. package/dist/core/model-registry.d.ts +1 -75
  86. package/dist/core/model-registry.d.ts.map +1 -1
  87. package/dist/core/model-registry.js +4 -344
  88. package/dist/core/model-registry.js.map +1 -1
  89. package/dist/core/oauth/anthropic.d.ts +1 -3
  90. package/dist/core/oauth/anthropic.d.ts.map +1 -1
  91. package/dist/core/oauth/anthropic.js +2 -96
  92. package/dist/core/oauth/anthropic.js.map +1 -1
  93. package/dist/core/oauth/gemini.d.ts +1 -3
  94. package/dist/core/oauth/gemini.d.ts.map +1 -1
  95. package/dist/core/oauth/gemini.js +2 -385
  96. package/dist/core/oauth/gemini.js.map +1 -1
  97. package/dist/core/oauth/kimi.d.ts +1 -45
  98. package/dist/core/oauth/kimi.d.ts.map +1 -1
  99. package/dist/core/oauth/kimi.js +2 -277
  100. package/dist/core/oauth/kimi.js.map +1 -1
  101. package/dist/core/oauth/openai.d.ts +1 -3
  102. package/dist/core/oauth/openai.d.ts.map +1 -1
  103. package/dist/core/oauth/openai.js +2 -187
  104. package/dist/core/oauth/openai.js.map +1 -1
  105. package/dist/core/oauth/pkce.d.ts +1 -4
  106. package/dist/core/oauth/pkce.d.ts.map +1 -1
  107. package/dist/core/oauth/pkce.js +2 -16
  108. package/dist/core/oauth/pkce.js.map +1 -1
  109. package/dist/core/oauth/types.d.ts +1 -13
  110. package/dist/core/oauth/types.d.ts.map +1 -1
  111. package/dist/core/process-manager.d.ts +10 -0
  112. package/dist/core/process-manager.d.ts.map +1 -1
  113. package/dist/core/process-manager.js +45 -1
  114. package/dist/core/process-manager.js.map +1 -1
  115. package/dist/core/prompt-commands.d.ts.map +1 -1
  116. package/dist/core/prompt-commands.js +20 -7
  117. package/dist/core/prompt-commands.js.map +1 -1
  118. package/dist/core/session-manager.d.ts +26 -0
  119. package/dist/core/session-manager.d.ts.map +1 -1
  120. package/dist/core/session-manager.js +99 -2
  121. package/dist/core/session-manager.js.map +1 -1
  122. package/dist/core/session-manager.test.d.ts +2 -0
  123. package/dist/core/session-manager.test.d.ts.map +1 -0
  124. package/dist/core/session-manager.test.js +113 -0
  125. package/dist/core/session-manager.test.js.map +1 -0
  126. package/dist/core/settings-manager.d.ts +2 -0
  127. package/dist/core/settings-manager.d.ts.map +1 -1
  128. package/dist/core/settings-manager.js +6 -0
  129. package/dist/core/settings-manager.js.map +1 -1
  130. package/dist/core/telegram.d.ts +1 -112
  131. package/dist/core/telegram.d.ts.map +1 -1
  132. package/dist/core/telegram.js +2 -251
  133. package/dist/core/telegram.js.map +1 -1
  134. package/dist/core/thinking-level.d.ts +1 -4
  135. package/dist/core/thinking-level.d.ts.map +1 -1
  136. package/dist/core/thinking-level.js +3 -58
  137. package/dist/core/thinking-level.js.map +1 -1
  138. package/dist/core/voice-transcriber.d.ts +1 -32
  139. package/dist/core/voice-transcriber.d.ts.map +1 -1
  140. package/dist/core/voice-transcriber.js +3 -112
  141. package/dist/core/voice-transcriber.js.map +1 -1
  142. package/dist/interactive.d.ts.map +1 -1
  143. package/dist/interactive.js +5 -2
  144. package/dist/interactive.js.map +1 -1
  145. package/dist/modes/agent-home-mode.d.ts.map +1 -1
  146. package/dist/modes/agent-home-mode.js +10 -38
  147. package/dist/modes/agent-home-mode.js.map +1 -1
  148. package/dist/modes/serve-mode.d.ts.map +1 -1
  149. package/dist/modes/serve-mode.js +11 -39
  150. package/dist/modes/serve-mode.js.map +1 -1
  151. package/dist/session.d.ts.map +1 -1
  152. package/dist/session.js +13 -6
  153. package/dist/session.js.map +1 -1
  154. package/dist/tools/bash.d.ts.map +1 -1
  155. package/dist/tools/bash.js +6 -3
  156. package/dist/tools/bash.js.map +1 -1
  157. package/dist/tools/edit.d.ts +3 -1
  158. package/dist/tools/edit.d.ts.map +1 -1
  159. package/dist/tools/edit.js +15 -3
  160. package/dist/tools/edit.js.map +1 -1
  161. package/dist/tools/edit.test.js +70 -0
  162. package/dist/tools/edit.test.js.map +1 -1
  163. package/dist/tools/goals.d.ts +1 -1
  164. package/dist/tools/index.d.ts +15 -0
  165. package/dist/tools/index.d.ts.map +1 -1
  166. package/dist/tools/index.js +16 -3
  167. package/dist/tools/index.js.map +1 -1
  168. package/dist/tools/task-send.d.ts +12 -0
  169. package/dist/tools/task-send.d.ts.map +1 -0
  170. package/dist/tools/task-send.js +34 -0
  171. package/dist/tools/task-send.js.map +1 -0
  172. package/dist/tools/task-send.test.d.ts +2 -0
  173. package/dist/tools/task-send.test.d.ts.map +1 -0
  174. package/dist/tools/task-send.test.js +95 -0
  175. package/dist/tools/task-send.test.js.map +1 -0
  176. package/dist/tools/write.d.ts +3 -1
  177. package/dist/tools/write.d.ts.map +1 -1
  178. package/dist/tools/write.js +13 -2
  179. package/dist/tools/write.js.map +1 -1
  180. package/dist/tools/write.test.js +33 -0
  181. package/dist/tools/write.test.js.map +1 -1
  182. package/dist/types.d.ts +2 -0
  183. package/dist/types.d.ts.map +1 -1
  184. package/dist/ui/App.d.ts +16 -0
  185. package/dist/ui/App.d.ts.map +1 -1
  186. package/dist/ui/App.js +126 -12
  187. package/dist/ui/App.js.map +1 -1
  188. package/dist/ui/anchor-pad-reclaim.test.d.ts +2 -0
  189. package/dist/ui/anchor-pad-reclaim.test.d.ts.map +1 -0
  190. package/dist/ui/anchor-pad-reclaim.test.js +146 -0
  191. package/dist/ui/anchor-pad-reclaim.test.js.map +1 -0
  192. package/dist/ui/app-items.d.ts +14 -0
  193. package/dist/ui/app-items.d.ts.map +1 -1
  194. package/dist/ui/app-items.js +13 -0
  195. package/dist/ui/app-items.js.map +1 -1
  196. package/dist/ui/app-items.test.js +17 -1
  197. package/dist/ui/app-items.test.js.map +1 -1
  198. package/dist/ui/atomic-flush-regression.test.d.ts +2 -0
  199. package/dist/ui/atomic-flush-regression.test.d.ts.map +1 -0
  200. package/dist/ui/atomic-flush-regression.test.js +218 -0
  201. package/dist/ui/atomic-flush-regression.test.js.map +1 -0
  202. package/dist/ui/components/AssistantMessage.test.js +32 -1
  203. package/dist/ui/components/AssistantMessage.test.js.map +1 -1
  204. package/dist/ui/components/Footer.d.ts.map +1 -1
  205. package/dist/ui/components/Footer.js +1 -0
  206. package/dist/ui/components/Footer.js.map +1 -1
  207. package/dist/ui/components/InputArea.test.js +11 -5
  208. package/dist/ui/components/InputArea.test.js.map +1 -1
  209. package/dist/ui/components/Markdown.d.ts.map +1 -1
  210. package/dist/ui/components/Markdown.js +9 -1
  211. package/dist/ui/components/Markdown.js.map +1 -1
  212. package/dist/ui/footer-jump-regression.test.js +56 -9
  213. package/dist/ui/footer-jump-regression.test.js.map +1 -1
  214. package/dist/ui/frame-clip-regression.test.d.ts +2 -0
  215. package/dist/ui/frame-clip-regression.test.d.ts.map +1 -0
  216. package/dist/ui/frame-clip-regression.test.js +215 -0
  217. package/dist/ui/frame-clip-regression.test.js.map +1 -0
  218. package/dist/ui/hooks/useTranscriptHistory.d.ts +9 -1
  219. package/dist/ui/hooks/useTranscriptHistory.d.ts.map +1 -1
  220. package/dist/ui/hooks/useTranscriptHistory.js +51 -19
  221. package/dist/ui/hooks/useTranscriptHistory.js.map +1 -1
  222. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.d.ts +2 -0
  223. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.d.ts.map +1 -0
  224. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.js +81 -0
  225. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.js.map +1 -0
  226. package/dist/ui/live-area-clamp.test.js +37 -0
  227. package/dist/ui/live-area-clamp.test.js.map +1 -1
  228. package/dist/ui/live-area-height.d.ts.map +1 -1
  229. package/dist/ui/live-area-height.js +13 -6
  230. package/dist/ui/live-area-height.js.map +1 -1
  231. package/dist/ui/live-area-height.test.js +9 -0
  232. package/dist/ui/live-area-height.test.js.map +1 -1
  233. package/dist/ui/live-item-flush.d.ts +28 -0
  234. package/dist/ui/live-item-flush.d.ts.map +1 -1
  235. package/dist/ui/live-item-flush.js +44 -0
  236. package/dist/ui/live-item-flush.js.map +1 -1
  237. package/dist/ui/live-item-flush.test.js +83 -1
  238. package/dist/ui/live-item-flush.test.js.map +1 -1
  239. package/dist/ui/login.d.ts.map +1 -1
  240. package/dist/ui/login.js +12 -30
  241. package/dist/ui/login.js.map +1 -1
  242. package/dist/ui/mcp.d.ts +1 -2
  243. package/dist/ui/mcp.d.ts.map +1 -1
  244. package/dist/ui/mcp.js +8 -43
  245. package/dist/ui/mcp.js.map +1 -1
  246. package/dist/ui/pixel.d.ts.map +1 -1
  247. package/dist/ui/pixel.js +10 -38
  248. package/dist/ui/pixel.js.map +1 -1
  249. package/dist/ui/queued-message.test.js +7 -1
  250. package/dist/ui/queued-message.test.js.map +1 -1
  251. package/dist/ui/render.d.ts.map +1 -1
  252. package/dist/ui/render.js +154 -5
  253. package/dist/ui/render.js.map +1 -1
  254. package/dist/ui/sessions.d.ts.map +1 -1
  255. package/dist/ui/sessions.js +10 -42
  256. package/dist/ui/sessions.js.map +1 -1
  257. package/dist/ui/startup-banner-order.test.d.ts +2 -0
  258. package/dist/ui/startup-banner-order.test.d.ts.map +1 -0
  259. package/dist/ui/startup-banner-order.test.js +105 -0
  260. package/dist/ui/startup-banner-order.test.js.map +1 -0
  261. package/dist/ui/streaming-flush-bounce.test.js +41 -20
  262. package/dist/ui/streaming-flush-bounce.test.js.map +1 -1
  263. package/dist/ui/submit-boundary-gap.test.d.ts +2 -0
  264. package/dist/ui/submit-boundary-gap.test.d.ts.map +1 -0
  265. package/dist/ui/submit-boundary-gap.test.js +180 -0
  266. package/dist/ui/submit-boundary-gap.test.js.map +1 -0
  267. package/dist/ui/terminal-history.d.ts.map +1 -1
  268. package/dist/ui/terminal-history.js +28 -9
  269. package/dist/ui/terminal-history.js.map +1 -1
  270. package/dist/ui/terminal-history.test.js +10 -3
  271. package/dist/ui/terminal-history.test.js.map +1 -1
  272. package/dist/ui/testing/screen-recorder.d.ts.map +1 -1
  273. package/dist/ui/testing/screen-recorder.js +11 -1
  274. package/dist/ui/testing/screen-recorder.js.map +1 -1
  275. package/dist/ui/tui-history-parity.test.js +4 -1
  276. package/dist/ui/tui-history-parity.test.js.map +1 -1
  277. package/dist/ui/tui-simulation.test.js +7 -1
  278. package/dist/ui/tui-simulation.test.js.map +1 -1
  279. package/dist/ui/utils/assistant-stream-split.d.ts +7 -0
  280. package/dist/ui/utils/assistant-stream-split.d.ts.map +1 -1
  281. package/dist/ui/utils/assistant-stream-split.js +22 -1
  282. package/dist/ui/utils/assistant-stream-split.js.map +1 -1
  283. package/dist/ui/utils/assistant-stream-split.test.js +14 -0
  284. package/dist/ui/utils/assistant-stream-split.test.js.map +1 -1
  285. package/dist/ui/utils/markdown-renderer.d.ts.map +1 -1
  286. package/dist/ui/utils/markdown-renderer.js +46 -3
  287. package/dist/ui/utils/markdown-renderer.js.map +1 -1
  288. package/dist/ui/utils/markdown-renderer.test.d.ts +2 -0
  289. package/dist/ui/utils/markdown-renderer.test.d.ts.map +1 -0
  290. package/dist/ui/utils/markdown-renderer.test.js +63 -0
  291. package/dist/ui/utils/markdown-renderer.test.js.map +1 -0
  292. package/dist/ui/utils/terminal-graphics.d.ts +28 -1
  293. package/dist/ui/utils/terminal-graphics.d.ts.map +1 -1
  294. package/dist/ui/utils/terminal-graphics.js +44 -3
  295. package/dist/ui/utils/terminal-graphics.js.map +1 -1
  296. package/dist/ui/utils/terminal-graphics.test.js +40 -1
  297. package/dist/ui/utils/terminal-graphics.test.js.map +1 -1
  298. package/dist/utils/session-title.js +1 -1
  299. package/dist/utils/session-title.js.map +1 -1
  300. package/package.json +7 -6
  301. package/dist/core/model-registry.test.d.ts +0 -2
  302. package/dist/core/model-registry.test.d.ts.map +0 -1
  303. package/dist/core/model-registry.test.js +0 -95
  304. package/dist/core/model-registry.test.js.map +0 -1
  305. package/dist/core/oauth/gemini.test.d.ts +0 -2
  306. package/dist/core/oauth/gemini.test.d.ts.map +0 -1
  307. package/dist/core/oauth/gemini.test.js +0 -154
  308. package/dist/core/oauth/gemini.test.js.map +0 -1
  309. package/dist/core/thinking-level.test.d.ts +0 -2
  310. package/dist/core/thinking-level.test.d.ts.map +0 -1
  311. package/dist/core/thinking-level.test.js +0 -51
  312. package/dist/core/thinking-level.test.js.map +0 -1
  313. package/dist/core/voice-transcriber.test.d.ts +0 -2
  314. package/dist/core/voice-transcriber.test.d.ts.map +0 -1
  315. package/dist/core/voice-transcriber.test.js +0 -88
  316. package/dist/core/voice-transcriber.test.js.map +0 -1
@@ -1,255 +1,4 @@
1
- import fs from "node:fs/promises";
2
- import crypto from "node:crypto";
3
- import { getAppPaths } from "../config.js";
4
- import { refreshAnthropicToken } from "./oauth/anthropic.js";
5
- import { refreshOpenAIToken } from "./oauth/openai.js";
6
- import { refreshGeminiToken } from "./oauth/gemini.js";
7
- import { refreshKimiToken } from "./oauth/kimi.js";
8
- import { withFileLock } from "./file-lock.js";
9
- import { log } from "./logger.js";
10
- /**
11
- * Storage key for Kimi Code OAuth credentials. Kept distinct from the
12
- * `moonshot` API-key entry so a user can configure BOTH and we always
13
- * prefer OAuth for the logical `moonshot` provider.
14
- */
15
- export const MOONSHOT_OAUTH_KEY = "moonshot-oauth";
16
- /** Providers whose credentials are static API keys (no refresh mechanism). */
17
- const STATIC_API_KEY_PROVIDERS = new Set([
18
- "glm",
19
- "moonshot",
20
- "xiaomi",
21
- "minimax",
22
- "deepseek",
23
- "openrouter",
24
- ]);
25
- export class AuthStorage {
26
- data = {};
27
- filePath;
28
- loaded = false;
29
- /** Per-provider lock to serialize concurrent refresh calls. */
30
- refreshLocks = new Map();
31
- constructor(filePath) {
32
- this.filePath = filePath ?? getAppPaths().authFile;
33
- }
34
- /** Path to the on-disk auth file. Useful for status output. */
35
- get path() {
36
- return this.filePath;
37
- }
38
- /** List provider keys with stored credentials. */
39
- async listProviders() {
40
- await this.ensureLoaded();
41
- return Object.keys(this.data);
42
- }
43
- /** True if credentials exist for `provider`. */
44
- async hasCredentials(provider) {
45
- await this.ensureLoaded();
46
- return Boolean(this.data[provider]);
47
- }
48
- /**
49
- * True if the user has any usable auth for the logical provider. For
50
- * `moonshot` this is satisfied by either the Kimi OAuth credential or the
51
- * Moonshot API key.
52
- */
53
- async hasProviderAuth(provider) {
54
- await this.ensureLoaded();
55
- if (provider === "moonshot") {
56
- return Boolean(this.data[MOONSHOT_OAUTH_KEY] || this.data["moonshot"]);
57
- }
58
- return Boolean(this.data[provider]);
59
- }
60
- /**
61
- * True if the active credential for `provider` is a static API key with no
62
- * refresh mechanism. For `moonshot` this is only true when the Kimi OAuth
63
- * credential is absent (a present OAuth credential is refreshable).
64
- */
65
- async isStaticApiKey(provider) {
66
- await this.ensureLoaded();
67
- if (provider === "moonshot" && this.data[MOONSHOT_OAUTH_KEY]) {
68
- return false;
69
- }
70
- return STATIC_API_KEY_PROVIDERS.has(provider);
71
- }
72
- async load() {
73
- await withFileLock(this.filePath, async () => {
74
- try {
75
- const content = await fs.readFile(this.filePath, "utf-8");
76
- this.data = JSON.parse(content);
77
- log("INFO", "auth", `Loaded credentials from ${this.filePath}`, {
78
- providers: Object.keys(this.data).join(",") || "(none)",
79
- });
80
- }
81
- catch (err) {
82
- this.data = {};
83
- const code = err.code;
84
- if (code === "ENOENT") {
85
- log("INFO", "auth", `No auth file found at ${this.filePath} (first run)`);
86
- }
87
- else {
88
- log("ERROR", "auth", `Failed to load auth file: ${err instanceof Error ? err.message : String(err)}`, { path: this.filePath, code: code ?? "unknown" });
89
- }
90
- }
91
- });
92
- this.loaded = true;
93
- }
94
- async ensureLoaded() {
95
- if (!this.loaded)
96
- await this.load();
97
- }
98
- async getCredentials(provider) {
99
- await this.ensureLoaded();
100
- return this.data[provider];
101
- }
102
- async setCredentials(provider, creds) {
103
- await this.ensureLoaded();
104
- this.data[provider] = creds;
105
- await this.save();
106
- }
107
- async clearCredentials(provider) {
108
- await this.ensureLoaded();
109
- delete this.data[provider];
110
- await this.save();
111
- }
112
- async clearAll() {
113
- this.data = {};
114
- await this.save();
115
- }
116
- /**
117
- * Returns valid credentials, auto-refreshing if expired.
118
- * If `forceRefresh` is true, refreshes even if the token hasn't expired
119
- * (useful when the provider rejects a token with 401 before its stored expiry).
120
- * Throws if not logged in.
121
- */
122
- async resolveCredentials(provider, opts) {
123
- await this.ensureLoaded();
124
- // Prefer Kimi OAuth over the Moonshot API key for the logical `moonshot`
125
- // provider. When an OAuth credential exists, resolve (and refresh) that
126
- // instead — this is the "default to OAuth first" rule.
127
- if (provider === "moonshot" && this.data[MOONSHOT_OAUTH_KEY]) {
128
- try {
129
- return await this.resolveCredentials(MOONSHOT_OAUTH_KEY, opts);
130
- }
131
- catch (err) {
132
- // OAuth refresh token is dead and was wiped. Fall back to the
133
- // Moonshot API key if the user also configured one.
134
- if (err instanceof NotLoggedInError && this.data["moonshot"]) {
135
- return this.data["moonshot"];
136
- }
137
- throw err;
138
- }
139
- }
140
- const creds = this.data[provider];
141
- if (!creds) {
142
- throw new NotLoggedInError(provider);
143
- }
144
- // Static API-key providers have no refresh mechanism. The Kimi OAuth key
145
- // (MOONSHOT_OAUTH_KEY) is intentionally excluded — it refreshes below.
146
- if (STATIC_API_KEY_PROVIDERS.has(provider)) {
147
- return creds;
148
- }
149
- // Return if not expired and not force-refreshing
150
- if (!opts?.forceRefresh && Date.now() < creds.expiresAt) {
151
- return creds;
152
- }
153
- // Serialize concurrent refresh calls per provider to avoid races
154
- const existing = this.refreshLocks.get(provider);
155
- if (existing)
156
- return existing;
157
- const refreshPromise = withFileLock(this.filePath, async () => {
158
- // Re-read from disk in case another process refreshed while we waited for the lock
159
- try {
160
- const content = await fs.readFile(this.filePath, "utf-8");
161
- const freshData = JSON.parse(content);
162
- const freshCreds = freshData[provider];
163
- if (freshCreds && !opts?.forceRefresh && Date.now() < freshCreds.expiresAt) {
164
- // Another process already refreshed — use their token
165
- this.data[provider] = freshCreds;
166
- return freshCreds;
167
- }
168
- }
169
- catch {
170
- // Fall through to refresh
171
- }
172
- const refreshFn = provider === "anthropic"
173
- ? refreshAnthropicToken
174
- : provider === "gemini"
175
- ? refreshGeminiToken
176
- : provider === MOONSHOT_OAUTH_KEY
177
- ? refreshKimiToken
178
- : refreshOpenAIToken;
179
- let refreshed;
180
- try {
181
- refreshed = await refreshFn(creds.refreshToken);
182
- }
183
- catch (err) {
184
- // Refresh token revoked / expired / invalid → the stored creds are
185
- // unusable. Wipe them so the next launch surfaces a clean
186
- // NotLoggedInError instead of hitting the same dead refresh path
187
- // every time. The user must re-login.
188
- const msg = err instanceof Error ? err.message : String(err);
189
- const isAuthFailure = /\((401|400)\)/.test(msg) ||
190
- /invalid_grant|invalid_token|invalid.*refresh/i.test(msg) ||
191
- /unauthorized/i.test(msg);
192
- if (isAuthFailure) {
193
- delete this.data[provider];
194
- await atomicWriteFile(this.filePath, JSON.stringify(this.data, null, 2));
195
- throw new NotLoggedInError(provider);
196
- }
197
- throw err;
198
- }
199
- if (!refreshed.accountId && creds.accountId) {
200
- refreshed.accountId = creds.accountId;
201
- }
202
- if (!refreshed.projectId && creds.projectId) {
203
- refreshed.projectId = creds.projectId;
204
- }
205
- this.data[provider] = refreshed;
206
- // Write atomically (we already hold the file lock)
207
- await atomicWriteFile(this.filePath, JSON.stringify(this.data, null, 2));
208
- return refreshed;
209
- });
210
- this.refreshLocks.set(provider, refreshPromise);
211
- try {
212
- return await refreshPromise;
213
- }
214
- finally {
215
- this.refreshLocks.delete(provider);
216
- }
217
- }
218
- /**
219
- * Returns a valid access token, auto-refreshing if expired.
220
- * Throws if not logged in.
221
- */
222
- async resolveToken(provider) {
223
- const creds = await this.resolveCredentials(provider);
224
- return creds.accessToken;
225
- }
226
- async save() {
227
- await withFileLock(this.filePath, async () => {
228
- await atomicWriteFile(this.filePath, JSON.stringify(this.data, null, 2));
229
- });
230
- }
231
- }
232
- /**
233
- * Atomic file write using temp file + rename pattern.
234
- * Prevents partial/corrupt data if the process crashes mid-write.
235
- */
236
- async function atomicWriteFile(filePath, content) {
237
- const tmpPath = `${filePath}.${process.pid}.${Date.now()}.${crypto.randomUUID().slice(0, 8)}.tmp`;
238
- try {
239
- await fs.writeFile(tmpPath, content, { encoding: "utf-8", mode: 0o600 });
240
- await fs.rename(tmpPath, filePath);
241
- }
242
- catch (err) {
243
- await fs.unlink(tmpPath).catch(() => { });
244
- throw err;
245
- }
246
- }
247
- export class NotLoggedInError extends Error {
248
- provider;
249
- constructor(provider) {
250
- super(`Not logged in to ${provider}. Run "ezcoder login" to authenticate.`);
251
- this.name = "NotLoggedInError";
252
- this.provider = provider;
253
- }
254
- }
1
+ // Moved to @prestyj/core. Shim keeps relative imports + the
2
+ // `@prestyj/cli/auth` subpath export resolving unchanged.
3
+ export { AuthStorage, NotLoggedInError } from "@prestyj/core";
255
4
  //# sourceMappingURL=auth-storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-storage.js","sourceRoot":"","sources":["../../src/core/auth-storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-storage.js","sourceRoot":"","sources":["../../src/core/auth-storage.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,0DAA0D;AAC1D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
@@ -1,29 +1,7 @@
1
- /**
2
- * Check for updates at CLI startup. Two-phase approach:
3
- *
4
- * Phase 1 (instant): If a previous background check found a newer version,
5
- * kick off a background update now. Non-blocking.
6
- *
7
- * Phase 2 (async): Fire off a background version check for the *next* startup.
8
- *
9
- * Returns a message to display, or null.
10
- */
11
- export declare function checkAndAutoUpdate(currentVersion: string): string | null;
12
- /**
13
- * Read the current state file and report whether a newer version has been
14
- * downloaded / is pending install. Used by the TUI to show a persistent
15
- * "update ready" indicator in the status row.
16
- */
17
- export declare function getPendingUpdate(currentVersion: string): {
1
+ export declare const checkAndAutoUpdate: (currentVersion: string) => string | null;
2
+ export declare const getPendingUpdate: (currentVersion: string) => {
18
3
  latestVersion: string;
19
4
  } | null;
20
- /**
21
- * Start periodic update checks during a long-running session.
22
- * Checks every hour. If an update is found, calls `onUpdate` with a message.
23
- */
24
- export declare function startPeriodicUpdateCheck(currentVersion: string, onUpdate: (message: string) => void): void;
25
- /**
26
- * Stop periodic update checks.
27
- */
28
- export declare function stopPeriodicUpdateCheck(): void;
5
+ export declare const startPeriodicUpdateCheck: (currentVersion: string, onUpdate: (message: string) => void) => void;
6
+ export declare const stopPeriodicUpdateCheck: () => void;
29
7
  //# sourceMappingURL=auto-update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../src/core/auto-update.ts"],"names":[],"mappings":"AAkIA;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqCxE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASzF;AA8BD;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAClC,IAAI,CAiCN;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAK9C"}
1
+ {"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../src/core/auto-update.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,kBAAkB,2CAA6B,CAAC;AAC7D,eAAO,MAAM,gBAAgB;;QAA2B,CAAC;AACzD,eAAO,MAAM,wBAAwB,uEAAmC,CAAC;AACzE,eAAO,MAAM,uBAAuB,YAAkC,CAAC"}
@@ -1,240 +1,15 @@
1
- import { spawn } from "node:child_process";
2
- import fs from "node:fs";
1
+ // The update engine now lives in @prestyj/core. This module pins it to
2
+ // ezcoder's npm package + state file, keeping the "ezcoder"-branded surface and
3
+ // the same exported function names so consumers/tests are unchanged.
3
4
  import path from "node:path";
4
5
  import os from "node:os";
5
- const PACKAGE_NAME = "@prestyj/cli";
6
- const REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}/latest`;
7
- const CHECK_INTERVAL_MS = 1 * 60 * 60 * 1000; // 1 hour
8
- const FETCH_TIMEOUT_MS = 10_000; // 10s — npm can be slow
9
- var PackageManager;
10
- (function (PackageManager) {
11
- PackageManager["NPM"] = "npm";
12
- PackageManager["PNPM"] = "pnpm";
13
- PackageManager["YARN"] = "yarn";
14
- PackageManager["UNKNOWN"] = "unknown";
15
- })(PackageManager || (PackageManager = {}));
16
- function getStateFilePath() {
17
- return path.join(os.homedir(), ".ezcoder", "update-state.json");
18
- }
19
- function readState() {
20
- try {
21
- const raw = fs.readFileSync(getStateFilePath(), "utf-8");
22
- return JSON.parse(raw);
23
- }
24
- catch {
25
- return null;
26
- }
27
- }
28
- function writeState(state) {
29
- try {
30
- const dir = path.dirname(getStateFilePath());
31
- fs.mkdirSync(dir, { recursive: true });
32
- fs.writeFileSync(getStateFilePath(), JSON.stringify(state));
33
- }
34
- catch {
35
- // Non-fatal
36
- }
37
- }
38
- function compareVersions(a, b) {
39
- const pa = a.split(".").map(Number);
40
- const pb = b.split(".").map(Number);
41
- for (let i = 0; i < 3; i++) {
42
- const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
43
- if (diff !== 0)
44
- return diff;
45
- }
46
- return 0;
47
- }
48
- function detectInstallInfo() {
49
- const scriptPath = (process.argv[1] ?? "").replace(/\\/g, "/");
50
- // npx — skip (ephemeral)
51
- if (scriptPath.includes("/_npx/")) {
52
- return { packageManager: PackageManager.UNKNOWN, updateCommand: null };
53
- }
54
- // pnpm global
55
- if (scriptPath.includes("/.pnpm") || scriptPath.includes("/pnpm/global")) {
56
- return {
57
- packageManager: PackageManager.PNPM,
58
- updateCommand: `pnpm add -g ${PACKAGE_NAME}@latest`,
59
- };
60
- }
61
- // yarn global
62
- if (scriptPath.includes("/.yarn/") || scriptPath.includes("/yarn/global")) {
63
- return {
64
- packageManager: PackageManager.YARN,
65
- updateCommand: `yarn global add ${PACKAGE_NAME}@latest`,
66
- };
67
- }
68
- // npm global (default)
69
- return {
70
- packageManager: PackageManager.NPM,
71
- updateCommand: `npm install -g ${PACKAGE_NAME}@latest`,
72
- };
73
- }
74
- /**
75
- * Fetch latest version from npm registry asynchronously.
76
- */
77
- async function fetchLatestVersion() {
78
- try {
79
- const controller = new AbortController();
80
- const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
81
- const response = await fetch(REGISTRY_URL, { signal: controller.signal });
82
- clearTimeout(timeout);
83
- const data = (await response.json());
84
- const version = data.version?.trim();
85
- return version && /^\d+\.\d+\.\d+/.test(version) ? version : null;
86
- }
87
- catch {
88
- return null;
89
- }
90
- }
91
- /**
92
- * Perform the update in a detached background process so it doesn't block
93
- * or interfere with the current CLI session. The update takes effect on
94
- * the next launch.
95
- */
96
- function performUpdateInBackground(command) {
97
- try {
98
- const parts = command.split(" ");
99
- const child = spawn(parts[0], parts.slice(1), {
100
- detached: true,
101
- stdio: "ignore",
102
- env: { ...process.env, npm_config_loglevel: "silent" },
103
- });
104
- child.unref();
105
- }
106
- catch {
107
- // Non-fatal — will retry next startup
108
- }
109
- }
110
- /**
111
- * Check for updates at CLI startup. Two-phase approach:
112
- *
113
- * Phase 1 (instant): If a previous background check found a newer version,
114
- * kick off a background update now. Non-blocking.
115
- *
116
- * Phase 2 (async): Fire off a background version check for the *next* startup.
117
- *
118
- * Returns a message to display, or null.
119
- */
120
- export function checkAndAutoUpdate(currentVersion) {
121
- try {
122
- const state = readState();
123
- let message = null;
124
- // Phase 1: Apply pending update from previous check
125
- if (state?.updatePending && state.latestVersion) {
126
- if (compareVersions(state.latestVersion, currentVersion) > 0) {
127
- const info = detectInstallInfo();
128
- if (info.updateCommand) {
129
- // Run update in background — takes effect next launch
130
- performUpdateInBackground(info.updateCommand);
131
- message = `Nolan just shipped ${state.latestVersion}! Installing in the background — takes effect next launch.`;
132
- writeState({
133
- ...state,
134
- lastCheckedAt: Date.now(),
135
- updatePending: false,
136
- lastUpdateAttempt: Date.now(),
137
- });
138
- }
139
- }
140
- else {
141
- // Already on latest (user may have updated manually)
142
- writeState({ ...state, updatePending: false });
143
- }
144
- }
145
- // Phase 2: Schedule background check for next startup
146
- const shouldCheck = !state || Date.now() - state.lastCheckedAt > CHECK_INTERVAL_MS;
147
- if (shouldCheck) {
148
- scheduleBackgroundCheck(currentVersion);
149
- }
150
- return message;
151
- }
152
- catch {
153
- return null;
154
- }
155
- }
156
- /**
157
- * Read the current state file and report whether a newer version has been
158
- * downloaded / is pending install. Used by the TUI to show a persistent
159
- * "update ready" indicator in the status row.
160
- */
161
- export function getPendingUpdate(currentVersion) {
162
- try {
163
- const state = readState();
164
- if (!state?.latestVersion)
165
- return null;
166
- if (compareVersions(state.latestVersion, currentVersion) <= 0)
167
- return null;
168
- return { latestVersion: state.latestVersion };
169
- }
170
- catch {
171
- return null;
172
- }
173
- }
174
- /**
175
- * Fire-and-forget async version check. Updates the state file so the
176
- * next startup knows whether an update is available.
177
- */
178
- function scheduleBackgroundCheck(currentVersion) {
179
- fetchLatestVersion()
180
- .then((latestVersion) => {
181
- const newState = {
182
- lastCheckedAt: Date.now(),
183
- latestVersion: latestVersion ?? undefined,
184
- updatePending: false,
185
- };
186
- if (latestVersion && compareVersions(latestVersion, currentVersion) > 0) {
187
- newState.updatePending = true;
188
- }
189
- writeState(newState);
190
- })
191
- .catch(() => {
192
- // Non-fatal — will retry next time
193
- });
194
- }
195
- // ── In-session periodic check ──────────────────────────────────────────
196
- let periodicTimer = null;
197
- /**
198
- * Start periodic update checks during a long-running session.
199
- * Checks every hour. If an update is found, calls `onUpdate` with a message.
200
- */
201
- export function startPeriodicUpdateCheck(currentVersion, onUpdate) {
202
- if (periodicTimer)
203
- return; // Already running
204
- periodicTimer = setInterval(() => {
205
- fetchLatestVersion()
206
- .then((latestVersion) => {
207
- if (!latestVersion)
208
- return;
209
- if (compareVersions(latestVersion, currentVersion) <= 0)
210
- return;
211
- const info = detectInstallInfo();
212
- if (!info.updateCommand)
213
- return;
214
- // Mark pending for next startup
215
- writeState({
216
- lastCheckedAt: Date.now(),
217
- latestVersion,
218
- updatePending: true,
219
- });
220
- onUpdate(`Nolan just pushed a fresh update — ${currentVersion} → ${latestVersion}! I'll grab it on next launch (or run ${info.updateCommand} if you can't wait).`);
221
- // Stop checking once we've notified
222
- stopPeriodicUpdateCheck();
223
- })
224
- .catch(() => {
225
- // Non-fatal
226
- });
227
- }, CHECK_INTERVAL_MS);
228
- // Don't keep the process alive just for update checks
229
- periodicTimer.unref();
230
- }
231
- /**
232
- * Stop periodic update checks.
233
- */
234
- export function stopPeriodicUpdateCheck() {
235
- if (periodicTimer) {
236
- clearInterval(periodicTimer);
237
- periodicTimer = null;
238
- }
239
- }
6
+ import { createAutoUpdater } from "@prestyj/core";
7
+ const updater = createAutoUpdater({
8
+ packageName: "@prestyj/cli",
9
+ stateFilePath: () => path.join(os.homedir(), ".ezcoder", "update-state.json"),
10
+ });
11
+ export const checkAndAutoUpdate = updater.checkAndAutoUpdate;
12
+ export const getPendingUpdate = updater.getPendingUpdate;
13
+ export const startPeriodicUpdateCheck = updater.startPeriodicUpdateCheck;
14
+ export const stopPeriodicUpdateCheck = updater.stopPeriodicUpdateCheck;
240
15
  //# sourceMappingURL=auto-update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../../src/core/auto-update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../../src/core/auto-update.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,gFAAgF;AAChF,qEAAqE;AACrE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,OAAO,GAAG,iBAAiB,CAAC;IAChC,WAAW,EAAE,cAAc;IAC3B,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,mBAAmB,CAAC;CAC9E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACzD,MAAM,CAAC,MAAM,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;AACzE,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC"}
@@ -1,10 +1,2 @@
1
- /**
2
- * Resolve the current Claude Code release version for spoofing the claude-cli
3
- * User-Agent on OAuth and inference requests. Cached in-memory for the process
4
- * lifetime and on disk for 24h. Falls back to a hardcoded constant if the npm
5
- * registry is unreachable and no cache exists.
6
- */
7
- export declare function getClaudeCodeVersion(): Promise<string>;
8
- /** Build the User-Agent string Anthropic's OAuth + inference edges expect. */
9
- export declare function getClaudeCliUserAgent(): Promise<string>;
1
+ export { getClaudeCodeVersion, getClaudeCliUserAgent } from "@prestyj/core";
10
2
  //# sourceMappingURL=claude-code-version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code-version.d.ts","sourceRoot":"","sources":["../../src/core/claude-code-version.ts"],"names":[],"mappings":"AAqEA;;;;;GAKG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAoC5D;AAED,8EAA8E;AAC9E,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAG7D"}
1
+ {"version":3,"file":"claude-code-version.d.ts","sourceRoot":"","sources":["../../src/core/claude-code-version.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}