@right-link/paperclip-plugin-codex-remote 0.3.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 +21 -0
- package/README.md +77 -0
- package/dist/cli/format-event.d.ts +2 -0
- package/dist/cli/format-event.d.ts.map +1 -0
- package/dist/cli/format-event.js +213 -0
- package/dist/cli/format-event.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/quota-probe.d.ts +3 -0
- package/dist/cli/quota-probe.d.ts.map +1 -0
- package/dist/cli/quota-probe.js +97 -0
- package/dist/cli/quota-probe.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +84 -0
- package/dist/index.js.map +1 -0
- package/dist/server/adapter.d.ts +16 -0
- package/dist/server/adapter.d.ts.map +1 -0
- package/dist/server/adapter.js +157 -0
- package/dist/server/adapter.js.map +1 -0
- package/dist/server/adapter.test.d.ts +2 -0
- package/dist/server/adapter.test.d.ts.map +1 -0
- package/dist/server/adapter.test.js +84 -0
- package/dist/server/adapter.test.js.map +1 -0
- package/dist/server/codex-args.d.ts +13 -0
- package/dist/server/codex-args.d.ts.map +1 -0
- package/dist/server/codex-args.js +60 -0
- package/dist/server/codex-args.js.map +1 -0
- package/dist/server/codex-args.test.d.ts +2 -0
- package/dist/server/codex-args.test.d.ts.map +1 -0
- package/dist/server/codex-args.test.js +94 -0
- package/dist/server/codex-args.test.js.map +1 -0
- package/dist/server/codex-home.d.ts +47 -0
- package/dist/server/codex-home.d.ts.map +1 -0
- package/dist/server/codex-home.js +378 -0
- package/dist/server/codex-home.js.map +1 -0
- package/dist/server/codex-home.test.d.ts +2 -0
- package/dist/server/codex-home.test.d.ts.map +1 -0
- package/dist/server/codex-home.test.js +244 -0
- package/dist/server/codex-home.test.js.map +1 -0
- package/dist/server/execute.d.ts +16 -0
- package/dist/server/execute.d.ts.map +1 -0
- package/dist/server/execute.js +906 -0
- package/dist/server/execute.js.map +1 -0
- package/dist/server/execute.remote.test.d.ts +2 -0
- package/dist/server/execute.remote.test.d.ts.map +1 -0
- package/dist/server/execute.remote.test.js +487 -0
- package/dist/server/execute.remote.test.js.map +1 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +57 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/parse.d.ts +22 -0
- package/dist/server/parse.d.ts.map +1 -0
- package/dist/server/parse.js +213 -0
- package/dist/server/parse.js.map +1 -0
- package/dist/server/parse.test.d.ts +2 -0
- package/dist/server/parse.test.d.ts.map +1 -0
- package/dist/server/parse.test.js +107 -0
- package/dist/server/parse.test.js.map +1 -0
- package/dist/server/quota-spawn-error.test.d.ts +2 -0
- package/dist/server/quota-spawn-error.test.d.ts.map +1 -0
- package/dist/server/quota-spawn-error.test.js +77 -0
- package/dist/server/quota-spawn-error.test.js.map +1 -0
- package/dist/server/quota.d.ts +64 -0
- package/dist/server/quota.d.ts.map +1 -0
- package/dist/server/quota.js +432 -0
- package/dist/server/quota.js.map +1 -0
- package/dist/server/sandbox-env.d.ts +4 -0
- package/dist/server/sandbox-env.d.ts.map +1 -0
- package/dist/server/sandbox-env.js +23 -0
- package/dist/server/sandbox-env.js.map +1 -0
- package/dist/server/skills.d.ts +8 -0
- package/dist/server/skills.d.ts.map +1 -0
- package/dist/server/skills.js +24 -0
- package/dist/server/skills.js.map +1 -0
- package/dist/server/tailscale.d.ts +24 -0
- package/dist/server/tailscale.d.ts.map +1 -0
- package/dist/server/tailscale.js +95 -0
- package/dist/server/tailscale.js.map +1 -0
- package/dist/server/test.d.ts +3 -0
- package/dist/server/test.d.ts.map +1 -0
- package/dist/server/test.js +811 -0
- package/dist/server/test.js.map +1 -0
- package/dist/server/test.remote.test.d.ts +2 -0
- package/dist/server/test.remote.test.d.ts.map +1 -0
- package/dist/server/test.remote.test.js +257 -0
- package/dist/server/test.remote.test.js.map +1 -0
- package/dist/ui/build-config.d.ts +3 -0
- package/dist/ui/build-config.d.ts.map +1 -0
- package/dist/ui/build-config.js +113 -0
- package/dist/ui/build-config.js.map +1 -0
- package/dist/ui/build-config.test.d.ts +2 -0
- package/dist/ui/build-config.test.d.ts.map +1 -0
- package/dist/ui/build-config.test.js +49 -0
- package/dist/ui/build-config.test.js.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/parse-stdout.d.ts +3 -0
- package/dist/ui/parse-stdout.d.ts.map +1 -0
- package/dist/ui/parse-stdout.js +261 -0
- package/dist/ui/parse-stdout.js.map +1 -0
- package/dist/ui/parse-stdout.test.d.ts +2 -0
- package/dist/ui/parse-stdout.test.d.ts.map +1 -0
- package/dist/ui/parse-stdout.test.js +77 -0
- package/dist/ui/parse-stdout.test.js.map +1 -0
- package/dist/ui-parser.d.ts +2 -0
- package/dist/ui-parser.d.ts.map +1 -0
- package/dist/ui-parser.js +245 -0
- package/dist/ui-parser.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
const CODEX_USAGE_SOURCE_RPC = "codex-rpc";
|
|
6
|
+
const CODEX_USAGE_SOURCE_WHAM = "codex-wham";
|
|
7
|
+
export function codexHomeDir() {
|
|
8
|
+
const fromEnv = process.env.CODEX_HOME;
|
|
9
|
+
if (typeof fromEnv === "string" && fromEnv.trim().length > 0)
|
|
10
|
+
return fromEnv.trim();
|
|
11
|
+
return path.join(os.homedir(), ".codex");
|
|
12
|
+
}
|
|
13
|
+
function base64UrlDecode(input) {
|
|
14
|
+
try {
|
|
15
|
+
let normalized = input.replace(/-/g, "+").replace(/_/g, "/");
|
|
16
|
+
const remainder = normalized.length % 4;
|
|
17
|
+
if (remainder > 0)
|
|
18
|
+
normalized += "=".repeat(4 - remainder);
|
|
19
|
+
return Buffer.from(normalized, "base64").toString("utf8");
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function decodeJwtPayload(token) {
|
|
26
|
+
if (typeof token !== "string" || token.trim().length === 0)
|
|
27
|
+
return null;
|
|
28
|
+
const parts = token.split(".");
|
|
29
|
+
if (parts.length < 2)
|
|
30
|
+
return null;
|
|
31
|
+
const decoded = base64UrlDecode(parts[1] ?? "");
|
|
32
|
+
if (!decoded)
|
|
33
|
+
return null;
|
|
34
|
+
try {
|
|
35
|
+
const parsed = JSON.parse(decoded);
|
|
36
|
+
return typeof parsed === "object" && parsed !== null ? parsed : null;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function readNestedString(record, pathSegments) {
|
|
43
|
+
let current = record;
|
|
44
|
+
for (const segment of pathSegments) {
|
|
45
|
+
if (typeof current !== "object" || current === null || Array.isArray(current))
|
|
46
|
+
return null;
|
|
47
|
+
current = current[segment];
|
|
48
|
+
}
|
|
49
|
+
return typeof current === "string" && current.trim().length > 0 ? current.trim() : null;
|
|
50
|
+
}
|
|
51
|
+
function parsePlanAndEmailFromToken(idToken, accessToken) {
|
|
52
|
+
const payloads = [decodeJwtPayload(idToken), decodeJwtPayload(accessToken)].filter((value) => value != null);
|
|
53
|
+
for (const payload of payloads) {
|
|
54
|
+
const directEmail = typeof payload.email === "string" ? payload.email : null;
|
|
55
|
+
const authBlock = typeof payload["https://api.openai.com/auth"] === "object" &&
|
|
56
|
+
payload["https://api.openai.com/auth"] !== null &&
|
|
57
|
+
!Array.isArray(payload["https://api.openai.com/auth"])
|
|
58
|
+
? payload["https://api.openai.com/auth"]
|
|
59
|
+
: null;
|
|
60
|
+
const profileBlock = typeof payload["https://api.openai.com/profile"] === "object" &&
|
|
61
|
+
payload["https://api.openai.com/profile"] !== null &&
|
|
62
|
+
!Array.isArray(payload["https://api.openai.com/profile"])
|
|
63
|
+
? payload["https://api.openai.com/profile"]
|
|
64
|
+
: null;
|
|
65
|
+
const email = directEmail
|
|
66
|
+
?? (typeof profileBlock?.email === "string" ? profileBlock.email : null)
|
|
67
|
+
?? (typeof authBlock?.chatgpt_user_email === "string" ? authBlock.chatgpt_user_email : null);
|
|
68
|
+
const planType = typeof authBlock?.chatgpt_plan_type === "string" ? authBlock.chatgpt_plan_type : null;
|
|
69
|
+
if (email || planType)
|
|
70
|
+
return { email: email ?? null, planType };
|
|
71
|
+
}
|
|
72
|
+
return { email: null, planType: null };
|
|
73
|
+
}
|
|
74
|
+
export async function readCodexAuthInfo(codexHome) {
|
|
75
|
+
const authPath = path.join(codexHome ?? codexHomeDir(), "auth.json");
|
|
76
|
+
let raw;
|
|
77
|
+
try {
|
|
78
|
+
raw = await fs.readFile(authPath, "utf8");
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
let parsed;
|
|
84
|
+
try {
|
|
85
|
+
parsed = JSON.parse(raw);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
if (typeof parsed !== "object" || parsed === null)
|
|
91
|
+
return null;
|
|
92
|
+
const obj = parsed;
|
|
93
|
+
const modern = obj;
|
|
94
|
+
const legacy = obj;
|
|
95
|
+
const accessToken = legacy.accessToken
|
|
96
|
+
?? modern.tokens?.access_token
|
|
97
|
+
?? readNestedString(obj, ["tokens", "access_token"]);
|
|
98
|
+
if (typeof accessToken !== "string" || accessToken.length === 0)
|
|
99
|
+
return null;
|
|
100
|
+
const accountId = legacy.accountId
|
|
101
|
+
?? modern.tokens?.account_id
|
|
102
|
+
?? readNestedString(obj, ["tokens", "account_id"]);
|
|
103
|
+
const refreshToken = modern.tokens?.refresh_token
|
|
104
|
+
?? readNestedString(obj, ["tokens", "refresh_token"]);
|
|
105
|
+
const idToken = modern.tokens?.id_token
|
|
106
|
+
?? readNestedString(obj, ["tokens", "id_token"]);
|
|
107
|
+
const { email, planType } = parsePlanAndEmailFromToken(idToken, accessToken);
|
|
108
|
+
return {
|
|
109
|
+
accessToken,
|
|
110
|
+
accountId: typeof accountId === "string" && accountId.trim().length > 0 ? accountId.trim() : null,
|
|
111
|
+
refreshToken: typeof refreshToken === "string" && refreshToken.trim().length > 0 ? refreshToken.trim() : null,
|
|
112
|
+
idToken: typeof idToken === "string" && idToken.trim().length > 0 ? idToken.trim() : null,
|
|
113
|
+
email,
|
|
114
|
+
planType,
|
|
115
|
+
lastRefresh: typeof modern.last_refresh === "string" && modern.last_refresh.trim().length > 0
|
|
116
|
+
? modern.last_refresh.trim()
|
|
117
|
+
: null,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
export async function readCodexToken() {
|
|
121
|
+
const auth = await readCodexAuthInfo();
|
|
122
|
+
if (!auth)
|
|
123
|
+
return null;
|
|
124
|
+
return { token: auth.accessToken, accountId: auth.accountId };
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Map a window duration in seconds to a human-readable label.
|
|
128
|
+
* Falls back to the provided fallback string when seconds is null/undefined.
|
|
129
|
+
*/
|
|
130
|
+
export function secondsToWindowLabel(seconds, fallback) {
|
|
131
|
+
if (seconds == null)
|
|
132
|
+
return fallback;
|
|
133
|
+
const hours = seconds / 3600;
|
|
134
|
+
if (hours < 6)
|
|
135
|
+
return "5h";
|
|
136
|
+
if (hours <= 24)
|
|
137
|
+
return "24h";
|
|
138
|
+
if (hours <= 168)
|
|
139
|
+
return "7d";
|
|
140
|
+
return `${Math.round(hours / 24)}d`;
|
|
141
|
+
}
|
|
142
|
+
/** fetch with an abort-based timeout so a hanging provider api doesn't block the response indefinitely */
|
|
143
|
+
export async function fetchWithTimeout(url, init, ms = 8000) {
|
|
144
|
+
const controller = new AbortController();
|
|
145
|
+
const timer = setTimeout(() => controller.abort(), ms);
|
|
146
|
+
try {
|
|
147
|
+
return await fetch(url, { ...init, signal: controller.signal });
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
clearTimeout(timer);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function normalizeCodexUsedPercent(rawPct) {
|
|
154
|
+
if (rawPct == null)
|
|
155
|
+
return null;
|
|
156
|
+
return Math.min(100, Math.round(rawPct < 1 ? rawPct * 100 : rawPct));
|
|
157
|
+
}
|
|
158
|
+
export async function fetchCodexQuota(token, accountId) {
|
|
159
|
+
const headers = {
|
|
160
|
+
Authorization: `Bearer ${token}`,
|
|
161
|
+
};
|
|
162
|
+
if (accountId)
|
|
163
|
+
headers["ChatGPT-Account-Id"] = accountId;
|
|
164
|
+
const resp = await fetchWithTimeout("https://chatgpt.com/backend-api/wham/usage", { headers });
|
|
165
|
+
if (!resp.ok)
|
|
166
|
+
throw new Error(`chatgpt wham api returned ${resp.status}`);
|
|
167
|
+
const body = (await resp.json());
|
|
168
|
+
const windows = [];
|
|
169
|
+
const rateLimit = body.rate_limit;
|
|
170
|
+
if (rateLimit?.primary_window != null) {
|
|
171
|
+
const w = rateLimit.primary_window;
|
|
172
|
+
windows.push({
|
|
173
|
+
label: "5h limit",
|
|
174
|
+
usedPercent: normalizeCodexUsedPercent(w.used_percent),
|
|
175
|
+
resetsAt: typeof w.reset_at === "number"
|
|
176
|
+
? unixSecondsToIso(w.reset_at)
|
|
177
|
+
: (w.reset_at ?? null),
|
|
178
|
+
valueLabel: null,
|
|
179
|
+
detail: null,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
if (rateLimit?.secondary_window != null) {
|
|
183
|
+
const w = rateLimit.secondary_window;
|
|
184
|
+
windows.push({
|
|
185
|
+
label: "Weekly limit",
|
|
186
|
+
usedPercent: normalizeCodexUsedPercent(w.used_percent),
|
|
187
|
+
resetsAt: typeof w.reset_at === "number"
|
|
188
|
+
? unixSecondsToIso(w.reset_at)
|
|
189
|
+
: (w.reset_at ?? null),
|
|
190
|
+
valueLabel: null,
|
|
191
|
+
detail: null,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
if (body.credits != null && body.credits.unlimited !== true) {
|
|
195
|
+
const balance = body.credits.balance;
|
|
196
|
+
const valueLabel = balance != null ? `$${(balance / 100).toFixed(2)} remaining` : "N/A";
|
|
197
|
+
windows.push({
|
|
198
|
+
label: "Credits",
|
|
199
|
+
usedPercent: null,
|
|
200
|
+
resetsAt: null,
|
|
201
|
+
valueLabel,
|
|
202
|
+
detail: null,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
return windows;
|
|
206
|
+
}
|
|
207
|
+
function unixSecondsToIso(value) {
|
|
208
|
+
if (typeof value !== "number" || !Number.isFinite(value))
|
|
209
|
+
return null;
|
|
210
|
+
return new Date(value * 1000).toISOString();
|
|
211
|
+
}
|
|
212
|
+
function buildCodexRpcWindow(label, window) {
|
|
213
|
+
if (!window)
|
|
214
|
+
return null;
|
|
215
|
+
return {
|
|
216
|
+
label,
|
|
217
|
+
usedPercent: normalizeCodexUsedPercent(window.usedPercent),
|
|
218
|
+
resetsAt: unixSecondsToIso(window.resetsAt),
|
|
219
|
+
valueLabel: null,
|
|
220
|
+
detail: null,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
function parseCreditBalance(value) {
|
|
224
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
225
|
+
return `$${value.toFixed(2)} remaining`;
|
|
226
|
+
}
|
|
227
|
+
if (typeof value === "string" && value.trim().length > 0) {
|
|
228
|
+
const parsed = Number(value);
|
|
229
|
+
if (Number.isFinite(parsed)) {
|
|
230
|
+
return `$${parsed.toFixed(2)} remaining`;
|
|
231
|
+
}
|
|
232
|
+
return value.trim();
|
|
233
|
+
}
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
export function mapCodexRpcQuota(result, account) {
|
|
237
|
+
const windows = [];
|
|
238
|
+
const limitOrder = ["codex"];
|
|
239
|
+
const limitsById = result.rateLimitsByLimitId ?? {};
|
|
240
|
+
for (const key of Object.keys(limitsById)) {
|
|
241
|
+
if (!limitOrder.includes(key))
|
|
242
|
+
limitOrder.push(key);
|
|
243
|
+
}
|
|
244
|
+
const rootLimit = result.rateLimits ?? null;
|
|
245
|
+
const allLimits = new Map();
|
|
246
|
+
if (rootLimit?.limitId)
|
|
247
|
+
allLimits.set(rootLimit.limitId, rootLimit);
|
|
248
|
+
for (const [key, value] of Object.entries(limitsById)) {
|
|
249
|
+
allLimits.set(key, value);
|
|
250
|
+
}
|
|
251
|
+
if (!allLimits.has("codex") && rootLimit)
|
|
252
|
+
allLimits.set("codex", rootLimit);
|
|
253
|
+
for (const limitId of limitOrder) {
|
|
254
|
+
const limit = allLimits.get(limitId);
|
|
255
|
+
if (!limit)
|
|
256
|
+
continue;
|
|
257
|
+
const prefix = limitId === "codex"
|
|
258
|
+
? ""
|
|
259
|
+
: `${limit.limitName ?? limitId} · `;
|
|
260
|
+
const primary = buildCodexRpcWindow(`${prefix}5h limit`, limit.primary);
|
|
261
|
+
if (primary)
|
|
262
|
+
windows.push(primary);
|
|
263
|
+
const secondary = buildCodexRpcWindow(`${prefix}Weekly limit`, limit.secondary);
|
|
264
|
+
if (secondary)
|
|
265
|
+
windows.push(secondary);
|
|
266
|
+
if (limitId === "codex" && limit.credits && limit.credits.unlimited !== true) {
|
|
267
|
+
windows.push({
|
|
268
|
+
label: "Credits",
|
|
269
|
+
usedPercent: null,
|
|
270
|
+
resetsAt: null,
|
|
271
|
+
valueLabel: parseCreditBalance(limit.credits.balance) ?? "N/A",
|
|
272
|
+
detail: null,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return {
|
|
277
|
+
windows,
|
|
278
|
+
email: typeof account?.account?.email === "string" && account.account.email.trim().length > 0
|
|
279
|
+
? account.account.email.trim()
|
|
280
|
+
: null,
|
|
281
|
+
planType: typeof account?.account?.planType === "string" && account.account.planType.trim().length > 0
|
|
282
|
+
? account.account.planType.trim()
|
|
283
|
+
: (typeof rootLimit?.planType === "string" && rootLimit.planType.trim().length > 0 ? rootLimit.planType.trim() : null),
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
class CodexRpcClient {
|
|
287
|
+
proc = spawn("codex", ["-s", "read-only", "-a", "untrusted", "app-server"], { stdio: ["pipe", "pipe", "pipe"], env: process.env });
|
|
288
|
+
nextId = 1;
|
|
289
|
+
buffer = "";
|
|
290
|
+
pending = new Map();
|
|
291
|
+
stderr = "";
|
|
292
|
+
constructor() {
|
|
293
|
+
this.proc.stdout.setEncoding("utf8");
|
|
294
|
+
this.proc.stderr.setEncoding("utf8");
|
|
295
|
+
this.proc.stdout.on("data", (chunk) => this.onStdout(chunk));
|
|
296
|
+
this.proc.stderr.on("data", (chunk) => {
|
|
297
|
+
this.stderr += chunk;
|
|
298
|
+
});
|
|
299
|
+
this.proc.on("exit", () => {
|
|
300
|
+
for (const request of this.pending.values()) {
|
|
301
|
+
clearTimeout(request.timer);
|
|
302
|
+
request.reject(new Error(this.stderr.trim() || "codex app-server closed unexpectedly"));
|
|
303
|
+
}
|
|
304
|
+
this.pending.clear();
|
|
305
|
+
});
|
|
306
|
+
this.proc.on("error", (err) => {
|
|
307
|
+
for (const request of this.pending.values()) {
|
|
308
|
+
clearTimeout(request.timer);
|
|
309
|
+
request.reject(err);
|
|
310
|
+
}
|
|
311
|
+
this.pending.clear();
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
onStdout(chunk) {
|
|
315
|
+
this.buffer += chunk;
|
|
316
|
+
while (true) {
|
|
317
|
+
const newlineIndex = this.buffer.indexOf("\n");
|
|
318
|
+
if (newlineIndex < 0)
|
|
319
|
+
break;
|
|
320
|
+
const line = this.buffer.slice(0, newlineIndex).trim();
|
|
321
|
+
this.buffer = this.buffer.slice(newlineIndex + 1);
|
|
322
|
+
if (!line)
|
|
323
|
+
continue;
|
|
324
|
+
let parsed;
|
|
325
|
+
try {
|
|
326
|
+
parsed = JSON.parse(line);
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
const id = typeof parsed.id === "number" ? parsed.id : null;
|
|
332
|
+
if (id == null)
|
|
333
|
+
continue;
|
|
334
|
+
const pending = this.pending.get(id);
|
|
335
|
+
if (!pending)
|
|
336
|
+
continue;
|
|
337
|
+
this.pending.delete(id);
|
|
338
|
+
clearTimeout(pending.timer);
|
|
339
|
+
pending.resolve(parsed);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
request(method, params = {}, timeoutMs = 6_000) {
|
|
343
|
+
const id = this.nextId++;
|
|
344
|
+
const payload = JSON.stringify({ id, method, params }) + "\n";
|
|
345
|
+
return new Promise((resolve, reject) => {
|
|
346
|
+
const timer = setTimeout(() => {
|
|
347
|
+
this.pending.delete(id);
|
|
348
|
+
reject(new Error(`codex app-server timed out on ${method}`));
|
|
349
|
+
}, timeoutMs);
|
|
350
|
+
this.pending.set(id, { resolve, reject, timer });
|
|
351
|
+
this.proc.stdin.write(payload);
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
notify(method, params = {}) {
|
|
355
|
+
this.proc.stdin.write(JSON.stringify({ method, params }) + "\n");
|
|
356
|
+
}
|
|
357
|
+
async initialize() {
|
|
358
|
+
await this.request("initialize", {
|
|
359
|
+
clientInfo: {
|
|
360
|
+
name: "paperclip",
|
|
361
|
+
version: "0.0.0",
|
|
362
|
+
},
|
|
363
|
+
});
|
|
364
|
+
this.notify("initialized", {});
|
|
365
|
+
}
|
|
366
|
+
async fetchRateLimits() {
|
|
367
|
+
const message = await this.request("account/rateLimits/read");
|
|
368
|
+
return message.result ?? {};
|
|
369
|
+
}
|
|
370
|
+
async fetchAccount() {
|
|
371
|
+
try {
|
|
372
|
+
const message = await this.request("account/read");
|
|
373
|
+
return message.result ?? null;
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
return null;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
async shutdown() {
|
|
380
|
+
this.proc.kill("SIGTERM");
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
export async function fetchCodexRpcQuota() {
|
|
384
|
+
const client = new CodexRpcClient();
|
|
385
|
+
try {
|
|
386
|
+
await client.initialize();
|
|
387
|
+
const [limits, account] = await Promise.all([
|
|
388
|
+
client.fetchRateLimits(),
|
|
389
|
+
client.fetchAccount(),
|
|
390
|
+
]);
|
|
391
|
+
return mapCodexRpcQuota(limits, account);
|
|
392
|
+
}
|
|
393
|
+
finally {
|
|
394
|
+
await client.shutdown();
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
function formatProviderError(source, error) {
|
|
398
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
399
|
+
return `${source}: ${message}`;
|
|
400
|
+
}
|
|
401
|
+
export async function getQuotaWindows() {
|
|
402
|
+
const errors = [];
|
|
403
|
+
try {
|
|
404
|
+
const rpc = await fetchCodexRpcQuota();
|
|
405
|
+
if (rpc.windows.length > 0) {
|
|
406
|
+
return { provider: "openai", source: CODEX_USAGE_SOURCE_RPC, ok: true, windows: rpc.windows };
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
catch (error) {
|
|
410
|
+
errors.push(formatProviderError("Codex app-server", error));
|
|
411
|
+
}
|
|
412
|
+
const auth = await readCodexToken();
|
|
413
|
+
if (auth) {
|
|
414
|
+
try {
|
|
415
|
+
const windows = await fetchCodexQuota(auth.token, auth.accountId);
|
|
416
|
+
return { provider: "openai", source: CODEX_USAGE_SOURCE_WHAM, ok: true, windows };
|
|
417
|
+
}
|
|
418
|
+
catch (error) {
|
|
419
|
+
errors.push(formatProviderError("ChatGPT WHAM usage", error));
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
errors.push("no local codex auth token");
|
|
424
|
+
}
|
|
425
|
+
return {
|
|
426
|
+
provider: "openai",
|
|
427
|
+
ok: false,
|
|
428
|
+
error: errors.join("; "),
|
|
429
|
+
windows: [],
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
//# sourceMappingURL=quota.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota.js","sourceRoot":"","sources":["../../src/server/quota.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-env.d.ts","sourceRoot":"","sources":["../../src/server/sandbox-env.ts"],"names":[],"mappings":"AAYA,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,sDAAsD;AACtD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAM9E"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Strip env keys that are not valid POSIX shell identifiers before sending env
|
|
2
|
+
// into a remote sandbox.
|
|
3
|
+
//
|
|
4
|
+
// Windows hosts expose variables like `ProgramFiles(x86)` and
|
|
5
|
+
// `CommonProgramFiles(x86)` whose names contain characters that are illegal in
|
|
6
|
+
// a Linux sandbox shell. The Cloudflare sandbox bridge rejects the *entire*
|
|
7
|
+
// exec with "Invalid sandbox environment variable key" if any reach it, so we
|
|
8
|
+
// drop them here — they are meaningless inside the Linux container anyway.
|
|
9
|
+
// (Previously handled by the cloudflare-bridge plugin's host-side
|
|
10
|
+
// sanitizeExecuteEnv; moved into the adapter so the stock provider works.)
|
|
11
|
+
const POSIX_ENV_KEY_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
12
|
+
export function isPosixEnvKey(key) {
|
|
13
|
+
return POSIX_ENV_KEY_RE.test(key);
|
|
14
|
+
}
|
|
15
|
+
/** Removes non-POSIX env keys from `env` in place. */
|
|
16
|
+
export function stripNonPosixSandboxEnvKeys(env) {
|
|
17
|
+
for (const key of Object.keys(env)) {
|
|
18
|
+
if (!isPosixEnvKey(key)) {
|
|
19
|
+
delete env[key];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=sandbox-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-env.js","sourceRoot":"","sources":["../../src/server/sandbox-env.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,yBAAyB;AACzB,EAAE;AACF,8DAA8D;AAC9D,+EAA+E;AAC/E,4EAA4E;AAC5E,8EAA8E;AAC9E,2EAA2E;AAC3E,kEAAkE;AAClE,2EAA2E;AAC3E,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AAEpD,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,2BAA2B,CAAC,GAA4B;IACtE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AdapterSkillContext, AdapterSkillSnapshot } from "@paperclipai/adapter-utils";
|
|
2
|
+
export declare function listCodexSkills(ctx: AdapterSkillContext): Promise<AdapterSkillSnapshot>;
|
|
3
|
+
export declare function syncCodexSkills(ctx: AdapterSkillContext, _desiredSkills: string[]): Promise<AdapterSkillSnapshot>;
|
|
4
|
+
export declare function resolveCodexDesiredSkillNames(config: Record<string, unknown>, availableEntries: Array<{
|
|
5
|
+
key: string;
|
|
6
|
+
required?: boolean;
|
|
7
|
+
}>): string[];
|
|
8
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/server/skills.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAsBpC,wBAAsB,eAAe,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAE7F;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,mBAAmB,EACxB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,gBAAgB,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,YAG7D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { buildRuntimeMountedSkillSnapshot, readPaperclipRuntimeSkillEntries, resolvePaperclipDesiredSkillNames, } from "@paperclipai/adapter-utils/server-utils";
|
|
4
|
+
const __moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
async function buildCodexSkillSnapshot(config) {
|
|
6
|
+
const availableEntries = await readPaperclipRuntimeSkillEntries(config, __moduleDir);
|
|
7
|
+
const desiredSkills = resolvePaperclipDesiredSkillNames(config, availableEntries);
|
|
8
|
+
return buildRuntimeMountedSkillSnapshot({
|
|
9
|
+
adapterType: "codex_remote",
|
|
10
|
+
availableEntries,
|
|
11
|
+
desiredSkills,
|
|
12
|
+
configuredDetail: "Will be linked into the effective CODEX_HOME/skills/ directory on the next run.",
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
export async function listCodexSkills(ctx) {
|
|
16
|
+
return buildCodexSkillSnapshot(ctx.config);
|
|
17
|
+
}
|
|
18
|
+
export async function syncCodexSkills(ctx, _desiredSkills) {
|
|
19
|
+
return buildCodexSkillSnapshot(ctx.config);
|
|
20
|
+
}
|
|
21
|
+
export function resolveCodexDesiredSkillNames(config, availableEntries) {
|
|
22
|
+
return resolvePaperclipDesiredSkillNames(config, availableEntries);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/server/skills.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAKzC,OAAO,EACL,gCAAgC,EAChC,gCAAgC,EAChC,iCAAiC,GAClC,MAAM,yCAAyC,CAAC;AAEjD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjE,KAAK,UAAU,uBAAuB,CACpC,MAA+B;IAE/B,MAAM,gBAAgB,GAAG,MAAM,gCAAgC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrF,MAAM,aAAa,GAAG,iCAAiC,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAClF,OAAO,gCAAgC,CAAC;QACtC,WAAW,EAAE,cAAc;QAC3B,gBAAgB;QAChB,aAAa;QACb,gBAAgB,EAAE,iFAAiF;KACpG,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAwB;IAC5D,OAAO,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAwB,EACxB,cAAwB;IAExB,OAAO,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,MAA+B,EAC/B,gBAA4D;IAE5D,OAAO,iCAAiC,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type AdapterExecutionTarget } from "@paperclipai/adapter-utils/execution-target";
|
|
2
|
+
export declare function readTailscaleAuthKey(envConfig: Record<string, unknown>): string | null;
|
|
3
|
+
/**
|
|
4
|
+
* Mutates `env` in place to route outbound traffic through the sandbox's
|
|
5
|
+
* userspace-Tailscale proxy, leaving localhost direct. Mirrors the bridge
|
|
6
|
+
* Worker's `withTailscaleProxyEnv`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function applyTailscaleProxyEnv(env: Record<string, string>): void;
|
|
9
|
+
/**
|
|
10
|
+
* Brings up Tailscale inside a remote sandbox by running the image's
|
|
11
|
+
* `tailscale-up` helper with the auth key from the environment's env vars.
|
|
12
|
+
* No-op unless the target is a sandbox and `TAILSCALE_AUTHKEY` is set. Throws
|
|
13
|
+
* on failure so a misconfigured tailnet stops the run before Codex tries (and
|
|
14
|
+
* fails) to reach the model provider.
|
|
15
|
+
*/
|
|
16
|
+
export declare function ensureSandboxTailscaleUp(input: {
|
|
17
|
+
runId: string;
|
|
18
|
+
target: AdapterExecutionTarget | null;
|
|
19
|
+
envConfig: Record<string, unknown>;
|
|
20
|
+
cwd: string;
|
|
21
|
+
timeoutSec: number;
|
|
22
|
+
onLog: (stream: "stdout" | "stderr", chunk: string) => Promise<void>;
|
|
23
|
+
}): Promise<boolean>;
|
|
24
|
+
//# sourceMappingURL=tailscale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tailscale.d.ts","sourceRoot":"","sources":["../../src/server/tailscale.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,6CAA6C,CAAC;AAgCrD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAEtF;AAaD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAKxE;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE,GAAG,OAAO,CAAC,OAAO,CAAC,CAqCnB"}
|