codex-multi-auth 2.3.1 → 2.3.3

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 (341) hide show
  1. package/.codex-plugin/plugin.json +10 -10
  2. package/README.md +421 -419
  3. package/dist/lib/accounts.d.ts +14 -0
  4. package/dist/lib/accounts.d.ts.map +1 -1
  5. package/dist/lib/accounts.js +59 -4
  6. package/dist/lib/constants.d.ts +7 -0
  7. package/dist/lib/constants.d.ts.map +1 -1
  8. package/dist/lib/constants.js +7 -0
  9. package/dist/lib/forecast.d.ts.map +1 -1
  10. package/dist/lib/forecast.js +15 -6
  11. package/dist/lib/local-client-tokens.d.ts.map +1 -1
  12. package/dist/lib/local-client-tokens.js +11 -4
  13. package/dist/lib/logger.d.ts.map +1 -1
  14. package/dist/lib/logger.js +5 -0
  15. package/dist/lib/preemptive-quota-scheduler.d.ts.map +1 -1
  16. package/dist/lib/preemptive-quota-scheduler.js +29 -3
  17. package/dist/lib/refresh-lease.d.ts +1 -0
  18. package/dist/lib/refresh-lease.d.ts.map +1 -1
  19. package/dist/lib/refresh-lease.js +35 -4
  20. package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
  21. package/dist/lib/request/fetch-helpers.js +3 -2
  22. package/dist/lib/request/rate-limit-decision.d.ts.map +1 -1
  23. package/dist/lib/request/rate-limit-decision.js +7 -2
  24. package/dist/lib/request/response-handler.d.ts.map +1 -1
  25. package/dist/lib/request/response-handler.js +63 -11
  26. package/dist/lib/runtime/app-bind.d.ts +7 -0
  27. package/dist/lib/runtime/app-bind.d.ts.map +1 -1
  28. package/dist/lib/runtime/app-bind.js +46 -5
  29. package/dist/lib/runtime/config-toml.d.ts +18 -0
  30. package/dist/lib/runtime/config-toml.d.ts.map +1 -1
  31. package/dist/lib/runtime/config-toml.js +79 -8
  32. package/dist/lib/schemas.js +2 -2
  33. package/dist/lib/storage.d.ts.map +1 -1
  34. package/dist/lib/storage.js +6 -1
  35. package/node_modules/@codex-ai/plugin/dist/index.d.ts +2 -2
  36. package/node_modules/@codex-ai/plugin/dist/index.js +2 -2
  37. package/node_modules/@codex-ai/plugin/dist/tool.d.ts +42 -42
  38. package/node_modules/@codex-ai/plugin/dist/tool.js +29 -29
  39. package/node_modules/@codex-ai/plugin/package.json +9 -9
  40. package/node_modules/@codex-ai/sdk/dist/index.d.ts +4 -4
  41. package/node_modules/@codex-ai/sdk/dist/index.js +2 -2
  42. package/node_modules/@codex-ai/sdk/package.json +8 -8
  43. package/package.json +196 -196
  44. package/vendor/codex-ai-plugin/dist/index.d.ts +2 -2
  45. package/vendor/codex-ai-plugin/dist/index.js +2 -2
  46. package/vendor/codex-ai-plugin/dist/tool.d.ts +42 -42
  47. package/vendor/codex-ai-plugin/dist/tool.js +29 -29
  48. package/vendor/codex-ai-plugin/package.json +9 -9
  49. package/vendor/codex-ai-sdk/dist/index.d.ts +4 -4
  50. package/vendor/codex-ai-sdk/dist/index.js +2 -2
  51. package/vendor/codex-ai-sdk/package.json +8 -8
  52. package/dist/index.js.map +0 -1
  53. package/dist/lib/account-policy.js.map +0 -1
  54. package/dist/lib/accounts/rate-limits.js.map +0 -1
  55. package/dist/lib/accounts.js.map +0 -1
  56. package/dist/lib/audit.js.map +0 -1
  57. package/dist/lib/auth/auth.js.map +0 -1
  58. package/dist/lib/auth/browser.js.map +0 -1
  59. package/dist/lib/auth/device-auth.js.map +0 -1
  60. package/dist/lib/auth/index.js.map +0 -1
  61. package/dist/lib/auth/org-override.js.map +0 -1
  62. package/dist/lib/auth/server.js.map +0 -1
  63. package/dist/lib/auth/token-utils.js.map +0 -1
  64. package/dist/lib/auth-rate-limit.js.map +0 -1
  65. package/dist/lib/budget-guard.js.map +0 -1
  66. package/dist/lib/capability-policy.js.map +0 -1
  67. package/dist/lib/circuit-breaker.js.map +0 -1
  68. package/dist/lib/cli.js.map +0 -1
  69. package/dist/lib/codex-cli/index.js.map +0 -1
  70. package/dist/lib/codex-cli/observability.js.map +0 -1
  71. package/dist/lib/codex-cli/state.js.map +0 -1
  72. package/dist/lib/codex-cli/sync.js.map +0 -1
  73. package/dist/lib/codex-cli/writer.js.map +0 -1
  74. package/dist/lib/codex-manager/account-manager-commands.js.map +0 -1
  75. package/dist/lib/codex-manager/account-pool-write.js.map +0 -1
  76. package/dist/lib/codex-manager/backend-category-entry.js.map +0 -1
  77. package/dist/lib/codex-manager/backend-category-helpers.js.map +0 -1
  78. package/dist/lib/codex-manager/backend-category-prompt.js.map +0 -1
  79. package/dist/lib/codex-manager/backend-settings-controller.js.map +0 -1
  80. package/dist/lib/codex-manager/backend-settings-entry.js.map +0 -1
  81. package/dist/lib/codex-manager/backend-settings-helpers.js.map +0 -1
  82. package/dist/lib/codex-manager/backend-settings-prompt.js.map +0 -1
  83. package/dist/lib/codex-manager/backend-settings-schema.js.map +0 -1
  84. package/dist/lib/codex-manager/behavior-settings-panel.js.map +0 -1
  85. package/dist/lib/codex-manager/commands/account.js.map +0 -1
  86. package/dist/lib/codex-manager/commands/best.js.map +0 -1
  87. package/dist/lib/codex-manager/commands/bridge.js.map +0 -1
  88. package/dist/lib/codex-manager/commands/budget.js.map +0 -1
  89. package/dist/lib/codex-manager/commands/check.js.map +0 -1
  90. package/dist/lib/codex-manager/commands/config-explain.js.map +0 -1
  91. package/dist/lib/codex-manager/commands/debug-bundle.js.map +0 -1
  92. package/dist/lib/codex-manager/commands/forecast.js.map +0 -1
  93. package/dist/lib/codex-manager/commands/init-config.js.map +0 -1
  94. package/dist/lib/codex-manager/commands/integrations.js.map +0 -1
  95. package/dist/lib/codex-manager/commands/models.js.map +0 -1
  96. package/dist/lib/codex-manager/commands/monitor.js.map +0 -1
  97. package/dist/lib/codex-manager/commands/report.js.map +0 -1
  98. package/dist/lib/codex-manager/commands/rotation.js.map +0 -1
  99. package/dist/lib/codex-manager/commands/status.js.map +0 -1
  100. package/dist/lib/codex-manager/commands/switch.js.map +0 -1
  101. package/dist/lib/codex-manager/commands/uninstall.js.map +0 -1
  102. package/dist/lib/codex-manager/commands/unpin.js.map +0 -1
  103. package/dist/lib/codex-manager/commands/usage.js.map +0 -1
  104. package/dist/lib/codex-manager/commands/verify.js.map +0 -1
  105. package/dist/lib/codex-manager/commands/why-selected.js.map +0 -1
  106. package/dist/lib/codex-manager/commands/workspace.js.map +0 -1
  107. package/dist/lib/codex-manager/dashboard-display-panel.js.map +0 -1
  108. package/dist/lib/codex-manager/dashboard-formatters.js.map +0 -1
  109. package/dist/lib/codex-manager/dashboard-settings-controller.js.map +0 -1
  110. package/dist/lib/codex-manager/dashboard-settings-data.js.map +0 -1
  111. package/dist/lib/codex-manager/dashboard-settings-entry.js.map +0 -1
  112. package/dist/lib/codex-manager/experimental-settings-entry.js.map +0 -1
  113. package/dist/lib/codex-manager/experimental-settings-prompt.js.map +0 -1
  114. package/dist/lib/codex-manager/experimental-settings-schema.js.map +0 -1
  115. package/dist/lib/codex-manager/experimental-sync-target-entry.js.map +0 -1
  116. package/dist/lib/codex-manager/experimental-sync-target.js.map +0 -1
  117. package/dist/lib/codex-manager/forecast-report-commands.d.ts +0 -54
  118. package/dist/lib/codex-manager/forecast-report-commands.d.ts.map +0 -1
  119. package/dist/lib/codex-manager/forecast-report-commands.js +0 -443
  120. package/dist/lib/codex-manager/forecast-report-commands.js.map +0 -1
  121. package/dist/lib/codex-manager/forecast-report-shared.js.map +0 -1
  122. package/dist/lib/codex-manager/help.js.map +0 -1
  123. package/dist/lib/codex-manager/manual-callback.js.map +0 -1
  124. package/dist/lib/codex-manager/rate-limit-markers.js.map +0 -1
  125. package/dist/lib/codex-manager/repair-commands.js.map +0 -1
  126. package/dist/lib/codex-manager/settings-hub/backend.js.map +0 -1
  127. package/dist/lib/codex-manager/settings-hub/dashboard.js.map +0 -1
  128. package/dist/lib/codex-manager/settings-hub/experimental.js.map +0 -1
  129. package/dist/lib/codex-manager/settings-hub/index.js.map +0 -1
  130. package/dist/lib/codex-manager/settings-hub/shared.js.map +0 -1
  131. package/dist/lib/codex-manager/settings-hub-entry.js.map +0 -1
  132. package/dist/lib/codex-manager/settings-hub-menu.js.map +0 -1
  133. package/dist/lib/codex-manager/settings-hub-prompt.js.map +0 -1
  134. package/dist/lib/codex-manager/settings-hub.js.map +0 -1
  135. package/dist/lib/codex-manager/settings-panels.js.map +0 -1
  136. package/dist/lib/codex-manager/settings-persist-utils.js.map +0 -1
  137. package/dist/lib/codex-manager/settings-preview.js.map +0 -1
  138. package/dist/lib/codex-manager/settings-write-queue.js.map +0 -1
  139. package/dist/lib/codex-manager/statusline-order.d.ts +0 -3
  140. package/dist/lib/codex-manager/statusline-order.d.ts.map +0 -1
  141. package/dist/lib/codex-manager/statusline-order.js +0 -16
  142. package/dist/lib/codex-manager/statusline-order.js.map +0 -1
  143. package/dist/lib/codex-manager/statusline-settings-panel.js.map +0 -1
  144. package/dist/lib/codex-manager/theme-settings-panel.js.map +0 -1
  145. package/dist/lib/codex-manager/unified-settings-controller.js.map +0 -1
  146. package/dist/lib/codex-manager/unified-settings-entry.js.map +0 -1
  147. package/dist/lib/codex-manager.js.map +0 -1
  148. package/dist/lib/config.js.map +0 -1
  149. package/dist/lib/constants.js.map +0 -1
  150. package/dist/lib/context-overflow.js.map +0 -1
  151. package/dist/lib/dashboard-settings.js.map +0 -1
  152. package/dist/lib/entitlement-cache.js.map +0 -1
  153. package/dist/lib/env-parsing.js.map +0 -1
  154. package/dist/lib/errors.js.map +0 -1
  155. package/dist/lib/forecast.js.map +0 -1
  156. package/dist/lib/fs-retry.js.map +0 -1
  157. package/dist/lib/health.js.map +0 -1
  158. package/dist/lib/index.js.map +0 -1
  159. package/dist/lib/integration-generators.js.map +0 -1
  160. package/dist/lib/live-account-sync.js.map +0 -1
  161. package/dist/lib/local-bridge.js.map +0 -1
  162. package/dist/lib/local-client-tokens.js.map +0 -1
  163. package/dist/lib/logger.js.map +0 -1
  164. package/dist/lib/model-capability-matrix.js.map +0 -1
  165. package/dist/lib/named-backup-export.js.map +0 -1
  166. package/dist/lib/oc-chatgpt-import-adapter.js.map +0 -1
  167. package/dist/lib/oc-chatgpt-orchestrator.js.map +0 -1
  168. package/dist/lib/oc-chatgpt-target-detection.js.map +0 -1
  169. package/dist/lib/parallel-probe.js.map +0 -1
  170. package/dist/lib/policy/runtime-policy.js.map +0 -1
  171. package/dist/lib/preemptive-quota-scheduler.js.map +0 -1
  172. package/dist/lib/proactive-refresh.js.map +0 -1
  173. package/dist/lib/prompts/codex-host-bridge.js.map +0 -1
  174. package/dist/lib/prompts/codex.js.map +0 -1
  175. package/dist/lib/prompts/fetch-utils.js.map +0 -1
  176. package/dist/lib/prompts/host-codex-prompt.js.map +0 -1
  177. package/dist/lib/quota-cache.js.map +0 -1
  178. package/dist/lib/quota-probe.js.map +0 -1
  179. package/dist/lib/quota-readiness.js.map +0 -1
  180. package/dist/lib/recovery/constants.js.map +0 -1
  181. package/dist/lib/recovery/index.d.ts +0 -12
  182. package/dist/lib/recovery/index.d.ts.map +0 -1
  183. package/dist/lib/recovery/index.js +0 -11
  184. package/dist/lib/recovery/index.js.map +0 -1
  185. package/dist/lib/recovery/storage.js.map +0 -1
  186. package/dist/lib/recovery/types.js.map +0 -1
  187. package/dist/lib/recovery.js.map +0 -1
  188. package/dist/lib/refresh-guardian.js.map +0 -1
  189. package/dist/lib/refresh-lease.js.map +0 -1
  190. package/dist/lib/refresh-queue.js.map +0 -1
  191. package/dist/lib/request/failover-config.js.map +0 -1
  192. package/dist/lib/request/failure-policy.js.map +0 -1
  193. package/dist/lib/request/fetch-helpers.js.map +0 -1
  194. package/dist/lib/request/helpers/input-utils.js.map +0 -1
  195. package/dist/lib/request/helpers/model-map.js.map +0 -1
  196. package/dist/lib/request/helpers/tool-utils.js.map +0 -1
  197. package/dist/lib/request/index.js.map +0 -1
  198. package/dist/lib/request/rate-limit-backoff.js.map +0 -1
  199. package/dist/lib/request/request-attempt-budget.js.map +0 -1
  200. package/dist/lib/request/request-init.js.map +0 -1
  201. package/dist/lib/request/request-resilience.js.map +0 -1
  202. package/dist/lib/request/request-transformer.js.map +0 -1
  203. package/dist/lib/request/response-compaction.js.map +0 -1
  204. package/dist/lib/request/response-handler.js.map +0 -1
  205. package/dist/lib/request/response-metadata.js.map +0 -1
  206. package/dist/lib/request/stream-failover.js.map +0 -1
  207. package/dist/lib/request/wait-utils.js.map +0 -1
  208. package/dist/lib/rotation.js.map +0 -1
  209. package/dist/lib/routing-mutex.js.map +0 -1
  210. package/dist/lib/routing-profiles.js.map +0 -1
  211. package/dist/lib/runtime/account-check-helpers.js.map +0 -1
  212. package/dist/lib/runtime/account-check-types.js.map +0 -1
  213. package/dist/lib/runtime/account-check.js.map +0 -1
  214. package/dist/lib/runtime/account-health-check.d.ts +0 -8
  215. package/dist/lib/runtime/account-health-check.d.ts.map +0 -1
  216. package/dist/lib/runtime/account-health-check.js +0 -29
  217. package/dist/lib/runtime/account-health-check.js.map +0 -1
  218. package/dist/lib/runtime/account-manager-cache-entry.js.map +0 -1
  219. package/dist/lib/runtime/account-manager-cache.js.map +0 -1
  220. package/dist/lib/runtime/account-pool.js.map +0 -1
  221. package/dist/lib/runtime/account-scope.js.map +0 -1
  222. package/dist/lib/runtime/account-select-event.js.map +0 -1
  223. package/dist/lib/runtime/account-selection.js.map +0 -1
  224. package/dist/lib/runtime/account-state.js.map +0 -1
  225. package/dist/lib/runtime/account-status.js.map +0 -1
  226. package/dist/lib/runtime/account-storage-scope-entry.js.map +0 -1
  227. package/dist/lib/runtime/app-bind.js.map +0 -1
  228. package/dist/lib/runtime/auth-facade.js.map +0 -1
  229. package/dist/lib/runtime/browser-oauth-flow.js.map +0 -1
  230. package/dist/lib/runtime/capability-boost.js.map +0 -1
  231. package/dist/lib/runtime/config-toml.js.map +0 -1
  232. package/dist/lib/runtime/event-handler.js.map +0 -1
  233. package/dist/lib/runtime/flagged-verify-types.js.map +0 -1
  234. package/dist/lib/runtime/hydrate-emails.js.map +0 -1
  235. package/dist/lib/runtime/live-sync-entry.js.map +0 -1
  236. package/dist/lib/runtime/live-sync.js.map +0 -1
  237. package/dist/lib/runtime/loader-setup.js.map +0 -1
  238. package/dist/lib/runtime/login-menu-accounts.js.map +0 -1
  239. package/dist/lib/runtime/manual-oauth-flow.js.map +0 -1
  240. package/dist/lib/runtime/oauth-browser-flow.d.ts +0 -9
  241. package/dist/lib/runtime/oauth-browser-flow.d.ts.map +0 -1
  242. package/dist/lib/runtime/oauth-browser-flow.js +0 -33
  243. package/dist/lib/runtime/oauth-browser-flow.js.map +0 -1
  244. package/dist/lib/runtime/preemptive-quota.js.map +0 -1
  245. package/dist/lib/runtime/quota-headers.js.map +0 -1
  246. package/dist/lib/runtime/quota-probe.js.map +0 -1
  247. package/dist/lib/runtime/quota-settings.js.map +0 -1
  248. package/dist/lib/runtime/refresh-guardian-entry.js.map +0 -1
  249. package/dist/lib/runtime/refresh-guardian.js.map +0 -1
  250. package/dist/lib/runtime/request-init.js.map +0 -1
  251. package/dist/lib/runtime/runtime-current-account.js.map +0 -1
  252. package/dist/lib/runtime/runtime-observability.js.map +0 -1
  253. package/dist/lib/runtime/runtime-services.js.map +0 -1
  254. package/dist/lib/runtime/session-affinity-entry.js.map +0 -1
  255. package/dist/lib/runtime/session-affinity.d.ts +0 -13
  256. package/dist/lib/runtime/session-affinity.d.ts.map +0 -1
  257. package/dist/lib/runtime/session-affinity.js +0 -16
  258. package/dist/lib/runtime/session-affinity.js.map +0 -1
  259. package/dist/lib/runtime/session-recovery.js.map +0 -1
  260. package/dist/lib/runtime/status-marker.js.map +0 -1
  261. package/dist/lib/runtime/storage-scope.js.map +0 -1
  262. package/dist/lib/runtime/toast.js.map +0 -1
  263. package/dist/lib/runtime/ui-runtime-entry.js.map +0 -1
  264. package/dist/lib/runtime/ui-runtime.js.map +0 -1
  265. package/dist/lib/runtime/verify-flagged.js.map +0 -1
  266. package/dist/lib/runtime-constants.js.map +0 -1
  267. package/dist/lib/runtime-paths.js.map +0 -1
  268. package/dist/lib/runtime-rotation-proxy.js.map +0 -1
  269. package/dist/lib/schemas.js.map +0 -1
  270. package/dist/lib/session-affinity.js.map +0 -1
  271. package/dist/lib/shutdown.js.map +0 -1
  272. package/dist/lib/storage/account-clear-entry.js.map +0 -1
  273. package/dist/lib/storage/account-clear.js.map +0 -1
  274. package/dist/lib/storage/account-match-utils.js.map +0 -1
  275. package/dist/lib/storage/account-persistence.js.map +0 -1
  276. package/dist/lib/storage/account-port.js.map +0 -1
  277. package/dist/lib/storage/account-save-entry.js.map +0 -1
  278. package/dist/lib/storage/account-save.js.map +0 -1
  279. package/dist/lib/storage/account-snapshot.js.map +0 -1
  280. package/dist/lib/storage/backup-metadata-builder.js.map +0 -1
  281. package/dist/lib/storage/backup-metadata.js.map +0 -1
  282. package/dist/lib/storage/backup-paths.js.map +0 -1
  283. package/dist/lib/storage/backup-restore.js.map +0 -1
  284. package/dist/lib/storage/cache-artifacts.js.map +0 -1
  285. package/dist/lib/storage/error-hints.js.map +0 -1
  286. package/dist/lib/storage/file-paths.js.map +0 -1
  287. package/dist/lib/storage/fixture-guards.js.map +0 -1
  288. package/dist/lib/storage/flagged-entry.js.map +0 -1
  289. package/dist/lib/storage/flagged-load-entry.js.map +0 -1
  290. package/dist/lib/storage/flagged-save-entry.js.map +0 -1
  291. package/dist/lib/storage/flagged-storage-file.js.map +0 -1
  292. package/dist/lib/storage/flagged-storage-io.js.map +0 -1
  293. package/dist/lib/storage/flagged-storage.js.map +0 -1
  294. package/dist/lib/storage/gitignore.js.map +0 -1
  295. package/dist/lib/storage/hash.js.map +0 -1
  296. package/dist/lib/storage/health.js.map +0 -1
  297. package/dist/lib/storage/identity.js.map +0 -1
  298. package/dist/lib/storage/import-export.js.map +0 -1
  299. package/dist/lib/storage/metadata-section.js.map +0 -1
  300. package/dist/lib/storage/migrations.js.map +0 -1
  301. package/dist/lib/storage/named-backup-entry.js.map +0 -1
  302. package/dist/lib/storage/named-backups-entry.js.map +0 -1
  303. package/dist/lib/storage/named-backups.js.map +0 -1
  304. package/dist/lib/storage/path-state.js.map +0 -1
  305. package/dist/lib/storage/paths.js.map +0 -1
  306. package/dist/lib/storage/project-migration.js.map +0 -1
  307. package/dist/lib/storage/record-utils.js.map +0 -1
  308. package/dist/lib/storage/restore-assessment.js.map +0 -1
  309. package/dist/lib/storage/restore-backup-entry.js.map +0 -1
  310. package/dist/lib/storage/restore-metadata.js.map +0 -1
  311. package/dist/lib/storage/restore.d.ts +0 -14
  312. package/dist/lib/storage/restore.d.ts.map +0 -1
  313. package/dist/lib/storage/restore.js +0 -52
  314. package/dist/lib/storage/restore.js.map +0 -1
  315. package/dist/lib/storage/snapshot-inspectors.js.map +0 -1
  316. package/dist/lib/storage/storage-parser.js.map +0 -1
  317. package/dist/lib/storage/transactions.js.map +0 -1
  318. package/dist/lib/storage.js.map +0 -1
  319. package/dist/lib/table-formatter.js.map +0 -1
  320. package/dist/lib/tools/hashline-tools.js.map +0 -1
  321. package/dist/lib/types.js.map +0 -1
  322. package/dist/lib/ui/ansi.js.map +0 -1
  323. package/dist/lib/ui/auth-menu.js.map +0 -1
  324. package/dist/lib/ui/confirm.js.map +0 -1
  325. package/dist/lib/ui/copy.d.ts +0 -159
  326. package/dist/lib/ui/copy.d.ts.map +0 -1
  327. package/dist/lib/ui/copy.js +0 -164
  328. package/dist/lib/ui/copy.js.map +0 -1
  329. package/dist/lib/ui/display-width.js.map +0 -1
  330. package/dist/lib/ui/format.js.map +0 -1
  331. package/dist/lib/ui/runtime.js.map +0 -1
  332. package/dist/lib/ui/select.js.map +0 -1
  333. package/dist/lib/ui/theme.js.map +0 -1
  334. package/dist/lib/unified-settings.js.map +0 -1
  335. package/dist/lib/update-notice.js.map +0 -1
  336. package/dist/lib/usage/index.js.map +0 -1
  337. package/dist/lib/usage/ledger.js.map +0 -1
  338. package/dist/lib/usage/pricing.js.map +0 -1
  339. package/dist/lib/usage/redaction.js.map +0 -1
  340. package/dist/lib/usage/types.js.map +0 -1
  341. package/dist/lib/utils.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { createLogger, logRequest, LOGGING_ENABLED } from "../logger.js";
2
- import { PLUGIN_NAME } from "../constants.js";
2
+ import { HTTP_STATUS, PLUGIN_NAME } from "../constants.js";
3
3
  import { isRecord } from "../utils.js";
4
4
  const log = createLogger("response-handler");
5
5
  const MAX_SSE_SIZE = 10 * 1024 * 1024; // 10MB limit to prevent memory exhaustion
@@ -456,7 +456,23 @@ function maybeCaptureResponseEvent(state, data, onResponseId) {
456
456
  state.encounteredError = true;
457
457
  return;
458
458
  }
459
- if (data.type === "response.done" || data.type === "response.completed") {
459
+ // response.failed is a genuine terminal failure: the turn did not produce a
460
+ // usable result even though HTTP opened 200. Treat it as an error so the
461
+ // stream is not misclassified as a successful response and misattributed as
462
+ // an account success (stress audit H7).
463
+ if (data.type === "response.failed") {
464
+ log.warn("SSE terminal failure event received", { type: data.type });
465
+ state.encounteredError = true;
466
+ return;
467
+ }
468
+ // response.completed / response.done / response.incomplete are all terminal
469
+ // envelopes that carry a final response object. response.incomplete (e.g.
470
+ // hitting max_output_tokens or a content filter) is a NORMAL early stop whose
471
+ // partial output is the answer — it must be delivered to the client and
472
+ // counts as a healthy account, not a failure (re-audit correction to H7).
473
+ if (data.type === "response.done" ||
474
+ data.type === "response.completed" ||
475
+ data.type === "response.incomplete") {
460
476
  if (isRecord(data.response)) {
461
477
  state.finalResponse = { ...data.response };
462
478
  }
@@ -518,15 +534,19 @@ function parseSseStream(sseText, onResponseId) {
518
534
  let firstMalformedSample = null;
519
535
  for (const line of lines) {
520
536
  const trimmedLine = line.trim();
521
- if (trimmedLine.startsWith("data: ")) {
522
- const payload = trimmedLine.substring(6).trim();
537
+ // Accept "data:" with or without the optional trailing space. The SSE
538
+ // spec allows "data:value"; requiring the space silently dropped every
539
+ // event on an upstream/proxy formatting change (stress audit M1).
540
+ if (trimmedLine.startsWith("data:")) {
541
+ const payload = trimmedLine.substring(5).trim();
523
542
  if (!payload || payload === "[DONE]")
524
543
  continue;
525
544
  try {
526
545
  const data = JSON.parse(payload);
527
546
  maybeCaptureResponseEvent(state, data, onResponseId);
528
- if (state.encounteredError)
529
- return null;
547
+ if (state.encounteredError) {
548
+ return { finalResponse: null, encounteredError: true };
549
+ }
530
550
  }
531
551
  catch (error) {
532
552
  // AUDIT-H9 / H-03: previously these malformed chunks were
@@ -553,7 +573,10 @@ function parseSseStream(sseText, onResponseId) {
553
573
  firstSample: firstMalformedSample,
554
574
  });
555
575
  }
556
- return finalizeParsedResponse(state);
576
+ return {
577
+ finalResponse: finalizeParsedResponse(state),
578
+ encounteredError: state.encounteredError,
579
+ };
557
580
  }
558
581
  /**
559
582
  * Convert SSE stream response to JSON for generateText()
@@ -597,13 +620,42 @@ export async function convertSseToJson(response, headers, options) {
597
620
  logRequest("stream-full", { fullContent: fullText });
598
621
  }
599
622
  // Parse SSE events to extract the final response
600
- const finalResponse = parseSseStream(fullText, options?.onResponseId);
623
+ const { finalResponse, encounteredError } = parseSseStream(fullText, options?.onResponseId);
624
+ // A terminal failure event (mid-stream `error`, `response.failed`, or
625
+ // `response.incomplete`) means the upstream turn failed even though HTTP
626
+ // opened 200. Returning the raw SSE at 200 here makes the proxy record an
627
+ // account success and skip rotation/retry (stress audit H6+H7). Synthesize
628
+ // a non-2xx so the caller routes to failure. (A stream that simply yields
629
+ // no final response WITHOUT an error — empty/truncated — is left as the
630
+ // original passthrough below so the empty-response retry path still runs.)
631
+ if (encounteredError) {
632
+ log.warn("SSE stream ended with a terminal failure event");
633
+ logRequest("stream-error", {
634
+ error: "SSE stream terminated with an error/failed/incomplete event",
635
+ });
636
+ const upstreamFailed = typeof response.status === "number" && response.status >= 400;
637
+ const status = upstreamFailed ? response.status : HTTP_STATUS.BAD_GATEWAY;
638
+ const errorHeaders = new Headers(headers);
639
+ errorHeaders.set("content-type", "application/json; charset=utf-8");
640
+ return new Response(JSON.stringify({
641
+ error: {
642
+ message: "Upstream SSE stream terminated with a failure event",
643
+ type: "upstream_stream_error",
644
+ code: "sse_terminal_error",
645
+ },
646
+ }), {
647
+ status,
648
+ statusText: upstreamFailed ? response.statusText : "Bad Gateway",
649
+ headers: errorHeaders,
650
+ });
651
+ }
601
652
  if (!finalResponse) {
602
653
  log.warn("Could not find final response in SSE stream");
603
654
  logRequest("stream-error", {
604
655
  error: "No terminal response event found in SSE stream",
605
656
  });
606
- // Return original stream if we can't parse
657
+ // Return original stream if we can't parse (no error event, just no
658
+ // terminal response). Preserves the empty-response retry path.
607
659
  return new Response(fullText, {
608
660
  status: response.status,
609
661
  statusText: response.statusText,
@@ -650,9 +702,9 @@ function createResponseIdCapturingStream(body, onResponseId) {
650
702
  }
651
703
  for (const rawLine of lines) {
652
704
  const trimmedLine = rawLine.trim();
653
- if (!trimmedLine.startsWith("data: "))
705
+ if (!trimmedLine.startsWith("data:"))
654
706
  continue;
655
- const payload = trimmedLine.slice(6).trim();
707
+ const payload = trimmedLine.slice(5).trim();
656
708
  if (!payload || payload === "[DONE]")
657
709
  continue;
658
710
  try {
@@ -44,6 +44,13 @@ export interface AppBindRouterStatus {
44
44
  export interface AppBindStatus {
45
45
  bound: boolean;
46
46
  running: boolean;
47
+ /**
48
+ * True when config.toml is bound to the runtime proxy but the app-bind state
49
+ * file is gone (orphaned bind, #614). In this case `bound` is also true and
50
+ * `state` is null — the config needs `unbind-app` to recover even though the
51
+ * normal state-file tracking is missing.
52
+ */
53
+ unmanagedBind: boolean;
47
54
  state: AppBindState | null;
48
55
  router: AppBindRouterStatus | null;
49
56
  paths: AppBindPaths;
@@ -1 +1 @@
1
- {"version":3,"file":"app-bind.d.ts","sourceRoot":"","sources":["../../../lib/runtime/app-bind.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-bind.d.ts","sourceRoot":"","sources":["../../../lib/runtime/app-bind.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ import process from "node:process";
8
8
  import { fileURLToPath } from "node:url";
9
9
  import { withFileOperationRetry } from "../fs-retry.js";
10
10
  import { getCodexMultiAuthDir } from "../runtime-paths.js";
11
- import { restoreConfigTomlFromRuntimeRotationProvider, rewriteConfigTomlForRuntimeRotationProvider, } from "./config-toml.js";
11
+ import { configHasRuntimeRotationProvider, restoreConfigTomlFromRuntimeRotationProvider, restoreConfigTomlFromRuntimeRotationProviderWithoutBackup, rewriteConfigTomlForRuntimeRotationProvider, } from "./config-toml.js";
12
12
  const APP_BIND_DIR_NAME = "app-bind";
13
13
  const APP_BIND_STATE_FILE = "runtime-rotation-app-bind.json";
14
14
  const APP_BIND_BACKUP_FILE = "codex-config-backup.json";
@@ -464,9 +464,19 @@ export async function getAppBindStatus(options = {}) {
464
464
  const paths = resolveAppBindPaths(options);
465
465
  const state = await readAppBindState(paths.statePath);
466
466
  const router = await readRouterStatus(paths.statusPath);
467
+ // When no state file is present, the bind may still be live in config.toml
468
+ // (orphaned bind, #614). Detect that from the config directly so status and
469
+ // downstream callers don't report a bound config as "not configured".
470
+ let unmanagedBind = false;
471
+ if (state === null) {
472
+ const current = await readConfigIfExists(paths.configPath);
473
+ unmanagedBind =
474
+ current.existed && configHasRuntimeRotationProvider(current.content);
475
+ }
467
476
  return {
468
- bound: state !== null,
477
+ bound: state !== null || unmanagedBind,
469
478
  running: router !== null && router.state === "running" && isProcessAlive(router.pid),
479
+ unmanagedBind,
470
480
  state,
471
481
  router,
472
482
  paths,
@@ -587,6 +597,7 @@ async function unbindCodexAppRuntimeRotationLocked(options, paths) {
587
597
  await removeAppBindStartup(state);
588
598
  }
589
599
  const backup = await readAppBindBackup(paths.backupPath);
600
+ let selfHealed = false;
590
601
  if (backup) {
591
602
  const current = await readConfigIfExists(backup.configPath);
592
603
  if (state && current.existed && sha256(current.content) !== state.boundConfigHash) {
@@ -606,6 +617,18 @@ async function unbindCodexAppRuntimeRotationLocked(options, paths) {
606
617
  await atomicWriteFile(state.configPath, restoreConfigTomlFromAppBind(current.content, ""));
607
618
  }
608
619
  }
620
+ else {
621
+ // Orphaned-bind recovery (#614): no backup and no state file, but the
622
+ // config may still be bound to the runtime proxy (e.g. the state/backup
623
+ // were lost while config.toml stayed rewritten). The state-file checks
624
+ // above can't see this, so consult the config directly and self-heal it
625
+ // back to a working provider when it is bound.
626
+ const current = await readConfigIfExists(paths.configPath);
627
+ if (current.existed && configHasRuntimeRotationProvider(current.content)) {
628
+ await atomicWriteFile(paths.configPath, restoreConfigTomlFromRuntimeRotationProviderWithoutBackup(current.content));
629
+ selfHealed = true;
630
+ }
631
+ }
609
632
  for (const candidate of [
610
633
  paths.statePath,
611
634
  paths.backupPath,
@@ -619,14 +642,32 @@ async function unbindCodexAppRuntimeRotationLocked(options, paths) {
619
642
  }
620
643
  }
621
644
  const status = await getAppBindStatus(options);
645
+ let message;
646
+ if (backup) {
647
+ message = `Unbound Codex app config ${backup.configPath}`;
648
+ }
649
+ else if (selfHealed) {
650
+ message = `Restored Codex app config ${paths.configPath} from an orphaned runtime-proxy bind (no backup was present)`;
651
+ }
652
+ else {
653
+ message = "Codex app bind was not configured";
654
+ }
622
655
  return {
623
656
  status,
624
- message: backup
625
- ? `Unbound Codex app config ${backup.configPath}`
626
- : "Codex app bind was not configured",
657
+ message,
627
658
  };
628
659
  }
629
660
  export function formatAppBindStatus(status) {
661
+ if (status.unmanagedBind && !status.state) {
662
+ return [
663
+ `Codex app bind: bound but unmanaged (config=${status.paths.configPath} points at the runtime proxy, but no app-bind state/backup is present)`,
664
+ [
665
+ "Run `codex-multi-auth rotation unbind-app` to restore the original",
666
+ "Codex provider/config. This recovers the orphaned bind even though no",
667
+ "backup was saved (#614).",
668
+ ].join(" "),
669
+ ].join("\n");
670
+ }
630
671
  if (!status.bound || !status.state)
631
672
  return "Codex app bind: not configured";
632
673
  const parts = [
@@ -3,4 +3,22 @@ export declare function restoreTopLevelModelProvider(currentConfig: string, orig
3
3
  export declare function restoreTopLevelResponseStorage(currentConfig: string, originalConfig: string): string;
4
4
  export declare function rewriteConfigTomlForRuntimeRotationProvider(rawConfig: string, baseUrl: string, clientApiKey?: string): string;
5
5
  export declare function restoreConfigTomlFromRuntimeRotationProvider(currentConfig: string, originalConfig: string): string;
6
+ /**
7
+ * Detects whether a config.toml is currently bound to the runtime rotation
8
+ * proxy — either the top-level `model_provider` points at the proxy id, or the
9
+ * proxy `[model_providers.<id>]` block is present. Used to recover an orphaned
10
+ * bind whose app-bind state/backup files were lost: in that situation the
11
+ * state-file-based status check reports "not configured" even though the config
12
+ * is still bound, so unbind/status must consult the config itself.
13
+ */
14
+ export declare function configHasRuntimeRotationProvider(rawConfig: string): boolean;
15
+ /**
16
+ * Restores a bound config when no backup of the user's original config exists
17
+ * (the orphaned-bind recovery path). Strips the proxy provider block and any
18
+ * bind-written top-level lines, and — because there is no original
19
+ * `model_provider` line to bring back — falls back to `defaultProvider`
20
+ * (Codex's native `"openai"`) so the config is left on a working provider
21
+ * rather than the dangling proxy id.
22
+ */
23
+ export declare function restoreConfigTomlFromRuntimeRotationProviderWithoutBackup(currentConfig: string, defaultProvider?: string): string;
6
24
  //# sourceMappingURL=config-toml.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-toml.d.ts","sourceRoot":"","sources":["../../../lib/runtime/config-toml.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAqBvD;AA4FD,wBAAgB,4BAA4B,CAC3C,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACpB,MAAM,CAiCR;AAED,wBAAgB,8BAA8B,CAC7C,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACpB,MAAM,CAkDR;AA2BD,wBAAgB,2CAA2C,CAC1D,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,YAAY,SAAK,GACf,MAAM,CAkBR;AAED,wBAAgB,4CAA4C,CAC3D,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACpB,MAAM,CAYR"}
1
+ {"version":3,"file":"config-toml.d.ts","sourceRoot":"","sources":["../../../lib/runtime/config-toml.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAqBvD;AA4FD,wBAAgB,4BAA4B,CAC3C,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACpB,MAAM,CAiDR;AAED,wBAAgB,8BAA8B,CAC7C,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACpB,MAAM,CAkDR;AA2BD,wBAAgB,2CAA2C,CAC1D,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,YAAY,SAAK,GACf,MAAM,CAkBR;AAED,wBAAgB,4CAA4C,CAC3D,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACpB,MAAM,CAYR;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAoB3E;AAED;;;;;;;GAOG;AACH,wBAAgB,yDAAyD,CACxE,aAAa,EAAE,MAAM,EACrB,eAAe,SAAW,GACxB,MAAM,CAkBR"}
@@ -121,14 +121,32 @@ export function restoreTopLevelModelProvider(currentConfig, originalConfig) {
121
121
  output.push(line);
122
122
  }
123
123
  if (!handled && originalLine) {
124
- // Splice the restored line into the root table — appending at tail
125
- // would land it inside whatever section appears last in `output`.
126
- const firstSectionIdx = output.findIndex((line) => readTomlTableName(line) !== null);
127
- if (firstSectionIdx === -1) {
128
- output.push(originalLine);
129
- }
130
- else {
131
- output.splice(firstSectionIdx, 0, originalLine);
124
+ // Only splice the original line back when the current config has no
125
+ // top-level model_provider at all (bind stripped it). If a non-proxy
126
+ // top-level model_provider already exists — e.g. a half-orphaned config
127
+ // where the proxy block is present but the provider line already points
128
+ // elsewhere — inserting another line would create a duplicate top-level
129
+ // key and produce invalid TOML. In that case the existing line is
130
+ // already correct, so leave it untouched.
131
+ const hasTopLevelModelProvider = (() => {
132
+ for (const line of output) {
133
+ if (readTomlTableName(line) !== null)
134
+ return false;
135
+ if (/^\s*model_provider\s*=/.test(line))
136
+ return true;
137
+ }
138
+ return false;
139
+ })();
140
+ if (!hasTopLevelModelProvider) {
141
+ // Splice the restored line into the root table — appending at tail
142
+ // would land it inside whatever section appears last in `output`.
143
+ const firstSectionIdx = output.findIndex((line) => readTomlTableName(line) !== null);
144
+ if (firstSectionIdx === -1) {
145
+ output.push(originalLine);
146
+ }
147
+ else {
148
+ output.splice(firstSectionIdx, 0, originalLine);
149
+ }
132
150
  }
133
151
  }
134
152
  return output.join(lineEnding);
@@ -204,3 +222,56 @@ export function restoreConfigTomlFromRuntimeRotationProvider(currentConfig, orig
204
222
  const withResponseStorage = restoreTopLevelResponseStorage(withoutProvider, originalConfig);
205
223
  return ensureTomlTrailingNewline(restoreTopLevelModelProvider(withResponseStorage, originalConfig).replace(/[\r\n]*$/, ""));
206
224
  }
225
+ /**
226
+ * Detects whether a config.toml is currently bound to the runtime rotation
227
+ * proxy — either the top-level `model_provider` points at the proxy id, or the
228
+ * proxy `[model_providers.<id>]` block is present. Used to recover an orphaned
229
+ * bind whose app-bind state/backup files were lost: in that situation the
230
+ * state-file-based status check reports "not configured" even though the config
231
+ * is still bound, so unbind/status must consult the config itself.
232
+ */
233
+ export function configHasRuntimeRotationProvider(rawConfig) {
234
+ if (rawConfig.length === 0)
235
+ return false;
236
+ const providerTable = `model_providers.${RUNTIME_ROTATION_PROXY_PROVIDER_ID}`;
237
+ let inTopLevel = true;
238
+ for (const line of rawConfig.split(/\r?\n/)) {
239
+ const tableName = readTomlTableName(line);
240
+ if (tableName !== null) {
241
+ if (tableName === providerTable)
242
+ return true;
243
+ inTopLevel = false;
244
+ continue;
245
+ }
246
+ if (inTopLevel &&
247
+ /^\s*model_provider\s*=/.test(line) &&
248
+ line.includes(RUNTIME_ROTATION_PROXY_PROVIDER_ID)) {
249
+ return true;
250
+ }
251
+ }
252
+ return false;
253
+ }
254
+ /**
255
+ * Restores a bound config when no backup of the user's original config exists
256
+ * (the orphaned-bind recovery path). Strips the proxy provider block and any
257
+ * bind-written top-level lines, and — because there is no original
258
+ * `model_provider` line to bring back — falls back to `defaultProvider`
259
+ * (Codex's native `"openai"`) so the config is left on a working provider
260
+ * rather than the dangling proxy id.
261
+ */
262
+ export function restoreConfigTomlFromRuntimeRotationProviderWithoutBackup(currentConfig, defaultProvider = "openai") {
263
+ const lineEnding = currentConfig.includes("\r\n") ? "\r\n" : "\n";
264
+ // Synthesize a minimal "original" config carrying only the default
265
+ // top-level model_provider, so the shared restore path rewrites the proxy
266
+ // line back to a usable provider instead of leaving it dangling.
267
+ const syntheticOriginal = `model_provider = ${tomlStringLiteral(defaultProvider)}${lineEnding}`;
268
+ const restored = restoreConfigTomlFromRuntimeRotationProvider(currentConfig, syntheticOriginal);
269
+ // Normalize line endings to match the input config. The shared restore path
270
+ // derives its EOL from intermediate state, which can collapse to "\n" when
271
+ // the bound config was almost entirely proxy content; pin it back to the
272
+ // original style so a CRLF (Windows-authored) config stays CRLF.
273
+ if (lineEnding === "\r\n") {
274
+ return restored.replace(/\r?\n/g, "\r\n");
275
+ }
276
+ return restored.replace(/\r\n/g, "\n");
277
+ }
@@ -274,7 +274,7 @@ export const TokenSuccessSchema = z.object({
274
274
  type: z.literal("success"),
275
275
  access: z.string().min(1),
276
276
  refresh: z.string().min(1),
277
- expires: z.number(),
277
+ expires: z.number().int().positive(),
278
278
  idToken: z.string().optional(),
279
279
  multiAccount: z.boolean().optional(),
280
280
  });
@@ -303,7 +303,7 @@ export const TokenResultSchema = z.discriminatedUnion("type", [
303
303
  export const OAuthTokenResponseSchema = z.object({
304
304
  access_token: z.string().min(1),
305
305
  refresh_token: z.string().optional(),
306
- expires_in: z.number(),
306
+ expires_in: z.number().int().positive(),
307
307
  id_token: z.string().optional(),
308
308
  token_type: z.string().optional(),
309
309
  scope: z.string().optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../lib/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../lib/storage.ts"],"names":[],"mappings":"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"}
@@ -814,7 +814,12 @@ export function normalizeAccountStorage(data) {
814
814
  const baseStorage = fromVersion === 1
815
815
  ? migrateV1ToV3(data)
816
816
  : data;
817
- const validAccounts = rawAccounts.filter((account) => isRecord(account) &&
817
+ // Build from baseStorage.accounts (the migrated V3 shape), NOT the raw V1
818
+ // objects. Otherwise a V1->V3 upgrade discards migrateV1ToV3's per-account
819
+ // transforms — most importantly the scalar `rateLimitResetTime` -> map
820
+ // `rateLimitResetTimes` conversion — so a rate-limited V1 account would be
821
+ // treated as immediately available on upgrade and burst 429s (stress audit M3).
822
+ const validAccounts = baseStorage.accounts.filter((account) => isRecord(account) &&
818
823
  typeof account.refreshToken === "string" &&
819
824
  !!account.refreshToken.trim());
820
825
  const deduplicatedAccounts = deduplicateAccounts(validAccounts);
@@ -1,2 +1,2 @@
1
- export type PluginInput = any;
2
- export type Plugin = any;
1
+ export type PluginInput = any;
2
+ export type Plugin = any;
@@ -1,2 +1,2 @@
1
- export {};
2
-
1
+ export {};
2
+
@@ -1,42 +1,42 @@
1
- export interface ToolContext {
2
- [key: string]: any;
3
- directory: string;
4
- worktree: string;
5
- ask: (request: any) => Promise<any> | any;
6
- }
7
-
8
- export interface ToolDefinition<TArgs = any, TResult = any> {
9
- description?: string;
10
- args?: Record<string, any>;
11
- parameters?: unknown;
12
- execute: (args: TArgs, context: ToolContext) => Promise<TResult> | TResult;
13
- [key: string]: any;
14
- }
15
-
16
- export interface SchemaNode {
17
- optional: () => SchemaNode;
18
- describe: (_text: string) => SchemaNode;
19
- min: (_value: number) => SchemaNode;
20
- max: (_value: number) => SchemaNode;
21
- default: (_value: unknown) => SchemaNode;
22
- int: () => SchemaNode;
23
- array: (_node?: unknown) => SchemaNode;
24
- [key: string]: any;
25
- }
26
-
27
- export interface ToolFactory {
28
- <TArgs = any, TResult = any>(definition: ToolDefinition<TArgs, TResult>): ToolDefinition<TArgs, TResult>;
29
- schema: {
30
- string: () => SchemaNode;
31
- number: () => SchemaNode;
32
- boolean: () => SchemaNode;
33
- object: (shape: Record<string, unknown>) => SchemaNode;
34
- enum: (values: readonly unknown[]) => SchemaNode;
35
- literal: (value: unknown) => SchemaNode;
36
- array: (node: unknown) => SchemaNode;
37
- any: () => SchemaNode;
38
- unknown: () => SchemaNode;
39
- };
40
- }
41
-
42
- export declare const tool: ToolFactory;
1
+ export interface ToolContext {
2
+ [key: string]: any;
3
+ directory: string;
4
+ worktree: string;
5
+ ask: (request: any) => Promise<any> | any;
6
+ }
7
+
8
+ export interface ToolDefinition<TArgs = any, TResult = any> {
9
+ description?: string;
10
+ args?: Record<string, any>;
11
+ parameters?: unknown;
12
+ execute: (args: TArgs, context: ToolContext) => Promise<TResult> | TResult;
13
+ [key: string]: any;
14
+ }
15
+
16
+ export interface SchemaNode {
17
+ optional: () => SchemaNode;
18
+ describe: (_text: string) => SchemaNode;
19
+ min: (_value: number) => SchemaNode;
20
+ max: (_value: number) => SchemaNode;
21
+ default: (_value: unknown) => SchemaNode;
22
+ int: () => SchemaNode;
23
+ array: (_node?: unknown) => SchemaNode;
24
+ [key: string]: any;
25
+ }
26
+
27
+ export interface ToolFactory {
28
+ <TArgs = any, TResult = any>(definition: ToolDefinition<TArgs, TResult>): ToolDefinition<TArgs, TResult>;
29
+ schema: {
30
+ string: () => SchemaNode;
31
+ number: () => SchemaNode;
32
+ boolean: () => SchemaNode;
33
+ object: (shape: Record<string, unknown>) => SchemaNode;
34
+ enum: (values: readonly unknown[]) => SchemaNode;
35
+ literal: (value: unknown) => SchemaNode;
36
+ array: (node: unknown) => SchemaNode;
37
+ any: () => SchemaNode;
38
+ unknown: () => SchemaNode;
39
+ };
40
+ }
41
+
42
+ export declare const tool: ToolFactory;
@@ -1,29 +1,29 @@
1
- const chain = {
2
- optional() { return this; },
3
- describe() { return this; },
4
- min() { return this; },
5
- max() { return this; },
6
- default() { return this; },
7
- int() { return this; },
8
- array() { return this; },
9
- };
10
-
11
- function node() {
12
- return Object.create(chain);
13
- }
14
-
15
- export function tool(definition) {
16
- return definition;
17
- }
18
-
19
- tool.schema = {
20
- string: () => node(),
21
- number: () => node(),
22
- boolean: () => node(),
23
- object: () => node(),
24
- enum: () => node(),
25
- literal: () => node(),
26
- array: () => node(),
27
- any: () => node(),
28
- unknown: () => node(),
29
- };
1
+ const chain = {
2
+ optional() { return this; },
3
+ describe() { return this; },
4
+ min() { return this; },
5
+ max() { return this; },
6
+ default() { return this; },
7
+ int() { return this; },
8
+ array() { return this; },
9
+ };
10
+
11
+ function node() {
12
+ return Object.create(chain);
13
+ }
14
+
15
+ export function tool(definition) {
16
+ return definition;
17
+ }
18
+
19
+ tool.schema = {
20
+ string: () => node(),
21
+ number: () => node(),
22
+ boolean: () => node(),
23
+ object: () => node(),
24
+ enum: () => node(),
25
+ literal: () => node(),
26
+ array: () => node(),
27
+ any: () => node(),
28
+ unknown: () => node(),
29
+ };
@@ -1,9 +1,9 @@
1
- {
2
- "name": "@codex-ai/plugin",
3
- "version": "1.2.10-codex.1",
4
- "type": "module",
5
- "exports": {
6
- ".": { "import": "./dist/index.js", "types": "./dist/index.d.ts" },
7
- "./tool": { "import": "./dist/tool.js", "types": "./dist/tool.d.ts" }
8
- }
9
- }
1
+ {
2
+ "name": "@codex-ai/plugin",
3
+ "version": "1.2.10-codex.1",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": { "import": "./dist/index.js", "types": "./dist/index.d.ts" },
7
+ "./tool": { "import": "./dist/tool.js", "types": "./dist/tool.d.ts" }
8
+ }
9
+ }
@@ -1,4 +1,4 @@
1
- export type Auth = any;
2
- export type Provider = any;
3
- export type Model = any;
4
- export type CodexClient = any;
1
+ export type Auth = any;
2
+ export type Provider = any;
3
+ export type Model = any;
4
+ export type CodexClient = any;
@@ -1,2 +1,2 @@
1
- export {};
2
-
1
+ export {};
2
+
@@ -1,8 +1,8 @@
1
- {
2
- "name": "@codex-ai/sdk",
3
- "version": "1.2.10-codex.1",
4
- "type": "module",
5
- "exports": {
6
- ".": { "import": "./dist/index.js", "types": "./dist/index.d.ts" }
7
- }
8
- }
1
+ {
2
+ "name": "@codex-ai/sdk",
3
+ "version": "1.2.10-codex.1",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": { "import": "./dist/index.js", "types": "./dist/index.d.ts" }
7
+ }
8
+ }