codex-chatgpt-control 0.2.0-alpha.1 → 0.5.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 (233) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +42 -2
  3. package/contracts/v1/fixtures/backend-capabilities.json +11 -0
  4. package/contracts/v1/fixtures/command-descriptors.json +289 -7
  5. package/contracts/v1/fixtures/describe-runner-run.json +5 -2
  6. package/contracts/v1/fixtures/doctor-scenario-preflight.json +45 -2
  7. package/contracts/v1/fixtures/help-root.json +1 -1
  8. package/contracts/v1/fixtures/output-json-parse-success.json +9 -0
  9. package/contracts/v1/fixtures/reports-create-redacted.json +1 -1
  10. package/contracts/v1/fixtures/run-timeout-partial.json +15 -4
  11. package/contracts/v1/fixtures/stream-in-progress.ndjson +3 -0
  12. package/contracts/v1/fixtures/stream-submitted-completed.ndjson +1 -1
  13. package/contracts/v1/fixtures/surface-chat-legacy.json +35 -0
  14. package/contracts/v1/fixtures/surface-chat-simplified.json +37 -0
  15. package/contracts/v1/fixtures/surface-sidebar-false-positive.json +29 -0
  16. package/contracts/v1/fixtures/surface-work-advanced.json +45 -0
  17. package/contracts/v1/fixtures/surface-work-basic.json +38 -0
  18. package/contracts/v1/fixtures/workflow-ask-success.json +8 -0
  19. package/contracts/v1/manifest.json +32 -1
  20. package/contracts/v1/parity-suite.json +121 -1
  21. package/contracts/v1/schemas/backend-request.schema.json +15 -0
  22. package/contracts/v1/schemas/manifest.schema.json +6 -3
  23. package/contracts/v1/schemas/surface-profile.schema.json +166 -0
  24. package/dist/codex-chatgpt-control-backend.mjs +3198 -340
  25. package/dist/codex-chatgpt-control.bundle.mjs +4454 -1555
  26. package/dist/src/backend/client.d.ts +26 -1
  27. package/dist/src/backend/client.js +23 -1
  28. package/dist/src/backend/protocol.d.ts +1 -1
  29. package/dist/src/backend/protocol.js +11 -0
  30. package/dist/src/backend/session.js +22 -0
  31. package/dist/src/browser/attach.d.ts +1 -0
  32. package/dist/src/browser/attach.js +3 -3
  33. package/dist/src/browser/clipboard.d.ts +11 -0
  34. package/dist/src/browser/clipboard.js +34 -7
  35. package/dist/src/browser/page-state.js +17 -4
  36. package/dist/src/client.d.ts +32 -1
  37. package/dist/src/client.js +72 -16
  38. package/dist/src/commands/artifacts.js +1 -7
  39. package/dist/src/commands/configuration.d.ts +15 -0
  40. package/dist/src/commands/configuration.js +674 -0
  41. package/dist/src/commands/context.js +3 -1
  42. package/dist/src/commands/conversation.d.ts +15 -0
  43. package/dist/src/commands/conversation.js +44 -0
  44. package/dist/src/commands/deadline.d.ts +8 -0
  45. package/dist/src/commands/deadline.js +14 -0
  46. package/dist/src/commands/doctor.js +47 -3
  47. package/dist/src/commands/experience.d.ts +12 -0
  48. package/dist/src/commands/experience.js +288 -0
  49. package/dist/src/commands/files.js +61 -13
  50. package/dist/src/commands/messages.d.ts +2 -1
  51. package/dist/src/commands/messages.js +349 -87
  52. package/dist/src/commands/modes.d.ts +4 -1
  53. package/dist/src/commands/modes.js +243 -44
  54. package/dist/src/commands/probes.d.ts +15 -0
  55. package/dist/src/commands/probes.js +64 -0
  56. package/dist/src/commands/registry.js +102 -8
  57. package/dist/src/commands/reports.js +1 -1
  58. package/dist/src/commands/response-actions.js +1 -7
  59. package/dist/src/commands/sequence.js +24 -1
  60. package/dist/src/commands/session.d.ts +2 -0
  61. package/dist/src/commands/session.js +50 -1
  62. package/dist/src/commands/threads.js +3 -31
  63. package/dist/src/commands/work.d.ts +6 -0
  64. package/dist/src/commands/work.js +338 -0
  65. package/dist/src/dom/generation-state.d.ts +7 -0
  66. package/dist/src/dom/generation-state.js +7 -1
  67. package/dist/src/dom/label-match.d.ts +3 -0
  68. package/dist/src/dom/label-match.js +25 -0
  69. package/dist/src/dom/locale/am.d.ts +8 -1
  70. package/dist/src/dom/locale/am.js +8 -1
  71. package/dist/src/dom/locale/ar.d.ts +9 -1
  72. package/dist/src/dom/locale/ar.js +9 -1
  73. package/dist/src/dom/locale/bg.d.ts +9 -1
  74. package/dist/src/dom/locale/bg.js +9 -1
  75. package/dist/src/dom/locale/bn.d.ts +9 -1
  76. package/dist/src/dom/locale/bn.js +9 -1
  77. package/dist/src/dom/locale/bs.d.ts +8 -1
  78. package/dist/src/dom/locale/bs.js +8 -1
  79. package/dist/src/dom/locale/ca.d.ts +8 -1
  80. package/dist/src/dom/locale/ca.js +8 -1
  81. package/dist/src/dom/locale/cs.d.ts +8 -1
  82. package/dist/src/dom/locale/cs.js +8 -1
  83. package/dist/src/dom/locale/da.d.ts +7 -1
  84. package/dist/src/dom/locale/da.js +7 -1
  85. package/dist/src/dom/locale/de.d.ts +10 -3
  86. package/dist/src/dom/locale/de.js +10 -3
  87. package/dist/src/dom/locale/el.d.ts +8 -1
  88. package/dist/src/dom/locale/el.js +8 -1
  89. package/dist/src/dom/locale/en.d.ts +40 -1
  90. package/dist/src/dom/locale/en.js +42 -1
  91. package/dist/src/dom/locale/es-419.d.ts +8 -1
  92. package/dist/src/dom/locale/es-419.js +8 -1
  93. package/dist/src/dom/locale/es-ES.d.ts +8 -1
  94. package/dist/src/dom/locale/es-ES.js +8 -1
  95. package/dist/src/dom/locale/et.d.ts +8 -1
  96. package/dist/src/dom/locale/et.js +8 -1
  97. package/dist/src/dom/locale/fa.d.ts +9 -1
  98. package/dist/src/dom/locale/fa.js +9 -1
  99. package/dist/src/dom/locale/fi.d.ts +8 -1
  100. package/dist/src/dom/locale/fi.js +8 -1
  101. package/dist/src/dom/locale/fr-CA.d.ts +8 -1
  102. package/dist/src/dom/locale/fr-CA.js +8 -1
  103. package/dist/src/dom/locale/fr-FR.d.ts +8 -3
  104. package/dist/src/dom/locale/fr-FR.js +8 -3
  105. package/dist/src/dom/locale/gu.d.ts +8 -1
  106. package/dist/src/dom/locale/gu.js +8 -1
  107. package/dist/src/dom/locale/hi.d.ts +8 -1
  108. package/dist/src/dom/locale/hi.js +8 -1
  109. package/dist/src/dom/locale/hr.d.ts +7 -1
  110. package/dist/src/dom/locale/hr.js +7 -1
  111. package/dist/src/dom/locale/hu.d.ts +8 -1
  112. package/dist/src/dom/locale/hu.js +8 -1
  113. package/dist/src/dom/locale/hy.d.ts +9 -1
  114. package/dist/src/dom/locale/hy.js +9 -1
  115. package/dist/src/dom/locale/id.d.ts +8 -1
  116. package/dist/src/dom/locale/id.js +8 -1
  117. package/dist/src/dom/locale/index.d.ts +20 -1
  118. package/dist/src/dom/locale/index.js +102 -0
  119. package/dist/src/dom/locale/is.d.ts +8 -1
  120. package/dist/src/dom/locale/is.js +8 -1
  121. package/dist/src/dom/locale/it.d.ts +8 -1
  122. package/dist/src/dom/locale/it.js +8 -1
  123. package/dist/src/dom/locale/ja.d.ts +8 -1
  124. package/dist/src/dom/locale/ja.js +8 -1
  125. package/dist/src/dom/locale/ka.d.ts +8 -1
  126. package/dist/src/dom/locale/ka.js +8 -1
  127. package/dist/src/dom/locale/kk.d.ts +8 -1
  128. package/dist/src/dom/locale/kk.js +8 -1
  129. package/dist/src/dom/locale/kn.d.ts +9 -1
  130. package/dist/src/dom/locale/kn.js +9 -1
  131. package/dist/src/dom/locale/ko.d.ts +8 -1
  132. package/dist/src/dom/locale/ko.js +8 -1
  133. package/dist/src/dom/locale/lt.d.ts +9 -1
  134. package/dist/src/dom/locale/lt.js +9 -1
  135. package/dist/src/dom/locale/lv.d.ts +8 -1
  136. package/dist/src/dom/locale/lv.js +8 -1
  137. package/dist/src/dom/locale/mk.d.ts +7 -1
  138. package/dist/src/dom/locale/mk.js +7 -1
  139. package/dist/src/dom/locale/ml.d.ts +9 -1
  140. package/dist/src/dom/locale/ml.js +9 -1
  141. package/dist/src/dom/locale/mn.d.ts +9 -1
  142. package/dist/src/dom/locale/mn.js +9 -1
  143. package/dist/src/dom/locale/mr.d.ts +9 -1
  144. package/dist/src/dom/locale/mr.js +9 -1
  145. package/dist/src/dom/locale/ms.d.ts +8 -1
  146. package/dist/src/dom/locale/ms.js +8 -1
  147. package/dist/src/dom/locale/my.d.ts +8 -1
  148. package/dist/src/dom/locale/my.js +8 -1
  149. package/dist/src/dom/locale/nb.d.ts +8 -1
  150. package/dist/src/dom/locale/nb.js +8 -1
  151. package/dist/src/dom/locale/nl.d.ts +8 -1
  152. package/dist/src/dom/locale/nl.js +8 -1
  153. package/dist/src/dom/locale/pa.d.ts +9 -1
  154. package/dist/src/dom/locale/pa.js +9 -1
  155. package/dist/src/dom/locale/pl.d.ts +8 -1
  156. package/dist/src/dom/locale/pl.js +8 -1
  157. package/dist/src/dom/locale/pt-BR.d.ts +8 -1
  158. package/dist/src/dom/locale/pt-BR.js +8 -1
  159. package/dist/src/dom/locale/pt-PT.d.ts +8 -1
  160. package/dist/src/dom/locale/pt-PT.js +8 -1
  161. package/dist/src/dom/locale/ro.d.ts +7 -1
  162. package/dist/src/dom/locale/ro.js +7 -1
  163. package/dist/src/dom/locale/ru.d.ts +5 -1
  164. package/dist/src/dom/locale/ru.js +5 -1
  165. package/dist/src/dom/locale/sk.d.ts +8 -1
  166. package/dist/src/dom/locale/sk.js +8 -1
  167. package/dist/src/dom/locale/sl.d.ts +8 -1
  168. package/dist/src/dom/locale/sl.js +8 -1
  169. package/dist/src/dom/locale/so.d.ts +8 -1
  170. package/dist/src/dom/locale/so.js +8 -1
  171. package/dist/src/dom/locale/sq.d.ts +8 -1
  172. package/dist/src/dom/locale/sq.js +8 -1
  173. package/dist/src/dom/locale/sr.d.ts +5 -1
  174. package/dist/src/dom/locale/sr.js +5 -1
  175. package/dist/src/dom/locale/sv.d.ts +8 -1
  176. package/dist/src/dom/locale/sv.js +8 -1
  177. package/dist/src/dom/locale/sw.d.ts +8 -1
  178. package/dist/src/dom/locale/sw.js +8 -1
  179. package/dist/src/dom/locale/ta.d.ts +9 -1
  180. package/dist/src/dom/locale/ta.js +9 -1
  181. package/dist/src/dom/locale/te.d.ts +9 -1
  182. package/dist/src/dom/locale/te.js +9 -1
  183. package/dist/src/dom/locale/th.d.ts +8 -1
  184. package/dist/src/dom/locale/th.js +8 -1
  185. package/dist/src/dom/locale/tl.d.ts +4 -5
  186. package/dist/src/dom/locale/tl.js +4 -5
  187. package/dist/src/dom/locale/tr.d.ts +8 -1
  188. package/dist/src/dom/locale/tr.js +8 -1
  189. package/dist/src/dom/locale/types.d.ts +25 -1
  190. package/dist/src/dom/locale/uk.d.ts +8 -1
  191. package/dist/src/dom/locale/uk.js +8 -1
  192. package/dist/src/dom/locale/ur.d.ts +8 -1
  193. package/dist/src/dom/locale/ur.js +8 -1
  194. package/dist/src/dom/locale/vi.d.ts +8 -1
  195. package/dist/src/dom/locale/vi.js +8 -1
  196. package/dist/src/dom/locale/zh-HK.d.ts +9 -1
  197. package/dist/src/dom/locale/zh-HK.js +10 -2
  198. package/dist/src/dom/locale/zh-Hans.d.ts +9 -1
  199. package/dist/src/dom/locale/zh-Hans.js +9 -1
  200. package/dist/src/dom/locale/zh-TW.d.ts +9 -1
  201. package/dist/src/dom/locale/zh-TW.js +9 -1
  202. package/dist/src/dom/menus.js +13 -2
  203. package/dist/src/dom/selectors.js +6 -1
  204. package/dist/src/dom/wait-snapshot.d.ts +43 -0
  205. package/dist/src/dom/wait-snapshot.js +127 -0
  206. package/dist/src/index.d.ts +3 -0
  207. package/dist/src/index.js +3 -0
  208. package/dist/src/runner/responses.d.ts +3 -1
  209. package/dist/src/runner/responses.js +16 -1
  210. package/dist/src/runner/result.js +129 -4
  211. package/dist/src/runner/stream.d.ts +1 -1
  212. package/dist/src/runner/stream.js +6 -0
  213. package/dist/src/runner/types.d.ts +35 -1
  214. package/dist/src/safety/risk.d.ts +11 -0
  215. package/dist/src/safety/risk.js +11 -0
  216. package/dist/src/scripts/apply-intelligence-locale-captures.d.ts +6 -0
  217. package/dist/src/scripts/apply-intelligence-locale-captures.js +147 -15
  218. package/dist/src/scripts/capture-intelligence-locales.d.ts +3 -0
  219. package/dist/src/scripts/capture-intelligence-locales.js +372 -3
  220. package/dist/src/scripts/capture-surface-profile.d.ts +23 -0
  221. package/dist/src/scripts/capture-surface-profile.js +304 -0
  222. package/dist/src/scripts/live-smoke/scenarios.js +34 -1
  223. package/dist/src/scripts/live-smoke.js +1 -0
  224. package/dist/src/types.d.ts +273 -2
  225. package/package.json +4 -3
  226. package/references/2026-07-16-chat-work-surfaces.md +87 -0
  227. package/references/agents-runner.md +13 -2
  228. package/references/backend-protocol.md +19 -7
  229. package/references/language-coverage.md +40 -3
  230. package/references/localization.md +48 -10
  231. package/references/python-parity.md +16 -4
  232. package/references/responses-adapter.md +12 -1
  233. package/references/troubleshooting.md +49 -6
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
6
  *
7
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
7
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
8
8
  */
9
9
  export const fi = {
10
10
  composerTextbox: ["Keskustele ChatGPT:n kanssa"],
@@ -17,6 +17,12 @@ export const fi = {
17
17
  addPhotosFilesMenuItem: ["Lisää valokuvia & tiedostoja"],
18
18
  copyResponse: ["Kopioi vastaus"],
19
19
  modeLabels: ["Välitön", "Keskitaso", "Korkea", "Erittäin korkea"],
20
+ modeOptions: {
21
+ instant: ["Välitön"],
22
+ medium: ["Keskitaso"],
23
+ high: ["Korkea"],
24
+ extraHigh: ["Erittäin korkea"],
25
+ },
20
26
  modeOpenerExtra: ["Määritä..."],
21
27
  tools: {
22
28
  web_search: ["Verkkohaku"],
@@ -25,4 +31,5 @@ export const fi = {
25
31
  },
26
32
  signedInMarkers: ["Uusi keskustelu", "Hae keskusteluista", "Äskettäiset", "Keskusteluhistoria", "Projektit", "Keskustele ChatGPT:n kanssa"],
27
33
  responseActions: ["Kopioi vastaus"],
34
+ stopControl: ["Lopeta vastaaminen"],
28
35
  };
@@ -5,7 +5,7 @@
5
5
  * Uses distinctly Québécois vocabulary: "clavardage" for chat, "requête" for prompt.
6
6
  * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
7
7
  *
8
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
9
9
  */
10
10
  export declare const frCA: {
11
11
  composerTextbox: string[];
@@ -18,6 +18,12 @@ export declare const frCA: {
18
18
  addPhotosFilesMenuItem: string[];
19
19
  copyResponse: string[];
20
20
  modeLabels: string[];
21
+ modeOptions: {
22
+ instant: string[];
23
+ medium: string[];
24
+ high: string[];
25
+ extraHigh: string[];
26
+ };
21
27
  modeOpenerExtra: string[];
22
28
  tools: {
23
29
  web_search: string[];
@@ -26,4 +32,5 @@ export declare const frCA: {
26
32
  };
27
33
  signedInMarkers: string[];
28
34
  responseActions: string[];
35
+ stopControl: string[];
29
36
  };
@@ -5,7 +5,7 @@
5
5
  * Uses distinctly Québécois vocabulary: "clavardage" for chat, "requête" for prompt.
6
6
  * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
7
7
  *
8
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
9
9
  */
10
10
  export const frCA = {
11
11
  composerTextbox: ["Converser avec ChatGPT"],
@@ -18,6 +18,12 @@ export const frCA = {
18
18
  addPhotosFilesMenuItem: ["Ajouter des photos et des fichiers"],
19
19
  copyResponse: ["Copier la réponse"],
20
20
  modeLabels: ["Instantané", "Moyen", "Élevé", "Très élevé"],
21
+ modeOptions: {
22
+ instant: ["Instantané"],
23
+ medium: ["Moyen"],
24
+ high: ["Élevé"],
25
+ extraHigh: ["Très élevé"],
26
+ },
21
27
  modeOpenerExtra: ["Configurer..."],
22
28
  tools: {
23
29
  web_search: ["Recherche sur Internet"],
@@ -26,4 +32,5 @@ export const frCA = {
26
32
  },
27
33
  signedInMarkers: ["Nouvelle session de clavardage", "Rechercher les clavardages", "Récentes", "Historique des clavardages", "Projets", "Converser avec ChatGPT"],
28
34
  responseActions: ["Copier la réponse"],
35
+ stopControl: ["Arrêter de répondre"],
29
36
  };
@@ -3,10 +3,9 @@
3
3
  * (html lang=fr-FR, Google Translate confirmed off).
4
4
  *
5
5
  * Not yet captured — fall back to English + `selector_drift`: `download`, `downloadImage`,
6
- * `imageContainerHint`, `transientAssistant`, `stopControl`, and the login/captcha/rate-limit
7
- * blocker copy.
6
+ * `imageContainerHint`, `transientAssistant`, and the login/captcha/rate-limit blocker copy.
8
7
  *
9
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
10
9
  */
11
10
  export declare const frFR: {
12
11
  composerTextbox: string[];
@@ -19,6 +18,11 @@ export declare const frFR: {
19
18
  addPhotosFilesMenuItem: string[];
20
19
  copyResponse: string[];
21
20
  modeLabels: string[];
21
+ modeOptions: {
22
+ medium: string[];
23
+ high: string[];
24
+ extraHigh: string[];
25
+ };
22
26
  modeOpenerExtra: string[];
23
27
  tools: {
24
28
  web_search: string[];
@@ -27,4 +31,5 @@ export declare const frFR: {
27
31
  };
28
32
  signedInMarkers: string[];
29
33
  responseActions: string[];
34
+ stopControl: string[];
30
35
  };
@@ -3,10 +3,9 @@
3
3
  * (html lang=fr-FR, Google Translate confirmed off).
4
4
  *
5
5
  * Not yet captured — fall back to English + `selector_drift`: `download`, `downloadImage`,
6
- * `imageContainerHint`, `transientAssistant`, `stopControl`, and the login/captcha/rate-limit
7
- * blocker copy.
6
+ * `imageContainerHint`, `transientAssistant`, and the login/captcha/rate-limit blocker copy.
8
7
  *
9
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
8
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
10
9
  */
11
10
  export const frFR = {
12
11
  composerTextbox: ["Discuter avec ChatGPT"],
@@ -19,6 +18,11 @@ export const frFR = {
19
18
  addPhotosFilesMenuItem: ["Ajouter des photos et fichiers"],
20
19
  copyResponse: ["Copier la réponse"],
21
20
  modeLabels: ["Moyen", "Avancé", "Très élevé"],
21
+ modeOptions: {
22
+ medium: ["Moyen"],
23
+ high: ["Avancé"],
24
+ extraHigh: ["Très élevé"],
25
+ },
22
26
  modeOpenerExtra: ["Configurer"],
23
27
  tools: {
24
28
  web_search: ["Recherche sur le Web"],
@@ -27,4 +31,5 @@ export const frFR = {
27
31
  },
28
32
  signedInMarkers: ["Nouveau chat", "Rechercher dans les chats", "Récents", "Bibliothèque", "Projets", "Discuter avec ChatGPT"],
29
33
  responseActions: ["Copier la réponse"],
34
+ stopControl: ["Interrompre la réponse"],
30
35
  };
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
6
  *
7
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
7
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
8
8
  */
9
9
  export declare const gu: {
10
10
  composerTextbox: string[];
@@ -17,6 +17,12 @@ export declare const gu: {
17
17
  addPhotosFilesMenuItem: string[];
18
18
  copyResponse: string[];
19
19
  modeLabels: string[];
20
+ modeOptions: {
21
+ instant: string[];
22
+ medium: string[];
23
+ high: string[];
24
+ extraHigh: string[];
25
+ };
20
26
  modeOpenerExtra: string[];
21
27
  tools: {
22
28
  web_search: string[];
@@ -25,4 +31,5 @@ export declare const gu: {
25
31
  };
26
32
  signedInMarkers: string[];
27
33
  responseActions: string[];
34
+ stopControl: string[];
28
35
  };
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
6
  *
7
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
7
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
8
8
  */
9
9
  export const gu = {
10
10
  composerTextbox: ["ChatGPT સાથે ચૅટ"],
@@ -17,6 +17,12 @@ export const gu = {
17
17
  addPhotosFilesMenuItem: ["ફોટા અને ફાઇલો ઉમેરો"],
18
18
  copyResponse: ["પ્રતિભાવ કૉપિ કરો"],
19
19
  modeLabels: ["તરત", "મધ્યમ", "ઉચ્ચ", "અતિ ઉચ્ચ"],
20
+ modeOptions: {
21
+ instant: ["તરત"],
22
+ medium: ["મધ્યમ"],
23
+ high: ["ઉચ્ચ"],
24
+ extraHigh: ["અતિ ઉચ્ચ"],
25
+ },
20
26
  modeOpenerExtra: ["કન્ફિગર કરો..."],
21
27
  tools: {
22
28
  web_search: ["વેબ શોધ"],
@@ -25,4 +31,5 @@ export const gu = {
25
31
  },
26
32
  signedInMarkers: ["નવી ચેટ", "ચેટ શોધો", "તાજેતર", "ચેટ ઇતિહાસ", "પ્રોજેક્ટ", "ChatGPT સાથે ચૅટ"],
27
33
  responseActions: ["પ્રતિભાવ કૉપિ કરો"],
34
+ stopControl: ["જવાબ આપવાનું બંધ કરો"],
28
35
  };
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
6
  *
7
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
7
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
8
8
  */
9
9
  export declare const hi: {
10
10
  composerTextbox: string[];
@@ -17,6 +17,12 @@ export declare const hi: {
17
17
  addPhotosFilesMenuItem: string[];
18
18
  copyResponse: string[];
19
19
  modeLabels: string[];
20
+ modeOptions: {
21
+ instant: string[];
22
+ medium: string[];
23
+ high: string[];
24
+ extraHigh: string[];
25
+ };
20
26
  modeOpenerExtra: string[];
21
27
  tools: {
22
28
  web_search: string[];
@@ -25,4 +31,5 @@ export declare const hi: {
25
31
  };
26
32
  signedInMarkers: string[];
27
33
  responseActions: string[];
34
+ stopControl: string[];
28
35
  };
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
6
  *
7
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
7
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
8
8
  */
9
9
  export const hi = {
10
10
  composerTextbox: ["ChatGPT के साथ चैट करें"],
@@ -17,6 +17,12 @@ export const hi = {
17
17
  addPhotosFilesMenuItem: ["फ़ोटो और फ़ाइलें जोड़ें"],
18
18
  copyResponse: ["जवाब को कॉपी करें"],
19
19
  modeLabels: ["तुरंत", "मध्यम", "उच्च", "बहुत उच्च"],
20
+ modeOptions: {
21
+ instant: ["तुरंत"],
22
+ medium: ["मध्यम"],
23
+ high: ["उच्च"],
24
+ extraHigh: ["बहुत उच्च"],
25
+ },
20
26
  modeOpenerExtra: ["कॉन्फ़िगर करें..."],
21
27
  tools: {
22
28
  web_search: ["वेब सर्च"],
@@ -25,4 +31,5 @@ export const hi = {
25
31
  },
26
32
  signedInMarkers: ["नई चैट", "चैट खोजें", "हालिया", "चैट हिस्टरी", "प्रोजेक्ट्स", "ChatGPT के साथ चैट करें"],
27
33
  responseActions: ["जवाब को कॉपी करें"],
34
+ stopControl: ["उत्तर रोकें"],
28
35
  };
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
6
  *
7
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
7
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
8
8
  */
9
9
  export declare const hr: {
10
10
  composerTextbox: string[];
@@ -17,6 +17,11 @@ export declare const hr: {
17
17
  addPhotosFilesMenuItem: string[];
18
18
  copyResponse: string[];
19
19
  modeLabels: string[];
20
+ modeOptions: {
21
+ medium: string[];
22
+ high: string[];
23
+ extraHigh: string[];
24
+ };
20
25
  modeOpenerExtra: string[];
21
26
  tools: {
22
27
  web_search: string[];
@@ -25,4 +30,5 @@ export declare const hr: {
25
30
  };
26
31
  signedInMarkers: string[];
27
32
  responseActions: string[];
33
+ stopControl: string[];
28
34
  };
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
6
  *
7
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
7
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
8
8
  */
9
9
  export const hr = {
10
10
  composerTextbox: ["Razgovor s ChatGPT-om"],
@@ -17,6 +17,11 @@ export const hr = {
17
17
  addPhotosFilesMenuItem: ["Dodaj fotografije i datoteke"],
18
18
  copyResponse: ["Kopiraj odgovor"],
19
19
  modeLabels: ["Srednje", "Visoko", "Vrlo visoka"],
20
+ modeOptions: {
21
+ medium: ["Srednje"],
22
+ high: ["Visoko"],
23
+ extraHigh: ["Vrlo visoka"],
24
+ },
20
25
  modeOpenerExtra: ["Konfiguriraj…"],
21
26
  tools: {
22
27
  web_search: ["Mrežno pretraživanje"],
@@ -25,4 +30,5 @@ export const hr = {
25
30
  },
26
31
  signedInMarkers: ["Novi razgovor", "Pretraži razgovore", "Nedavni sadržaj", "Povijest razgovora", "Projekti", "Razgovor s ChatGPT-om"],
27
32
  responseActions: ["Kopiraj odgovor"],
33
+ stopControl: ["Zaustavi odgovaranje"],
28
34
  };
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
6
  *
7
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
7
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
8
8
  */
9
9
  export declare const hu: {
10
10
  composerTextbox: string[];
@@ -17,6 +17,12 @@ export declare const hu: {
17
17
  addPhotosFilesMenuItem: string[];
18
18
  copyResponse: string[];
19
19
  modeLabels: string[];
20
+ modeOptions: {
21
+ instant: string[];
22
+ medium: string[];
23
+ high: string[];
24
+ extraHigh: string[];
25
+ };
20
26
  modeOpenerExtra: string[];
21
27
  tools: {
22
28
  web_search: string[];
@@ -25,4 +31,5 @@ export declare const hu: {
25
31
  };
26
32
  signedInMarkers: string[];
27
33
  responseActions: string[];
34
+ stopControl: string[];
28
35
  };
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
6
  *
7
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
7
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
8
8
  */
9
9
  export const hu = {
10
10
  composerTextbox: ["Csevegés a ChatGPT-vel"],
@@ -17,6 +17,12 @@ export const hu = {
17
17
  addPhotosFilesMenuItem: ["Fotók és fájlok hozzáadása"],
18
18
  copyResponse: ["Válasz másolása"],
19
19
  modeLabels: ["Azonnali", "Közepes", "Magas", "Kiemelkedően magas"],
20
+ modeOptions: {
21
+ instant: ["Azonnali"],
22
+ medium: ["Közepes"],
23
+ high: ["Magas"],
24
+ extraHigh: ["Kiemelkedően magas"],
25
+ },
20
26
  modeOpenerExtra: ["Konfigurálás..."],
21
27
  tools: {
22
28
  web_search: ["Internetes keresés"],
@@ -25,4 +31,5 @@ export const hu = {
25
31
  },
26
32
  signedInMarkers: ["Új csevegés", "Beszélgetések keresése", "Legutóbbiak", "Csevegési előzmények", "Projektek", "Csevegés a ChatGPT-vel"],
27
33
  responseActions: ["Válasz másolása"],
34
+ stopControl: ["Válasz leállítása"],
28
35
  };
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
6
  *
7
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
7
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
8
8
  */
9
9
  export declare const hy: {
10
10
  composerTextbox: string[];
@@ -17,6 +17,13 @@ export declare const hy: {
17
17
  addPhotosFilesMenuItem: string[];
18
18
  copyResponse: string[];
19
19
  modeLabels: string[];
20
+ modeOptions: {
21
+ instant: string[];
22
+ medium: string[];
23
+ high: string[];
24
+ extraHigh: string[];
25
+ pro: string[];
26
+ };
20
27
  modeOpenerExtra: string[];
21
28
  tools: {
22
29
  web_search: string[];
@@ -25,4 +32,5 @@ export declare const hy: {
25
32
  };
26
33
  signedInMarkers: string[];
27
34
  responseActions: string[];
35
+ stopControl: string[];
28
36
  };
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
6
  *
7
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
7
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
8
8
  */
9
9
  export const hy = {
10
10
  composerTextbox: ["Զրույց ChatGPT-ի հետ"],
@@ -17,6 +17,13 @@ export const hy = {
17
17
  addPhotosFilesMenuItem: ["Ավելացնել լուսանկարներ և ֆայլեր"],
18
18
  copyResponse: ["Պատճենել պատասխանը"],
19
19
  modeLabels: ["Ակնթարթային", "Միջին", "Բարձր", "Շատ բարձր", "Պրո"],
20
+ modeOptions: {
21
+ instant: ["Ակնթարթային"],
22
+ medium: ["Միջին"],
23
+ high: ["Բարձր"],
24
+ extraHigh: ["Շատ բարձր"],
25
+ pro: ["Պրո"],
26
+ },
20
27
  modeOpenerExtra: ["Կազմաձևել․․․"],
21
28
  tools: {
22
29
  web_search: ["Վեբ որոնում"],
@@ -25,4 +32,5 @@ export const hy = {
25
32
  },
26
33
  signedInMarkers: ["Նոր զրույց", "Որոնել զրույցները", "Թարմ", "Զրույցների պատմություն", "Նախագծեր", "Զրույց ChatGPT-ի հետ"],
27
34
  responseActions: ["Պատճենել պատասխանը"],
35
+ stopControl: ["Դադարեցնել պատասխանելը"],
28
36
  };
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
6
  *
7
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
7
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
8
8
  */
9
9
  export declare const id: {
10
10
  composerTextbox: string[];
@@ -17,6 +17,12 @@ export declare const id: {
17
17
  addPhotosFilesMenuItem: string[];
18
18
  copyResponse: string[];
19
19
  modeLabels: string[];
20
+ modeOptions: {
21
+ instant: string[];
22
+ medium: string[];
23
+ high: string[];
24
+ extraHigh: string[];
25
+ };
20
26
  modeOpenerExtra: string[];
21
27
  tools: {
22
28
  web_search: string[];
@@ -25,4 +31,5 @@ export declare const id: {
25
31
  };
26
32
  signedInMarkers: string[];
27
33
  responseActions: string[];
34
+ stopControl: string[];
28
35
  };
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Some non-Intelligence surfaces may still fall back to English + `selector_drift`.
6
6
  *
7
- * Intelligence picker labels updated 2026-06-10 from a visible ChatGPT Pro session.
7
+ * Intelligence picker labels updated 2026-06-10 and stop-control labels updated 2026-06-15 from visible ChatGPT Pro sessions.
8
8
  */
9
9
  export const id = {
10
10
  composerTextbox: ["Obrolan dengan ChatGPT"],
@@ -17,6 +17,12 @@ export const id = {
17
17
  addPhotosFilesMenuItem: ["Tambah foto & file"],
18
18
  copyResponse: ["Salin respons"],
19
19
  modeLabels: ["Instan", "Sedang", "Tinggi", "Sangat Tinggi"],
20
+ modeOptions: {
21
+ instant: ["Instan"],
22
+ medium: ["Sedang"],
23
+ high: ["Tinggi"],
24
+ extraHigh: ["Sangat Tinggi"],
25
+ },
20
26
  modeOpenerExtra: ["Konfigurasi..."],
21
27
  tools: {
22
28
  web_search: ["Pencarian web"],
@@ -25,4 +31,5 @@ export const id = {
25
31
  },
26
32
  signedInMarkers: ["Obrolan baru", "Cari obrolan", "Terkini", "Riwayat obrolan", "Proyek", "Obrolan dengan ChatGPT"],
27
33
  responseActions: ["Salin respons"],
34
+ stopControl: ["Hentikan jawaban"],
28
35
  };
@@ -35,6 +35,17 @@
35
35
  * import { de } from "./de.js";
36
36
  * const locales = [en, de] as const;
37
37
  */
38
+ import type { ConfigurationAxisLabelId, ConfigurationOptionId, ExperienceOptionId, ModeOptionId } from "./types.js";
39
+ export declare const localeCoverageSummary: {
40
+ readonly registeredLocaleCount: number;
41
+ readonly nonEnglishLocaleCount: number;
42
+ readonly runningState: {
43
+ readonly stopControlLocaleCount: number;
44
+ readonly stoppedAssistantLocaleCount: number;
45
+ readonly nonEnglishStopControlLocaleCount: number;
46
+ readonly nonEnglishStoppedAssistantLocaleCount: number;
47
+ };
48
+ };
38
49
  /**
39
50
  * The combined locale registry. Values are `string[]` (mutable; English-first; deduped).
40
51
  * Consumers treat this identically to the previous `as const` object — the array contents
@@ -42,6 +53,8 @@
42
53
  */
43
54
  export declare const localeLabels: {
44
55
  composerTextbox: string[];
56
+ workComposerTextbox: string[];
57
+ newWork: string[];
45
58
  sendButton: string[];
46
59
  searchChatsButton: string[];
47
60
  searchChatsPlaceholder: string[];
@@ -57,7 +70,13 @@ export declare const localeLabels: {
57
70
  downloadImage: string[];
58
71
  imageContainerHint: string[];
59
72
  modeLabels: string[];
73
+ modeOptions: Record<ModeOptionId, string[]>;
60
74
  modeOpenerExtra: string[];
75
+ experienceOptions: Record<ExperienceOptionId, string[]>;
76
+ configurationAxes: Record<ConfigurationAxisLabelId, string[]>;
77
+ configurationOptions: Record<ConfigurationOptionId, string[]>;
78
+ threadActionMenuItems: string[];
79
+ threadActionPrefixes: string[];
61
80
  tools: Record<string, string[]>;
62
81
  signedInMarkers: string[];
63
82
  transientAssistant: string[];
@@ -76,4 +95,4 @@ export declare function escapeRegExp(value: string): string;
76
95
  * English candidate while transparently supporting added locales.
77
96
  */
78
97
  export declare function anyLabelPattern(candidates: readonly string[]): RegExp;
79
- export type { LocaleStrings, LocaleContribution } from "./types.js";
98
+ export type { ConfigurationAxisContribution, ConfigurationAxisLabelId, ConfigurationAxisLabels, ConfigurationOptionContribution, ConfigurationOptionId, ConfigurationOptionLabels, ExperienceOptionContribution, ExperienceOptionId, ExperienceOptionLabels, LocaleContribution, LocaleStrings, ModeOptionContribution, ModeOptionId, ModeOptionLabels } from "./types.js";
@@ -103,7 +103,56 @@ import { ta } from "./ta.js";
103
103
  // --- Locale registration ---
104
104
  // English MUST be first (canonical). Append additional locale objects here.
105
105
  const locales = [en, de, esES, frFR, zhHK, zhTW, ja, it, vi, am, ar, bg, bs, ca, cs, da, el, es419, et, fa, fi, frCA, gu, hi, hr, hu, hy, id, isIS, ka, kk, kn, ko, lt, zhHans, ur, uk, ptBR, ptPT, pl, sk, ro, nb, ml, ru, pa, mr, tr, sw, te, tl, th, bn, ms, so, nl, sv, lv, mk, sq, sl, sr, mn, my, ta];
106
+ function hasLocaleKey(locale, key) {
107
+ const value = locale[key];
108
+ if (typeof value === "string")
109
+ return value.trim().length > 0;
110
+ return Array.isArray(value) && value.some(candidate => typeof candidate === "string" && candidate.trim().length > 0);
111
+ }
112
+ function countLocalesWithKey(localeList, key) {
113
+ return localeList.filter(locale => hasLocaleKey(locale, key)).length;
114
+ }
115
+ export const localeCoverageSummary = {
116
+ registeredLocaleCount: locales.length,
117
+ nonEnglishLocaleCount: Math.max(0, locales.length - 1),
118
+ runningState: {
119
+ stopControlLocaleCount: countLocalesWithKey(locales, "stopControl"),
120
+ stoppedAssistantLocaleCount: countLocalesWithKey(locales, "stoppedAssistant"),
121
+ nonEnglishStopControlLocaleCount: countLocalesWithKey(locales.slice(1), "stopControl"),
122
+ nonEnglishStoppedAssistantLocaleCount: countLocalesWithKey(locales.slice(1), "stoppedAssistant")
123
+ }
124
+ };
106
125
  const TOOL_IDS = ["web_search", "deep_research", "create_image"];
126
+ const MODE_OPTION_IDS = [
127
+ "latest",
128
+ "instant",
129
+ "thinking",
130
+ "extended",
131
+ "medium",
132
+ "high",
133
+ "extraHigh",
134
+ "pro",
135
+ ];
136
+ const EXPERIENCE_OPTION_IDS = ["chat", "work"];
137
+ const CONFIGURATION_AXIS_IDS = [
138
+ "model",
139
+ "intelligence",
140
+ "effort",
141
+ "speed",
142
+ "advanced",
143
+ ];
144
+ const CONFIGURATION_OPTION_IDS = [
145
+ "instant",
146
+ "light",
147
+ "medium",
148
+ "high",
149
+ "extraHigh",
150
+ "max",
151
+ "ultra",
152
+ "pro",
153
+ "standard",
154
+ "fast",
155
+ ];
107
156
  /**
108
157
  * Flatten contributions for a single non-tools key, deduplicating strings while
109
158
  * preserving first-seen order (English first).
@@ -148,9 +197,52 @@ function flattenTool(localeList, toolId) {
148
197
  }
149
198
  return result;
150
199
  }
200
+ /**
201
+ * Flatten contributions for a single semantic mode id across all locales.
202
+ */
203
+ function flattenModeOption(localeList, optionId) {
204
+ const seen = new Set();
205
+ const result = [];
206
+ for (const locale of localeList) {
207
+ const modeOptions = locale["modeOptions"];
208
+ if (modeOptions === undefined || modeOptions === null)
209
+ continue;
210
+ const value = modeOptions[optionId];
211
+ if (value === undefined || value === null)
212
+ continue;
213
+ const candidates = typeof value === "string" ? [value] : value;
214
+ for (const candidate of candidates) {
215
+ if (candidate.length > 0 && !seen.has(candidate)) {
216
+ seen.add(candidate);
217
+ result.push(candidate);
218
+ }
219
+ }
220
+ }
221
+ return result;
222
+ }
223
+ function flattenNestedLabel(localeList, group, id) {
224
+ const seen = new Set();
225
+ const result = [];
226
+ for (const locale of localeList) {
227
+ const contribution = locale[group];
228
+ const value = contribution?.[id];
229
+ if (value === undefined)
230
+ continue;
231
+ const candidates = typeof value === "string" ? [value] : value;
232
+ for (const candidate of candidates) {
233
+ if (candidate.length > 0 && !seen.has(candidate)) {
234
+ seen.add(candidate);
235
+ result.push(candidate);
236
+ }
237
+ }
238
+ }
239
+ return result;
240
+ }
151
241
  // Build the combined localeLabels object by flattening all locales.
152
242
  const nonToolKeys = [
153
243
  "composerTextbox",
244
+ "workComposerTextbox",
245
+ "newWork",
154
246
  "sendButton",
155
247
  "searchChatsButton",
156
248
  "searchChatsPlaceholder",
@@ -167,6 +259,8 @@ const nonToolKeys = [
167
259
  "imageContainerHint",
168
260
  "modeLabels",
169
261
  "modeOpenerExtra",
262
+ "threadActionMenuItems",
263
+ "threadActionPrefixes",
170
264
  "signedInMarkers",
171
265
  "transientAssistant",
172
266
  "stopControl",
@@ -178,6 +272,10 @@ const nonToolKeys = [
178
272
  ];
179
273
  const builtLabels = Object.fromEntries(nonToolKeys.map(key => [key, flattenKey(locales, key)]));
180
274
  const builtTools = Object.fromEntries(TOOL_IDS.map(id => [id, flattenTool(locales, id)]));
275
+ const builtModeOptions = Object.fromEntries(MODE_OPTION_IDS.map(id => [id, flattenModeOption(locales, id)]));
276
+ const builtExperienceOptions = Object.fromEntries(EXPERIENCE_OPTION_IDS.map(id => [id, flattenNestedLabel(locales, "experienceOptions", id)]));
277
+ const builtConfigurationAxes = Object.fromEntries(CONFIGURATION_AXIS_IDS.map(id => [id, flattenNestedLabel(locales, "configurationAxes", id)]));
278
+ const builtConfigurationOptions = Object.fromEntries(CONFIGURATION_OPTION_IDS.map(id => [id, flattenNestedLabel(locales, "configurationOptions", id)]));
181
279
  /**
182
280
  * The combined locale registry. Values are `string[]` (mutable; English-first; deduped).
183
281
  * Consumers treat this identically to the previous `as const` object — the array contents
@@ -185,6 +283,10 @@ const builtTools = Object.fromEntries(TOOL_IDS.map(id => [id, flattenTool(locale
185
283
  */
186
284
  export const localeLabels = {
187
285
  ...builtLabels,
286
+ modeOptions: builtModeOptions,
287
+ experienceOptions: builtExperienceOptions,
288
+ configurationAxes: builtConfigurationAxes,
289
+ configurationOptions: builtConfigurationOptions,
188
290
  tools: builtTools,
189
291
  };
190
292
  // --- Helpers (re-exported so the barrel and any direct locale/index imports both work) ---