@botiverse/oar 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +3 -2
  2. package/dist/contracts/account-usage.d.ts +1 -0
  3. package/dist/contracts/account-usage.d.ts.map +1 -1
  4. package/dist/contracts/installation.d.ts +13 -0
  5. package/dist/contracts/installation.d.ts.map +1 -1
  6. package/dist/contracts/login.d.ts +10 -2
  7. package/dist/contracts/login.d.ts.map +1 -1
  8. package/dist/runtimes/claude/account-usage.d.ts.map +1 -1
  9. package/dist/runtimes/claude/account-usage.js +19 -6
  10. package/dist/runtimes/claude/account-usage.js.map +1 -1
  11. package/dist/runtimes/cursor/auth-status.d.ts +15 -0
  12. package/dist/runtimes/cursor/auth-status.d.ts.map +1 -0
  13. package/dist/runtimes/cursor/auth-status.js +70 -0
  14. package/dist/runtimes/cursor/auth-status.js.map +1 -0
  15. package/dist/runtimes/cursor/index.d.ts +3 -3
  16. package/dist/runtimes/cursor/index.d.ts.map +1 -1
  17. package/dist/runtimes/cursor/index.js +5 -1
  18. package/dist/runtimes/cursor/index.js.map +1 -1
  19. package/dist/runtimes/cursor/login.d.ts +5 -0
  20. package/dist/runtimes/cursor/login.d.ts.map +1 -0
  21. package/dist/runtimes/cursor/login.js +163 -0
  22. package/dist/runtimes/cursor/login.js.map +1 -0
  23. package/dist/runtimes/cursor/sdk.d.ts +46 -0
  24. package/dist/runtimes/cursor/sdk.d.ts.map +1 -1
  25. package/dist/runtimes/cursor/sdk.js +10 -0
  26. package/dist/runtimes/cursor/sdk.js.map +1 -1
  27. package/dist/runtimes/grok/account-usage.d.ts.map +1 -1
  28. package/dist/runtimes/grok/account-usage.js +10 -5
  29. package/dist/runtimes/grok/account-usage.js.map +1 -1
  30. package/dist/runtimes/kimi/account-usage.d.ts.map +1 -1
  31. package/dist/runtimes/kimi/account-usage.js +3 -2
  32. package/dist/runtimes/kimi/account-usage.js.map +1 -1
  33. package/dist/runtimes/kimi/auth-config.d.ts +5 -2
  34. package/dist/runtimes/kimi/auth-config.d.ts.map +1 -1
  35. package/dist/runtimes/kimi/auth-config.js +9 -9
  36. package/dist/runtimes/kimi/auth-config.js.map +1 -1
  37. package/dist/runtimes/kimi/profile.d.ts.map +1 -1
  38. package/dist/runtimes/kimi/profile.js +3 -2
  39. package/dist/runtimes/kimi/profile.js.map +1 -1
  40. package/dist/shared/deadline.d.ts +6 -0
  41. package/dist/shared/deadline.d.ts.map +1 -0
  42. package/dist/shared/deadline.js +12 -0
  43. package/dist/shared/deadline.js.map +1 -0
  44. package/dist/shared/executable/diagnostics.d.ts +8 -0
  45. package/dist/shared/executable/diagnostics.d.ts.map +1 -1
  46. package/dist/shared/executable/diagnostics.js +13 -0
  47. package/dist/shared/executable/diagnostics.js.map +1 -1
  48. package/dist/shared/executable/index.d.ts +1 -1
  49. package/dist/shared/executable/index.d.ts.map +1 -1
  50. package/dist/shared/executable/index.js +1 -1
  51. package/dist/shared/executable/index.js.map +1 -1
  52. package/dist/shared/executable/resolve.d.ts +7 -0
  53. package/dist/shared/executable/resolve.d.ts.map +1 -1
  54. package/dist/shared/executable/resolve.js +9 -0
  55. package/dist/shared/executable/resolve.js.map +1 -1
  56. package/dist/shared/executable/run.js +1 -1
  57. package/dist/shared/executable/run.js.map +1 -1
  58. package/dist/shared/executable/version.d.ts.map +1 -1
  59. package/dist/shared/executable/version.js +2 -6
  60. package/dist/shared/executable/version.js.map +1 -1
  61. package/dist/shared/installation.d.ts +19 -1
  62. package/dist/shared/installation.d.ts.map +1 -1
  63. package/dist/shared/installation.js +83 -22
  64. package/dist/shared/installation.js.map +1 -1
  65. package/package.json +1 -1
package/README.md CHANGED
@@ -116,8 +116,9 @@ arrives as a `ProviderLoginInteraction` event, and a code the person pastes
116
116
  back is answered through its `manual_code` prompt and written to the
117
117
  runtime's stdin only. It never logs the current account out first, and
118
118
  `interaction.signal` cancels it. `runtime.authStatus(installation)` reads the
119
- runtime's local status query. Claude and Codex have both; Antigravity has
120
- neither, since its terms do not allow signing in through a third-party tool.
119
+ runtime's local status query. Claude, Codex and Cursor (through its SDK's
120
+ own `Cursor.auth`) have both; Antigravity has neither, since its terms do not
121
+ allow signing in through a third-party tool.
121
122
  See
122
123
  [runtime login](https://github.com/botiverse/oar/blob/main/docs/spec/login.md).
123
124
 
@@ -47,6 +47,7 @@ export type AccountUsageSnapshot = {
47
47
  readonly reason?: AccountUsageUnsupportedReason;
48
48
  };
49
49
  export interface AccountUsageReadOptions {
50
+ /** Bounds the whole read, every process it starts and request it sends included; each reader has its own default. Past it the read rejects. */
50
51
  readonly timeoutMs?: number;
51
52
  }
52
53
  export type AccountUsageReader = (installation: AvailableInstallation, options?: AccountUsageReadOptions) => Promise<AccountUsageSnapshot>;
@@ -1 +1 @@
1
- {"version":3,"file":"account-usage.d.ts","sourceRoot":"","sources":["../../src/contracts/account-usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,CAAC,MAAM,eAAe,EAAE,OAAO,MAAM,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAEvE,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iFAAiF;IACjF,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IAC/B,6KAA6K;IAC7K,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,6JAA6J;IAC7J,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,oFAAoF;AACpF,MAAM,MAAM,6BAA6B,GACrC,wBAAwB,GACxB,0BAA0B,GAC1B,uBAAuB,GACvB,0BAA0B,GAC1B,gCAAgC,GAChC,sBAAsB,GACtB,mBAAmB,CAAC;AAExB,MAAM,MAAM,wBAAwB,GAChC,mBAAmB,GACnB,qBAAqB,GACrB,eAAe,GACf,sBAAsB,CAAC;AAE3B,MAAM,MAAM,oBAAoB,GAC5B;IACE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACjD,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,CAAC,EAAE,wBAAwB,CAAC;CAC5C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,mFAAmF;IACnF,QAAQ,CAAC,MAAM,CAAC,EAAE,6BAA6B,CAAC;CACjD,CAAC;AAEN,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,kBAAkB,GAAG,CAC/B,YAAY,EAAE,qBAAqB,EACnC,OAAO,CAAC,EAAE,uBAAuB,KAC9B,OAAO,CAAC,oBAAoB,CAAC,CAAC"}
1
+ {"version":3,"file":"account-usage.d.ts","sourceRoot":"","sources":["../../src/contracts/account-usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,CAAC,MAAM,eAAe,EAAE,OAAO,MAAM,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAEvE,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iFAAiF;IACjF,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IAC/B,6KAA6K;IAC7K,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,6JAA6J;IAC7J,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,oFAAoF;AACpF,MAAM,MAAM,6BAA6B,GACrC,wBAAwB,GACxB,0BAA0B,GAC1B,uBAAuB,GACvB,0BAA0B,GAC1B,gCAAgC,GAChC,sBAAsB,GACtB,mBAAmB,CAAC;AAExB,MAAM,MAAM,wBAAwB,GAChC,mBAAmB,GACnB,qBAAqB,GACrB,eAAe,GACf,sBAAsB,CAAC;AAE3B,MAAM,MAAM,oBAAoB,GAC5B;IACE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACjD,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,CAAC,EAAE,wBAAwB,CAAC;CAC5C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,mFAAmF;IACnF,QAAQ,CAAC,MAAM,CAAC,EAAE,6BAA6B,CAAC;CACjD,CAAC;AAEN,MAAM,WAAW,uBAAuB;IACtC,+IAA+I;IAC/I,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,kBAAkB,GAAG,CAC/B,YAAY,EAAE,qBAAqB,EACnC,OAAO,CAAC,EAAE,uBAAuB,KAC9B,OAAO,CAAC,oBAAoB,CAAC,CAAC"}
@@ -4,6 +4,19 @@ export interface ExecutableInstallation {
4
4
  readonly via: "executable";
5
5
  readonly command: string;
6
6
  readonly version?: string;
7
+ /**
8
+ * The other copies of the same command on PATH after `command`, in PATH
9
+ * order: copies that never run while this one is first. Only copies on
10
+ * PATH: one installed off PATH (an npm prefix PATH does not list) is not
11
+ * among them. Paths as PATH lists them, without versions (the host can ask
12
+ * each copy for one). Entries that resolve to one file are one copy (a
13
+ * folder listed twice, `/bin` beside `/usr/bin`, a symlink to `command`),
14
+ * and a folder holds one copy, the one the shell would pick there. Present
15
+ * only when PATH found `command` and lists other copies: never when an
16
+ * `OAR_*_BIN` override names the executable or a fallback outside PATH
17
+ * found it (codex's macOS app bundle).
18
+ */
19
+ readonly shadowed?: readonly string[];
7
20
  }
8
21
  /**
9
22
  * A runtime compiled into the embedding application; availability needs no
@@ -1 +1 @@
1
- {"version":3,"file":"installation.d.ts","sourceRoot":"","sources":["../../src/contracts/installation.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;CACzB;AAED,MAAM,MAAM,qBAAqB,GAAG,sBAAsB,GAAG,mBAAmB,CAAC;AAEjF,MAAM,MAAM,oBAAoB,GAC5B,qBAAqB,GACrB;IACE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN,oGAAoG;AACpG,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC"}
1
+ {"version":3,"file":"installation.d.ts","sourceRoot":"","sources":["../../src/contracts/installation.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;CACzB;AAED,MAAM,MAAM,qBAAqB,GAAG,sBAAsB,GAAG,mBAAmB,CAAC;AAEjF,MAAM,MAAM,oBAAoB,GAC5B,qBAAqB,GACrB;IACE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN,oGAAoG;AACpG,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { AvailableInstallation } from "./installation.js";
2
2
  import type { ProviderLoginInteraction } from "./provider-auth.js";
3
+ import type { UtcInstant } from "./account-usage.js";
3
4
  /** What the runtime says about the account it is signed in to. Every field is the runtime's own word, absent when it gives none. */
4
5
  export interface LoginAccount {
5
6
  readonly email?: string;
@@ -7,6 +8,12 @@ export interface LoginAccount {
7
8
  readonly plan?: string;
8
9
  /** The runtime's name for how it is signed in (`claude.ai`, `chatgpt`, `apiKey`, ...). */
9
10
  readonly method?: string;
11
+ /**
12
+ * When the stored sign-in stops working, as the runtime reports it: a
13
+ * credential the runtime does not renew by itself (cursor's minted API
14
+ * key), after which it is logged out until the next login.
15
+ */
16
+ readonly expiresAt?: UtcInstant;
10
17
  }
11
18
  /** Why a login ended without a logged-in runtime. */
12
19
  export type LoginFailureReason = "timed_out" | "rejected" | "not_logged_in" | "interaction_failed" | "process_failed";
@@ -51,7 +58,8 @@ export interface LoginOptions {
51
58
  * - Never logs the current account out first: a login that fails, times out
52
59
  * or is cancelled leaves the previous login as it was.
53
60
  * - Aborting `interaction.signal` stops the login process with everything it
54
- * started and resolves `cancelled`. A prompt still open when the login
61
+ * started (an in-process SDK's login: its wait, and any write after it)
62
+ * and resolves `cancelled`. A prompt still open when the login
55
63
  * settles is moot; the caller closes it.
56
64
  * - Once the runtime reports success it has stored the new login: a deadline
57
65
  * or abort after that never yields `timed_out` or `cancelled`. The status
@@ -63,7 +71,7 @@ export interface LoginOptions {
63
71
  export type RuntimeLogin = (installation: AvailableInstallation, interaction: ProviderLoginInteraction, options?: LoginOptions) => Promise<LoginResult>;
64
72
  /**
65
73
  * Whether the runtime is logged in, from its own local status query.
66
- * `source` names the command that answered.
74
+ * `source` names the command (or SDK call) that answered.
67
75
  */
68
76
  export type AuthStatus = {
69
77
  readonly kind: "logged_in";
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/contracts/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAEnE,oIAAoI;AACpI,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,0FAA0F;IAC1F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qDAAqD;AACrD,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,UAAU,GACV,eAAe,GACf,oBAAoB,GACpB,gBAAgB,CAAC;AAErB,iDAAiD;AACjD,MAAM,MAAM,sBAAsB,GAC9B,0BAA0B,GAC1B,qBAAqB,CAAC;AAE1B;;;;GAIG;AACH,MAAM,MAAM,WAAW;AACrB,mHAAmH;AACjH;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,GAC/D;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AAC5F,kIAAkI;GAChI;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExG,MAAM,WAAW,YAAY;IAC3B,6GAA6G;IAC7G,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,YAAY,EAAE,qBAAqB,EACnC,WAAW,EAAE,wBAAwB,EACrC,OAAO,CAAC,EAAE,YAAY,KACnB,OAAO,CAAC,WAAW,CAAC,CAAC;AAE1B;;;GAGG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxF;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC1D,2FAA2F;GACzF;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAErF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAC7B,YAAY,EAAE,qBAAqB,EACnC,OAAO,CAAC,EAAE,iBAAiB,KACxB,OAAO,CAAC,UAAU,CAAC,CAAC"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/contracts/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,oIAAoI;AACpI,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,0FAA0F;IAC1F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;CACjC;AAED,qDAAqD;AACrD,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,UAAU,GACV,eAAe,GACf,oBAAoB,GACpB,gBAAgB,CAAC;AAErB,iDAAiD;AACjD,MAAM,MAAM,sBAAsB,GAC9B,0BAA0B,GAC1B,qBAAqB,CAAC;AAE1B;;;;GAIG;AACH,MAAM,MAAM,WAAW;AACrB,mHAAmH;AACjH;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,GAC/D;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AAC5F,kIAAkI;GAChI;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExG,MAAM,WAAW,YAAY;IAC3B,6GAA6G;IAC7G,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,YAAY,EAAE,qBAAqB,EACnC,WAAW,EAAE,wBAAwB,EACrC,OAAO,CAAC,EAAE,YAAY,KACnB,OAAO,CAAC,WAAW,CAAC,CAAC;AAE1B;;;GAGG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxF;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC1D,2FAA2F;GACzF;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAErF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAC7B,YAAY,EAAE,qBAAqB,EACnC,OAAO,CAAC,EAAE,iBAAiB,KACxB,OAAO,CAAC,UAAU,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"account-usage.d.ts","sourceRoot":"","sources":["../../../src/runtimes/claude/account-usage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAsB,MAAM,kCAAkC,CAAC;AA8BrH,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAoDzF;AAmCD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,kBAoEhC,CAAC"}
1
+ {"version":3,"file":"account-usage.d.ts","sourceRoot":"","sources":["../../../src/runtimes/claude/account-usage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAsB,MAAM,kCAAkC,CAAC;AAgCrH,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAoDzF;AA0CD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,kBAwEhC,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { runExecutable, spawnLineProcess } from "../../shared/executable/index.js";
3
+ import { assertRan } from "../../shared/executable/diagnostics.js";
4
+ import { remainingMs } from "../../shared/deadline.js";
3
5
  import { utcInstantFromDate } from "../../shared/instant.js";
4
6
  import { asNumber, asRecord, asRecordList, parseJson } from "../../shared/json.js";
5
7
  const HOUR_MS = 3_600_000;
@@ -87,17 +89,24 @@ function controlFailure(reply) {
87
89
  /**
88
90
  * A usage read must not run the user's hooks or start their MCP servers, so the
89
91
  * query process runs with --safe-mode. A CLI that lacks the flag is reported as
90
- * unsupported rather than launched without isolation. Only a successful help
91
- * probe is cached, so a transient probe failure is retried on the next read.
92
+ * unsupported rather than launched without isolation. A help probe that timed
93
+ * out or never ran is an operational failure and rejects, like the query's own
94
+ * timeout. Only a successful help probe is cached, so a failed one is retried
95
+ * on the next read.
92
96
  */
97
+ const USAGE = "Claude account usage";
93
98
  const safeModeSupport = new Map();
94
- async function supportsSafeMode(command, version) {
99
+ async function supportsSafeMode(command, version, deadline) {
95
100
  const key = `${command}\0${version ?? ""}`;
96
101
  const known = safeModeSupport.get(key);
97
102
  if (known !== undefined) {
98
103
  return known;
99
104
  }
100
- const help = await runExecutable(command, ["--help"], { env: { ...process.env, CLAUDECODE: undefined } });
105
+ const help = await runExecutable(command, ["--help"], {
106
+ env: { ...process.env, CLAUDECODE: undefined },
107
+ timeoutMs: remainingMs(deadline, USAGE),
108
+ });
109
+ assertRan(help, `Failed to run ${command} --help`);
101
110
  if (!help.ok) {
102
111
  return false;
103
112
  }
@@ -114,9 +123,13 @@ export const claudeAccountUsage = async (installation, options = {}) => {
114
123
  if (installation.via !== "executable") {
115
124
  return { kind: "unsupported", reason: "unsupported_installation" };
116
125
  }
117
- if (!await supportsSafeMode(installation.command, installation.version)) {
126
+ // One budget for the whole read, shared by the help probe and the query:
127
+ // two claude starts, each of which a slow launcher can stretch.
128
+ const deadline = Date.now() + (options.timeoutMs ?? 30_000);
129
+ if (!await supportsSafeMode(installation.command, installation.version, deadline)) {
118
130
  return { kind: "unsupported", reason: "unsupported_installation" };
119
131
  }
132
+ const queryMs = remainingMs(deadline, USAGE);
120
133
  const child = spawnLineProcess(installation.command, [
121
134
  "-p", "--input-format", "stream-json", "--output-format", "stream-json",
122
135
  "--verbose", "--no-session-persistence", "--safe-mode",
@@ -143,7 +156,7 @@ export const claudeAccountUsage = async (installation, options = {}) => {
143
156
  timedOut = true;
144
157
  pending?.resolve(null);
145
158
  child.kill();
146
- }, options.timeoutMs ?? 15_000);
159
+ }, queryMs);
147
160
  const query = async (request) => {
148
161
  if (ended || timedOut) {
149
162
  throw new Error("Claude exited or timed out before answering usage queries");
@@ -1 +1 @@
1
- {"version":3,"file":"account-usage.js","sourceRoot":"","sources":["../../../src/runtimes/claude/account-usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAmB,MAAM,sBAAsB,CAAC;AAEpG,MAAM,OAAO,GAAG,SAAS,CAAC;AAC1B,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;AAQjC,SAAS,QAAQ,CAAC,KAAa,EAAE,KAAc,EAAE,GAAe;IAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,KAAK,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1G,OAAO;QACL,KAAK;QACL,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC9C,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;QAC5C,GAAG,CAAC,GAAG,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;KACzE,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,kBAAkB,CAAC,OAAgB,EAAE,KAAc;IACjE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,IAAI,EAAE,qBAAqB,KAAK,KAAK,EAAE,CAAC;QAC1C,oEAAoE;QACpE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9D,CAAC;IACD,IAAI,IAAI,EAAE,qBAAqB,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,uEAAuE;QACvE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,KAAc,EAAE,GAAc,EAAQ,EAAE;QAClE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IACF,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC;IACvF,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7F,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,sBAAsB,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IACnH,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YACtD,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnF,2FAA2F;gBAC3F,GAAG,CAAC,iBAAiB,KAAK,CAAC,YAAY,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,gBAAgB,KAAK,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YACxH,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACjG,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,gBAAgB,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9G,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7F,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACtC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QACzC,WAAW,EAAE,iBAAiB,IAAI,CAAC,CAAC,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC;QACtF,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAiB;IACvC,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,4BAA4B,CAAC;IAC5F,IAAI,8HAA8H,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAChJ,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,iEAAiE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACnF,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAClE,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,wCAAwC,MAAM,EAAE,CAAC,CAAC;AACpE,CAAC;AAED;;;;;GAKG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,EAAmB,CAAC;AACnD,KAAK,UAAU,gBAAgB,CAAC,OAAe,EAAE,OAA2B;IAC1E,MAAM,GAAG,GAAG,GAAG,OAAO,KAAK,OAAO,IAAI,EAAE,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC1G,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7D,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACpC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAuB,KAAK,EAAE,YAAY,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE;IACzF,IAAI,YAAY,CAAC,GAAG,KAAK,YAAY,EAAE,CAAC;QACtC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC;IACrE,CAAC;IACD,IAAI,CAAC,MAAM,gBAAgB,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QACxE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC;IACrE,CAAC;IACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,YAAY,CAAC,OAAO,EAAE;QACnD,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa;QACvE,WAAW,EAAE,0BAA0B,EAAE,aAAa;KACvD,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACvD,IAAI,OAAO,GAAuE,IAAI,CAAC;IACvF,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACpB,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1C,IAAI,OAAO,EAAE,IAAI,KAAK,kBAAkB,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,EAAE,EAAE,CAAC;YACjG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;QAChB,KAAK,GAAG,IAAI,CAAC;QACb,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAC3B,KAAK,GAAG,IAAI,CAAC;QACb,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,QAAQ,GAAG,IAAI,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,KAAK,CAAC,IAAI,EAAE,CAAC;IACf,CAAC,EAAE,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,KAAK,EAAE,OAAmB,EAAuB,EAAE;QAC/D,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,EAAE,GAAG,aAAa,UAAU,EAAE,EAAE,CAAC;QACvC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,EAAqB,CAAC;QACxE,OAAO,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QAC1B,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QACzF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC;QAC5B,OAAO,GAAG,IAAI,CAAC;QACf,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,OAAO,CAAC;QACpB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QAC3D,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,OAAO,OAAO,EAAE,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YACjF,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,MAAM,KAAK,CAAC,MAAM,CAAC;IACrB,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"account-usage.js","sourceRoot":"","sources":["../../../src/runtimes/claude/account-usage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { AuthStatus, AuthStatusReader } from "../../contracts/login.js";
2
+ import { type CursorAuth, type CursorSdk } from "./sdk.js";
3
+ /**
4
+ * `Cursor.auth.status()` (SDK 1.0.35) reads the stored login
5
+ * (`~/.cursor/sdk/auth.json`) and answers `{ status: "logged-out" }`, also
6
+ * for a key past its expiry, or `{ status: "logged-in", backendUrl, email?,
7
+ * apiKeyExpiresAtMs? }`; it never returns the key. `CURSOR_API_KEY` is not
8
+ * part of it.
9
+ */
10
+ export declare function projectCursorAuthStatus(status: unknown): AuthStatus;
11
+ /** `Cursor.auth.status()` within `timeoutMs`; a failure, or no answer in time, is `unknown`. */
12
+ export declare function readCursorAuthStatus(auth: CursorAuth, timeoutMs?: number): Promise<AuthStatus>;
13
+ /** Read only: asks the SDK's `Cursor.auth.status`, never a login flow, and returns no key. */
14
+ export declare function cursorAuthStatusWith(load: () => Promise<CursorSdk>): AuthStatusReader;
15
+ //# sourceMappingURL=auth-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-status.d.ts","sourceRoot":"","sources":["../../../src/runtimes/cursor/auth-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAgB,MAAM,0BAA0B,CAAC;AAI3F,OAAO,EAAa,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAStE;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,CAgBnE;AAED,gGAAgG;AAChG,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,SAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAc/G;AAED,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,gBAAgB,CAgBrF"}
@@ -0,0 +1,70 @@
1
+ import { utcInstantFromDate } from "../../shared/instant.js";
2
+ import { asNumber, asRecord } from "../../shared/json.js";
3
+ import { errorMessage, LoginSecrets } from "../../shared/login.js";
4
+ import { loadedSdk } from "./sdk.js";
5
+ const STATUS_TIMEOUT_MS = 20_000;
6
+ const STATUS_SOURCE = "Cursor.auth.status";
7
+ function text(value) {
8
+ return typeof value === "string" && value.trim() !== "" ? value.trim() : undefined;
9
+ }
10
+ /**
11
+ * `Cursor.auth.status()` (SDK 1.0.35) reads the stored login
12
+ * (`~/.cursor/sdk/auth.json`) and answers `{ status: "logged-out" }`, also
13
+ * for a key past its expiry, or `{ status: "logged-in", backendUrl, email?,
14
+ * apiKeyExpiresAtMs? }`; it never returns the key. `CURSOR_API_KEY` is not
15
+ * part of it.
16
+ */
17
+ export function projectCursorAuthStatus(status) {
18
+ const record = asRecord(status);
19
+ if (record?.status === "logged-out") {
20
+ return { kind: "logged_out", source: STATUS_SOURCE };
21
+ }
22
+ if (record?.status !== "logged-in") {
23
+ return { kind: "unknown", detail: "Cursor.auth.status gave an answer oar cannot read", source: STATUS_SOURCE };
24
+ }
25
+ const email = text(record.email);
26
+ const expiresMs = asNumber(record.apiKeyExpiresAtMs);
27
+ const expiresAt = expiresMs === null ? null : utcInstantFromDate(new Date(expiresMs));
28
+ const account = {
29
+ ...(email === undefined ? {} : { email }),
30
+ ...(expiresAt === null ? {} : { expiresAt }),
31
+ };
32
+ return { kind: "logged_in", ...(Object.keys(account).length === 0 ? {} : { account }), source: STATUS_SOURCE };
33
+ }
34
+ /** `Cursor.auth.status()` within `timeoutMs`; a failure, or no answer in time, is `unknown`. */
35
+ export async function readCursorAuthStatus(auth, timeoutMs = STATUS_TIMEOUT_MS) {
36
+ const deadline = Promise.withResolvers();
37
+ const timer = setTimeout(() => {
38
+ deadline.reject(new Error(`Cursor.auth.status did not answer within ${String(timeoutMs)} ms`));
39
+ }, timeoutMs);
40
+ timer.unref();
41
+ try {
42
+ const status = await Promise.race([auth.status(), deadline.promise]);
43
+ return projectCursorAuthStatus(status);
44
+ }
45
+ catch (error) {
46
+ return { kind: "unknown", detail: new LoginSecrets().line(errorMessage(error)), source: STATUS_SOURCE };
47
+ }
48
+ finally {
49
+ clearTimeout(timer);
50
+ }
51
+ }
52
+ /** Read only: asks the SDK's `Cursor.auth.status`, never a login flow, and returns no key. */
53
+ export function cursorAuthStatusWith(load) {
54
+ return async (installation, options = {}) => {
55
+ if (installation.via !== "bundled") {
56
+ return { kind: "unknown", detail: "cursor's sign-in status needs the bundled @cursor/sdk" };
57
+ }
58
+ const sdk = await loadedSdk(load);
59
+ if ("failed" in sdk) {
60
+ return { kind: "unknown", detail: new LoginSecrets().line(sdk.failed) };
61
+ }
62
+ const { auth } = sdk.Cursor;
63
+ if (auth === undefined) {
64
+ return { kind: "unknown", detail: "this @cursor/sdk has no Cursor.auth; OAR needs 1.0.36" };
65
+ }
66
+ const status = await readCursorAuthStatus(auth, options.timeoutMs);
67
+ return status;
68
+ };
69
+ }
70
+ //# sourceMappingURL=auth-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-status.js","sourceRoot":"","sources":["../../../src/runtimes/cursor/auth-status.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,8 @@ export interface CursorRuntimeOptions {
11
11
  */
12
12
  readonly sdk: () => Promise<CursorSdk>;
13
13
  }
14
- /** A cursor runtime: its probe, model listing and refusals are always there. */
15
- export type CursorRuntime = Runtime & Required<Pick<Runtime, "installation" | "listModels" | "refusedSessionOptions">>;
14
+ /** A cursor runtime: its probe, model listing, login, status and refusals are always there. */
15
+ export type CursorRuntime = Runtime & Required<Pick<Runtime, "installation" | "listModels" | "login" | "authStatus" | "refusedSessionOptions">>;
16
16
  /**
17
17
  * Cursor, embedded through its official SDK (`@cursor/sdk`): the agent runs
18
18
  * in this process, the way pi does. It is not in `defaultRuntimes`, because
@@ -21,7 +21,7 @@ export type CursorRuntime = Runtime & Required<Pick<Runtime, "installation" | "l
21
21
  * (docs/design/capabilities.md#a-runtimes-own-settings). Account usage is
22
22
  * absent: the SDK's usage call is not available to every account
23
23
  * (`feature_unavailable`, probed 2026-10-03), and each run reports its own
24
- * tokens anyway.
24
+ * tokens anyway. Login and its status are the SDK's own `Cursor.auth`.
25
25
  */
26
26
  export declare function createCursorRuntime(options: CursorRuntimeOptions): CursorRuntime;
27
27
  export { projectCursorModels } from "./list-models.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtimes/cursor/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAIzE,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAG3D,MAAM,WAAW,oBAAoB;IACnC;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;CACxC;AAED,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,YAAY,GAAG,uBAAuB,CAAC,CAAC,CAAC;AAEvH;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAUhF;AAED,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtimes/cursor/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAMzE,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAG3D,MAAM,WAAW,oBAAoB;IACnC;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;CACxC;AAED,+FAA+F;AAC/F,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,uBAAuB,CAAC,CAAC,CAAC;AAEhJ;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAYhF;AAED,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,7 +1,9 @@
1
1
  import { runtimeBrands } from "../../brands.js";
2
2
  import { defineRuntime } from "../../contracts/runtime.js";
3
+ import { cursorAuthStatusWith } from "./auth-status.js";
3
4
  import { cursorInstallation } from "./installation.js";
4
5
  import { cursorListModelsWith } from "./list-models.js";
6
+ import { cursorLoginWith } from "./login.js";
5
7
  import { cursorRefusedSessionOptions } from "./model.js";
6
8
  import { cursorSdkLoader } from "./sdk.js";
7
9
  import { cursorSessionWith } from "./session.js";
@@ -13,7 +15,7 @@ import { cursorSessionWith } from "./session.js";
13
15
  * (docs/design/capabilities.md#a-runtimes-own-settings). Account usage is
14
16
  * absent: the SDK's usage call is not available to every account
15
17
  * (`feature_unavailable`, probed 2026-10-03), and each run reports its own
16
- * tokens anyway.
18
+ * tokens anyway. Login and its status are the SDK's own `Cursor.auth`.
17
19
  */
18
20
  export function createCursorRuntime(options) {
19
21
  const load = cursorSdkLoader(options.sdk);
@@ -22,6 +24,8 @@ export function createCursorRuntime(options) {
22
24
  brand: runtimeBrands.cursor,
23
25
  installation: cursorInstallation,
24
26
  listModels: cursorListModelsWith(load),
27
+ login: cursorLoginWith(load),
28
+ authStatus: cursorAuthStatusWith(load),
25
29
  session: cursorSessionWith(load),
26
30
  refusedSessionOptions: cursorRefusedSessionOptions,
27
31
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtimes/cursor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAgB,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,eAAe,EAAkB,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAiBjD;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA6B;IAC/D,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,aAAa,CAAC;QACnB,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,aAAa,CAAC,MAAM;QAC3B,YAAY,EAAE,kBAAkB;QAChC,UAAU,EAAE,oBAAoB,CAAC,IAAI,CAAC;QACtC,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC;QAChC,qBAAqB,EAAE,2BAA2B;KACnD,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtimes/cursor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAgB,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,eAAe,EAAkB,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAiBjD;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA6B;IAC/D,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,aAAa,CAAC;QACnB,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,aAAa,CAAC,MAAM;QAC3B,YAAY,EAAE,kBAAkB;QAChC,UAAU,EAAE,oBAAoB,CAAC,IAAI,CAAC;QACtC,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC;QAC5B,UAAU,EAAE,oBAAoB,CAAC,IAAI,CAAC;QACtC,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC;QAChC,qBAAqB,EAAE,2BAA2B;KACnD,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { RuntimeLogin } from "../../contracts/login.js";
2
+ import { type CursorSdk } from "./sdk.js";
3
+ /** Signs cursor in with the SDK's own `Cursor.auth.login`, relaying its URL; the key goes to the SDK's store only. */
4
+ export declare function cursorLoginWith(load: () => Promise<CursorSdk>): RuntimeLogin;
5
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/runtimes/cursor/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAI1E,OAAO,EAML,KAAK,SAAS,EACf,MAAM,UAAU,CAAC;AAiKlB,sHAAsH;AACtH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,YAAY,CAyB5E"}
@@ -0,0 +1,163 @@
1
+ import { errorMessage, LoginSecrets, loginBounds, stoppedResult } from "../../shared/login.js";
2
+ import { readCursorAuthStatus } from "./auth-status.js";
3
+ import { loadedSdk, } from "./sdk.js";
4
+ /*
5
+ * `Cursor.auth.login()` (@cursor/sdk 1.0.35, read in its bundle,
6
+ * `dist/esm/index.js`: `Ne.auth`, and `./src/agent/auth/login-flow.ts`):
7
+ *
8
+ * 1. It makes a PKCE handshake and calls `onLoginUrl(url)` at once; with
9
+ * `openBrowser: false` it opens no browser and prints nothing.
10
+ * 2. It polls `POST /auth/poll` until the sign-in in the browser completes:
11
+ * 150 attempts backing off from 1 s to 10 s, about 24 minutes. `signal`
12
+ * is checked before each attempt, goes to each fetch and wakes the
13
+ * backoff; an abort makes the login throw `Login was cancelled.`
14
+ * 3. With the session token it mints a user API key (`createUserApiKey`,
15
+ * then `getMe` for the email). This step takes no signal.
16
+ * 4. It saves `{ backendUrl, apiKey, apiKeyExpiresAtMs, email, ... }` to
17
+ * its `store`, whatever the signal says, and resolves.
18
+ *
19
+ * An abort after the poll is therefore ignored, and the key would still be
20
+ * written. So OAR hands the login a store of its own, which passes the save
21
+ * on to the SDK's own `FileCredentialStore` (`~/.cursor/sdk/auth.json`)
22
+ * while the login still waits, and refuses it once OAR has ended the login
23
+ * (cancelled, timed out, the caller failed). Whichever comes first decides:
24
+ * a save that began stands and the result is `logged_in`; an end that came
25
+ * first refuses every later save, and nothing is written. The SDK writes
26
+ * nothing before that save, so the previous login stays as it was.
27
+ */
28
+ /** Before the SDK's own poll gives up (about 24 minutes), so a deadline is `timed_out`, not the SDK's failure. */
29
+ const LOGIN_TIMEOUT_MS = 15 * 60_000;
30
+ const URL_INSTRUCTIONS = "Open this URL on any device and sign in to Cursor; the login completes on its own.";
31
+ const ENV_KEY_NOTE = "CURSOR_API_KEY is set in this environment: cursor uses it, not the stored login, until it is unset.";
32
+ /**
33
+ * The SDK resolved: its key is saved. The status decides; when it cannot
34
+ * answer (it failed, or the caller aborted) the result is `logged_in`
35
+ * without an account.
36
+ */
37
+ async function confirmed(auth, signal) {
38
+ if (signal?.aborted === true) {
39
+ return { kind: "logged_in" };
40
+ }
41
+ const status = await readCursorAuthStatus(auth);
42
+ if (status.kind === "logged_out") {
43
+ return { kind: "failed", reason: "not_logged_in", detail: "Cursor.auth.login stored a key, yet Cursor.auth.status says logged out" };
44
+ }
45
+ return status.kind === "logged_in" && status.account !== undefined ? { kind: "logged_in", account: status.account } : { kind: "logged_in" };
46
+ }
47
+ /** Runs the SDK's login; its result (the key among it) is dropped unread. */
48
+ async function sdkLogin(auth, options) {
49
+ try {
50
+ await auth.login(options);
51
+ return { kind: "resolved" };
52
+ }
53
+ catch (error) {
54
+ return { kind: "rejected", error };
55
+ }
56
+ }
57
+ async function runCursorLogin(auth, file, interaction, timeoutMs) {
58
+ const secrets = new LoginSecrets();
59
+ const flow = { phase: "waiting" };
60
+ const sdkSignal = new AbortController();
61
+ const interactionFailure = Promise.withResolvers();
62
+ /** Ends the login unless the SDK is already saving its key; true when it is ended. */
63
+ const end = () => {
64
+ if (flow.phase === "waiting") {
65
+ flow.phase = "ended";
66
+ sdkSignal.abort();
67
+ }
68
+ return flow.phase === "ended";
69
+ };
70
+ const store = {
71
+ async load() {
72
+ // The login never reads its store.
73
+ await Promise.resolve();
74
+ },
75
+ async save(credentials) {
76
+ if (flow.phase !== "waiting") {
77
+ throw new Error("the login ended before cursor stored its key; nothing was written");
78
+ }
79
+ flow.phase = "storing";
80
+ // Unread, to the SDK's own store.
81
+ await file.save(credentials);
82
+ },
83
+ async clear() {
84
+ await Promise.resolve();
85
+ throw new Error("oar's cursor login never clears the stored login");
86
+ },
87
+ };
88
+ const onLoginUrl = (url) => {
89
+ if (flow.phase !== "waiting") {
90
+ return;
91
+ }
92
+ try {
93
+ interaction.onEvent({ kind: "auth_url", url, instructions: URL_INSTRUCTIONS });
94
+ // The SDK prefers the variable over the stored login; its value is never read.
95
+ if (process.env.CURSOR_API_KEY !== undefined) {
96
+ interaction.onEvent({ kind: "info", message: ENV_KEY_NOTE });
97
+ }
98
+ }
99
+ catch (error) {
100
+ // A caller that cannot show the URL cannot finish the login.
101
+ interactionFailure.resolve({ kind: "interaction_failed", message: errorMessage(error) });
102
+ }
103
+ };
104
+ const bounds = loginBounds(interaction.signal, timeoutMs);
105
+ try {
106
+ // `onLoginUrl` runs before this returns: the SDK calls it before its first wait.
107
+ const outcome = sdkLogin(auth, { openBrowser: false, onLoginUrl, signal: sdkSignal.signal, store });
108
+ const ending = await Promise.race([
109
+ outcome,
110
+ // oxlint-disable-next-line promise/prefer-await-to-then -- the deadline and abort race the login
111
+ bounds.stopped.then((stop) => ({ kind: "stop", stop })),
112
+ interactionFailure.promise,
113
+ ]);
114
+ if (ending.kind === "resolved") {
115
+ return await confirmed(auth, interaction.signal);
116
+ }
117
+ if (ending.kind === "rejected") {
118
+ return { kind: "failed", reason: "rejected", detail: secrets.line(errorMessage(ending.error)) };
119
+ }
120
+ if (end()) {
121
+ return ending.kind === "stop"
122
+ ? stoppedResult(ending.stop, timeoutMs)
123
+ : { kind: "failed", reason: "interaction_failed", detail: secrets.line(ending.message) };
124
+ }
125
+ // The SDK was already saving its key: the new login stands unless the save fails.
126
+ const stored = await outcome;
127
+ return stored.kind === "resolved"
128
+ ? await confirmed(auth, interaction.signal)
129
+ : { kind: "failed", reason: "rejected", detail: secrets.line(errorMessage(stored.error)) };
130
+ }
131
+ finally {
132
+ end();
133
+ bounds.dispose();
134
+ }
135
+ }
136
+ /** Signs cursor in with the SDK's own `Cursor.auth.login`, relaying its URL; the key goes to the SDK's store only. */
137
+ export function cursorLoginWith(load) {
138
+ return async (installation, interaction, options = {}) => {
139
+ if (installation.via !== "bundled") {
140
+ return { kind: "unsupported", reason: "unsupported_installation", detail: "cursor signs in through the bundled @cursor/sdk" };
141
+ }
142
+ const aborted = () => interaction.signal?.aborted === true;
143
+ if (aborted()) {
144
+ return { kind: "cancelled" };
145
+ }
146
+ const sdk = await loadedSdk(load);
147
+ if ("failed" in sdk) {
148
+ return { kind: "failed", reason: "process_failed", detail: new LoginSecrets().line(sdk.failed) };
149
+ }
150
+ const { auth } = sdk.Cursor;
151
+ const Store = sdk.FileCredentialStore;
152
+ if (auth === undefined || Store === undefined) {
153
+ return { kind: "unsupported", reason: "version_unsupported", detail: "@cursor/sdk 1.0.36 is required; this one has no Cursor.auth" };
154
+ }
155
+ // The caller may have aborted while the SDK loaded.
156
+ if (aborted()) {
157
+ return { kind: "cancelled" };
158
+ }
159
+ const result = await runCursorLogin(auth, new Store(), interaction, options.timeoutMs ?? LOGIN_TIMEOUT_MS);
160
+ return result;
161
+ };
162
+ }
163
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/runtimes/cursor/login.ts"],"names":[],"mappings":"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"}