@ouraihub/aether-ui 0.1.0 → 0.1.2

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 (90) hide show
  1. package/package.json +3 -3
  2. package/src/chat/ApprovalCard.svelte +8 -2
  3. package/src/chat/ChatComposer.svelte +319 -0
  4. package/src/chat/ChatMessage.svelte +262 -0
  5. package/src/chat/ChatPanel.css +386 -0
  6. package/src/chat/ChatPanel.svelte +276 -1880
  7. package/src/chat/ChatPanelApprovals.svelte +28 -0
  8. package/src/chat/ChatPanelComposer.svelte +336 -0
  9. package/src/chat/ChatPanelDialogs.svelte +242 -0
  10. package/src/chat/ChatPanelHeader.svelte +108 -0
  11. package/src/chat/ChatPanelMessages.svelte +166 -0
  12. package/src/chat/ChatPanelMode.svelte +190 -0
  13. package/src/chat/ChatPanelState.svelte.ts +1 -0
  14. package/src/chat/ChatPanelToolbar.svelte +436 -0
  15. package/src/chat/ChatSurface.svelte +168 -0
  16. package/src/chat/ContextUsageStatus.svelte +97 -0
  17. package/src/chat/MessageItem.svelte +111 -214
  18. package/src/chat/ModelEffortPicker.svelte +326 -0
  19. package/src/chat/PickerEffort.svelte +71 -0
  20. package/src/chat/ReasoningControl.svelte +184 -0
  21. package/src/chat/ReasoningSlider.svelte +174 -0
  22. package/src/chat/SkillPicker.svelte +14 -6
  23. package/src/chat/UsageControl.svelte +223 -0
  24. package/src/chat/UsageDetails.svelte +44 -90
  25. package/src/chat/chat-attachments.svelte.ts +78 -0
  26. package/src/chat/chat-panel-history.svelte.ts +430 -0
  27. package/src/chat/chat-panel-models.svelte.ts +97 -0
  28. package/src/chat/chat-panel-props.ts +38 -0
  29. package/src/chat/context-status.ts +101 -0
  30. package/src/chat/icons/LICENSE-REMIX +186 -0
  31. package/src/chat/icons/LICENSE-SIMPLE-ICONS +30 -0
  32. package/src/chat/icons/PathIcon.svelte +8 -0
  33. package/src/chat/icons/effort-icons.ts +65 -0
  34. package/src/chat/icons/status-icons.ts +105 -0
  35. package/src/chat/index.ts +25 -1
  36. package/src/chat/model-effort.ts +177 -0
  37. package/src/chat/run-session-history.ts +56 -0
  38. package/src/chat/run-session-types.ts +69 -0
  39. package/src/chat/run-session.svelte.ts +73 -135
  40. package/src/chat/test-support/chat-fixture.ts +194 -0
  41. package/src/chat/test-support/conversation-fixtures.ts +32 -0
  42. package/src/chat/test-support/run-session-fixture.ts +112 -0
  43. package/src/dev/Demo.svelte +3 -1
  44. package/src/i18n/en-chat.d.ts +1 -0
  45. package/src/i18n/en-chat.js +201 -0
  46. package/src/i18n/en.ts +58 -180
  47. package/src/i18n/index.ts +7 -2
  48. package/src/i18n/zh-CN-chat.d.ts +1 -0
  49. package/src/i18n/zh-CN-chat.js +190 -0
  50. package/src/i18n/zh-CN.ts +8 -153
  51. package/src/logs/LogPanel.svelte +9 -3
  52. package/src/logs/LogSettings.svelte +3 -1
  53. package/src/mcp/McpClientEditor.svelte +204 -0
  54. package/src/mcp/McpClientSettings.svelte +57 -130
  55. package/src/mcp/McpServerSettings.svelte +47 -11
  56. package/src/mcp/input.ts +2 -1
  57. package/src/ports/contract.ts +11 -2
  58. package/src/ports/fake-optional.ts +81 -0
  59. package/src/ports/fake.ts +90 -86
  60. package/src/ports/search.ts +11 -2
  61. package/src/ports/test-support/fake-fixture.ts +63 -0
  62. package/src/providers/EndpointKeysDialog.svelte +27 -13
  63. package/src/providers/EndpointModels.svelte +311 -0
  64. package/src/providers/EndpointPanel.svelte +33 -258
  65. package/src/providers/ModelPickerDialog.svelte +59 -16
  66. package/src/providers/ModelPricing.svelte +125 -0
  67. package/src/providers/ModelSelect.svelte +22 -8
  68. package/src/providers/ModelSettingsDialog.svelte +61 -126
  69. package/src/providers/ProviderDialogs.svelte +120 -0
  70. package/src/providers/ProviderList.svelte +159 -0
  71. package/src/providers/ProvidersSettings.svelte +67 -207
  72. package/src/providers/RequestConfigDialog.svelte +40 -12
  73. package/src/providers/SecretInput.svelte +11 -3
  74. package/src/providers/draft.ts +39 -13
  75. package/src/providers/edit-session.ts +31 -7
  76. package/src/providers/reasoning.ts +18 -4
  77. package/src/providers/revision.svelte.ts +3 -1
  78. package/src/providers/test-support/providers-fixture.ts +120 -0
  79. package/src/search/SearchAdvancedTools.svelte +182 -0
  80. package/src/search/SearchProviderCard.svelte +195 -0
  81. package/src/search/SearchSettings.svelte +62 -265
  82. package/src/search/settings-flow.ts +8 -3
  83. package/src/skills/SkillAdd.svelte +51 -18
  84. package/src/skills/SkillAuthoring.svelte +69 -20
  85. package/src/skills/SkillEditor.svelte +13 -3
  86. package/src/skills/SkillPreviewDialog.svelte +19 -5
  87. package/src/skills/SkillsSettings.svelte +11 -4
  88. package/src/skills/test-support/skills-fixture.ts +139 -0
  89. package/src/tauri/index.ts +23 -7
  90. package/src/web/index.ts +90 -25
@@ -0,0 +1,386 @@
1
+ .chat-panel {
2
+ display: flex;
3
+ flex: 1;
4
+ flex-direction: column;
5
+ gap: 0.75rem;
6
+ min-width: 0;
7
+ min-height: 0;
8
+ height: 100%;
9
+ container-type: size;
10
+ }
11
+ .chat-header {
12
+ display: flex;
13
+ flex-direction: column;
14
+ gap: 0.5rem;
15
+ flex: none;
16
+ min-width: 0;
17
+ }
18
+ .title-row {
19
+ display: flex;
20
+ align-items: center;
21
+ gap: 0.25rem;
22
+ min-width: 0;
23
+ }
24
+ .title-row h2 {
25
+ flex: 1;
26
+ min-width: 0;
27
+ margin: 0;
28
+ font: inherit;
29
+ font-weight: 600;
30
+ overflow: hidden;
31
+ text-overflow: ellipsis;
32
+ white-space: nowrap;
33
+ }
34
+ .title-row :global(button) {
35
+ flex-shrink: 0;
36
+ }
37
+ .model-row {
38
+ min-width: 0;
39
+ }
40
+ .turns {
41
+ display: flex;
42
+ flex-direction: column;
43
+ gap: 1rem;
44
+ padding: 0;
45
+ margin: 0;
46
+ list-style: none;
47
+ }
48
+ .empty-message {
49
+ color: var(--color-muted-foreground);
50
+ text-align: center;
51
+ padding: 1.5rem 0.5rem;
52
+ margin: 0;
53
+ }
54
+ .context-chip {
55
+ display: flex;
56
+ align-items: center;
57
+ align-self: flex-start;
58
+ gap: 0.25rem;
59
+ max-width: calc(100% - 2rem);
60
+ padding-left: 0.5rem;
61
+ background: var(--color-muted);
62
+ border-radius: var(--kit-radius, var(--radius));
63
+ }
64
+ .context-chip span {
65
+ min-width: 0;
66
+ overflow: hidden;
67
+ text-overflow: ellipsis;
68
+ white-space: nowrap;
69
+ }
70
+ .context-chip :global(button) {
71
+ flex-shrink: 0;
72
+ }
73
+ .image-tray {
74
+ display: flex;
75
+ flex-wrap: wrap;
76
+ gap: 0.375rem;
77
+ margin: 0;
78
+ padding: 0;
79
+ list-style: none;
80
+ }
81
+ .image-tray li {
82
+ position: relative;
83
+ }
84
+ .image-tray img {
85
+ width: 3.5rem;
86
+ height: 3.5rem;
87
+ object-fit: cover;
88
+ border: 1px solid var(--color-border);
89
+ border-radius: var(--kit-radius, var(--radius));
90
+ }
91
+ .image-tray :global(button) {
92
+ position: absolute;
93
+ top: -0.375rem;
94
+ right: -0.375rem;
95
+ }
96
+ .approval-override {
97
+ display: flex;
98
+ flex-direction: column;
99
+ gap: 0.5rem;
100
+ min-width: 0;
101
+ }
102
+ .approval-override > :global(button) {
103
+ align-self: flex-end;
104
+ }
105
+ .chat-panel :global(button.search-toggle) {
106
+ color: var(--color-muted-foreground);
107
+ }
108
+ .chat-panel :global(button.search-toggle[aria-pressed='true']) {
109
+ color: var(--color-primary-foreground);
110
+ background: var(--color-primary);
111
+ border-color: var(--color-primary);
112
+ }
113
+ .chat-panel :global(button.search-toggle[aria-pressed='true']:hover:not(:disabled)) {
114
+ background: color-mix(in oklch, var(--color-primary) 85%, var(--color-foreground));
115
+ }
116
+ :global(.tools-menu) {
117
+ z-index: 50;
118
+ box-sizing: border-box;
119
+ width: min(16rem, calc(100vw - 1rem));
120
+ display: flex;
121
+ flex-direction: column;
122
+ padding: 0.25rem;
123
+ border: 1px solid var(--color-border);
124
+ border-radius: var(--kit-radius, var(--radius));
125
+ background: var(--color-popover);
126
+ color: var(--color-popover-foreground);
127
+ box-shadow: 0 4px 12px color-mix(in oklch, var(--color-foreground) 12%, transparent);
128
+ font-size: var(--kit-font-size-sm, 0.8125rem);
129
+ }
130
+ :global(.tools-item) {
131
+ display: flex;
132
+ align-items: center;
133
+ gap: 0.5rem;
134
+ min-height: 2.25rem;
135
+ padding: 0.25rem 0.625rem;
136
+ border: 0;
137
+ border-radius: calc(var(--kit-radius, var(--radius)) - 2px);
138
+ background: transparent;
139
+ color: inherit;
140
+ font: inherit;
141
+ text-align: left;
142
+ cursor: pointer;
143
+ }
144
+ :global(.tools-item:hover:not(:disabled)),
145
+ :global(.tools-item:focus-visible) {
146
+ background: var(--color-accent);
147
+ color: var(--color-accent-foreground);
148
+ outline: none;
149
+ }
150
+ :global(.tools-item:disabled) {
151
+ cursor: not-allowed;
152
+ opacity: 0.55;
153
+ }
154
+ :global(.tools-item svg) {
155
+ width: 1rem;
156
+ height: 1rem;
157
+ flex-shrink: 0;
158
+ }
159
+ :global(.tools-item small) {
160
+ margin-left: auto;
161
+ color: var(--color-muted-foreground);
162
+ font-size: 0.75rem;
163
+ }
164
+ :global(.tools-item > svg:last-child:not(:first-child)) {
165
+ margin-left: auto;
166
+ }
167
+ :global(.tools-footer) {
168
+ margin-top: 0.25rem;
169
+ border-top: 1px solid var(--color-border);
170
+ border-radius: 0 0 calc(var(--kit-radius, var(--radius)) - 2px)
171
+ calc(var(--kit-radius, var(--radius)) - 2px);
172
+ color: var(--color-muted-foreground);
173
+ }
174
+ :global(.tools-title) {
175
+ margin: 0;
176
+ padding: 0.375rem 0.5rem;
177
+ font-size: 0.875rem;
178
+ font-weight: 500;
179
+ }
180
+ :global(.tools-order) {
181
+ display: flex;
182
+ flex-direction: column;
183
+ gap: 0.125rem;
184
+ margin: 0;
185
+ padding: 0;
186
+ list-style: none;
187
+ }
188
+ :global(.tools-row) {
189
+ display: flex;
190
+ align-items: center;
191
+ gap: 0.5rem;
192
+ min-height: 2rem;
193
+ padding: 0 0.375rem;
194
+ border-radius: calc(var(--kit-radius, var(--radius)) - 2px);
195
+ font-size: 0.875rem;
196
+ }
197
+ :global(.tools-row:hover) {
198
+ background: var(--color-accent);
199
+ }
200
+ :global(.tools-row > svg) {
201
+ width: 1rem;
202
+ height: 1rem;
203
+ flex-shrink: 0;
204
+ color: var(--color-muted-foreground);
205
+ }
206
+ :global(.tools-row > span) {
207
+ flex: 1;
208
+ min-width: 0;
209
+ overflow: hidden;
210
+ text-overflow: ellipsis;
211
+ white-space: nowrap;
212
+ }
213
+ :global(.tools-grip) {
214
+ display: inline-flex;
215
+ padding: 0.125rem;
216
+ border: 0;
217
+ border-radius: 0.25rem;
218
+ background: none;
219
+ color: var(--color-muted-foreground);
220
+ cursor: grab;
221
+ touch-action: none;
222
+ }
223
+ :global(.tools-grip:focus-visible) {
224
+ outline: 2px solid var(--color-ring);
225
+ }
226
+ :global(.tools-grip svg) {
227
+ width: 0.875rem;
228
+ height: 0.875rem;
229
+ }
230
+ .plan-badge {
231
+ padding: 0.125rem 0.5rem;
232
+ border: 1px solid var(--color-border);
233
+ border-radius: 999px;
234
+ color: var(--color-muted-foreground);
235
+ font-size: var(--kit-font-size-sm, 0.8125rem);
236
+ white-space: nowrap;
237
+ }
238
+ :global(.mode-menu) {
239
+ width: min(35rem, calc(100vw - 1rem));
240
+ padding: 0.375rem;
241
+ border-radius: 0.75rem;
242
+ }
243
+ :global(.mode-option) {
244
+ display: grid;
245
+ grid-template-columns: 1rem 7.5rem minmax(0, 1fr) 1rem 0.875rem;
246
+ align-items: center;
247
+ column-gap: 0.5rem;
248
+ min-height: 2.125rem;
249
+ padding: 0.375rem 0.5rem;
250
+ border-radius: 0.5rem;
251
+ font-size: var(--kit-font-size-sm, 0.8125rem);
252
+ }
253
+ :global(.mode-option[aria-current='true']) {
254
+ background: var(--color-muted);
255
+ }
256
+ :global(.mode-option > svg) {
257
+ color: var(--color-muted-foreground);
258
+ width: 0.875rem;
259
+ height: 0.875rem;
260
+ }
261
+ .mode-name {
262
+ white-space: nowrap;
263
+ }
264
+ .mode-description {
265
+ color: var(--color-muted-foreground);
266
+ font-size: var(--kit-font-size-xs, 0.75rem);
267
+ text-align: right;
268
+ line-height: 1.5;
269
+ }
270
+ .mode-notice,
271
+ .mode-check {
272
+ display: flex;
273
+ align-items: center;
274
+ justify-content: center;
275
+ color: var(--color-muted-foreground);
276
+ }
277
+ .mode-notice {
278
+ color: var(--color-warning, var(--color-muted-foreground));
279
+ }
280
+ .mode-notice :global(svg),
281
+ .mode-check :global(svg) {
282
+ display: block;
283
+ width: 0.8125rem;
284
+ height: 0.8125rem;
285
+ }
286
+ :global(.mode-danger),
287
+ :global(.mode-danger) :is(.mode-name, .mode-description, .mode-notice),
288
+ :global(.mode-option.mode-danger > svg) {
289
+ color: var(--color-destructive);
290
+ }
291
+ .mode-footer {
292
+ display: flex;
293
+ justify-content: space-between;
294
+ align-items: center;
295
+ gap: 0.75rem;
296
+ padding: 0.625rem 0.375rem 0.125rem;
297
+ color: var(--color-muted-foreground);
298
+ font-size: var(--kit-font-size-xs, 0.75rem);
299
+ }
300
+ .mode-keys {
301
+ display: flex;
302
+ align-items: center;
303
+ gap: 0.25rem;
304
+ }
305
+ .mode-keys kbd {
306
+ padding: 0 0.25rem;
307
+ border-radius: 0.25rem;
308
+ background: var(--color-muted);
309
+ font: inherit;
310
+ }
311
+ .mode-keys kbd:not(:first-child) {
312
+ margin-left: 0.375rem;
313
+ }
314
+ @media (max-width: 480px) {
315
+ :global(.mode-option) {
316
+ grid-template-columns: 1rem minmax(0, 1fr) 1rem 0.875rem;
317
+ row-gap: 0.125rem;
318
+ }
319
+ .mode-description {
320
+ grid-column: 2;
321
+ grid-row: 2;
322
+ text-align: left;
323
+ }
324
+ .mode-notice {
325
+ grid-column: 3;
326
+ grid-row: 1;
327
+ }
328
+ .mode-check {
329
+ grid-column: 4;
330
+ grid-row: 1;
331
+ }
332
+ }
333
+ .skills-control {
334
+ min-width: 0;
335
+ max-width: 100%;
336
+ }
337
+ .skills-control :global(div:first-child) {
338
+ flex-wrap: wrap;
339
+ min-width: 0;
340
+ }
341
+ .skills-control :global([data-slot='select-trigger']) {
342
+ width: auto;
343
+ max-width: 100%;
344
+ }
345
+ .search-status,
346
+ .draft-recovery {
347
+ margin: 0;
348
+ color: var(--color-muted-foreground);
349
+ font-size: var(--kit-font-size-sm, 0.8125rem);
350
+ }
351
+ .draft-recovery {
352
+ display: flex;
353
+ flex-wrap: wrap;
354
+ align-items: center;
355
+ gap: 0.5rem;
356
+ }
357
+ .history-list {
358
+ display: flex;
359
+ flex-direction: column;
360
+ gap: 0.25rem;
361
+ max-height: 40vh;
362
+ overflow-y: auto;
363
+ min-width: 0;
364
+ }
365
+ .history-list :global(button) {
366
+ justify-content: flex-start;
367
+ min-width: 0;
368
+ }
369
+ .history-list span {
370
+ min-width: 0;
371
+ overflow: hidden;
372
+ text-overflow: ellipsis;
373
+ white-space: nowrap;
374
+ }
375
+ :global(.reply-dialog) {
376
+ max-height: calc(100dvh - 2rem);
377
+ overflow-y: auto;
378
+ }
379
+ :global(.reply-dialog form),
380
+ :global(.reply-dialog [data-slot='field-group']) {
381
+ min-width: 0;
382
+ }
383
+ :global(.reply-dialog textarea) {
384
+ max-height: 45dvh;
385
+ overflow-y: auto;
386
+ }