codex-task 0.2.0

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 (92) hide show
  1. package/.codex-plugin/plugin.json +36 -0
  2. package/LICENSE +21 -0
  3. package/README.md +273 -0
  4. package/README.zh-CN.md +209 -0
  5. package/THIRD_PARTY_NOTICES.md +37 -0
  6. package/dist/api.d.ts +8 -0
  7. package/dist/api.d.ts.map +1 -0
  8. package/dist/api.js +355 -0
  9. package/dist/api.js.map +1 -0
  10. package/dist/backends/direct/auth.d.ts +14 -0
  11. package/dist/backends/direct/auth.d.ts.map +1 -0
  12. package/dist/backends/direct/auth.js +152 -0
  13. package/dist/backends/direct/auth.js.map +1 -0
  14. package/dist/backends/direct/http.d.ts +12 -0
  15. package/dist/backends/direct/http.d.ts.map +1 -0
  16. package/dist/backends/direct/http.js +62 -0
  17. package/dist/backends/direct/http.js.map +1 -0
  18. package/dist/backends/direct/identity.d.ts +11 -0
  19. package/dist/backends/direct/identity.d.ts.map +1 -0
  20. package/dist/backends/direct/identity.js +89 -0
  21. package/dist/backends/direct/identity.js.map +1 -0
  22. package/dist/backends/direct/index.d.ts +15 -0
  23. package/dist/backends/direct/index.d.ts.map +1 -0
  24. package/dist/backends/direct/index.js +201 -0
  25. package/dist/backends/direct/index.js.map +1 -0
  26. package/dist/backends/direct/models.d.ts +14 -0
  27. package/dist/backends/direct/models.d.ts.map +1 -0
  28. package/dist/backends/direct/models.js +83 -0
  29. package/dist/backends/direct/models.js.map +1 -0
  30. package/dist/backends/direct/protocol.d.ts +24 -0
  31. package/dist/backends/direct/protocol.d.ts.map +1 -0
  32. package/dist/backends/direct/protocol.js +131 -0
  33. package/dist/backends/direct/protocol.js.map +1 -0
  34. package/dist/backends/direct/sse.d.ts +15 -0
  35. package/dist/backends/direct/sse.d.ts.map +1 -0
  36. package/dist/backends/direct/sse.js +93 -0
  37. package/dist/backends/direct/sse.js.map +1 -0
  38. package/dist/backends/sdk.d.ts +54 -0
  39. package/dist/backends/sdk.d.ts.map +1 -0
  40. package/dist/backends/sdk.js +173 -0
  41. package/dist/backends/sdk.js.map +1 -0
  42. package/dist/cli.d.ts +3 -0
  43. package/dist/cli.d.ts.map +1 -0
  44. package/dist/cli.js +224 -0
  45. package/dist/cli.js.map +1 -0
  46. package/dist/config.d.ts +29 -0
  47. package/dist/config.d.ts.map +1 -0
  48. package/dist/config.js +77 -0
  49. package/dist/config.js.map +1 -0
  50. package/dist/doctor.d.ts +3 -0
  51. package/dist/doctor.d.ts.map +1 -0
  52. package/dist/doctor.js +94 -0
  53. package/dist/doctor.js.map +1 -0
  54. package/dist/errors.d.ts +16 -0
  55. package/dist/errors.d.ts.map +1 -0
  56. package/dist/errors.js +30 -0
  57. package/dist/errors.js.map +1 -0
  58. package/dist/events.d.ts +10 -0
  59. package/dist/events.d.ts.map +1 -0
  60. package/dist/events.js +30 -0
  61. package/dist/events.js.map +1 -0
  62. package/dist/fs-utils.d.ts +7 -0
  63. package/dist/fs-utils.d.ts.map +1 -0
  64. package/dist/fs-utils.js +56 -0
  65. package/dist/fs-utils.js.map +1 -0
  66. package/dist/images.d.ts +18 -0
  67. package/dist/images.d.ts.map +1 -0
  68. package/dist/images.js +102 -0
  69. package/dist/images.js.map +1 -0
  70. package/dist/index.d.ts +7 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +6 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/paths.d.ts +14 -0
  75. package/dist/paths.d.ts.map +1 -0
  76. package/dist/paths.js +61 -0
  77. package/dist/paths.js.map +1 -0
  78. package/dist/skill.d.ts +2 -0
  79. package/dist/skill.d.ts.map +1 -0
  80. package/dist/skill.js +6 -0
  81. package/dist/skill.js.map +1 -0
  82. package/dist/state.d.ts +20 -0
  83. package/dist/state.d.ts.map +1 -0
  84. package/dist/state.js +134 -0
  85. package/dist/state.js.map +1 -0
  86. package/dist/types.d.ts +167 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +2 -0
  89. package/dist/types.js.map +1 -0
  90. package/package.json +89 -0
  91. package/skills/codex-task/SKILL.md +79 -0
  92. package/skills/codex-task/agents/openai.yaml +4 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../src/backends/direct/identity.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AA+CD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAiBtE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAE/D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAK3C"}
@@ -0,0 +1,89 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { execFileSync } from "node:child_process";
3
+ import { arch, platform, release } from "node:os";
4
+ import { existsSync, readFileSync } from "node:fs";
5
+ import { join } from "node:path";
6
+ import { appPaths } from "../../paths.js";
7
+ import { atomicWrite } from "../../fs-utils.js";
8
+ function detectCodexVersion(codexHome) {
9
+ try {
10
+ const versionPath = join(codexHome, "version.json");
11
+ if (existsSync(versionPath)) {
12
+ const value = JSON.parse(readFileSync(versionPath, "utf8"));
13
+ if (typeof value["latest_version"] === "string")
14
+ return value["latest_version"];
15
+ }
16
+ }
17
+ catch {
18
+ // Continue to the installed binary.
19
+ }
20
+ try {
21
+ const output = execFileSync("codex", ["--version"], { timeout: 3000, encoding: "utf8" });
22
+ return output.match(/\d+\.\d+\.\d+/)?.[0] ?? "0.147.0";
23
+ }
24
+ catch {
25
+ return "0.147.0";
26
+ }
27
+ }
28
+ function detectInstallationId(codexHome) {
29
+ try {
30
+ const path = join(codexHome, "installation_id");
31
+ if (existsSync(path)) {
32
+ const value = readFileSync(path, "utf8").trim();
33
+ if (value)
34
+ return value;
35
+ }
36
+ }
37
+ catch {
38
+ // Use a private stable identity.
39
+ }
40
+ return randomUUID();
41
+ }
42
+ function platformInfo() {
43
+ const architecture = arch() === "arm64" ? "aarch64" : arch() === "x64" ? "x86_64" : arch();
44
+ if (platform() === "darwin") {
45
+ try {
46
+ const version = execFileSync("sw_vers", ["-productVersion"], { timeout: 2000, encoding: "utf8" }).trim();
47
+ return { osType: "macOS", osVersion: version, arch: architecture };
48
+ }
49
+ catch {
50
+ return { osType: "macOS", osVersion: release(), arch: architecture };
51
+ }
52
+ }
53
+ if (platform() === "win32")
54
+ return { osType: "Windows", osVersion: release(), arch: architecture };
55
+ return { osType: "Linux", osVersion: release(), arch: architecture };
56
+ }
57
+ export function loadOrCreateIdentity(codexHome) {
58
+ const path = appPaths().identityPath;
59
+ if (existsSync(path)) {
60
+ try {
61
+ const value = JSON.parse(readFileSync(path, "utf8"));
62
+ if (value.installationId && value.codexVersion)
63
+ return value;
64
+ }
65
+ catch {
66
+ // Replace invalid state.
67
+ }
68
+ }
69
+ const identity = {
70
+ installationId: detectInstallationId(codexHome),
71
+ codexVersion: detectCodexVersion(codexHome),
72
+ ...platformInfo(),
73
+ };
74
+ atomicWrite(path, JSON.stringify(identity, null, 2), 0o600);
75
+ return identity;
76
+ }
77
+ export function buildUserAgent(identity) {
78
+ return `codex_cli_rs/${identity.codexVersion} (${identity.osType} ${identity.osVersion}; ${identity.arch})`;
79
+ }
80
+ export function platformSandboxTag() {
81
+ if (platform() === "darwin")
82
+ return "seatbelt";
83
+ if (platform() === "linux")
84
+ return "seccomp";
85
+ if (platform() === "win32")
86
+ return "windows_sandbox";
87
+ return "none";
88
+ }
89
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/backends/direct/identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type ResolvedDirectModel } from "./models.js";
2
+ import type { Artifact, ImageOptions, TextOptions, UsageSummary } from "../../types.js";
3
+ export interface DirectTextExecution {
4
+ text: string;
5
+ model: ResolvedDirectModel;
6
+ usage?: UsageSummary | undefined;
7
+ }
8
+ export interface DirectImageExecution {
9
+ artifacts: Artifact[];
10
+ model: ResolvedDirectModel;
11
+ usage?: UsageSummary | undefined;
12
+ }
13
+ export declare function executeDirectText(taskId: string, options: TextOptions): Promise<DirectTextExecution>;
14
+ export declare function executeDirectImage(taskId: string, options: ImageOptions): Promise<DirectImageExecution>;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/backends/direct/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAA+C,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAOpG,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAa,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnG,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,mBAAmB,CAAC;IAC3B,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CAClC;AA+GD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA8B1G;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAwF7G"}
@@ -0,0 +1,201 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { ensureDirectAuth } from "./auth.js";
3
+ import { loadOrCreateIdentity } from "./identity.js";
4
+ import { resolveDirectImageModel, resolveDirectModel } from "./models.js";
5
+ import { buildDirectRequest, RESPONSES_URL } from "./protocol.js";
6
+ import { ImpersonatedSession } from "./http.js";
7
+ import { parseDirectResponse } from "./sse.js";
8
+ import { loadConfig } from "../../config.js";
9
+ import { CodexTaskError, isAbortError } from "../../errors.js";
10
+ import { validateImageOptions, writePngArtifact } from "../../images.js";
11
+ function emit(callback, event) {
12
+ callback?.(event);
13
+ }
14
+ function mapHttpError(status, body) {
15
+ const detail = body.slice(0, 500);
16
+ if (status === 401 || status === 403) {
17
+ return new CodexTaskError("DIRECT_AUTH_FAILED", `Direct authentication failed with HTTP ${status}`, {
18
+ details: detail,
19
+ });
20
+ }
21
+ if (status === 429) {
22
+ return new CodexTaskError("DIRECT_RATE_LIMITED", "Direct backend is rate limited", {
23
+ retryable: true,
24
+ details: detail,
25
+ });
26
+ }
27
+ if (status >= 500) {
28
+ return new CodexTaskError("DIRECT_SERVER_ERROR", `Direct backend returned HTTP ${status}`, {
29
+ retryable: true,
30
+ details: detail,
31
+ });
32
+ }
33
+ if (status === 400) {
34
+ return new CodexTaskError("DIRECT_REQUEST_REJECTED", "Direct backend rejected the request", {
35
+ details: detail,
36
+ });
37
+ }
38
+ return new CodexTaskError("DIRECT_HTTP_ERROR", `Direct backend returned HTTP ${status}`, {
39
+ retryable: status === 0,
40
+ details: detail,
41
+ });
42
+ }
43
+ function normalizeDirectError(error) {
44
+ if (error instanceof CodexTaskError)
45
+ return error;
46
+ const message = error instanceof Error ? error.message : String(error);
47
+ const retryable = /timeout|timed out|econnreset|socket|network|empty response/i.test(message);
48
+ return new CodexTaskError("DIRECT_TRANSPORT_ERROR", message, { retryable, cause: error });
49
+ }
50
+ async function sendOnce(context, spec, timeoutMs, proxy, signal) {
51
+ if (signal?.aborted)
52
+ throw new DOMException("The operation was aborted", "AbortError");
53
+ const session = new ImpersonatedSession(timeoutMs, proxy);
54
+ const abort = () => session.close();
55
+ signal?.addEventListener("abort", abort, { once: true });
56
+ try {
57
+ const request = buildDirectRequest(context, spec);
58
+ const response = await session.post(RESPONSES_URL, request.headers, JSON.stringify(request.body));
59
+ if (signal?.aborted)
60
+ throw new DOMException("The operation was aborted", "AbortError");
61
+ if (response.status !== 200)
62
+ throw mapHttpError(response.status, response.text);
63
+ const parsed = parseDirectResponse(response.text);
64
+ if (!parsed.text && !parsed.image) {
65
+ throw new CodexTaskError("DIRECT_EMPTY_RESPONSE", "Direct backend returned an empty response", {
66
+ retryable: true,
67
+ });
68
+ }
69
+ return parsed;
70
+ }
71
+ finally {
72
+ signal?.removeEventListener("abort", abort);
73
+ session.close();
74
+ }
75
+ }
76
+ async function sendWithRetry(taskId, context, spec, timeoutMs, retries, proxy, signal, onEvent) {
77
+ const delays = [2_000, 6_000, 15_000];
78
+ for (let attempt = 0;; attempt += 1) {
79
+ try {
80
+ return await sendOnce(context, spec, timeoutMs, proxy, signal);
81
+ }
82
+ catch (error) {
83
+ if (isAbortError(error))
84
+ throw error;
85
+ const normalized = normalizeDirectError(error);
86
+ if (!normalized.retryable || attempt >= retries)
87
+ throw normalized;
88
+ const delayMs = delays[Math.min(attempt, delays.length - 1)] ?? 15_000;
89
+ emit(onEvent, { type: "retrying", taskId, attempt: attempt + 1, delayMs, error: normalized.message });
90
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
91
+ }
92
+ }
93
+ }
94
+ async function contextForRequest(codexHome, proxy) {
95
+ const auth = await ensureDirectAuth(codexHome, proxy);
96
+ return {
97
+ accessToken: auth.accessToken,
98
+ accountId: auth.accountId,
99
+ identity: loadOrCreateIdentity(codexHome),
100
+ sessionId: randomUUID(),
101
+ threadId: randomUUID(),
102
+ };
103
+ }
104
+ export async function executeDirectText(taskId, options) {
105
+ const config = loadConfig({
106
+ codexHome: options.codexHome,
107
+ directModel: options.model,
108
+ directReasoning: options.reasoning,
109
+ directTextTimeoutMs: options.timeoutMs,
110
+ retries: options.retries,
111
+ });
112
+ const model = resolveDirectModel(config.codexHome, config.directModel, config.directReasoning);
113
+ const context = await contextForRequest(config.codexHome, config.proxy);
114
+ const response = await sendWithRetry(taskId, context, {
115
+ kind: "text",
116
+ prompt: options.prompt,
117
+ instructions: options.instructions,
118
+ model,
119
+ outputSchema: options.outputSchema,
120
+ }, config.directTextTimeoutMs, config.retries, config.proxy, options.signal, options.onEvent);
121
+ if (!response.text) {
122
+ throw new CodexTaskError("DIRECT_EMPTY_TEXT", "Direct backend returned no text", { retryable: true });
123
+ }
124
+ return { text: response.text, model, usage: response.usage };
125
+ }
126
+ export async function executeDirectImage(taskId, options) {
127
+ const validated = validateImageOptions(options);
128
+ const config = loadConfig({
129
+ codexHome: options.codexHome,
130
+ directModel: options.model,
131
+ directReasoning: options.reasoning,
132
+ directImageTimeoutMs: options.timeoutMs,
133
+ retries: options.retries,
134
+ });
135
+ const resolution = resolveDirectImageModel(config.codexHome, config.directModel, config.directReasoning);
136
+ const model = resolution.model;
137
+ if (resolution.replacedLiteModel) {
138
+ emit(options.onEvent, {
139
+ type: "progress",
140
+ taskId,
141
+ message: `${resolution.replacedLiteModel} uses Responses Lite, which cannot expose hosted image_generation; using ${model.model} before sending the request`,
142
+ });
143
+ }
144
+ const context = await contextForRequest(config.codexHome, config.proxy);
145
+ const artifacts = [];
146
+ const usage = {};
147
+ let nextIndex = 0;
148
+ const worker = async (workerContext) => {
149
+ while (true) {
150
+ const index = nextIndex;
151
+ nextIndex += 1;
152
+ if (index >= validated.count)
153
+ return;
154
+ try {
155
+ emit(options.onEvent, {
156
+ type: "progress",
157
+ taskId,
158
+ message: `Generating image ${index + 1}/${validated.count}`,
159
+ });
160
+ const response = await sendWithRetry(taskId, workerContext, {
161
+ kind: "image",
162
+ prompt: options.prompt,
163
+ instructions: options.instructions,
164
+ model,
165
+ imageOptions: validated,
166
+ }, config.directImageTimeoutMs, config.retries, config.proxy, options.signal, options.onEvent);
167
+ if (!response.image) {
168
+ throw new CodexTaskError("DIRECT_EMPTY_IMAGE", "Direct backend returned no image", {
169
+ retryable: !response.text,
170
+ details: response.text ? { text: response.text } : undefined,
171
+ });
172
+ }
173
+ const artifact = writePngArtifact(taskId, response.image, options.output, index, validated.count, validated.overwrite);
174
+ artifacts[index] = artifact;
175
+ emit(options.onEvent, { type: "artifact", taskId, artifact });
176
+ if (response.usage?.inputTokens)
177
+ usage.inputTokens = (usage.inputTokens ?? 0) + response.usage.inputTokens;
178
+ if (response.usage?.outputTokens)
179
+ usage.outputTokens = (usage.outputTokens ?? 0) + response.usage.outputTokens;
180
+ }
181
+ catch (error) {
182
+ const normalized = normalizeDirectError(error);
183
+ throw new CodexTaskError(normalized.code, normalized.message, {
184
+ retryable: normalized.retryable,
185
+ exitCode: normalized.exitCode,
186
+ details: { upstream: normalized.details, artifacts: artifacts.filter(Boolean) },
187
+ cause: normalized,
188
+ });
189
+ }
190
+ }
191
+ };
192
+ const workerCount = Math.min(validated.concurrency, validated.count);
193
+ const contexts = Array.from({ length: workerCount }, () => ({
194
+ ...context,
195
+ sessionId: randomUUID(),
196
+ threadId: randomUUID(),
197
+ }));
198
+ await Promise.all(contexts.map((workerContext) => worker(workerContext)));
199
+ return { artifacts: artifacts.filter(Boolean), model, usage };
200
+ }
201
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/backends/direct/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ReasoningEffort } from "../../types.js";
2
+ export interface ResolvedDirectModel {
3
+ model: string;
4
+ useResponsesLite: boolean;
5
+ reasoning: ReasoningEffort;
6
+ supportedReasoning: ReasoningEffort[];
7
+ source: "explicit" | "codex-config" | "model-cache" | "fallback";
8
+ }
9
+ export declare function resolveDirectModel(codexHome: string, explicitModel: string | undefined, requestedReasoning?: ReasoningEffort): ResolvedDirectModel;
10
+ export declare function resolveDirectImageModel(codexHome: string, explicitModel: string | undefined, requestedReasoning?: ReasoningEffort): {
11
+ model: ResolvedDirectModel;
12
+ replacedLiteModel?: string | undefined;
13
+ };
14
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/backends/direct/models.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAmBtD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,eAAe,CAAC;IAC3B,kBAAkB,EAAE,eAAe,EAAE,CAAC;IACtC,MAAM,EAAE,UAAU,GAAG,cAAc,GAAG,aAAa,GAAG,UAAU,CAAC;CAClE;AA+BD,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,kBAAkB,GAAE,eAA0B,GAC7C,mBAAmB,CAyCrB;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,kBAAkB,GAAE,eAA0B,GAC7C;IAAE,KAAK,EAAE,mBAAmB,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAOxE"}
@@ -0,0 +1,83 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { usageError } from "../../errors.js";
4
+ function readModelCache(codexHome) {
5
+ try {
6
+ const path = join(codexHome, "models_cache.json");
7
+ if (!existsSync(path))
8
+ return [];
9
+ return JSON.parse(readFileSync(path, "utf8")).models ?? [];
10
+ }
11
+ catch {
12
+ return [];
13
+ }
14
+ }
15
+ function readConfiguredModel(codexHome) {
16
+ try {
17
+ const path = join(codexHome, "config.toml");
18
+ if (!existsSync(path))
19
+ return undefined;
20
+ const match = readFileSync(path, "utf8").match(/^model\s*=\s*["']([^"']+)["']/m);
21
+ return match?.[1];
22
+ }
23
+ catch {
24
+ return undefined;
25
+ }
26
+ }
27
+ function modelInfo(model, models) {
28
+ return models.find((entry) => entry.slug === model);
29
+ }
30
+ function heuristicLite(model) {
31
+ return model === "gpt-5.6-sol";
32
+ }
33
+ export function resolveDirectModel(codexHome, explicitModel, requestedReasoning = "medium") {
34
+ const models = readModelCache(codexHome);
35
+ const configured = readConfiguredModel(codexHome);
36
+ const preferred = [...models]
37
+ .filter((entry) => entry.visibility === "list" && entry.supported_in_api !== false)
38
+ .sort((left, right) => (left.priority ?? Number.MAX_SAFE_INTEGER) - (right.priority ?? Number.MAX_SAFE_INTEGER))[0];
39
+ let model;
40
+ let source;
41
+ if (explicitModel) {
42
+ model = explicitModel;
43
+ source = "explicit";
44
+ }
45
+ else if (configured) {
46
+ model = configured;
47
+ source = "codex-config";
48
+ }
49
+ else if (preferred) {
50
+ model = preferred.slug;
51
+ source = "model-cache";
52
+ }
53
+ else {
54
+ model = "gpt-5.6-sol";
55
+ source = "fallback";
56
+ }
57
+ const info = modelInfo(model, models);
58
+ const supportedReasoning = info?.supported_reasoning_levels?.map((entry) => entry.effort) ?? [
59
+ "low",
60
+ "medium",
61
+ "high",
62
+ ];
63
+ if (!supportedReasoning.includes(requestedReasoning)) {
64
+ throw usageError(`reasoning ${requestedReasoning} is not supported by ${model}; choose ${supportedReasoning.join(", ")}`);
65
+ }
66
+ return {
67
+ model,
68
+ useResponsesLite: info?.use_responses_lite ?? heuristicLite(model),
69
+ reasoning: requestedReasoning,
70
+ supportedReasoning,
71
+ source,
72
+ };
73
+ }
74
+ export function resolveDirectImageModel(codexHome, explicitModel, requestedReasoning = "medium") {
75
+ const selected = resolveDirectModel(codexHome, explicitModel, requestedReasoning);
76
+ if (!selected.useResponsesLite)
77
+ return { model: selected };
78
+ return {
79
+ model: resolveDirectModel(codexHome, "gpt-5.5", requestedReasoning),
80
+ replacedLiteModel: selected.model,
81
+ };
82
+ }
83
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/backends/direct/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { DirectIdentity } from "./identity.js";
2
+ import type { ResolvedDirectModel } from "./models.js";
3
+ import { type ValidatedImageOptions } from "../../images.js";
4
+ export declare const RESPONSES_URL = "https://chatgpt.com/backend-api/codex/responses";
5
+ export interface DirectRequestContext {
6
+ accessToken: string;
7
+ accountId: string;
8
+ identity: DirectIdentity;
9
+ sessionId: string;
10
+ threadId: string;
11
+ }
12
+ export interface DirectRequestSpec {
13
+ kind: "text" | "image";
14
+ prompt: string;
15
+ instructions?: string | undefined;
16
+ model: ResolvedDirectModel;
17
+ outputSchema?: Record<string, unknown> | undefined;
18
+ imageOptions?: ValidatedImageOptions | undefined;
19
+ }
20
+ export declare function buildDirectRequest(context: DirectRequestContext, spec: DirectRequestSpec): {
21
+ headers: Record<string, string>;
22
+ body: Record<string, unknown>;
23
+ };
24
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/backends/direct/protocol.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAiB,KAAK,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE5E,eAAO,MAAM,aAAa,oDAAoD,CAAC;AAqB/E,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACnD,YAAY,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;CAClD;AA+DD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,oBAAoB,EAC7B,IAAI,EAAE,iBAAiB,GACtB;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CA4DpE"}
@@ -0,0 +1,131 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { readFileSync } from "node:fs";
3
+ import { buildUserAgent, platformSandboxTag } from "./identity.js";
4
+ import { imageMimeType } from "../../images.js";
5
+ export const RESPONSES_URL = "https://chatgpt.com/backend-api/codex/responses";
6
+ const TEXT_INSTRUCTIONS = `You are a focused single-turn task worker called by another AI agent.
7
+ Return the requested deliverable directly with minimal ceremony.
8
+ You do not have access to the caller's local shell, files, MCP servers, or skills.
9
+ Never claim that you executed local tools or changed local files.
10
+ If the request is underspecified, make a reasonable assumption and state it briefly.`;
11
+ const IMAGE_INSTRUCTIONS = `You are a focused image-generation worker called by another AI agent.
12
+ Use the provided image_generation tool to produce the requested image.
13
+ When reference images are present, preserve the user's requested identity, composition, and constraints.
14
+ Do not return a prose-only answer when image generation is requested.`;
15
+ function turnContext(context) {
16
+ return {
17
+ turnId: randomUUID(),
18
+ sessionId: context.sessionId,
19
+ threadId: context.threadId,
20
+ windowId: `${context.threadId}:0`,
21
+ timestampMs: Date.now(),
22
+ };
23
+ }
24
+ function turnMetadata(turn) {
25
+ return JSON.stringify({
26
+ turn_id: turn.turnId,
27
+ turn_started_at_unix_ms: turn.timestampMs,
28
+ session_id: turn.sessionId,
29
+ thread_id: turn.threadId,
30
+ sandbox: platformSandboxTag(),
31
+ request_kind: "turn",
32
+ window_id: turn.windowId,
33
+ workspace_kind: "local",
34
+ has_changes: false,
35
+ });
36
+ }
37
+ function imageTool(options) {
38
+ return {
39
+ type: "image_generation",
40
+ ...(options.size !== "auto" ? { size: options.size } : {}),
41
+ ...(options.quality !== "auto" ? { quality: options.quality } : {}),
42
+ ...(options.background !== "auto" ? { background: options.background } : {}),
43
+ };
44
+ }
45
+ function userContent(spec) {
46
+ const content = [{ type: "input_text", text: spec.prompt }];
47
+ for (const path of spec.imageOptions?.imagePaths ?? []) {
48
+ const mimeType = imageMimeType(path);
49
+ content.push({
50
+ type: "input_image",
51
+ image_url: `data:${mimeType};base64,${readFileSync(path).toString("base64")}`,
52
+ });
53
+ }
54
+ return content;
55
+ }
56
+ function textConfig(spec) {
57
+ return {
58
+ verbosity: "low",
59
+ ...(spec.outputSchema
60
+ ? {
61
+ format: {
62
+ type: "json_schema",
63
+ name: "codex_task_result",
64
+ strict: true,
65
+ schema: spec.outputSchema,
66
+ },
67
+ }
68
+ : {}),
69
+ };
70
+ }
71
+ export function buildDirectRequest(context, spec) {
72
+ const turn = turnContext(context);
73
+ const instructions = [spec.kind === "image" ? IMAGE_INSTRUCTIONS : TEXT_INSTRUCTIONS, spec.instructions]
74
+ .filter(Boolean)
75
+ .join("\n\n");
76
+ const tools = spec.kind === "image" && spec.imageOptions ? [imageTool(spec.imageOptions)] : [];
77
+ const userMessage = { type: "message", role: "user", content: userContent(spec) };
78
+ const base = {
79
+ model: spec.model.model,
80
+ tool_choice: "auto",
81
+ parallel_tool_calls: false,
82
+ stream: true,
83
+ store: false,
84
+ reasoning: {
85
+ effort: spec.model.reasoning,
86
+ ...(spec.model.useResponsesLite ? { context: "all_turns" } : {}),
87
+ },
88
+ text: textConfig(spec),
89
+ include: ["reasoning.encrypted_content"],
90
+ prompt_cache_key: context.threadId,
91
+ client_metadata: { "x-codex-installation-id": context.identity.installationId },
92
+ };
93
+ const body = spec.model.useResponsesLite
94
+ ? {
95
+ ...base,
96
+ instructions: "",
97
+ input: [
98
+ { type: "additional_tools", role: "developer", tools },
99
+ { type: "message", role: "developer", content: [{ type: "input_text", text: instructions }] },
100
+ userMessage,
101
+ ],
102
+ }
103
+ : {
104
+ ...base,
105
+ instructions,
106
+ input: [userMessage],
107
+ tools,
108
+ };
109
+ return {
110
+ headers: {
111
+ Authorization: `Bearer ${context.accessToken}`,
112
+ ...(context.accountId ? { "ChatGPT-Account-Id": context.accountId } : {}),
113
+ "Content-Type": "application/json",
114
+ Accept: "text/event-stream",
115
+ "OpenAI-Beta": "responses_websockets=2026-02-06",
116
+ originator: "codex_cli_rs",
117
+ "User-Agent": buildUserAgent(context.identity),
118
+ "OAI-Product-Sku": "codex",
119
+ "x-codex-installation-id": context.identity.installationId,
120
+ "x-codex-window-id": turn.windowId,
121
+ "x-responses": "api-include-timing-metrics",
122
+ "session-id": turn.sessionId,
123
+ "thread-id": turn.threadId,
124
+ "x-client-request-id": turn.turnId,
125
+ "x-codex-turn-metadata": turnMetadata(turn),
126
+ ...(spec.model.useResponsesLite ? { "x-openai-internal-codex-responses-lite": "true" } : {}),
127
+ },
128
+ body,
129
+ };
130
+ }
131
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/backends/direct/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { UsageSummary } from "../../types.js";
2
+ interface SseEvent {
3
+ type?: string;
4
+ [key: string]: unknown;
5
+ }
6
+ export interface ParsedDirectResponse {
7
+ text?: string | undefined;
8
+ image?: Buffer | undefined;
9
+ imageSize?: string | undefined;
10
+ usage?: UsageSummary | undefined;
11
+ }
12
+ export declare function parseSse(text: string): SseEvent[];
13
+ export declare function parseDirectResponse(text: string): ParsedDirectResponse;
14
+ export {};
15
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../../src/backends/direct/sse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,UAAU,QAAQ;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CAClC;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAajD;AAiED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAStE"}