@markusylisiurunen/tau 0.2.0-alpha.1 → 0.2.0-alpha.3
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 +12 -2
- package/dist/core/auth/auth_manager.js +150 -0
- package/dist/core/auth/auth_manager.js.map +1 -0
- package/dist/core/auth/auth_messages.js +1 -1
- package/dist/core/auth/auth_messages.js.map +1 -1
- package/dist/core/auth/auth_storage.js +58 -51
- package/dist/core/auth/auth_storage.js.map +1 -1
- package/dist/core/auth/cli.js +138 -9
- package/dist/core/auth/cli.js.map +1 -1
- package/dist/core/auth/credential_resolver.js +10 -2
- package/dist/core/auth/credential_resolver.js.map +1 -1
- package/dist/core/auth/index.js +2 -1
- package/dist/core/auth/index.js.map +1 -1
- package/dist/core/auth/jwt.js +28 -0
- package/dist/core/auth/jwt.js.map +1 -0
- package/dist/core/auth/provider_adapter.js +2 -0
- package/dist/core/auth/provider_adapter.js.map +1 -0
- package/dist/core/auth/providers/openai_codex.js +416 -0
- package/dist/core/auth/providers/openai_codex.js.map +1 -0
- package/dist/core/auth/types.js +2 -0
- package/dist/core/auth/types.js.map +1 -0
- package/dist/core/cli.js +2 -2
- package/dist/core/cli.js.map +1 -1
- package/dist/core/config/content_loader.js +29 -36
- package/dist/core/config/content_loader.js.map +1 -1
- package/dist/core/config/schema.js +2 -5
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/personas.js +8 -2
- package/dist/core/personas.js.map +1 -1
- package/dist/core/session/core_session.js +3 -0
- package/dist/core/session/core_session.js.map +1 -1
- package/dist/core/session/session_engine.js +13 -1
- package/dist/core/session/session_engine.js.map +1 -1
- package/dist/core/subagents/subagent_engine.js +12 -1
- package/dist/core/subagents/subagent_engine.js.map +1 -1
- package/dist/core/tools/bash.js +19 -3
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/version.js +1 -1
- package/dist/main.js +24 -11
- package/dist/main.js.map +1 -1
- package/dist/tui/chat_controller.js +1 -1
- package/dist/tui/chat_controller.js.map +1 -1
- package/package.json +6 -3
- package/patches/@mariozechner+pi-ai+0.47.0.patch +19 -0
package/README.md
CHANGED
|
@@ -39,7 +39,7 @@ environment variables take precedence over the config file.
|
|
|
39
39
|
to use the OpenAI Codex subscription provider (`openai-codex`), run:
|
|
40
40
|
|
|
41
41
|
```sh
|
|
42
|
-
tau login
|
|
42
|
+
tau auth login codex
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
this prints a login URL and starts a local callback server on `127.0.0.1:1455`. complete the
|
|
@@ -47,12 +47,22 @@ login in your browser and tau will store tokens in `~/.config/tau/auth.json`. if
|
|
|
47
47
|
is already in use, or the browser callback fails, tau will prompt you to paste the redirect
|
|
48
48
|
URL/code. if you see token refresh errors later, run the login command again to re-authenticate.
|
|
49
49
|
|
|
50
|
+
to list authenticated accounts and usage:
|
|
51
|
+
|
|
52
|
+
```sh
|
|
53
|
+
tau auth list
|
|
54
|
+
```
|
|
55
|
+
|
|
50
56
|
to remove stored credentials:
|
|
51
57
|
|
|
52
58
|
```sh
|
|
53
|
-
tau logout
|
|
59
|
+
tau auth logout codex --account <email>
|
|
54
60
|
```
|
|
55
61
|
|
|
62
|
+
to force a specific Codex account for this run, set `TAU_CODEX_ACCOUNT` to the
|
|
63
|
+
account email or account id (same matching as `auth logout`). when set, tau will
|
|
64
|
+
only use that account and will not fail over.
|
|
65
|
+
|
|
56
66
|
`openai-codex` does **not** use `OPENAI_API_KEY` or `apiKeys.openai`; it relies on the OAuth
|
|
57
67
|
tokens in `~/.config/tau/auth.json`.
|
|
58
68
|
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { OpenAICodexAdapter } from "./providers/openai_codex.js";
|
|
2
|
+
export class AuthManager {
|
|
3
|
+
authStorage;
|
|
4
|
+
static sessionSelections = new Map();
|
|
5
|
+
adapters;
|
|
6
|
+
constructor(authStorage, adapters) {
|
|
7
|
+
this.authStorage = authStorage;
|
|
8
|
+
const defaultAdapters = adapters ?? [new OpenAICodexAdapter()];
|
|
9
|
+
this.adapters = new Map(defaultAdapters.map((adapter) => [adapter.id, adapter]));
|
|
10
|
+
}
|
|
11
|
+
listProviders() {
|
|
12
|
+
return [...this.adapters.values()].map((adapter) => ({
|
|
13
|
+
id: adapter.id,
|
|
14
|
+
label: adapter.label,
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
17
|
+
async listProviderAccounts() {
|
|
18
|
+
this.authStorage.reload();
|
|
19
|
+
const invalidReason = this.authStorage.getInvalidReason();
|
|
20
|
+
if (invalidReason) {
|
|
21
|
+
throw new Error(invalidReason);
|
|
22
|
+
}
|
|
23
|
+
const results = [];
|
|
24
|
+
for (const adapter of this.adapters.values()) {
|
|
25
|
+
const accounts = await adapter.listAccountInfo(this.authStorage);
|
|
26
|
+
if (accounts.length > 0) {
|
|
27
|
+
const forcedAccountId = adapter.getForcedAccountId?.(this.authStorage);
|
|
28
|
+
const selectedAccountId = forcedAccountId ?? adapter.selectAccountFromList?.(accounts);
|
|
29
|
+
results.push({
|
|
30
|
+
providerId: adapter.id,
|
|
31
|
+
providerLabel: adapter.label,
|
|
32
|
+
accounts,
|
|
33
|
+
selectedAccountId,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return results;
|
|
38
|
+
}
|
|
39
|
+
addOAuthAccount(providerId, credentials) {
|
|
40
|
+
const adapter = this.adapters.get(providerId);
|
|
41
|
+
if (!adapter) {
|
|
42
|
+
throw new Error(`unsupported auth provider "${providerId}"`);
|
|
43
|
+
}
|
|
44
|
+
this.authStorage.reload();
|
|
45
|
+
adapter.addOAuthAccount(this.authStorage, credentials);
|
|
46
|
+
}
|
|
47
|
+
removeAccount(providerId, accountId) {
|
|
48
|
+
const adapter = this.adapters.get(providerId);
|
|
49
|
+
if (!adapter) {
|
|
50
|
+
throw new Error(`unsupported auth provider "${providerId}"`);
|
|
51
|
+
}
|
|
52
|
+
this.authStorage.reload();
|
|
53
|
+
const removed = adapter.removeAccount(this.authStorage, accountId);
|
|
54
|
+
if (!removed) {
|
|
55
|
+
throw new Error(`account "${accountId}" not found for provider "${providerId}"`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async getApiKey(provider, options) {
|
|
59
|
+
const adapter = this.adapters.get(provider);
|
|
60
|
+
if (!adapter) {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
this.authStorage.reload();
|
|
64
|
+
const invalidReason = this.authStorage.getInvalidReason();
|
|
65
|
+
if (invalidReason) {
|
|
66
|
+
throw new Error(invalidReason);
|
|
67
|
+
}
|
|
68
|
+
const forcedAccountId = adapter.getForcedAccountId?.(this.authStorage);
|
|
69
|
+
if (forcedAccountId) {
|
|
70
|
+
const apiKey = await adapter.getApiKeyForAccount(this.authStorage, forcedAccountId);
|
|
71
|
+
if (apiKey) {
|
|
72
|
+
if (options?.sessionId) {
|
|
73
|
+
AuthManager.setSelectedAccount(options.sessionId, adapter.id, forcedAccountId);
|
|
74
|
+
}
|
|
75
|
+
return apiKey;
|
|
76
|
+
}
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
const sessionId = options?.sessionId;
|
|
80
|
+
if (sessionId) {
|
|
81
|
+
const selectedAccountId = AuthManager.getSelectedAccount(sessionId, adapter.id);
|
|
82
|
+
if (selectedAccountId) {
|
|
83
|
+
const apiKey = await adapter.getApiKeyForAccount(this.authStorage, selectedAccountId);
|
|
84
|
+
if (apiKey) {
|
|
85
|
+
const usable = adapter.isAccountUsable
|
|
86
|
+
? await adapter.isAccountUsable(this.authStorage, selectedAccountId, { apiKey })
|
|
87
|
+
: true;
|
|
88
|
+
if (usable) {
|
|
89
|
+
return apiKey;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
AuthManager.clearSelectedAccount(sessionId, adapter.id);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const selection = await adapter.selectAccount(this.authStorage);
|
|
96
|
+
if (!selection) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
if (sessionId) {
|
|
100
|
+
AuthManager.setSelectedAccount(sessionId, adapter.id, selection.accountId);
|
|
101
|
+
}
|
|
102
|
+
return selection.apiKey;
|
|
103
|
+
}
|
|
104
|
+
async noteProviderError(provider, options) {
|
|
105
|
+
const adapter = this.adapters.get(provider);
|
|
106
|
+
if (!adapter) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
this.authStorage.reload();
|
|
110
|
+
const invalidReason = this.authStorage.getInvalidReason();
|
|
111
|
+
if (invalidReason) {
|
|
112
|
+
throw new Error(invalidReason);
|
|
113
|
+
}
|
|
114
|
+
const sessionId = options?.sessionId;
|
|
115
|
+
if (!sessionId)
|
|
116
|
+
return;
|
|
117
|
+
const forcedAccountId = adapter.getForcedAccountId?.(this.authStorage);
|
|
118
|
+
const selectedAccountId = forcedAccountId ?? AuthManager.getSelectedAccount(sessionId, adapter.id);
|
|
119
|
+
if (!selectedAccountId)
|
|
120
|
+
return;
|
|
121
|
+
if (!adapter.handleProviderError) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const shouldClear = await adapter.handleProviderError(this.authStorage, selectedAccountId, options?.error);
|
|
125
|
+
if (shouldClear && !forcedAccountId) {
|
|
126
|
+
AuthManager.clearSelectedAccount(sessionId, adapter.id);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
static getSelectedAccount(sessionId, providerId) {
|
|
130
|
+
return AuthManager.sessionSelections.get(sessionId)?.get(providerId);
|
|
131
|
+
}
|
|
132
|
+
static setSelectedAccount(sessionId, providerId, accountId) {
|
|
133
|
+
let selections = AuthManager.sessionSelections.get(sessionId);
|
|
134
|
+
if (!selections) {
|
|
135
|
+
selections = new Map();
|
|
136
|
+
AuthManager.sessionSelections.set(sessionId, selections);
|
|
137
|
+
}
|
|
138
|
+
selections.set(providerId, accountId);
|
|
139
|
+
}
|
|
140
|
+
static clearSelectedAccount(sessionId, providerId) {
|
|
141
|
+
const selections = AuthManager.sessionSelections.get(sessionId);
|
|
142
|
+
if (!selections)
|
|
143
|
+
return;
|
|
144
|
+
selections.delete(providerId);
|
|
145
|
+
if (selections.size === 0) {
|
|
146
|
+
AuthManager.sessionSelections.delete(sessionId);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=auth_manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth_manager.js","sourceRoot":"","sources":["../../../src/core/auth/auth_manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export function formatCodexAuthError(authPath, detail) {
|
|
2
2
|
const base = "OpenAI Codex credentials are missing or expired.";
|
|
3
|
-
const hint = `run "tau login
|
|
3
|
+
const hint = `run "tau auth login codex" to authenticate and store tokens in ${authPath}.`;
|
|
4
4
|
return detail ? `${base} ${detail} ${hint}` : `${base} ${hint}`;
|
|
5
5
|
}
|
|
6
6
|
//# sourceMappingURL=auth_messages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth_messages.js","sourceRoot":"","sources":["../../../src/core/auth/auth_messages.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,MAAe;IACpE,MAAM,IAAI,GAAG,kDAAkD,CAAC;IAChE,MAAM,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"auth_messages.js","sourceRoot":"","sources":["../../../src/core/auth/auth_messages.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,MAAe;IACpE,MAAM,IAAI,GAAG,kDAAkD,CAAC;IAChE,MAAM,IAAI,GAAG,kEAAkE,QAAQ,GAAG,CAAC;IAC3F,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;AAClE,CAAC"}
|
|
@@ -1,26 +1,29 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { dirname } from "node:path";
|
|
4
|
-
import { getOAuthApiKey } from "@mariozechner/pi-ai";
|
|
5
4
|
export class AuthStorage {
|
|
6
5
|
authPath;
|
|
7
|
-
data = {};
|
|
8
|
-
|
|
6
|
+
data = { providers: {} };
|
|
7
|
+
invalidReason;
|
|
9
8
|
constructor(authPath) {
|
|
10
9
|
this.authPath = authPath;
|
|
11
10
|
this.reload();
|
|
12
11
|
}
|
|
13
12
|
reload() {
|
|
14
13
|
if (!existsSync(this.authPath)) {
|
|
15
|
-
this.data = {};
|
|
14
|
+
this.data = { providers: {} };
|
|
15
|
+
this.invalidReason = undefined;
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
18
|
try {
|
|
19
19
|
const parsed = JSON.parse(readFileSync(this.authPath, "utf-8"));
|
|
20
|
-
|
|
20
|
+
const validated = validateAuthStorageData(parsed);
|
|
21
|
+
this.data = validated.data;
|
|
22
|
+
this.invalidReason = validated.invalidReason;
|
|
21
23
|
}
|
|
22
|
-
catch {
|
|
23
|
-
this.data = {};
|
|
24
|
+
catch (error) {
|
|
25
|
+
this.data = { providers: {} };
|
|
26
|
+
this.invalidReason = `failed to parse auth.json: ${error?.message ?? String(error)}`;
|
|
24
27
|
}
|
|
25
28
|
}
|
|
26
29
|
save() {
|
|
@@ -33,59 +36,63 @@ export class AuthStorage {
|
|
|
33
36
|
renameSync(tmpPath, this.authPath);
|
|
34
37
|
chmodSync(this.authPath, 0o600);
|
|
35
38
|
}
|
|
36
|
-
|
|
37
|
-
return this.data
|
|
39
|
+
getData() {
|
|
40
|
+
return this.data;
|
|
38
41
|
}
|
|
39
|
-
|
|
40
|
-
this.data
|
|
42
|
+
setData(data) {
|
|
43
|
+
this.data = data;
|
|
44
|
+
this.invalidReason = undefined;
|
|
41
45
|
this.save();
|
|
42
46
|
}
|
|
43
|
-
|
|
44
|
-
|
|
47
|
+
update(mutator) {
|
|
48
|
+
mutator(this.data);
|
|
49
|
+
this.invalidReason = undefined;
|
|
45
50
|
this.save();
|
|
46
51
|
}
|
|
47
|
-
|
|
48
|
-
return
|
|
52
|
+
getInvalidReason() {
|
|
53
|
+
return this.invalidReason;
|
|
49
54
|
}
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
}
|
|
56
|
+
function validateAuthStorageData(value) {
|
|
57
|
+
const invalidReason = 'auth.json format has changed. please run "tau auth login codex" to re-authenticate.';
|
|
58
|
+
if (!value || typeof value !== "object") {
|
|
59
|
+
return { data: { providers: {} }, invalidReason };
|
|
52
60
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const credential = this.data[provider];
|
|
57
|
-
if (!credential) {
|
|
58
|
-
return undefined;
|
|
59
|
-
}
|
|
60
|
-
if (credential.type === "api_key") {
|
|
61
|
-
return credential.key;
|
|
62
|
-
}
|
|
63
|
-
const oauthCredentials = {};
|
|
64
|
-
for (const [key, value] of Object.entries(this.data)) {
|
|
65
|
-
if (value.type === "oauth") {
|
|
66
|
-
oauthCredentials[key] = value;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
const result = await getOAuthApiKey(provider, oauthCredentials);
|
|
70
|
-
if (!result) {
|
|
71
|
-
return undefined;
|
|
72
|
-
}
|
|
73
|
-
this.data[provider] = { type: "oauth", ...result.newCredentials };
|
|
74
|
-
this.save();
|
|
75
|
-
return result.apiKey;
|
|
76
|
-
});
|
|
61
|
+
const providersValue = value.providers;
|
|
62
|
+
if (!providersValue || typeof providersValue !== "object" || Array.isArray(providersValue)) {
|
|
63
|
+
return { data: { providers: {} }, invalidReason };
|
|
77
64
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
65
|
+
const providers = {};
|
|
66
|
+
for (const [key, providerValue] of Object.entries(providersValue)) {
|
|
67
|
+
if (!providerValue || typeof providerValue !== "object") {
|
|
68
|
+
providers[key] = { accounts: [] };
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const accounts = providerValue.accounts;
|
|
72
|
+
if (Array.isArray(accounts)) {
|
|
73
|
+
providers[key] = { accounts: accounts.filter(isStoredAccount) };
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
providers[key] = { accounts: [] };
|
|
83
77
|
}
|
|
84
|
-
const inFlight = action().finally(() => {
|
|
85
|
-
AuthStorage.refreshLocks.delete(lockKey);
|
|
86
|
-
});
|
|
87
|
-
AuthStorage.refreshLocks.set(lockKey, inFlight);
|
|
88
|
-
return inFlight;
|
|
89
78
|
}
|
|
79
|
+
return { data: { providers } };
|
|
80
|
+
}
|
|
81
|
+
function isStoredAccount(value) {
|
|
82
|
+
if (!value || typeof value !== "object")
|
|
83
|
+
return false;
|
|
84
|
+
const record = value;
|
|
85
|
+
const type = record.type;
|
|
86
|
+
if (type === "oauth") {
|
|
87
|
+
return (typeof record.accountId === "string" &&
|
|
88
|
+
typeof record.access === "string" &&
|
|
89
|
+
typeof record.refresh === "string" &&
|
|
90
|
+
typeof record.expires === "number" &&
|
|
91
|
+
typeof record.idToken === "string");
|
|
92
|
+
}
|
|
93
|
+
if (type === "api_key") {
|
|
94
|
+
return typeof record.accountId === "string" && typeof record.key === "string";
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
90
97
|
}
|
|
91
98
|
//# sourceMappingURL=auth_storage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth_storage.js","sourceRoot":"","sources":["../../../src/core/auth/auth_storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"auth_storage.js","sourceRoot":"","sources":["../../../src/core/auth/auth_storage.ts"],"names":[],"mappings":"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"}
|
package/dist/core/auth/cli.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { loginOpenAICodex } from "@mariozechner/pi-ai";
|
|
2
|
+
import { Chalk } from "chalk";
|
|
3
|
+
import { AuthManager } from "./auth_manager.js";
|
|
2
4
|
export const SUPPORTED_OAUTH_PROVIDERS = [
|
|
3
|
-
{ id: "openai-codex", label: "OpenAI Codex (ChatGPT Plus/Pro)" },
|
|
5
|
+
{ id: "openai-codex", cliId: "codex", label: "OpenAI Codex (ChatGPT Plus/Pro)" },
|
|
4
6
|
];
|
|
5
7
|
const DEFAULT_LOGIN_HANDLERS = {
|
|
6
8
|
"openai-codex": (callbacks) => loginOpenAICodex({
|
|
@@ -9,11 +11,15 @@ const DEFAULT_LOGIN_HANDLERS = {
|
|
|
9
11
|
onProgress: callbacks.onProgress,
|
|
10
12
|
}),
|
|
11
13
|
};
|
|
14
|
+
const chalk = new Chalk({ level: process.stdout.isTTY ? 2 : 0 });
|
|
15
|
+
const BAR_WIDTH = 10;
|
|
12
16
|
function normalizeProvider(value) {
|
|
13
17
|
return value.trim().toLowerCase();
|
|
14
18
|
}
|
|
15
19
|
function formatProviderList(providers) {
|
|
16
|
-
return providers
|
|
20
|
+
return providers
|
|
21
|
+
.map((provider, index) => ` ${index + 1}. ${provider.label} (${provider.cliId})`)
|
|
22
|
+
.join("\n");
|
|
17
23
|
}
|
|
18
24
|
async function promptForProvider(prompt, log, providers) {
|
|
19
25
|
log("select a provider:\n");
|
|
@@ -30,9 +36,9 @@ function resolveProvider(providerArg, providers) {
|
|
|
30
36
|
if (!providerArg)
|
|
31
37
|
return undefined;
|
|
32
38
|
const normalized = normalizeProvider(providerArg);
|
|
33
|
-
const resolved = providers.find((provider) => provider.id === normalized)?.id;
|
|
39
|
+
const resolved = providers.find((provider) => provider.id === normalized || provider.cliId === normalized)?.id;
|
|
34
40
|
if (!resolved) {
|
|
35
|
-
const available = providers.map((entry) => entry.
|
|
41
|
+
const available = providers.map((entry) => entry.cliId).join(", ");
|
|
36
42
|
throw new Error(`unknown provider "${providerArg}". available: ${available}`);
|
|
37
43
|
}
|
|
38
44
|
return resolved;
|
|
@@ -51,7 +57,7 @@ export async function runLoginCommand(options) {
|
|
|
51
57
|
throw new Error(`unknown provider "${provider}". available: ${available}`);
|
|
52
58
|
}
|
|
53
59
|
log(`logging in to ${provider}...`);
|
|
54
|
-
const credentials = await handler({
|
|
60
|
+
const credentials = (await handler({
|
|
55
61
|
onAuth: (info) => {
|
|
56
62
|
log("");
|
|
57
63
|
if (provider === "openai-codex") {
|
|
@@ -71,8 +77,12 @@ export async function runLoginCommand(options) {
|
|
|
71
77
|
},
|
|
72
78
|
onPrompt: async (prompt) => options.prompt(prompt),
|
|
73
79
|
onProgress: (message) => log(message),
|
|
74
|
-
});
|
|
75
|
-
|
|
80
|
+
}));
|
|
81
|
+
if (provider === "openai-codex" && !credentials.idToken) {
|
|
82
|
+
throw new Error("missing idToken from OAuth login; please update the Codex OAuth flow");
|
|
83
|
+
}
|
|
84
|
+
const authManager = new AuthManager(options.authStorage);
|
|
85
|
+
authManager.addOAuthAccount(provider, credentials);
|
|
76
86
|
log(`credentials saved to ${options.authPath}`);
|
|
77
87
|
}
|
|
78
88
|
export async function runLogoutCommand(options) {
|
|
@@ -82,7 +92,126 @@ export async function runLogoutCommand(options) {
|
|
|
82
92
|
if (!provider) {
|
|
83
93
|
provider = await promptForProvider(options.prompt, log, providers);
|
|
84
94
|
}
|
|
85
|
-
options.
|
|
86
|
-
|
|
95
|
+
if (!options.accountId) {
|
|
96
|
+
throw new Error("missing --account <id> for logout");
|
|
97
|
+
}
|
|
98
|
+
const authManager = new AuthManager(options.authStorage);
|
|
99
|
+
authManager.removeAccount(provider, options.accountId);
|
|
100
|
+
log(`removed account ${options.accountId} for ${provider} from ${options.authPath}`);
|
|
101
|
+
}
|
|
102
|
+
export async function runListCommand(options) {
|
|
103
|
+
const log = options.log ?? console.log;
|
|
104
|
+
const authManager = new AuthManager(options.authStorage);
|
|
105
|
+
const providers = await authManager.listProviderAccounts();
|
|
106
|
+
if (providers.length === 0) {
|
|
107
|
+
log("no authenticated accounts found.");
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
for (const [providerIndex, provider] of providers.entries()) {
|
|
111
|
+
if (providerIndex > 0)
|
|
112
|
+
log("");
|
|
113
|
+
log(`${provider.providerLabel} (${provider.providerId})`);
|
|
114
|
+
const selectedId = provider.selectedAccountId;
|
|
115
|
+
for (const [accountIndex, account] of provider.accounts.entries()) {
|
|
116
|
+
const isSelected = selectedId === account.accountId;
|
|
117
|
+
const marker = isSelected ? chalk.yellow("★") : " ";
|
|
118
|
+
const label = account.email ?? account.accountId;
|
|
119
|
+
const plan = account.plan ? `[${account.plan}]` : undefined;
|
|
120
|
+
const headerSegments = [` ${marker}`, label, plan].filter(Boolean);
|
|
121
|
+
log(headerSegments.join(" "));
|
|
122
|
+
if (account.usage) {
|
|
123
|
+
for (const window of account.usage.windows) {
|
|
124
|
+
const labelText = formatWindowLabel(window.windowSeconds) ?? window.name;
|
|
125
|
+
const remaining = remainingPercent(window.usedPercent);
|
|
126
|
+
const percentText = `${formatPercent(remaining)}% left`;
|
|
127
|
+
const bar = formatBarRemaining(remaining);
|
|
128
|
+
const reset = formatResetAt(window.resetAt);
|
|
129
|
+
const resetRelative = formatRelativeReset(window.resetAt);
|
|
130
|
+
const resetText = reset
|
|
131
|
+
? chalk.dim(`resets ${reset}${resetRelative ? ` (${resetRelative})` : ""}`)
|
|
132
|
+
: undefined;
|
|
133
|
+
const lineSegments = [` ${labelText}`, percentText, bar, resetText].filter(Boolean);
|
|
134
|
+
log(lineSegments.join(" "));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (accountIndex < provider.accounts.length - 1) {
|
|
138
|
+
log("");
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function formatWindowLabel(windowSeconds) {
|
|
144
|
+
if (!Number.isFinite(windowSeconds) || windowSeconds <= 0)
|
|
145
|
+
return undefined;
|
|
146
|
+
if (windowSeconds % 86400 === 0) {
|
|
147
|
+
return `${Math.round(windowSeconds / 86400)}d`;
|
|
148
|
+
}
|
|
149
|
+
if (windowSeconds % 3600 === 0) {
|
|
150
|
+
return `${Math.round(windowSeconds / 3600)}h`;
|
|
151
|
+
}
|
|
152
|
+
if (windowSeconds % 60 === 0) {
|
|
153
|
+
return `${Math.round(windowSeconds / 60)}m`;
|
|
154
|
+
}
|
|
155
|
+
return `${Math.round(windowSeconds)}s`;
|
|
156
|
+
}
|
|
157
|
+
function formatResetAt(epochSeconds) {
|
|
158
|
+
if (!Number.isFinite(epochSeconds) || epochSeconds <= 0)
|
|
159
|
+
return undefined;
|
|
160
|
+
const date = new Date(epochSeconds * 1000);
|
|
161
|
+
if (Number.isNaN(date.getTime()))
|
|
162
|
+
return undefined;
|
|
163
|
+
const day = String(date.getDate()).padStart(2, "0");
|
|
164
|
+
const month = String(date.getMonth() + 1).padStart(2, "0");
|
|
165
|
+
const year = date.getFullYear();
|
|
166
|
+
const hours = String(date.getHours()).padStart(2, "0");
|
|
167
|
+
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
168
|
+
return `${day}.${month}.${year} ${hours}:${minutes}`;
|
|
169
|
+
}
|
|
170
|
+
function formatRelativeReset(epochSeconds) {
|
|
171
|
+
if (!Number.isFinite(epochSeconds) || epochSeconds <= 0)
|
|
172
|
+
return undefined;
|
|
173
|
+
const nowMs = Date.now();
|
|
174
|
+
const deltaMs = epochSeconds * 1000 - nowMs;
|
|
175
|
+
if (!Number.isFinite(deltaMs))
|
|
176
|
+
return undefined;
|
|
177
|
+
if (deltaMs <= 0)
|
|
178
|
+
return "now";
|
|
179
|
+
const totalMinutes = Math.max(1, Math.ceil(deltaMs / 60000));
|
|
180
|
+
if (totalMinutes < 60) {
|
|
181
|
+
return `in ${totalMinutes} min${totalMinutes === 1 ? "" : "s"}`;
|
|
182
|
+
}
|
|
183
|
+
const totalHours = Math.round(totalMinutes / 60);
|
|
184
|
+
if (totalHours < 24) {
|
|
185
|
+
return `in ${totalHours} hr${totalHours === 1 ? "" : "s"}`;
|
|
186
|
+
}
|
|
187
|
+
const totalDays = Math.round(totalHours / 24);
|
|
188
|
+
return `in ${totalDays} day${totalDays === 1 ? "" : "s"}`;
|
|
189
|
+
}
|
|
190
|
+
function formatBarRemaining(remaining) {
|
|
191
|
+
const clamped = clampPercent(remaining);
|
|
192
|
+
const filled = Math.round((clamped / 100) * BAR_WIDTH);
|
|
193
|
+
const empty = Math.max(0, BAR_WIDTH - filled);
|
|
194
|
+
const filledText = "█".repeat(filled);
|
|
195
|
+
const emptyText = "░".repeat(empty);
|
|
196
|
+
if (clamped < 10) {
|
|
197
|
+
const border = chalk.red("▏");
|
|
198
|
+
const rest = chalk.dim("░".repeat(Math.max(0, BAR_WIDTH - 1)));
|
|
199
|
+
return `${border}${rest}`;
|
|
200
|
+
}
|
|
201
|
+
const color = clamped < 50 ? chalk.yellow : chalk.green;
|
|
202
|
+
return `${color(filledText)}${chalk.dim(emptyText)}`;
|
|
203
|
+
}
|
|
204
|
+
function remainingPercent(usedPercent) {
|
|
205
|
+
const used = Number.isFinite(usedPercent) ? Math.round(usedPercent) : 0;
|
|
206
|
+
const remaining = 100 - used;
|
|
207
|
+
return clampPercent(remaining);
|
|
208
|
+
}
|
|
209
|
+
function clampPercent(value) {
|
|
210
|
+
if (!Number.isFinite(value))
|
|
211
|
+
return 0;
|
|
212
|
+
return Math.min(100, Math.max(0, Math.round(value)));
|
|
213
|
+
}
|
|
214
|
+
function formatPercent(value) {
|
|
215
|
+
return String(clampPercent(value)).padStart(3, " ");
|
|
87
216
|
}
|
|
88
217
|
//# sourceMappingURL=cli.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/core/auth/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/core/auth/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { getEnvApiKey } from "@mariozechner/pi-ai";
|
|
2
2
|
import { getApiKeyForProvider } from "../config/schema.js";
|
|
3
|
+
import { AuthManager } from "./auth_manager.js";
|
|
3
4
|
export function createCredentialResolver(options) {
|
|
5
|
+
const authManager = new AuthManager(options.authStorage);
|
|
4
6
|
return {
|
|
5
|
-
getApiKey: async (provider) => {
|
|
6
|
-
const authKey = await
|
|
7
|
+
getApiKey: async (provider, getOptions) => {
|
|
8
|
+
const authKey = await authManager.getApiKey(provider, { sessionId: getOptions?.sessionId });
|
|
7
9
|
if (authKey) {
|
|
8
10
|
return authKey;
|
|
9
11
|
}
|
|
@@ -13,6 +15,12 @@ export function createCredentialResolver(options) {
|
|
|
13
15
|
}
|
|
14
16
|
return getEnvApiKey(provider);
|
|
15
17
|
},
|
|
18
|
+
noteProviderError: async (provider, getOptions) => {
|
|
19
|
+
await authManager.noteProviderError(provider, {
|
|
20
|
+
sessionId: getOptions?.sessionId,
|
|
21
|
+
error: getOptions?.error,
|
|
22
|
+
});
|
|
23
|
+
},
|
|
16
24
|
};
|
|
17
25
|
}
|
|
18
26
|
//# sourceMappingURL=credential_resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential_resolver.js","sourceRoot":"","sources":["../../../src/core/auth/credential_resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"credential_resolver.js","sourceRoot":"","sources":["../../../src/core/auth/credential_resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAchD,MAAM,UAAU,wBAAwB,CAAC,OAGxC;IACC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACzD,OAAO;QACL,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE;YACxC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5F,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;YACtE,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QACD,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE;YAChD,MAAM,WAAW,CAAC,iBAAiB,CAAC,QAAQ,EAAE;gBAC5C,SAAS,EAAE,UAAU,EAAE,SAAS;gBAChC,KAAK,EAAE,UAAU,EAAE,KAAK;aACzB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/core/auth/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
export { AuthManager } from "./auth_manager.js";
|
|
1
2
|
export { formatCodexAuthError } from "./auth_messages.js";
|
|
2
3
|
export { getAuthPath } from "./auth_paths.js";
|
|
3
4
|
export { AuthStorage } from "./auth_storage.js";
|
|
4
|
-
export { runLoginCommand, runLogoutCommand, SUPPORTED_OAUTH_PROVIDERS, } from "./cli.js";
|
|
5
|
+
export { runListCommand, runLoginCommand, runLogoutCommand, SUPPORTED_OAUTH_PROVIDERS, } from "./cli.js";
|
|
5
6
|
export { ensureCodexSystemPrompt } from "./codex_prompt.js";
|
|
6
7
|
export { createCredentialResolver } from "./credential_resolver.js";
|
|
7
8
|
//# sourceMappingURL=index.js.map
|