oc-codex-multi-auth 6.7.1 → 6.8.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/README.md +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/accounts/persistence.d.ts +10 -0
- package/dist/lib/accounts/persistence.d.ts.map +1 -1
- package/dist/lib/accounts/persistence.js +69 -2
- package/dist/lib/accounts/persistence.js.map +1 -1
- package/dist/lib/accounts/state.d.ts +2 -0
- package/dist/lib/accounts/state.d.ts.map +1 -1
- package/dist/lib/accounts/state.js +10 -0
- package/dist/lib/accounts/state.js.map +1 -1
- package/dist/lib/auth/login-runner.d.ts +1 -0
- package/dist/lib/auth/login-runner.d.ts.map +1 -1
- package/dist/lib/auth/login-runner.js +8 -0
- package/dist/lib/auth/login-runner.js.map +1 -1
- package/dist/lib/codex-reset.d.ts +122 -0
- package/dist/lib/codex-reset.d.ts.map +1 -0
- package/dist/lib/codex-reset.js +196 -0
- package/dist/lib/codex-reset.js.map +1 -0
- package/dist/lib/codex-usage.d.ts +15 -0
- package/dist/lib/codex-usage.d.ts.map +1 -1
- package/dist/lib/codex-usage.js +44 -13
- package/dist/lib/codex-usage.js.map +1 -1
- package/dist/lib/proactive-refresh.d.ts.map +1 -1
- package/dist/lib/proactive-refresh.js +6 -4
- package/dist/lib/proactive-refresh.js.map +1 -1
- package/dist/lib/refresh-queue.d.ts +9 -0
- package/dist/lib/refresh-queue.d.ts.map +1 -1
- package/dist/lib/refresh-queue.js +29 -0
- package/dist/lib/refresh-queue.js.map +1 -1
- package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
- package/dist/lib/request/fetch-helpers.js +21 -2
- package/dist/lib/request/fetch-helpers.js.map +1 -1
- package/dist/lib/request/request-transformer.d.ts +10 -0
- package/dist/lib/request/request-transformer.d.ts.map +1 -1
- package/dist/lib/request/request-transformer.js +20 -0
- package/dist/lib/request/request-transformer.js.map +1 -1
- package/dist/lib/request/response-handler.d.ts.map +1 -1
- package/dist/lib/request/response-handler.js +28 -5
- package/dist/lib/request/response-handler.js.map +1 -1
- package/dist/lib/schemas.d.ts +3 -0
- package/dist/lib/schemas.d.ts.map +1 -1
- package/dist/lib/schemas.js +1 -0
- package/dist/lib/schemas.js.map +1 -1
- package/dist/lib/storage/migrations.d.ts +7 -0
- package/dist/lib/storage/migrations.d.ts.map +1 -1
- package/dist/lib/storage/migrations.js.map +1 -1
- package/dist/lib/storage.d.ts +1 -1
- package/dist/lib/storage.d.ts.map +1 -1
- package/dist/lib/storage.js +10 -1
- package/dist/lib/storage.js.map +1 -1
- package/dist/lib/tools/codex-keychain.d.ts.map +1 -1
- package/dist/lib/tools/codex-keychain.js +153 -77
- package/dist/lib/tools/codex-keychain.js.map +1 -1
- package/dist/lib/tools/codex-label.d.ts.map +1 -1
- package/dist/lib/tools/codex-label.js +60 -34
- package/dist/lib/tools/codex-label.js.map +1 -1
- package/dist/lib/tools/codex-limits.js +10 -4
- package/dist/lib/tools/codex-limits.js.map +1 -1
- package/dist/lib/tools/codex-refresh.d.ts.map +1 -1
- package/dist/lib/tools/codex-refresh.js +80 -5
- package/dist/lib/tools/codex-refresh.js.map +1 -1
- package/dist/lib/tools/codex-remove.d.ts.map +1 -1
- package/dist/lib/tools/codex-remove.js +85 -56
- package/dist/lib/tools/codex-remove.js.map +1 -1
- package/dist/lib/tools/codex-reset.d.ts +16 -0
- package/dist/lib/tools/codex-reset.d.ts.map +1 -0
- package/dist/lib/tools/codex-reset.js +332 -0
- package/dist/lib/tools/codex-reset.js.map +1 -0
- package/dist/lib/tools/codex-switch.d.ts.map +1 -1
- package/dist/lib/tools/codex-switch.js +57 -35
- package/dist/lib/tools/codex-switch.js.map +1 -1
- package/dist/lib/tools/index.d.ts.map +1 -1
- package/dist/lib/tools/index.js +2 -0
- package/dist/lib/tools/index.js.map +1 -1
- package/dist/lib/tui-quota-cache.d.ts +25 -0
- package/dist/lib/tui-quota-cache.d.ts.map +1 -1
- package/dist/lib/tui-quota-cache.js +42 -1
- package/dist/lib/tui-quota-cache.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +17 -5
- package/dist/tui.js.map +1 -1
- package/package.json +153 -153
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-remove.js","sourceRoot":"","sources":["../../../lib/tools/codex-remove.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAuB,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"codex-remove.js","sourceRoot":"","sources":["../../../lib/tools/codex-remove.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `codex-reset` tool — view and redeem banked Codex rate-limit reset credits.
|
|
3
|
+
*
|
|
4
|
+
* Closes the gap for users who cannot reach OpenAI's redemption UI (desktop
|
|
5
|
+
* app / IDE extensions / Codex CLI `/usage`): the credits are granted per
|
|
6
|
+
* account, and this plugin already holds the credentials needed to spend them.
|
|
7
|
+
*
|
|
8
|
+
* Redeeming is irreversible and spends a finite credit, so `action="consume"`
|
|
9
|
+
* only issues the POST when `confirm` is `true`. A tool call has no interactive
|
|
10
|
+
* y/N prompt, so confirmation is an explicit argument instead — an unconfirmed
|
|
11
|
+
* consume renders the same preview a dry run does and changes nothing.
|
|
12
|
+
*/
|
|
13
|
+
import { type ToolDefinition } from "@opencode-ai/plugin/tool";
|
|
14
|
+
import type { ToolContext } from "./index.js";
|
|
15
|
+
export declare function createCodexResetTool(ctx: ToolContext): ToolDefinition;
|
|
16
|
+
//# sourceMappingURL=codex-reset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-reset.d.ts","sourceRoot":"","sources":["../../../lib/tools/codex-reset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AA8BrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAqE9C,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,CA0TrE"}
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `codex-reset` tool — view and redeem banked Codex rate-limit reset credits.
|
|
3
|
+
*
|
|
4
|
+
* Closes the gap for users who cannot reach OpenAI's redemption UI (desktop
|
|
5
|
+
* app / IDE extensions / Codex CLI `/usage`): the credits are granted per
|
|
6
|
+
* account, and this plugin already holds the credentials needed to spend them.
|
|
7
|
+
*
|
|
8
|
+
* Redeeming is irreversible and spends a finite credit, so `action="consume"`
|
|
9
|
+
* only issues the POST when `confirm` is `true`. A tool call has no interactive
|
|
10
|
+
* y/N prompt, so confirmation is an explicit argument instead — an unconfirmed
|
|
11
|
+
* consume renders the same preview a dry run does and changes nothing.
|
|
12
|
+
*/
|
|
13
|
+
import { tool } from "@opencode-ai/plugin/tool";
|
|
14
|
+
import { consumeCodexResetCredit, createRedeemRequestId, fetchCodexResetCredits, formatCodexResetConsumeResult, formatCodexResetCredit, parseCodexResetCredits, selectRedeemableCredit, } from "../codex-reset.js";
|
|
15
|
+
import { ensureCodexUsageAccessToken, fetchCodexUsage, formatUsageLimitSummary, formatUsageLimitTitle, hasUsageWindow, parseCodexUsagePayload, resolveCodexUsageAccountId, } from "../codex-usage.js";
|
|
16
|
+
import { loadAccounts } from "../storage.js";
|
|
17
|
+
import { formatUiHeader, formatUiItem, formatUiKeyValue, } from "../ui/format.js";
|
|
18
|
+
import { normalizeToolOutputFormat, renderJsonOutput } from "../runtime.js";
|
|
19
|
+
function normalizeResetAction(action) {
|
|
20
|
+
if (action === undefined || action === "status")
|
|
21
|
+
return "status";
|
|
22
|
+
if (action === "consume")
|
|
23
|
+
return "consume";
|
|
24
|
+
throw new Error(`Invalid action "${action}". Expected "status" or "consume".`);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Resolve the 1-based `account` argument to a storage index.
|
|
28
|
+
*
|
|
29
|
+
* Defaults to the active Codex account, since credits are granted per account
|
|
30
|
+
* and the one serving requests is the one whose windows the user wants reset.
|
|
31
|
+
*/
|
|
32
|
+
function resolveResetAccountIndex(accountCount, activeIndex, account) {
|
|
33
|
+
if (account === undefined)
|
|
34
|
+
return activeIndex;
|
|
35
|
+
if (!Number.isInteger(account) ||
|
|
36
|
+
account < 1 ||
|
|
37
|
+
account > accountCount) {
|
|
38
|
+
throw new Error(`Invalid account ${account}. Expected 1-${accountCount}.`);
|
|
39
|
+
}
|
|
40
|
+
return account - 1;
|
|
41
|
+
}
|
|
42
|
+
function buildUsageLines(usage) {
|
|
43
|
+
const lines = [];
|
|
44
|
+
for (const window of [usage.primary, usage.secondary]) {
|
|
45
|
+
if (!hasUsageWindow(window))
|
|
46
|
+
continue;
|
|
47
|
+
lines.push(` ${formatUsageLimitTitle(window.windowMinutes)}: ${formatUsageLimitSummary(window)}`);
|
|
48
|
+
}
|
|
49
|
+
return lines;
|
|
50
|
+
}
|
|
51
|
+
function buildCreditLines(summary) {
|
|
52
|
+
const lines = [
|
|
53
|
+
`banked credits: ${summary.availableCount} available`,
|
|
54
|
+
];
|
|
55
|
+
for (const credit of summary.credits) {
|
|
56
|
+
lines.push(` ${formatCodexResetCredit(credit)}`);
|
|
57
|
+
if (credit.title)
|
|
58
|
+
lines.push(` "${credit.title}"`);
|
|
59
|
+
}
|
|
60
|
+
if (summary.credits.length === 0) {
|
|
61
|
+
lines.push(" (none granted)");
|
|
62
|
+
}
|
|
63
|
+
return lines;
|
|
64
|
+
}
|
|
65
|
+
export function createCodexResetTool(ctx) {
|
|
66
|
+
const { resolveUiRuntime, resolveActiveIndex, formatCommandAccountLabel, resolveMaskEmail, buildJsonAccountIdentity, invalidateAccountManagerCache, } = ctx;
|
|
67
|
+
return tool({
|
|
68
|
+
description: "View banked Codex rate-limit reset credits, and redeem one to clear the current usage windows. Redeeming is irreversible and requires confirm=true.",
|
|
69
|
+
args: {
|
|
70
|
+
action: tool.schema
|
|
71
|
+
.string()
|
|
72
|
+
.optional()
|
|
73
|
+
.describe('"status" (default) lists banked credits and current usage. "consume" redeems one credit.'),
|
|
74
|
+
creditId: tool.schema
|
|
75
|
+
.string()
|
|
76
|
+
.optional()
|
|
77
|
+
.describe("Redeem this specific credit id. Defaults to the first available credit."),
|
|
78
|
+
confirm: tool.schema
|
|
79
|
+
.boolean()
|
|
80
|
+
.optional()
|
|
81
|
+
.describe("Must be true for action=\"consume\" to actually redeem. Without it the redemption is only previewed."),
|
|
82
|
+
dryRun: tool.schema
|
|
83
|
+
.boolean()
|
|
84
|
+
.optional()
|
|
85
|
+
.describe("Preview the redemption without spending the credit."),
|
|
86
|
+
account: tool.schema
|
|
87
|
+
.number()
|
|
88
|
+
.optional()
|
|
89
|
+
.describe("1-based account number to act on. Defaults to the active Codex account."),
|
|
90
|
+
format: tool.schema
|
|
91
|
+
.string()
|
|
92
|
+
.optional()
|
|
93
|
+
.describe('Output format: "text" (default) or "json".'),
|
|
94
|
+
includeSensitive: tool.schema
|
|
95
|
+
.boolean()
|
|
96
|
+
.optional()
|
|
97
|
+
.describe("Include raw account labels, emails, and account IDs in JSON output. Defaults to false."),
|
|
98
|
+
},
|
|
99
|
+
async execute({ action, creditId, confirm, dryRun, account, format, includeSensitive, } = {}) {
|
|
100
|
+
const ui = resolveUiRuntime();
|
|
101
|
+
const maskEmail = resolveMaskEmail();
|
|
102
|
+
const outputFormat = normalizeToolOutputFormat(format);
|
|
103
|
+
const resetAction = normalizeResetAction(action);
|
|
104
|
+
const includeSensitiveOutput = includeSensitive === true;
|
|
105
|
+
const storage = await loadAccounts();
|
|
106
|
+
if (!storage || storage.accounts.length === 0) {
|
|
107
|
+
if (outputFormat === "json") {
|
|
108
|
+
return renderJsonOutput({
|
|
109
|
+
message: "No Codex accounts configured. Run: opencode auth login",
|
|
110
|
+
action: resetAction,
|
|
111
|
+
credits: [],
|
|
112
|
+
availableCount: 0,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
if (ui.v2Enabled) {
|
|
116
|
+
return [
|
|
117
|
+
...formatUiHeader(ui, "Codex reset"),
|
|
118
|
+
"",
|
|
119
|
+
formatUiItem(ui, "No accounts configured.", "warning"),
|
|
120
|
+
formatUiItem(ui, "Run: opencode auth login", "accent"),
|
|
121
|
+
].join("\n");
|
|
122
|
+
}
|
|
123
|
+
return "No Codex accounts configured. Run: opencode auth login";
|
|
124
|
+
}
|
|
125
|
+
const activeIndex = resolveActiveIndex(storage, "codex");
|
|
126
|
+
const index = resolveResetAccountIndex(storage.accounts.length, activeIndex, account);
|
|
127
|
+
const target = storage.accounts[index];
|
|
128
|
+
if (!target) {
|
|
129
|
+
throw new Error(`No account at position ${index + 1}.`);
|
|
130
|
+
}
|
|
131
|
+
const label = formatCommandAccountLabel(target, index);
|
|
132
|
+
const displayLabel = formatCommandAccountLabel(target, index, {
|
|
133
|
+
maskEmail,
|
|
134
|
+
});
|
|
135
|
+
const identity = buildJsonAccountIdentity(index, {
|
|
136
|
+
includeSensitive: includeSensitiveOutput,
|
|
137
|
+
account: target,
|
|
138
|
+
label,
|
|
139
|
+
});
|
|
140
|
+
try {
|
|
141
|
+
const credentials = await ensureCodexUsageAccessToken({
|
|
142
|
+
storage,
|
|
143
|
+
account: target,
|
|
144
|
+
});
|
|
145
|
+
if (credentials.persisted)
|
|
146
|
+
invalidateAccountManagerCache();
|
|
147
|
+
const accountId = resolveCodexUsageAccountId({
|
|
148
|
+
account: target,
|
|
149
|
+
accessToken: credentials.accessToken,
|
|
150
|
+
});
|
|
151
|
+
if (!accountId)
|
|
152
|
+
throw new Error("Missing account id");
|
|
153
|
+
const request = {
|
|
154
|
+
accountId,
|
|
155
|
+
accessToken: credentials.accessToken,
|
|
156
|
+
organizationId: target.organizationId,
|
|
157
|
+
};
|
|
158
|
+
if (resetAction === "status") {
|
|
159
|
+
// The two endpoints are independent, so overlap them rather than
|
|
160
|
+
// paying two serial round-trips on every status check.
|
|
161
|
+
const [creditsPayload, usagePayload] = await Promise.all([
|
|
162
|
+
fetchCodexResetCredits(request),
|
|
163
|
+
fetchCodexUsage(request),
|
|
164
|
+
]);
|
|
165
|
+
const summary = parseCodexResetCredits(creditsPayload);
|
|
166
|
+
const usage = parseCodexUsagePayload(usagePayload);
|
|
167
|
+
if (outputFormat === "json") {
|
|
168
|
+
return renderJsonOutput({
|
|
169
|
+
...identity,
|
|
170
|
+
action: "status",
|
|
171
|
+
availableCount: summary.availableCount,
|
|
172
|
+
credits: summary.credits,
|
|
173
|
+
planType: usage.planType,
|
|
174
|
+
limits: usage.limits,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
const lines = ui.v2Enabled
|
|
178
|
+
? [...formatUiHeader(ui, "Codex reset"), ""]
|
|
179
|
+
: [];
|
|
180
|
+
lines.push(`${displayLabel}:`);
|
|
181
|
+
lines.push(...buildCreditLines(summary));
|
|
182
|
+
lines.push("", "current usage:");
|
|
183
|
+
lines.push(...buildUsageLines(usage));
|
|
184
|
+
if (summary.availableCount > 0) {
|
|
185
|
+
lines.push("", 'Redeem with: codex-reset action="consume" confirm=true');
|
|
186
|
+
}
|
|
187
|
+
return lines.join("\n");
|
|
188
|
+
}
|
|
189
|
+
const summary = parseCodexResetCredits(await fetchCodexResetCredits(request));
|
|
190
|
+
const selection = selectRedeemableCredit(summary, creditId);
|
|
191
|
+
if (selection.type !== "selected") {
|
|
192
|
+
const message = selection.type === "not-found"
|
|
193
|
+
? `No available credit with id ${selection.creditId}.`
|
|
194
|
+
: "No available credits to redeem.";
|
|
195
|
+
if (outputFormat === "json") {
|
|
196
|
+
return renderJsonOutput({
|
|
197
|
+
...identity,
|
|
198
|
+
action: "consume",
|
|
199
|
+
redeemed: false,
|
|
200
|
+
reason: selection.type,
|
|
201
|
+
message,
|
|
202
|
+
availableCount: summary.availableCount,
|
|
203
|
+
credits: summary.credits,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
return [`${displayLabel}:`, ` ${message}`].join("\n");
|
|
207
|
+
}
|
|
208
|
+
const credit = selection.credit;
|
|
209
|
+
// A consume without explicit confirmation is a preview, not a
|
|
210
|
+
// redemption: spending a credit cannot be undone, and a tool call
|
|
211
|
+
// offers no interactive prompt to fall back on.
|
|
212
|
+
const previewOnly = dryRun === true || confirm !== true;
|
|
213
|
+
if (previewOnly) {
|
|
214
|
+
const reason = dryRun === true ? "dry-run" : "unconfirmed";
|
|
215
|
+
if (outputFormat === "json") {
|
|
216
|
+
return renderJsonOutput({
|
|
217
|
+
...identity,
|
|
218
|
+
action: "consume",
|
|
219
|
+
redeemed: false,
|
|
220
|
+
reason,
|
|
221
|
+
credit,
|
|
222
|
+
message: reason === "dry-run"
|
|
223
|
+
? "Dry run: credit not redeemed."
|
|
224
|
+
: "Not redeemed. Pass confirm=true to redeem this credit.",
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
return [
|
|
228
|
+
`${displayLabel}:`,
|
|
229
|
+
" about to redeem:",
|
|
230
|
+
` ${formatCodexResetCredit(credit)}`,
|
|
231
|
+
reason === "dry-run"
|
|
232
|
+
? " dry run: credit not redeemed."
|
|
233
|
+
: ' not redeemed. Re-run with confirm=true to redeem this credit.',
|
|
234
|
+
].join("\n");
|
|
235
|
+
}
|
|
236
|
+
let result;
|
|
237
|
+
try {
|
|
238
|
+
result = await consumeCodexResetCredit({
|
|
239
|
+
...request,
|
|
240
|
+
creditId: credit.id,
|
|
241
|
+
redeemRequestId: createRedeemRequestId(credit.id),
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
// The POST may have reached the backend before the failure
|
|
246
|
+
// (timeout, dropped response), so the redemption outcome is
|
|
247
|
+
// genuinely unknown — reporting `redeemed: false` here could
|
|
248
|
+
// send the user to spend a second credit. The idempotency key
|
|
249
|
+
// is derived from the credit id, so retrying the SAME credit
|
|
250
|
+
// is safe; the guidance below is about picking a different one.
|
|
251
|
+
const consumeError = (error instanceof Error ? error.message : String(error)).slice(0, 160);
|
|
252
|
+
if (outputFormat === "json") {
|
|
253
|
+
return renderJsonOutput({
|
|
254
|
+
...identity,
|
|
255
|
+
action: "consume",
|
|
256
|
+
redeemed: null,
|
|
257
|
+
reason: "consume-failed",
|
|
258
|
+
credit,
|
|
259
|
+
error: consumeError,
|
|
260
|
+
message: `The consume request failed but may have reached the backend. Run codex-reset (status) and check whether ${credit.id} is still available before redeeming another credit.`,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
return [
|
|
264
|
+
`${displayLabel}:`,
|
|
265
|
+
` Error: ${consumeError}`,
|
|
266
|
+
" redemption outcome unknown: the request may have reached the backend.",
|
|
267
|
+
` Run codex-reset (status) and check whether ${credit.id} is still available before redeeming another credit.`,
|
|
268
|
+
].join("\n");
|
|
269
|
+
}
|
|
270
|
+
// Past this point the credit is spent and cannot be recovered. The
|
|
271
|
+
// usage refresh below is a courtesy read, so its failure must never
|
|
272
|
+
// reach the outer catch: reporting `redeemed: false` for a credit the
|
|
273
|
+
// server already consumed would send the user to redeem another one.
|
|
274
|
+
let usageAfter;
|
|
275
|
+
let usageError;
|
|
276
|
+
try {
|
|
277
|
+
usageAfter = parseCodexUsagePayload(await fetchCodexUsage(request));
|
|
278
|
+
}
|
|
279
|
+
catch (error) {
|
|
280
|
+
usageError = error instanceof Error ? error.message : String(error);
|
|
281
|
+
}
|
|
282
|
+
if (outputFormat === "json") {
|
|
283
|
+
return renderJsonOutput({
|
|
284
|
+
...identity,
|
|
285
|
+
action: "consume",
|
|
286
|
+
redeemed: true,
|
|
287
|
+
credit,
|
|
288
|
+
result: {
|
|
289
|
+
code: result.code ?? null,
|
|
290
|
+
windowsReset: result.windows_reset ?? null,
|
|
291
|
+
redeemedAt: result.credit?.redeemed_at ?? null,
|
|
292
|
+
},
|
|
293
|
+
planType: usageAfter?.planType ?? null,
|
|
294
|
+
limits: usageAfter?.limits ?? null,
|
|
295
|
+
usageError: usageError ? usageError.slice(0, 160) : null,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
return [
|
|
299
|
+
`${displayLabel}:`,
|
|
300
|
+
` redeemed ${credit.id}`,
|
|
301
|
+
` ${formatCodexResetConsumeResult(result)}`,
|
|
302
|
+
"",
|
|
303
|
+
...(usageAfter
|
|
304
|
+
? ["new usage:", ...buildUsageLines(usageAfter)]
|
|
305
|
+
: [
|
|
306
|
+
`new usage: unavailable (${usageError?.slice(0, 160)})`,
|
|
307
|
+
"The credit was redeemed. Run codex-reset to re-read usage.",
|
|
308
|
+
]),
|
|
309
|
+
].join("\n");
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
313
|
+
if (outputFormat === "json") {
|
|
314
|
+
return renderJsonOutput({
|
|
315
|
+
...identity,
|
|
316
|
+
action: resetAction,
|
|
317
|
+
redeemed: false,
|
|
318
|
+
error: message.slice(0, 160),
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
if (ui.v2Enabled) {
|
|
322
|
+
return [
|
|
323
|
+
formatUiItem(ui, displayLabel),
|
|
324
|
+
` ${formatUiKeyValue(ui, "Error", message.slice(0, 160), "danger")}`,
|
|
325
|
+
].join("\n");
|
|
326
|
+
}
|
|
327
|
+
return [`${displayLabel}:`, ` Error: ${message.slice(0, 160)}`].join("\n");
|
|
328
|
+
}
|
|
329
|
+
},
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=codex-reset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-reset.js","sourceRoot":"","sources":["../../../lib/tools/codex-reset.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-switch.d.ts","sourceRoot":"","sources":["../../../lib/tools/codex-switch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAWrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"codex-switch.d.ts","sourceRoot":"","sources":["../../../lib/tools/codex-switch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAWrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,CAmMtE"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Extracted from `index.ts` per RC-1 Phase 2.
|
|
4
4
|
*/
|
|
5
5
|
import { tool } from "@opencode-ai/plugin/tool";
|
|
6
|
-
import { loadAccounts,
|
|
6
|
+
import { loadAccounts, withAccountStorageTransaction } from "../storage.js";
|
|
7
7
|
import { AccountManager } from "../accounts.js";
|
|
8
8
|
import { logWarn } from "../logger.js";
|
|
9
9
|
import { MODEL_FAMILIES } from "../prompts/codex.js";
|
|
@@ -22,8 +22,14 @@ export function createCodexSwitchTool(ctx) {
|
|
|
22
22
|
async execute({ index } = {}) {
|
|
23
23
|
const ui = resolveUiRuntime();
|
|
24
24
|
const maskEmail = resolveMaskEmail();
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
// This read is only used to render the "no accounts" / interactive
|
|
26
|
+
// picker UX. It is intentionally NOT the snapshot that gets mutated
|
|
27
|
+
// and saved below -- the mutate+save happens inside
|
|
28
|
+
// withAccountStorageTransaction against a freshly re-read snapshot so
|
|
29
|
+
// a concurrent save (e.g. a rotation persisting rate-limit state)
|
|
30
|
+
// between this read and the eventual save can't be clobbered.
|
|
31
|
+
const initialStorage = await loadAccounts();
|
|
32
|
+
if (!initialStorage || initialStorage.accounts.length === 0) {
|
|
27
33
|
if (ui.v2Enabled) {
|
|
28
34
|
return [
|
|
29
35
|
...formatUiHeader(ui, "Switch account"),
|
|
@@ -36,7 +42,7 @@ export function createCodexSwitchTool(ctx) {
|
|
|
36
42
|
}
|
|
37
43
|
let resolvedIndex = index;
|
|
38
44
|
if (resolvedIndex === undefined) {
|
|
39
|
-
const selectedIndex = await promptAccountIndexSelection(ui,
|
|
45
|
+
const selectedIndex = await promptAccountIndexSelection(ui, initialStorage, "Switch account");
|
|
40
46
|
if (selectedIndex === null) {
|
|
41
47
|
if (supportsInteractiveMenus()) {
|
|
42
48
|
if (ui.v2Enabled) {
|
|
@@ -61,48 +67,65 @@ export function createCodexSwitchTool(ctx) {
|
|
|
61
67
|
}
|
|
62
68
|
resolvedIndex = selectedIndex + 1;
|
|
63
69
|
}
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
targetIndex
|
|
67
|
-
|
|
70
|
+
const outcome = await withAccountStorageTransaction(async (current, persist) => {
|
|
71
|
+
const accounts = current?.accounts ?? [];
|
|
72
|
+
const targetIndex = (resolvedIndex ?? 0) - 1;
|
|
73
|
+
if (!current ||
|
|
74
|
+
!Number.isInteger(targetIndex) ||
|
|
75
|
+
targetIndex < 0 ||
|
|
76
|
+
targetIndex >= accounts.length) {
|
|
77
|
+
return { kind: "invalid", accountCount: accounts.length };
|
|
78
|
+
}
|
|
79
|
+
const now = Date.now();
|
|
80
|
+
const account = accounts[targetIndex];
|
|
81
|
+
if (account) {
|
|
82
|
+
account.lastUsed = now;
|
|
83
|
+
account.lastSwitchReason = "rotation";
|
|
84
|
+
}
|
|
85
|
+
const storage = current;
|
|
86
|
+
storage.activeIndex = targetIndex;
|
|
87
|
+
storage.activeIndexByFamily = storage.activeIndexByFamily ?? {};
|
|
88
|
+
for (const family of MODEL_FAMILIES) {
|
|
89
|
+
storage.activeIndexByFamily[family] = targetIndex;
|
|
90
|
+
}
|
|
91
|
+
const label = formatCommandAccountLabel(account, targetIndex, {
|
|
92
|
+
maskEmail,
|
|
93
|
+
});
|
|
94
|
+
try {
|
|
95
|
+
await persist(storage);
|
|
96
|
+
}
|
|
97
|
+
catch (saveError) {
|
|
98
|
+
logWarn("Failed to save account switch", {
|
|
99
|
+
error: String(saveError),
|
|
100
|
+
});
|
|
101
|
+
return { kind: "save-failed", label };
|
|
102
|
+
}
|
|
103
|
+
return { kind: "ok", label };
|
|
104
|
+
});
|
|
105
|
+
if (outcome.kind === "invalid") {
|
|
68
106
|
if (ui.v2Enabled) {
|
|
69
107
|
return [
|
|
70
108
|
...formatUiHeader(ui, "Switch account"),
|
|
71
109
|
"",
|
|
72
110
|
formatUiItem(ui, `Invalid account number: ${resolvedIndex}`, "danger"),
|
|
73
|
-
formatUiKeyValue(ui, "Valid range", `1-${
|
|
111
|
+
formatUiKeyValue(ui, "Valid range", `1-${outcome.accountCount}`, "muted"),
|
|
74
112
|
].join("\n");
|
|
75
113
|
}
|
|
76
|
-
return `Invalid account number: ${resolvedIndex}\n\nValid range: 1-${
|
|
114
|
+
return `Invalid account number: ${resolvedIndex}\n\nValid range: 1-${outcome.accountCount}`;
|
|
77
115
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
storage.activeIndex = targetIndex;
|
|
85
|
-
storage.activeIndexByFamily = storage.activeIndexByFamily ?? {};
|
|
86
|
-
for (const family of MODEL_FAMILIES) {
|
|
87
|
-
storage.activeIndexByFamily[family] = targetIndex;
|
|
88
|
-
}
|
|
89
|
-
try {
|
|
90
|
-
await saveAccounts(storage);
|
|
91
|
-
}
|
|
92
|
-
catch (saveError) {
|
|
93
|
-
logWarn("Failed to save account switch", {
|
|
94
|
-
error: String(saveError),
|
|
95
|
-
});
|
|
96
|
-
const label = formatCommandAccountLabel(account, targetIndex, { maskEmail });
|
|
116
|
+
if (outcome.kind === "save-failed") {
|
|
117
|
+
// The transaction only mutated its in-memory snapshot; the
|
|
118
|
+
// persist() call that would have made it durable threw, so
|
|
119
|
+
// nothing on disk actually changed. Wording must not imply the
|
|
120
|
+
// switch happened -- it didn't.
|
|
97
121
|
if (ui.v2Enabled) {
|
|
98
122
|
return [
|
|
99
123
|
...formatUiHeader(ui, "Switch account"),
|
|
100
124
|
"",
|
|
101
|
-
formatUiItem(ui, `
|
|
102
|
-
formatUiItem(ui, "Failed to persist change. It may be lost on restart.", "danger"),
|
|
125
|
+
formatUiItem(ui, `Failed to switch to ${outcome.label}: account storage could not be updated.`, "danger"),
|
|
103
126
|
].join("\n");
|
|
104
127
|
}
|
|
105
|
-
return `
|
|
128
|
+
return `Failed to switch to ${outcome.label}: account storage could not be updated.`;
|
|
106
129
|
}
|
|
107
130
|
try {
|
|
108
131
|
await clearTuiQuotaSnapshot();
|
|
@@ -117,15 +140,14 @@ export function createCodexSwitchTool(ctx) {
|
|
|
117
140
|
cachedAccountManagerRef.current = reloadedManager;
|
|
118
141
|
accountManagerPromiseRef.current = Promise.resolve(reloadedManager);
|
|
119
142
|
}
|
|
120
|
-
const label = formatCommandAccountLabel(account, targetIndex, { maskEmail });
|
|
121
143
|
if (ui.v2Enabled) {
|
|
122
144
|
return [
|
|
123
145
|
...formatUiHeader(ui, "Switch account"),
|
|
124
146
|
"",
|
|
125
|
-
formatUiItem(ui, `${getStatusMarker(ui, "ok")} Switched to ${label}`, "success"),
|
|
147
|
+
formatUiItem(ui, `${getStatusMarker(ui, "ok")} Switched to ${outcome.label}`, "success"),
|
|
126
148
|
].join("\n");
|
|
127
149
|
}
|
|
128
|
-
return `Switched to account: ${label}`;
|
|
150
|
+
return `Switched to account: ${outcome.label}`;
|
|
129
151
|
},
|
|
130
152
|
});
|
|
131
153
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-switch.js","sourceRoot":"","sources":["../../../lib/tools/codex-switch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAuB,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"codex-switch.js","sourceRoot":"","sources":["../../../lib/tools/codex-switch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACX,cAAc,EACd,8BAA8B,EAC9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACX,gBAAgB,EAChB,wBAAwB,EACxB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EACX,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/tools/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/tools/index.js
CHANGED
|
@@ -21,6 +21,7 @@ import { createCodexSwitchTool } from "./codex-switch.js";
|
|
|
21
21
|
import { createCodexWarmTool } from "./codex-warm.js";
|
|
22
22
|
import { createCodexStatusTool } from "./codex-status.js";
|
|
23
23
|
import { createCodexLimitsTool } from "./codex-limits.js";
|
|
24
|
+
import { createCodexResetTool } from "./codex-reset.js";
|
|
24
25
|
import { createCodexMetricsTool } from "./codex-metrics.js";
|
|
25
26
|
import { createCodexDoctorTool } from "./codex-doctor.js";
|
|
26
27
|
import { createCodexLabelTool } from "./codex-label.js";
|
|
@@ -45,6 +46,7 @@ export function createToolRegistry(ctx) {
|
|
|
45
46
|
"codex-warm": createCodexWarmTool(ctx),
|
|
46
47
|
"codex-status": createCodexStatusTool(ctx),
|
|
47
48
|
"codex-limits": createCodexLimitsTool(ctx),
|
|
49
|
+
"codex-reset": createCodexResetTool(ctx),
|
|
48
50
|
"codex-metrics": createCodexMetricsTool(ctx),
|
|
49
51
|
"codex-help": createCodexHelpTool(ctx),
|
|
50
52
|
"codex-setup": createCodexSetupTool(ctx),
|