@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,278 +1,3 @@
1
- /**
2
- * Kimi Code OAuth Device Authorization Grant (RFC 8628).
3
- *
4
- * Mirrors MoonshotAI/kimi-code's managed-auth flow. Three form-encoded
5
- * POST endpoints against the OAuth host (default `https://auth.kimi.com`):
6
- *
7
- * - `/api/oauth/device_authorization` (client_id) → device + user code
8
- * - `/api/oauth/token` (grant_type=device_code) → poll until authorized
9
- * - `/api/oauth/token` (grant_type=refresh_token) → refresh access token
10
- *
11
- * Unlike Anthropic/OpenAI/Gemini (browser-redirect PKCE), this is a
12
- * device-code/poll flow: we show the user a URL + code, they authorize in a
13
- * browser on any device, and we poll for the token.
14
- *
15
- * After login the issued token is used against the managed coding API
16
- * (`https://api.kimi.com/coding/v1`, distinct from the `api.moonshot.ai`
17
- * API-key endpoint) via `Authorization: Bearer <access_token>`. We persist
18
- * that base URL on the credential so the runtime routes there automatically.
19
- */
20
- import { execFileSync } from "node:child_process";
21
- import { randomUUID } from "node:crypto";
22
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
23
- import { arch, hostname, release, type } from "node:os";
24
- import path from "node:path";
25
- import { getAppPaths } from "../../config.js";
26
- /** Public OAuth client id registered by Kimi Code (no client secret / PKCE). */
27
- const CLIENT_ID = "17e5f671-d194-4dfb-9706-5516cb48c098";
28
- const DEFAULT_OAUTH_HOST = "https://auth.kimi.com";
29
- const DEFAULT_CODING_BASE_URL = "https://api.kimi.com/coding/v1";
30
- /** Platform identifier Kimi Code reports for the device flow. */
31
- const KIMI_PLATFORM = "kimi_code_cli";
32
- // Must match (or exceed) the current published `kimi-code` CLI version. The
33
- // managed coding endpoint gates on the `kimi-code-cli` client identity and
34
- // REJECTS versions below its expected minimum with a 403 "only available for
35
- // Coding Agents". Keep aligned with the latest npm `kimi-code` release;
36
- // overridable via KIMI_CODE_VERSION.
37
- const DEFAULT_KIMI_VERSION = "1.0.11";
38
- /** Local wall-clock budget for the whole device flow (15 min, matches Kimi). */
39
- const DEVICE_TIMEOUT_MS = 15 * 60 * 1000;
40
- function oauthHost() {
41
- const host = process.env.KIMI_CODE_OAUTH_HOST ?? process.env.KIMI_OAUTH_HOST ?? DEFAULT_OAUTH_HOST;
42
- return host.replace(/\/+$/, "");
43
- }
44
- /** Managed coding API base URL the issued OAuth token is used against. */
45
- export function kimiCodeBaseUrl() {
46
- return (process.env.KIMI_CODE_BASE_URL ?? DEFAULT_CODING_BASE_URL).replace(/\/+$/, "");
47
- }
48
- function kimiVersion() {
49
- const v = process.env.KIMI_CODE_VERSION ?? DEFAULT_KIMI_VERSION;
50
- return asciiHeader(v, DEFAULT_KIMI_VERSION);
51
- }
52
- function asciiHeader(value, fallback = "unknown") {
53
- const cleaned = value.replace(/[^\u0020-\u007E]/g, "").trim();
54
- return cleaned.length > 0 ? cleaned : fallback;
55
- }
56
- function macOsProductVersion() {
57
- try {
58
- const version = execFileSync("/usr/bin/sw_vers", ["-productVersion"], {
59
- encoding: "utf-8",
60
- timeout: 1000,
61
- }).trim();
62
- return version.length > 0 ? version : undefined;
63
- }
64
- catch {
65
- return undefined;
66
- }
67
- }
68
- function deviceModel() {
69
- const os = type();
70
- const version = release();
71
- const osArch = arch();
72
- if (os === "Darwin")
73
- return `macOS ${macOsProductVersion() ?? version} ${osArch}`;
74
- if (os === "Windows_NT")
75
- return `Windows ${version} ${osArch}`;
76
- return `${os} ${version} ${osArch}`.trim();
77
- }
78
- /** Stable per-machine device id, persisted under the ezcoder config dir. */
79
- function deviceId() {
80
- const idPath = path.join(getAppPaths().agentDir, "kimi_device_id");
81
- if (existsSync(idPath)) {
82
- try {
83
- const text = readFileSync(idPath, "utf-8").trim();
84
- if (text.length > 0)
85
- return text;
86
- }
87
- catch {
88
- // fall through to regenerate
89
- }
90
- }
91
- const id = randomUUID();
92
- try {
93
- mkdirSync(getAppPaths().agentDir, { recursive: true, mode: 0o700 });
94
- writeFileSync(idPath, id, { encoding: "utf-8", mode: 0o600 });
95
- }
96
- catch {
97
- // best-effort: in-memory id still works for this run
98
- }
99
- return id;
100
- }
101
- function deviceHeaders() {
102
- return {
103
- "X-Msh-Platform": KIMI_PLATFORM,
104
- "X-Msh-Version": kimiVersion(),
105
- "X-Msh-Device-Name": asciiHeader(hostname()),
106
- "X-Msh-Device-Model": asciiHeader(deviceModel()),
107
- "X-Msh-Os-Version": asciiHeader(release()),
108
- "X-Msh-Device-Id": deviceId(),
109
- };
110
- }
111
- /**
112
- * Headers the Kimi For Coding API requires on every model request. The
113
- * managed endpoint gates access to recognized coding agents: requests must
114
- * carry a `kimi_code_cli` platform identity and matching `User-Agent`, or the
115
- * server rejects with "only available for Coding Agents". Attach these to the
116
- * inference client's default headers whenever the Kimi OAuth token is used.
117
- */
118
- export function kimiCodingHeaders() {
119
- return {
120
- "User-Agent": `kimi-code-cli/${kimiVersion()}`,
121
- ...deviceHeaders(),
122
- };
123
- }
124
- /**
125
- * True if `baseUrl` targets the Kimi For Coding managed endpoint (the URL
126
- * persisted on Kimi OAuth credentials). Callers use this to decide whether to
127
- * attach `kimiCodingHeaders()` — the Moonshot API-key path uses a different
128
- * host and must NOT receive the coding-agent identity headers.
129
- */
130
- export function isKimiCodingEndpoint(baseUrl) {
131
- if (typeof baseUrl !== "string" || baseUrl.length === 0)
132
- return false;
133
- const normalized = baseUrl.replace(/\/+$/, "");
134
- return normalized === kimiCodeBaseUrl() || /(^|\.)kimi\.com/i.test(normalized);
135
- }
136
- async function postForm(endpoint, params) {
137
- const response = await fetch(`${oauthHost()}${endpoint}`, {
138
- method: "POST",
139
- headers: {
140
- ...deviceHeaders(),
141
- "Content-Type": "application/x-www-form-urlencoded",
142
- Accept: "application/json",
143
- },
144
- body: new URLSearchParams(params).toString(),
145
- });
146
- let data = {};
147
- try {
148
- const parsed = await response.json();
149
- if (parsed && typeof parsed === "object")
150
- data = parsed;
151
- }
152
- catch {
153
- // non-JSON response — interpret by status
154
- }
155
- return { status: response.status, data };
156
- }
157
- function errorDetail(data) {
158
- const desc = data.error_description ?? data.message ?? data.error;
159
- return typeof desc === "string" && desc.length > 0 ? desc : "unknown error";
160
- }
161
- function credsFromTokenResponse(data) {
162
- const accessToken = data.access_token;
163
- const refreshToken = data.refresh_token;
164
- const expiresIn = Number(data.expires_in);
165
- if (typeof accessToken !== "string" || accessToken.length === 0) {
166
- throw new Error("Kimi OAuth response missing access_token.");
167
- }
168
- if (typeof refreshToken !== "string" || refreshToken.length === 0) {
169
- throw new Error("Kimi OAuth response missing refresh_token.");
170
- }
171
- if (!Number.isFinite(expiresIn) || expiresIn <= 0) {
172
- throw new Error("Kimi OAuth response missing or invalid expires_in.");
173
- }
174
- return {
175
- accessToken,
176
- refreshToken,
177
- expiresAt: Date.now() + expiresIn * 1000,
178
- baseUrl: kimiCodeBaseUrl(),
179
- };
180
- }
181
- async function requestDeviceAuthorization() {
182
- const { status, data } = await postForm("/api/oauth/device_authorization", {
183
- client_id: CLIENT_ID,
184
- });
185
- if (status !== 200) {
186
- throw new Error(`Kimi device authorization failed (${status}): ${errorDetail(data)}`);
187
- }
188
- const userCode = data.user_code;
189
- const deviceCode = data.device_code;
190
- const verificationUriComplete = data.verification_uri_complete;
191
- if (typeof userCode !== "string" || typeof deviceCode !== "string") {
192
- throw new Error("Kimi device authorization response missing user_code/device_code.");
193
- }
194
- return {
195
- userCode,
196
- deviceCode,
197
- verificationUri: typeof data.verification_uri === "string" ? data.verification_uri : "",
198
- verificationUriComplete: typeof verificationUriComplete === "string" ? verificationUriComplete : "",
199
- interval: Number(data.interval ?? 5) || 5,
200
- };
201
- }
202
- async function pollDeviceToken(deviceCode) {
203
- const { status, data } = await postForm("/api/oauth/token", {
204
- client_id: CLIENT_ID,
205
- device_code: deviceCode,
206
- grant_type: "urn:ietf:params:oauth:grant-type:device_code",
207
- });
208
- if (status === 200 && typeof data.access_token === "string") {
209
- return { kind: "success", creds: credsFromTokenResponse(data) };
210
- }
211
- if (status >= 500) {
212
- throw new Error(`Kimi token polling server error (${status}): ${errorDetail(data)}`);
213
- }
214
- const errorCode = typeof data.error === "string" ? data.error : "unknown_error";
215
- switch (errorCode) {
216
- case "authorization_pending":
217
- return { kind: "pending" };
218
- case "slow_down":
219
- return { kind: "slow_down" };
220
- case "expired_token":
221
- return { kind: "expired" };
222
- case "access_denied":
223
- return { kind: "denied" };
224
- default:
225
- throw new Error(`Kimi token polling failed (${status}): ${errorDetail(data)}`);
226
- }
227
- }
228
- function sleep(ms) {
229
- return new Promise((resolve) => {
230
- setTimeout(resolve, ms);
231
- });
232
- }
233
- /**
234
- * Drive the Kimi device-code flow end-to-end. Shows the verification URL +
235
- * user code via callbacks, opens the browser, and polls until the user
236
- * authorizes (or a 15-minute local timeout elapses).
237
- */
238
- export async function loginKimi(callbacks) {
239
- const auth = await requestDeviceAuthorization();
240
- callbacks.onStatus(`Visit ${auth.verificationUri || auth.verificationUriComplete} and enter code: ${auth.userCode}`);
241
- callbacks.onOpenUrl(auth.verificationUriComplete || auth.verificationUri);
242
- callbacks.onStatus("Waiting for you to authorize in the browser...");
243
- const deadline = Date.now() + DEVICE_TIMEOUT_MS;
244
- let interval = Math.max(auth.interval, 1);
245
- while (Date.now() < deadline) {
246
- await sleep(interval * 1000);
247
- const result = await pollDeviceToken(auth.deviceCode);
248
- if (result.kind === "success")
249
- return result.creds;
250
- if (result.kind === "denied") {
251
- throw new Error("Kimi authorization was denied.");
252
- }
253
- if (result.kind === "expired") {
254
- throw new Error("Kimi device code expired. Please run login again.");
255
- }
256
- if (result.kind === "slow_down") {
257
- interval += 5;
258
- }
259
- // pending → keep polling
260
- }
261
- throw new Error("Kimi login timed out. Please run login again.");
262
- }
263
- /** Exchange a refresh token for a fresh Kimi access token. */
264
- export async function refreshKimiToken(refreshToken) {
265
- const { status, data } = await postForm("/api/oauth/token", {
266
- client_id: CLIENT_ID,
267
- grant_type: "refresh_token",
268
- refresh_token: refreshToken,
269
- });
270
- if (status === 200 && typeof data.access_token === "string") {
271
- return credsFromTokenResponse(data);
272
- }
273
- const errorCode = typeof data.error === "string" ? data.error : "";
274
- // Surface 401/403/invalid_grant in a shape AuthStorage's refresh-failure
275
- // detection recognizes, so dead refresh tokens get wiped for re-login.
276
- throw new Error(`Kimi token refresh failed (${status}): ${errorCode || errorDetail(data)}`);
277
- }
1
+ // Moved to @prestyj/core.
2
+ export { loginKimi, refreshKimiToken, kimiCodeBaseUrl, kimiCodingHeaders, isKimiCodingEndpoint, } from "@prestyj/core";
278
3
  //# sourceMappingURL=kimi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kimi.js","sourceRoot":"","sources":["../../../src/core/oauth/kimi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kimi.js","sourceRoot":"","sources":["../../../src/core/oauth/kimi.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAC"}
@@ -1,4 +1,2 @@
1
- import type { OAuthCredentials, OAuthLoginCallbacks } from "./types.js";
2
- export declare function loginOpenAI(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials>;
3
- export declare function refreshOpenAIToken(refreshToken: string): Promise<OAuthCredentials>;
1
+ export { loginOpenAI, refreshOpenAIToken } from "@prestyj/core";
4
2
  //# sourceMappingURL=openai.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/core/oauth/openai.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AASxE,wBAAsB,WAAW,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0C3F;AA+ID,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkCxF"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/core/oauth/openai.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
@@ -1,188 +1,3 @@
1
- import http from "node:http";
2
- import crypto from "node:crypto";
3
- import { generatePKCE } from "./pkce.js";
4
- const CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann";
5
- const AUTHORIZE_URL = "https://auth.openai.com/oauth/authorize";
6
- const TOKEN_URL = "https://auth.openai.com/oauth/token";
7
- const REDIRECT_URI = "http://localhost:1455/auth/callback";
8
- const SCOPE = "openid profile email offline_access api.connectors.read api.connectors.invoke";
9
- const JWT_CLAIM_PATH = "https://api.openai.com/auth";
10
- export async function loginOpenAI(callbacks) {
11
- const { verifier, challenge } = await generatePKCE();
12
- const state = crypto.randomBytes(16).toString("hex");
13
- const url = new URL(AUTHORIZE_URL);
14
- url.searchParams.set("response_type", "code");
15
- url.searchParams.set("client_id", CLIENT_ID);
16
- url.searchParams.set("redirect_uri", REDIRECT_URI);
17
- url.searchParams.set("scope", SCOPE);
18
- url.searchParams.set("code_challenge", challenge);
19
- url.searchParams.set("code_challenge_method", "S256");
20
- url.searchParams.set("state", state);
21
- url.searchParams.set("id_token_add_organizations", "true");
22
- url.searchParams.set("codex_cli_simplified_flow", "true");
23
- url.searchParams.set("originator", "ezcoder");
24
- let code;
25
- try {
26
- code = await loginWithServer(url.toString(), state, callbacks);
27
- }
28
- catch {
29
- // Fallback: manual code paste
30
- callbacks.onOpenUrl(url.toString());
31
- const raw = await callbacks.onPromptCode("Could not start local server. Paste the callback URL or code from the browser:");
32
- const parsed = parseAuthorizationInput(raw);
33
- if (!parsed.code) {
34
- throw new Error("No authorization code found in input.");
35
- }
36
- code = parsed.code;
37
- }
38
- const creds = await exchangeOpenAICode(code, verifier);
39
- const accountId = getAccountId(creds.accessToken);
40
- if (!accountId) {
41
- throw new Error("Failed to extract accountId from OpenAI token.");
42
- }
43
- creds.accountId = accountId;
44
- return creds;
45
- }
46
- function parseAuthorizationInput(input) {
47
- const value = input.trim();
48
- if (!value)
49
- return {};
50
- // Full URL
51
- try {
52
- const url = new URL(value);
53
- return {
54
- code: url.searchParams.get("code") ?? undefined,
55
- state: url.searchParams.get("state") ?? undefined,
56
- };
57
- }
58
- catch {
59
- // not a URL
60
- }
61
- // code#state
62
- if (value.includes("#")) {
63
- const [code, state] = value.split("#", 2);
64
- return { code, state };
65
- }
66
- // Query string with code=
67
- if (value.includes("code=")) {
68
- const params = new URLSearchParams(value);
69
- return {
70
- code: params.get("code") ?? undefined,
71
- state: params.get("state") ?? undefined,
72
- };
73
- }
74
- // Raw code
75
- return { code: value };
76
- }
77
- function decodeJwt(token) {
78
- try {
79
- const parts = token.split(".");
80
- if (parts.length !== 3)
81
- return null;
82
- const decoded = atob(parts[1]);
83
- return JSON.parse(decoded);
84
- }
85
- catch {
86
- return null;
87
- }
88
- }
89
- function getAccountId(accessToken) {
90
- const payload = decodeJwt(accessToken);
91
- const auth = payload?.[JWT_CLAIM_PATH];
92
- const accountId = auth?.chatgpt_account_id;
93
- return typeof accountId === "string" && accountId.length > 0 ? accountId : null;
94
- }
95
- async function loginWithServer(authUrl, expectedState, callbacks) {
96
- return new Promise((resolve, reject) => {
97
- let receivedCode = null;
98
- const server = http.createServer((req, res) => {
99
- const url = new URL(req.url || "", "http://localhost");
100
- if (url.pathname !== "/auth/callback") {
101
- res.statusCode = 404;
102
- res.end("Not found");
103
- return;
104
- }
105
- if (url.searchParams.get("state") !== expectedState) {
106
- res.statusCode = 400;
107
- res.end("State mismatch");
108
- return;
109
- }
110
- receivedCode = url.searchParams.get("code");
111
- res.writeHead(200, { "Content-Type": "text/html" });
112
- res.end("<html><body><h1>Login successful!</h1><p>You can close this tab.</p></body></html>");
113
- server.close();
114
- });
115
- server.on("error", (err) => {
116
- reject(err);
117
- });
118
- server.listen(1455, "127.0.0.1", () => {
119
- callbacks.onOpenUrl(authUrl);
120
- callbacks.onStatus("Waiting for browser callback...");
121
- });
122
- const timeout = setTimeout(() => {
123
- if (!receivedCode) {
124
- server.close();
125
- }
126
- }, 120_000);
127
- timeout.unref();
128
- server.on("close", () => {
129
- clearTimeout(timeout);
130
- if (receivedCode) {
131
- resolve(receivedCode);
132
- }
133
- else {
134
- reject(new Error("Server closed without receiving code"));
135
- }
136
- });
137
- });
138
- }
139
- async function exchangeOpenAICode(code, verifier) {
140
- const response = await fetch(TOKEN_URL, {
141
- method: "POST",
142
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
143
- body: new URLSearchParams({
144
- grant_type: "authorization_code",
145
- client_id: CLIENT_ID,
146
- code,
147
- redirect_uri: REDIRECT_URI,
148
- code_verifier: verifier,
149
- }),
150
- });
151
- if (!response.ok) {
152
- const text = await response.text();
153
- throw new Error(`OpenAI token exchange failed (${response.status}): ${text}`);
154
- }
155
- const data = (await response.json());
156
- return {
157
- accessToken: data.access_token,
158
- refreshToken: data.refresh_token,
159
- expiresAt: Date.now() + data.expires_in * 1000,
160
- };
161
- }
162
- export async function refreshOpenAIToken(refreshToken) {
163
- const response = await fetch(TOKEN_URL, {
164
- method: "POST",
165
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
166
- body: new URLSearchParams({
167
- grant_type: "refresh_token",
168
- refresh_token: refreshToken,
169
- client_id: CLIENT_ID,
170
- }),
171
- });
172
- if (!response.ok) {
173
- const text = await response.text();
174
- throw new Error(`OpenAI token refresh failed (${response.status}): ${text}`);
175
- }
176
- const data = (await response.json());
177
- const creds = {
178
- accessToken: data.access_token,
179
- refreshToken: data.refresh_token,
180
- expiresAt: Date.now() + data.expires_in * 1000,
181
- };
182
- const accountId = getAccountId(creds.accessToken);
183
- if (accountId) {
184
- creds.accountId = accountId;
185
- }
186
- return creds;
187
- }
1
+ // Moved to @prestyj/core.
2
+ export { loginOpenAI, refreshOpenAIToken } from "@prestyj/core";
188
3
  //# sourceMappingURL=openai.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/core/oauth/openai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/core/oauth/openai.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
@@ -1,5 +1,2 @@
1
- export declare function generatePKCE(): Promise<{
2
- verifier: string;
3
- challenge: string;
4
- }>;
1
+ export { generatePKCE } from "@prestyj/core";
5
2
  //# sourceMappingURL=pkce.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../../../src/core/oauth/pkce.ts"],"names":[],"mappings":"AAQA,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAUrF"}
1
+ {"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../../../src/core/oauth/pkce.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
@@ -1,17 +1,3 @@
1
- function base64urlEncode(bytes) {
2
- let binary = "";
3
- for (const byte of bytes) {
4
- binary += String.fromCharCode(byte);
5
- }
6
- return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
7
- }
8
- export async function generatePKCE() {
9
- const verifierBytes = new Uint8Array(32);
10
- crypto.getRandomValues(verifierBytes);
11
- const verifier = base64urlEncode(verifierBytes);
12
- const data = new TextEncoder().encode(verifier);
13
- const hashBuffer = await crypto.subtle.digest("SHA-256", data);
14
- const challenge = base64urlEncode(new Uint8Array(hashBuffer));
15
- return { verifier, challenge };
16
- }
1
+ // Moved to @prestyj/core.
2
+ export { generatePKCE } from "@prestyj/core";
17
3
  //# sourceMappingURL=pkce.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../../src/core/oauth/pkce.ts"],"names":[],"mappings":"AAAA,SAAS,eAAe,CAAC,KAAiB;IACxC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;IAEhD,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAE9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../../src/core/oauth/pkce.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
@@ -1,14 +1,2 @@
1
- export interface OAuthCredentials {
2
- accessToken: string;
3
- refreshToken: string;
4
- expiresAt: number;
5
- accountId?: string;
6
- projectId?: string;
7
- baseUrl?: string;
8
- }
9
- export interface OAuthLoginCallbacks {
10
- onOpenUrl: (url: string) => void;
11
- onPromptCode: (message: string) => Promise<string>;
12
- onStatus: (message: string) => void;
13
- }
1
+ export type { OAuthCredentials, OAuthLoginCallbacks } from "@prestyj/core";
14
2
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/oauth/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/oauth/types.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
@@ -32,6 +32,16 @@ export declare class ProcessManager {
32
32
  constructor(ops?: ProcessManagerOps);
33
33
  start(command: string, cwd: string): Promise<StartResult>;
34
34
  readOutput(id: string, fromStart?: boolean): Promise<ReadOutputResult>;
35
+ /**
36
+ * Write input to a running background process's stdin, enabling interactive
37
+ * control (answer prompts, drive a REPL, feed a scaffolder). By default a
38
+ * newline is appended (as if the user pressed Enter). Set `eof` to close
39
+ * stdin afterwards, signalling end-of-input (Ctrl-D) to the program.
40
+ */
41
+ sendInput(id: string, input: string, opts?: {
42
+ enter?: boolean;
43
+ eof?: boolean;
44
+ }): Promise<string>;
35
45
  stop(id: string): Promise<string>;
36
46
  list(): BackgroundProcess[];
37
47
  shutdownAll(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../../src/core/process-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,SAAS,EAAqB,MAAM,oBAAoB,CAAC;AASzE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;CAC9B;AAYD,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHhC,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,QAAQ,CAAmC;gBAEtB,GAAG,GAAE,iBAAsB;IAElD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAwCzD,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgCtE,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoCvC,IAAI,IAAI,iBAAiB,EAAE;IAW3B,WAAW,IAAI,IAAI;CASpB"}
1
+ {"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../../src/core/process-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,SAAS,EAAqB,MAAM,oBAAoB,CAAC;AASzE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;CAC9B;AAYD,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHhC,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,QAAQ,CAAmC;gBAEtB,GAAG,GAAE,iBAAsB;IAElD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA8CzD,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgC5E;;;;;OAKG;IACG,SAAS,CACb,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAO,GAC5C,OAAO,CAAC,MAAM,CAAC;IAoCZ,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoCvC,IAAI,IAAI,iBAAiB,EAAE;IAW3B,WAAW,IAAI,IAAI;CASpB"}