@terminai/core 0.21.0 → 0.25.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 (303) hide show
  1. package/dist/docs/assets/image.png +0 -0
  2. package/dist/src/audit/redaction.js +24 -0
  3. package/dist/src/audit/redaction.js.map +1 -1
  4. package/dist/src/audit/redaction.test.d.ts +7 -0
  5. package/dist/src/audit/redaction.test.js +45 -0
  6. package/dist/src/audit/redaction.test.js.map +1 -0
  7. package/dist/src/auth/geminiAuthStatus.js +1 -1
  8. package/dist/src/auth/geminiAuthStatus.js.map +1 -1
  9. package/dist/src/auth/geminiAuthStatus.test.js +1 -1
  10. package/dist/src/auth/geminiAuthStatus.test.js.map +1 -1
  11. package/dist/src/auth/providerRegistry.js +20 -0
  12. package/dist/src/auth/providerRegistry.js.map +1 -1
  13. package/dist/src/auth/wizardSettings.d.ts +5 -0
  14. package/dist/src/auth/wizardSettings.js +48 -1
  15. package/dist/src/auth/wizardSettings.js.map +1 -1
  16. package/dist/src/auth/wizardSettings.test.js +30 -2
  17. package/dist/src/auth/wizardSettings.test.js.map +1 -1
  18. package/dist/src/auth/wizardState.d.ts +1 -1
  19. package/dist/src/auth/wizardState.js +6 -0
  20. package/dist/src/auth/wizardState.js.map +1 -1
  21. package/dist/src/auth/wizardState.test.js +23 -0
  22. package/dist/src/auth/wizardState.test.js.map +1 -1
  23. package/dist/src/availability/policyHelpers.test.js +4 -4
  24. package/dist/src/availability/policyHelpers.test.js.map +1 -1
  25. package/dist/src/brain/__tests__/environmentDetector.test.js +2 -1
  26. package/dist/src/brain/__tests__/environmentDetector.test.js.map +1 -1
  27. package/dist/src/brain/__tests__/orchestratorFlag.test.d.ts +7 -0
  28. package/dist/src/brain/__tests__/orchestratorFlag.test.js +47 -0
  29. package/dist/src/brain/__tests__/orchestratorFlag.test.js.map +1 -0
  30. package/dist/src/brain/__tests__/orchestratorRecovery.test.d.ts +7 -0
  31. package/dist/src/brain/__tests__/orchestratorRecovery.test.js +85 -0
  32. package/dist/src/brain/__tests__/orchestratorRecovery.test.js.map +1 -0
  33. package/dist/src/brain/__tests__/thinkingOrchestrator.test.js +1 -0
  34. package/dist/src/brain/__tests__/thinkingOrchestrator.test.js.map +1 -1
  35. package/dist/src/brain/__tests__/toolIntegration.test.d.ts +7 -0
  36. package/dist/src/brain/__tests__/toolIntegration.test.js +154 -0
  37. package/dist/src/brain/__tests__/toolIntegration.test.js.map +1 -0
  38. package/dist/src/brain/advisors/codeGenerator.js +3 -2
  39. package/dist/src/brain/advisors/codeGenerator.js.map +1 -1
  40. package/dist/src/brain/advisors/depScanner.js +3 -2
  41. package/dist/src/brain/advisors/depScanner.js.map +1 -1
  42. package/dist/src/brain/advisors/enumerator.js +3 -2
  43. package/dist/src/brain/advisors/enumerator.js.map +1 -1
  44. package/dist/src/brain/advisors/fallbackChain.js +3 -2
  45. package/dist/src/brain/advisors/fallbackChain.js.map +1 -1
  46. package/dist/src/brain/advisors/patternMatcher.js +3 -2
  47. package/dist/src/brain/advisors/patternMatcher.js.map +1 -1
  48. package/dist/src/brain/consensus.js +2 -1
  49. package/dist/src/brain/consensus.js.map +1 -1
  50. package/dist/src/brain/environmentDetector.d.ts +1 -0
  51. package/dist/src/brain/environmentDetector.js +35 -20
  52. package/dist/src/brain/environmentDetector.js.map +1 -1
  53. package/dist/src/brain/pacLoop.js +2 -1
  54. package/dist/src/brain/pacLoop.js.map +1 -1
  55. package/dist/src/brain/riskAssessor.d.ts +6 -2
  56. package/dist/src/brain/riskAssessor.js +7 -4
  57. package/dist/src/brain/riskAssessor.js.map +1 -1
  58. package/dist/src/brain/stepBackEvaluator.js +2 -1
  59. package/dist/src/brain/stepBackEvaluator.js.map +1 -1
  60. package/dist/src/brain/thinkingOrchestrator.d.ts +9 -1
  61. package/dist/src/brain/thinkingOrchestrator.js +47 -1
  62. package/dist/src/brain/thinkingOrchestrator.js.map +1 -1
  63. package/dist/src/brain/toolIntegration.d.ts +51 -0
  64. package/dist/src/brain/toolIntegration.js +202 -0
  65. package/dist/src/brain/toolIntegration.js.map +1 -0
  66. package/dist/src/code_assist/oauth2.begin.test.js +4 -1
  67. package/dist/src/code_assist/oauth2.begin.test.js.map +1 -1
  68. package/dist/src/code_assist/oauth2.d.ts +1 -1
  69. package/dist/src/code_assist/oauth2.js +9 -13
  70. package/dist/src/code_assist/oauth2.js.map +1 -1
  71. package/dist/src/code_assist/oauth2.test.js +69 -41
  72. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  73. package/dist/src/commands/init.js +5 -0
  74. package/dist/src/commands/init.js.map +1 -1
  75. package/dist/src/computer/PersistentShell.d.ts +5 -0
  76. package/dist/src/computer/PersistentShell.js +21 -2
  77. package/dist/src/computer/PersistentShell.js.map +1 -1
  78. package/dist/src/computer/PersistentShell.test.js +23 -11
  79. package/dist/src/computer/PersistentShell.test.js.map +1 -1
  80. package/dist/src/config/builder.js +78 -5
  81. package/dist/src/config/builder.js.map +1 -1
  82. package/dist/src/config/config.d.ts +12 -1
  83. package/dist/src/config/config.js +64 -0
  84. package/dist/src/config/config.js.map +1 -1
  85. package/dist/src/config/config.test.js +39 -0
  86. package/dist/src/config/config.test.js.map +1 -1
  87. package/dist/src/config/models.d.ts +2 -2
  88. package/dist/src/config/models.js +2 -2
  89. package/dist/src/config/models.js.map +1 -1
  90. package/dist/src/config/models.test.js +1 -1
  91. package/dist/src/config/settings/schema.d.ts +78 -4
  92. package/dist/src/config/settings/schema.js +76 -4
  93. package/dist/src/config/settings/schema.js.map +1 -1
  94. package/dist/src/core/chatGptCodexContentGenerator.d.ts +35 -0
  95. package/dist/src/core/chatGptCodexContentGenerator.js +605 -0
  96. package/dist/src/core/chatGptCodexContentGenerator.js.map +1 -0
  97. package/dist/src/core/chatGptCodexContentGenerator.test.d.ts +7 -0
  98. package/dist/src/core/chatGptCodexContentGenerator.test.js +250 -0
  99. package/dist/src/core/chatGptCodexContentGenerator.test.js.map +1 -0
  100. package/dist/src/core/contentGenerator.d.ts +2 -1
  101. package/dist/src/core/contentGenerator.js +10 -0
  102. package/dist/src/core/contentGenerator.js.map +1 -1
  103. package/dist/src/core/contentGenerator.test.js +36 -0
  104. package/dist/src/core/contentGenerator.test.js.map +1 -1
  105. package/dist/src/core/loggingContentGenerator.d.ts +1 -0
  106. package/dist/src/core/loggingContentGenerator.js +30 -0
  107. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  108. package/dist/src/core/loggingContentGenerator.test.js +62 -0
  109. package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
  110. package/dist/src/core/openaiContentGenerator.d.ts +16 -0
  111. package/dist/src/core/openaiContentGenerator.js +252 -53
  112. package/dist/src/core/openaiContentGenerator.js.map +1 -1
  113. package/dist/src/core/openaiContentGenerator.test.js +176 -7
  114. package/dist/src/core/openaiContentGenerator.test.js.map +1 -1
  115. package/dist/src/core/providerTypes.d.ts +17 -1
  116. package/dist/src/core/providerTypes.js +10 -0
  117. package/dist/src/core/providerTypes.js.map +1 -1
  118. package/dist/src/core/providerTypes.test.js +11 -0
  119. package/dist/src/core/providerTypes.test.js.map +1 -1
  120. package/dist/src/core/turn.js +1 -1
  121. package/dist/src/core/turn.js.map +1 -1
  122. package/dist/src/core/turn.test.js +1 -1
  123. package/dist/src/core/turn.test.js.map +1 -1
  124. package/dist/src/fallback/handler.test.js +14 -14
  125. package/dist/src/fallback/handler.test.js.map +1 -1
  126. package/dist/src/generated/git-commit.d.ts +2 -2
  127. package/dist/src/generated/git-commit.js +2 -2
  128. package/dist/src/generated/git-commit.js.map +1 -1
  129. package/dist/src/gui/drivers/__tests__/sidecarContract.test.d.ts +2 -2
  130. package/dist/src/gui/drivers/__tests__/sidecarContract.test.js +3 -4
  131. package/dist/src/gui/drivers/__tests__/sidecarContract.test.js.map +1 -1
  132. package/dist/src/gui/drivers/linuxAtspiDriver.js +11 -4
  133. package/dist/src/gui/drivers/linuxAtspiDriver.js.map +1 -1
  134. package/dist/src/gui/drivers/windowsUiaDriver.js +2 -2
  135. package/dist/src/gui/drivers/windowsUiaDriver.js.map +1 -1
  136. package/dist/src/gui/selectors/__tests__/selectors.test.js +5 -2
  137. package/dist/src/gui/selectors/__tests__/selectors.test.js.map +1 -1
  138. package/dist/src/gui/selectors/parser.d.ts +1 -1
  139. package/dist/src/gui/selectors/parser.js +1 -1
  140. package/dist/src/gui/selectors/parser.js.map +1 -1
  141. package/dist/src/gui/service/DesktopAutomationService.d.ts +1 -1
  142. package/dist/src/gui/service/DesktopAutomationService.js +8 -9
  143. package/dist/src/gui/service/DesktopAutomationService.js.map +1 -1
  144. package/dist/src/gui/service/__tests__/capabilities.test.d.ts +6 -0
  145. package/dist/src/gui/service/__tests__/capabilities.test.js +32 -4
  146. package/dist/src/gui/service/__tests__/capabilities.test.js.map +1 -1
  147. package/dist/src/gui/service/__tests__/diagnose.test.d.ts +6 -0
  148. package/dist/src/gui/service/__tests__/diagnose.test.js +6 -0
  149. package/dist/src/gui/service/__tests__/diagnose.test.js.map +1 -1
  150. package/dist/src/gui/service/__tests__/progressive.test.d.ts +6 -0
  151. package/dist/src/gui/service/__tests__/progressive.test.js +30 -3
  152. package/dist/src/gui/service/__tests__/progressive.test.js.map +1 -1
  153. package/dist/src/gui/service/__tests__/redaction.test.d.ts +6 -0
  154. package/dist/src/gui/service/__tests__/redaction.test.js +27 -1
  155. package/dist/src/gui/service/__tests__/redaction.test.js.map +1 -1
  156. package/dist/src/gui/service/__tests__/selectorError.test.d.ts +6 -0
  157. package/dist/src/gui/service/__tests__/selectorError.test.js +6 -0
  158. package/dist/src/gui/service/__tests__/selectorError.test.js.map +1 -1
  159. package/dist/src/gui/service/__tests__/wait.test.d.ts +6 -0
  160. package/dist/src/gui/service/__tests__/wait.test.js +29 -2
  161. package/dist/src/gui/service/__tests__/wait.test.js.map +1 -1
  162. package/dist/src/index.d.ts +6 -0
  163. package/dist/src/index.js +7 -0
  164. package/dist/src/index.js.map +1 -1
  165. package/dist/src/openai_chatgpt/constants.d.ts +23 -0
  166. package/dist/src/openai_chatgpt/constants.js +35 -0
  167. package/dist/src/openai_chatgpt/constants.js.map +1 -0
  168. package/dist/src/openai_chatgpt/credentialStorage.d.ts +18 -0
  169. package/dist/src/openai_chatgpt/credentialStorage.js +116 -0
  170. package/dist/src/openai_chatgpt/credentialStorage.js.map +1 -0
  171. package/dist/src/openai_chatgpt/credentialStorage.test.d.ts +7 -0
  172. package/dist/src/openai_chatgpt/credentialStorage.test.js +73 -0
  173. package/dist/src/openai_chatgpt/credentialStorage.test.js.map +1 -0
  174. package/dist/src/openai_chatgpt/imports.d.ts +10 -0
  175. package/dist/src/openai_chatgpt/imports.js +164 -0
  176. package/dist/src/openai_chatgpt/imports.js.map +1 -0
  177. package/dist/src/openai_chatgpt/imports.test.d.ts +7 -0
  178. package/dist/src/openai_chatgpt/imports.test.js +82 -0
  179. package/dist/src/openai_chatgpt/imports.test.js.map +1 -0
  180. package/dist/src/openai_chatgpt/jwt.d.ts +7 -0
  181. package/dist/src/openai_chatgpt/jwt.js +31 -0
  182. package/dist/src/openai_chatgpt/jwt.js.map +1 -0
  183. package/dist/src/openai_chatgpt/jwt.test.d.ts +7 -0
  184. package/dist/src/openai_chatgpt/jwt.test.js +23 -0
  185. package/dist/src/openai_chatgpt/jwt.test.js.map +1 -0
  186. package/dist/src/openai_chatgpt/oauthClient.d.ts +52 -0
  187. package/dist/src/openai_chatgpt/oauthClient.js +196 -0
  188. package/dist/src/openai_chatgpt/oauthClient.js.map +1 -0
  189. package/dist/src/openai_chatgpt/oauthClient.test.d.ts +7 -0
  190. package/dist/src/openai_chatgpt/oauthClient.test.js +138 -0
  191. package/dist/src/openai_chatgpt/oauthClient.test.js.map +1 -0
  192. package/dist/src/openai_chatgpt/types.d.ts +34 -0
  193. package/dist/src/openai_chatgpt/types.js +8 -0
  194. package/dist/src/openai_chatgpt/types.js.map +1 -0
  195. package/dist/src/policy/shell-safety.test.js +2 -1
  196. package/dist/src/policy/shell-safety.test.js.map +1 -1
  197. package/dist/src/safety/approval-ladder/__tests__/buildShellActionProfile.test.js +2 -1
  198. package/dist/src/safety/approval-ladder/__tests__/buildShellActionProfile.test.js.map +1 -1
  199. package/dist/src/safety/built-in.test.js +4 -2
  200. package/dist/src/safety/built-in.test.js.map +1 -1
  201. package/dist/src/telemetry/metrics.test.js +95 -75
  202. package/dist/src/telemetry/metrics.test.js.map +1 -1
  203. package/dist/src/tools/__tests__/edit.risk.test.d.ts +7 -0
  204. package/dist/src/tools/__tests__/edit.risk.test.js +138 -0
  205. package/dist/src/tools/__tests__/edit.risk.test.js.map +1 -0
  206. package/dist/src/tools/__tests__/memoryToolDedupe.test.d.ts +7 -0
  207. package/dist/src/tools/__tests__/memoryToolDedupe.test.js +53 -0
  208. package/dist/src/tools/__tests__/memoryToolDedupe.test.js.map +1 -0
  209. package/dist/src/tools/__tests__/shell.pin.test.js +2 -1
  210. package/dist/src/tools/__tests__/shell.pin.test.js.map +1 -1
  211. package/dist/src/tools/__tests__/shell.provenance.test.js +14 -4
  212. package/dist/src/tools/__tests__/shell.provenance.test.js.map +1 -1
  213. package/dist/src/tools/__tests__/ui-diagnose.test.d.ts +6 -0
  214. package/dist/src/tools/__tests__/ui-diagnose.test.js +11 -8
  215. package/dist/src/tools/__tests__/ui-diagnose.test.js.map +1 -1
  216. package/dist/src/tools/__tests__/ui-health.test.d.ts +6 -0
  217. package/dist/src/tools/__tests__/ui-health.test.js +37 -37
  218. package/dist/src/tools/__tests__/ui-health.test.js.map +1 -1
  219. package/dist/src/tools/agent-control.js +6 -18
  220. package/dist/src/tools/agent-control.js.map +1 -1
  221. package/dist/src/tools/agent-control.test.js +2 -28
  222. package/dist/src/tools/agent-control.test.js.map +1 -1
  223. package/dist/src/tools/edit.js +49 -9
  224. package/dist/src/tools/edit.js.map +1 -1
  225. package/dist/src/tools/edit.test.js +1 -19
  226. package/dist/src/tools/edit.test.js.map +1 -1
  227. package/dist/src/tools/file-ops.js +9 -10
  228. package/dist/src/tools/file-ops.js.map +1 -1
  229. package/dist/src/tools/file-ops.test.js +0 -7
  230. package/dist/src/tools/file-ops.test.js.map +1 -1
  231. package/dist/src/tools/glob.js +4 -16
  232. package/dist/src/tools/glob.js.map +1 -1
  233. package/dist/src/tools/glob.test.js +0 -29
  234. package/dist/src/tools/glob.test.js.map +1 -1
  235. package/dist/src/tools/grep.js +4 -10
  236. package/dist/src/tools/grep.js.map +1 -1
  237. package/dist/src/tools/ls.d.ts +1 -1
  238. package/dist/src/tools/ls.js +8 -7
  239. package/dist/src/tools/ls.js.map +1 -1
  240. package/dist/src/tools/ls.test.js +0 -7
  241. package/dist/src/tools/ls.test.js.map +1 -1
  242. package/dist/src/tools/mcp-client-manager.js +8 -6
  243. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  244. package/dist/src/tools/mcp-client-manager.test.js +0 -10
  245. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  246. package/dist/src/tools/memoryTool.js +10 -0
  247. package/dist/src/tools/memoryTool.js.map +1 -1
  248. package/dist/src/tools/process-manager.js +6 -5
  249. package/dist/src/tools/process-manager.js.map +1 -1
  250. package/dist/src/tools/process-manager.test.js +2 -1
  251. package/dist/src/tools/process-manager.test.js.map +1 -1
  252. package/dist/src/tools/read-file.js +8 -10
  253. package/dist/src/tools/read-file.js.map +1 -1
  254. package/dist/src/tools/read-file.test.js +0 -12
  255. package/dist/src/tools/read-file.test.js.map +1 -1
  256. package/dist/src/tools/read-many-files.js +2 -7
  257. package/dist/src/tools/read-many-files.js.map +1 -1
  258. package/dist/src/tools/repl.js +10 -45
  259. package/dist/src/tools/repl.js.map +1 -1
  260. package/dist/src/tools/ripGrep.js +2 -5
  261. package/dist/src/tools/ripGrep.js.map +1 -1
  262. package/dist/src/tools/ripGrep.test.js +1 -1
  263. package/dist/src/tools/ripGrep.test.js.map +1 -1
  264. package/dist/src/tools/shell.d.ts +2 -11
  265. package/dist/src/tools/shell.js +31 -191
  266. package/dist/src/tools/shell.js.map +1 -1
  267. package/dist/src/tools/shell.test.js +2 -1
  268. package/dist/src/tools/shell.test.js.map +1 -1
  269. package/dist/src/tools/smart-edit.js +2 -5
  270. package/dist/src/tools/smart-edit.js.map +1 -1
  271. package/dist/src/tools/smart-edit.test.js +0 -9
  272. package/dist/src/tools/smart-edit.test.js.map +1 -1
  273. package/dist/src/tools/tools.d.ts +5 -0
  274. package/dist/src/tools/tools.js.map +1 -1
  275. package/dist/src/tools/ui-click.js +69 -3
  276. package/dist/src/tools/ui-click.js.map +1 -1
  277. package/dist/src/tools/write-file.js +34 -8
  278. package/dist/src/tools/write-file.js.map +1 -1
  279. package/dist/src/tools/write-file.test.js +1 -15
  280. package/dist/src/tools/write-file.test.js.map +1 -1
  281. package/dist/src/utils/errorReporting.js +1 -1
  282. package/dist/src/utils/errorReporting.js.map +1 -1
  283. package/dist/src/utils/errorReporting.test.js +1 -1
  284. package/dist/src/utils/errorReporting.test.js.map +1 -1
  285. package/dist/src/utils/events.d.ts +11 -0
  286. package/dist/src/utils/events.js +1 -0
  287. package/dist/src/utils/events.js.map +1 -1
  288. package/dist/src/utils/fileUtils.js +2 -7
  289. package/dist/src/utils/fileUtils.js.map +1 -1
  290. package/dist/src/utils/processUtils.d.ts +43 -0
  291. package/dist/src/utils/processUtils.js +134 -0
  292. package/dist/src/utils/processUtils.js.map +1 -0
  293. package/dist/src/utils/shell-permissions.d.ts +1 -0
  294. package/dist/src/utils/shell-permissions.js +3 -3
  295. package/dist/src/utils/shell-permissions.js.map +1 -1
  296. package/dist/src/utils/shell-permissions.test.js +11 -5
  297. package/dist/src/utils/shell-permissions.test.js.map +1 -1
  298. package/dist/src/utils/shell-utils.js +6 -3
  299. package/dist/src/utils/shell-utils.js.map +1 -1
  300. package/dist/src/utils/shell-utils.test.js +6 -2
  301. package/dist/src/utils/shell-utils.test.js.map +1 -1
  302. package/dist/tsconfig.tsbuildinfo +1 -1
  303. package/package.json +5 -3
@@ -0,0 +1,605 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * Portions Copyright 2025 TerminaI Authors
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import { GenerateContentResponse, } from '@google/genai';
8
+ import { toContents } from '../code_assist/converter.js';
9
+ import { ProxyAgent } from 'undici';
10
+ import { estimateTokenCountSync } from '../utils/tokenCalculation.js';
11
+ import { CHATGPT_CODEX_RESPONSES_PATH, CODEX_ORIGINATOR, } from '../openai_chatgpt/constants.js';
12
+ import { ChatGptOAuthCredentialStorage } from '../openai_chatgpt/credentialStorage.js';
13
+ import { ChatGptOAuthClient, RefreshTokenReusedError, } from '../openai_chatgpt/oauthClient.js';
14
+ import { tryImportFromCodexCli, tryImportFromOpenCode, } from '../openai_chatgpt/imports.js';
15
+ export class ChatGptCodexContentGenerator {
16
+ providerConfig;
17
+ globalConfig;
18
+ oauthClient = new ChatGptOAuthClient();
19
+ // Maps sanitized tool names back to original Gemini names (e.g. "ui_click" → "ui.click")
20
+ toolNameMap = new Map();
21
+ constructor(providerConfig, globalConfig) {
22
+ this.providerConfig = providerConfig;
23
+ this.globalConfig = globalConfig;
24
+ }
25
+ hasUnsupportedModalities(contents) {
26
+ for (const content of contents) {
27
+ if (content.parts) {
28
+ for (const part of content.parts) {
29
+ if (part && typeof part === 'object') {
30
+ if ('inlineData' in part || 'fileData' in part) {
31
+ return true;
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
37
+ return false;
38
+ }
39
+ partUnionToText(part) {
40
+ if (typeof part === 'string')
41
+ return part;
42
+ if (part && typeof part === 'object') {
43
+ const maybe = part;
44
+ if (typeof maybe.text === 'string')
45
+ return maybe.text;
46
+ }
47
+ return '';
48
+ }
49
+ contentUnionToText(content) {
50
+ if (!content)
51
+ return '';
52
+ if (typeof content === 'string')
53
+ return content;
54
+ if (Array.isArray(content)) {
55
+ return content.map((p) => this.partUnionToText(p)).join('');
56
+ }
57
+ if (content && typeof content === 'object') {
58
+ const maybeContent = content;
59
+ if (Array.isArray(maybeContent.parts)) {
60
+ return maybeContent.parts.map((p) => this.partUnionToText(p)).join('');
61
+ }
62
+ return this.partUnionToText(content);
63
+ }
64
+ return '';
65
+ }
66
+ isPlainObject(value) {
67
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
68
+ }
69
+ getParametersJsonSchema(fn) {
70
+ if (!this.isPlainObject(fn))
71
+ return null;
72
+ const parametersJsonSchema = fn['parametersJsonSchema'];
73
+ return this.isPlainObject(parametersJsonSchema)
74
+ ? parametersJsonSchema
75
+ : null;
76
+ }
77
+ parseToolArguments(value) {
78
+ if (value === undefined || value === null)
79
+ return null;
80
+ if (typeof value === 'string') {
81
+ const trimmed = value.trim();
82
+ if (!trimmed)
83
+ return null;
84
+ const parsed = JSON.parse(trimmed);
85
+ return this.isPlainObject(parsed) ? parsed : {};
86
+ }
87
+ return this.isPlainObject(value) ? value : null;
88
+ }
89
+ normalizeTools(tools) {
90
+ if (!tools)
91
+ return [];
92
+ return Array.isArray(tools) ? tools : [tools];
93
+ }
94
+ async generateContent(request, _userPromptId) {
95
+ const stream = await this.generateContentStream(request, _userPromptId);
96
+ let last = null;
97
+ for await (const chunk of stream) {
98
+ last = chunk;
99
+ }
100
+ if (!last) {
101
+ throw new Error('No response from ChatGPT Codex backend');
102
+ }
103
+ return last;
104
+ }
105
+ async generateContentStream(request, _userPromptId) {
106
+ const contents = toContents(request.contents);
107
+ if (this.hasUnsupportedModalities(contents)) {
108
+ throw new Error('The ChatGPT Codex provider currently only supports text. To use images or other files, please switch to the Gemini provider.');
109
+ }
110
+ const instructions = this.contentUnionToText(request.config?.systemInstruction);
111
+ const tools = this.normalizeTools(request.config?.tools);
112
+ const body = {
113
+ model: request.model || this.providerConfig.model,
114
+ store: false,
115
+ stream: true,
116
+ include: ['reasoning.encrypted_content'],
117
+ ...(instructions ? { instructions } : {}),
118
+ input: this.convertContentsToResponsesInput(contents.filter((c) => c.role !== 'system')),
119
+ ...(tools.length > 0 ? { tools: this.convertTools(tools) } : {}),
120
+ ...(request.config?.maxOutputTokens
121
+ ? { max_tokens: request.config.maxOutputTokens }
122
+ : {}),
123
+ ...(request.config?.temperature !== undefined
124
+ ? { temperature: request.config.temperature }
125
+ : {}),
126
+ ...(request.config?.topP !== undefined
127
+ ? { top_p: request.config.topP }
128
+ : {}),
129
+ ...(request.config?.stopSequences
130
+ ? { stop: request.config.stopSequences }
131
+ : {}),
132
+ ...(request.config?.presencePenalty
133
+ ? { presence_penalty: request.config.presencePenalty }
134
+ : {}),
135
+ ...(request.config?.frequencyPenalty
136
+ ? { frequency_penalty: request.config.frequencyPenalty }
137
+ : {}),
138
+ ...(request.config?.seed !== undefined
139
+ ? { seed: request.config.seed }
140
+ : {}),
141
+ };
142
+ const debugMode = this.globalConfig.getDebugMode();
143
+ const response = await this.fetchWithAuthRecovery(CHATGPT_CODEX_RESPONSES_PATH, body, request.config?.abortSignal);
144
+ if (!response.body) {
145
+ throw new Error('No response body from ChatGPT Codex stream');
146
+ }
147
+ const toolNameMap = this.toolNameMap;
148
+ const parseToolArguments = (value) => this.parseToolArguments(value);
149
+ return async function* () {
150
+ const reader = response.body.getReader();
151
+ const decoder = new TextDecoder();
152
+ let buffer = '';
153
+ let terminalResponse = null;
154
+ let hasYieldedText = false;
155
+ try {
156
+ while (true) {
157
+ const { done, value } = await reader.read();
158
+ if (done)
159
+ break;
160
+ buffer += decoder.decode(value, { stream: true });
161
+ const lines = buffer.split('\n');
162
+ buffer = lines.pop() || '';
163
+ for (const line of lines) {
164
+ const trimmed = line.trim();
165
+ if (!trimmed)
166
+ continue;
167
+ if (!trimmed.startsWith('data:'))
168
+ continue;
169
+ const dataText = trimmed.slice('data:'.length).trim();
170
+ if (!dataText || dataText === '[DONE]')
171
+ continue;
172
+ let event;
173
+ try {
174
+ event = JSON.parse(dataText);
175
+ }
176
+ catch (e) {
177
+ if (debugMode) {
178
+ console.error('[ChatGPT OAuth] Failed to parse SSE JSON:', e);
179
+ }
180
+ continue;
181
+ }
182
+ if (!this.isPlainObject(event))
183
+ continue;
184
+ const type = event['type'];
185
+ const delta = event['delta'];
186
+ if (type === 'response.output_text.delta' &&
187
+ typeof delta === 'string') {
188
+ const resp = new GenerateContentResponse();
189
+ resp.candidates = [
190
+ {
191
+ content: { role: 'model', parts: [{ text: delta }] },
192
+ },
193
+ ];
194
+ hasYieldedText = true;
195
+ yield resp;
196
+ }
197
+ if ((type === 'response.completed' ||
198
+ type === 'response.done' ||
199
+ type === 'response.completed_event' ||
200
+ type === 'response.output_item.done') && // Added extra finish parsing
201
+ (this.isPlainObject(event['response']) ||
202
+ this.isPlainObject(event['item'])) // Handle item-level done
203
+ ) {
204
+ // Prefer top-level response if available, else item (though usually response.done has the usage)
205
+ const candidate = (event['response'] ||
206
+ event['item']);
207
+ // Only overwrite if it looks like a terminal response (has output or usage)
208
+ if (candidate.output || candidate.usage) {
209
+ terminalResponse = candidate;
210
+ }
211
+ }
212
+ }
213
+ }
214
+ }
215
+ finally {
216
+ reader.releaseLock();
217
+ }
218
+ if (!terminalResponse) {
219
+ throw new Error('ChatGPT Codex stream ended without terminal response');
220
+ }
221
+ const { text, toolCalls, usage } = this.extractTextAndToolCallsFromResponse(terminalResponse);
222
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
223
+ const parts = [];
224
+ if (text && !hasYieldedText)
225
+ parts.push({ text });
226
+ for (const tc of toolCalls) {
227
+ try {
228
+ const args = parseToolArguments(tc.arguments) ?? {};
229
+ const originalName = toolNameMap.get(tc.name) || tc.name;
230
+ parts.push({
231
+ functionCall: {
232
+ ...(tc.id ? { id: tc.id } : {}),
233
+ name: originalName,
234
+ args,
235
+ },
236
+ });
237
+ }
238
+ catch (e) {
239
+ if (debugMode) {
240
+ console.error('[ChatGPT OAuth] Failed to parse tool arguments:', e);
241
+ }
242
+ }
243
+ }
244
+ const candidate = {
245
+ content: { role: 'model', parts },
246
+ finishReason: 'STOP',
247
+ };
248
+ const final = new GenerateContentResponse();
249
+ final.candidates = [candidate];
250
+ if (usage) {
251
+ final.usageMetadata = {
252
+ promptTokenCount: usage.prompt_tokens ?? 0,
253
+ candidatesTokenCount: usage.completion_tokens ?? 0,
254
+ totalTokenCount: usage.total_tokens ?? 0,
255
+ };
256
+ }
257
+ yield final;
258
+ }.call(this);
259
+ }
260
+ async countTokens(request) {
261
+ const contents = toContents(request.contents);
262
+ let totalTokens = 0;
263
+ for (const content of contents) {
264
+ if (content.parts) {
265
+ totalTokens += estimateTokenCountSync(content.parts);
266
+ }
267
+ }
268
+ return { totalTokens };
269
+ }
270
+ async embedContent(_request) {
271
+ throw new Error('Embeddings not supported for ChatGPT OAuth provider yet.');
272
+ }
273
+ async fetchWithAuthRecovery(pathSuffix, body, signal) {
274
+ let credentials = await this.loadOrImportCredentials();
275
+ const doFetch = async (accessToken, accountId) => {
276
+ const baseUrl = normalizeBaseUrl(this.providerConfig.baseUrl);
277
+ const url = `${baseUrl}/${pathSuffix}`;
278
+ const headers = {
279
+ 'Content-Type': 'application/json',
280
+ Authorization: `Bearer ${accessToken}`,
281
+ 'ChatGPT-Account-ID': accountId,
282
+ originator: CODEX_ORIGINATOR,
283
+ session_id: this.globalConfig.getSessionId(),
284
+ ...this.providerConfig.headers,
285
+ };
286
+ if (process.env['TERMINAI_OPENAI_CHATGPT_BETA_RESPONSES_EXPERIMENTAL'] ===
287
+ 'true') {
288
+ headers['OpenAI-Beta'] = 'responses=experimental';
289
+ }
290
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
291
+ const options = {
292
+ method: 'POST',
293
+ headers,
294
+ body: JSON.stringify(body),
295
+ signal,
296
+ };
297
+ const proxy = this.globalConfig.getProxy();
298
+ if (proxy) {
299
+ options.dispatcher = new ProxyAgent(proxy);
300
+ }
301
+ return fetch(url, options);
302
+ };
303
+ const attemptWithCreds = async () => {
304
+ const stalenessRefresh = this.oauthClient.shouldRefreshByStaleness(credentials.lastRefresh);
305
+ if (stalenessRefresh) {
306
+ try {
307
+ const refreshed = await this.oauthClient.refresh({
308
+ refreshToken: credentials.token.refreshToken ?? '',
309
+ existingRefreshToken: credentials.token.refreshToken ?? undefined,
310
+ });
311
+ await ChatGptOAuthCredentialStorage.save(refreshed);
312
+ const reloaded = await ChatGptOAuthCredentialStorage.load();
313
+ if (reloaded)
314
+ credentials = reloaded;
315
+ }
316
+ catch (error) {
317
+ if (error instanceof RefreshTokenReusedError) {
318
+ // Clear invalid credentials so user can re-auth
319
+ await ChatGptOAuthCredentialStorage.clear();
320
+ throw error; // Re-throw with user-friendly message
321
+ }
322
+ throw error;
323
+ }
324
+ }
325
+ const accountId = this.oauthClient.deriveAccountId({
326
+ accountId: credentials.accountId,
327
+ idToken: credentials.idToken,
328
+ accessToken: credentials.token.accessToken,
329
+ }) ?? credentials.accountId;
330
+ if (!accountId) {
331
+ throw new Error('ChatGPT OAuth account id is missing. Re-authenticate to obtain an id_token with chatgpt_account_id.');
332
+ }
333
+ return doFetch(credentials.token.accessToken, accountId);
334
+ };
335
+ // 401 recovery: reload -> retry -> refresh -> retry -> fail
336
+ let response;
337
+ try {
338
+ response = await attemptWithCreds();
339
+ }
340
+ catch (error) {
341
+ if (error instanceof RefreshTokenReusedError) {
342
+ throw error; // Already has user-friendly message
343
+ }
344
+ throw error;
345
+ }
346
+ if (response.status !== 401) {
347
+ return ensureOk(response);
348
+ }
349
+ {
350
+ const reloaded = await ChatGptOAuthCredentialStorage.load().catch(() => null);
351
+ if (reloaded)
352
+ credentials = reloaded;
353
+ }
354
+ try {
355
+ response = await attemptWithCreds();
356
+ }
357
+ catch (error) {
358
+ if (error instanceof RefreshTokenReusedError) {
359
+ throw error;
360
+ }
361
+ throw error;
362
+ }
363
+ if (response.status !== 401) {
364
+ return ensureOk(response);
365
+ }
366
+ // Final refresh attempt
367
+ try {
368
+ const refreshed = await this.oauthClient.refresh({
369
+ refreshToken: credentials.token.refreshToken ?? '',
370
+ existingRefreshToken: credentials.token.refreshToken ?? undefined,
371
+ });
372
+ await ChatGptOAuthCredentialStorage.save(refreshed);
373
+ {
374
+ const reloaded = await ChatGptOAuthCredentialStorage.load();
375
+ if (reloaded)
376
+ credentials = reloaded;
377
+ }
378
+ }
379
+ catch (error) {
380
+ if (error instanceof RefreshTokenReusedError) {
381
+ await ChatGptOAuthCredentialStorage.clear();
382
+ throw error;
383
+ }
384
+ throw error;
385
+ }
386
+ response = await attemptWithCreds();
387
+ if (response.status !== 401) {
388
+ return ensureOk(response);
389
+ }
390
+ // All recovery attempts failed - clear creds and tell user to re-auth
391
+ await ChatGptOAuthCredentialStorage.clear();
392
+ throw new Error('ChatGPT OAuth unauthorized. Credentials cleared. Run /auth wizard to re-authenticate.');
393
+ }
394
+ async loadOrImportCredentials() {
395
+ // Attempt load first
396
+ const loaded = await ChatGptOAuthCredentialStorage.load().catch(() => null);
397
+ if (loaded) {
398
+ // Validate loaded credentials have required fields
399
+ if (!loaded.accountId || !loaded.token.refreshToken) {
400
+ // Silently clear corrupted credentials and continue to import/error
401
+ await ChatGptOAuthCredentialStorage.clear();
402
+ }
403
+ else {
404
+ return loaded;
405
+ }
406
+ }
407
+ // Try importing from external sources
408
+ const imported = (await tryImportFromCodexCli(this.oauthClient)) ??
409
+ (await tryImportFromOpenCode(this.oauthClient));
410
+ // Strict validation before saving - must have accountId AND refreshToken
411
+ if (imported && imported.accountId && imported.token.refreshToken) {
412
+ await ChatGptOAuthCredentialStorage.save(imported);
413
+ const reloaded = await ChatGptOAuthCredentialStorage.load().catch(() => null);
414
+ if (reloaded)
415
+ return reloaded;
416
+ }
417
+ throw new Error('[ChatGPT OAuth] Not authenticated. Run /auth wizard to complete OpenAI login.');
418
+ }
419
+ convertTools(tools) {
420
+ const out = [];
421
+ for (const tool of tools) {
422
+ if (tool.functionDeclarations) {
423
+ for (const fn of tool.functionDeclarations) {
424
+ const parametersFromJsonSchema = this.getParametersJsonSchema(fn);
425
+ out.push({
426
+ type: 'function',
427
+ name: this.sanitizeToolName(fn.name || 'unknown_tool'),
428
+ description: fn.description,
429
+ parameters: parametersFromJsonSchema ??
430
+ (fn.parameters
431
+ ? this.convertSchemaToJsonSchema(fn.parameters)
432
+ : undefined),
433
+ });
434
+ }
435
+ }
436
+ }
437
+ return out;
438
+ }
439
+ sanitizeToolName(name) {
440
+ let sanitized = name.replace(/[^a-zA-Z0-9_-]/g, '_');
441
+ if (/^[0-9]/.test(sanitized)) {
442
+ sanitized = '_' + sanitized;
443
+ }
444
+ if (sanitized !== name) {
445
+ this.toolNameMap.set(sanitized, name);
446
+ }
447
+ return sanitized;
448
+ }
449
+ convertSchemaToJsonSchema(schema) {
450
+ const result = {};
451
+ if (schema.type) {
452
+ result['type'] = String(schema.type).toLowerCase();
453
+ }
454
+ if (schema.description) {
455
+ result['description'] = schema.description;
456
+ }
457
+ if (schema.enum) {
458
+ result['enum'] = schema.enum;
459
+ }
460
+ if (schema.properties) {
461
+ const convertedProperties = {};
462
+ for (const [key, value] of Object.entries(schema.properties)) {
463
+ convertedProperties[key] = this.convertSchemaToJsonSchema(value);
464
+ }
465
+ result['properties'] = convertedProperties;
466
+ }
467
+ if (schema.required) {
468
+ result['required'] = schema.required;
469
+ }
470
+ if (schema.items) {
471
+ result['items'] = this.convertSchemaToJsonSchema(schema.items);
472
+ }
473
+ if (schema.nullable !== undefined) {
474
+ result['nullable'] = schema.nullable;
475
+ }
476
+ if (schema.format) {
477
+ result['format'] = schema.format;
478
+ }
479
+ return result;
480
+ }
481
+ convertContentsToResponsesInput(contents) {
482
+ const items = [];
483
+ const callIdStack = {};
484
+ for (const content of contents) {
485
+ const parts = content.parts ?? [];
486
+ // Check for function responses first (tool outputs)
487
+ if (parts.some((p) => p.functionResponse)) {
488
+ for (const part of parts) {
489
+ if (part.functionResponse) {
490
+ const name = part.functionResponse.name || '';
491
+ const ids = callIdStack[name];
492
+ // ID linkage: consume the ID we generated for the call, or fallback
493
+ const callId = ids?.shift() || `call_unknown_${Date.now()}`;
494
+ items.push({
495
+ type: 'function_call_output',
496
+ call_id: callId,
497
+ output: JSON.stringify(part.functionResponse.response ?? {}),
498
+ });
499
+ }
500
+ }
501
+ continue;
502
+ }
503
+ // Check for function calls (assistant requests)
504
+ if (parts.some((p) => p.functionCall)) {
505
+ for (const part of parts) {
506
+ if (part.functionCall) {
507
+ const name = part.functionCall.name || '';
508
+ // Generate stable ID if provided, otherwise robust fallback
509
+ const callId = part.functionCall.id ||
510
+ `call_${name.replace(/[^a-zA-Z0-9_]/g, '')}_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`;
511
+ if (!callIdStack[name])
512
+ callIdStack[name] = [];
513
+ callIdStack[name].push(callId);
514
+ items.push({
515
+ type: 'function_call',
516
+ call_id: callId,
517
+ name: this.sanitizeToolName(name),
518
+ arguments: JSON.stringify(part.functionCall.args ?? {}),
519
+ });
520
+ }
521
+ if (part.text) {
522
+ // Assistant text accompanying tool call
523
+ items.push({
524
+ role: content.role === 'model' ? 'assistant' : 'user',
525
+ content: part.text,
526
+ });
527
+ }
528
+ }
529
+ continue;
530
+ }
531
+ // Standard text message
532
+ const textContent = parts
533
+ .filter((p) => p.text)
534
+ .map((p) => p.text)
535
+ .join('');
536
+ // Filter out system messages here? Or allow them?
537
+ // OpenAI Responses API generally expects user/assistant here, system via instructions.
538
+ // But if we encounter system here, map to 'system' just in case or skip if duplicates instructions.
539
+ // For now, mapping 'model' -> 'assistant', others -> 'user' (safe default)
540
+ // except explicit 'system' -> 'system'.
541
+ if (textContent) {
542
+ items.push({
543
+ role: content.role === 'model'
544
+ ? 'assistant'
545
+ : content.role === 'system'
546
+ ? 'system'
547
+ : 'user',
548
+ content: textContent,
549
+ });
550
+ }
551
+ }
552
+ return items;
553
+ }
554
+ extractTextAndToolCallsFromResponse(response) {
555
+ const toolCalls = [];
556
+ let text = '';
557
+ const usage = response.usage;
558
+ const output = response.output;
559
+ if (!Array.isArray(output)) {
560
+ return { text: '', toolCalls: [] };
561
+ }
562
+ for (const item of output) {
563
+ if (!this.isPlainObject(item))
564
+ continue;
565
+ const typed = item;
566
+ const type = typed.type;
567
+ if (type === 'message') {
568
+ const content = typed.content;
569
+ if (Array.isArray(content)) {
570
+ for (const c of content) {
571
+ if (!this.isPlainObject(c))
572
+ continue;
573
+ if (c['type'] === 'output_text' && typeof c['text'] === 'string') {
574
+ text += c['text'];
575
+ }
576
+ }
577
+ }
578
+ }
579
+ else if (type === 'function_call') {
580
+ const name = typeof typed.name === 'string' ? typed.name : '';
581
+ const args = typeof typed.arguments === 'string' ? typed.arguments : '{}';
582
+ const id = typeof typed.call_id === 'string' ? typed.call_id : undefined;
583
+ if (name) {
584
+ toolCalls.push({ id, name, arguments: args });
585
+ }
586
+ }
587
+ }
588
+ return { text, toolCalls, usage };
589
+ }
590
+ }
591
+ function normalizeBaseUrl(raw) {
592
+ const trimmed = raw.trim().replace(/\/+$/, '');
593
+ if (!/^https?:\/\//i.test(trimmed)) {
594
+ throw new Error(`ChatGPT Codex baseUrl must start with http:// or https:// (got "${raw}").`);
595
+ }
596
+ return trimmed;
597
+ }
598
+ async function ensureOk(response) {
599
+ if (!response.ok) {
600
+ const text = await response.text().catch(() => '');
601
+ throw new Error(`ChatGPT Codex backend error (${response.status}): ${text}`);
602
+ }
603
+ return response;
604
+ }
605
+ //# sourceMappingURL=chatGptCodexContentGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatGptCodexContentGenerator.js","sourceRoot":"","sources":["../../../src/core/chatGptCodexContentGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * Portions Copyright 2025 TerminaI Authors
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ export {};