minecodex 1.2.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +9 -3
  2. package/features/images/README.md +16 -98
  3. package/features/images/codex-feature.json +6 -23
  4. package/features/images/src/library-prompt-page.mjs +239 -0
  5. package/features/model-slider/THIRD_PARTY_NOTICES.md +1 -1
  6. package/features/notes/DESIGN.md +66 -0
  7. package/features/notes/README.md +18 -99
  8. package/features/notes/assets/icons/book-open-nav.svg +15 -0
  9. package/features/notes/assets/icons/book-open.svg +16 -0
  10. package/features/notes/assets/native-emojis.json +1 -0
  11. package/features/notes/assets/native-prompt-icons.json +28 -0
  12. package/features/notes/codex-feature.json +12 -70
  13. package/features/notes/src/main.mjs +2 -2
  14. package/features/notes/src/product.mjs +287 -613
  15. package/features/notes/src/prompt-schema.mjs +117 -0
  16. package/features/notes/src/quick-prompts-page.mjs +1559 -0
  17. package/features/notes/src/quick-prompts-server.mjs +167 -0
  18. package/features/session-status/DESIGN.md +10 -2
  19. package/features/session-status/README.md +8 -4
  20. package/features/session-status/src/session-status.mjs +268 -24
  21. package/features/sidebar-focus/DESIGN.md +16 -0
  22. package/features/sidebar-focus/codex-feature.json +20 -0
  23. package/features/sidebar-focus/src/sidebar-focus.mjs +134 -0
  24. package/features/sidebar-focus/vendor/lucide-LICENSE +43 -0
  25. package/features/unread-inbox/DESIGN.md +28 -0
  26. package/features/unread-inbox/codex-feature.json +20 -0
  27. package/features/unread-inbox/src/unread-inbox.mjs +360 -0
  28. package/features/usage-meter/DESIGN.md +49 -0
  29. package/features/usage-meter/README.md +18 -0
  30. package/features/usage-meter/codex-feature.json +13 -0
  31. package/features/usage-meter/src/usage-meter.mjs +200 -0
  32. package/package.json +17 -5
  33. package/packages/cli/src/config.mjs +4 -1
  34. package/packages/cli/src/control-server.mjs +2 -2
  35. package/packages/runtime-host/src/codex-injection.mjs +38 -3
  36. package/packages/runtime-host/src/codex-runtime.mjs +41 -20
  37. package/packages/runtime-host/src/feature-registry.mjs +1 -0
  38. package/packages/runtime-host/src/session-status-reader.mjs +40 -16
  39. package/features/notes/assets/icons/circle.svg +0 -15
  40. package/features/notes/assets/icons/ellipsis.svg +0 -17
  41. package/features/notes/assets/icons/external-link.svg +0 -17
  42. package/features/notes/assets/icons/list-todo.svg +0 -19
  43. package/features/notes/assets/icons/message-square-quote.svg +0 -17
  44. package/features/notes/assets/icons/paperclip.svg +0 -15
  45. package/features/notes/assets/icons/star-off.svg +0 -17
  46. package/features/notes/assets/icons/star.svg +0 -15
  47. package/features/notes/assets/icons/sticky-note.svg +0 -16
  48. package/features/notes/assets/icons/trash-2.svg +0 -19
  49. package/features/notes/src/http-server.mjs +0 -580
  50. package/features/notes/web/app.js +0 -1202
  51. package/features/notes/web/codex-artifact-document.svg +0 -1
  52. package/features/notes/web/codex-attachment.svg +0 -1
  53. package/features/notes/web/codex-build.svg +0 -1
  54. package/features/notes/web/codex-code.svg +0 -1
  55. package/features/notes/web/codex-cplusplus.svg +0 -1
  56. package/features/notes/web/codex-css.svg +0 -1
  57. package/features/notes/web/codex-document.svg +0 -1
  58. package/features/notes/web/codex-file.svg +0 -1
  59. package/features/notes/web/codex-folder.svg +0 -1
  60. package/features/notes/web/codex-hashes.svg +0 -1
  61. package/features/notes/web/codex-html.svg +0 -1
  62. package/features/notes/web/codex-image.svg +0 -1
  63. package/features/notes/web/codex-java.svg +0 -1
  64. package/features/notes/web/codex-javascript.svg +0 -1
  65. package/features/notes/web/codex-json.svg +0 -1
  66. package/features/notes/web/codex-notebook.svg +0 -1
  67. package/features/notes/web/codex-pdf.svg +0 -1
  68. package/features/notes/web/codex-pencil.svg +0 -3
  69. package/features/notes/web/codex-php.svg +0 -1
  70. package/features/notes/web/codex-plus.svg +0 -3
  71. package/features/notes/web/codex-presentation.svg +0 -1
  72. package/features/notes/web/codex-python.svg +0 -1
  73. package/features/notes/web/codex-react.svg +0 -1
  74. package/features/notes/web/codex-rust.svg +0 -1
  75. package/features/notes/web/codex-shell.svg +0 -1
  76. package/features/notes/web/codex-skill.svg +0 -1
  77. package/features/notes/web/codex-spreadsheet.svg +0 -1
  78. package/features/notes/web/codex-task.svg +0 -3
  79. package/features/notes/web/codex-terminal.svg +0 -1
  80. package/features/notes/web/codex-toml.svg +0 -1
  81. package/features/notes/web/codex-typescript.svg +0 -1
  82. package/features/notes/web/codex-view-all.svg +0 -3
  83. package/features/notes/web/file-icons.mjs +0 -68
  84. package/features/notes/web/i18n.mjs +0 -237
  85. package/features/notes/web/index.html +0 -15
  86. package/features/notes/web/styles.css +0 -1155
  87. package/features/notes/web/todo-drag.mjs +0 -18
@@ -1,1155 +0,0 @@
1
- :root {
2
- color-scheme: light dark;
3
- --notes-bg: var(--codex-surface-primary, var(--color-token-main-surface-primary, #fff));
4
- --notes-summary-bg: var(--codex-dropdown-background, var(--color-token-dropdown-background, var(--notes-bg)));
5
- --notes-bg-elevated: var(--codex-surface-elevated, var(--color-token-dropdown-background, var(--color-background-elevated-primary-opaque, var(--color-background-panel, #fff))));
6
- --notes-text: var(--codex-text-primary, var(--color-token-foreground, var(--color-text-foreground, #151515)));
7
- --notes-text-secondary: var(--codex-text-secondary, var(--color-token-text-secondary, var(--color-text-foreground-secondary, #666)));
8
- --notes-text-tertiary: var(--codex-text-tertiary, var(--color-token-text-tertiary, var(--color-text-foreground-tertiary, #8a8a8a)));
9
- --notes-border: var(--codex-border, var(--color-token-border, var(--color-border, rgba(0, 0, 0, 0.1))));
10
- --notes-hover: var(--codex-list-hover, var(--color-token-list-hover-background, rgba(13, 13, 13, 0.05)));
11
- --notes-accent: var(--codex-accent, var(--color-text-accent, var(--codex-base-accent, #0f766e)));
12
- --notes-input-bg: var(--color-token-input-background, rgba(255, 255, 255, 0.96));
13
- --notes-input-border: var(--color-token-input-border, rgba(13, 13, 13, 0.111));
14
- --notes-input-text: var(--color-token-input-foreground, var(--notes-text));
15
- --notes-input-placeholder: var(--color-token-input-placeholder-foreground, rgba(13, 13, 13, 0.484));
16
- --notes-button-bg: var(--color-background-primary-solid, var(--color-token-button-background, #0d0d0d));
17
- --notes-button-text: var(--color-text-primary-solid, var(--color-token-button-foreground, #fff));
18
- --notes-button-tertiary-text: var(--color-text-button-tertiary, var(--notes-text-tertiary));
19
- --notes-button-tertiary-hover: var(--color-background-button-tertiary-hover, var(--notes-hover));
20
- --notes-danger: var(--codex-danger, #c93b3b);
21
- --notes-focus: var(--codex-focus, var(--color-token-focus-border, var(--color-border-focus, color-mix(in srgb, var(--notes-accent), transparent 38%))));
22
- --notes-radius: var(--codex-radius, var(--radius-lg, 8px));
23
- --notes-shadow: var(--codex-shadow, var(--shadow-xl, 0 8px 28px rgba(0, 0, 0, 0.12)));
24
- font-family: var(--font-sans-default, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);
25
- /* Keep host rem-based radius and spacing tokens on Codex's 16px root basis. */
26
- font-size: 16px;
27
- color: var(--notes-text);
28
- background: transparent;
29
- }
30
-
31
- @media (prefers-color-scheme: dark) {
32
- :root {
33
- --notes-bg: var(--codex-surface-primary, var(--color-token-main-surface-primary, #181818));
34
- --notes-summary-bg: var(--codex-dropdown-background, var(--color-token-dropdown-background, var(--notes-bg)));
35
- --notes-bg-elevated: var(--codex-surface-elevated, var(--color-token-dropdown-background, var(--color-background-elevated-primary-opaque, var(--color-background-panel, #252525))));
36
- --notes-text: var(--codex-text-primary, var(--color-token-foreground, var(--color-text-foreground, #f2f2f2)));
37
- --notes-text-secondary: var(--codex-text-secondary, var(--color-token-text-secondary, var(--color-text-foreground-secondary, #b5b5b5)));
38
- --notes-text-tertiary: var(--codex-text-tertiary, var(--color-token-text-tertiary, var(--color-text-foreground-tertiary, #858585)));
39
- --notes-border: var(--codex-border, var(--color-token-border, var(--color-border, rgba(255, 255, 255, 0.11))));
40
- --notes-hover: var(--codex-list-hover, var(--color-token-list-hover-background, rgba(255, 255, 255, 0.075)));
41
- --notes-accent: var(--codex-accent, var(--color-text-accent, var(--codex-base-accent, #5eead4)));
42
- --notes-input-bg: var(--color-token-input-background, rgba(45, 45, 45, 0.96));
43
- --notes-input-border: var(--color-token-input-border, rgba(255, 255, 255, 0.156));
44
- --notes-input-text: var(--color-token-input-foreground, var(--notes-text));
45
- --notes-input-placeholder: var(--color-token-input-placeholder-foreground, rgba(255, 255, 255, 0.498));
46
- --notes-button-bg: var(--color-background-primary-solid, var(--color-token-button-background, #fff));
47
- --notes-button-text: var(--color-text-primary-solid, var(--color-token-button-foreground, #2d2d2d));
48
- }
49
- }
50
-
51
- *,
52
- *::before,
53
- *::after {
54
- box-sizing: border-box;
55
- }
56
-
57
- html,
58
- body,
59
- #app {
60
- width: 100%;
61
- min-height: 100%;
62
- margin: 0;
63
- }
64
-
65
- body {
66
- background: var(--notes-bg);
67
- color: var(--notes-text);
68
- font-size: var(--text-base, 14px);
69
- overflow: hidden;
70
- }
71
-
72
- body[data-surface="summary"] {
73
- height: 100vh;
74
- min-height: 0;
75
- background: var(--notes-summary-bg);
76
- }
77
-
78
- body[data-surface="summary"] #app {
79
- height: 100%;
80
- min-height: 0;
81
- }
82
-
83
- body:not([data-surface="summary"]) {
84
- overflow: auto;
85
- }
86
-
87
- button,
88
- input,
89
- textarea {
90
- font: inherit;
91
- }
92
-
93
- button,
94
- summary {
95
- color: inherit;
96
- }
97
-
98
- button:focus-visible,
99
- summary:focus-visible,
100
- input:focus-visible,
101
- textarea:focus-visible,
102
- [tabindex]:focus-visible {
103
- outline: 2px solid var(--notes-focus);
104
- outline-offset: 1px;
105
- }
106
-
107
- button {
108
- border: 0;
109
- background: none;
110
- cursor: pointer;
111
- }
112
-
113
- .summary-shell {
114
- width: 100%;
115
- max-height: 100vh;
116
- padding: 6px 0 0;
117
- overflow: hidden;
118
- border-radius: var(--codex-summary-panel-radius, 25px);
119
- corner-shape: var(--codex-summary-panel-corner-shape, var(--codex-corner-shape, superellipse(1.5)));
120
- background: var(--notes-summary-bg);
121
- }
122
-
123
- .summary-scroll {
124
- display: flex;
125
- max-height: calc(100vh - 6px);
126
- flex-direction: column;
127
- gap: 12px;
128
- overflow-x: hidden;
129
- overflow-y: auto;
130
- padding: 4px 0 6px;
131
- overscroll-behavior: contain;
132
- font-size: var(--codex-summary-row-font-size, 16px);
133
- font-weight: var(--codex-summary-font-weight, 445);
134
- line-height: var(--codex-summary-row-line-height, 24px);
135
- }
136
-
137
- .summary-section {
138
- position: relative;
139
- display: flex;
140
- flex: 0 0 auto;
141
- flex-direction: column;
142
- padding-bottom: 12px;
143
- }
144
-
145
- .summary-section:not(:last-child)::after {
146
- position: absolute;
147
- right: 14px;
148
- bottom: 0;
149
- left: 14px;
150
- height: 0.5px;
151
- background: var(--notes-border);
152
- content: "";
153
- }
154
-
155
- .summary-section:last-child {
156
- padding-bottom: 0;
157
- }
158
-
159
- .section-header,
160
- .page-section-title {
161
- min-height: 28px;
162
- display: flex;
163
- align-items: center;
164
- justify-content: space-between;
165
- gap: 8px;
166
- padding: 0 10px 2px 14px;
167
- color: var(--codex-summary-section-title-color, var(--notes-text-tertiary));
168
- font-size: var(--codex-summary-section-title-font-size, 14px);
169
- /* The embedded surface rasterizes 445 more heavily than the host layer. */
170
- font-weight: var(--codex-summary-section-title-font-weight, 400);
171
- line-height: var(--codex-summary-section-title-line-height, 21px);
172
- flex: 0 0 auto;
173
- }
174
-
175
- .summary-section .section-header {
176
- position: sticky;
177
- top: 0;
178
- z-index: 2;
179
- height: 28px;
180
- min-height: 28px;
181
- background: var(--notes-summary-bg);
182
- }
183
-
184
- .flat-list {
185
- list-style: none;
186
- padding: 0 8px;
187
- margin: 0;
188
- }
189
-
190
- .summary-section > .flat-list {
191
- padding: 0 14px;
192
- margin-top: 2px;
193
- display: flex;
194
- flex-direction: column;
195
- gap: 2px;
196
- }
197
-
198
- .row,
199
- .empty-row,
200
- .view-all {
201
- min-height: 29px;
202
- }
203
-
204
- .summary-section .row,
205
- .summary-section .empty-row,
206
- .summary-section .view-all {
207
- height: 29px;
208
- }
209
-
210
- .row {
211
- position: relative;
212
- isolation: isolate;
213
- display: flex;
214
- align-items: center;
215
- gap: 4px;
216
- padding: 4px 0;
217
- border-radius: var(--codex-summary-row-radius, var(--radius-sm, 7.5px));
218
- color: var(--notes-text);
219
- font-size: var(--codex-summary-row-font-size, 16px);
220
- font-weight: var(--codex-summary-font-weight, 445);
221
- line-height: var(--codex-summary-row-line-height, 24px);
222
- }
223
-
224
- .row::before {
225
- content: "";
226
- position: absolute;
227
- inset: 0 -8px;
228
- z-index: -1;
229
- border-radius: var(--codex-summary-row-radius, var(--radius-sm, 7.5px));
230
- }
231
-
232
- .row:hover::before,
233
- .row:has(:focus-visible)::before,
234
- .prompt-row:has(.row-menu[open])::before {
235
- background: var(--notes-hover);
236
- }
237
-
238
- .row.is-dragging {
239
- opacity: 0.2;
240
- }
241
-
242
- .todo-row[draggable="true"] {
243
- cursor: grab;
244
- }
245
-
246
- .todo-row.is-dragging,
247
- .todo-row.is-dragging * {
248
- cursor: grabbing;
249
- }
250
-
251
- .todo-drag-preview {
252
- position: fixed;
253
- z-index: 4;
254
- top: -1000px;
255
- left: -1000px;
256
- width: var(--todo-drag-preview-width);
257
- height: 31px;
258
- min-height: 0;
259
- overflow: hidden;
260
- border: 1px solid var(--color-token-border, var(--notes-border));
261
- border-radius: var(--radius-lg, 12.5px);
262
- color: var(--notes-text);
263
- background: var(--color-token-bg-primary, #f7f7f7);
264
- box-shadow: var(--shadow-lg, 0 4px 8px -2px #0000001a);
265
- opacity: 0.7;
266
- pointer-events: none;
267
- }
268
-
269
- .todo-drag-preview-content {
270
- width: 100%;
271
- max-width: none;
272
- height: 29px;
273
- min-height: 0;
274
- margin: 0;
275
- padding: 0 8px;
276
- border-radius: 0;
277
- background: transparent;
278
- opacity: 1;
279
- }
280
-
281
- .todo-drag-preview-content::before {
282
- display: none;
283
- }
284
-
285
- .todo-row {
286
- --todo-drop-indicator-color: var(--color-token-text-link-foreground, var(--color-text-accent, var(--notes-accent)));
287
- --todo-drop-indicator-surface: var(--notes-bg);
288
- }
289
-
290
- .summary-shell .todo-row {
291
- --todo-drop-indicator-surface: var(--notes-summary-bg);
292
- }
293
-
294
- .summary-shell .todo-drop-indicator {
295
- left: -8px;
296
- }
297
-
298
- .todo-drop-indicator {
299
- position: absolute;
300
- right: 0;
301
- left: 0;
302
- z-index: 3;
303
- display: none;
304
- height: 0;
305
- pointer-events: none;
306
- }
307
-
308
- .todo-row[data-drop-position="before"] > .todo-drop-indicator {
309
- top: 0;
310
- display: block;
311
- }
312
-
313
- .todo-row[data-drop-position="after"] > .todo-drop-indicator {
314
- bottom: 0;
315
- display: block;
316
- }
317
-
318
- .todo-drop-indicator::before {
319
- position: absolute;
320
- top: -1px;
321
- right: 8px;
322
- left: 8px;
323
- height: 2px;
324
- border-radius: 999px;
325
- background: var(--todo-drop-indicator-color);
326
- content: "";
327
- }
328
-
329
- .todo-drop-indicator::after {
330
- position: absolute;
331
- top: -4px;
332
- left: 4px;
333
- width: 8px;
334
- height: 8px;
335
- border: 2px solid var(--todo-drop-indicator-color);
336
- border-radius: 50%;
337
- background: var(--todo-drop-indicator-surface);
338
- content: "";
339
- }
340
-
341
- .row-primary {
342
- flex: 1 1 auto;
343
- min-width: 0;
344
- padding: 0;
345
- overflow: hidden;
346
- text-overflow: ellipsis;
347
- white-space: nowrap;
348
- color: inherit;
349
- text-align: left;
350
- font-size: var(--codex-summary-label-font-size, var(--text-base, 14px));
351
- line-height: var(--codex-summary-label-line-height, 21px);
352
- }
353
-
354
- .row-actions {
355
- flex: 0 0 auto;
356
- display: flex;
357
- align-items: center;
358
- gap: 2px;
359
- opacity: 0;
360
- pointer-events: none;
361
- }
362
-
363
- .row:hover .row-actions,
364
- .row:has(:focus-visible) .row-actions,
365
- .prompt-row:has(.row-menu[open]) .row-actions {
366
- opacity: 1;
367
- pointer-events: auto;
368
- }
369
-
370
- .text-button,
371
- .quiet-button,
372
- .primary-button,
373
- .page-action {
374
- min-height: 24px;
375
- display: inline-flex;
376
- align-items: center;
377
- justify-content: center;
378
- white-space: nowrap;
379
- }
380
-
381
- .text-button,
382
- .primary-button,
383
- .page-action {
384
- min-height: var(--spacing-token-button-composer, 28px);
385
- border-radius: var(--radius-lg, 12.5px);
386
- padding: 4px 9px;
387
- font-size: var(--text-base, 14px);
388
- font-weight: var(--codex-summary-font-weight, 445);
389
- line-height: 18px;
390
- transition: background-color 120ms ease, color 120ms ease, opacity 120ms ease;
391
- }
392
-
393
- .page-action {
394
- gap: 4px;
395
- padding-inline: 8px;
396
- corner-shape: var(--codex-corner-shape, superellipse(1.5));
397
- color: var(--notes-text);
398
- background: var(--notes-hover);
399
- }
400
-
401
- .page-action:hover {
402
- background: color-mix(in srgb, var(--notes-text) 10%, transparent);
403
- }
404
-
405
- .page-action:active {
406
- background: color-mix(in srgb, var(--notes-text) 14%, transparent);
407
- }
408
-
409
- .icon.page-action-icon {
410
- width: 16px;
411
- height: 16px;
412
- }
413
-
414
- .text-button,
415
- .quiet-button {
416
- color: var(--notes-text-secondary);
417
- }
418
-
419
- .text-button:hover,
420
- .quiet-button:hover {
421
- color: var(--notes-text);
422
- background: var(--notes-button-tertiary-hover);
423
- }
424
-
425
- .quiet-button {
426
- width: 24px;
427
- padding: 0;
428
- }
429
-
430
- .summary-shell .quiet-button {
431
- width: 28px;
432
- min-height: 28px;
433
- border-radius: var(--codex-summary-control-radius, var(--radius-md, 10px));
434
- }
435
-
436
- .summary-shell .quiet-button:hover {
437
- background: var(--notes-hover);
438
- }
439
-
440
- .summary-shell .section-header .quiet-button {
441
- color: var(--codex-summary-icon-tertiary, var(--notes-text-tertiary));
442
- }
443
-
444
- .row-actions .quiet-button {
445
- width: 28px;
446
- min-height: 28px;
447
- border-radius: var(--codex-summary-control-radius, var(--radius-md, 10px));
448
- color: var(--color-token-text-tertiary, var(--notes-text-tertiary));
449
- }
450
-
451
- .row-actions .quiet-button:hover {
452
- background: var(--notes-hover);
453
- }
454
-
455
- .row-actions .icon-trash-2 {
456
- width: var(--codex-summary-delete-icon-size, 16px);
457
- height: var(--codex-summary-delete-icon-size, 16px);
458
- }
459
-
460
- .file-row .row-actions .icon-trash-2 {
461
- width: var(--codex-summary-file-action-icon-size, 15px);
462
- height: var(--codex-summary-file-action-icon-size, 15px);
463
- }
464
-
465
- .file-row .row-actions .icon-external-link {
466
- width: var(--codex-summary-file-action-icon-size, 15px);
467
- height: var(--codex-summary-file-action-icon-size, 15px);
468
- }
469
-
470
- .prompt-row .row-actions .icon {
471
- width: var(--codex-summary-prompt-action-icon-size, 15px);
472
- height: var(--codex-summary-prompt-action-icon-size, 15px);
473
- }
474
-
475
- .todo-row .row-actions .icon-edit-pencil,
476
- .prompt-row .row-actions .icon-edit-pencil {
477
- width: var(--codex-summary-edit-icon-size, 16px);
478
- height: var(--codex-summary-edit-icon-size, 16px);
479
- }
480
-
481
- .icon {
482
- width: var(--codex-summary-icon-size, 18px);
483
- height: var(--codex-summary-icon-size, 18px);
484
- display: inline-block;
485
- flex: 0 0 auto;
486
- background-color: currentColor;
487
- -webkit-mask: var(--icon-url) center / contain no-repeat;
488
- mask: var(--icon-url) center / contain no-repeat;
489
- }
490
-
491
- .icon-circle { --icon-url: url("/icons/circle.svg"); }
492
- .icon-circle-check { --icon-url: url("/icons/circle-check.svg"); }
493
- .icon-ellipsis { --icon-url: url("/icons/ellipsis.svg"); }
494
- .icon-external-link { --icon-url: url("/icons/external-link.svg"); }
495
- .icon-attachment { --icon-url: url("/icons/attachment.svg"); }
496
- .icon-list-todo { --icon-url: url("/icons/list-todo.svg"); }
497
- .icon-message-square-quote { --icon-url: url("/icons/message-square-quote.svg"); }
498
- .icon-paperclip { --icon-url: url("/icons/paperclip.svg"); }
499
- .icon-edit-pencil { --icon-url: url("/icons/edit-pencil.svg"); }
500
- .icon-star { --icon-url: url("/icons/star.svg"); }
501
- .icon-star-off { --icon-url: url("/icons/star-off.svg"); }
502
- .icon-plus { --icon-url: url("/icons/plus.svg"); }
503
- .icon-trash-2 { --icon-url: url("/icons/trash-2.svg"); }
504
- .icon-file-artifact-document { --icon-url: url("/icons/file-artifact-document.svg"); }
505
- .icon-file-build { --icon-url: url("/icons/file-build.svg"); }
506
- .icon-file-code { --icon-url: url("/icons/file-code.svg"); }
507
- .icon-file-cplusplus { --icon-url: url("/icons/file-cplusplus.svg"); }
508
- .icon-file-css { --icon-url: url("/icons/file-css.svg"); }
509
- .icon-file-document { --icon-url: url("/icons/file-document.svg"); }
510
- .icon-file-file { --icon-url: url("/icons/file-file.svg"); }
511
- .icon-file-folder { --icon-url: url("/icons/file-folder.svg"); }
512
- .icon-file-hashes { --icon-url: url("/icons/file-hashes.svg"); }
513
- .icon-file-html { --icon-url: url("/icons/file-html.svg"); }
514
- .icon-file-image { --icon-url: url("/icons/file-image.svg"); }
515
- .icon-file-java { --icon-url: url("/icons/file-java.svg"); }
516
- .icon-file-javascript { --icon-url: url("/icons/file-javascript.svg"); }
517
- .icon-file-json { --icon-url: url("/icons/file-json.svg"); }
518
- .icon-file-notebook { --icon-url: url("/icons/file-notebook.svg"); }
519
- .icon-file-pdf { --icon-url: url("/icons/file-pdf.svg"); }
520
- .icon-file-php { --icon-url: url("/icons/file-php.svg"); }
521
- .icon-file-presentation { --icon-url: url("/icons/file-presentation.svg"); }
522
- .icon-file-python { --icon-url: url("/icons/file-python.svg"); }
523
- .icon-file-react { --icon-url: url("/icons/file-react.svg"); }
524
- .icon-file-rust { --icon-url: url("/icons/file-rust.svg"); }
525
- .icon-file-shell { --icon-url: url("/icons/file-shell.svg"); }
526
- .icon-file-skill { --icon-url: url("/icons/file-skill.svg"); }
527
- .icon-file-spreadsheet { --icon-url: url("/icons/file-spreadsheet.svg"); }
528
- .icon-file-terminal { --icon-url: url("/icons/file-terminal.svg"); }
529
- .icon-file-toml { --icon-url: url("/icons/file-toml.svg"); }
530
- .icon-file-typescript { --icon-url: url("/icons/file-typescript.svg"); }
531
-
532
- .primary-button {
533
- color: var(--notes-button-text);
534
- background: var(--notes-button-bg);
535
- }
536
-
537
- .primary-button:hover {
538
- opacity: 0.86;
539
- }
540
-
541
- .primary-button:active {
542
- opacity: 0.72;
543
- }
544
-
545
- .subtle {
546
- color: var(--notes-button-tertiary-text);
547
- }
548
-
549
- .view-all {
550
- width: calc(100% - 28px);
551
- margin: 2px 14px 0;
552
- display: flex;
553
- align-items: center;
554
- gap: 4px;
555
- padding: 4px 0;
556
- border-radius: var(--codex-summary-row-radius, var(--radius-sm, 7.5px));
557
- color: var(--color-token-conversation-summary-trailing, var(--notes-text-tertiary));
558
- text-align: left;
559
- font-size: var(--codex-summary-row-font-size, 16px);
560
- font-weight: var(--codex-summary-font-weight, 445);
561
- line-height: var(--codex-summary-row-line-height, 24px);
562
- }
563
-
564
- .view-all:hover {
565
- color: var(--notes-text);
566
- }
567
-
568
- .view-all-icon {
569
- margin-right: 8px;
570
- }
571
-
572
- .view-all-label {
573
- min-width: 0;
574
- flex: 1 1 auto;
575
- font-size: var(--codex-summary-label-font-size, var(--text-base, 14px));
576
- line-height: var(--codex-summary-label-line-height, 21px);
577
- }
578
-
579
- .empty-row {
580
- display: flex;
581
- align-items: center;
582
- padding: 4px 0;
583
- color: var(--notes-text);
584
- font-size: var(--codex-summary-label-font-size, var(--text-base, 14px));
585
- line-height: var(--codex-summary-label-line-height, 21px);
586
- }
587
-
588
- .check-control {
589
- width: 18px;
590
- height: 18px;
591
- display: grid;
592
- place-items: center;
593
- flex: 0 0 auto;
594
- margin-right: 8px;
595
- cursor: pointer;
596
- }
597
-
598
- .check-control input {
599
- position: absolute;
600
- opacity: 0;
601
- pointer-events: none;
602
- }
603
-
604
- .check-control input:focus-visible + .todo-check-icon {
605
- outline: 2px solid var(--notes-focus);
606
- outline-offset: 2px;
607
- }
608
-
609
- .todo-check-icon {
610
- width: var(--codex-summary-todo-unchecked-size, 16px);
611
- height: var(--codex-summary-todo-unchecked-size, 16px);
612
- box-sizing: border-box;
613
- border: 1.3px solid var(--color-token-text-tertiary, var(--notes-text-tertiary));
614
- border-radius: 50%;
615
- }
616
-
617
- .check-control input:checked + .todo-check-icon {
618
- width: var(--codex-summary-icon-size, 18px);
619
- height: var(--codex-summary-icon-size, 18px);
620
- border: 0;
621
- border-radius: 0;
622
- background: var(--notes-accent);
623
- -webkit-mask: url("/icons/circle-check.svg") center / contain no-repeat;
624
- mask: url("/icons/circle-check.svg") center / contain no-repeat;
625
- }
626
-
627
- .is-completed .todo-label {
628
- color: var(--notes-text-tertiary);
629
- text-decoration: line-through;
630
- }
631
-
632
- .star-mark {
633
- width: var(--codex-summary-prompt-star-icon-size, var(--codex-summary-file-icon-size, 16px));
634
- height: var(--codex-summary-prompt-star-icon-size, var(--codex-summary-file-icon-size, 16px));
635
- flex: 0 0 auto;
636
- color: currentColor;
637
- }
638
-
639
- .prompt-star-leading {
640
- color: var(--color-token-text-secondary, var(--notes-text-secondary));
641
- }
642
-
643
- .file-kind {
644
- width: var(--codex-summary-file-icon-size, 16px);
645
- height: var(--codex-summary-file-icon-size, 16px);
646
- display: block;
647
- flex: 0 0 auto;
648
- color: currentColor;
649
- }
650
-
651
- .file-kind.is-color {
652
- object-fit: contain;
653
- }
654
-
655
- .file-row {
656
- color: var(--color-token-text-secondary, var(--notes-text-secondary));
657
- }
658
-
659
- .summary-leading {
660
- width: var(--codex-summary-icon-size, 18px);
661
- height: var(--codex-summary-icon-size, 18px);
662
- display: flex;
663
- align-items: center;
664
- justify-content: center;
665
- flex: 0 0 auto;
666
- margin-right: 8px;
667
- }
668
-
669
- .file-leading {
670
- position: relative;
671
- }
672
-
673
- .file-thumbnail {
674
- width: 18px;
675
- height: 18px;
676
- display: block;
677
- flex: 0 0 auto;
678
- box-sizing: border-box;
679
- border: 1px solid var(--color-token-border-default, var(--notes-border));
680
- border-radius: 3px;
681
- object-fit: cover;
682
- }
683
-
684
- .file-thumbnail-fallback {
685
- display: none;
686
- align-items: center;
687
- justify-content: center;
688
- }
689
-
690
- .file-leading.is-fallback .file-thumbnail {
691
- display: none;
692
- }
693
-
694
- .file-leading.is-fallback .file-thumbnail-fallback {
695
- display: flex;
696
- }
697
-
698
- .row-menu {
699
- position: relative;
700
- }
701
-
702
- .prompt-row:has(.row-menu[open]) {
703
- z-index: 1;
704
- }
705
-
706
- .row-menu summary {
707
- list-style: none;
708
- cursor: pointer;
709
- }
710
-
711
- .row-menu summary::-webkit-details-marker {
712
- display: none;
713
- }
714
-
715
- .row-menu[open] > summary {
716
- color: var(--notes-text);
717
- background: var(--notes-hover);
718
- }
719
-
720
- .menu-popover {
721
- position: absolute;
722
- z-index: 20;
723
- top: calc(100% + 2px);
724
- right: 0;
725
- width: max-content;
726
- min-width: var(--codex-summary-menu-min-width, 160px);
727
- padding: var(--codex-summary-menu-padding, 4px);
728
- border: 0;
729
- border-radius: var(--codex-summary-menu-radius, var(--radius-xl, 15px));
730
- background: color-mix(in srgb, var(--notes-bg-elevated) 90%, transparent);
731
- box-shadow: var(--codex-summary-menu-shadow, 0 0 0 0.5px rgba(13, 13, 13, 0.075), 0 8px 16px -4px rgba(0, 0, 0, 0.12));
732
- -webkit-backdrop-filter: blur(4px);
733
- backdrop-filter: blur(4px);
734
- font-size: var(--codex-summary-menu-font-size, var(--text-sm, 13px));
735
- font-weight: var(--codex-summary-font-weight, 445);
736
- line-height: var(--codex-summary-menu-line-height, var(--text-sm--line-height, 18.5714px));
737
- }
738
-
739
- .menu-popover button {
740
- width: 100%;
741
- min-height: var(--codex-summary-menu-item-height, 28.5714px);
742
- display: flex;
743
- align-items: center;
744
- gap: var(--codex-summary-menu-icon-gap, 6px);
745
- border-radius: var(--codex-summary-menu-item-radius, var(--radius-lg, 12.5px));
746
- padding: 5px 8px;
747
- color: var(--notes-text);
748
- text-align: left;
749
- }
750
-
751
- .summary-shell .prompt-row .menu-popover .menu-item-icon {
752
- width: var(--codex-summary-menu-icon-size, 16px);
753
- height: var(--codex-summary-menu-icon-size, 16px);
754
- color: currentColor;
755
- opacity: var(--codex-summary-menu-icon-opacity, 0.75);
756
- }
757
-
758
- .menu-popover button:hover,
759
- .menu-popover button:focus-visible {
760
- outline: none;
761
- background: var(--notes-hover);
762
- }
763
-
764
- .menu-popover button:hover .menu-item-icon,
765
- .menu-popover button:focus-visible .menu-item-icon {
766
- opacity: 1;
767
- }
768
-
769
- body[data-surface="editor"],
770
- body[data-surface="editor"] #app {
771
- height: 100vh;
772
- min-height: 0;
773
- overflow: hidden;
774
- background: transparent;
775
- }
776
-
777
- .editor-modal-shell {
778
- width: 100%;
779
- height: 100vh;
780
- padding: 4px;
781
- overflow: hidden;
782
- border-radius: var(--codex-dialog-radius, 20px);
783
- corner-shape: var(--codex-dialog-corner-shape, round);
784
- color: var(--notes-text);
785
- background: var(--notes-summary-bg);
786
- font-size: var(--text-base, 14px);
787
- font-weight: var(--codex-summary-font-weight, 445);
788
- line-height: 21px;
789
- }
790
-
791
- .modal-editor {
792
- display: flex;
793
- height: 100%;
794
- min-height: 0;
795
- flex-direction: column;
796
- }
797
-
798
- .modal-editor-title {
799
- display: flex;
800
- min-height: 36px;
801
- flex: 0 0 36px;
802
- align-items: center;
803
- gap: 8px;
804
- padding: 7px 12px 8px;
805
- font-weight: inherit;
806
- }
807
-
808
- .modal-editor-title-icon {
809
- width: var(--codex-dialog-title-icon-size, 18px);
810
- height: var(--codex-dialog-title-icon-size, 18px);
811
- color: var(--notes-text);
812
- }
813
-
814
- .modal-editor-fields {
815
- display: flex;
816
- min-height: 0;
817
- flex: 1 1 auto;
818
- flex-direction: column;
819
- }
820
-
821
- .modal-editor-fields input,
822
- .modal-editor-fields textarea {
823
- width: 100%;
824
- min-height: 0;
825
- border: 0;
826
- border-radius: 0;
827
- outline: none;
828
- color: var(--notes-input-text);
829
- background: transparent;
830
- font-size: var(--text-base, 14px);
831
- font-weight: inherit;
832
- line-height: 21px;
833
- }
834
-
835
- .modal-editor-fields input:focus-visible,
836
- .modal-editor-fields textarea:focus-visible {
837
- outline: none;
838
- box-shadow: none;
839
- }
840
-
841
- .modal-command:focus-visible {
842
- outline: 2px solid var(--notes-focus);
843
- outline-offset: 1px;
844
- }
845
-
846
- .modal-editor-fields input {
847
- height: 36px;
848
- flex: 0 0 36px;
849
- padding: 7px 12px 8px;
850
- }
851
-
852
- .modal-editor-fields textarea {
853
- flex: 1 1 auto;
854
- padding: 8px 12px;
855
- resize: none;
856
- }
857
-
858
- .modal-actions {
859
- display: flex;
860
- flex: 0 0 auto;
861
- flex-direction: column;
862
- gap: 4px;
863
- padding: 4px 0;
864
- border-top: 0.5px solid var(--notes-border);
865
- }
866
-
867
- .modal-command {
868
- display: flex;
869
- width: 100%;
870
- min-height: 31px;
871
- align-items: center;
872
- justify-content: space-between;
873
- padding: 5px 8px;
874
- border-radius: var(--radius-lg, 12.5px);
875
- corner-shape: var(--codex-corner-shape, superellipse(1.5));
876
- color: var(--notes-text);
877
- background: transparent;
878
- font-weight: inherit;
879
- line-height: 21px;
880
- text-align: left;
881
- }
882
-
883
- .modal-command.is-default {
884
- background: color-mix(in srgb, var(--notes-text) 5%, transparent);
885
- }
886
-
887
- .modal-command:disabled {
888
- cursor: not-allowed;
889
- opacity: var(--codex-dialog-command-disabled-opacity, 0.4);
890
- }
891
-
892
- .modal-command.is-default:disabled {
893
- background: transparent;
894
- }
895
-
896
- .modal-command:disabled:hover,
897
- .modal-command:disabled:focus-visible {
898
- background: transparent;
899
- }
900
-
901
- .modal-command:hover,
902
- .modal-command:focus-visible {
903
- background: color-mix(in srgb, var(--notes-text) 10%, transparent);
904
- }
905
-
906
- .modal-command kbd {
907
- min-width: 38px;
908
- padding: 2px 7px;
909
- border-radius: 10px;
910
- color: var(--notes-text-secondary);
911
- background: color-mix(in srgb, var(--notes-text) 10%, transparent);
912
- font-family: inherit;
913
- font-size: 12px;
914
- font-weight: inherit;
915
- line-height: 16px;
916
- text-align: center;
917
- }
918
-
919
- input,
920
- textarea {
921
- width: 100%;
922
- border: 1px solid var(--notes-input-border);
923
- border-radius: var(--radius-md, 10px);
924
- padding: 6px 10px;
925
- color: var(--notes-input-text);
926
- background: var(--notes-input-bg);
927
- font-size: var(--text-base, 14px);
928
- font-weight: var(--codex-summary-font-weight, 445);
929
- line-height: 20px;
930
- }
931
-
932
- input::placeholder,
933
- textarea::placeholder {
934
- color: var(--notes-input-placeholder);
935
- opacity: 1;
936
- }
937
-
938
- textarea {
939
- resize: vertical;
940
- min-height: 96px;
941
- }
942
-
943
- .full-shell {
944
- width: 100%;
945
- padding: 22px 16px 64px;
946
- }
947
-
948
- .page-header {
949
- display: flex;
950
- justify-content: space-between;
951
- align-items: center;
952
- gap: 20px;
953
- padding: 4px 0 20px;
954
- border-bottom: 0.5px solid var(--notes-border);
955
- }
956
-
957
- .page-header h1 {
958
- margin: 0;
959
- font-size: 22px;
960
- line-height: 1.2;
961
- letter-spacing: -0.02em;
962
- }
963
-
964
- .drop-hint {
965
- margin: 6px 0 0;
966
- color: var(--notes-text-secondary);
967
- font-size: 13px;
968
- line-height: 1.45;
969
- }
970
-
971
- .page-section {
972
- margin-top: 18px;
973
- }
974
-
975
- .todo-page > .page-section:first-child,
976
- .prompts-page > .page-section:first-of-type,
977
- .files-page > .page-section:first-of-type {
978
- margin-top: 0;
979
- }
980
-
981
- .prompts-page-actions {
982
- display: flex;
983
- min-height: var(--spacing-token-button-composer, 28px);
984
- align-items: center;
985
- justify-content: flex-end;
986
- margin-bottom: 18px;
987
- }
988
-
989
- .prompts-page > .page-section + .page-section {
990
- margin-top: 30px;
991
- }
992
-
993
- .page-section-title {
994
- padding: 0 0 8px;
995
- }
996
-
997
- .page-section-title h2 {
998
- margin: 0;
999
- color: inherit;
1000
- font: inherit;
1001
- }
1002
-
1003
- .page-section-heading {
1004
- display: flex;
1005
- min-width: 0;
1006
- align-items: center;
1007
- gap: 12px;
1008
- }
1009
-
1010
- .page-section-count {
1011
- color: inherit;
1012
- font: inherit;
1013
- }
1014
-
1015
- .full-list {
1016
- padding: 2px 0;
1017
- border-top: 0.5px solid var(--notes-border);
1018
- }
1019
-
1020
- .full-list .row {
1021
- min-height: 36px;
1022
- padding-inline: 7px;
1023
- }
1024
-
1025
- .prompts-page .prompt-row {
1026
- min-height: 0;
1027
- align-items: center;
1028
- padding: 8px;
1029
- }
1030
-
1031
- .prompts-page .prompt-row.is-multiline {
1032
- padding-block: 12px;
1033
- }
1034
-
1035
- .prompts-page .prompt-row + .prompt-row {
1036
- border-top: 0.5px solid var(--notes-border);
1037
- }
1038
-
1039
- .prompts-page .prompt-label {
1040
- display: -webkit-box;
1041
- overflow: hidden;
1042
- text-overflow: ellipsis;
1043
- white-space: normal;
1044
- -webkit-box-orient: vertical;
1045
- -webkit-line-clamp: 4;
1046
- }
1047
-
1048
- .prompts-page .prompt-row .row-actions {
1049
- align-self: center;
1050
- }
1051
-
1052
- .completed-section {
1053
- margin-top: 30px;
1054
- }
1055
-
1056
- .drop-hint {
1057
- padding: 10px 12px;
1058
- border: 0.5px dashed var(--notes-border);
1059
- border-radius: var(--notes-radius);
1060
- transition: border-color 120ms ease, background 120ms ease;
1061
- }
1062
-
1063
- body.is-file-dragging .drop-hint,
1064
- body.is-file-dragging .summary-shell {
1065
- border-color: var(--notes-accent);
1066
- background: color-mix(in srgb, var(--notes-accent), transparent 92%);
1067
- }
1068
-
1069
- .status-state {
1070
- min-height: 220px;
1071
- display: grid;
1072
- place-content: center;
1073
- justify-items: center;
1074
- gap: 10px;
1075
- color: var(--notes-text-secondary);
1076
- }
1077
-
1078
- .status-state p {
1079
- margin: 0;
1080
- }
1081
-
1082
- .spinner {
1083
- width: 16px;
1084
- height: 16px;
1085
- border: 2px solid var(--notes-border);
1086
- border-top-color: var(--notes-accent);
1087
- border-radius: 50%;
1088
- animation: spin 700ms linear infinite;
1089
- }
1090
-
1091
- @keyframes spin {
1092
- to { transform: rotate(360deg); }
1093
- }
1094
-
1095
- .toast {
1096
- position: fixed;
1097
- left: 50%;
1098
- bottom: 14px;
1099
- z-index: 40;
1100
- max-width: calc(100% - 28px);
1101
- padding: 7px 10px;
1102
- border: 0.5px solid var(--notes-border);
1103
- border-radius: 8px;
1104
- color: var(--notes-text);
1105
- background: var(--notes-bg-elevated);
1106
- box-shadow: var(--notes-shadow);
1107
- opacity: 0;
1108
- transform: translate(-50%, 5px);
1109
- pointer-events: none;
1110
- transition: opacity 120ms ease, transform 120ms ease;
1111
- white-space: nowrap;
1112
- overflow: hidden;
1113
- text-overflow: ellipsis;
1114
- }
1115
-
1116
- .toast.is-visible {
1117
- opacity: 1;
1118
- transform: translate(-50%, 0);
1119
- }
1120
-
1121
- .toast[data-tone="danger"] {
1122
- color: var(--notes-danger);
1123
- }
1124
-
1125
- ::-webkit-scrollbar {
1126
- width: 10px;
1127
- }
1128
-
1129
- ::-webkit-scrollbar-thumb {
1130
- border: 3px solid transparent;
1131
- border-radius: 999px;
1132
- background-clip: padding-box;
1133
- background-color: var(--color-token-scrollbar-slider-background, color-mix(in srgb, var(--notes-text-tertiary), transparent 45%));
1134
- }
1135
-
1136
- ::-webkit-scrollbar-thumb:hover {
1137
- background-color: var(--color-token-scrollbar-slider-hover-background, var(--color-token-scrollbar-slider-background, var(--notes-text-tertiary)));
1138
- }
1139
-
1140
- ::-webkit-scrollbar-thumb:active {
1141
- background-color: var(--color-token-scrollbar-slider-active-background, var(--color-token-scrollbar-slider-hover-background, var(--notes-text-tertiary)));
1142
- }
1143
-
1144
- @media (max-width: 520px) {
1145
- .full-shell {
1146
- padding: 16px 16px 48px;
1147
- }
1148
- }
1149
-
1150
- @media (hover: none) {
1151
- .row-actions {
1152
- opacity: 1;
1153
- pointer-events: auto;
1154
- }
1155
- }