codex-multi-auth 2.1.13-beta.1 → 2.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 (214) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +415 -415
  3. package/assets/codex-multi-auth-icon.svg +39 -39
  4. package/assets/readme-hero.svg +31 -31
  5. package/config/README.md +29 -29
  6. package/config/codex-legacy.json +571 -571
  7. package/config/codex-modern.json +258 -258
  8. package/config/minimal-codex.json +15 -15
  9. package/config/schema/config.schema.json +20 -20
  10. package/dist/lib/accounts.d.ts.map +1 -1
  11. package/dist/lib/accounts.js +30 -1
  12. package/dist/lib/accounts.js.map +1 -1
  13. package/dist/lib/auth/org-override.d.ts +19 -0
  14. package/dist/lib/auth/org-override.d.ts.map +1 -0
  15. package/dist/lib/auth/org-override.js +23 -0
  16. package/dist/lib/auth/org-override.js.map +1 -0
  17. package/dist/lib/circuit-breaker.d.ts +6 -0
  18. package/dist/lib/circuit-breaker.d.ts.map +1 -1
  19. package/dist/lib/circuit-breaker.js +8 -0
  20. package/dist/lib/circuit-breaker.js.map +1 -1
  21. package/dist/lib/codex-manager/account-manager-commands.d.ts +14 -0
  22. package/dist/lib/codex-manager/account-manager-commands.d.ts.map +1 -0
  23. package/dist/lib/codex-manager/account-manager-commands.js +43 -0
  24. package/dist/lib/codex-manager/account-manager-commands.js.map +1 -0
  25. package/dist/lib/codex-manager/commands/best.d.ts +1 -1
  26. package/dist/lib/codex-manager/commands/best.d.ts.map +1 -1
  27. package/dist/lib/codex-manager/commands/best.js +2 -1
  28. package/dist/lib/codex-manager/commands/best.js.map +1 -1
  29. package/dist/lib/codex-manager/commands/debug-bundle.d.ts +16 -0
  30. package/dist/lib/codex-manager/commands/debug-bundle.d.ts.map +1 -1
  31. package/dist/lib/codex-manager/commands/debug-bundle.js +80 -5
  32. package/dist/lib/codex-manager/commands/debug-bundle.js.map +1 -1
  33. package/dist/lib/codex-manager/commands/forecast.d.ts +1 -1
  34. package/dist/lib/codex-manager/commands/forecast.d.ts.map +1 -1
  35. package/dist/lib/codex-manager/commands/forecast.js +2 -1
  36. package/dist/lib/codex-manager/commands/forecast.js.map +1 -1
  37. package/dist/lib/codex-manager/commands/report.d.ts.map +1 -1
  38. package/dist/lib/codex-manager/commands/report.js +2 -2
  39. package/dist/lib/codex-manager/commands/report.js.map +1 -1
  40. package/dist/lib/codex-manager/commands/status.d.ts +2 -0
  41. package/dist/lib/codex-manager/commands/status.d.ts.map +1 -1
  42. package/dist/lib/codex-manager/commands/status.js +84 -25
  43. package/dist/lib/codex-manager/commands/status.js.map +1 -1
  44. package/dist/lib/codex-manager/commands/switch.d.ts.map +1 -1
  45. package/dist/lib/codex-manager/commands/switch.js +7 -0
  46. package/dist/lib/codex-manager/commands/switch.js.map +1 -1
  47. package/dist/lib/codex-manager/experimental-settings-prompt.d.ts.map +1 -1
  48. package/dist/lib/codex-manager/experimental-settings-prompt.js +13 -3
  49. package/dist/lib/codex-manager/experimental-settings-prompt.js.map +1 -1
  50. package/dist/lib/codex-manager/forecast-report-commands.d.ts.map +1 -1
  51. package/dist/lib/codex-manager/forecast-report-commands.js +3 -3
  52. package/dist/lib/codex-manager/forecast-report-commands.js.map +1 -1
  53. package/dist/lib/codex-manager/repair-commands.d.ts.map +1 -1
  54. package/dist/lib/codex-manager/repair-commands.js +11 -1
  55. package/dist/lib/codex-manager/repair-commands.js.map +1 -1
  56. package/dist/lib/codex-manager/settings-hub/experimental.d.ts.map +1 -1
  57. package/dist/lib/codex-manager/settings-hub/experimental.js +8 -0
  58. package/dist/lib/codex-manager/settings-hub/experimental.js.map +1 -1
  59. package/dist/lib/codex-manager.d.ts +3 -0
  60. package/dist/lib/codex-manager.d.ts.map +1 -1
  61. package/dist/lib/codex-manager.js +53 -65
  62. package/dist/lib/codex-manager.js.map +1 -1
  63. package/dist/lib/config.d.ts +26 -0
  64. package/dist/lib/config.d.ts.map +1 -1
  65. package/dist/lib/config.js +152 -5
  66. package/dist/lib/config.js.map +1 -1
  67. package/dist/lib/context-overflow.d.ts +7 -2
  68. package/dist/lib/context-overflow.d.ts.map +1 -1
  69. package/dist/lib/context-overflow.js +65 -47
  70. package/dist/lib/context-overflow.js.map +1 -1
  71. package/dist/lib/errors.d.ts +16 -0
  72. package/dist/lib/errors.d.ts.map +1 -1
  73. package/dist/lib/errors.js +23 -0
  74. package/dist/lib/errors.js.map +1 -1
  75. package/dist/lib/local-bridge.d.ts +8 -0
  76. package/dist/lib/local-bridge.d.ts.map +1 -1
  77. package/dist/lib/local-bridge.js +81 -7
  78. package/dist/lib/local-bridge.js.map +1 -1
  79. package/dist/lib/logger.d.ts +9 -1
  80. package/dist/lib/logger.d.ts.map +1 -1
  81. package/dist/lib/logger.js +104 -19
  82. package/dist/lib/logger.js.map +1 -1
  83. package/dist/lib/oauth-success.html +125 -125
  84. package/dist/lib/oc-chatgpt-orchestrator.d.ts +7 -1
  85. package/dist/lib/oc-chatgpt-orchestrator.d.ts.map +1 -1
  86. package/dist/lib/oc-chatgpt-orchestrator.js +68 -9
  87. package/dist/lib/oc-chatgpt-orchestrator.js.map +1 -1
  88. package/dist/lib/policy/runtime-policy.d.ts.map +1 -1
  89. package/dist/lib/policy/runtime-policy.js +15 -1
  90. package/dist/lib/policy/runtime-policy.js.map +1 -1
  91. package/dist/lib/prompts/codex-host-bridge.js +138 -138
  92. package/dist/lib/prompts/codex.d.ts.map +1 -1
  93. package/dist/lib/prompts/codex.js +203 -108
  94. package/dist/lib/prompts/codex.js.map +1 -1
  95. package/dist/lib/prompts/fetch-utils.d.ts +72 -0
  96. package/dist/lib/prompts/fetch-utils.d.ts.map +1 -0
  97. package/dist/lib/prompts/fetch-utils.js +165 -0
  98. package/dist/lib/prompts/fetch-utils.js.map +1 -0
  99. package/dist/lib/prompts/host-codex-prompt.d.ts.map +1 -1
  100. package/dist/lib/prompts/host-codex-prompt.js +24 -10
  101. package/dist/lib/prompts/host-codex-prompt.js.map +1 -1
  102. package/dist/lib/quota-cache.d.ts.map +1 -1
  103. package/dist/lib/quota-cache.js +10 -1
  104. package/dist/lib/quota-cache.js.map +1 -1
  105. package/dist/lib/quota-probe.d.ts +21 -0
  106. package/dist/lib/quota-probe.d.ts.map +1 -1
  107. package/dist/lib/quota-probe.js +39 -0
  108. package/dist/lib/quota-probe.js.map +1 -1
  109. package/dist/lib/quota-readiness.d.ts +3 -1
  110. package/dist/lib/quota-readiness.d.ts.map +1 -1
  111. package/dist/lib/quota-readiness.js +16 -3
  112. package/dist/lib/quota-readiness.js.map +1 -1
  113. package/dist/lib/recovery/storage.d.ts +7 -0
  114. package/dist/lib/recovery/storage.d.ts.map +1 -1
  115. package/dist/lib/recovery/storage.js +178 -10
  116. package/dist/lib/recovery/storage.js.map +1 -1
  117. package/dist/lib/refresh-lease.d.ts +1 -1
  118. package/dist/lib/refresh-lease.d.ts.map +1 -1
  119. package/dist/lib/refresh-lease.js +25 -3
  120. package/dist/lib/refresh-lease.js.map +1 -1
  121. package/dist/lib/refresh-queue.d.ts.map +1 -1
  122. package/dist/lib/refresh-queue.js +31 -17
  123. package/dist/lib/refresh-queue.js.map +1 -1
  124. package/dist/lib/request/fetch-helpers.d.ts +0 -5
  125. package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
  126. package/dist/lib/request/fetch-helpers.js +36 -7
  127. package/dist/lib/request/fetch-helpers.js.map +1 -1
  128. package/dist/lib/rotation.d.ts +12 -0
  129. package/dist/lib/rotation.d.ts.map +1 -1
  130. package/dist/lib/rotation.js +36 -0
  131. package/dist/lib/rotation.js.map +1 -1
  132. package/dist/lib/runtime/account-check-types.d.ts +1 -0
  133. package/dist/lib/runtime/account-check-types.d.ts.map +1 -1
  134. package/dist/lib/runtime/account-check-types.js +1 -0
  135. package/dist/lib/runtime/account-check-types.js.map +1 -1
  136. package/dist/lib/runtime/account-check.d.ts.map +1 -1
  137. package/dist/lib/runtime/account-check.js +15 -4
  138. package/dist/lib/runtime/account-check.js.map +1 -1
  139. package/dist/lib/runtime/runtime-observability.d.ts.map +1 -1
  140. package/dist/lib/runtime/runtime-observability.js +24 -2
  141. package/dist/lib/runtime/runtime-observability.js.map +1 -1
  142. package/dist/lib/runtime-rotation-proxy.d.ts +3 -0
  143. package/dist/lib/runtime-rotation-proxy.d.ts.map +1 -1
  144. package/dist/lib/runtime-rotation-proxy.js +296 -21
  145. package/dist/lib/runtime-rotation-proxy.js.map +1 -1
  146. package/dist/lib/schemas.d.ts +2 -0
  147. package/dist/lib/schemas.d.ts.map +1 -1
  148. package/dist/lib/schemas.js +2 -0
  149. package/dist/lib/schemas.js.map +1 -1
  150. package/dist/lib/storage/account-clear.d.ts.map +1 -1
  151. package/dist/lib/storage/account-clear.js +4 -2
  152. package/dist/lib/storage/account-clear.js.map +1 -1
  153. package/dist/lib/storage/flagged-storage-io.d.ts.map +1 -1
  154. package/dist/lib/storage/flagged-storage-io.js +4 -1
  155. package/dist/lib/storage/flagged-storage-io.js.map +1 -1
  156. package/dist/lib/storage/import-export.d.ts.map +1 -1
  157. package/dist/lib/storage/import-export.js +29 -9
  158. package/dist/lib/storage/import-export.js.map +1 -1
  159. package/dist/lib/storage/paths.d.ts.map +1 -1
  160. package/dist/lib/storage/paths.js +93 -0
  161. package/dist/lib/storage/paths.js.map +1 -1
  162. package/dist/lib/storage/storage-parser.d.ts.map +1 -1
  163. package/dist/lib/storage/storage-parser.js +7 -1
  164. package/dist/lib/storage/storage-parser.js.map +1 -1
  165. package/dist/lib/storage.d.ts.map +1 -1
  166. package/dist/lib/storage.js +13 -9
  167. package/dist/lib/storage.js.map +1 -1
  168. package/dist/lib/table-formatter.d.ts.map +1 -1
  169. package/dist/lib/table-formatter.js +20 -2
  170. package/dist/lib/table-formatter.js.map +1 -1
  171. package/dist/lib/types.d.ts +7 -0
  172. package/dist/lib/types.d.ts.map +1 -1
  173. package/dist/lib/ui/auth-menu.d.ts.map +1 -1
  174. package/dist/lib/ui/auth-menu.js +8 -2
  175. package/dist/lib/ui/auth-menu.js.map +1 -1
  176. package/dist/lib/ui/display-width.d.ts +27 -0
  177. package/dist/lib/ui/display-width.d.ts.map +1 -0
  178. package/dist/lib/ui/display-width.js +194 -0
  179. package/dist/lib/ui/display-width.js.map +1 -0
  180. package/dist/lib/ui/select.d.ts +23 -0
  181. package/dist/lib/ui/select.d.ts.map +1 -1
  182. package/dist/lib/ui/select.js +64 -16
  183. package/dist/lib/ui/select.js.map +1 -1
  184. package/dist/lib/ui/theme.d.ts +13 -0
  185. package/dist/lib/ui/theme.d.ts.map +1 -1
  186. package/dist/lib/ui/theme.js +34 -1
  187. package/dist/lib/ui/theme.js.map +1 -1
  188. package/node_modules/@codex-ai/plugin/dist/index.d.ts +2 -2
  189. package/node_modules/@codex-ai/plugin/dist/index.js +2 -2
  190. package/node_modules/@codex-ai/plugin/dist/tool.d.ts +42 -42
  191. package/node_modules/@codex-ai/plugin/dist/tool.js +29 -29
  192. package/node_modules/@codex-ai/plugin/package.json +9 -9
  193. package/node_modules/@codex-ai/sdk/dist/index.d.ts +4 -0
  194. package/node_modules/@codex-ai/sdk/dist/index.js +2 -0
  195. package/node_modules/@codex-ai/sdk/package.json +8 -0
  196. package/package.json +196 -193
  197. package/scripts/codex-app-launcher.js +653 -653
  198. package/scripts/codex-app-router.js +322 -322
  199. package/scripts/codex-bin-resolver.js +254 -254
  200. package/scripts/codex-multi-auth.js +59 -59
  201. package/scripts/codex-routing.js +59 -56
  202. package/scripts/codex.js +4782 -4275
  203. package/scripts/install-codex-auth-utils.js +206 -206
  204. package/scripts/mcodex +117 -0
  205. package/scripts/postinstall.js +343 -343
  206. package/scripts/preuninstall.js +254 -254
  207. package/vendor/codex-ai-plugin/dist/index.d.ts +2 -2
  208. package/vendor/codex-ai-plugin/dist/index.js +2 -2
  209. package/vendor/codex-ai-plugin/dist/tool.d.ts +42 -42
  210. package/vendor/codex-ai-plugin/dist/tool.js +29 -29
  211. package/vendor/codex-ai-plugin/package.json +9 -9
  212. package/vendor/codex-ai-sdk/dist/index.d.ts +4 -4
  213. package/vendor/codex-ai-sdk/dist/index.js +2 -2
  214. package/vendor/codex-ai-sdk/package.json +8 -8
@@ -1,9 +1,53 @@
1
1
  import { promises as fs } from "node:fs";
2
2
  import { dirname, join } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
+ import { createHash } from "node:crypto";
4
5
  import { logWarn, logError, logDebug } from "../logger.js";
5
6
  import { getCodexCacheDir } from "../runtime-paths.js";
6
7
  import { getModelProfile } from "../request/helpers/model-map.js";
8
+ import { fetchWithTimeout, readBodyTextGuarded, withBodyTimeout } from "./fetch-utils.js";
9
+ import { withFileOperationRetry } from "../fs-retry.js";
10
+ /** SHA-256 of cache content for integrity verification (prompts-03). */
11
+ function sha256(content) {
12
+ return createHash("sha256").update(content, "utf8").digest("hex");
13
+ }
14
+ /**
15
+ * Atomically write content + meta (prompts-06).
16
+ *
17
+ * The previous parallel writeFile of cacheFile and cacheMetaFile could tear:
18
+ * a crash between them left content and meta (etag/sha) out of sync. Write each
19
+ * to a temp sibling then rename, and write the content before the meta so the
20
+ * meta's sha always describes a content file already on disk.
21
+ *
22
+ * Note on atomicity: this is a *two-rename* operation (content, then meta), not
23
+ * a single atomic commit. If the second rename fails permanently the disk holds
24
+ * new content with stale meta — which the next read self-heals via the sha256
25
+ * integrity check (mismatch ⇒ discard + refetch). Each fs step is wrapped in
26
+ * withFileOperationRetry so a transient Windows EBUSY/EPERM/ENOTEMPTY/EACCES
27
+ * from antivirus, the file indexer, or a concurrent reader is retried with
28
+ * backoff instead of turning a successful fetch into a cache-write failure.
29
+ */
30
+ async function writeCacheAtomically(cacheFile, cacheMetaFile, content, meta) {
31
+ await withFileOperationRetry(() => fs.mkdir(CACHE_DIR, { recursive: true }));
32
+ const nonce = `${Date.now()}-${process.pid}-${Math.random().toString(36).slice(2, 8)}`;
33
+ const contentTmp = `${cacheFile}.${nonce}.tmp`;
34
+ const metaTmp = `${cacheMetaFile}.${nonce}.tmp`;
35
+ try {
36
+ await withFileOperationRetry(() => fs.writeFile(contentTmp, content, { encoding: "utf8" }));
37
+ await withFileOperationRetry(() => fs.writeFile(metaTmp, JSON.stringify(meta), { encoding: "utf8" }));
38
+ await withFileOperationRetry(() => fs.rename(contentTmp, cacheFile));
39
+ await withFileOperationRetry(() => fs.rename(metaTmp, cacheMetaFile));
40
+ }
41
+ finally {
42
+ // Route cleanup through withFileOperationRetry too: a transient Windows
43
+ // EBUSY/EPERM/ENOTEMPTY/EACCES from antivirus/the indexer/a concurrent
44
+ // reader on the temp sibling would otherwise leak a *.tmp file. force:true
45
+ // keeps ENOENT (already-renamed) a no-op; the catch swallows a persistent
46
+ // failure so cleanup never masks a successful write.
47
+ await withFileOperationRetry(() => fs.rm(contentTmp, { force: true })).catch(() => undefined);
48
+ await withFileOperationRetry(() => fs.rm(metaTmp, { force: true })).catch(() => undefined);
49
+ }
50
+ }
7
51
  const GITHUB_API_RELEASES = "https://api.github.com/repos/openai/codex/releases/latest";
8
52
  const GITHUB_HTML_RELEASES = "https://github.com/openai/codex/releases/latest";
9
53
  const CACHE_DIR = getCodexCacheDir();
@@ -95,9 +139,12 @@ async function getLatestReleaseTag() {
95
139
  return latestReleaseTagCache.tag;
96
140
  }
97
141
  try {
98
- const response = await fetch(GITHUB_API_RELEASES);
142
+ const response = await fetchWithTimeout(GITHUB_API_RELEASES, { json: true });
99
143
  if (response.ok) {
100
- const data = (await response.json());
144
+ // Guard the body read: the fetch AbortSignal only covers connect+headers
145
+ // (see fetch-utils), so a release API response that stalls mid-body would
146
+ // otherwise hang getLatestReleaseTag() indefinitely on this blocking path.
147
+ const data = (await withBodyTimeout(response, response.json()));
101
148
  if (data.tag_name) {
102
149
  latestReleaseTagCache = {
103
150
  tag: data.tag_name,
@@ -110,7 +157,7 @@ async function getLatestReleaseTag() {
110
157
  catch {
111
158
  // Fall through to HTML fallback
112
159
  }
113
- const htmlResponse = await fetch(GITHUB_HTML_RELEASES);
160
+ const htmlResponse = await fetchWithTimeout(GITHUB_HTML_RELEASES);
114
161
  if (!htmlResponse.ok) {
115
162
  throw new Error(`Failed to fetch latest release: ${htmlResponse.status}`);
116
163
  }
@@ -126,7 +173,8 @@ async function getLatestReleaseTag() {
126
173
  return last;
127
174
  }
128
175
  }
129
- const html = await htmlResponse.text();
176
+ // Same mid-body-stall guard as the JSON path above for the HTML fallback.
177
+ const html = await withBodyTimeout(htmlResponse, htmlResponse.text());
130
178
  const match = html.match(/\/openai\/codex\/releases\/tag\/([^"]+)/);
131
179
  if (match && match[1]) {
132
180
  const tag = match[1];
@@ -171,15 +219,44 @@ export async function getCodexInstructions(normalizedModel = "gpt-5.3-codex") {
171
219
  cachedMetadata = null;
172
220
  }
173
221
  }
222
+ // prompts-03: once we know the disk content fails its sha256, it must not be
223
+ // trusted anywhere downstream — not served, not used as the 304 revalidation
224
+ // body, and not used as the offline fallback in the catch below. Track a
225
+ // "usable" view of the disk content separate from the raw read.
226
+ let usableDiskContent = diskContent;
174
227
  if (diskContent && cachedMetadata?.lastChecked) {
175
- if (now - cachedMetadata.lastChecked < CACHE_TTL_MS) {
228
+ // prompts-03: a sha256 mismatch means a corrupted/tampered cache — discard it
229
+ // everywhere (not served, not the 304 body, not the offline fallback). A
230
+ // MISSING sha (pre-upgrade legacy cache) is merely *unverified*: it must not
231
+ // be fast-path served and must not drive conditional revalidation (a 304
232
+ // would mint a fresh digest over un-vetted bytes), so we force one full 200
233
+ // fetch to establish trust — but we keep the old bytes as an offline fallback
234
+ // in case that fetch fails.
235
+ const priorSha = cachedMetadata.sha256;
236
+ if (!priorSha) {
237
+ // Unverified legacy entry: clear meta so no If-None-Match is sent and the
238
+ // cache isn't served as-is; retain usableDiskContent for offline fallback.
239
+ cachedMetadata = null;
240
+ }
241
+ else if (priorSha !== sha256(diskContent)) {
242
+ logWarn(`Discarding corrupt prompt cache for ${modelFamily} (sha256 mismatch)`);
243
+ // Force a full refetch: drop the corrupt body so it cannot be served or
244
+ // used as the catch fallback, and clear the cached metadata so no
245
+ // If-None-Match is sent (a 304 would otherwise re-serve and re-bless the
246
+ // exact corrupt content this check is meant to reject).
247
+ usableDiskContent = null;
248
+ cachedMetadata = null;
249
+ }
250
+ else if (now - cachedMetadata.lastChecked < CACHE_TTL_MS) {
176
251
  setCacheEntry(modelFamily, { content: diskContent, timestamp: now });
177
252
  return diskContent;
178
253
  }
179
- // Stale-while-revalidate: return stale cache immediately and refresh in background.
180
- setCacheEntry(modelFamily, { content: diskContent, timestamp: now });
181
- void refreshInstructionsInBackground(modelFamily, promptFile, cacheFile, cacheMetaFile, cachedMetadata);
182
- return diskContent;
254
+ else {
255
+ // Stale-while-revalidate: return stale cache immediately and refresh in background.
256
+ setCacheEntry(modelFamily, { content: diskContent, timestamp: now });
257
+ void refreshInstructionsInBackground(modelFamily, promptFile, cacheFile, cacheMetaFile, cachedMetadata);
258
+ return diskContent;
259
+ }
183
260
  }
184
261
  if (cached && now - cached.timestamp >= CACHE_TTL_MS) {
185
262
  // Keep session latency stable by serving stale memory cache while refreshing.
@@ -193,10 +270,10 @@ export async function getCodexInstructions(normalizedModel = "gpt-5.3-codex") {
193
270
  catch (error) {
194
271
  const err = error;
195
272
  logError(`Failed to fetch ${modelFamily} instructions from GitHub: ${err.message}`);
196
- if (diskContent) {
273
+ if (usableDiskContent) {
197
274
  logWarn(`Using cached ${modelFamily} instructions`);
198
- setCacheEntry(modelFamily, { content: diskContent, timestamp: now });
199
- return diskContent;
275
+ setCacheEntry(modelFamily, { content: usableDiskContent, timestamp: now });
276
+ return usableDiskContent;
200
277
  }
201
278
  logWarn(`Falling back to bundled instructions for ${modelFamily}`);
202
279
  const bundled = await fs.readFile(join(__dirname, "codex-instructions.md"), "utf8");
@@ -216,36 +293,54 @@ async function fetchAndPersistInstructions(modelFamily, promptFile, cacheFile, c
216
293
  if (cachedETag) {
217
294
  headers["If-None-Match"] = cachedETag;
218
295
  }
219
- const response = await fetch(instructionsUrl, { headers });
220
- if (response.status === 304) {
296
+ const response = await fetchWithTimeout(instructionsUrl, { headers });
297
+ // A 304 is only meaningful if we actually sent a conditional request. When the
298
+ // caller cleared the metadata (e.g. an sha256 mismatch forced a full refetch),
299
+ // cachedETag is null and no If-None-Match was sent, so a 304 here cannot be
300
+ // trusted to describe our disk content — fall through to the error path rather
301
+ // than re-serving (and re-blessing) whatever is on disk.
302
+ if (response.status === 304 && cachedETag) {
221
303
  const diskContent = await readFileOrNull(cacheFile);
222
- if (diskContent) {
304
+ // Only re-serve the disk content if it still matches the integrity hash we
305
+ // had on record. Recomputing and trusting the hash unconditionally would
306
+ // launder tampered bytes; verifying against the prior sha closes that.
307
+ const priorSha = cachedMetadata?.sha256;
308
+ // Require a prior sha to trust a 304: without one the on-disk bytes are
309
+ // unverified, so re-serving them and minting a fresh digest would launder
310
+ // un-vetted content. A missing sha forces the full-fetch path below.
311
+ const diskIntegrityOk = diskContent !== null && !!priorSha && priorSha === sha256(diskContent);
312
+ if (diskContent && diskIntegrityOk) {
223
313
  setCacheEntry(modelFamily, { content: diskContent, timestamp: Date.now() });
224
- await fs.mkdir(CACHE_DIR, { recursive: true });
225
- await fs.writeFile(cacheMetaFile, JSON.stringify({
314
+ // Refresh the meta (lastChecked) atomically and re-affirm the content sha
315
+ // so a 304 keeps the integrity record in sync with the on-disk content.
316
+ await writeCacheAtomically(cacheFile, cacheMetaFile, diskContent, {
226
317
  etag: cachedETag,
227
318
  tag: latestTag,
228
319
  lastChecked: Date.now(),
229
320
  url: instructionsUrl,
230
- }), "utf8");
321
+ sha256: sha256(diskContent),
322
+ });
231
323
  return diskContent;
232
324
  }
325
+ // 304 but the disk content is missing or fails its integrity check: treat as
326
+ // a fetch failure so the caller falls back to bundled instructions.
327
+ throw new Error("304 revalidation failed integrity check");
233
328
  }
234
329
  if (!response.ok) {
235
330
  throw new Error(`HTTP ${response.status}`);
236
331
  }
237
- const instructions = await response.text();
332
+ // Size-cap + reject empty bodies (prompts-04/05) before caching/serving.
333
+ const instructions = await readBodyTextGuarded(response);
238
334
  const newETag = response.headers.get("etag");
239
- await fs.mkdir(CACHE_DIR, { recursive: true });
240
- await Promise.all([
241
- fs.writeFile(cacheFile, instructions, "utf8"),
242
- fs.writeFile(cacheMetaFile, JSON.stringify({
243
- etag: newETag,
244
- tag: latestTag,
245
- lastChecked: Date.now(),
246
- url: instructionsUrl,
247
- }), "utf8"),
248
- ]);
335
+ // prompts-03/06: write content + meta atomically with a content sha256 so the
336
+ // cache cannot tear and can be integrity-checked on the next read.
337
+ await writeCacheAtomically(cacheFile, cacheMetaFile, instructions, {
338
+ etag: newETag,
339
+ tag: latestTag,
340
+ lastChecked: Date.now(),
341
+ url: instructionsUrl,
342
+ sha256: sha256(instructions),
343
+ });
249
344
  setCacheEntry(modelFamily, { content: instructions, timestamp: Date.now() });
250
345
  return instructions;
251
346
  }
@@ -290,84 +385,84 @@ export function prewarmCodexInstructions(models = []) {
290
385
  /**
291
386
  * Tool remapping instructions for host runtime tools
292
387
  */
293
- export const TOOL_REMAP_MESSAGE = `<user_instructions priority="0">
294
- <environment_override priority="0">
295
- YOU ARE IN A DIFFERENT ENVIRONMENT. These instructions override ALL previous tool references.
296
- </environment_override>
297
-
298
- <tool_replacements priority="0">
299
- <critical_rule priority="0">
300
- apply_patch/applyPatch are Codex names, but host tool names vary by version.
301
- - Inspect the actual tool list before editing.
302
- - If edit exists: use edit for precise in-place string replacements and hashline edits.
303
- - If edit is absent and apply_patch exists: use apply_patch for those precise/hashline edits in this plugin.
304
- - For diff-style or multi-line structural edits: use patch if available, otherwise use apply_patch.
305
- - In this plugin, edit/apply_patch support hashline refs (lineRef, endLineRef, operation, content)
306
- </critical_rule>
307
-
308
- <critical_rule priority="0">
309
- UPDATE_PLAN DOES NOT EXIST -> USE "todowrite" INSTEAD
310
- - NEVER use: update_plan, updatePlan
311
- - ALWAYS use: todowrite for ALL task/plan operations
312
- - Use todoread to read current plan
313
- - Before plan operations: Verify you're using "todowrite", NOT "update_plan"
314
- </critical_rule>
315
- </tool_replacements>
316
-
317
- <available_tools priority="0">
318
- File Operations:
319
- - write - Create new files (if available)
320
- - edit - Modify existing files with string replacement (version-dependent)
321
- - oldString must be literal text from the current file; never pass unresolved placeholders like \${TARGET_SNIPPET}
322
- - apply_patch - May be the edit/patch tool name in newer host builds (version-dependent)
323
- - hashline_read - Read lines with hashline refs (L<line>#<hash>) for deterministic edits
324
- - patch - Apply diff patches (version-dependent)
325
- - read - Read file contents
326
-
327
- Search/Discovery:
328
- - grep - Search file contents
329
- - glob - Find files by pattern
330
- - list - List directories (if available)
331
-
332
- Execution:
333
- - bash - Run shell commands
334
-
335
- Network:
336
- - webfetch - Fetch web content
337
-
338
- Task Management:
339
- - todowrite - Manage tasks/plans (REPLACES update_plan)
340
- - todoread - Read current plan
341
- </available_tools>
342
-
343
- <substitution_rules priority="0">
344
- Base instruction says: You MUST use instead:
345
- apply_patch -> patch (preferred if available), otherwise edit/apply_patch based on actual tool list
346
- update_plan -> todowrite
347
- read_plan -> todoread
348
- absolute paths -> relative paths
349
- </substitution_rules>
350
-
351
- <verification_checklist priority="0">
352
- Before file/plan modifications:
353
- 1. Am I using the actual available edit tool name (edit, patch, or apply_patch)?
354
- 2. Am I using "todowrite" NOT "update_plan"?
355
- 3. Is this tool in the approved list above?
356
- 4. Am I using relative paths?
357
-
358
- If ANY answer is NO -> STOP and correct before proceeding.
359
- </verification_checklist>
360
-
361
- <hashline_workflow priority="0">
362
- When hashline_read is available:
363
- 1. call hashline_read on the file
364
- 2. edit/apply_patch using lineRef/endLineRef + operation + content
365
- 3. use oldString/newString only as fallback, and only with literal file text (no template placeholders)
366
- </hashline_workflow>
367
-
368
- <safety_rules priority="0">
369
- - Never run destructive git commands (\`git reset --hard\`, \`git checkout --\`) unless explicitly requested by the user.
370
- - Never call \`request_user_input\` unless collaboration mode is explicitly Plan mode.
371
- </safety_rules>
388
+ export const TOOL_REMAP_MESSAGE = `<user_instructions priority="0">
389
+ <environment_override priority="0">
390
+ YOU ARE IN A DIFFERENT ENVIRONMENT. These instructions override ALL previous tool references.
391
+ </environment_override>
392
+
393
+ <tool_replacements priority="0">
394
+ <critical_rule priority="0">
395
+ apply_patch/applyPatch are Codex names, but host tool names vary by version.
396
+ - Inspect the actual tool list before editing.
397
+ - If edit exists: use edit for precise in-place string replacements and hashline edits.
398
+ - If edit is absent and apply_patch exists: use apply_patch for those precise/hashline edits in this plugin.
399
+ - For diff-style or multi-line structural edits: use patch if available, otherwise use apply_patch.
400
+ - In this plugin, edit/apply_patch support hashline refs (lineRef, endLineRef, operation, content)
401
+ </critical_rule>
402
+
403
+ <critical_rule priority="0">
404
+ UPDATE_PLAN DOES NOT EXIST -> USE "todowrite" INSTEAD
405
+ - NEVER use: update_plan, updatePlan
406
+ - ALWAYS use: todowrite for ALL task/plan operations
407
+ - Use todoread to read current plan
408
+ - Before plan operations: Verify you're using "todowrite", NOT "update_plan"
409
+ </critical_rule>
410
+ </tool_replacements>
411
+
412
+ <available_tools priority="0">
413
+ File Operations:
414
+ - write - Create new files (if available)
415
+ - edit - Modify existing files with string replacement (version-dependent)
416
+ - oldString must be literal text from the current file; never pass unresolved placeholders like \${TARGET_SNIPPET}
417
+ - apply_patch - May be the edit/patch tool name in newer host builds (version-dependent)
418
+ - hashline_read - Read lines with hashline refs (L<line>#<hash>) for deterministic edits
419
+ - patch - Apply diff patches (version-dependent)
420
+ - read - Read file contents
421
+
422
+ Search/Discovery:
423
+ - grep - Search file contents
424
+ - glob - Find files by pattern
425
+ - list - List directories (if available)
426
+
427
+ Execution:
428
+ - bash - Run shell commands
429
+
430
+ Network:
431
+ - webfetch - Fetch web content
432
+
433
+ Task Management:
434
+ - todowrite - Manage tasks/plans (REPLACES update_plan)
435
+ - todoread - Read current plan
436
+ </available_tools>
437
+
438
+ <substitution_rules priority="0">
439
+ Base instruction says: You MUST use instead:
440
+ apply_patch -> patch (preferred if available), otherwise edit/apply_patch based on actual tool list
441
+ update_plan -> todowrite
442
+ read_plan -> todoread
443
+ absolute paths -> relative paths
444
+ </substitution_rules>
445
+
446
+ <verification_checklist priority="0">
447
+ Before file/plan modifications:
448
+ 1. Am I using the actual available edit tool name (edit, patch, or apply_patch)?
449
+ 2. Am I using "todowrite" NOT "update_plan"?
450
+ 3. Is this tool in the approved list above?
451
+ 4. Am I using relative paths?
452
+
453
+ If ANY answer is NO -> STOP and correct before proceeding.
454
+ </verification_checklist>
455
+
456
+ <hashline_workflow priority="0">
457
+ When hashline_read is available:
458
+ 1. call hashline_read on the file
459
+ 2. edit/apply_patch using lineRef/endLineRef + operation + content
460
+ 3. use oldString/newString only as fallback, and only with literal file text (no template placeholders)
461
+ </hashline_workflow>
462
+
463
+ <safety_rules priority="0">
464
+ - Never run destructive git commands (\`git reset --hard\`, \`git checkout --\`) unless explicitly requested by the user.
465
+ - Never call \`request_user_input\` unless collaboration mode is explicitly Plan mode.
466
+ </safety_rules>
372
467
  </user_instructions>`;
373
468
  //# sourceMappingURL=codex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../lib/prompts/codex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../lib/prompts/codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Shared, hardened fetch helpers for the GitHub-backed prompt fetchers.
3
+ *
4
+ * Both prompt sources (lib/prompts/codex.ts and lib/prompts/host-codex-prompt.ts)
5
+ * pull text over the network on a request-blocking path. These helpers add the
6
+ * guards that were missing (prompts-02/04/05/08):
7
+ * - a bounded fetch timeout via AbortSignal so a hung GitHub connection cannot
8
+ * stall the request pipeline indefinitely (prompts-02)
9
+ * - a maximum response size, checked against Content-Length and enforced while
10
+ * reading, so a pathological body cannot exhaust memory (prompts-04)
11
+ * - rejection of empty / whitespace-only 200 bodies so a bad response is not
12
+ * cached and served as "instructions" (prompts-05)
13
+ * - a User-Agent (api.github.com rejects requests without one) plus a sensible
14
+ * Accept, applied to every request (prompts-08)
15
+ */
16
+ export declare const PROMPT_FETCH_TIMEOUT_MS = 10000;
17
+ export declare const PROMPT_FETCH_MAX_BYTES = 1000000;
18
+ export declare const PROMPT_FETCH_USER_AGENT = "codex-multi-auth";
19
+ export interface PromptFetchOptions {
20
+ headers?: Record<string, string>;
21
+ timeoutMs?: number;
22
+ maxBytes?: number;
23
+ /** When true, also request GitHub's JSON API content type. */
24
+ json?: boolean;
25
+ }
26
+ /**
27
+ * Merge caller headers with the mandatory User-Agent / Accept defaults.
28
+ *
29
+ * The mandatory headers are applied AFTER the caller's so they always win: a
30
+ * caller must not be able to blank or replace `User-Agent` / `Accept` and
31
+ * bypass the hardening this helper guarantees on every prompt fetch (api.github
32
+ * .com rejects requests without a User-Agent). Caller headers are still honored
33
+ * for everything else (e.g. `If-None-Match`).
34
+ */
35
+ export declare function withPromptFetchHeaders(headers?: Record<string, string>, json?: boolean): Record<string, string>;
36
+ /**
37
+ * fetch() with a bounded timeout. Returns the Response (caller inspects status).
38
+ * Throws on timeout/network error, matching native fetch rejection semantics.
39
+ */
40
+ export declare function fetchWithTimeout(url: string, options?: PromptFetchOptions, fetchImpl?: typeof fetch): Promise<Response>;
41
+ /**
42
+ * Race a response-body read against a bounded timeout, cancelling the underlying
43
+ * stream on timeout (prompts-02).
44
+ *
45
+ * `fetchWithTimeout`'s AbortSignal only covers connect+headers and is cleared
46
+ * once the Response arrives, so a server that sends headers then stalls mid-body
47
+ * makes `response.json()` / `response.text()` hang forever on a request-blocking
48
+ * path. This races the read against a timeout AND, on timeout, calls
49
+ * `response.body.cancel()` so the stalled body stops consuming the connection
50
+ * instead of leaking until GC/socket close. Unlike `readBodyTextGuarded` it adds
51
+ * no size/Content-Length/empty checks, so it is safe for the small
52
+ * release-metadata reads that just need the hang guard. For fetch impls / mocks
53
+ * without a streamable `body`, the cancel is a no-op and the timeout still
54
+ * rejects.
55
+ */
56
+ export declare function withBodyTimeout<T>(response: Pick<Response, "body">, read: Promise<T>, timeoutMs?: number): Promise<T>;
57
+ /**
58
+ * Read a response body as text with a size ceiling, rejecting empty bodies.
59
+ *
60
+ * Checks Content-Length first (fast reject), then enforces the cap while
61
+ * streaming so a server that omits/understates the header still cannot exceed
62
+ * the limit. Throws on oversize or empty/whitespace-only content so the caller
63
+ * treats it as a fetch failure and falls back to disk/bundled content.
64
+ *
65
+ * prompts-02: the streaming read also enforces a per-chunk idle timeout. The
66
+ * fetch-level AbortSignal in `fetchWithTimeout` only covers connect+headers and
67
+ * is cleared once the Response arrives, so without this a server that sends
68
+ * headers then stalls mid-body would hang this request-blocking path forever.
69
+ * If no chunk arrives within `timeoutMs`, the read is aborted and rejected.
70
+ */
71
+ export declare function readBodyTextGuarded(response: Response, maxBytes?: number, timeoutMs?: number): Promise<string>;
72
+ //# sourceMappingURL=fetch-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-utils.d.ts","sourceRoot":"","sources":["../../../lib/prompts/fetch-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,sBAAsB,UAAY,CAAC;AAChD,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACrC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACpC,IAAI,UAAQ,GACV,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,kBAAuB,EAChC,SAAS,GAAE,OAAO,KAAa,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAYnB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAChC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,SAAS,GAAE,MAAgC,GACzC,OAAO,CAAC,CAAC,CAAC,CAqBZ;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CACxC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,GAAE,MAA+B,EACzC,SAAS,GAAE,MAAgC,GACzC,OAAO,CAAC,MAAM,CAAC,CA2DjB"}