codex-overleaf-link 2.0.0 → 2.1.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 (119) hide show
  1. package/README.md +24 -23
  2. package/extension/bootstrap/manifest.template.json +2 -1
  3. package/extension/runtime-manifest.json +12 -6
  4. package/extension/src/background.js +7 -0
  5. package/extension/src/content/composerPanel.js +13 -3
  6. package/extension/src/content/contentRuntime.js +129 -64
  7. package/extension/src/content/contextTray.js +173 -9
  8. package/extension/src/content/markdownText.js +16 -1
  9. package/extension/src/content/mathText.js +233 -0
  10. package/extension/src/content/modelPicker.js +117 -106
  11. package/extension/src/content/modelPickerSupport.js +115 -0
  12. package/extension/src/content/nativeChannel.js +20 -1
  13. package/extension/src/content/panelMaintenance.js +2 -0
  14. package/extension/src/content/projectSettingsCoordinator.js +2 -0
  15. package/extension/src/content/providerSettingsCoordinator.js +413 -0
  16. package/extension/src/content/providerSettingsDialog.js +1006 -0
  17. package/extension/src/content/runTimelineView.js +24 -5
  18. package/extension/src/content/settingsPanel.js +33 -2
  19. package/extension/src/content/writebackOrchestrator.js +3 -1
  20. package/extension/src/page/overleafProjectSnapshot.js +29 -33
  21. package/extension/src/page/snapshotRouter.js +75 -8
  22. package/extension/src/page/writebackRouter.js +20 -33
  23. package/extension/src/pageBridge.js +1 -1
  24. package/extension/src/shared/agentTranscript.js +130 -0
  25. package/extension/src/shared/compatibility.js +3 -2
  26. package/extension/src/shared/failureReasons.js +75 -0
  27. package/extension/src/shared/i18n.js +22 -0
  28. package/extension/src/shared/models.js +1 -0
  29. package/extension/src/shared/providerProfiles.js +283 -0
  30. package/extension/src/shared/sessionState.js +12 -2
  31. package/extension/src/shared/storageDb.js +1 -1
  32. package/extension/styles/panel.css +689 -1
  33. package/extension/vendor/katex/LICENSE +21 -0
  34. package/extension/vendor/katex/VERSION +2 -0
  35. package/extension/vendor/katex/fonts/KaTeX_AMS-Regular.ttf +0 -0
  36. package/extension/vendor/katex/fonts/KaTeX_AMS-Regular.woff +0 -0
  37. package/extension/vendor/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  38. package/extension/vendor/katex/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  39. package/extension/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  40. package/extension/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  41. package/extension/vendor/katex/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  42. package/extension/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  43. package/extension/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  44. package/extension/vendor/katex/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  45. package/extension/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  46. package/extension/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  47. package/extension/vendor/katex/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  48. package/extension/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  49. package/extension/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  50. package/extension/vendor/katex/fonts/KaTeX_Main-Bold.ttf +0 -0
  51. package/extension/vendor/katex/fonts/KaTeX_Main-Bold.woff +0 -0
  52. package/extension/vendor/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  53. package/extension/vendor/katex/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  54. package/extension/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  55. package/extension/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  56. package/extension/vendor/katex/fonts/KaTeX_Main-Italic.ttf +0 -0
  57. package/extension/vendor/katex/fonts/KaTeX_Main-Italic.woff +0 -0
  58. package/extension/vendor/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
  59. package/extension/vendor/katex/fonts/KaTeX_Main-Regular.ttf +0 -0
  60. package/extension/vendor/katex/fonts/KaTeX_Main-Regular.woff +0 -0
  61. package/extension/vendor/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  62. package/extension/vendor/katex/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  63. package/extension/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  64. package/extension/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  65. package/extension/vendor/katex/fonts/KaTeX_Math-Italic.ttf +0 -0
  66. package/extension/vendor/katex/fonts/KaTeX_Math-Italic.woff +0 -0
  67. package/extension/vendor/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  68. package/extension/vendor/katex/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  69. package/extension/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  70. package/extension/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  71. package/extension/vendor/katex/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  72. package/extension/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  73. package/extension/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  74. package/extension/vendor/katex/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  75. package/extension/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  76. package/extension/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  77. package/extension/vendor/katex/fonts/KaTeX_Script-Regular.ttf +0 -0
  78. package/extension/vendor/katex/fonts/KaTeX_Script-Regular.woff +0 -0
  79. package/extension/vendor/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
  80. package/extension/vendor/katex/fonts/KaTeX_Size1-Regular.ttf +0 -0
  81. package/extension/vendor/katex/fonts/KaTeX_Size1-Regular.woff +0 -0
  82. package/extension/vendor/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  83. package/extension/vendor/katex/fonts/KaTeX_Size2-Regular.ttf +0 -0
  84. package/extension/vendor/katex/fonts/KaTeX_Size2-Regular.woff +0 -0
  85. package/extension/vendor/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  86. package/extension/vendor/katex/fonts/KaTeX_Size3-Regular.ttf +0 -0
  87. package/extension/vendor/katex/fonts/KaTeX_Size3-Regular.woff +0 -0
  88. package/extension/vendor/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  89. package/extension/vendor/katex/fonts/KaTeX_Size4-Regular.ttf +0 -0
  90. package/extension/vendor/katex/fonts/KaTeX_Size4-Regular.woff +0 -0
  91. package/extension/vendor/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  92. package/extension/vendor/katex/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  93. package/extension/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  94. package/extension/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  95. package/extension/vendor/katex/katex.min.css +1 -0
  96. package/extension/vendor/katex/katex.min.js +1 -0
  97. package/native-host/src/anthropicBridgeRequest.js +435 -0
  98. package/native-host/src/anthropicBridgeResponse.js +431 -0
  99. package/native-host/src/anthropicMessagesBridge.js +281 -0
  100. package/native-host/src/chatBridgeRequest.js +274 -0
  101. package/native-host/src/chatBridgeResponse.js +594 -0
  102. package/native-host/src/chatCompletionsBridge.js +485 -0
  103. package/native-host/src/codexCommand.js +25 -0
  104. package/native-host/src/codexPromptAssembly.js +9 -0
  105. package/native-host/src/codexProviderLaunch.js +213 -0
  106. package/native-host/src/codexProviderTest.js +196 -0
  107. package/native-host/src/codexSessionRunner.js +29 -25
  108. package/native-host/src/managedInstall.js +1 -0
  109. package/native-host/src/providerBridgeRoutes.js +11 -0
  110. package/native-host/src/providerModelCatalog.js +107 -0
  111. package/native-host/src/providerProfile.js +454 -0
  112. package/native-host/src/providerReasoning.js +235 -0
  113. package/native-host/src/providerRedaction.js +18 -0
  114. package/native-host/src/providerRuntime.js +365 -0
  115. package/native-host/src/providerStore.js +691 -0
  116. package/native-host/src/readProgressGuard.js +360 -0
  117. package/native-host/src/taskRunnerRuntime.js +39 -3
  118. package/native-host/src/updateArchive.js +1 -0
  119. package/package.json +2 -1
@@ -2,6 +2,455 @@
2
2
  --codex-overleaf-panel-width: 380px;
3
3
  }
4
4
 
5
+ /* v2.1 provider profiles: detailed configuration lives in a viewport modal. */
6
+ .codex-provider-settings-entry {
7
+ display: flex;
8
+ align-items: center;
9
+ justify-content: space-between;
10
+ gap: 18px;
11
+ }
12
+
13
+ .codex-provider-settings-entry-copy {
14
+ min-width: 0;
15
+ }
16
+
17
+ .codex-provider-settings-summary {
18
+ margin: 5px 0 0;
19
+ color: #92d99a;
20
+ font-size: 12px;
21
+ }
22
+
23
+ .codex-provider-settings-summary[data-tone="warning"] { color: #d9bd78; }
24
+ .codex-provider-settings-summary[data-tone="failed"] { color: #ef8f84; }
25
+
26
+ .codex-provider-experimental-badge {
27
+ display: inline-flex;
28
+ align-items: center;
29
+ min-height: 19px;
30
+ padding: 0 7px;
31
+ border: 1px solid rgba(217, 189, 120, 0.42);
32
+ border-radius: 999px;
33
+ background: rgba(217, 189, 120, 0.08);
34
+ color: #d9bd78;
35
+ font-size: 9px;
36
+ font-weight: 700;
37
+ line-height: 1;
38
+ letter-spacing: 0.035em;
39
+ white-space: nowrap;
40
+ }
41
+
42
+ .codex-provider-dialog-root {
43
+ --provider-bg: var(--provider-panel-bg, #151716);
44
+ --provider-surface: #1c1f1d;
45
+ --provider-surface-raised: #222622;
46
+ --provider-line: rgba(255, 255, 255, 0.12);
47
+ --provider-muted: #a0a59f;
48
+ --provider-accent: #79d58a;
49
+ --provider-danger: #ef8176;
50
+ position: fixed;
51
+ inset: 0;
52
+ z-index: 2147483600;
53
+ color: var(--provider-panel-color, #eef0ec);
54
+ font-family: "Aptos", "SF Pro Text", sans-serif;
55
+ }
56
+
57
+ .codex-provider-dialog-root[hidden] { display: none !important; }
58
+
59
+ .codex-provider-dialog-backdrop {
60
+ position: absolute;
61
+ inset: 0;
62
+ background: rgba(4, 7, 5, 0.68);
63
+ backdrop-filter: blur(3px);
64
+ }
65
+
66
+ .codex-provider-dialog {
67
+ position: absolute;
68
+ top: 50%;
69
+ left: 50%;
70
+ transform: translate(-50%, -50%);
71
+ display: flex;
72
+ flex-direction: column;
73
+ width: min(800px, calc(100vw - 32px));
74
+ height: min(680px, calc(100vh - 32px));
75
+ max-height: 82vh;
76
+ overflow: hidden;
77
+ border: 1px solid var(--provider-line);
78
+ border-radius: 16px;
79
+ background:
80
+ radial-gradient(circle at 92% -8%, rgba(83, 177, 105, 0.13), transparent 34%),
81
+ var(--provider-bg);
82
+ box-shadow: 0 28px 80px rgba(0, 0, 0, 0.48);
83
+ }
84
+
85
+ .codex-provider-dialog-head,
86
+ .codex-provider-dialog-foot {
87
+ flex: 0 0 auto;
88
+ display: flex;
89
+ align-items: center;
90
+ justify-content: space-between;
91
+ gap: 20px;
92
+ padding: 20px 24px;
93
+ border-bottom: 1px solid var(--provider-line);
94
+ }
95
+
96
+ .codex-provider-dialog-head h2,
97
+ .codex-provider-detail h3 {
98
+ margin: 0;
99
+ color: inherit;
100
+ font-size: 18px;
101
+ line-height: 1.2;
102
+ }
103
+
104
+ .codex-provider-dialog-heading { min-width: 0; }
105
+
106
+ .codex-provider-dialog-titleline {
107
+ display: flex;
108
+ align-items: center;
109
+ gap: 9px;
110
+ min-width: 0;
111
+ }
112
+
113
+ .codex-provider-dialog-head p,
114
+ .codex-provider-detail-titleline p,
115
+ .codex-provider-builtin p {
116
+ margin: 6px 0 0;
117
+ color: var(--provider-muted);
118
+ font-size: 12px;
119
+ }
120
+
121
+ .codex-provider-dialog-close {
122
+ width: 34px;
123
+ height: 34px;
124
+ border: 0;
125
+ border-radius: 9px;
126
+ background: transparent;
127
+ color: var(--provider-muted);
128
+ font-size: 24px;
129
+ cursor: pointer;
130
+ }
131
+
132
+ .codex-provider-dialog-close:hover { background: rgba(255, 255, 255, 0.07); color: inherit; }
133
+
134
+ .codex-provider-dialog-body {
135
+ min-height: 0;
136
+ flex: 1 1 auto;
137
+ display: grid;
138
+ grid-template-columns: 205px minmax(0, 1fr);
139
+ }
140
+
141
+ .codex-provider-list {
142
+ min-width: 0;
143
+ padding: 14px 10px;
144
+ overflow: auto;
145
+ border-right: 1px solid var(--provider-line);
146
+ background: rgba(0, 0, 0, 0.09);
147
+ }
148
+
149
+ .codex-provider-row,
150
+ .codex-provider-add {
151
+ box-sizing: border-box;
152
+ width: 100%;
153
+ max-width: 100%;
154
+ min-width: 0;
155
+ display: flex;
156
+ flex-direction: column;
157
+ align-items: stretch;
158
+ gap: 3px;
159
+ padding: 10px 11px;
160
+ border: 0;
161
+ border-radius: 9px;
162
+ background: transparent;
163
+ color: inherit;
164
+ text-align: left;
165
+ overflow: hidden;
166
+ cursor: pointer;
167
+ }
168
+
169
+ .codex-provider-row:hover,
170
+ .codex-provider-row[aria-current="true"] { background: rgba(255, 255, 255, 0.07); }
171
+ .codex-provider-row[aria-current="true"] { box-shadow: inset 2px 0 var(--provider-accent); }
172
+ .codex-provider-row-main { display: block; width: 100%; min-width: 0; overflow: hidden; text-overflow: ellipsis; font-size: 13px; font-weight: 650; white-space: nowrap; }
173
+ .codex-provider-row-status { color: var(--provider-muted); font-size: 11px; }
174
+ .codex-provider-row-status[data-tone="active"] { color: var(--provider-accent); }
175
+ .codex-provider-add { margin-top: 8px; color: var(--provider-accent); }
176
+
177
+ .codex-provider-detail {
178
+ min-width: 0;
179
+ padding: 22px 24px 28px;
180
+ overflow: auto;
181
+ }
182
+
183
+ .codex-provider-detail-titleline {
184
+ display: flex;
185
+ align-items: flex-start;
186
+ justify-content: space-between;
187
+ gap: 16px;
188
+ margin-bottom: 22px;
189
+ }
190
+
191
+ .codex-provider-active-badge {
192
+ display: inline-flex;
193
+ align-items: center;
194
+ min-height: 24px;
195
+ padding: 0 9px;
196
+ border: 1px solid rgba(121, 213, 138, 0.42);
197
+ border-radius: 999px;
198
+ color: var(--provider-accent);
199
+ font-size: 11px;
200
+ font-weight: 700;
201
+ }
202
+
203
+ .codex-provider-form-grid {
204
+ display: grid;
205
+ grid-template-columns: repeat(2, minmax(0, 1fr));
206
+ gap: 16px;
207
+ }
208
+
209
+ .codex-provider-field {
210
+ min-width: 0;
211
+ display: flex;
212
+ flex-direction: column;
213
+ gap: 7px;
214
+ color: #dfe3dd;
215
+ font-size: 12px;
216
+ font-weight: 650;
217
+ }
218
+
219
+ .codex-provider-field--wide { grid-column: 1 / -1; }
220
+
221
+ .codex-provider-field input,
222
+ .codex-provider-field textarea,
223
+ .codex-provider-field select {
224
+ box-sizing: border-box;
225
+ width: 100%;
226
+ min-height: 38px;
227
+ padding: 8px 10px;
228
+ border: 1px solid var(--provider-line);
229
+ border-radius: 8px;
230
+ outline: 0;
231
+ background: rgba(255, 255, 255, 0.035);
232
+ color: inherit;
233
+ font: inherit;
234
+ font-weight: 450;
235
+ }
236
+
237
+ .codex-provider-field textarea { resize: vertical; }
238
+ .codex-provider-field input:focus,
239
+ .codex-provider-field textarea:focus,
240
+ .codex-provider-field select:focus { border-color: rgba(121, 213, 138, 0.7); box-shadow: 0 0 0 3px rgba(121, 213, 138, 0.1); }
241
+ .codex-provider-field small { color: var(--provider-muted); font-size: 11px; font-weight: 450; }
242
+ .codex-provider-secret-row { display: flex; gap: 8px; }
243
+
244
+ .codex-provider-advanced {
245
+ margin-top: 18px;
246
+ padding: 14px 0;
247
+ border-top: 1px solid var(--provider-line);
248
+ border-bottom: 1px solid var(--provider-line);
249
+ }
250
+
251
+ .codex-provider-advanced summary { color: var(--provider-muted); cursor: pointer; font-size: 12px; font-weight: 650; }
252
+ .codex-provider-advanced[open] summary { margin-bottom: 14px; color: inherit; }
253
+
254
+ .codex-provider-disclosure {
255
+ display: flex;
256
+ gap: 9px;
257
+ margin-top: 18px;
258
+ padding: 12px;
259
+ border-radius: 9px;
260
+ background: rgba(217, 189, 120, 0.09);
261
+ color: #d8c892;
262
+ font-size: 11px;
263
+ line-height: 1.45;
264
+ }
265
+
266
+ .codex-provider-test-row {
267
+ display: grid;
268
+ grid-template-columns: minmax(0, 1fr);
269
+ gap: 12px;
270
+ margin-top: 18px;
271
+ padding: 14px;
272
+ border: 1px solid rgba(255, 255, 255, 0.085);
273
+ border-radius: 12px;
274
+ background:
275
+ radial-gradient(circle at 0 0, rgba(121, 213, 138, 0.08), transparent 44%),
276
+ rgba(255, 255, 255, 0.025);
277
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.025);
278
+ }
279
+
280
+ .codex-provider-test-copy { display: grid; gap: 3px; min-width: 0; }
281
+ .codex-provider-test-copy strong { color: var(--provider-text); font-size: 12px; font-weight: 750; letter-spacing: 0.01em; }
282
+ .codex-provider-test-copy > span { color: var(--provider-muted); font-size: 11px; line-height: 1.4; }
283
+
284
+ .codex-provider-test-controls {
285
+ display: grid;
286
+ grid-template-columns: minmax(180px, 1fr) auto;
287
+ align-items: end;
288
+ gap: 10px;
289
+ min-width: 0;
290
+ }
291
+
292
+ .codex-provider-test-model { display: grid; gap: 6px; min-width: 0; }
293
+ .codex-provider-test-model-label {
294
+ color: var(--provider-muted);
295
+ font-size: 10px;
296
+ font-weight: 750;
297
+ letter-spacing: 0.08em;
298
+ text-transform: uppercase;
299
+ }
300
+
301
+ .codex-provider-test-select-shell { position: relative; display: block; min-width: 0; border-radius: 9px; }
302
+ .codex-provider-test-select-shell select {
303
+ width: 100%;
304
+ min-width: 0;
305
+ min-height: 40px;
306
+ padding: 0 38px 0 12px;
307
+ border: 1px solid var(--provider-line);
308
+ border-radius: 9px;
309
+ appearance: none;
310
+ -webkit-appearance: none;
311
+ background: rgba(7, 12, 10, 0.58);
312
+ color: var(--provider-text);
313
+ color-scheme: dark;
314
+ font: inherit;
315
+ font-size: 12px;
316
+ font-weight: 650;
317
+ line-height: 1;
318
+ outline: none;
319
+ cursor: pointer;
320
+ }
321
+ .codex-provider-test-select-shell select:hover { border-color: rgba(121, 213, 138, 0.34); background: rgba(12, 19, 15, 0.72); }
322
+ .codex-provider-test-select-shell:focus-within { box-shadow: 0 0 0 3px rgba(121, 213, 138, 0.12); }
323
+ .codex-provider-test-select-shell:focus-within select { border-color: rgba(121, 213, 138, 0.66); }
324
+ .codex-provider-test-chevron {
325
+ position: absolute;
326
+ top: 50%;
327
+ right: 12px;
328
+ width: 16px;
329
+ height: 16px;
330
+ transform: translateY(-50%);
331
+ fill: none;
332
+ stroke: var(--provider-muted);
333
+ stroke-width: 1.7;
334
+ stroke-linecap: round;
335
+ stroke-linejoin: round;
336
+ pointer-events: none;
337
+ }
338
+
339
+ .codex-provider-test-button {
340
+ display: inline-flex;
341
+ align-items: center;
342
+ justify-content: center;
343
+ gap: 8px;
344
+ min-height: 40px;
345
+ padding: 0 14px;
346
+ border: 1px solid rgba(121, 213, 138, 0.36);
347
+ border-radius: 9px;
348
+ background: linear-gradient(180deg, rgba(66, 132, 78, 0.38), rgba(42, 91, 52, 0.34));
349
+ color: #b8edc2;
350
+ box-shadow: 0 5px 15px rgba(6, 19, 10, 0.16);
351
+ font: inherit;
352
+ font-size: 12px;
353
+ font-weight: 750;
354
+ white-space: nowrap;
355
+ cursor: pointer;
356
+ transition: border-color 140ms ease, background 140ms ease, color 140ms ease, transform 140ms ease;
357
+ }
358
+ .codex-provider-test-button svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.6; }
359
+ .codex-provider-test-button:not(:disabled):hover {
360
+ border-color: rgba(121, 213, 138, 0.7);
361
+ background: linear-gradient(180deg, rgba(72, 151, 88, 0.5), rgba(44, 102, 57, 0.46));
362
+ color: #d4f7da;
363
+ transform: translateY(-1px);
364
+ }
365
+ .codex-provider-test-button:not(:disabled):active { transform: translateY(0); }
366
+ .codex-provider-test-button[data-provider-action="cancel-test"] { border-color: rgba(242, 129, 113, 0.42); background: rgba(122, 55, 47, 0.24); color: #f3aaa0; }
367
+
368
+ .codex-provider-test-state { min-height: 16px; color: var(--provider-muted); font-size: 11px; line-height: 1.4; }
369
+ .codex-provider-test-state:empty { display: none; }
370
+ .codex-provider-test-state[data-tone="success"] { color: var(--provider-accent); }
371
+ .codex-provider-test-state[data-tone="failed"] { color: var(--provider-danger); }
372
+
373
+ .codex-provider-dialog-foot {
374
+ min-height: 70px;
375
+ padding-top: 14px;
376
+ padding-bottom: 14px;
377
+ border-top: 1px solid var(--provider-line);
378
+ border-bottom: 0;
379
+ background: rgba(0, 0, 0, 0.08);
380
+ }
381
+
382
+ .codex-provider-operation-status { min-width: 0; color: var(--provider-muted); font-size: 11px; }
383
+ .codex-provider-operation-status[data-tone="success"] { color: var(--provider-accent); }
384
+ .codex-provider-operation-status[data-tone="failed"] { color: var(--provider-danger); }
385
+ .codex-provider-operation-status[data-tone="progress"]::before { content: ""; display: inline-block; width: 8px; height: 8px; margin-right: 7px; border: 2px solid rgba(121, 213, 138, 0.3); border-top-color: var(--provider-accent); border-radius: 50%; animation: codex-provider-spin 0.8s linear infinite; }
386
+
387
+ .codex-provider-footer-actions { display: flex; align-items: center; gap: 8px; }
388
+ .codex-provider-footer-spacer { width: 8px; }
389
+ .codex-provider-primary-button,
390
+ .codex-provider-secondary-button,
391
+ .codex-provider-danger-button,
392
+ .codex-provider-inline-button {
393
+ min-height: 34px;
394
+ padding: 0 13px;
395
+ border: 1px solid var(--provider-line);
396
+ border-radius: 8px;
397
+ background: rgba(255, 255, 255, 0.04);
398
+ color: inherit;
399
+ font: inherit;
400
+ font-size: 12px;
401
+ font-weight: 700;
402
+ cursor: pointer;
403
+ }
404
+ .codex-provider-primary-button { border-color: #56ac68; background: #397b48; color: #fff; }
405
+ .codex-provider-secondary-button[data-provider-action="save"]:not(:disabled) {
406
+ border-color: #5dbb72;
407
+ background: linear-gradient(180deg, #3f8d51 0%, #337342 100%);
408
+ color: #fff;
409
+ box-shadow: 0 0 0 1px rgba(121, 213, 138, 0.08), 0 4px 12px rgba(22, 83, 39, 0.22);
410
+ }
411
+ .codex-provider-secondary-button[data-provider-action="save"]:not(:disabled):hover {
412
+ border-color: #79d58a;
413
+ background: linear-gradient(180deg, #499d5c 0%, #397f49 100%);
414
+ }
415
+ .codex-provider-secondary-button[data-provider-action="save"]:disabled {
416
+ border-color: var(--provider-line);
417
+ background: rgba(255, 255, 255, 0.04);
418
+ color: var(--provider-muted);
419
+ box-shadow: none;
420
+ }
421
+ .codex-provider-danger-button { color: var(--provider-danger); }
422
+ .codex-provider-inline-button { flex: 0 0 auto; }
423
+ .codex-provider-dialog-root button:disabled,
424
+ .codex-provider-dialog-root input:disabled,
425
+ .codex-provider-dialog-root select:disabled,
426
+ .codex-provider-dialog-root textarea:disabled { cursor: not-allowed; opacity: 0.5; }
427
+
428
+ .codex-provider-builtin { max-width: 430px; padding-top: 34px; }
429
+ .codex-provider-builtin-mark { display: grid; place-items: center; width: 48px; height: 48px; margin-bottom: 18px; border-radius: 14px; background: linear-gradient(145deg, #3f8d51, #255932); color: #fff; font-size: 21px; font-weight: 800; }
430
+ .codex-provider-builtin-mark svg { display: block; width: 27px; height: 27px; fill: currentColor; }
431
+ .codex-provider-builtin .codex-provider-active-badge,
432
+ .codex-provider-builtin button { margin-top: 18px; }
433
+
434
+ @media (max-width: 620px) {
435
+ .codex-provider-test-controls { grid-template-columns: 1fr; align-items: stretch; }
436
+ .codex-provider-test-button { width: 100%; }
437
+ }
438
+
439
+ @keyframes codex-provider-spin { to { transform: rotate(360deg); } }
440
+
441
+ @media (max-width: 720px) {
442
+ .codex-provider-dialog { width: calc(100vw - 16px); height: calc(100vh - 16px); max-height: none; border-radius: 12px; }
443
+ .codex-provider-dialog-body { grid-template-columns: 1fr; grid-template-rows: auto minmax(0, 1fr); }
444
+ .codex-provider-list { display: flex; gap: 6px; padding: 10px; overflow-x: auto; border-right: 0; border-bottom: 1px solid var(--provider-line); }
445
+ .codex-provider-row,
446
+ .codex-provider-add { flex: 0 0 150px; margin-top: 0; }
447
+ .codex-provider-form-grid { grid-template-columns: 1fr; }
448
+ .codex-provider-field--wide { grid-column: auto; }
449
+ .codex-provider-dialog-head,
450
+ .codex-provider-dialog-foot,
451
+ .codex-provider-detail { padding-left: 16px; padding-right: 16px; }
452
+ }
453
+
5
454
  :root.codex-overleaf-panel-mounted:not(.codex-overleaf-panel-compact) body {
6
455
  box-sizing: border-box;
7
456
  width: calc(100vw - var(--codex-overleaf-panel-width)) !important;
@@ -1845,6 +2294,9 @@
1845
2294
 
1846
2295
  #codex-overleaf-panel .run-activity-list {
1847
2296
  display: grid;
2297
+ grid-template-columns: minmax(0, 1fr);
2298
+ min-width: 0;
2299
+ max-width: 100%;
1848
2300
  gap: 0;
1849
2301
  margin-top: 2px;
1850
2302
  }
@@ -1986,6 +2438,10 @@
1986
2438
  }
1987
2439
 
1988
2440
  #codex-overleaf-panel .run-stream {
2441
+ box-sizing: border-box;
2442
+ width: 100%;
2443
+ min-width: 0;
2444
+ max-width: 100%;
1989
2445
  margin: 6px 0 2px;
1990
2446
  color: var(--tl-fg-1);
1991
2447
  border-left: 2px solid var(--tl-border);
@@ -2003,12 +2459,58 @@
2003
2459
  }
2004
2460
 
2005
2461
  #codex-overleaf-panel .run-stream-text {
2462
+ min-width: 0;
2463
+ max-width: 100%;
2006
2464
  white-space: pre-wrap;
2007
- word-break: break-word;
2465
+ overflow-wrap: anywhere;
2466
+ word-break: normal;
2008
2467
  font-size: 12px;
2009
2468
  line-height: 1.48;
2010
2469
  }
2011
2470
 
2471
+ #codex-overleaf-panel .run-stream-text > * {
2472
+ box-sizing: border-box;
2473
+ min-width: 0;
2474
+ max-width: 100%;
2475
+ }
2476
+
2477
+ #codex-overleaf-panel .run-math {
2478
+ max-width: 100%;
2479
+ color: inherit;
2480
+ font-size: 1.02em;
2481
+ }
2482
+
2483
+ #codex-overleaf-panel .run-math--inline {
2484
+ display: inline-block;
2485
+ overflow-x: auto;
2486
+ overflow-y: hidden;
2487
+ vertical-align: -0.15em;
2488
+ }
2489
+
2490
+ #codex-overleaf-panel .run-math--display {
2491
+ display: block;
2492
+ overflow-x: auto;
2493
+ overflow-y: hidden;
2494
+ margin: 8px 0;
2495
+ padding: 2px 0 4px;
2496
+ }
2497
+
2498
+ #codex-overleaf-panel .run-math--display .katex-display {
2499
+ min-width: max-content;
2500
+ margin: 0;
2501
+ text-align: left;
2502
+ }
2503
+
2504
+ #codex-overleaf-panel .run-math--fallback {
2505
+ border-radius: 4px;
2506
+ background: var(--tl-surface-2);
2507
+ color: var(--tl-review);
2508
+ padding: 1px 4px;
2509
+ white-space: pre-wrap;
2510
+ overflow-wrap: anywhere;
2511
+ font: 0.96em/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
2512
+ }
2513
+
2012
2514
  #codex-overleaf-panel .run-stream[data-stream-role="reasoning"] .run-stream-text {
2013
2515
  color: var(--tl-fg-3);
2014
2516
  }
@@ -2047,6 +2549,8 @@
2047
2549
  }
2048
2550
 
2049
2551
  #codex-overleaf-panel .run-process {
2552
+ min-width: 0;
2553
+ max-width: 100%;
2050
2554
  margin-top: 4px;
2051
2555
  }
2052
2556
 
@@ -3044,6 +3548,101 @@
3044
3548
  font-size: 12px;
3045
3549
  }
3046
3550
 
3551
+ #codex-overleaf-panel .codex-context-actions {
3552
+ display: inline-flex;
3553
+ align-items: center;
3554
+ margin-left: auto;
3555
+ gap: 5px;
3556
+ }
3557
+
3558
+ #codex-overleaf-panel .codex-context-sync-status {
3559
+ display: inline-flex;
3560
+ align-items: center;
3561
+ justify-content: center;
3562
+ width: 18px;
3563
+ height: 18px;
3564
+ color: var(--tl-fg-3);
3565
+ transition: color 140ms ease, opacity 140ms ease;
3566
+ }
3567
+
3568
+ #codex-overleaf-panel .codex-context-sync-status[data-state="idle"] {
3569
+ visibility: hidden;
3570
+ }
3571
+
3572
+ #codex-overleaf-panel .codex-context-sync-status svg {
3573
+ width: 16px;
3574
+ height: 16px;
3575
+ overflow: visible;
3576
+ fill: none;
3577
+ stroke: currentColor;
3578
+ stroke-linecap: round;
3579
+ stroke-linejoin: round;
3580
+ stroke-width: 1.8;
3581
+ }
3582
+
3583
+ #codex-overleaf-panel .codex-context-sync-ring,
3584
+ #codex-overleaf-panel .codex-context-sync-check,
3585
+ #codex-overleaf-panel .codex-context-sync-alert {
3586
+ display: none;
3587
+ }
3588
+
3589
+ #codex-overleaf-panel .codex-context-sync-status[data-state="tree-loading"] .codex-context-sync-ring,
3590
+ #codex-overleaf-panel .codex-context-sync-status[data-state="exact-loading"] .codex-context-sync-ring {
3591
+ display: block;
3592
+ stroke-dasharray: 28 14;
3593
+ transform-origin: 10px 10px;
3594
+ animation: codex-context-sync-spin 850ms linear infinite;
3595
+ }
3596
+
3597
+ #codex-overleaf-panel .codex-context-sync-status[data-state="exact-loading"] {
3598
+ color: var(--tl-accent);
3599
+ }
3600
+
3601
+ #codex-overleaf-panel .codex-context-sync-status[data-state="exact-ready"] {
3602
+ color: var(--tl-ok);
3603
+ }
3604
+
3605
+ #codex-overleaf-panel .codex-context-sync-status[data-state="exact-ready"] .codex-context-sync-check {
3606
+ display: block;
3607
+ }
3608
+
3609
+ #codex-overleaf-panel .codex-context-sync-status[data-state="partial"] {
3610
+ color: var(--tl-warn, #d6b36a);
3611
+ }
3612
+
3613
+ #codex-overleaf-panel .codex-context-sync-status[data-state="partial"] .codex-context-sync-ring,
3614
+ #codex-overleaf-panel .codex-context-sync-status[data-state="partial"] .codex-context-sync-alert {
3615
+ display: block;
3616
+ }
3617
+
3618
+ #codex-overleaf-panel .codex-context-sync-status[data-state="partial"] .codex-context-sync-ring {
3619
+ stroke-dasharray: none;
3620
+ }
3621
+
3622
+ #codex-overleaf-panel .codex-context-sync-copy {
3623
+ position: absolute;
3624
+ width: 1px;
3625
+ height: 1px;
3626
+ padding: 0;
3627
+ margin: -1px;
3628
+ overflow: hidden;
3629
+ clip: rect(0, 0, 0, 0);
3630
+ white-space: nowrap;
3631
+ border: 0;
3632
+ }
3633
+
3634
+ @keyframes codex-context-sync-spin {
3635
+ to {
3636
+ transform: rotate(360deg);
3637
+ }
3638
+ }
3639
+
3640
+ @media (prefers-reduced-motion: reduce) {
3641
+ #codex-overleaf-panel .codex-context-sync-status .codex-context-sync-ring {
3642
+ animation: none;
3643
+ }
3644
+ }
3645
+
3047
3646
  #codex-overleaf-panel .codex-context-head button {
3048
3647
  display: inline-flex;
3049
3648
  align-items: center;
@@ -4192,3 +4791,92 @@
4192
4791
  animation: none;
4193
4792
  }
4194
4793
  }
4794
+ .codex-provider-dialog-root .codex-provider-capability-grid {
4795
+ display: grid;
4796
+ grid-template-columns: repeat(auto-fit, minmax(min(220px, 100%), 1fr));
4797
+ gap: 4px 18px;
4798
+ margin-top: 3px;
4799
+ }
4800
+
4801
+ .codex-provider-dialog-root .codex-provider-capability-option {
4802
+ position: relative;
4803
+ display: flex;
4804
+ align-items: center;
4805
+ gap: 9px;
4806
+ min-width: 0;
4807
+ padding: 5px 6px;
4808
+ border-radius: 6px;
4809
+ color: var(--tl-fg-2);
4810
+ font-size: 13px;
4811
+ font-weight: 500;
4812
+ line-height: 1.35;
4813
+ cursor: pointer;
4814
+ transition:
4815
+ background 120ms ease,
4816
+ color 120ms ease;
4817
+ }
4818
+
4819
+ .codex-provider-dialog-root .codex-provider-capability-option:hover {
4820
+ color: var(--tl-fg-1);
4821
+ background: rgba(255, 255, 255, 0.035);
4822
+ }
4823
+
4824
+ .codex-provider-dialog-root .codex-provider-capability-option--wide {
4825
+ grid-column: 1 / -1;
4826
+ }
4827
+
4828
+ .codex-provider-dialog-root .codex-provider-field .codex-provider-capability-input {
4829
+ position: absolute;
4830
+ width: 1px !important;
4831
+ height: 1px !important;
4832
+ min-width: 0 !important;
4833
+ min-height: 0 !important;
4834
+ margin: -1px !important;
4835
+ padding: 0 !important;
4836
+ border: 0 !important;
4837
+ border-radius: 0 !important;
4838
+ overflow: hidden;
4839
+ clip: rect(0 0 0 0);
4840
+ white-space: nowrap;
4841
+ background: transparent !important;
4842
+ opacity: 0;
4843
+ pointer-events: none;
4844
+ }
4845
+
4846
+ .codex-provider-dialog-root .codex-provider-capability-control {
4847
+ position: relative;
4848
+ display: grid;
4849
+ flex: 0 0 16px;
4850
+ width: 16px;
4851
+ height: 16px;
4852
+ place-items: center;
4853
+ box-sizing: border-box;
4854
+ border: 1px solid var(--tl-border-strong);
4855
+ border-radius: 4px;
4856
+ background: rgba(255, 255, 255, 0.025);
4857
+ transition:
4858
+ border-color 120ms ease,
4859
+ background 120ms ease,
4860
+ box-shadow 120ms ease;
4861
+ }
4862
+
4863
+ .codex-provider-dialog-root .codex-provider-capability-input:focus-visible + .codex-provider-capability-control {
4864
+ outline: 2px solid color-mix(in srgb, var(--tl-ok) 62%, transparent);
4865
+ outline-offset: 2px;
4866
+ }
4867
+
4868
+ .codex-provider-dialog-root .codex-provider-capability-input:checked + .codex-provider-capability-control {
4869
+ border-color: var(--tl-ok);
4870
+ background: var(--tl-ok);
4871
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--tl-ok) 18%, transparent);
4872
+ }
4873
+
4874
+ .codex-provider-dialog-root .codex-provider-capability-input:checked + .codex-provider-capability-control::after {
4875
+ content: "";
4876
+ width: 4px;
4877
+ height: 8px;
4878
+ margin-top: -2px;
4879
+ border-right: 2px solid #102016;
4880
+ border-bottom: 2px solid #102016;
4881
+ transform: rotate(45deg);
4882
+ }