@botiverse/oar 0.21.2 → 0.23.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 +21 -9
- package/assets/brands/NOTICE.md +3 -3
- package/assets/brands/opencode-on-dark.svg +1 -0
- package/assets/brands/opencode-on-light.svg +1 -0
- package/assets/brands/opencode.svg +1 -0
- package/dist/brands.d.ts +8 -0
- package/dist/brands.d.ts.map +1 -1
- package/dist/brands.js +8 -0
- package/dist/brands.js.map +1 -1
- 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/contracts/session.d.ts +2 -2
- package/dist/contracts/session.d.ts.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/observe/tool-activity.d.ts.map +1 -1
- package/dist/observe/tool-activity.js +6 -3
- package/dist/observe/tool-activity.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/runtimes/opencode/index.d.ts +19 -0
- package/dist/runtimes/opencode/index.d.ts.map +1 -0
- package/dist/runtimes/opencode/index.js +15 -0
- package/dist/runtimes/opencode/index.js.map +1 -0
- package/dist/runtimes/opencode/installation.d.ts +8 -0
- package/dist/runtimes/opencode/installation.d.ts.map +1 -0
- package/dist/runtimes/opencode/installation.js +14 -0
- package/dist/runtimes/opencode/installation.js.map +1 -0
- package/dist/runtimes/opencode/list-models.d.ts +15 -0
- package/dist/runtimes/opencode/list-models.d.ts.map +1 -0
- package/dist/runtimes/opencode/list-models.js +64 -0
- package/dist/runtimes/opencode/list-models.js.map +1 -0
- package/dist/runtimes/opencode/session.d.ts +11 -0
- package/dist/runtimes/opencode/session.d.ts.map +1 -0
- package/dist/runtimes/opencode/session.js +41 -0
- package/dist/runtimes/opencode/session.js.map +1 -0
- package/dist/shared/acp/profile.d.ts.map +1 -1
- package/dist/shared/acp/profile.js +8 -1
- package/dist/shared/acp/profile.js.map +1 -1
- 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
|
@@ -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.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-server-client.js","sourceRoot":"","sources":["../../../src/runtimes/codex/app-server-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"app-server-client.js","sourceRoot":"","sources":["../../../src/runtimes/codex/app-server-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { codexAuthStatus, codexLogin } from "./login.js";
|
|
1
2
|
import { codexCheckUpdate, codexUpgrade } from "./update.js";
|
|
2
3
|
export declare const codexRuntime: {
|
|
3
4
|
readonly id: "codex";
|
|
@@ -17,6 +18,8 @@ export declare const codexRuntime: {
|
|
|
17
18
|
readonly listModels: import("../../index.js").ModelLister;
|
|
18
19
|
readonly checkUpdate: typeof codexCheckUpdate;
|
|
19
20
|
readonly upgrade: typeof codexUpgrade;
|
|
21
|
+
readonly login: typeof codexLogin;
|
|
22
|
+
readonly authStatus: typeof codexAuthStatus;
|
|
20
23
|
readonly session: import("../../index.js").StartSession;
|
|
21
24
|
} & import("../../index.js").RuntimeInventories & {
|
|
22
25
|
readonly brand: import("../../brands.js").RuntimeBrand;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtimes/codex/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtimes/codex/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIzD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG7D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;CAcvB,CAAC;AAEH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { runtimeBrands } from "../../brands.js";
|
|
2
2
|
import { codexSkills, codexMcpServers, codexTools } from "./inventory.js";
|
|
3
3
|
import { defineRuntime } from "../../contracts/runtime.js";
|
|
4
|
+
import { codexAuthStatus, codexLogin } from "./login.js";
|
|
4
5
|
import { codexAccountUsage } from "./account-usage.js";
|
|
5
6
|
import { codexInstallation } from "./installation.js";
|
|
6
7
|
import { codexListModels } from "./list-models.js";
|
|
@@ -17,6 +18,8 @@ export const codexRuntime = defineRuntime({
|
|
|
17
18
|
listModels: codexListModels,
|
|
18
19
|
checkUpdate: codexCheckUpdate,
|
|
19
20
|
upgrade: codexUpgrade,
|
|
21
|
+
login: codexLogin,
|
|
22
|
+
authStatus: codexAuthStatus,
|
|
20
23
|
session: codexSession,
|
|
21
24
|
});
|
|
22
25
|
export { codexAccountUsage, projectCodexUsage } from "./account-usage.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtimes/codex/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;IACxC,EAAE,EAAE,OAAO;IACX,KAAK,EAAE,aAAa,CAAC,KAAK;IAC1B,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,eAAe;IAC3B,KAAK,EAAE,UAAU;IACjB,YAAY,EAAE,iBAAiB;IAC/B,YAAY,EAAE,iBAAiB;IAC/B,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,gBAAgB;IAC7B,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;CACtB,CAAC,CAAC;AAEH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtimes/codex/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;IACxC,EAAE,EAAE,OAAO;IACX,KAAK,EAAE,aAAa,CAAC,KAAK;IAC1B,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,eAAe;IAC3B,KAAK,EAAE,UAAU;IACjB,YAAY,EAAE,iBAAiB;IAC/B,YAAY,EAAE,iBAAiB;IAC/B,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,gBAAgB;IAC7B,OAAO,EAAE,YAAY;IACrB,KAAK,EAAE,UAAU;IACjB,UAAU,EAAE,eAAe;IAC3B,OAAO,EAAE,YAAY;CACtB,CAAC,CAAC;AAEH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AvailableInstallation } from "../../contracts/installation.js";
|
|
2
|
+
import type { AuthStatus, AuthStatusOptions, LoginAccount, LoginOptions, LoginResult } from "../../contracts/login.js";
|
|
3
|
+
import type { ProviderLoginInteraction } from "../../contracts/provider-auth.js";
|
|
4
|
+
/**
|
|
5
|
+
* `codex login status` prints to stderr and exits 0 when logged in
|
|
6
|
+
* (`Logged in using ChatGPT`, or `Logged in using an API key - <masked>`),
|
|
7
|
+
* 1 with `Not logged in` when logged out, and 1 with another message when
|
|
8
|
+
* it cannot tell (an unreadable configuration or credential store).
|
|
9
|
+
*/
|
|
10
|
+
export declare function projectCodexLoginStatus(exitCode: number | null, output: string): AuthStatus;
|
|
11
|
+
export declare function codexAuthStatus(installation: AvailableInstallation, options?: AuthStatusOptions): Promise<AuthStatus>;
|
|
12
|
+
/** `account/read` after the sign-in; null when codex reports no account. */
|
|
13
|
+
export declare function projectCodexAccount(result: unknown): LoginAccount | null;
|
|
14
|
+
/** Signs codex in with the app-server's ChatGPT device code flow, relaying the code and its URL. */
|
|
15
|
+
export declare function codexLogin(installation: AvailableInstallation, interaction: ProviderLoginInteraction, options?: LoginOptions): Promise<LoginResult>;
|
|
16
|
+
//# sourceMappingURL=login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/runtimes/codex/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAyCjF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAc3F;AAED,wBAAsB,eAAe,CAAC,YAAY,EAAE,qBAAqB,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CAM/H;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAaxE;AA4KD,oGAAoG;AACpG,wBAAsB,UAAU,CAC9B,YAAY,EAAE,qBAAqB,EACnC,WAAW,EAAE,wBAAwB,EACrC,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CAUtB"}
|