codex-chatgpt-control 0.1.0-alpha.1 → 0.2.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +55 -0
  3. package/contracts/v1/fixtures/backend-capabilities.json +7 -0
  4. package/contracts/v1/fixtures/blocker-explanation-profiles.json +114 -0
  5. package/contracts/v1/fixtures/command-descriptors.json +192 -15
  6. package/contracts/v1/fixtures/doctor-bridge-upload.json +8 -0
  7. package/contracts/v1/fixtures/doctor-scenario-preflight.json +108 -0
  8. package/contracts/v1/fixtures/existing-tab-diagnostics-blocker.json +57 -0
  9. package/contracts/v1/fixtures/files-preflight-success.json +32 -0
  10. package/contracts/v1/fixtures/help-root.json +1 -1
  11. package/contracts/v1/fixtures/output-json-parse-success.json +17 -2
  12. package/contracts/v1/fixtures/project-sources-plan-add.json +71 -0
  13. package/contracts/v1/fixtures/read-latest-clipped.json +31 -0
  14. package/contracts/v1/fixtures/reports-create-redacted.json +15 -0
  15. package/contracts/v1/fixtures/responses-basic-success.json +11 -0
  16. package/contracts/v1/fixtures/run-basic-success.json +15 -0
  17. package/contracts/v1/fixtures/run-browser-bridge-blocker.json +2 -2
  18. package/contracts/v1/fixtures/run-timeout-partial.json +2 -2
  19. package/contracts/v1/fixtures/runner-budget-blocker.json +1 -1
  20. package/contracts/v1/fixtures/stream-blocked.ndjson +1 -1
  21. package/contracts/v1/fixtures/stream-submitted-completed.ndjson +1 -1
  22. package/contracts/v1/manifest.json +30 -0
  23. package/contracts/v1/parity-suite.json +72 -6
  24. package/contracts/v1/schemas/backend-request.schema.json +3 -0
  25. package/contracts/v1/schemas/command-result.schema.json +48 -0
  26. package/contracts/v1/schemas/response.schema.json +28 -0
  27. package/contracts/v1/schemas/run-result.schema.json +84 -0
  28. package/contracts/v1/surface-drift-policy.json +210 -0
  29. package/dist/codex-chatgpt-control-backend.mjs +5137 -488
  30. package/dist/codex-chatgpt-control.bundle.mjs +5001 -286
  31. package/dist/src/backend/client.d.ts +6 -1
  32. package/dist/src/backend/client.js +5 -0
  33. package/dist/src/backend/protocol.d.ts +1 -1
  34. package/dist/src/backend/protocol.js +7 -0
  35. package/dist/src/backend/session.js +14 -0
  36. package/dist/src/browser/attach.js +128 -20
  37. package/dist/src/browser/downloads.js +2 -1
  38. package/dist/src/browser/page-state.js +6 -3
  39. package/dist/src/client.d.ts +16 -1
  40. package/dist/src/client.js +86 -7
  41. package/dist/src/commands/artifacts.d.ts +5 -0
  42. package/dist/src/commands/artifacts.js +432 -0
  43. package/dist/src/commands/context.js +5 -2
  44. package/dist/src/commands/doctor.d.ts +10 -2
  45. package/dist/src/commands/doctor.js +242 -14
  46. package/dist/src/commands/files.d.ts +2 -1
  47. package/dist/src/commands/files.js +352 -18
  48. package/dist/src/commands/messages.d.ts +2 -1
  49. package/dist/src/commands/messages.js +232 -40
  50. package/dist/src/commands/modes.js +202 -20
  51. package/dist/src/commands/project-sources.d.ts +10 -0
  52. package/dist/src/commands/project-sources.js +643 -0
  53. package/dist/src/commands/registry.js +76 -14
  54. package/dist/src/commands/reports.d.ts +9 -0
  55. package/dist/src/commands/reports.js +83 -6
  56. package/dist/src/commands/response-actions.js +33 -0
  57. package/dist/src/commands/sequence.js +14 -0
  58. package/dist/src/commands/threads.js +2 -1
  59. package/dist/src/commands/timeouts.d.ts +2 -0
  60. package/dist/src/commands/timeouts.js +18 -0
  61. package/dist/src/diagnostics/blockers.d.ts +54 -0
  62. package/dist/src/diagnostics/blockers.js +299 -0
  63. package/dist/src/dom/artifacts.d.ts +7 -0
  64. package/dist/src/dom/artifacts.js +198 -0
  65. package/dist/src/dom/generation-state.d.ts +8 -0
  66. package/dist/src/dom/generation-state.js +103 -0
  67. package/dist/src/dom/locale/am.d.ts +28 -0
  68. package/dist/src/dom/locale/am.js +28 -0
  69. package/dist/src/dom/locale/ar.d.ts +28 -0
  70. package/dist/src/dom/locale/ar.js +28 -0
  71. package/dist/src/dom/locale/bg.d.ts +28 -0
  72. package/dist/src/dom/locale/bg.js +28 -0
  73. package/dist/src/dom/locale/bn.d.ts +28 -0
  74. package/dist/src/dom/locale/bn.js +28 -0
  75. package/dist/src/dom/locale/bs.d.ts +28 -0
  76. package/dist/src/dom/locale/bs.js +28 -0
  77. package/dist/src/dom/locale/ca.d.ts +28 -0
  78. package/dist/src/dom/locale/ca.js +28 -0
  79. package/dist/src/dom/locale/cs.d.ts +28 -0
  80. package/dist/src/dom/locale/cs.js +28 -0
  81. package/dist/src/dom/locale/da.d.ts +28 -0
  82. package/dist/src/dom/locale/da.js +28 -0
  83. package/dist/src/dom/locale/de.d.ts +30 -0
  84. package/dist/src/dom/locale/de.js +30 -0
  85. package/dist/src/dom/locale/el.d.ts +28 -0
  86. package/dist/src/dom/locale/el.js +28 -0
  87. package/dist/src/dom/locale/en.d.ts +50 -0
  88. package/dist/src/dom/locale/en.js +56 -0
  89. package/dist/src/dom/locale/es-419.d.ts +28 -0
  90. package/dist/src/dom/locale/es-419.js +28 -0
  91. package/dist/src/dom/locale/es-ES.d.ts +28 -0
  92. package/dist/src/dom/locale/es-ES.js +28 -0
  93. package/dist/src/dom/locale/et.d.ts +28 -0
  94. package/dist/src/dom/locale/et.js +28 -0
  95. package/dist/src/dom/locale/fa.d.ts +28 -0
  96. package/dist/src/dom/locale/fa.js +28 -0
  97. package/dist/src/dom/locale/fi.d.ts +28 -0
  98. package/dist/src/dom/locale/fi.js +28 -0
  99. package/dist/src/dom/locale/fr-CA.d.ts +29 -0
  100. package/dist/src/dom/locale/fr-CA.js +29 -0
  101. package/dist/src/dom/locale/fr-FR.d.ts +30 -0
  102. package/dist/src/dom/locale/fr-FR.js +30 -0
  103. package/dist/src/dom/locale/gu.d.ts +28 -0
  104. package/dist/src/dom/locale/gu.js +28 -0
  105. package/dist/src/dom/locale/hi.d.ts +28 -0
  106. package/dist/src/dom/locale/hi.js +28 -0
  107. package/dist/src/dom/locale/hr.d.ts +28 -0
  108. package/dist/src/dom/locale/hr.js +28 -0
  109. package/dist/src/dom/locale/hu.d.ts +28 -0
  110. package/dist/src/dom/locale/hu.js +28 -0
  111. package/dist/src/dom/locale/hy.d.ts +28 -0
  112. package/dist/src/dom/locale/hy.js +28 -0
  113. package/dist/src/dom/locale/id.d.ts +28 -0
  114. package/dist/src/dom/locale/id.js +28 -0
  115. package/dist/src/dom/locale/index.d.ts +79 -0
  116. package/dist/src/dom/locale/index.js +202 -0
  117. package/dist/src/dom/locale/is.d.ts +28 -0
  118. package/dist/src/dom/locale/is.js +28 -0
  119. package/dist/src/dom/locale/it.d.ts +27 -0
  120. package/dist/src/dom/locale/it.js +27 -0
  121. package/dist/src/dom/locale/ja.d.ts +27 -0
  122. package/dist/src/dom/locale/ja.js +27 -0
  123. package/dist/src/dom/locale/ka.d.ts +28 -0
  124. package/dist/src/dom/locale/ka.js +28 -0
  125. package/dist/src/dom/locale/kk.d.ts +28 -0
  126. package/dist/src/dom/locale/kk.js +28 -0
  127. package/dist/src/dom/locale/kn.d.ts +28 -0
  128. package/dist/src/dom/locale/kn.js +28 -0
  129. package/dist/src/dom/locale/ko.d.ts +28 -0
  130. package/dist/src/dom/locale/ko.js +28 -0
  131. package/dist/src/dom/locale/lt.d.ts +28 -0
  132. package/dist/src/dom/locale/lt.js +28 -0
  133. package/dist/src/dom/locale/lv.d.ts +28 -0
  134. package/dist/src/dom/locale/lv.js +28 -0
  135. package/dist/src/dom/locale/mk.d.ts +28 -0
  136. package/dist/src/dom/locale/mk.js +28 -0
  137. package/dist/src/dom/locale/ml.d.ts +28 -0
  138. package/dist/src/dom/locale/ml.js +28 -0
  139. package/dist/src/dom/locale/mn.d.ts +28 -0
  140. package/dist/src/dom/locale/mn.js +28 -0
  141. package/dist/src/dom/locale/mr.d.ts +28 -0
  142. package/dist/src/dom/locale/mr.js +28 -0
  143. package/dist/src/dom/locale/ms.d.ts +28 -0
  144. package/dist/src/dom/locale/ms.js +28 -0
  145. package/dist/src/dom/locale/my.d.ts +28 -0
  146. package/dist/src/dom/locale/my.js +28 -0
  147. package/dist/src/dom/locale/nb.d.ts +28 -0
  148. package/dist/src/dom/locale/nb.js +28 -0
  149. package/dist/src/dom/locale/nl.d.ts +28 -0
  150. package/dist/src/dom/locale/nl.js +28 -0
  151. package/dist/src/dom/locale/pa.d.ts +28 -0
  152. package/dist/src/dom/locale/pa.js +28 -0
  153. package/dist/src/dom/locale/pl.d.ts +28 -0
  154. package/dist/src/dom/locale/pl.js +28 -0
  155. package/dist/src/dom/locale/pt-BR.d.ts +28 -0
  156. package/dist/src/dom/locale/pt-BR.js +28 -0
  157. package/dist/src/dom/locale/pt-PT.d.ts +28 -0
  158. package/dist/src/dom/locale/pt-PT.js +28 -0
  159. package/dist/src/dom/locale/ro.d.ts +28 -0
  160. package/dist/src/dom/locale/ro.js +28 -0
  161. package/dist/src/dom/locale/ru.d.ts +28 -0
  162. package/dist/src/dom/locale/ru.js +28 -0
  163. package/dist/src/dom/locale/sk.d.ts +28 -0
  164. package/dist/src/dom/locale/sk.js +28 -0
  165. package/dist/src/dom/locale/sl.d.ts +28 -0
  166. package/dist/src/dom/locale/sl.js +28 -0
  167. package/dist/src/dom/locale/so.d.ts +28 -0
  168. package/dist/src/dom/locale/so.js +28 -0
  169. package/dist/src/dom/locale/sq.d.ts +28 -0
  170. package/dist/src/dom/locale/sq.js +28 -0
  171. package/dist/src/dom/locale/sr.d.ts +28 -0
  172. package/dist/src/dom/locale/sr.js +28 -0
  173. package/dist/src/dom/locale/sv.d.ts +28 -0
  174. package/dist/src/dom/locale/sv.js +28 -0
  175. package/dist/src/dom/locale/sw.d.ts +28 -0
  176. package/dist/src/dom/locale/sw.js +28 -0
  177. package/dist/src/dom/locale/ta.d.ts +28 -0
  178. package/dist/src/dom/locale/ta.js +28 -0
  179. package/dist/src/dom/locale/te.d.ts +28 -0
  180. package/dist/src/dom/locale/te.js +28 -0
  181. package/dist/src/dom/locale/th.d.ts +28 -0
  182. package/dist/src/dom/locale/th.js +28 -0
  183. package/dist/src/dom/locale/tl.d.ts +28 -0
  184. package/dist/src/dom/locale/tl.js +28 -0
  185. package/dist/src/dom/locale/tr.d.ts +28 -0
  186. package/dist/src/dom/locale/tr.js +28 -0
  187. package/dist/src/dom/locale/types.d.ts +45 -0
  188. package/dist/src/dom/locale/types.js +1 -0
  189. package/dist/src/dom/locale/uk.d.ts +28 -0
  190. package/dist/src/dom/locale/uk.js +28 -0
  191. package/dist/src/dom/locale/ur.d.ts +28 -0
  192. package/dist/src/dom/locale/ur.js +28 -0
  193. package/dist/src/dom/locale/vi.d.ts +28 -0
  194. package/dist/src/dom/locale/vi.js +28 -0
  195. package/dist/src/dom/locale/zh-HK.d.ts +28 -0
  196. package/dist/src/dom/locale/zh-HK.js +28 -0
  197. package/dist/src/dom/locale/zh-Hans.d.ts +28 -0
  198. package/dist/src/dom/locale/zh-Hans.js +28 -0
  199. package/dist/src/dom/locale/zh-TW.d.ts +29 -0
  200. package/dist/src/dom/locale/zh-TW.js +29 -0
  201. package/dist/src/dom/locale-labels.d.ts +26 -0
  202. package/dist/src/dom/locale-labels.js +26 -0
  203. package/dist/src/dom/menus.d.ts +6 -0
  204. package/dist/src/dom/menus.js +34 -8
  205. package/dist/src/dom/message-format.d.ts +2 -1
  206. package/dist/src/dom/message-format.js +67 -10
  207. package/dist/src/dom/messages.d.ts +2 -1
  208. package/dist/src/dom/messages.js +2 -4
  209. package/dist/src/dom/selectors.d.ts +1 -0
  210. package/dist/src/dom/selectors.js +42 -15
  211. package/dist/src/index.d.ts +5 -0
  212. package/dist/src/index.js +5 -0
  213. package/dist/src/platform/local-paths.d.ts +4 -0
  214. package/dist/src/platform/local-paths.js +20 -0
  215. package/dist/src/runner/interruptions.js +15 -4
  216. package/dist/src/runner/responses.js +18 -1
  217. package/dist/src/runner/result.js +15 -0
  218. package/dist/src/runner/resume.js +1 -0
  219. package/dist/src/runner/types.d.ts +3 -0
  220. package/dist/src/safety/risk.d.ts +7 -0
  221. package/dist/src/safety/risk.js +7 -0
  222. package/dist/src/safety/untrusted-output.d.ts +73 -0
  223. package/dist/src/safety/untrusted-output.js +199 -0
  224. package/dist/src/scripts/apply-intelligence-locale-captures.d.ts +1 -0
  225. package/dist/src/scripts/apply-intelligence-locale-captures.js +184 -0
  226. package/dist/src/scripts/capture-intelligence-locales.d.ts +25 -0
  227. package/dist/src/scripts/capture-intelligence-locales.js +669 -0
  228. package/dist/src/scripts/check-surface-drift.d.ts +1 -0
  229. package/dist/src/scripts/check-surface-drift.js +11 -0
  230. package/dist/src/scripts/live-smoke/scenarios.js +84 -0
  231. package/dist/src/scripts/locale-capture/language-coverage.d.ts +10 -0
  232. package/dist/src/scripts/locale-capture/language-coverage.js +39 -0
  233. package/dist/src/testing/surface-drift.d.ts +66 -0
  234. package/dist/src/testing/surface-drift.js +363 -0
  235. package/dist/src/types.d.ts +201 -2
  236. package/package.json +2 -1
  237. package/references/backend-protocol.md +93 -1
  238. package/references/language-coverage.md +142 -0
  239. package/references/localization.md +247 -0
  240. package/references/python-parity.md +63 -1
  241. package/references/safety.md +2 -0
  242. package/references/troubleshooting.md +58 -0
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Albanian (sq-AL). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=sq-AL, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export const sq = {
10
+ composerTextbox: ["Pyet për çdo gjë"],
11
+ sendButton: ["Dërgo kërkesën"],
12
+ searchChatsButton: ["Kërko bisedat"],
13
+ searchChatsPlaceholder: ["Kërko bisedat..."],
14
+ newChat: ["Bisedë e re"],
15
+ addFilesButton: ["Shto skedarë e më shumë"],
16
+ addFilesOpenerCandidates: ["Shto skedarë e më shumë"],
17
+ addPhotosFilesMenuItem: ["Ngarko foto dhe skedarë"],
18
+ copyResponse: ["Kopjo përgjigjen"],
19
+ modeLabels: ["I menjëhershëm", "Mesatar", "Lartë", "Shumë i lartë"],
20
+ modeOpenerExtra: ["Konfiguro..."],
21
+ tools: {
22
+ web_search: ["Kërkim në ueb"],
23
+ deep_research: ["Kërkim i thellë"],
24
+ create_image: ["Krijo një imazh"],
25
+ },
26
+ signedInMarkers: ["Bisedë e re", "Kërko bisedat", "Më të fundit", "Historia e bisedës", "Projektet", "Pyet për çdo gjë"],
27
+ responseActions: ["Kopjo përgjigjen"],
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Serbian (sr-RS). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=sr-RS, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export declare const sr: {
10
+ composerTextbox: string[];
11
+ sendButton: string[];
12
+ searchChatsButton: string[];
13
+ searchChatsPlaceholder: string[];
14
+ newChat: string[];
15
+ addFilesButton: string[];
16
+ addFilesOpenerCandidates: string[];
17
+ addPhotosFilesMenuItem: string[];
18
+ copyResponse: string[];
19
+ modeLabels: string[];
20
+ modeOpenerExtra: string[];
21
+ tools: {
22
+ web_search: string[];
23
+ deep_research: string[];
24
+ create_image: string[];
25
+ };
26
+ signedInMarkers: string[];
27
+ responseActions: string[];
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Serbian (sr-RS). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=sr-RS, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export const sr = {
10
+ composerTextbox: ["Питај било шта"],
11
+ sendButton: ["Пошаљи промпт"],
12
+ searchChatsButton: ["Претражи ћаскања"],
13
+ searchChatsPlaceholder: ["Претрага ћаскања..."],
14
+ newChat: ["Ново ћаскање"],
15
+ addFilesButton: ["Додај датотеке и друго"],
16
+ addFilesOpenerCandidates: ["Додај датотеке и друго"],
17
+ addPhotosFilesMenuItem: ["Отпреми фотографије и датотеке"],
18
+ copyResponse: ["Копирај одговор"],
19
+ modeLabels: ["Веома високо"],
20
+ modeOpenerExtra: ["Конфигуриши..."],
21
+ tools: {
22
+ web_search: ["Претрага веба"],
23
+ deep_research: ["Дубинско истраживање"],
24
+ create_image: ["Направи слику"],
25
+ },
26
+ signedInMarkers: ["Ново ћаскање", "Претражи ћаскања", "Скорашњи", "Историја ћаскања", "Пројекти", "Питај било шта"],
27
+ responseActions: ["Копирај одговор"],
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Swedish (sv-SE). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=sv-SE, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export declare const sv: {
10
+ composerTextbox: string[];
11
+ sendButton: string[];
12
+ searchChatsButton: string[];
13
+ searchChatsPlaceholder: string[];
14
+ newChat: string[];
15
+ addFilesButton: string[];
16
+ addFilesOpenerCandidates: string[];
17
+ addPhotosFilesMenuItem: string[];
18
+ copyResponse: string[];
19
+ modeLabels: string[];
20
+ modeOpenerExtra: string[];
21
+ tools: {
22
+ web_search: string[];
23
+ deep_research: string[];
24
+ create_image: string[];
25
+ };
26
+ signedInMarkers: string[];
27
+ responseActions: string[];
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Swedish (sv-SE). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=sv-SE, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export const sv = {
10
+ composerTextbox: ["Fråga vad som helst"],
11
+ sendButton: ["Skicka prompt"],
12
+ searchChatsButton: ["Sök i chattar"],
13
+ searchChatsPlaceholder: ["Sök i chattar …"],
14
+ newChat: ["Ny chatt"],
15
+ addFilesButton: ["Lägg till filer med mera"],
16
+ addFilesOpenerCandidates: ["Lägg till filer med mera"],
17
+ addPhotosFilesMenuItem: ["Ladda upp foton och filer"],
18
+ copyResponse: ["Kopiera svar"],
19
+ modeLabels: ["Direkt", "Balanserad", "Hög", "Extra hög"],
20
+ modeOpenerExtra: ["Konfigurera …"],
21
+ tools: {
22
+ web_search: ["Webbsökning"],
23
+ deep_research: ["Djup research"],
24
+ create_image: ["Skapa en bild"],
25
+ },
26
+ signedInMarkers: ["Ny chatt", "Sök i chattar", "Senaste", "Chatthistorik", "Projekt", "Fråga vad som helst"],
27
+ responseActions: ["Kopiera svar"],
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Swahili (sw-TZ). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=sw-TZ, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export declare const sw: {
10
+ composerTextbox: string[];
11
+ sendButton: string[];
12
+ searchChatsButton: string[];
13
+ searchChatsPlaceholder: string[];
14
+ newChat: string[];
15
+ addFilesButton: string[];
16
+ addFilesOpenerCandidates: string[];
17
+ addPhotosFilesMenuItem: string[];
18
+ copyResponse: string[];
19
+ modeLabels: string[];
20
+ modeOpenerExtra: string[];
21
+ tools: {
22
+ web_search: string[];
23
+ deep_research: string[];
24
+ create_image: string[];
25
+ };
26
+ signedInMarkers: string[];
27
+ responseActions: string[];
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Swahili (sw-TZ). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=sw-TZ, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export const sw = {
10
+ composerTextbox: ["Uliza chochote"],
11
+ sendButton: ["Tuma makumbusho"],
12
+ searchChatsButton: ["Tafuta mazungumzo"],
13
+ searchChatsPlaceholder: ["Inatafuta chati..."],
14
+ newChat: ["Chati mpya"],
15
+ addFilesButton: ["Ongeza faili na mengine zaidi"],
16
+ addFilesOpenerCandidates: ["Ongeza faili na mengine zaidi"],
17
+ addPhotosFilesMenuItem: ["Pakia picha na mafaili"],
18
+ copyResponse: ["Nakili jibu"],
19
+ modeLabels: ["Papo hapo", "Wastani", "Juu", "Juu Zaidi"],
20
+ modeOpenerExtra: ["Sanidi..."],
21
+ tools: {
22
+ web_search: ["Utafutaji wa wavuti"],
23
+ deep_research: ["Utafiti wa kina"],
24
+ create_image: ["Unda picha"],
25
+ },
26
+ signedInMarkers: ["Chati mpya", "Tafuta mazungumzo", "Hivi karibuni", "Historia ya chati", "Miradi", "Uliza chochote"],
27
+ responseActions: ["Nakili jibu"],
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Tamil (ta-IN). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=ta-IN, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export declare const ta: {
10
+ composerTextbox: string[];
11
+ sendButton: string[];
12
+ searchChatsButton: string[];
13
+ searchChatsPlaceholder: string[];
14
+ newChat: string[];
15
+ addFilesButton: string[];
16
+ addFilesOpenerCandidates: string[];
17
+ addPhotosFilesMenuItem: string[];
18
+ copyResponse: string[];
19
+ modeLabels: string[];
20
+ modeOpenerExtra: string[];
21
+ tools: {
22
+ web_search: string[];
23
+ deep_research: string[];
24
+ create_image: string[];
25
+ };
26
+ signedInMarkers: string[];
27
+ responseActions: string[];
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Tamil (ta-IN). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=ta-IN, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export const ta = {
10
+ composerTextbox: ["எதையும் கேளுங்கள்"],
11
+ sendButton: ["தூண்டியை அனுப்பு"],
12
+ searchChatsButton: ["அரட்டைகளைத் தேடு"],
13
+ searchChatsPlaceholder: ["அரட்டைகளைத் தேடு..."],
14
+ newChat: ["புதிய அரட்டை"],
15
+ addFilesButton: ["கோப்புகளையும் மேலும் பலவற்றையும் சேர்"],
16
+ addFilesOpenerCandidates: ["கோப்புகளையும் மேலும் பலவற்றையும் சேர்"],
17
+ addPhotosFilesMenuItem: ["படங்கள் மற்றும் ஃபைல்களைப் பதிவேற்று"],
18
+ copyResponse: ["பதிலை நகலெடுக்கலாம்"],
19
+ modeLabels: ["உடனடி", "நடுத்தர", "உயர்", "மிக உயர்வு", "ப்ரோ"],
20
+ modeOpenerExtra: ["கட்டமைக்கவும்..."],
21
+ tools: {
22
+ web_search: ["இணைய தேடல்"],
23
+ deep_research: ["ஆழ்ந்த ஆய்வு"],
24
+ create_image: ["படத்தை உருவாக்கவும்"],
25
+ },
26
+ signedInMarkers: ["புதிய அரட்டை", "அரட்டைகளைத் தேடு", "சமீபத்தியது", "அரட்டை வரலாறு", "திட்டங்கள்", "எதையும் கேளுங்கள்"],
27
+ responseActions: ["பதிலை நகலெடுக்கலாம்"],
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Telugu (te-IN). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=te-IN, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export declare const te: {
10
+ composerTextbox: string[];
11
+ sendButton: string[];
12
+ searchChatsButton: string[];
13
+ searchChatsPlaceholder: string[];
14
+ newChat: string[];
15
+ addFilesButton: string[];
16
+ addFilesOpenerCandidates: string[];
17
+ addPhotosFilesMenuItem: string[];
18
+ copyResponse: string[];
19
+ modeLabels: string[];
20
+ modeOpenerExtra: string[];
21
+ tools: {
22
+ web_search: string[];
23
+ deep_research: string[];
24
+ create_image: string[];
25
+ };
26
+ signedInMarkers: string[];
27
+ responseActions: string[];
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Telugu (te-IN). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=te-IN, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export const te = {
10
+ composerTextbox: ["ఏదైనా అడగండి"],
11
+ sendButton: ["ప్రాంప్ట్‌ను పంపించండి"],
12
+ searchChatsButton: ["చాట్‌లను శోధించండి"],
13
+ searchChatsPlaceholder: ["చాట్‌లను వెతకండి..."],
14
+ newChat: ["కొత్త చాట్"],
15
+ addFilesButton: ["ఫైల్‌లను మరియు మరిన్ని జోడించండి"],
16
+ addFilesOpenerCandidates: ["ఫైల్‌లను మరియు మరిన్ని జోడించండి"],
17
+ addPhotosFilesMenuItem: ["ఫోటోలు & ఫైల్‌లను అప్‌లోడ్ చేయండి"],
18
+ copyResponse: ["ప్రతిస్పందనను కాపీ చేయండి"],
19
+ modeLabels: ["తక్షణం", "మధ్యస్థ", "అధిక", "అత్యధిక", "ప్రో"],
20
+ modeOpenerExtra: ["కాన్ఫిగర్ చేయండి"],
21
+ tools: {
22
+ web_search: ["వెబ్‌లో వెతకడం"],
23
+ deep_research: ["సంపూర్ణ పరిశోధన"],
24
+ create_image: ["చిత్రాన్ని సృష్టించు"],
25
+ },
26
+ signedInMarkers: ["కొత్త చాట్", "చాట్‌లను శోధించండి", "ఇటీవలివి", "చాట్ చరిత్ర", "ప్రాజెక్ట్‌లు", "ఏదైనా అడగండి"],
27
+ responseActions: ["ప్రతిస్పందనను కాపీ చేయండి"],
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Thai (th-TH). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=th-TH, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export declare const th: {
10
+ composerTextbox: string[];
11
+ sendButton: string[];
12
+ searchChatsButton: string[];
13
+ searchChatsPlaceholder: string[];
14
+ newChat: string[];
15
+ addFilesButton: string[];
16
+ addFilesOpenerCandidates: string[];
17
+ addPhotosFilesMenuItem: string[];
18
+ copyResponse: string[];
19
+ modeLabels: string[];
20
+ modeOpenerExtra: string[];
21
+ tools: {
22
+ web_search: string[];
23
+ deep_research: string[];
24
+ create_image: string[];
25
+ };
26
+ signedInMarkers: string[];
27
+ responseActions: string[];
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Thai (th-TH). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=th-TH, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export const th = {
10
+ composerTextbox: ["ถามอะไรก็ได้"],
11
+ sendButton: ["ส่งคำสั่ง"],
12
+ searchChatsButton: ["ค้นหาแชต"],
13
+ searchChatsPlaceholder: ["ค้นหาแชต..."],
14
+ newChat: ["แชตใหม่"],
15
+ addFilesButton: ["เพิ่มไฟล์และอื่นๆ"],
16
+ addFilesOpenerCandidates: ["เพิ่มไฟล์และอื่นๆ"],
17
+ addPhotosFilesMenuItem: ["อัปโหลดรูปและไฟล์"],
18
+ copyResponse: ["คัดลอกคำตอบ"],
19
+ modeLabels: ["ทันที", "ปานกลาง", "สูง", "สูงมาก"],
20
+ modeOpenerExtra: ["กำหนดค่า..."],
21
+ tools: {
22
+ web_search: ["ค้นหาเว็บ"],
23
+ deep_research: ["หาข้อมูลเชิงลึก"],
24
+ create_image: ["สร้างรูปภาพ"],
25
+ },
26
+ signedInMarkers: ["แชตใหม่", "ค้นหาแชต", "เมื่อเร็วๆ นี้", "ประวัติการแชต", "โครงการ", "ถามอะไรก็ได้"],
27
+ responseActions: ["คัดลอกคำตอบ"],
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Tagalog / Filipino (tl). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=tl, Google Translate confirmed off).
4
+ *
5
+ * Omitted because they match English case-insensitively: `modeLabels` (Instant / Medium /
6
+ * High / Extra High / Pro), `deep_research` tool label ("Deep research").
7
+ * Not yet captured — fall back to English + `selector_drift`: `download`, `downloadImage`,
8
+ * `imageContainerHint`, `transientAssistant`, `stopControl`, and the login/captcha/rate-limit
9
+ * blocker copy.
10
+ */
11
+ export declare const tl: {
12
+ composerTextbox: string[];
13
+ sendButton: string[];
14
+ searchChatsButton: string[];
15
+ searchChatsPlaceholder: string[];
16
+ newChat: string[];
17
+ addFilesButton: string[];
18
+ addFilesOpenerCandidates: string[];
19
+ addPhotosFilesMenuItem: string[];
20
+ copyResponse: string[];
21
+ modeOpenerExtra: string[];
22
+ tools: {
23
+ web_search: string[];
24
+ create_image: string[];
25
+ };
26
+ signedInMarkers: string[];
27
+ responseActions: string[];
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Tagalog / Filipino (tl). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=tl, Google Translate confirmed off).
4
+ *
5
+ * Omitted because they match English case-insensitively: `modeLabels` (Instant / Medium /
6
+ * High / Extra High / Pro), `deep_research` tool label ("Deep research").
7
+ * Not yet captured — fall back to English + `selector_drift`: `download`, `downloadImage`,
8
+ * `imageContainerHint`, `transientAssistant`, `stopControl`, and the login/captcha/rate-limit
9
+ * blocker copy.
10
+ */
11
+ export const tl = {
12
+ composerTextbox: ["Mag-chat sa ChatGPT"],
13
+ sendButton: ["Magpadala ng prompt"],
14
+ searchChatsButton: ["Maghanap sa mga chat"],
15
+ searchChatsPlaceholder: ["Maghanap sa mga chat..."],
16
+ newChat: ["Bagong chat"],
17
+ addFilesButton: ["Magdagdag ng mga file at higit pa"],
18
+ addFilesOpenerCandidates: ["Magdagdag ng mga file at higit pa"],
19
+ addPhotosFilesMenuItem: ["Mag-upload ng mga litrato at file"],
20
+ copyResponse: ["Kopyahin ang sagot"],
21
+ modeOpenerExtra: ["I-configure..."],
22
+ tools: {
23
+ web_search: ["Paghahanap sa web"],
24
+ create_image: ["Gumawa ng larawan"],
25
+ },
26
+ signedInMarkers: ["Bagong chat", "Maghanap sa mga chat", "Mga kamakailan", "History ng chat", "Mga proyekto", "Mag-chat sa ChatGPT"],
27
+ responseActions: ["Kopyahin ang sagot"],
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Turkish (tr-TR). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=tr-TR, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export declare const tr: {
10
+ composerTextbox: string[];
11
+ sendButton: string[];
12
+ searchChatsButton: string[];
13
+ searchChatsPlaceholder: string[];
14
+ newChat: string[];
15
+ addFilesButton: string[];
16
+ addFilesOpenerCandidates: string[];
17
+ addPhotosFilesMenuItem: string[];
18
+ copyResponse: string[];
19
+ modeLabels: string[];
20
+ modeOpenerExtra: string[];
21
+ tools: {
22
+ web_search: string[];
23
+ deep_research: string[];
24
+ create_image: string[];
25
+ };
26
+ signedInMarkers: string[];
27
+ responseActions: string[];
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Turkish (tr-TR). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=tr-TR, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export const tr = {
10
+ composerTextbox: ["Herhangi bir şey sor"],
11
+ sendButton: ["Prompt gönder"],
12
+ searchChatsButton: ["Sohbetlerde ara"],
13
+ searchChatsPlaceholder: ["Sohbetlerde ara..."],
14
+ newChat: ["Yeni sohbet"],
15
+ addFilesButton: ["Dosyaları ve çok daha fazlasını ekle"],
16
+ addFilesOpenerCandidates: ["Dosyaları ve çok daha fazlasını ekle"],
17
+ addPhotosFilesMenuItem: ["Fotoğraf ve dosya yükle"],
18
+ copyResponse: ["Yanıtı kopyala"],
19
+ modeLabels: ["Anında", "Orta", "Yüksek", "Çok Yüksek"],
20
+ modeOpenerExtra: ["Yapılandır..."],
21
+ tools: {
22
+ web_search: ["Web araması"],
23
+ deep_research: ["Derin araştırma"],
24
+ create_image: ["Görsel oluştur"],
25
+ },
26
+ signedInMarkers: ["Yeni sohbet", "Sohbetlerde ara", "Yakın zamandakiler", "Sohbet geçmişi", "Projeler", "Herhangi bir şey sor"],
27
+ responseActions: ["Yanıtı kopyala"],
28
+ };
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Canonical shape for a complete locale contribution.
3
+ *
4
+ * Each value is either a single string (one candidate) or a readonly array of strings
5
+ * (multiple candidates for the same semantic slot). The combiner in `index.ts` flattens
6
+ * every contribution into a deduped `string[]` per key, English-first.
7
+ *
8
+ * `tools` is keyed by logical tool id (stable API keys — callers pass `tool: "web_search"`).
9
+ * A locale only needs to list the tools whose display text differs from English.
10
+ */
11
+ export type LocaleStrings = {
12
+ composerTextbox: string | readonly string[];
13
+ sendButton: string | readonly string[];
14
+ searchChatsButton: string | readonly string[];
15
+ searchChatsPlaceholder: string | readonly string[];
16
+ newChat: string | readonly string[];
17
+ addFilesButton: string | readonly string[];
18
+ addFilesOpenerCandidates: string | readonly string[];
19
+ addPhotosFilesMenuItem: string | readonly string[];
20
+ projectSourcesTab: string | readonly string[];
21
+ projectSourcesAddSource: string | readonly string[];
22
+ projectSourcesUploadFiles: string | readonly string[];
23
+ copyResponse: string | readonly string[];
24
+ download: string | readonly string[];
25
+ downloadImage: string | readonly string[];
26
+ imageContainerHint: string | readonly string[];
27
+ modeLabels: string | readonly string[];
28
+ modeOpenerExtra: string | readonly string[];
29
+ tools: Record<"web_search" | "deep_research" | "create_image", string | readonly string[]>;
30
+ signedInMarkers: string | readonly string[];
31
+ transientAssistant: string | readonly string[];
32
+ stopControl: string | readonly string[];
33
+ stoppedAssistant: string | readonly string[];
34
+ responseActions: string | readonly string[];
35
+ loginBlocker: string | readonly string[];
36
+ captchaBlocker: string | readonly string[];
37
+ rateLimitBlocker: string | readonly string[];
38
+ };
39
+ /**
40
+ * The type for non-English locale files. Every key is optional so a contributor only
41
+ * needs to supply the strings that differ from English. `tools` is also partial.
42
+ */
43
+ export type LocaleContribution = Partial<Omit<LocaleStrings, "tools">> & {
44
+ tools?: Partial<Record<"web_search" | "deep_research" | "create_image", string | readonly string[]>>;
45
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Ukrainian (uk-UA). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=uk-UA, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export declare const uk: {
10
+ composerTextbox: string[];
11
+ sendButton: string[];
12
+ searchChatsButton: string[];
13
+ searchChatsPlaceholder: string[];
14
+ newChat: string[];
15
+ addFilesButton: string[];
16
+ addFilesOpenerCandidates: string[];
17
+ addPhotosFilesMenuItem: string[];
18
+ copyResponse: string[];
19
+ modeLabels: string[];
20
+ modeOpenerExtra: string[];
21
+ tools: {
22
+ web_search: string[];
23
+ deep_research: string[];
24
+ create_image: string[];
25
+ };
26
+ signedInMarkers: string[];
27
+ responseActions: string[];
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Ukrainian (uk-UA). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=uk-UA, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export const uk = {
10
+ composerTextbox: ["Запитайте будь-що"],
11
+ sendButton: ["Надіслати запит"],
12
+ searchChatsButton: ["Пошук чатів"],
13
+ searchChatsPlaceholder: ["Пошук у чатах…"],
14
+ newChat: ["Новий чат"],
15
+ addFilesButton: ["Додавайте файли й виконуйте інші дії"],
16
+ addFilesOpenerCandidates: ["Додавайте файли й виконуйте інші дії"],
17
+ addPhotosFilesMenuItem: ["Додати світлини та файли"],
18
+ copyResponse: ["Копіювати відповідь"],
19
+ modeLabels: ["Миттєвий", "Середній", "Високий", "Дуже високий"],
20
+ modeOpenerExtra: ["Налаштувати…"],
21
+ tools: {
22
+ web_search: ["Пошук в Інтернеті"],
23
+ deep_research: ["Глибоко дослідити"],
24
+ create_image: ["Створити зображення"],
25
+ },
26
+ signedInMarkers: ["Новий чат", "Пошук чатів", "Нещодавні", "Історія чатів", "Проєкти", "Запитайте будь-що"],
27
+ responseActions: ["Копіювати відповідь"],
28
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Urdu (ur). Captured 2026-06-09 against a live chatgpt.com session
3
+ * (html lang=ur, Google Translate confirmed off).
4
+ *
5
+ * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
+ *
7
+ * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ */
9
+ export declare const ur: {
10
+ composerTextbox: string[];
11
+ sendButton: string[];
12
+ searchChatsButton: string[];
13
+ searchChatsPlaceholder: string[];
14
+ newChat: string[];
15
+ addFilesButton: string[];
16
+ addFilesOpenerCandidates: string[];
17
+ addPhotosFilesMenuItem: string[];
18
+ copyResponse: string[];
19
+ modeLabels: string[];
20
+ modeOpenerExtra: string[];
21
+ tools: {
22
+ web_search: string[];
23
+ deep_research: string[];
24
+ create_image: string[];
25
+ };
26
+ signedInMarkers: string[];
27
+ responseActions: string[];
28
+ };