@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
|
@@ -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"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { runExecutable } from "../../shared/executable/index.js";
|
|
2
|
+
import { asRecord } from "../../shared/json.js";
|
|
3
|
+
import { errorMessage, LoginSecrets, loginBounds, loginExecutable, stoppedResult, } from "../../shared/login.js";
|
|
4
|
+
import { startAppServerClient } from "./app-server-client.js";
|
|
5
|
+
/*
|
|
6
|
+
* Codex signs in over its app-server (0.160.0 schema), never through
|
|
7
|
+
* `codex login`, whose browser and device flows both clear the stored
|
|
8
|
+
* credentials before the new sign-in completes:
|
|
9
|
+
*
|
|
10
|
+
* → account/login/start { type: "chatgptDeviceCode" }
|
|
11
|
+
* ← { type: "chatgptDeviceCode", loginId, verificationUrl, userCode }
|
|
12
|
+
* ← account/login/completed { loginId, success, error } (notification)
|
|
13
|
+
* → account/read {} ← { account: { type, email, planType } | null, ... }
|
|
14
|
+
*
|
|
15
|
+
* The app-server polls on its own and writes the credential store only once
|
|
16
|
+
* the new tokens are exchanged, so a failure, a cancel or the expiry leaves
|
|
17
|
+
* the stored login untouched; the code expires after 15 minutes. The
|
|
18
|
+
* `chatgptDeviceCode` login type arrived in 0.118.0. Device code sign-in
|
|
19
|
+
* must be allowed in the ChatGPT account's security settings (a workspace
|
|
20
|
+
* admin's permission for workspace accounts).
|
|
21
|
+
*/
|
|
22
|
+
const DEVICE_CODE_FLOOR = "0.118.0";
|
|
23
|
+
/** Past the code's 15 minutes, so codex reports the expiry itself. */
|
|
24
|
+
const LOGIN_TIMEOUT_MS = 16 * 60_000;
|
|
25
|
+
const STATUS_TIMEOUT_MS = 20_000;
|
|
26
|
+
const STATUS_SOURCE = "codex login status";
|
|
27
|
+
const DEVICE_CODE_SETTING = "Device code sign-in must be allowed in your ChatGPT security settings (for a workspace account, by its admin).";
|
|
28
|
+
function text(value) {
|
|
29
|
+
return typeof value === "string" && value.trim() !== "" ? value.trim() : undefined;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* `codex login status` prints to stderr and exits 0 when logged in
|
|
33
|
+
* (`Logged in using ChatGPT`, or `Logged in using an API key - <masked>`),
|
|
34
|
+
* 1 with `Not logged in` when logged out, and 1 with another message when
|
|
35
|
+
* it cannot tell (an unreadable configuration or credential store).
|
|
36
|
+
*/
|
|
37
|
+
export function projectCodexLoginStatus(exitCode, output) {
|
|
38
|
+
if (exitCode === 0) {
|
|
39
|
+
const method = /Logged in using ChatGPT/u.test(output) ? "chatgpt" : (/Logged in using an API key/u.test(output) ? "apiKey" : undefined);
|
|
40
|
+
return { kind: "logged_in", ...(method === undefined ? {} : { account: { method } }), source: STATUS_SOURCE };
|
|
41
|
+
}
|
|
42
|
+
if (exitCode === 1 && /^Not logged in\b/mu.test(output)) {
|
|
43
|
+
return { kind: "logged_out", source: STATUS_SOURCE };
|
|
44
|
+
}
|
|
45
|
+
const line = output.trim().split(/\r?\n/u).at(-1) ?? "";
|
|
46
|
+
return {
|
|
47
|
+
kind: "unknown",
|
|
48
|
+
detail: new LoginSecrets().redact(line === "" ? `exit ${String(exitCode)}` : line),
|
|
49
|
+
source: STATUS_SOURCE,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export async function codexAuthStatus(installation, options = {}) {
|
|
53
|
+
if (installation.via !== "executable") {
|
|
54
|
+
return { kind: "unknown", detail: "not a machine-installed executable" };
|
|
55
|
+
}
|
|
56
|
+
const result = await runExecutable(installation.command, ["login", "status"], { timeoutMs: options.timeoutMs ?? STATUS_TIMEOUT_MS });
|
|
57
|
+
return projectCodexLoginStatus(result.ok ? 0 : result.exitCode, `${result.stdout}\n${result.stderr}`);
|
|
58
|
+
}
|
|
59
|
+
/** `account/read` after the sign-in; null when codex reports no account. */
|
|
60
|
+
export function projectCodexAccount(result) {
|
|
61
|
+
const account = asRecord(asRecord(result)?.account);
|
|
62
|
+
if (account === null) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
const email = text(account.email);
|
|
66
|
+
const plan = text(account.planType);
|
|
67
|
+
const method = text(account.type);
|
|
68
|
+
return {
|
|
69
|
+
...(email === undefined ? {} : { email }),
|
|
70
|
+
...(plan === undefined ? {} : { plan }),
|
|
71
|
+
...(method === undefined ? {} : { method }),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/** `account/read` on the same app-server, bounded by the status deadline and the caller's abort; undefined when it gave no answer. */
|
|
75
|
+
async function readAccount(client, signal) {
|
|
76
|
+
if (signal?.aborted === true) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
const bounds = loginBounds(signal, STATUS_TIMEOUT_MS);
|
|
80
|
+
try {
|
|
81
|
+
const answer = await Promise.race([
|
|
82
|
+
// oxlint-disable-next-line promise/prefer-await-to-then -- a late rejection (the app-server stopped) is no answer
|
|
83
|
+
client.request("account/read", {}).catch(() => undefined),
|
|
84
|
+
// oxlint-disable-next-line promise/prefer-await-to-then -- the deadline and abort race the read
|
|
85
|
+
bounds.stopped.then(() => undefined),
|
|
86
|
+
]);
|
|
87
|
+
return answer;
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
bounds.dispose();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/** After codex reported success: logged in, with the account when `account/read` names one. */
|
|
94
|
+
async function confirmed(client, signal) {
|
|
95
|
+
const read = await readAccount(client, signal);
|
|
96
|
+
if (read === undefined) {
|
|
97
|
+
return { kind: "logged_in" };
|
|
98
|
+
}
|
|
99
|
+
const account = projectCodexAccount(read);
|
|
100
|
+
return account === null
|
|
101
|
+
? { kind: "failed", reason: "not_logged_in", detail: "codex reported success, yet account/read shows no account" }
|
|
102
|
+
: { kind: "logged_in", ...(Object.keys(account).length === 0 ? {} : { account }) };
|
|
103
|
+
}
|
|
104
|
+
function exitDetail(code) {
|
|
105
|
+
return `codex app-server exited${code === null || code === undefined ? "" : ` with code ${String(code)}`}`;
|
|
106
|
+
}
|
|
107
|
+
async function runCodexLogin(command, interaction, timeoutMs) {
|
|
108
|
+
const secrets = new LoginSecrets();
|
|
109
|
+
let client = null;
|
|
110
|
+
try {
|
|
111
|
+
// Its stderr never reaches the host's, and a stop takes its Windows process tree too.
|
|
112
|
+
client = startAppServerClient(command, undefined, {}, undefined, { inheritStderr: false, killTree: true });
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
return { kind: "failed", reason: "process_failed", detail: secrets.line(errorMessage(error)) };
|
|
116
|
+
}
|
|
117
|
+
const app = client;
|
|
118
|
+
const completion = Promise.withResolvers();
|
|
119
|
+
const flow = { loginId: undefined, early: [], exitCode: undefined, settled: false, confirmation: undefined };
|
|
120
|
+
const ours = (params) => {
|
|
121
|
+
const id = params.loginId;
|
|
122
|
+
return id === undefined || id === null || id === flow.loginId;
|
|
123
|
+
};
|
|
124
|
+
const complete = (params) => {
|
|
125
|
+
if (params.success === true) {
|
|
126
|
+
flow.confirmation ??= confirmed(app, interaction.signal);
|
|
127
|
+
}
|
|
128
|
+
completion.resolve({ kind: "completed", params });
|
|
129
|
+
};
|
|
130
|
+
app.onExit((code) => {
|
|
131
|
+
flow.exitCode = code;
|
|
132
|
+
completion.resolve({ kind: "exited", code });
|
|
133
|
+
});
|
|
134
|
+
app.handle({
|
|
135
|
+
onNotification(method, params) {
|
|
136
|
+
if (method !== "account/login/completed") {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (flow.loginId === undefined) {
|
|
140
|
+
flow.early.push(params);
|
|
141
|
+
}
|
|
142
|
+
else if (ours(params)) {
|
|
143
|
+
complete(params);
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
onServerRequest() {
|
|
147
|
+
// A login asks the client nothing.
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
const run = async () => {
|
|
151
|
+
try {
|
|
152
|
+
await app.spawned;
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
// An executable that cannot run (found, yet not startable) says so in Node's words.
|
|
156
|
+
return { kind: "failed", reason: "process_failed", detail: secrets.line(errorMessage(error)) };
|
|
157
|
+
}
|
|
158
|
+
try {
|
|
159
|
+
await app.request("initialize", { clientInfo: { name: "oar", version: "0.0.0" }, capabilities: { experimentalApi: true } });
|
|
160
|
+
app.notify("initialized", {});
|
|
161
|
+
const started = await app.request("account/login/start", { type: "chatgptDeviceCode" }, (outcome) => {
|
|
162
|
+
if (outcome.kind === "result") {
|
|
163
|
+
flow.loginId = text(outcome.result.loginId);
|
|
164
|
+
for (const params of flow.early.splice(0)) {
|
|
165
|
+
if (ours(params)) {
|
|
166
|
+
complete(params);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
const verificationUri = text(started.verificationUrl);
|
|
172
|
+
const userCode = text(started.userCode);
|
|
173
|
+
if (flow.loginId === undefined || verificationUri === undefined || userCode === undefined) {
|
|
174
|
+
return { kind: "failed", reason: "process_failed", detail: "codex answered account/login/start without a device code" };
|
|
175
|
+
}
|
|
176
|
+
// A success that came before the start reply is final: nothing left to show the person.
|
|
177
|
+
const early = flow.confirmation;
|
|
178
|
+
if (early !== undefined) {
|
|
179
|
+
return await early;
|
|
180
|
+
}
|
|
181
|
+
if (!flow.settled) {
|
|
182
|
+
try {
|
|
183
|
+
interaction.onEvent({ kind: "device_code", userCode, verificationUri });
|
|
184
|
+
interaction.onEvent({ kind: "info", message: DEVICE_CODE_SETTING });
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
// A caller that cannot show the code cannot finish the login.
|
|
188
|
+
return { kind: "failed", reason: "interaction_failed", detail: secrets.line(errorMessage(error)) };
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const done = await completion.promise;
|
|
192
|
+
if (flow.confirmation !== undefined) {
|
|
193
|
+
return await flow.confirmation;
|
|
194
|
+
}
|
|
195
|
+
if (done.kind === "exited") {
|
|
196
|
+
return { kind: "failed", reason: "process_failed", detail: `${exitDetail(done.code)} before the sign-in completed` };
|
|
197
|
+
}
|
|
198
|
+
return { kind: "failed", reason: "rejected", detail: secrets.line(text(done.params.error) ?? "codex reported that the sign-in failed") };
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
// An exit's error carries the app-server's stderr tail: only the exit is reported, never that tail.
|
|
202
|
+
return flow.exitCode === undefined
|
|
203
|
+
? { kind: "failed", reason: "rejected", detail: secrets.line(errorMessage(error)) }
|
|
204
|
+
: { kind: "failed", reason: "process_failed", detail: exitDetail(flow.exitCode) };
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
const bounds = loginBounds(interaction.signal, timeoutMs);
|
|
208
|
+
try {
|
|
209
|
+
const ending = await Promise.race([
|
|
210
|
+
run(),
|
|
211
|
+
// oxlint-disable-next-line promise/prefer-await-to-then -- the deadline and abort race the flow
|
|
212
|
+
bounds.stopped.then((stop) => stop),
|
|
213
|
+
]);
|
|
214
|
+
flow.settled = true;
|
|
215
|
+
if (typeof ending !== "string") {
|
|
216
|
+
return ending;
|
|
217
|
+
}
|
|
218
|
+
// Codex reported success before the stop: the login is stored.
|
|
219
|
+
return flow.confirmation === undefined ? stoppedResult(ending, timeoutMs) : await flow.confirmation;
|
|
220
|
+
}
|
|
221
|
+
finally {
|
|
222
|
+
flow.settled = true;
|
|
223
|
+
bounds.dispose();
|
|
224
|
+
// The pending login lives in the app-server; stopping it (and its group or tree) ends the polling.
|
|
225
|
+
app.kill();
|
|
226
|
+
await app.exited;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/** Signs codex in with the app-server's ChatGPT device code flow, relaying the code and its URL. */
|
|
230
|
+
export async function codexLogin(installation, interaction, options = {}) {
|
|
231
|
+
const target = loginExecutable(installation, "codex", DEVICE_CODE_FLOOR);
|
|
232
|
+
if (target.kind === "settled") {
|
|
233
|
+
return target.result;
|
|
234
|
+
}
|
|
235
|
+
if (interaction.signal?.aborted === true) {
|
|
236
|
+
return { kind: "cancelled" };
|
|
237
|
+
}
|
|
238
|
+
const result = await runCodexLogin(target.installation.command, interaction, options.timeoutMs ?? LOGIN_TIMEOUT_MS);
|
|
239
|
+
return result;
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/runtimes/codex/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,6 @@ export { runIsolated, type IsolatedResult } from "./isolated.js";
|
|
|
3
3
|
export type { ExecutableResult, ExecutableRunner, ExecutableRunOptions } from "./run.js";
|
|
4
4
|
export { runExecutable } from "./run.js";
|
|
5
5
|
export { readExecutableVersion, type VersionReader } from "./version.js";
|
|
6
|
-
export type { LineProcess } from "./process.js";
|
|
7
|
-
export { KILL_GRACE_MS, killGraceMs, OWN_PROCESS_GROUP, requiresShell, signalProcessGroup, spawnLineProcess, } from "./process.js";
|
|
6
|
+
export type { LineProcess, LineProcessOptions } from "./process.js";
|
|
7
|
+
export { KILL_GRACE_MS, killGraceMs, killProcessTree, OWN_PROCESS_GROUP, requiresShell, signalProcessGroup, spawnLineProcess, } from "./process.js";
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACjE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACjE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,aAAa,EACb,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,cAAc,CAAC"}
|
|
@@ -2,5 +2,5 @@ export { resolveExecutable } from "./resolve.js";
|
|
|
2
2
|
export { runIsolated } from "./isolated.js";
|
|
3
3
|
export { runExecutable } from "./run.js";
|
|
4
4
|
export { readExecutableVersion } from "./version.js";
|
|
5
|
-
export { KILL_GRACE_MS, killGraceMs, OWN_PROCESS_GROUP, requiresShell, signalProcessGroup, spawnLineProcess, } from "./process.js";
|
|
5
|
+
export { KILL_GRACE_MS, killGraceMs, killProcessTree, OWN_PROCESS_GROUP, requiresShell, signalProcessGroup, spawnLineProcess, } from "./process.js";
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/executable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAuB,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAsB,MAAM,cAAc,CAAC;AAEzE,OAAO,EACL,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/executable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAuB,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAsB,MAAM,cAAc,CAAC;AAEzE,OAAO,EACL,aAAa,EACb,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isolated.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/isolated.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;
|
|
1
|
+
{"version":3,"file":"isolated.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/isolated.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAwBD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAwChI"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { execFile } from "node:child_process";
|
|
2
1
|
import spawn from "cross-spawn";
|
|
3
|
-
import { killGraceMs, OWN_PROCESS_GROUP, signalProcessGroup } from "./process.js";
|
|
2
|
+
import { killGraceMs, killProcessTree, OWN_PROCESS_GROUP, signalProcessGroup } from "./process.js";
|
|
4
3
|
const OUTPUT_LIMIT = 1024 * 1024;
|
|
5
4
|
/** After the command itself exits, how long a process it left holding the output pipes may keep them. */
|
|
6
5
|
const PIPE_DRAIN_MS = 2000;
|
|
@@ -10,9 +9,7 @@ function keepTail(text) {
|
|
|
10
9
|
/** Stop the command and everything it started: its process group on POSIX, its process tree on Windows. */
|
|
11
10
|
function stopTree(child) {
|
|
12
11
|
if (process.platform === "win32") {
|
|
13
|
-
|
|
14
|
-
execFile("taskkill", ["/pid", String(child.pid), "/T", "/F"], () => { });
|
|
15
|
-
}
|
|
12
|
+
killProcessTree(child);
|
|
16
13
|
return;
|
|
17
14
|
}
|
|
18
15
|
signalProcessGroup(child, "SIGTERM");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isolated.js","sourceRoot":"","sources":["../../../src/shared/executable/isolated.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"isolated.js","sourceRoot":"","sources":["../../../src/shared/executable/isolated.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ChildProcess } from "node:child_process";
|
|
2
2
|
import type { Readable, Writable } from "node:stream";
|
|
3
3
|
import { type ProcessDiagnostics } from "./diagnostics.js";
|
|
4
|
-
interface
|
|
4
|
+
export interface LineProcessOptions {
|
|
5
5
|
readonly cwd?: string;
|
|
6
6
|
readonly env?: NodeJS.ProcessEnv;
|
|
7
|
+
/**
|
|
8
|
+
* Forward the child's stderr to the host's stderr. Defaults to
|
|
9
|
+
* `OAR_CHILD_STDERR=inherit`; a child whose output must stay inside oar
|
|
10
|
+
* (a login) passes false.
|
|
11
|
+
*/
|
|
12
|
+
readonly inheritStderr?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* On Windows, `kill()` ends the child's whole process tree
|
|
15
|
+
* ({@link killProcessTree}) instead of the direct child alone, which for an
|
|
16
|
+
* npm `.cmd` shim is only `cmd.exe`. POSIX always signals the group.
|
|
17
|
+
*/
|
|
18
|
+
readonly killTree?: boolean;
|
|
7
19
|
}
|
|
8
20
|
/**
|
|
9
21
|
* How long a process asked to stop (SIGTERM) gets before it is killed outright
|
|
@@ -61,19 +73,24 @@ export interface LineProcess {
|
|
|
61
73
|
onExit(handler: (code: number | null) => void): void;
|
|
62
74
|
/**
|
|
63
75
|
* Stop the process and everything it started: close stdin, SIGTERM its
|
|
64
|
-
* process group
|
|
65
|
-
*
|
|
66
|
-
* no-op after the exit, since a reaped
|
|
67
|
-
* process.
|
|
76
|
+
* process group, and SIGKILL the group if the child is still running once
|
|
77
|
+
* the grace period is over. On Windows it ends the child alone, or its whole
|
|
78
|
+
* tree with `killTree`. Idempotent; a no-op after the exit, since a reaped
|
|
79
|
+
* pid may already belong to another process.
|
|
68
80
|
*/
|
|
69
81
|
kill(): void;
|
|
70
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Windows has no process groups: end the child and everything it started by
|
|
85
|
+
* walking its process tree (`taskkill /T /F`), falling back to the child
|
|
86
|
+
* alone when the walk fails.
|
|
87
|
+
*/
|
|
88
|
+
export declare function killProcessTree(child: ChildProcess): void;
|
|
71
89
|
/** Windows npm shims need a shell for one-shot execFile calls. */
|
|
72
90
|
export declare function requiresShell(command: string, platform: NodeJS.Platform): boolean;
|
|
73
91
|
/**
|
|
74
92
|
* Spawn through cross-spawn so Windows .cmd shims preserve multi-word args.
|
|
75
93
|
* Line parsing is attached lazily; protocol SDKs can consume the raw streams.
|
|
76
94
|
*/
|
|
77
|
-
export declare function spawnLineProcess(command: string, args: readonly string[], options?:
|
|
78
|
-
export {};
|
|
95
|
+
export declare function spawnLineProcess(command: string, args: readonly string[], options?: LineProcessOptions): LineProcess;
|
|
79
96
|
//# sourceMappingURL=process.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/process.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAA2B,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEpF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,QAAS,CAAC;AAEpC;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAIxE;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,SAA+B,CAAC;AAE9D;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAWpF;AAED,8EAA8E;AAC9E,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,kEAAkE;IAClE,WAAW,IAAI,kBAAkB,CAAC;IAClC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,yEAAyE;IACzE,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAC9C,+DAA+D;IAC/D,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IACrD;;;;;;OAMG;IACH,IAAI,IAAI,IAAI,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAUzD;AAED,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAEjF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,kBAAuB,GAC/B,WAAW,CA0Hb"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
1
2
|
import spawn from "cross-spawn";
|
|
2
3
|
import { StringDecoder } from "node:string_decoder";
|
|
3
4
|
import { nativeError, StderrTail } from "./diagnostics.js";
|
|
@@ -53,6 +54,22 @@ export function signalProcessGroup(child, signal) {
|
|
|
53
54
|
}
|
|
54
55
|
child.kill(signal);
|
|
55
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Windows has no process groups: end the child and everything it started by
|
|
59
|
+
* walking its process tree (`taskkill /T /F`), falling back to the child
|
|
60
|
+
* alone when the walk fails.
|
|
61
|
+
*/
|
|
62
|
+
export function killProcessTree(child) {
|
|
63
|
+
if (child.pid === undefined) {
|
|
64
|
+
child.kill();
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
execFile("taskkill", ["/pid", String(child.pid), "/T", "/F"], (error) => {
|
|
68
|
+
if (error !== null) {
|
|
69
|
+
child.kill();
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
56
73
|
/** Windows npm shims need a shell for one-shot execFile calls. */
|
|
57
74
|
export function requiresShell(command, platform) {
|
|
58
75
|
return platform === "win32" && /\.(?:cmd|bat)$/iu.test(command);
|
|
@@ -70,7 +87,7 @@ export function spawnLineProcess(command, args, options = {}) {
|
|
|
70
87
|
});
|
|
71
88
|
const { stdin, stdout } = child;
|
|
72
89
|
const stderr = new StderrTail();
|
|
73
|
-
const inheritStderr = process.env.OAR_CHILD_STDERR === "inherit";
|
|
90
|
+
const inheritStderr = options.inheritStderr ?? process.env.OAR_CHILD_STDERR === "inherit";
|
|
74
91
|
// Always drain stderr, even after the tail is full and without a host
|
|
75
92
|
// observer. Otherwise a verbose child can block before its next RPC reply.
|
|
76
93
|
child.stderr?.on("data", (chunk) => {
|
|
@@ -167,6 +184,13 @@ export function spawnLineProcess(command, args, options = {}) {
|
|
|
167
184
|
if (ended || escalation !== null) {
|
|
168
185
|
return;
|
|
169
186
|
}
|
|
187
|
+
if (options.killTree === true && process.platform === "win32") {
|
|
188
|
+
killProcessTree(child);
|
|
189
|
+
escalation = setTimeout(() => {
|
|
190
|
+
child.kill("SIGKILL");
|
|
191
|
+
}, killGraceMs());
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
170
194
|
signalProcessGroup(child, "SIGTERM");
|
|
171
195
|
// Cleared by the exit, so it only fires on a process that ignored the
|
|
172
196
|
// SIGTERM; the SIGKILL then takes its whole group down with it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/shared/executable/process.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/shared/executable/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@ export interface ExecutableResult {
|
|
|
9
9
|
export interface ExecutableRunOptions {
|
|
10
10
|
readonly env?: NodeJS.ProcessEnv;
|
|
11
11
|
readonly timeoutMs?: number;
|
|
12
|
+
/** Stops the command; the result is then a failure with no exit code. */
|
|
13
|
+
readonly signal?: AbortSignal;
|
|
12
14
|
}
|
|
13
15
|
export type ExecutableRunner = (executable: string, args: readonly string[], options?: ExecutableRunOptions) => Promise<ExecutableResult>;
|
|
14
16
|
export declare const runExecutable: ExecutableRunner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEpF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAC3C;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEpF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAC3C;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,MAAM,gBAAgB,GAAG,CAC7B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE,oBAAoB,KAC3B,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE/B,eAAO,MAAM,aAAa,EAAE,gBA0C3B,CAAC"}
|
|
@@ -29,6 +29,7 @@ export const runExecutable = async (executable, args, options = {}) => {
|
|
|
29
29
|
execFile(executable, [...args], {
|
|
30
30
|
env: options.env,
|
|
31
31
|
timeout: timeoutMs,
|
|
32
|
+
...(options.signal === undefined ? {} : { signal: options.signal }),
|
|
32
33
|
maxBuffer: 2 * 1024 * 1024,
|
|
33
34
|
// Modern Node rejects shell-less execution of Windows .cmd/.bat shims.
|
|
34
35
|
shell: requiresShell(executable, process.platform),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/shared/executable/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,UAAU,EAA2B,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/shared/executable/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,UAAU,EAA2B,MAAM,kBAAkB,CAAC;AAuBpF,MAAM,CAAC,MAAM,aAAa,GAAqB,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE;IACtF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,EAAE;QAC7D,MAAM,QAAQ,GAAG,CAAC,KAAyE,EAAE,MAAc,EAAE,MAAc,EAAQ,EAAE;YACnI,MAAM,QAAQ,GAAG,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACtF,OAAO,CAAC;gBACN,EAAE,EAAE,KAAK,KAAK,IAAI;gBAClB,MAAM;gBACN,MAAM;gBACN,QAAQ;gBACR,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxB,WAAW,EAAE;wBACX,QAAQ;wBACR,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;wBAC5B,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC;wBAC1B,8DAA8D;wBAC9D,gDAAgD;wBAChD,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACjF,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;4BACrH,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACxC;iBACF,CAAC;aACH,CAAC,CAAC;QACL,CAAC,CAAC;QACF,IAAI,CAAC;YACH,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE;gBAC9B,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO,EAAE,SAAS;gBAClB,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnE,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;gBAC1B,uEAAuE;gBACvE,KAAK,EAAE,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC;aACnD,EAAE,QAAQ,CAAC,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oEAAoE;YACpE,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC;YACd,CAAC;YACD,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|