@exla/rudder 0.0.0-stage → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +100 -0
- package/README.md +733 -2
- package/assets/rudder.icns +0 -0
- package/assets/sounds/NOTICE.md +8 -0
- package/assets/sounds/ping.mp3 +0 -0
- package/dist/agent-attention.d.ts +5 -0
- package/dist/agent-attention.js +54 -0
- package/dist/agent-attention.js.map +1 -0
- package/dist/analytics.d.ts +36 -0
- package/dist/analytics.js +178 -0
- package/dist/analytics.js.map +1 -0
- package/dist/attach-session.d.ts +91 -0
- package/dist/attach-session.js +290 -0
- package/dist/attach-session.js.map +1 -0
- package/dist/auth.d.ts +36 -0
- package/dist/auth.js +397 -0
- package/dist/auth.js.map +1 -0
- package/dist/backends.d.ts +3 -0
- package/dist/backends.js +638 -0
- package/dist/backends.js.map +1 -0
- package/dist/board/board.css +1 -0
- package/dist/board/board.js +2 -0
- package/dist/board/daemon.d.ts +39 -0
- package/dist/board/daemon.js +1510 -0
- package/dist/board/daemon.js.map +1 -0
- package/dist/brain.d.ts +24 -0
- package/dist/brain.js +244 -0
- package/dist/brain.js.map +1 -0
- package/dist/bus.d.ts +9 -0
- package/dist/bus.js +23 -0
- package/dist/bus.js.map +1 -0
- package/dist/checkout-sync.d.ts +35 -0
- package/dist/checkout-sync.js +247 -0
- package/dist/checkout-sync.js.map +1 -0
- package/dist/cloud.d.ts +51 -0
- package/dist/cloud.js +4672 -0
- package/dist/cloud.js.map +1 -0
- package/dist/codex-binary.d.ts +12 -0
- package/dist/codex-binary.js +184 -0
- package/dist/codex-binary.js.map +1 -0
- package/dist/context-audit.d.ts +21 -0
- package/dist/context-audit.js +109 -0
- package/dist/context-audit.js.map +1 -0
- package/dist/daemon.d.ts +27 -0
- package/dist/daemon.js +203 -0
- package/dist/daemon.js.map +1 -0
- package/dist/effort.d.ts +9 -0
- package/dist/effort.js +72 -0
- package/dist/effort.js.map +1 -0
- package/dist/feedback.d.ts +46 -0
- package/dist/feedback.js +173 -0
- package/dist/feedback.js.map +1 -0
- package/dist/gc.d.ts +3 -0
- package/dist/gc.js +262 -0
- package/dist/gc.js.map +1 -0
- package/dist/git.d.ts +31 -0
- package/dist/git.js +455 -0
- package/dist/git.js.map +1 -0
- package/dist/goal.d.ts +33 -0
- package/dist/goal.js +95 -0
- package/dist/goal.js.map +1 -0
- package/dist/graph.d.ts +93 -0
- package/dist/graph.js +372 -0
- package/dist/graph.js.map +1 -0
- package/dist/handoff.d.ts +110 -0
- package/dist/handoff.js +565 -0
- package/dist/handoff.js.map +1 -0
- package/dist/improve/advisor.d.ts +10 -0
- package/dist/improve/advisor.js +115 -0
- package/dist/improve/advisor.js.map +1 -0
- package/dist/improve/collect.d.ts +49 -0
- package/dist/improve/collect.js +274 -0
- package/dist/improve/collect.js.map +1 -0
- package/dist/improve/gate.d.ts +17 -0
- package/dist/improve/gate.js +60 -0
- package/dist/improve/gate.js.map +1 -0
- package/dist/improve/index.d.ts +9 -0
- package/dist/improve/index.js +376 -0
- package/dist/improve/index.js.map +1 -0
- package/dist/improve/judge.d.ts +32 -0
- package/dist/improve/judge.js +114 -0
- package/dist/improve/judge.js.map +1 -0
- package/dist/improve/mine.d.ts +31 -0
- package/dist/improve/mine.js +192 -0
- package/dist/improve/mine.js.map +1 -0
- package/dist/improve/propose.d.ts +51 -0
- package/dist/improve/propose.js +150 -0
- package/dist/improve/propose.js.map +1 -0
- package/dist/improve/rank.d.ts +16 -0
- package/dist/improve/rank.js +49 -0
- package/dist/improve/rank.js.map +1 -0
- package/dist/improve/schedule.d.ts +1 -0
- package/dist/improve/schedule.js +95 -0
- package/dist/improve/schedule.js.map +1 -0
- package/dist/improve/ship.d.ts +25 -0
- package/dist/improve/ship.js +82 -0
- package/dist/improve/ship.js.map +1 -0
- package/dist/improve/state.d.ts +157 -0
- package/dist/improve/state.js +264 -0
- package/dist/improve/state.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +88 -0
- package/dist/index.js.map +1 -0
- package/dist/jj-binary.d.ts +36 -0
- package/dist/jj-binary.js +143 -0
- package/dist/jj-binary.js.map +1 -0
- package/dist/jj.d.ts +163 -0
- package/dist/jj.js +926 -0
- package/dist/jj.js.map +1 -0
- package/dist/logger.d.ts +22 -0
- package/dist/logger.js +110 -0
- package/dist/logger.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.js +1366 -0
- package/dist/main.js.map +1 -0
- package/dist/migration.d.ts +82 -0
- package/dist/migration.js +198 -0
- package/dist/migration.js.map +1 -0
- package/dist/models.d.ts +9 -0
- package/dist/models.js +623 -0
- package/dist/models.js.map +1 -0
- package/dist/move-home.d.ts +82 -0
- package/dist/move-home.js +472 -0
- package/dist/move-home.js.map +1 -0
- package/dist/native/darwin-arm64/rudder-native +0 -0
- package/dist/native/darwin-x64/rudder-native +0 -0
- package/dist/native/linux-x64/rudder-native +0 -0
- package/dist/native-agents.d.ts +8 -0
- package/dist/native-agents.js +178 -0
- package/dist/native-agents.js.map +1 -0
- package/dist/native-binary.d.ts +4 -0
- package/dist/native-binary.js +140 -0
- package/dist/native-binary.js.map +1 -0
- package/dist/onboarding.d.ts +11 -0
- package/dist/onboarding.js +111 -0
- package/dist/onboarding.js.map +1 -0
- package/dist/paste-bridge.d.ts +36 -0
- package/dist/paste-bridge.js +279 -0
- package/dist/paste-bridge.js.map +1 -0
- package/dist/plan-mode.d.ts +2 -0
- package/dist/plan-mode.js +22 -0
- package/dist/plan-mode.js.map +1 -0
- package/dist/planner.d.ts +27 -0
- package/dist/planner.js +587 -0
- package/dist/planner.js.map +1 -0
- package/dist/predict.d.ts +67 -0
- package/dist/predict.js +369 -0
- package/dist/predict.js.map +1 -0
- package/dist/qr.d.ts +13 -0
- package/dist/qr.js +377 -0
- package/dist/qr.js.map +1 -0
- package/dist/report.d.ts +74 -0
- package/dist/report.js +412 -0
- package/dist/report.js.map +1 -0
- package/dist/rudder-md.d.ts +33 -0
- package/dist/rudder-md.js +142 -0
- package/dist/rudder-md.js.map +1 -0
- package/dist/run-manager.d.ts +62 -0
- package/dist/run-manager.js +1400 -0
- package/dist/run-manager.js.map +1 -0
- package/dist/scheduler.d.ts +128 -0
- package/dist/scheduler.js +955 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/state.d.ts +127 -0
- package/dist/state.js +704 -0
- package/dist/state.js.map +1 -0
- package/dist/surfaces.d.ts +91 -0
- package/dist/surfaces.js +460 -0
- package/dist/surfaces.js.map +1 -0
- package/dist/task-summary.d.ts +30 -0
- package/dist/task-summary.js +472 -0
- package/dist/task-summary.js.map +1 -0
- package/dist/types.d.ts +492 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/usage.d.ts +198 -0
- package/dist/usage.js +830 -0
- package/dist/usage.js.map +1 -0
- package/dist/util.d.ts +73 -0
- package/dist/util.js +399 -0
- package/dist/util.js.map +1 -0
- package/dist/version-check.d.ts +16 -0
- package/dist/version-check.js +269 -0
- package/dist/version-check.js.map +1 -0
- package/package.json +68 -4
- package/scripts/copy-native.mjs +89 -0
- package/scripts/postinstall.mjs +34 -0
package/dist/auth.js
ADDED
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { commandExists, expandHome, formatMissingToolMessage, MissingToolError, pathExists, promptSecret, promptSelect, readJson, runCommand, runCommandSync, shortenHome, } from "./util.js";
|
|
5
|
+
import { CODEX_DEFAULT_MODEL, authStorePath, loadAuthStore, loadConfig, saveAuthStore, saveConfig } from "./state.js";
|
|
6
|
+
import { ensureJjAvailable, managedJjInstallError } from "./jj-binary.js";
|
|
7
|
+
const CLAUDE_KEYCHAIN_SERVICE = "Claude Code-credentials";
|
|
8
|
+
const CODEX_KEYCHAIN_SERVICE = "Codex Auth";
|
|
9
|
+
export async function detectEnvironment() {
|
|
10
|
+
const claudeCommand = commandExists("claude");
|
|
11
|
+
const codexCommand = commandExists("codex");
|
|
12
|
+
const acpxCommand = commandExists("acpx");
|
|
13
|
+
const acpxVersion = acpxCommand
|
|
14
|
+
? (await runCommand("acpx", ["--version"], {
|
|
15
|
+
allowFailure: true,
|
|
16
|
+
})).stdout.trim()
|
|
17
|
+
: undefined;
|
|
18
|
+
const npmAcpxLatest = (await runCommand("npm", ["view", "acpx", "version"], {
|
|
19
|
+
allowFailure: true,
|
|
20
|
+
})).stdout.trim();
|
|
21
|
+
const jjSource = await ensureJjAvailable({ onInstall: (message) => console.log(message) });
|
|
22
|
+
const jjCommand = jjSource !== null;
|
|
23
|
+
const jjVersionRaw = jjCommand
|
|
24
|
+
? (await runCommand("jj", ["--version"], { allowFailure: true })).stdout.trim()
|
|
25
|
+
: undefined;
|
|
26
|
+
const jjVersion = jjVersionRaw?.match(/(\d+)\.(\d+)\.(\d+)/)?.[0] ?? jjVersionRaw;
|
|
27
|
+
const claude = await readClaudeCliCredential();
|
|
28
|
+
const codex = await readCodexCliCredential();
|
|
29
|
+
return {
|
|
30
|
+
claudeCommand,
|
|
31
|
+
codexCommand,
|
|
32
|
+
acpxCommand,
|
|
33
|
+
acpxVersion,
|
|
34
|
+
npmAcpxLatest,
|
|
35
|
+
jjCommand,
|
|
36
|
+
jjVersion,
|
|
37
|
+
jjManaged: jjSource === "managed",
|
|
38
|
+
anthropicEnv: Boolean(process.env.ANTHROPIC_API_KEY?.trim()),
|
|
39
|
+
openaiEnv: Boolean(process.env.OPENAI_API_KEY?.trim()),
|
|
40
|
+
claudeCredential: claude?.credential,
|
|
41
|
+
claudeCredentialSource: claude?.source,
|
|
42
|
+
codexCredential: codex?.credential,
|
|
43
|
+
codexCredentialSource: codex?.source,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export async function syncExternalCredentials() {
|
|
47
|
+
const store = await loadAuthStore();
|
|
48
|
+
const claude = await readClaudeCliCredential();
|
|
49
|
+
if (claude?.credential) {
|
|
50
|
+
store.profiles["anthropic:claude-code"] = claude.credential;
|
|
51
|
+
}
|
|
52
|
+
const codex = await readCodexCliCredential();
|
|
53
|
+
if (codex?.credential) {
|
|
54
|
+
store.profiles["openai-codex:default"] = codex.credential;
|
|
55
|
+
}
|
|
56
|
+
if (process.env.ANTHROPIC_API_KEY?.trim()) {
|
|
57
|
+
store.profiles["anthropic:env"] = {
|
|
58
|
+
type: "api_key",
|
|
59
|
+
provider: "anthropic",
|
|
60
|
+
key: process.env.ANTHROPIC_API_KEY.trim(),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
if (process.env.OPENAI_API_KEY?.trim()) {
|
|
64
|
+
store.profiles["openai:env"] = {
|
|
65
|
+
type: "api_key",
|
|
66
|
+
provider: "openai",
|
|
67
|
+
key: process.env.OPENAI_API_KEY.trim(),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
await saveAuthStore(store);
|
|
71
|
+
return store;
|
|
72
|
+
}
|
|
73
|
+
export async function runDoctor(options) {
|
|
74
|
+
const detection = await detectEnvironment();
|
|
75
|
+
const store = await syncExternalCredentials();
|
|
76
|
+
const config = await loadConfig();
|
|
77
|
+
const payload = {
|
|
78
|
+
commands: {
|
|
79
|
+
claude: detection.claudeCommand,
|
|
80
|
+
codex: detection.codexCommand,
|
|
81
|
+
acpx: detection.acpxCommand,
|
|
82
|
+
acpxVersion: detection.acpxVersion || null,
|
|
83
|
+
acpxLatest: detection.npmAcpxLatest || null,
|
|
84
|
+
jj: detection.jjCommand,
|
|
85
|
+
jjVersion: detection.jjVersion || null,
|
|
86
|
+
jjManaged: Boolean(detection.jjManaged),
|
|
87
|
+
},
|
|
88
|
+
auth: {
|
|
89
|
+
storePath: authStorePath(),
|
|
90
|
+
profiles: Object.keys(store.profiles).sort(),
|
|
91
|
+
claudeCredentialSource: detection.claudeCredentialSource || null,
|
|
92
|
+
codexCredentialSource: detection.codexCredentialSource || null,
|
|
93
|
+
},
|
|
94
|
+
config,
|
|
95
|
+
};
|
|
96
|
+
if (options?.json) {
|
|
97
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
console.log("Rudder doctor");
|
|
101
|
+
console.log(` claude: ${status(detection.claudeCommand)}`);
|
|
102
|
+
console.log(` codex: ${status(detection.codexCommand)}`);
|
|
103
|
+
console.log(` acpx: ${status(detection.acpxCommand)}${detection.acpxVersion ? ` (${detection.acpxVersion})` : ""}${detection.npmAcpxLatest ? ` latest=${detection.npmAcpxLatest}` : ""}`);
|
|
104
|
+
console.log(` jj: ${status(detection.jjCommand)}${detection.jjVersion ? ` (${detection.jjVersion}${detection.jjManaged ? ", set up by Rudder" : ""})` : ""}`);
|
|
105
|
+
console.log(` auth: ${shortenHome(authStorePath())}`);
|
|
106
|
+
for (const [profileId, credential] of Object.entries(store.profiles).sort()) {
|
|
107
|
+
console.log(` - ${profileId} (${credential.provider}/${credential.type})`);
|
|
108
|
+
}
|
|
109
|
+
if (!detection.acpxCommand) {
|
|
110
|
+
console.log(" fix: run `npm install -g acpx@latest` or `rudder onboard`");
|
|
111
|
+
}
|
|
112
|
+
// On a terminal: offer Claude Code / Codex when missing, and list the repos
|
|
113
|
+
// already on the cloud machine when this computer is signed in.
|
|
114
|
+
const { runLaptopOnboarding } = await import("./onboarding.js");
|
|
115
|
+
const { cloudRepoSummaries } = await import("./cloud.js");
|
|
116
|
+
await runLaptopOnboarding({ json: options?.json, cloudRepos: cloudRepoSummaries });
|
|
117
|
+
if (!detection.jjCommand) {
|
|
118
|
+
const reason = managedJjInstallError();
|
|
119
|
+
console.log(` fix: ${reason ? `Rudder could not set jj up (${reason}). ` : ""}${formatMissingToolMessage("jj")}`);
|
|
120
|
+
throw new MissingToolError("jj", "jj is required but not installed. Rudder uses jj for run isolation and merge.");
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
export async function runOnboard(options) {
|
|
124
|
+
const config = await loadConfig();
|
|
125
|
+
let store = await syncExternalCredentials();
|
|
126
|
+
const detection = await detectEnvironment();
|
|
127
|
+
const acpxBehind = detection.acpxCommand &&
|
|
128
|
+
detection.acpxVersion &&
|
|
129
|
+
detection.npmAcpxLatest &&
|
|
130
|
+
detection.acpxVersion !== detection.npmAcpxLatest;
|
|
131
|
+
const skipGlobalInstall = process.env.RUDDER_DISABLE_ONBOARD_INSTALL || process.env.RUDDER_CLOUD_WORKER;
|
|
132
|
+
if ((!detection.acpxCommand || acpxBehind) && !skipGlobalInstall) {
|
|
133
|
+
console.log(detection.acpxCommand
|
|
134
|
+
? `Updating acpx ${detection.acpxVersion} to latest ${detection.npmAcpxLatest}...`
|
|
135
|
+
: "Installing acpx@latest...");
|
|
136
|
+
await runCommand("npm", ["install", "-g", "acpx@latest"]);
|
|
137
|
+
}
|
|
138
|
+
else if ((!detection.acpxCommand || acpxBehind) && skipGlobalInstall) {
|
|
139
|
+
console.log(detection.acpxCommand
|
|
140
|
+
? `Skipping acpx update (${detection.acpxVersion} < ${detection.npmAcpxLatest}) in immutable runtime.`
|
|
141
|
+
: "Skipping acpx install in immutable runtime.");
|
|
142
|
+
}
|
|
143
|
+
if (detection.jjCommand) {
|
|
144
|
+
console.log(`jj ready${detection.jjVersion ? ` (${detection.jjVersion}${detection.jjManaged ? ", set up by Rudder" : ""})` : ""}`);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
console.log("jj is required but not installed. Rudder uses jj for run isolation and merge.");
|
|
148
|
+
console.log(` ${formatMissingToolMessage("jj")}`);
|
|
149
|
+
}
|
|
150
|
+
if (!options?.nonInteractive && process.stdin.isTTY) {
|
|
151
|
+
printDetectedAgentAuth(detection);
|
|
152
|
+
store = await configureAnthropic(store, config);
|
|
153
|
+
store = await configureOpenAI(store, config);
|
|
154
|
+
}
|
|
155
|
+
await saveAuthStore(store);
|
|
156
|
+
await saveConfig(config);
|
|
157
|
+
if (options?.json) {
|
|
158
|
+
console.log(JSON.stringify({
|
|
159
|
+
config,
|
|
160
|
+
authStore: authStorePath(),
|
|
161
|
+
profiles: Object.keys(store.profiles).sort(),
|
|
162
|
+
}, null, 2));
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
console.log("Rudder configured");
|
|
166
|
+
console.log(` auth: ${shortenHome(authStorePath())}`);
|
|
167
|
+
console.log(` profiles: ${Object.keys(store.profiles).sort().join(", ") || "(none)"}`);
|
|
168
|
+
console.log(' try: rudder "fix the failing tests"');
|
|
169
|
+
}
|
|
170
|
+
function printDetectedAgentAuth(detection) {
|
|
171
|
+
console.log("Agent auth");
|
|
172
|
+
console.log(` claude: ${detection.claudeCredentialSource ? `detected (${detection.claudeCredentialSource})` : detection.anthropicEnv ? "detected (ANTHROPIC_API_KEY)" : "not detected"}`);
|
|
173
|
+
console.log(` codex: ${detection.codexCredentialSource ? `detected (${detection.codexCredentialSource})` : detection.openaiEnv ? "detected (OPENAI_API_KEY)" : "not detected"}`);
|
|
174
|
+
if (!detection.claudeCredentialSource && !detection.anthropicEnv) {
|
|
175
|
+
console.log(" Claude can be set up later from Claude Code or when choosing Claude models.");
|
|
176
|
+
}
|
|
177
|
+
if (!detection.codexCredentialSource && !detection.openaiEnv) {
|
|
178
|
+
console.log(" Codex can be set up later from Codex or when choosing Codex models.");
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async function configureAnthropic(store, config) {
|
|
182
|
+
if (store.profiles["anthropic:claude-code"] || store.profiles["anthropic:env"]) {
|
|
183
|
+
config.backends.claude = {
|
|
184
|
+
...(config.backends.claude ?? {}),
|
|
185
|
+
profileId: store.profiles["anthropic:claude-code"] ? "anthropic:claude-code" : "anthropic:env",
|
|
186
|
+
model: config.backends.claude?.model ?? "sonnet",
|
|
187
|
+
effort: "xhigh",
|
|
188
|
+
};
|
|
189
|
+
return store;
|
|
190
|
+
}
|
|
191
|
+
const choice = await promptSelect("Anthropic / Claude Code auth", [
|
|
192
|
+
{
|
|
193
|
+
value: "setup-token",
|
|
194
|
+
label: "Paste setup-token",
|
|
195
|
+
hint: "Run `claude setup-token`, then paste the generated token",
|
|
196
|
+
},
|
|
197
|
+
{ value: "api-key", label: "Anthropic API key", hint: "Direct API key" },
|
|
198
|
+
{ value: "skip", label: "Skip Anthropic for now" },
|
|
199
|
+
], "skip");
|
|
200
|
+
if (choice === "setup-token") {
|
|
201
|
+
const token = await promptSecret("Paste Anthropic setup-token");
|
|
202
|
+
store.profiles["anthropic:default"] = {
|
|
203
|
+
type: "token",
|
|
204
|
+
provider: "anthropic",
|
|
205
|
+
token,
|
|
206
|
+
};
|
|
207
|
+
config.backends.claude = { ...(config.backends.claude ?? {}), profileId: "anthropic:default" };
|
|
208
|
+
}
|
|
209
|
+
if (choice === "api-key") {
|
|
210
|
+
const key = await promptSecret("Paste Anthropic API key");
|
|
211
|
+
store.profiles["anthropic:default"] = {
|
|
212
|
+
type: "api_key",
|
|
213
|
+
provider: "anthropic",
|
|
214
|
+
key,
|
|
215
|
+
};
|
|
216
|
+
config.backends.claude = { ...(config.backends.claude ?? {}), profileId: "anthropic:default" };
|
|
217
|
+
}
|
|
218
|
+
return store;
|
|
219
|
+
}
|
|
220
|
+
async function configureOpenAI(store, config) {
|
|
221
|
+
if (store.profiles["openai-codex:default"] || store.profiles["openai:env"]) {
|
|
222
|
+
config.backends.codex = {
|
|
223
|
+
...(config.backends.codex ?? {}),
|
|
224
|
+
profileId: store.profiles["openai-codex:default"] ? "openai-codex:default" : "openai:env",
|
|
225
|
+
model: config.backends.codex?.model ?? CODEX_DEFAULT_MODEL,
|
|
226
|
+
reasoningEffort: "xhigh",
|
|
227
|
+
};
|
|
228
|
+
return store;
|
|
229
|
+
}
|
|
230
|
+
const choice = await promptSelect("OpenAI / Codex auth", [
|
|
231
|
+
{ value: "codex-login", label: "Run Codex login", hint: "Uses official Codex CLI auth" },
|
|
232
|
+
{ value: "api-key", label: "OpenAI API key", hint: "Direct API key" },
|
|
233
|
+
{ value: "skip", label: "Skip OpenAI for now" },
|
|
234
|
+
], "skip");
|
|
235
|
+
if (choice === "codex-login") {
|
|
236
|
+
// codex login is interactive: inherit stdio so the user can complete the flow
|
|
237
|
+
// (the default pipes ignore stdin and capture output, hanging the login).
|
|
238
|
+
await runCommand("codex", ["login"], { inheritStdio: true });
|
|
239
|
+
const codex = await readCodexCliCredential();
|
|
240
|
+
if (codex?.credential) {
|
|
241
|
+
store.profiles["openai-codex:default"] = codex.credential;
|
|
242
|
+
config.backends.codex = { ...(config.backends.codex ?? {}), profileId: "openai-codex:default" };
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (choice === "api-key") {
|
|
246
|
+
const key = await promptSecret("Paste OpenAI API key");
|
|
247
|
+
store.profiles["openai:default"] = {
|
|
248
|
+
type: "api_key",
|
|
249
|
+
provider: "openai",
|
|
250
|
+
key,
|
|
251
|
+
};
|
|
252
|
+
config.backends.codex = { ...(config.backends.codex ?? {}), profileId: "openai:default" };
|
|
253
|
+
}
|
|
254
|
+
return store;
|
|
255
|
+
}
|
|
256
|
+
export async function readClaudeCliCredential() {
|
|
257
|
+
const keychain = readClaudeKeychainCredential();
|
|
258
|
+
if (keychain) {
|
|
259
|
+
return { credential: keychain, source: "macOS Keychain Claude Code-credentials" };
|
|
260
|
+
}
|
|
261
|
+
const filePath = expandHome("~/.claude/.credentials.json");
|
|
262
|
+
const raw = await readJson(filePath);
|
|
263
|
+
const parsed = parseClaudeOauth(raw?.claudeAiOauth);
|
|
264
|
+
return parsed ? { credential: parsed, source: shortenHome(filePath) } : null;
|
|
265
|
+
}
|
|
266
|
+
function readClaudeKeychainCredential() {
|
|
267
|
+
if (process.platform !== "darwin") {
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
270
|
+
const result = runCommandSync("security", ["find-generic-password", "-s", CLAUDE_KEYCHAIN_SERVICE, "-w"], {
|
|
271
|
+
allowFailure: true,
|
|
272
|
+
});
|
|
273
|
+
if (result.code !== 0 || !result.stdout.trim()) {
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
try {
|
|
277
|
+
const raw = JSON.parse(result.stdout.trim());
|
|
278
|
+
return parseClaudeOauth(raw.claudeAiOauth);
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
function parseClaudeOauth(raw) {
|
|
285
|
+
if (!raw || typeof raw !== "object") {
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
const entry = raw;
|
|
289
|
+
const access = entry.accessToken;
|
|
290
|
+
const refresh = entry.refreshToken;
|
|
291
|
+
const expires = entry.expiresAt;
|
|
292
|
+
if (typeof access !== "string" || !access || typeof expires !== "number") {
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
295
|
+
if (typeof refresh === "string" && refresh) {
|
|
296
|
+
return {
|
|
297
|
+
type: "oauth",
|
|
298
|
+
provider: "anthropic",
|
|
299
|
+
access,
|
|
300
|
+
refresh,
|
|
301
|
+
expires,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
return {
|
|
305
|
+
type: "token",
|
|
306
|
+
provider: "anthropic",
|
|
307
|
+
token: access,
|
|
308
|
+
expires,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
export async function readCodexCliCredential() {
|
|
312
|
+
const keychain = readCodexKeychainCredential();
|
|
313
|
+
if (keychain) {
|
|
314
|
+
return { credential: keychain, source: "macOS Keychain Codex Auth" };
|
|
315
|
+
}
|
|
316
|
+
const filePath = codexAuthPath();
|
|
317
|
+
const raw = await readJson(filePath);
|
|
318
|
+
const parsed = parseCodexAuth(raw, filePath);
|
|
319
|
+
return parsed ? { credential: parsed, source: shortenHome(filePath) } : null;
|
|
320
|
+
}
|
|
321
|
+
function readCodexKeychainCredential() {
|
|
322
|
+
if (process.platform !== "darwin") {
|
|
323
|
+
return null;
|
|
324
|
+
}
|
|
325
|
+
const account = computeCodexKeychainAccount();
|
|
326
|
+
const result = runCommandSync("security", ["find-generic-password", "-s", CODEX_KEYCHAIN_SERVICE, "-a", account, "-w"], { allowFailure: true });
|
|
327
|
+
if (result.code !== 0 || !result.stdout.trim()) {
|
|
328
|
+
return null;
|
|
329
|
+
}
|
|
330
|
+
try {
|
|
331
|
+
return parseCodexAuth(JSON.parse(result.stdout.trim()), codexAuthPath());
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
return null;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
function parseCodexAuth(raw, authPathForExpiry) {
|
|
338
|
+
if (!raw || typeof raw !== "object") {
|
|
339
|
+
return null;
|
|
340
|
+
}
|
|
341
|
+
const data = raw;
|
|
342
|
+
const tokens = data.tokens;
|
|
343
|
+
if (!tokens || typeof tokens !== "object") {
|
|
344
|
+
return null;
|
|
345
|
+
}
|
|
346
|
+
const tokenRecord = tokens;
|
|
347
|
+
const access = tokenRecord.access_token;
|
|
348
|
+
const refresh = tokenRecord.refresh_token;
|
|
349
|
+
if (typeof access !== "string" || !access || typeof refresh !== "string" || !refresh) {
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
const lastRefresh = data.last_refresh;
|
|
353
|
+
const lastRefreshMs = typeof lastRefresh === "string" || typeof lastRefresh === "number"
|
|
354
|
+
? new Date(lastRefresh).getTime()
|
|
355
|
+
: Number.NaN;
|
|
356
|
+
let expires = Number.isFinite(lastRefreshMs) ? lastRefreshMs + 60 * 60 * 1000 : Date.now() + 60 * 60 * 1000;
|
|
357
|
+
try {
|
|
358
|
+
if (Number.isNaN(lastRefreshMs)) {
|
|
359
|
+
expires = fs.statSync(authPathForExpiry).mtimeMs + 60 * 60 * 1000;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
catch {
|
|
363
|
+
// Keep fallback expiry.
|
|
364
|
+
}
|
|
365
|
+
return {
|
|
366
|
+
type: "oauth",
|
|
367
|
+
provider: "openai-codex",
|
|
368
|
+
access,
|
|
369
|
+
refresh,
|
|
370
|
+
expires,
|
|
371
|
+
...(typeof tokenRecord.account_id === "string" ? { accountId: tokenRecord.account_id } : {}),
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
function codexHome() {
|
|
375
|
+
const configured = process.env.CODEX_HOME?.trim();
|
|
376
|
+
const home = configured ? expandHome(configured) : expandHome("~/.codex");
|
|
377
|
+
try {
|
|
378
|
+
return fs.realpathSync.native(home);
|
|
379
|
+
}
|
|
380
|
+
catch {
|
|
381
|
+
return home;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
function codexAuthPath() {
|
|
385
|
+
return path.join(codexHome(), "auth.json");
|
|
386
|
+
}
|
|
387
|
+
function computeCodexKeychainAccount() {
|
|
388
|
+
const hash = createHash("sha256").update(codexHome()).digest("hex");
|
|
389
|
+
return `cli|${hash.slice(0, 16)}`;
|
|
390
|
+
}
|
|
391
|
+
function status(ok) {
|
|
392
|
+
return ok ? "ok" : "missing";
|
|
393
|
+
}
|
|
394
|
+
export async function authStoreExists() {
|
|
395
|
+
return await pathExists(authStorePath());
|
|
396
|
+
}
|
|
397
|
+
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|