@kevin0181/rcodex 0.0.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.
Files changed (127) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +160 -0
  3. package/dist/commands/doctor.d.ts +2 -0
  4. package/dist/commands/doctor.d.ts.map +1 -0
  5. package/dist/commands/doctor.js +114 -0
  6. package/dist/commands/doctor.js.map +1 -0
  7. package/dist/commands/gateway-daemon.d.ts +2 -0
  8. package/dist/commands/gateway-daemon.d.ts.map +1 -0
  9. package/dist/commands/gateway-daemon.js +22 -0
  10. package/dist/commands/gateway-daemon.js.map +1 -0
  11. package/dist/commands/launch.d.ts +2 -0
  12. package/dist/commands/launch.d.ts.map +1 -0
  13. package/dist/commands/launch.js +129 -0
  14. package/dist/commands/launch.js.map +1 -0
  15. package/dist/commands/migrate.d.ts +4 -0
  16. package/dist/commands/migrate.d.ts.map +1 -0
  17. package/dist/commands/migrate.js +137 -0
  18. package/dist/commands/migrate.js.map +1 -0
  19. package/dist/commands/setup.d.ts +2 -0
  20. package/dist/commands/setup.d.ts.map +1 -0
  21. package/dist/commands/setup.js +78 -0
  22. package/dist/commands/setup.js.map +1 -0
  23. package/dist/commands/stop.d.ts +2 -0
  24. package/dist/commands/stop.d.ts.map +1 -0
  25. package/dist/commands/stop.js +20 -0
  26. package/dist/commands/stop.js.map +1 -0
  27. package/dist/commands/switch.d.ts +4 -0
  28. package/dist/commands/switch.d.ts.map +1 -0
  29. package/dist/commands/switch.js +78 -0
  30. package/dist/commands/switch.js.map +1 -0
  31. package/dist/commands/sync.d.ts +3 -0
  32. package/dist/commands/sync.d.ts.map +1 -0
  33. package/dist/commands/sync.js +107 -0
  34. package/dist/commands/sync.js.map +1 -0
  35. package/dist/core/codex.d.ts +6 -0
  36. package/dist/core/codex.d.ts.map +1 -0
  37. package/dist/core/codex.js +123 -0
  38. package/dist/core/codex.js.map +1 -0
  39. package/dist/core/config.d.ts +6 -0
  40. package/dist/core/config.d.ts.map +1 -0
  41. package/dist/core/config.js +68 -0
  42. package/dist/core/config.js.map +1 -0
  43. package/dist/core/constants.d.ts +4 -0
  44. package/dist/core/constants.d.ts.map +1 -0
  45. package/dist/core/constants.js +7 -0
  46. package/dist/core/constants.js.map +1 -0
  47. package/dist/core/ollama.d.ts +3 -0
  48. package/dist/core/ollama.d.ts.map +1 -0
  49. package/dist/core/ollama.js +20 -0
  50. package/dist/core/ollama.js.map +1 -0
  51. package/dist/gateway/auth.d.ts +58 -0
  52. package/dist/gateway/auth.d.ts.map +1 -0
  53. package/dist/gateway/auth.js +248 -0
  54. package/dist/gateway/auth.js.map +1 -0
  55. package/dist/gateway/providers/anthropic.d.ts +15 -0
  56. package/dist/gateway/providers/anthropic.d.ts.map +1 -0
  57. package/dist/gateway/providers/anthropic.js +122 -0
  58. package/dist/gateway/providers/anthropic.js.map +1 -0
  59. package/dist/gateway/providers/antigravity-oauth-flow.d.ts +21 -0
  60. package/dist/gateway/providers/antigravity-oauth-flow.d.ts.map +1 -0
  61. package/dist/gateway/providers/antigravity-oauth-flow.js +231 -0
  62. package/dist/gateway/providers/antigravity-oauth-flow.js.map +1 -0
  63. package/dist/gateway/providers/antigravity.d.ts +5 -0
  64. package/dist/gateway/providers/antigravity.d.ts.map +1 -0
  65. package/dist/gateway/providers/antigravity.js +111 -0
  66. package/dist/gateway/providers/antigravity.js.map +1 -0
  67. package/dist/gateway/providers/claude-oauth-flow.d.ts +16 -0
  68. package/dist/gateway/providers/claude-oauth-flow.d.ts.map +1 -0
  69. package/dist/gateway/providers/claude-oauth-flow.js +178 -0
  70. package/dist/gateway/providers/claude-oauth-flow.js.map +1 -0
  71. package/dist/gateway/providers/copilot.d.ts +19 -0
  72. package/dist/gateway/providers/copilot.d.ts.map +1 -0
  73. package/dist/gateway/providers/copilot.js +141 -0
  74. package/dist/gateway/providers/copilot.js.map +1 -0
  75. package/dist/gateway/providers/google.d.ts +12 -0
  76. package/dist/gateway/providers/google.d.ts.map +1 -0
  77. package/dist/gateway/providers/google.js +58 -0
  78. package/dist/gateway/providers/google.js.map +1 -0
  79. package/dist/gateway/providers/ollama.d.ts +6 -0
  80. package/dist/gateway/providers/ollama.d.ts.map +1 -0
  81. package/dist/gateway/providers/ollama.js +54 -0
  82. package/dist/gateway/providers/ollama.js.map +1 -0
  83. package/dist/gateway/providers/openai-oauth-flow.d.ts +15 -0
  84. package/dist/gateway/providers/openai-oauth-flow.d.ts.map +1 -0
  85. package/dist/gateway/providers/openai-oauth-flow.js +149 -0
  86. package/dist/gateway/providers/openai-oauth-flow.js.map +1 -0
  87. package/dist/gateway/providers/openai.d.ts +8 -0
  88. package/dist/gateway/providers/openai.d.ts.map +1 -0
  89. package/dist/gateway/providers/openai.js +193 -0
  90. package/dist/gateway/providers/openai.js.map +1 -0
  91. package/dist/gateway/proxy.d.ts +119 -0
  92. package/dist/gateway/proxy.d.ts.map +1 -0
  93. package/dist/gateway/proxy.js +1949 -0
  94. package/dist/gateway/proxy.js.map +1 -0
  95. package/dist/gateway/server.d.ts +6 -0
  96. package/dist/gateway/server.d.ts.map +1 -0
  97. package/dist/gateway/server.js +890 -0
  98. package/dist/gateway/server.js.map +1 -0
  99. package/dist/gateway/ui.d.ts +2 -0
  100. package/dist/gateway/ui.d.ts.map +1 -0
  101. package/dist/gateway/ui.js +1748 -0
  102. package/dist/gateway/ui.js.map +1 -0
  103. package/dist/index.d.ts +3 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +78 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/types/index.d.ts +26 -0
  108. package/dist/types/index.d.ts.map +1 -0
  109. package/dist/types/index.js +2 -0
  110. package/dist/types/index.js.map +1 -0
  111. package/dist/utils/logger.d.ts +10 -0
  112. package/dist/utils/logger.d.ts.map +1 -0
  113. package/dist/utils/logger.js +25 -0
  114. package/dist/utils/logger.js.map +1 -0
  115. package/dist/utils/paths.d.ts +4 -0
  116. package/dist/utils/paths.d.ts.map +1 -0
  117. package/dist/utils/paths.js +22 -0
  118. package/dist/utils/paths.js.map +1 -0
  119. package/dist/utils/shell.d.ts +8 -0
  120. package/dist/utils/shell.d.ts.map +1 -0
  121. package/dist/utils/shell.js +27 -0
  122. package/dist/utils/shell.js.map +1 -0
  123. package/dist/utils/updates.d.ts +2 -0
  124. package/dist/utils/updates.d.ts.map +1 -0
  125. package/dist/utils/updates.js +83 -0
  126. package/dist/utils/updates.js.map +1 -0
  127. package/package.json +61 -0
@@ -0,0 +1,193 @@
1
+ const API_BASE = "https://api.openai.com/v1";
2
+ const CHATGPT_SESSION_URL = "https://chatgpt.com/api/auth/session";
3
+ const CHATGPT_API_BASE = "https://chatgpt.com/backend-api";
4
+ const CODEX_API_URL = "https://chatgpt.com/backend-api/codex/responses";
5
+ // Models available via Codex OAuth subscription (no discovery API ??hardcoded like 9router)
6
+ const CODEX_MODELS = [
7
+ "gpt-5.5", "gpt-5.4", "gpt-5.3-codex", "gpt-5.3-codex-high", "gpt-5.3-codex-low",
8
+ "gpt-5.3-codex-spark", "gpt-5.2-codex", "gpt-5.2", "gpt-5.1-codex-max",
9
+ "gpt-5.1-codex", "gpt-5.1-codex-mini", "gpt-5.1", "gpt-5-codex", "gpt-5-codex-mini",
10
+ "gpt-4o", "gpt-4o-mini",
11
+ ];
12
+ export function isOpenAIModel(model) {
13
+ return (model.startsWith("gpt-") ||
14
+ model.startsWith("o1") ||
15
+ model.startsWith("o3") ||
16
+ model.startsWith("o4") ||
17
+ model.startsWith("chatgpt-"));
18
+ }
19
+ // ?€?€ Codex OAuth (chatgpt.com/backend-api/codex/responses) ?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€
20
+ // Codex always uses Responses API format and requires streaming to be true.
21
+ export async function callCodexAPI(token, body, signal) {
22
+ return fetch(CODEX_API_URL, {
23
+ method: "POST",
24
+ headers: {
25
+ "content-type": "application/json",
26
+ authorization: `Bearer ${token}`,
27
+ originator: "codex-cli",
28
+ "user-agent": "codex-cli/1.0.18 (macOS; arm64)",
29
+ },
30
+ body: JSON.stringify(body),
31
+ signal,
32
+ });
33
+ }
34
+ // ?€?€ Official API key ?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€
35
+ async function callOpenAIAPI(apiKey, model, messages, systemPrompt, stream, signal) {
36
+ const allMessages = [];
37
+ if (systemPrompt)
38
+ allMessages.push({ role: "system", content: systemPrompt });
39
+ allMessages.push(...messages.map((m) => ({ role: m.role, content: m.content })));
40
+ return fetch(`${API_BASE}/chat/completions`, {
41
+ method: "POST",
42
+ headers: {
43
+ "content-type": "application/json",
44
+ authorization: `Bearer ${apiKey}`,
45
+ },
46
+ body: JSON.stringify({ model, messages: allMessages, stream, ...(stream ? { stream_options: { include_usage: true } } : {}) }),
47
+ signal,
48
+ });
49
+ }
50
+ // ?€?€ Unofficial: ChatGPT consumer session ?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€
51
+ // Uses __Secure-next-auth.session-token cookie to get a bearer token,
52
+ // then proxies through chatgpt.com/backend-api.
53
+ // ??Unofficial ??may break without notice. Against OpenAI ToS.
54
+ async function resolveAccessToken(sessionToken) {
55
+ const res = await fetch(CHATGPT_SESSION_URL, {
56
+ headers: {
57
+ cookie: `__Secure-next-auth.session-token=${sessionToken}`,
58
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/124.0 Safari/537.36",
59
+ },
60
+ signal: AbortSignal.timeout(10_000),
61
+ });
62
+ if (!res.ok)
63
+ throw new Error(`Session refresh failed: ${res.status}`);
64
+ const data = await res.json();
65
+ if (data.error || !data.accessToken) {
66
+ throw new Error("Invalid or expired ChatGPT session token. Please refresh it from your browser.");
67
+ }
68
+ return data.accessToken;
69
+ }
70
+ async function callOpenAIUnofficial(sessionToken, model, messages, systemPrompt, stream, signal) {
71
+ const accessToken = await resolveAccessToken(sessionToken);
72
+ // Build conversation messages in ChatGPT backend format
73
+ const formatted = [];
74
+ if (systemPrompt)
75
+ formatted.push({ role: "system", content: systemPrompt });
76
+ formatted.push(...messages.map((m) => ({
77
+ id: crypto.randomUUID(),
78
+ role: m.role,
79
+ author: { role: m.role },
80
+ content: {
81
+ content_type: "text",
82
+ parts: [typeof m.content === "string" ? m.content : JSON.stringify(m.content)],
83
+ },
84
+ })));
85
+ const body = {
86
+ action: "next",
87
+ messages: formatted,
88
+ model: model || "gpt-4o",
89
+ parent_message_id: crypto.randomUUID(),
90
+ conversation_id: null,
91
+ stream,
92
+ };
93
+ return fetch(`${CHATGPT_API_BASE}/conversation`, {
94
+ method: "POST",
95
+ headers: {
96
+ "content-type": "application/json",
97
+ authorization: `Bearer ${accessToken}`,
98
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/124.0 Safari/537.36",
99
+ },
100
+ body: JSON.stringify(body),
101
+ signal,
102
+ });
103
+ }
104
+ // ?€?€ Parse ChatGPT backend SSE response ??plain text ?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€
105
+ async function parseChatGPTResponse(res, model) {
106
+ const text = await res.text();
107
+ // ChatGPT backend returns SSE lines; find the last data event with message content
108
+ let lastContent = "";
109
+ for (const line of text.split("\n")) {
110
+ if (!line.startsWith("data: "))
111
+ continue;
112
+ const raw = line.slice(6).trim();
113
+ if (raw === "[DONE]")
114
+ break;
115
+ try {
116
+ const evt = JSON.parse(raw);
117
+ const parts = evt.message?.content?.parts;
118
+ if (parts?.length && evt.message?.author?.role === "assistant") {
119
+ lastContent = parts.join("");
120
+ }
121
+ }
122
+ catch { /* skip */ }
123
+ }
124
+ return {
125
+ id: `resp_${Date.now()}`,
126
+ object: "response",
127
+ model,
128
+ output: [{ type: "message", role: "assistant", content: [{ type: "output_text", text: lastContent }] }],
129
+ };
130
+ }
131
+ // ?€?€ Public interface ?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€
132
+ export async function callOpenAI(auth, model, messages, systemPrompt, stream, signal) {
133
+ if (auth.method === "apikey" && auth.apiKey) {
134
+ return callOpenAIAPI(auth.apiKey, model, messages, systemPrompt, stream, signal);
135
+ }
136
+ if (auth.method === "oauth-official" && auth.oauthToken) {
137
+ return callOpenAIAPI(auth.oauthToken, model, messages, systemPrompt, stream, signal);
138
+ }
139
+ if (auth.method === "oauth-unofficial" && auth.sessionToken) {
140
+ return callOpenAIUnofficial(auth.sessionToken, model, messages, systemPrompt, stream, signal);
141
+ }
142
+ throw new Error("OpenAI: no valid authentication configured");
143
+ }
144
+ // Called from proxy.ts ??handles ChatGPT backend response format separately
145
+ export async function callOpenAIAndParse(auth, model, messages, systemPrompt, signal) {
146
+ if (auth.method === "oauth-unofficial" && auth.sessionToken) {
147
+ const res = await callOpenAIUnofficial(auth.sessionToken, model, messages, systemPrompt, false, signal);
148
+ if (!res.ok) {
149
+ const err = await res.text();
150
+ throw new Error(`ChatGPT API error ${res.status}: ${err}`);
151
+ }
152
+ return parseChatGPTResponse(res, model);
153
+ }
154
+ // oauth-official and apikey: handled in proxy.ts via callOpenAI
155
+ throw new Error("Use callOpenAI for API key / OAuth path");
156
+ }
157
+ export async function getOpenAIModels(auth) {
158
+ if (auth.method === "oauth-official") {
159
+ // Codex backend has no model discovery API ??return known subscription models
160
+ return CODEX_MODELS;
161
+ }
162
+ if (auth.method === "oauth-unofficial") {
163
+ return ["gpt-4o", "gpt-4o-mini", "o1", "o3-mini", "chatgpt-4o-latest"];
164
+ }
165
+ if (!auth.apiKey)
166
+ return [];
167
+ try {
168
+ const res = await fetch(`${API_BASE}/models`, {
169
+ headers: { authorization: `Bearer ${auth.apiKey}` },
170
+ signal: AbortSignal.timeout(8000),
171
+ });
172
+ if (!res.ok)
173
+ throw new Error(`${res.status}`);
174
+ const data = await res.json();
175
+ return data.data
176
+ .map((m) => m.id)
177
+ .filter(isUsableOpenAIChatModel)
178
+ .sort();
179
+ }
180
+ catch {
181
+ return [];
182
+ }
183
+ }
184
+ function isUsableOpenAIChatModel(id) {
185
+ if (/(embedding|embed|whisper|tts|audio|realtime|image|dall-e|moderation|transcribe|search)/i.test(id))
186
+ return false;
187
+ return (id.startsWith("gpt-") ||
188
+ id.startsWith("o1") ||
189
+ id.startsWith("o3") ||
190
+ id.startsWith("o4") ||
191
+ id.startsWith("chatgpt-"));
192
+ }
193
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/gateway/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ import type { GatewayConfig, Account } from "./auth.js";
2
+ import type { Message } from "./providers/anthropic.js";
3
+ export declare function glog(msg: string): void;
4
+ export declare function gwarn(msg: string): void;
5
+ export declare function gerr(msg: string): void;
6
+ export interface ResponsesRequest {
7
+ model: string;
8
+ input: string | InputItem[];
9
+ instructions?: string;
10
+ temperature?: number;
11
+ max_output_tokens?: number;
12
+ stream?: boolean;
13
+ previous_response_id?: string;
14
+ tools?: unknown[];
15
+ tool_choice?: unknown;
16
+ reasoning?: unknown;
17
+ include?: string[];
18
+ store?: boolean;
19
+ }
20
+ interface InputItem {
21
+ type: "message";
22
+ role: string;
23
+ content: string | {
24
+ type: string;
25
+ text: string;
26
+ }[];
27
+ }
28
+ export interface ResponsesResponse {
29
+ id: string;
30
+ object: "response";
31
+ model: string;
32
+ output: OutputItem[];
33
+ usage?: {
34
+ input_tokens: number;
35
+ output_tokens: number;
36
+ total_tokens: number;
37
+ };
38
+ }
39
+ interface OutputItem {
40
+ type: "message";
41
+ role: "assistant";
42
+ content: {
43
+ type: "output_text";
44
+ text: string;
45
+ }[];
46
+ }
47
+ export type StreamChunk = {
48
+ type: 'text';
49
+ content: string;
50
+ } | {
51
+ type: 'reasoning';
52
+ content: string;
53
+ } | {
54
+ type: 'tool_call_start';
55
+ id: string;
56
+ name: string;
57
+ index: number;
58
+ } | {
59
+ type: 'tool_call_delta';
60
+ id: string;
61
+ delta: string;
62
+ index: number;
63
+ } | {
64
+ type: 'tool_call_end';
65
+ id: string;
66
+ name: string;
67
+ arguments: string;
68
+ index: number;
69
+ };
70
+ interface ConvState {
71
+ provider: string;
72
+ model: string;
73
+ messages: Message[];
74
+ openaiMessages?: unknown[];
75
+ googleContents?: unknown[];
76
+ googleToolCalls?: {
77
+ id: string;
78
+ name: string;
79
+ }[];
80
+ instructions?: string;
81
+ tools?: unknown[];
82
+ toolTurnDepth?: number;
83
+ ts: number;
84
+ }
85
+ export declare const convStore: Map<string, ConvState>;
86
+ export interface RequestLogEntry {
87
+ ts: number;
88
+ requestedModel: string;
89
+ provider: string;
90
+ usedModel: string;
91
+ fallback: boolean;
92
+ failedModels?: string[];
93
+ ms: number;
94
+ status: "ok" | "error";
95
+ error?: string;
96
+ inputTokens?: number;
97
+ outputTokens?: number;
98
+ inputPreview?: string;
99
+ outputPreview?: string;
100
+ toolCalls?: string[];
101
+ toolCallDetails?: {
102
+ name: string;
103
+ args: string;
104
+ }[];
105
+ webFetches?: string[];
106
+ }
107
+ export declare const requestLog: RequestLogEntry[];
108
+ export declare function pushLog(entry: RequestLogEntry): RequestLogEntry;
109
+ export declare function flushLog(): void;
110
+ export declare function tryCodexPassthrough(rawBody: Record<string, unknown>, config: GatewayConfig, signal?: AbortSignal): Promise<{
111
+ res: Response;
112
+ account: Account;
113
+ model: string;
114
+ } | null>;
115
+ export declare function ensureFreshToken(account: Account): Promise<Account>;
116
+ export declare function streamProxyRequest(req: ResponsesRequest, config: GatewayConfig, signal?: AbortSignal, responseId?: string): AsyncGenerator<StreamChunk>;
117
+ export declare function proxyRequest(req: ResponsesRequest, config: GatewayConfig, signal?: AbortSignal): Promise<ResponsesResponse>;
118
+ export {};
119
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/gateway/proxy.ts"],"names":[],"mappings":"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"}