@botiverse/oar 0.21.2 → 0.22.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.
- package/README.md +11 -0
- package/dist/contracts/login.d.ts +91 -0
- package/dist/contracts/login.d.ts.map +1 -0
- package/dist/contracts/login.js +2 -0
- package/dist/contracts/login.js.map +1 -0
- package/dist/contracts/runtime.d.ts +5 -0
- package/dist/contracts/runtime.d.ts.map +1 -1
- package/dist/contracts/runtime.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/runtimes/claude/auth-status.d.ts +10 -0
- package/dist/runtimes/claude/auth-status.d.ts.map +1 -0
- package/dist/runtimes/claude/auth-status.js +47 -0
- package/dist/runtimes/claude/auth-status.js.map +1 -0
- package/dist/runtimes/claude/index.d.ts +4 -0
- package/dist/runtimes/claude/index.d.ts.map +1 -1
- package/dist/runtimes/claude/index.js +4 -0
- package/dist/runtimes/claude/index.js.map +1 -1
- package/dist/runtimes/claude/login.d.ts +6 -0
- package/dist/runtimes/claude/login.d.ts.map +1 -0
- package/dist/runtimes/claude/login.js +209 -0
- package/dist/runtimes/claude/login.js.map +1 -0
- package/dist/runtimes/codex/app-server-client.d.ts +4 -1
- package/dist/runtimes/codex/app-server-client.d.ts.map +1 -1
- package/dist/runtimes/codex/app-server-client.js +4 -4
- package/dist/runtimes/codex/app-server-client.js.map +1 -1
- package/dist/runtimes/codex/index.d.ts +3 -0
- package/dist/runtimes/codex/index.d.ts.map +1 -1
- package/dist/runtimes/codex/index.js +3 -0
- package/dist/runtimes/codex/index.js.map +1 -1
- package/dist/runtimes/codex/login.d.ts +16 -0
- package/dist/runtimes/codex/login.d.ts.map +1 -0
- package/dist/runtimes/codex/login.js +241 -0
- package/dist/runtimes/codex/login.js.map +1 -0
- package/dist/shared/executable/index.d.ts +2 -2
- package/dist/shared/executable/index.d.ts.map +1 -1
- package/dist/shared/executable/index.js +1 -1
- package/dist/shared/executable/index.js.map +1 -1
- package/dist/shared/executable/isolated.d.ts.map +1 -1
- package/dist/shared/executable/isolated.js +2 -5
- package/dist/shared/executable/isolated.js.map +1 -1
- package/dist/shared/executable/process.d.ts +25 -8
- package/dist/shared/executable/process.d.ts.map +1 -1
- package/dist/shared/executable/process.js +25 -1
- package/dist/shared/executable/process.js.map +1 -1
- package/dist/shared/executable/run.d.ts +2 -0
- package/dist/shared/executable/run.d.ts.map +1 -1
- package/dist/shared/executable/run.js +1 -0
- package/dist/shared/executable/run.js.map +1 -1
- package/dist/shared/installation.d.ts +6 -0
- package/dist/shared/installation.d.ts.map +1 -1
- package/dist/shared/installation.js +7 -2
- package/dist/shared/installation.js.map +1 -1
- package/dist/shared/login.d.ts +80 -0
- package/dist/shared/login.d.ts.map +1 -0
- package/dist/shared/login.js +211 -0
- package/dist/shared/login.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -109,6 +109,17 @@ neither, their SDK versions following oar's (Pi's SDK is a dependency,
|
|
|
109
109
|
Cursor's an exact peer dependency).
|
|
110
110
|
See [runtime updates](https://github.com/botiverse/oar/blob/main/docs/spec/update.md).
|
|
111
111
|
|
|
112
|
+
`runtime.login(installation, interaction)` logs an installation in through
|
|
113
|
+
the runtime's own login, without a terminal: the sign-in URL or device code
|
|
114
|
+
arrives as a `ProviderLoginInteraction` event, and a code the person pastes
|
|
115
|
+
back is answered through its `manual_code` prompt and written to the
|
|
116
|
+
runtime's stdin only. It never logs the current account out first, and
|
|
117
|
+
`interaction.signal` cancels it. `runtime.authStatus(installation)` reads the
|
|
118
|
+
runtime's local status query. Claude and Codex have both; Antigravity has
|
|
119
|
+
neither, since its terms do not allow signing in through a third-party tool.
|
|
120
|
+
See
|
|
121
|
+
[runtime login](https://github.com/botiverse/oar/blob/main/docs/spec/login.md).
|
|
122
|
+
|
|
112
123
|
Images go with an input through `InputOptions.images` (`{ path }` entries:
|
|
113
124
|
absolute paths to png, jpeg, gif or webp files) on prompt, steer and queue,
|
|
114
125
|
as the runtime's own image content. `session.capabilities.images` says whether
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { AvailableInstallation } from "./installation.js";
|
|
2
|
+
import type { ProviderLoginInteraction } from "./provider-auth.js";
|
|
3
|
+
/** 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
|
+
export interface LoginAccount {
|
|
5
|
+
readonly email?: string;
|
|
6
|
+
/** The runtime's plan or subscription label (`max`, `pro`, ...). */
|
|
7
|
+
readonly plan?: string;
|
|
8
|
+
/** The runtime's name for how it is signed in (`claude.ai`, `chatgpt`, `apiKey`, ...). */
|
|
9
|
+
readonly method?: string;
|
|
10
|
+
}
|
|
11
|
+
/** Why a login ended without a logged-in runtime. */
|
|
12
|
+
export type LoginFailureReason = "timed_out" | "rejected" | "not_logged_in" | "interaction_failed" | "process_failed";
|
|
13
|
+
/** Why oar cannot drive this runtime's login. */
|
|
14
|
+
export type LoginUnsupportedReason = "unsupported_installation" | "version_unsupported";
|
|
15
|
+
/**
|
|
16
|
+
* How a login ended. `failed.detail` and `unsupported.detail` are for people:
|
|
17
|
+
* one line in the runtime's own words where it gave one, with every pasted
|
|
18
|
+
* code and token shape redacted.
|
|
19
|
+
*/
|
|
20
|
+
export type LoginResult =
|
|
21
|
+
/** The runtime's own status query confirms the sign-in (or, when it cannot tell, the runtime reported success). */
|
|
22
|
+
{
|
|
23
|
+
readonly kind: "logged_in";
|
|
24
|
+
readonly account?: LoginAccount;
|
|
25
|
+
} | {
|
|
26
|
+
readonly kind: "failed";
|
|
27
|
+
readonly reason: LoginFailureReason;
|
|
28
|
+
readonly detail?: string;
|
|
29
|
+
}
|
|
30
|
+
/** `interaction.signal` aborted before the runtime reported success; the login process and everything it started were stopped. */
|
|
31
|
+
| {
|
|
32
|
+
readonly kind: "cancelled";
|
|
33
|
+
} | {
|
|
34
|
+
readonly kind: "unsupported";
|
|
35
|
+
readonly reason: LoginUnsupportedReason;
|
|
36
|
+
readonly detail?: string;
|
|
37
|
+
};
|
|
38
|
+
export interface LoginOptions {
|
|
39
|
+
/** Bound for the whole flow, the person's time in the browser included; each runtime has its own default. */
|
|
40
|
+
readonly timeoutMs?: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Signs the installation in through the runtime's own login, without a
|
|
44
|
+
* terminal. Changes the machine's credentials: oar never calls it on its own.
|
|
45
|
+
*
|
|
46
|
+
* - Events go to `interaction.onEvent`: `auth_url` and `device_code` carry
|
|
47
|
+
* what a person opens or types, `info` the runtime's guidance. When the
|
|
48
|
+
* runtime needs a code pasted back, `interaction.prompt` is asked with
|
|
49
|
+
* `kind: "manual_code"`; the answer is written to the runtime's stdin only.
|
|
50
|
+
* - Never: a token or a pasted code in an event, a result, an error or a log.
|
|
51
|
+
* - Never logs the current account out first: a login that fails, times out
|
|
52
|
+
* or is cancelled leaves the previous login as it was.
|
|
53
|
+
* - Aborting `interaction.signal` stops the login process with everything it
|
|
54
|
+
* started and resolves `cancelled`. A prompt still open when the login
|
|
55
|
+
* settles is moot; the caller closes it.
|
|
56
|
+
* - Once the runtime reports success it has stored the new login: a deadline
|
|
57
|
+
* or abort after that never yields `timed_out` or `cancelled`. The status
|
|
58
|
+
* query decides; when it cannot answer (it failed, or the caller aborted)
|
|
59
|
+
* the result is `logged_in` without an account.
|
|
60
|
+
* - Logins are not serialized: whether two may run at once is the host's
|
|
61
|
+
* policy.
|
|
62
|
+
*/
|
|
63
|
+
export type RuntimeLogin = (installation: AvailableInstallation, interaction: ProviderLoginInteraction, options?: LoginOptions) => Promise<LoginResult>;
|
|
64
|
+
/**
|
|
65
|
+
* Whether the runtime is logged in, from its own local status query.
|
|
66
|
+
* `source` names the command that answered.
|
|
67
|
+
*/
|
|
68
|
+
export type AuthStatus = {
|
|
69
|
+
readonly kind: "logged_in";
|
|
70
|
+
readonly account?: LoginAccount;
|
|
71
|
+
readonly source: string;
|
|
72
|
+
} | {
|
|
73
|
+
readonly kind: "logged_out";
|
|
74
|
+
readonly source: string;
|
|
75
|
+
}
|
|
76
|
+
/** The status query failed or gave an answer oar cannot read; never a guess either way. */
|
|
77
|
+
| {
|
|
78
|
+
readonly kind: "unknown";
|
|
79
|
+
readonly detail?: string;
|
|
80
|
+
readonly source?: string;
|
|
81
|
+
};
|
|
82
|
+
export interface AuthStatusOptions {
|
|
83
|
+
readonly timeoutMs?: number;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Cheap and read only: runs the runtime's local status query, never a login
|
|
87
|
+
* flow, and returns no secret. Hosts call it to decide whether to offer a
|
|
88
|
+
* login.
|
|
89
|
+
*/
|
|
90
|
+
export type AuthStatusReader = (installation: AvailableInstallation, options?: AuthStatusOptions) => Promise<AuthStatus>;
|
|
91
|
+
//# sourceMappingURL=login.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/contracts/login.ts"],"names":[],"mappings":""}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AuthStatusReader, RuntimeLogin } from "./login.js";
|
|
1
2
|
import type { RuntimeInventories } from "./inventory.js";
|
|
2
3
|
import type { UpdateChecker, Upgrader } from "./update.js";
|
|
3
4
|
import type { AccountUsageReader } from "./account-usage.js";
|
|
@@ -35,6 +36,10 @@ export interface Runtime extends RuntimeInventories {
|
|
|
35
36
|
readonly checkUpdate?: UpdateChecker;
|
|
36
37
|
/** Runs the runtime's own updater; changes the machine, so only on the host's explicit call. */
|
|
37
38
|
readonly upgrade?: Upgrader;
|
|
39
|
+
/** Signs the runtime in through its own login; changes the machine's credentials, so only on the host's explicit call. */
|
|
40
|
+
readonly login?: RuntimeLogin;
|
|
41
|
+
/** Read only: whether the runtime is signed in, from its local status query. */
|
|
42
|
+
readonly authStatus?: AuthStatusReader;
|
|
38
43
|
}
|
|
39
44
|
export declare function defineRuntime<const T extends Omit<Runtime, keyof RuntimeInventories | "brand"> & Partial<RuntimeInventories> & {
|
|
40
45
|
readonly brand?: RuntimeBrand;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/contracts/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,yDAAyD;AACzD,MAAM,MAAM,sBAAsB,GAAG,cAAc,GAAG,oBAAoB,GAAG,KAAK,CAAC;AAEnF;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAE9F,sDAAsD;AACtD,MAAM,WAAW,OAAQ,SAAQ,kBAAkB;IACjD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B;;;;;;;OAOG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IACvD,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC;IAClC,sEAAsE;IACtE,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC;IACrC,gGAAgG;IAChG,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/contracts/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAmB,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,yDAAyD;AACzD,MAAM,MAAM,sBAAsB,GAAG,cAAc,GAAG,oBAAoB,GAAG,KAAK,CAAC;AAEnF;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAE9F,sDAAsD;AACtD,MAAM,WAAW,OAAQ,SAAQ,kBAAkB;IACjD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B;;;;;;;OAOG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IACvD,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC;IAClC,sEAAsE;IACtE,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC;IACrC,gGAAgG;IAChG,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;IAC5B,0HAA0H;IAC1H,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAC9B,gFAAgF;IAChF,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CACxC;AAWD,wBAAgB,aAAa,CAAC,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAA;CAAE,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,kBAAkB,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAExO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/contracts/runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/contracts/runtime.ts"],"names":[],"mappings":"AA+CA,KAAK,UAAU,WAAW;IACxB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACxB,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,uBAAuB;QAC7B,MAAM,EAAE,+DAA+D;KACxE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAsI,OAAU;IAC3K,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;AACpJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export type { ProviderAuthFacade, ProviderAuthStatus, ProviderLoginEvent, Provid
|
|
|
6
6
|
export type { CatalogModel, CatalogProvider, CatalogRefreshOptions, CatalogRefreshResult, ModelCatalogFacade, } from "./contracts/model-catalog.js";
|
|
7
7
|
export type { ListModelsOptions, ListModelsResult, ModelEntry, ModelLister, } from "./contracts/list-models.js";
|
|
8
8
|
export type { UpdateCheck, UpdateChecker, UpdateCheckOptions, UpdateCheckUnavailableReason, Upgrader, UpgradeOptions, UpgradeResult, } from "./contracts/update.js";
|
|
9
|
+
export type { AuthStatus, AuthStatusOptions, AuthStatusReader, LoginAccount, LoginFailureReason, LoginOptions, LoginResult, LoginUnsupportedReason, RuntimeLogin, } from "./contracts/login.js";
|
|
9
10
|
export type { RefusableSessionOption, RefusedSessionOptions, Runtime } from "./contracts/runtime.js";
|
|
10
11
|
export type { AdapterSession, AttributionTier, ContextUsage, ControlAction, ControlEventBody, ControlOutcome, ControlResult, Cursor, Event, EventBody, EventObserver, EventsOptions, FailureClass, Frame, FrameBody, DeliverOptions, DeliverResult, DeliverWhen, InputImage, InputOptions, InputOrigin, QueryResult, ReasoningContent, RecordEnvelope, RecordKind, RejectionCode, RequestBody, RequestDirection, RequestRecord, ResponseBody, ResponseRecord, RuntimeEventBody, UserMessage, Session, SessionCapabilities, SessionEdge, SessionGraph, SessionNode, RawEventObserver, SessionOptions, RawEvent, SessionUsage, StartSession, SteerOrQueueResult, TaskEventBody, TaskStatus, TaskType, TokenTotals, ToolOutputPart, TurnOutcome, Unsubscribe, UsageReport, } from "./contracts/session.js";
|
|
11
12
|
export { defineRuntime } from "./contracts/runtime.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAQhD,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9K,YAAY,EACV,6BAA6B,EAC7B,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,UAAU,GACX,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,WAAW,GACZ,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,4BAA4B,EAC5B,QAAQ,EACR,cAAc,EACd,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,sBAAsB,EACtB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACrG,YAAY,EACV,cAAc,EACd,eAAe,EACf,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,MAAM,EACN,KAAK,EACL,SAAS,EACT,aAAa,EACb,aAAa,EACb,YAAY,EACZ,KAAK,EACL,SAAS,EACT,cAAc,EACd,aAAa,EACb,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,QAAQ,EACR,WAAW,EACX,cAAc,EACd,WAAW,EACX,WAAW,EACX,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EACL,aAAa,EACb,OAAO,EACP,UAAU,EACV,UAAU,EACV,UAAU,GACX,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEhE,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,YAAY,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACxG,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtF,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACtF,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,eAAe,iBAO1B,CAAC;AAEH,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9D,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AvailableInstallation } from "../../contracts/installation.js";
|
|
2
|
+
import type { AuthStatus, AuthStatusOptions } from "../../contracts/login.js";
|
|
3
|
+
export declare function claudeEnv(): NodeJS.ProcessEnv;
|
|
4
|
+
/** `claude auth status --json`: `{ loggedIn, authMethod, email?, subscriptionType?, ... }`, exit 0 logged in, 1 logged out. */
|
|
5
|
+
export declare function projectClaudeAuthStatus(stdout: string): AuthStatus;
|
|
6
|
+
/** `signal` (internal: the login's own) stops the query; the answer is then `unknown`. */
|
|
7
|
+
export declare function claudeAuthStatus(installation: AvailableInstallation, options?: AuthStatusOptions & {
|
|
8
|
+
readonly signal?: AbortSignal;
|
|
9
|
+
}): Promise<AuthStatus>;
|
|
10
|
+
//# sourceMappingURL=auth-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-status.d.ts","sourceRoot":"","sources":["../../../src/runtimes/claude/auth-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAgB,MAAM,0BAA0B,CAAC;AAO5F,wBAAgB,SAAS,IAAI,MAAM,CAAC,UAAU,CAG7C;AAMD,+HAA+H;AAC/H,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAiBlE;AAED,0FAA0F;AAC1F,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,qBAAqB,EACnC,OAAO,GAAE,iBAAiB,GAAG;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GAClE,OAAO,CAAC,UAAU,CAAC,CAcrB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { runExecutable } from "../../shared/executable/index.js";
|
|
2
|
+
import { asRecord, parseJson } from "../../shared/json.js";
|
|
3
|
+
const STATUS_TIMEOUT_MS = 20_000;
|
|
4
|
+
const STATUS_SOURCE = "claude auth status --json";
|
|
5
|
+
export function claudeEnv() {
|
|
6
|
+
// As for sessions: a claude started from inside a claude session must not think it is nested.
|
|
7
|
+
return { ...process.env, CLAUDECODE: undefined };
|
|
8
|
+
}
|
|
9
|
+
function text(value) {
|
|
10
|
+
return typeof value === "string" && value.trim() !== "" ? value.trim() : undefined;
|
|
11
|
+
}
|
|
12
|
+
/** `claude auth status --json`: `{ loggedIn, authMethod, email?, subscriptionType?, ... }`, exit 0 logged in, 1 logged out. */
|
|
13
|
+
export function projectClaudeAuthStatus(stdout) {
|
|
14
|
+
const status = asRecord(parseJson(stdout));
|
|
15
|
+
if (status === null || typeof status.loggedIn !== "boolean") {
|
|
16
|
+
return { kind: "unknown", detail: "claude auth status gave no loggedIn field", source: STATUS_SOURCE };
|
|
17
|
+
}
|
|
18
|
+
if (!status.loggedIn) {
|
|
19
|
+
return { kind: "logged_out", source: STATUS_SOURCE };
|
|
20
|
+
}
|
|
21
|
+
const email = text(status.email);
|
|
22
|
+
const plan = text(status.subscriptionType);
|
|
23
|
+
const method = text(status.authMethod);
|
|
24
|
+
const account = {
|
|
25
|
+
...(email === undefined ? {} : { email }),
|
|
26
|
+
...(plan === undefined ? {} : { plan }),
|
|
27
|
+
...(method === undefined ? {} : { method }),
|
|
28
|
+
};
|
|
29
|
+
return { kind: "logged_in", ...(Object.keys(account).length === 0 ? {} : { account }), source: STATUS_SOURCE };
|
|
30
|
+
}
|
|
31
|
+
/** `signal` (internal: the login's own) stops the query; the answer is then `unknown`. */
|
|
32
|
+
export async function claudeAuthStatus(installation, options = {}) {
|
|
33
|
+
if (installation.via !== "executable") {
|
|
34
|
+
return { kind: "unknown", detail: "not a machine-installed executable" };
|
|
35
|
+
}
|
|
36
|
+
const result = await runExecutable(installation.command, ["auth", "status", "--json"], {
|
|
37
|
+
env: claudeEnv(),
|
|
38
|
+
timeoutMs: options.timeoutMs ?? STATUS_TIMEOUT_MS,
|
|
39
|
+
...(options.signal === undefined ? {} : { signal: options.signal }),
|
|
40
|
+
});
|
|
41
|
+
// Exit 0 logged in, 1 logged out; anything else (a timeout, a crash, an abort) is no answer.
|
|
42
|
+
if (!result.ok && result.exitCode !== 1) {
|
|
43
|
+
return { kind: "unknown", detail: `claude auth status ended without an answer (exit ${String(result.exitCode)})`, source: STATUS_SOURCE };
|
|
44
|
+
}
|
|
45
|
+
return projectClaudeAuthStatus(result.stdout);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=auth-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-status.js","sourceRoot":"","sources":["../../../src/runtimes/claude/auth-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { claudeAuthStatus } from "./auth-status.js";
|
|
2
|
+
import { claudeLogin } from "./login.js";
|
|
1
3
|
import { claudeUpgrade } from "./update.js";
|
|
2
4
|
export declare const claudeRuntime: {
|
|
3
5
|
readonly id: "claude";
|
|
@@ -13,6 +15,8 @@ export declare const claudeRuntime: {
|
|
|
13
15
|
readonly listModels: import("../../index.js").ModelLister;
|
|
14
16
|
readonly checkUpdate: import("../../index.js").UpdateChecker;
|
|
15
17
|
readonly upgrade: typeof claudeUpgrade;
|
|
18
|
+
readonly login: typeof claudeLogin;
|
|
19
|
+
readonly authStatus: typeof claudeAuthStatus;
|
|
16
20
|
readonly session: import("../../index.js").StartSession;
|
|
17
21
|
} & import("../../index.js").RuntimeInventories & {
|
|
18
22
|
readonly brand: import("../../brands.js").RuntimeBrand;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtimes/claude/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtimes/claude/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIzC,OAAO,EAAqB,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/D,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;CAexB,CAAC;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { runtimeBrands } from "../../brands.js";
|
|
2
2
|
import { claudeSkills, claudeMcpServers, claudeTools } from "./inventory.js";
|
|
3
3
|
import { defineRuntime } from "../../contracts/runtime.js";
|
|
4
|
+
import { claudeAuthStatus } from "./auth-status.js";
|
|
5
|
+
import { claudeLogin } from "./login.js";
|
|
4
6
|
import { claudeAccountUsage } from "./account-usage.js";
|
|
5
7
|
import { claudeInstallation } from "./installation.js";
|
|
6
8
|
import { claudeListModels } from "./list-models.js";
|
|
@@ -17,6 +19,8 @@ export const claudeRuntime = defineRuntime({
|
|
|
17
19
|
listModels: claudeListModels,
|
|
18
20
|
checkUpdate: claudeCheckUpdate,
|
|
19
21
|
upgrade: claudeUpgrade,
|
|
22
|
+
login: claudeLogin,
|
|
23
|
+
authStatus: claudeAuthStatus,
|
|
20
24
|
session: claudeSession,
|
|
21
25
|
});
|
|
22
26
|
export { claudeAccountUsage } from "./account-usage.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtimes/claude/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;IACzC,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,aAAa,CAAC,MAAM;IAC3B,MAAM,EAAE,YAAY;IACpB,UAAU,EAAE,gBAAgB;IAC5B,KAAK,EAAE,WAAW;IAElB,YAAY,EAAE,kBAAkB;IAChC,YAAY,EAAE,kBAAkB;IAChC,UAAU,EAAE,gBAAgB;IAC5B,WAAW,EAAE,iBAAiB;IAC9B,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,aAAa;CACvB,CAAC,CAAC;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtimes/claude/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;IACzC,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,aAAa,CAAC,MAAM;IAC3B,MAAM,EAAE,YAAY;IACpB,UAAU,EAAE,gBAAgB;IAC5B,KAAK,EAAE,WAAW;IAElB,YAAY,EAAE,kBAAkB;IAChC,YAAY,EAAE,kBAAkB;IAChC,UAAU,EAAE,gBAAgB;IAC5B,WAAW,EAAE,iBAAiB;IAC9B,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE,gBAAgB;IAC5B,OAAO,EAAE,aAAa;CACvB,CAAC,CAAC;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AvailableInstallation } from "../../contracts/installation.js";
|
|
2
|
+
import type { LoginOptions, LoginResult } from "../../contracts/login.js";
|
|
3
|
+
import type { ProviderLoginInteraction } from "../../contracts/provider-auth.js";
|
|
4
|
+
/** Signs claude in with `claude auth login`, relaying its URL and writing the pasted code to its stdin. */
|
|
5
|
+
export declare function claudeLogin(installation: AvailableInstallation, interaction: ProviderLoginInteraction, options?: LoginOptions): Promise<LoginResult>;
|
|
6
|
+
//# sourceMappingURL=login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/runtimes/claude/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AA8OjF,2GAA2G;AAC3G,wBAAsB,WAAW,CAC/B,YAAY,EAAE,qBAAqB,EACnC,WAAW,EAAE,wBAAwB,EACrC,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CAUtB"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { errorMessage, LoginSecrets, loginBounds, loginExecutable, spawnLoginProcess, stoppedResult, } from "../../shared/login.js";
|
|
2
|
+
import { claudeAuthStatus, claudeEnv } from "./auth-status.js";
|
|
3
|
+
/*
|
|
4
|
+
* `claude auth login` over pipes (2.1.288). It prints, on stdout:
|
|
5
|
+
*
|
|
6
|
+
* Opening browser to sign in…
|
|
7
|
+
* If the browser didn't open, visit: <url> (an OSC 8 hyperlink from 2.1.202)
|
|
8
|
+
* Paste code here if prompted > (no newline)
|
|
9
|
+
*
|
|
10
|
+
* and races two ends: the browser's redirect to its localhost listener, and a
|
|
11
|
+
* `code#state` line on stdin, which the page behind <url> shows after the
|
|
12
|
+
* sign-in. A malformed line prints `Invalid code. Please make sure the full
|
|
13
|
+
* code was copied.` to stderr and reading goes on. It ends with
|
|
14
|
+
* `Login successful.` (exit 0, after a few seconds of telemetry flushing) or
|
|
15
|
+
* a failure on stderr (exit 1): `Login failed: <message>`, or a message of
|
|
16
|
+
* its own (a suspended account, an organization or provider that disallows
|
|
17
|
+
* the login). It has no deadline of its own. Reading a pasted code arrived in
|
|
18
|
+
* 2.1.126; `auth login` itself in 2.1.41.
|
|
19
|
+
*/
|
|
20
|
+
const PASTE_FLOOR = "2.1.126";
|
|
21
|
+
const LOGIN_TIMEOUT_MS = 15 * 60_000;
|
|
22
|
+
const URL_LINE = /If the browser didn't open, visit:\s*(\S+)/u;
|
|
23
|
+
const PASTE_PROMPT = /Paste code here if prompted\s*>/u;
|
|
24
|
+
/** At the start of a stderr line only: `Login failed: Invalid code verifier` is a failure, not a retry. */
|
|
25
|
+
const INVALID_CODE = /^Invalid code\b/u;
|
|
26
|
+
const SUCCESS = /Login successful\b/u;
|
|
27
|
+
const FAILURE = /Login failed:\s*(.*)$/u;
|
|
28
|
+
/**
|
|
29
|
+
* The status decides once claude has exited 0 or reported success. A query
|
|
30
|
+
* that cannot answer (it failed, or the caller aborted) leaves claude's own
|
|
31
|
+
* report: a success it printed is `logged_in`, an exit 0 without one is not.
|
|
32
|
+
*/
|
|
33
|
+
async function confirmed(installation, signal, reportedSuccess) {
|
|
34
|
+
const status = signal?.aborted === true
|
|
35
|
+
? undefined
|
|
36
|
+
: await claudeAuthStatus(installation, signal === undefined ? {} : { signal });
|
|
37
|
+
if (status?.kind === "logged_in") {
|
|
38
|
+
return { kind: "logged_in", ...(status.account === undefined ? {} : { account: status.account }) };
|
|
39
|
+
}
|
|
40
|
+
if (status?.kind === "logged_out") {
|
|
41
|
+
return { kind: "failed", reason: "not_logged_in", detail: "claude auth login reported success, yet claude auth status says logged out" };
|
|
42
|
+
}
|
|
43
|
+
return reportedSuccess
|
|
44
|
+
? { kind: "logged_in" }
|
|
45
|
+
: { kind: "failed", reason: "process_failed", detail: "claude auth login exited 0 without reporting success" };
|
|
46
|
+
}
|
|
47
|
+
/** A failed exit, in claude's words where it gave any. */
|
|
48
|
+
function failedExit(exit, flow, secrets) {
|
|
49
|
+
if (exit.error !== undefined) {
|
|
50
|
+
return { kind: "failed", reason: "process_failed", detail: secrets.line(exit.error) };
|
|
51
|
+
}
|
|
52
|
+
if (flow.failure !== undefined) {
|
|
53
|
+
return { kind: "failed", reason: "rejected", detail: secrets.line(flow.failure) };
|
|
54
|
+
}
|
|
55
|
+
// claude exits 1 for a failure it reports, also in words other than `Login failed:`.
|
|
56
|
+
if (exit.exitCode === 1 && flow.lastStderr !== undefined) {
|
|
57
|
+
return { kind: "failed", reason: "rejected", detail: secrets.line(flow.lastStderr) };
|
|
58
|
+
}
|
|
59
|
+
const ended = exit.exitCode === null ? `signal ${exit.signal ?? "unknown"}` : `code ${String(exit.exitCode)}`;
|
|
60
|
+
return {
|
|
61
|
+
kind: "failed",
|
|
62
|
+
reason: "process_failed",
|
|
63
|
+
detail: flow.lastStderr === undefined ? `claude auth login exited with ${ended}` : secrets.line(flow.lastStderr),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async function runClaudeLogin(installation, command, interaction, timeoutMs) {
|
|
67
|
+
const secrets = new LoginSecrets();
|
|
68
|
+
const interactionFailure = Promise.withResolvers();
|
|
69
|
+
const flow = {
|
|
70
|
+
urlSent: false, pasteOffered: false, promptOpen: false, settled: false, reportedSuccess: false, failure: undefined, lastStderr: undefined,
|
|
71
|
+
};
|
|
72
|
+
let child = null;
|
|
73
|
+
const ended = () => flow.settled;
|
|
74
|
+
/** The caller failed: settled at once, so no answer still in flight reaches claude. */
|
|
75
|
+
const interactionFailed = (error) => {
|
|
76
|
+
flow.settled = true;
|
|
77
|
+
interactionFailure.resolve({ kind: "interaction_failed", message: errorMessage(error) });
|
|
78
|
+
};
|
|
79
|
+
const ask = async (message) => {
|
|
80
|
+
if (flow.promptOpen || flow.settled) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
flow.promptOpen = true;
|
|
84
|
+
let answer = "";
|
|
85
|
+
try {
|
|
86
|
+
answer = await interaction.prompt({ kind: "manual_code", message, placeholder: "code#state" });
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
// A prompt the caller gave up on because it aborted is a cancellation, which the bounds report.
|
|
90
|
+
if (interaction.signal?.aborted !== true) {
|
|
91
|
+
interactionFailed(error);
|
|
92
|
+
}
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
flow.promptOpen = false;
|
|
97
|
+
}
|
|
98
|
+
// The code has no whitespace; a pasted line break must not become a second attempt.
|
|
99
|
+
const code = answer.replaceAll(/\s+/gu, "");
|
|
100
|
+
// Read after the wait: the login may have ended while the caller answered.
|
|
101
|
+
if (ended()) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (code === "") {
|
|
105
|
+
await ask("No code was entered. Paste the code shown after signing in");
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// The authorization code is the secret part; the state after `#` is already in the sign-in URL.
|
|
109
|
+
secrets.add(code);
|
|
110
|
+
secrets.add(code.split("#")[0] ?? code);
|
|
111
|
+
// Only ever to claude's stdin: never an event, a result or an error.
|
|
112
|
+
child?.write(`${code}\n`);
|
|
113
|
+
};
|
|
114
|
+
const offerPaste = () => {
|
|
115
|
+
if (!flow.pasteOffered) {
|
|
116
|
+
flow.pasteOffered = true;
|
|
117
|
+
void ask("Paste the code shown after signing in");
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
try {
|
|
121
|
+
child = spawnLoginProcess(command, ["auth", "login"], claudeEnv(), {
|
|
122
|
+
onLine(line, stream) {
|
|
123
|
+
const url = URL_LINE.exec(line)?.[1];
|
|
124
|
+
if (url !== undefined && !flow.urlSent) {
|
|
125
|
+
flow.urlSent = true;
|
|
126
|
+
try {
|
|
127
|
+
interaction.onEvent({ kind: "auth_url", url, instructions: "Open this URL and sign in; if the page then shows a code, paste it back." });
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
// A caller that cannot show the URL cannot finish the login.
|
|
131
|
+
interactionFailed(error);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (PASTE_PROMPT.test(line)) {
|
|
135
|
+
offerPaste();
|
|
136
|
+
}
|
|
137
|
+
if (stream === "stderr") {
|
|
138
|
+
flow.lastStderr = line;
|
|
139
|
+
if (INVALID_CODE.test(line)) {
|
|
140
|
+
void ask("That code was not accepted. Paste the full code shown after signing in");
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Unanchored: with no echo of the pasted line, claude's next words continue the prompt's line.
|
|
144
|
+
if (SUCCESS.test(line)) {
|
|
145
|
+
flow.reportedSuccess = true;
|
|
146
|
+
}
|
|
147
|
+
const failed = FAILURE.exec(line)?.[1];
|
|
148
|
+
if (failed !== undefined) {
|
|
149
|
+
flow.failure = failed;
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
onPartial(partial) {
|
|
153
|
+
if (PASTE_PROMPT.test(partial)) {
|
|
154
|
+
offerPaste();
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
return { kind: "failed", reason: "process_failed", detail: secrets.line(errorMessage(error)) };
|
|
161
|
+
}
|
|
162
|
+
const bounds = loginBounds(interaction.signal, timeoutMs);
|
|
163
|
+
try {
|
|
164
|
+
const ending = await Promise.race([
|
|
165
|
+
// oxlint-disable-next-line promise/prefer-await-to-then -- racing three endings
|
|
166
|
+
child.exited.then((exit) => ({ kind: "exit", exit })),
|
|
167
|
+
// oxlint-disable-next-line promise/prefer-await-to-then -- racing three endings
|
|
168
|
+
bounds.stopped.then((stop) => ({ kind: "stop", stop })),
|
|
169
|
+
interactionFailure.promise,
|
|
170
|
+
]);
|
|
171
|
+
flow.settled = true;
|
|
172
|
+
if (ending.kind !== "exit") {
|
|
173
|
+
child.stop();
|
|
174
|
+
await child.exited;
|
|
175
|
+
}
|
|
176
|
+
// After `Login successful.` the new login is stored; a stop or an odd exit while claude flushes does not undo it.
|
|
177
|
+
if (flow.reportedSuccess) {
|
|
178
|
+
return await confirmed(installation, interaction.signal, true);
|
|
179
|
+
}
|
|
180
|
+
switch (ending.kind) {
|
|
181
|
+
case "stop":
|
|
182
|
+
return stoppedResult(ending.stop, timeoutMs);
|
|
183
|
+
case "interaction_failed":
|
|
184
|
+
return { kind: "failed", reason: "interaction_failed", detail: secrets.line(ending.message) };
|
|
185
|
+
case "exit":
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
return ending.exit.exitCode === 0 && ending.exit.error === undefined
|
|
189
|
+
? await confirmed(installation, interaction.signal, false)
|
|
190
|
+
: failedExit(ending.exit, flow, secrets);
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
flow.settled = true;
|
|
194
|
+
bounds.dispose();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/** Signs claude in with `claude auth login`, relaying its URL and writing the pasted code to its stdin. */
|
|
198
|
+
export async function claudeLogin(installation, interaction, options = {}) {
|
|
199
|
+
const target = loginExecutable(installation, "claude", PASTE_FLOOR);
|
|
200
|
+
if (target.kind === "settled") {
|
|
201
|
+
return target.result;
|
|
202
|
+
}
|
|
203
|
+
if (interaction.signal?.aborted === true) {
|
|
204
|
+
return { kind: "cancelled" };
|
|
205
|
+
}
|
|
206
|
+
const result = await runClaudeLogin(installation, target.installation.command, interaction, options.timeoutMs ?? LOGIN_TIMEOUT_MS);
|
|
207
|
+
return result;
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/runtimes/claude/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type LineProcessOptions } from "../../shared/executable/index.js";
|
|
1
2
|
import { type JsonRecord } from "../../shared/json.js";
|
|
2
3
|
/**
|
|
3
4
|
* Minimal persistent JSON-RPC client over codex app-server's stdio JSONL
|
|
@@ -48,5 +49,7 @@ export interface AppServerClient {
|
|
|
48
49
|
onExit(handler: (code: number | null) => void): void;
|
|
49
50
|
kill(): void;
|
|
50
51
|
}
|
|
51
|
-
|
|
52
|
+
/** How the app-server process is handled: whether its stderr may reach the host's, and whether a kill takes its Windows process tree. */
|
|
53
|
+
export type AppServerProcessOptions = Pick<LineProcessOptions, "inheritStderr" | "killTree">;
|
|
54
|
+
export declare function startAppServerClient(command: string, env?: Readonly<Record<string, string>>, configOverrides?: Readonly<Record<string, string>>, cwd?: string, processOptions?: AppServerProcessOptions): AppServerClient;
|
|
52
55
|
//# sourceMappingURL=app-server-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-server-client.d.ts","sourceRoot":"","sources":["../../../src/runtimes/codex/app-server-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app-server-client.d.ts","sourceRoot":"","sources":["../../../src/runtimes/codex/app-server-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAE7F,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAG5E;;;;GAIG;AACH,gFAAgF;AAChF,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACtE,QAAQ,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CACpF;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5G,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACjD;;;;;;;;OAQG;IACH,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC1C;;;;;;OAMG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IACrD,IAAI,IAAI,IAAI,CAAC;CACd;AAQD,yIAAyI;AACzI,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,kBAAkB,EAAE,eAAe,GAAG,UAAU,CAAC,CAAC;AAE7F,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,eAAe,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,EACtD,GAAG,CAAC,EAAE,MAAM,EACZ,cAAc,GAAE,uBAA4B,GAC3C,eAAe,CAIjB"}
|
|
@@ -2,17 +2,17 @@ import { spawnLineProcess } from "../../shared/executable/index.js";
|
|
|
2
2
|
import { processFailure } from "../../shared/executable/diagnostics.js";
|
|
3
3
|
import { asRecord, parseJson } from "../../shared/json.js";
|
|
4
4
|
import { coordinateHomeInitialization } from "./home-initialization.js";
|
|
5
|
-
export function startAppServerClient(command, env, configOverrides = {}, cwd) {
|
|
5
|
+
export function startAppServerClient(command, env, configOverrides = {}, cwd, processOptions = {}) {
|
|
6
6
|
const environment = { ...process.env, ...env };
|
|
7
7
|
const directory = cwd ?? process.cwd();
|
|
8
|
-
return coordinateHomeInitialization(environment, directory, () => createAppServerClient(command, environment, configOverrides, directory));
|
|
8
|
+
return coordinateHomeInitialization(environment, directory, () => createAppServerClient(command, environment, configOverrides, directory, processOptions));
|
|
9
9
|
}
|
|
10
|
-
function createAppServerClient(command, env, configOverrides, cwd) {
|
|
10
|
+
function createAppServerClient(command, env, configOverrides, cwd, processOptions) {
|
|
11
11
|
// -c KEY=VALUE injects config at launch. This is the ONLY seam that reaches
|
|
12
12
|
// codex's exec tool: thread/start.sandboxMode does not (pinned on a real
|
|
13
13
|
// login: thread param honored for its own turns but exec follows config).
|
|
14
14
|
const overrideArgs = Object.entries(configOverrides).flatMap(([key, value]) => ["-c", `${key}=${value}`]);
|
|
15
|
-
const child = spawnLineProcess(command, ["app-server", ...overrideArgs, "--listen", "stdio://"], { cwd, env });
|
|
15
|
+
const child = spawnLineProcess(command, ["app-server", ...overrideArgs, "--listen", "stdio://"], { cwd, env, ...processOptions });
|
|
16
16
|
// Session initialization observes spawn failures through its pending RPC.
|
|
17
17
|
// Mark this parallel promise handled while preserving its rejection for
|
|
18
18
|
// callers that explicitly await spawned.
|