micro-models-agent 2.14.0 → 2.16.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.
- package/CHANGELOG.md +38 -0
- package/dist/assets/app.js +9 -3
- package/dist/assets/index.html +2 -0
- package/dist/assets/js/dom.js +1 -0
- package/dist/assets/js/feed.js +103 -53
- package/dist/assets/js/format.js +8 -0
- package/dist/assets/js/settings.js +94 -8
- package/dist/assets/js/sidebar.js +198 -5
- package/dist/assets/js/tabs.js +105 -18
- package/dist/assets/styles.css +107 -30
- package/dist/i18n/en.json +30 -1
- package/dist/i18n/ru.json +30 -1
- package/dist/main.js +615 -166
- package/package.json +1 -1
package/dist/assets/styles.css
CHANGED
|
@@ -54,6 +54,12 @@
|
|
|
54
54
|
--checker-border: #2e2e2e;
|
|
55
55
|
--ph-light: #eaeef2;
|
|
56
56
|
--track: #262626;
|
|
57
|
+
/* Context-breakdown segments (system/tools/history/reserve/free). */
|
|
58
|
+
--seg-system: #a78bfa;
|
|
59
|
+
--seg-tools: #38bdf8;
|
|
60
|
+
--seg-history: #34d399;
|
|
61
|
+
--seg-reserve: #fbbf24;
|
|
62
|
+
--seg-free: #3f3f46;
|
|
57
63
|
--plan-line: #2e2e2e;
|
|
58
64
|
--plan-bar-fg: #a3a3a3;
|
|
59
65
|
--sec-h: #a3a3a3;
|
|
@@ -124,6 +130,12 @@ body.light {
|
|
|
124
130
|
--checker-border: #d0d7de;
|
|
125
131
|
--ph-light: #eaeef2;
|
|
126
132
|
--track: #eaeef2;
|
|
133
|
+
/* Context-breakdown segments (system/tools/history/reserve/free). */
|
|
134
|
+
--seg-system: #7c3aed;
|
|
135
|
+
--seg-tools: #0284c7;
|
|
136
|
+
--seg-history: #059669;
|
|
137
|
+
--seg-reserve: #d97706;
|
|
138
|
+
--seg-free: #d0d7de;
|
|
127
139
|
--plan-line: #d0d7de;
|
|
128
140
|
--plan-bar-fg: #57606a;
|
|
129
141
|
--sec-h: #57606a;
|
|
@@ -167,6 +179,8 @@ body[data-font="large"] { font-size: 17px; }
|
|
|
167
179
|
#openSettings { margin-left: auto; margin-right: 6px; }
|
|
168
180
|
#toggleSidebar { display: none; }
|
|
169
181
|
.conn { color: var(--dim-a); font-size: 11.5px; white-space: nowrap; }
|
|
182
|
+
.conn.stale { color: var(--yellow); }
|
|
183
|
+
.conn.stale .linkbtn { font-size: 11.5px; }
|
|
170
184
|
.tabstrip {
|
|
171
185
|
display: flex; gap: 4px; align-items: center; overflow-x: auto;
|
|
172
186
|
flex: 1; min-width: 0;
|
|
@@ -230,11 +244,14 @@ body[data-font="large"] { font-size: 17px; }
|
|
|
230
244
|
|
|
231
245
|
/* chat */
|
|
232
246
|
.chat { flex: 1; display: flex; flex-direction: column; min-width: 0; position: relative; }
|
|
233
|
-
.msgs { flex: 1; overflow-y: auto; overflow-x: hidden; padding:
|
|
247
|
+
.msgs { flex: 1; overflow-y: auto; overflow-x: hidden; padding: 0 22px; display: flex; flex-direction: column; gap: 11px; }
|
|
234
248
|
.msgs > * { flex-shrink: 0; min-height: fit-content; }
|
|
235
249
|
/* messages live inside a per-tab `.feed` wrapper; it must mirror the `.msgs`
|
|
236
|
-
column gap so turns are separated instead of running together
|
|
237
|
-
|
|
250
|
+
column gap so turns are separated instead of running together.
|
|
251
|
+
Vertical breathing lives on `.feed`, NOT on the scroller: sticky edge fades
|
|
252
|
+
are constrained to the content box, so scroller padding would offset them
|
|
253
|
+
from the header/composer edges. */
|
|
254
|
+
.feed { display: flex; flex-direction: column; gap: 11px; padding: 18px 0; }
|
|
238
255
|
.feed > * { flex-shrink: 0; min-height: fit-content; }
|
|
239
256
|
.u {
|
|
240
257
|
color: var(--u-fg); background: var(--u-bg); border-left: 2px solid var(--u-border);
|
|
@@ -256,7 +273,7 @@ body[data-font="large"] { font-size: 17px; }
|
|
|
256
273
|
font-size: 12.5px; overflow-wrap: anywhere;
|
|
257
274
|
}
|
|
258
275
|
.metaln.warn { color: var(--yellow); }
|
|
259
|
-
.act { display: flex; gap: 8px; min-width: 0; }
|
|
276
|
+
.act { display: flex; gap: 8px; min-width: 0; line-height: 1.35; }
|
|
260
277
|
.act .lab { white-space: nowrap; }
|
|
261
278
|
.act .args { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
|
|
262
279
|
.act.recon .g, .act.recon .lab { color: var(--cyan); }
|
|
@@ -297,7 +314,15 @@ body.light .code { border: 1px solid var(--border); }
|
|
|
297
314
|
.toolout .more { color: var(--dim-b); cursor: pointer; font-size: 12px; }
|
|
298
315
|
.toolout .more:hover { color: var(--dim-a); }
|
|
299
316
|
|
|
300
|
-
/* markdown answers (streamed by md.js) — lines and glyphs, no boxes
|
|
317
|
+
/* markdown answers (streamed by md.js) — lines and glyphs, no boxes.
|
|
318
|
+
Top-level answers carry a quiet accent rail (mirrors the user's `> ` block),
|
|
319
|
+
so the finished message reads instantly apart from the dim work process
|
|
320
|
+
(tool/think rows stay plain). Scoped to `.feed >` — code blocks inside keep
|
|
321
|
+
their own styling. */
|
|
322
|
+
.feed > .md, .feed > .ans {
|
|
323
|
+
border-left: 2px solid var(--accent);
|
|
324
|
+
padding-left: 12px;
|
|
325
|
+
}
|
|
301
326
|
.md { color: var(--ans); overflow-wrap: anywhere; }
|
|
302
327
|
.md > * { flex-shrink: 0; }
|
|
303
328
|
.md p { margin: 4px 0; white-space: pre-wrap; }
|
|
@@ -377,7 +402,14 @@ body.light .codeblock { border: 1px solid var(--border); }
|
|
|
377
402
|
}
|
|
378
403
|
body.light .imgcard .ph { background: var(--ph-light); }
|
|
379
404
|
.imgcard .cap { padding: 6px 10px; color: var(--dim-a); font-size: 12px; }
|
|
380
|
-
.filerow { margin-left: 26px; display: flex; gap: 8px; align-items: baseline; min-width: 0; font-size: 12.5px; color: var(--muted); }
|
|
405
|
+
.filerow { margin-left: 26px; display: flex; gap: 8px; align-items: baseline; min-width: 0; font-size: 12.5px; line-height: 1.35; color: var(--muted); }
|
|
406
|
+
/* Compact tool lists: consecutive action/file rows sit tight (~4px visual),
|
|
407
|
+
// while turns keep the airy 11px feed gap. Negative margin compensates the
|
|
408
|
+
// `.feed { gap: 11px }` only between siblings in a run. */
|
|
409
|
+
.feed > .filerow + .filerow,
|
|
410
|
+
.feed > .act + .act,
|
|
411
|
+
.feed > .filerow + .act,
|
|
412
|
+
.feed > .act + .filerow { margin-top: -7px; }
|
|
381
413
|
.filerow .g { flex: 0 0 auto; }
|
|
382
414
|
.filerow.recon .g, .filerow.recon .lab { color: var(--cyan); }
|
|
383
415
|
.filerow.mutate .g, .filerow.mutate .lab { color: var(--magenta); }
|
|
@@ -390,10 +422,6 @@ body.light .imgcard .ph { background: var(--ph-light); }
|
|
|
390
422
|
@media (pointer: coarse) { .filerow .copy-btn { opacity: 1; } }
|
|
391
423
|
.filerow .copy-btn:focus-visible { opacity: 1; outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
392
424
|
.filerow .copy-btn .svg-icon { width: 14px; height: 14px; }
|
|
393
|
-
.filegroup { margin-left: 26px; font-size: 12.5px; color: var(--muted); }
|
|
394
|
-
.filegroup .head { background: transparent; border: 0; color: inherit; font: inherit; cursor: pointer; display: flex; gap: 6px; align-items: baseline; padding: 0; }
|
|
395
|
-
.filegroup .items.hidden { display: none; }
|
|
396
|
-
.filegroup .items > .filerow { margin-left: 0; }
|
|
397
425
|
.linkline { margin-left: 26px; min-width: 0; overflow-wrap: anywhere; }
|
|
398
426
|
.linkline a { color: var(--accent); text-decoration: none; overflow-wrap: anywhere; word-break: break-word; }
|
|
399
427
|
.linkline a:hover { text-decoration: underline; }
|
|
@@ -508,6 +536,16 @@ body.light .sel > button { border: 1px solid var(--border); }
|
|
|
508
536
|
color: var(--fg); font: inherit; font-size: 12.5px; padding: 4px 8px;
|
|
509
537
|
}
|
|
510
538
|
.menu .ctx-custom .linkbtn { flex: 0 0 auto; }
|
|
539
|
+
/* Dropdown search fields (composer model menu, sessions menu): sticky on top
|
|
540
|
+
so the query stays visible while the list scrolls underneath. */
|
|
541
|
+
.menu .searchbox {
|
|
542
|
+
margin-bottom: 4px; position: sticky; top: 0; z-index: 1;
|
|
543
|
+
}
|
|
544
|
+
.model-menu-list { display: contents; }
|
|
545
|
+
.dd-menu .searchbox {
|
|
546
|
+
margin: 2px 2px 6px; width: calc(100% - 4px);
|
|
547
|
+
position: sticky; top: 0; z-index: 1;
|
|
548
|
+
}
|
|
511
549
|
|
|
512
550
|
.inp {
|
|
513
551
|
width: 100%; padding: 12px 14px; resize: none; display: block;
|
|
@@ -605,7 +643,7 @@ body.light .sel > button { border: 1px solid var(--border); }
|
|
|
605
643
|
|
|
606
644
|
/* new rows rise in softly (a bulk history render animates once as a whole —
|
|
607
645
|
one shared fade, still cheap: opacity/transform only) */
|
|
608
|
-
.feed > :is(.u, .md, .act, .think, .q, .filerow, .
|
|
646
|
+
.feed > :is(.u, .md, .act, .think, .q, .filerow, .planblock, .imgcard, .linkline,
|
|
609
647
|
.toolout, .metric, .detail, .metaln, .warnline, .errline, .cmdout, .sysline,
|
|
610
648
|
.startbanner, .grouped, .msg-actions, .busy) {
|
|
611
649
|
animation: rise .18s ease-out;
|
|
@@ -632,20 +670,25 @@ body.light .sel > button { border: 1px solid var(--border); }
|
|
|
632
670
|
.overlay.open .modal { animation: rise .18s ease-out; }
|
|
633
671
|
|
|
634
672
|
/* hover/active blends */
|
|
635
|
-
.sel > button, .menu .mi, .stab, .q .qopt, .q .qsend, .filerow, .
|
|
673
|
+
.sel > button, .menu .mi, .stab, .q .qopt, .q .qsend, .filerow, .icon-btn,
|
|
636
674
|
.btn, .linkbtn, .chip, .cb-copy, .act-btn, .copy-btn, .composer .attach-btn,
|
|
637
675
|
.composer .send-btn, .dd-menu .si, .dd-menu .act, .cmdk-item, .toggle {
|
|
638
676
|
transition: background-color .12s, color .12s, border-color .12s;
|
|
639
677
|
}
|
|
640
678
|
.composer { transition: border-color .15s, box-shadow .15s; }
|
|
641
679
|
|
|
642
|
-
/* scroll edge fades on the transcript (classes from the feed scroll hook)
|
|
680
|
+
/* scroll edge fades on the transcript (classes from the feed scroll hook).
|
|
681
|
+
Sticky in-flow pseudos glued exactly to the scrollport edges: they sit in
|
|
682
|
+
the scroller's padding-free content box (breathing lives on `.feed`), so
|
|
683
|
+
`top: 0` / `bottom: 0` meet the header above and the composer below with
|
|
684
|
+
no visible offset. Negative margins neutralize their flow height plus the
|
|
685
|
+
flex gap, so hidden fades take no space. */
|
|
643
686
|
.msgs::before, .msgs::after {
|
|
644
687
|
content: ""; position: sticky; display: block; height: 22px; flex: 0 0 auto;
|
|
645
688
|
pointer-events: none; z-index: 5; opacity: 0; transition: opacity .25s;
|
|
646
689
|
}
|
|
647
|
-
.msgs::before { top: 0; margin-bottom: -
|
|
648
|
-
.msgs::after { bottom: 0; margin-top: -
|
|
690
|
+
.msgs::before { top: 0; margin-bottom: -33px; background: linear-gradient(var(--bg), transparent); }
|
|
691
|
+
.msgs::after { bottom: 0; margin-top: -33px; background: linear-gradient(transparent, var(--bg)); }
|
|
649
692
|
.msgs.scrolled::before { opacity: 1; }
|
|
650
693
|
.msgs.unfollowed::after { opacity: 1; }
|
|
651
694
|
|
|
@@ -720,12 +763,16 @@ body.light .sel > button { border: 1px solid var(--border); }
|
|
|
720
763
|
@keyframes rlFlash { 0% { filter: brightness(1.9); } 100% { filter: brightness(1); } }
|
|
721
764
|
|
|
722
765
|
/* ---- sidebar — plan / usage / environment sections ---- */
|
|
766
|
+
/* Sidebar never scrolls horizontally, in any tab: long paths / model names /
|
|
767
|
+
ids wrap or ellipsize inside their rows, never widening the pane. */
|
|
723
768
|
.sb {
|
|
724
769
|
width: 340px; min-width: 340px; display: flex; flex-direction: column;
|
|
725
770
|
border-left: 1px solid var(--border); background: var(--sb-bg); min-height: 0;
|
|
771
|
+
overflow-x: hidden;
|
|
726
772
|
}
|
|
727
773
|
.sec {
|
|
728
|
-
display: flex; flex-direction: column; min-height: 0;
|
|
774
|
+
display: flex; flex-direction: column; min-height: 0; min-width: 0;
|
|
775
|
+
max-width: 100%; overflow-x: hidden;
|
|
729
776
|
border-bottom: 1px solid var(--border);
|
|
730
777
|
}
|
|
731
778
|
.sec:last-child { border-bottom: none; }
|
|
@@ -737,8 +784,8 @@ body.light .sel > button { border: 1px solid var(--border); }
|
|
|
737
784
|
.sec-h:hover { color: var(--sec-h-hover); }
|
|
738
785
|
.sec-h .n { margin-left: auto; color: var(--dim-b); }
|
|
739
786
|
.sec-body {
|
|
740
|
-
overflow-y: auto; padding: 0 16px 12px;
|
|
741
|
-
min-height: 0;
|
|
787
|
+
overflow-y: auto; overflow-x: hidden; padding: 0 16px 12px;
|
|
788
|
+
min-height: 0; min-width: 0; max-width: 100%;
|
|
742
789
|
}
|
|
743
790
|
.sec-body.collapsed { display: none; }
|
|
744
791
|
/* plan section takes the lion's share and scrolls */
|
|
@@ -772,7 +819,7 @@ body.light .sel > button { border: 1px solid var(--border); }
|
|
|
772
819
|
}
|
|
773
820
|
.sb-name .sb-ico svg { width: 14px; height: 14px; color: var(--accent); }
|
|
774
821
|
|
|
775
|
-
.sb-pane { display: flex; flex-direction: column; flex: 1; min-height: 0; }
|
|
822
|
+
.sb-pane { display: flex; flex-direction: column; flex: 1; min-height: 0; min-width: 0; max-width: 100%; overflow-x: hidden; }
|
|
776
823
|
.sb-pane[hidden] { display: none; }
|
|
777
824
|
|
|
778
825
|
/* master-detail expansion */
|
|
@@ -780,25 +827,26 @@ body.light .sel > button { border: 1px solid var(--border); }
|
|
|
780
827
|
.sb.sb-expanded { width: 680px; min-width: 680px; }
|
|
781
828
|
#pane-trace { flex-direction: row; }
|
|
782
829
|
.sb-expanded #pane-trace { position: relative; }
|
|
783
|
-
.trace-list { flex: 1; min-width: 0; overflow-y: auto; padding: 6px 10px 12px; display: flex; flex-direction: column; gap: 1px; }
|
|
784
|
-
.trace-turn { color: var(--dim-c); font-size: 11px; margin: 8px 6px 2px; }
|
|
785
|
-
.trc { display: flex; gap: 8px; align-items: baseline; padding: 4px 6px; font-size: 12px; color: var(--muted); border-radius: 4px; cursor: pointer; }
|
|
830
|
+
.trace-list { flex: 1; min-width: 0; max-width: 100%; overflow-y: auto; overflow-x: hidden; padding: 6px 10px 12px; display: flex; flex-direction: column; gap: 1px; }
|
|
831
|
+
.trace-turn { color: var(--dim-c); font-size: 11px; margin: 8px 6px 2px; overflow-wrap: anywhere; }
|
|
832
|
+
.trc { display: flex; gap: 8px; align-items: baseline; padding: 4px 6px; font-size: 12px; color: var(--muted); border-radius: 4px; cursor: pointer; min-width: 0; max-width: 100%; overflow: hidden; }
|
|
786
833
|
.trc:hover { background: var(--hover-bg); }
|
|
787
834
|
.trc.sel { background: var(--accent-bg); }
|
|
788
835
|
.trc .g { flex: 0 0 auto; }
|
|
789
836
|
.trc.recon .g { color: var(--cyan); } .trc.mutate .g { color: var(--purple); }
|
|
790
837
|
.trc.execute .g { color: var(--accent); } .trc.meta .g { color: var(--meta); } .trc.phase .g { color: var(--think); }
|
|
791
|
-
.trc .lab { color: var(--fg); white-space: nowrap; }
|
|
838
|
+
.trc .lab { color: var(--fg); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; flex: 0 1 auto; }
|
|
792
839
|
.trc .args { color: var(--args); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; flex: 1; }
|
|
793
840
|
.trc .t { color: var(--dim-b); margin-left: auto; flex: 0 0 auto; }
|
|
794
841
|
.trc.warn .g, .trc.warn .lab { color: var(--yellow); }
|
|
795
842
|
.trc.phase .lab { color: var(--think); }
|
|
796
|
-
.trc-detail { display: flex; flex-direction: column; flex: 0 0 340px; min-width: 0; border-left: 1px solid var(--border); }
|
|
843
|
+
.trc-detail { display: flex; flex-direction: column; flex: 0 0 340px; min-width: 0; max-width: 100%; overflow-x: hidden; border-left: 1px solid var(--border); }
|
|
797
844
|
.trc-detail[hidden] { display: none; }
|
|
798
|
-
.detail-h { display: flex; gap: 8px; align-items: center; padding: 10px 14px; border-bottom: 1px solid var(--border); color: var(--fg); font-size: 12.5px; flex-shrink: 0; }
|
|
845
|
+
.detail-h { display: flex; gap: 8px; align-items: center; padding: 10px 14px; border-bottom: 1px solid var(--border); color: var(--fg); font-size: 12.5px; flex-shrink: 0; min-width: 0; max-width: 100%; overflow: hidden; }
|
|
799
846
|
.detail-h .g { color: var(--accent); }
|
|
800
847
|
.detail-h .x { margin-left: auto; color: var(--dim-b); cursor: pointer; }
|
|
801
|
-
.detail-b { padding: 10px 14px; display: flex; flex-direction: column; gap: 12px; overflow-y: auto; }
|
|
848
|
+
.detail-b { padding: 10px 14px; display: flex; flex-direction: column; gap: 12px; overflow-y: auto; overflow-x: hidden; min-width: 0; max-width: 100%; }
|
|
849
|
+
.detail-b .code { max-width: 100%; }
|
|
802
850
|
.detail-b h5 { margin: 0 0 4px; font-size: 10.5px; text-transform: uppercase; letter-spacing: .06em; color: var(--sec-h); font-weight: 600; }
|
|
803
851
|
.map-sec { flex: 1 1 auto; }
|
|
804
852
|
.map-reindex { margin-top: 10px; font: inherit; font-size: 12px; color: var(--accent); background: transparent; border: 1px solid var(--border-2); border-radius: 5px; padding: 4px 10px; cursor: pointer; width: fit-content; }
|
|
@@ -818,8 +866,15 @@ body.light .sel > button { border: 1px solid var(--border); }
|
|
|
818
866
|
.plan-step::before { content: ""; position: absolute; left: 4px; top: 0; bottom: 0; width: 1px; background: var(--plan-line); }
|
|
819
867
|
.plan-step .sub { display: block; color: var(--dim-b); font-size: 11.5px; padding-left: 0; }
|
|
820
868
|
|
|
821
|
-
.kv { display: flex; justify-content: space-between; padding: 2px 0; color: var(--muted); gap: 10px; }
|
|
822
|
-
.kv
|
|
869
|
+
.kv { display: flex; justify-content: space-between; padding: 2px 0; color: var(--muted); gap: 10px; min-width: 0; max-width: 100%; }
|
|
870
|
+
.kv > * { min-width: 0; }
|
|
871
|
+
/* Подпись строки никогда не сжимается — иначе её текст наезжает на значение. */
|
|
872
|
+
.kv > span:first-child { flex-shrink: 0; }
|
|
873
|
+
.kv b { font-weight: 400; color: var(--fg); text-align: right; overflow-wrap: anywhere; word-break: break-word; min-width: 0; max-width: 100%; }
|
|
874
|
+
/* Корень карты: подпись сверху, длинный путь снизу на всю ширину. */
|
|
875
|
+
.map-path { display: flex; flex-direction: column; gap: 2px; padding: 2px 0; min-width: 0; max-width: 100%; color: var(--muted); }
|
|
876
|
+
.map-path .dim { color: var(--dim-a); }
|
|
877
|
+
.map-path b { font-weight: 400; color: var(--fg); overflow-wrap: anywhere; word-break: break-word; min-width: 0; max-width: 100%; }
|
|
823
878
|
body.light .kv b { color: var(--fg); }
|
|
824
879
|
.kv .dim { color: var(--dim-a); }
|
|
825
880
|
.kv .wn { color: var(--yellow); }
|
|
@@ -841,6 +896,26 @@ body.light .kv .wn { color: var(--yellow); }
|
|
|
841
896
|
.bar { height: 4px; background: var(--track); border-radius: 2px; margin-top: 6px; overflow: hidden; }
|
|
842
897
|
.bar i { display: block; height: 100%; width: 0; background: var(--green-fill); transition: width .2s; }
|
|
843
898
|
|
|
899
|
+
/* Segmented context bar: flex row so widths add up to the full window. */
|
|
900
|
+
.bar.segbar { display: flex; }
|
|
901
|
+
.bar.segbar i { width: auto; flex: 0 0 auto; transition: width .25s; }
|
|
902
|
+
.bar.segbar .seg-system { background: var(--seg-system); }
|
|
903
|
+
.bar.segbar .seg-tools { background: var(--seg-tools); }
|
|
904
|
+
.bar.segbar .seg-history { background: var(--seg-history); }
|
|
905
|
+
.bar.segbar .seg-reserve { background: var(--seg-reserve); }
|
|
906
|
+
.bar.segbar .seg-free { background: var(--seg-free); }
|
|
907
|
+
/* Legend of context parts (dim dot + label + tokens): rows, no boxes. */
|
|
908
|
+
.seglegend { display: flex; flex-wrap: wrap; gap: 4px 10px; margin-top: 5px; }
|
|
909
|
+
.segl-item { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; color: var(--dim-b); }
|
|
910
|
+
.segl-dot { width: 7px; height: 7px; border-radius: 2px; flex: 0 0 auto; }
|
|
911
|
+
.segl-dot.seg-system { background: var(--seg-system); }
|
|
912
|
+
.segl-dot.seg-tools { background: var(--seg-tools); }
|
|
913
|
+
.segl-dot.seg-history { background: var(--seg-history); }
|
|
914
|
+
.segl-dot.seg-reserve { background: var(--seg-reserve); }
|
|
915
|
+
.segl-dot.seg-free { background: var(--seg-free); }
|
|
916
|
+
.segl-item b { color: var(--muted); font-weight: 600; }
|
|
917
|
+
.segl-label { color: var(--dim-b); }
|
|
918
|
+
|
|
844
919
|
/* ---- settings modal + nested dialogs (provider, confirm) ---- */
|
|
845
920
|
.overlay {
|
|
846
921
|
display: none; position: fixed; inset: 0; z-index: 50;
|
|
@@ -1338,7 +1413,8 @@ button.toggle:disabled { opacity: .5; cursor: default; }
|
|
|
1338
1413
|
border-left: 1px solid var(--border); border-top: none;
|
|
1339
1414
|
box-shadow: var(--shadow-dd);
|
|
1340
1415
|
}
|
|
1341
|
-
.msgs { padding: 14px; }
|
|
1416
|
+
.msgs { padding: 0 14px; }
|
|
1417
|
+
.feed { padding: 14px 0; }
|
|
1342
1418
|
.input-area { margin: 10px 14px 12px; }
|
|
1343
1419
|
.inp-meta { flex-wrap: wrap; gap: 8px; }
|
|
1344
1420
|
}
|
|
@@ -1361,7 +1437,8 @@ button.toggle:disabled { opacity: .5; cursor: default; }
|
|
|
1361
1437
|
.content-col { padding: 14px; }
|
|
1362
1438
|
.row { font-size: 12.5px; }
|
|
1363
1439
|
.input-area { margin: 8px 10px 10px; }
|
|
1364
|
-
.msgs { padding:
|
|
1440
|
+
.msgs { padding: 0 10px; }
|
|
1441
|
+
.feed { padding: 12px 0; }
|
|
1365
1442
|
/* narrow phones: rail stacks vertically, track takes the full row */
|
|
1366
1443
|
.rail-wrap.l-line, .rail-wrap.l-meta {
|
|
1367
1444
|
flex-direction: column; align-items: stretch; gap: 6px;
|
package/dist/i18n/en.json
CHANGED
|
@@ -592,6 +592,9 @@
|
|
|
592
592
|
"repl.model": "Model:",
|
|
593
593
|
"repl.provider": "Provider:",
|
|
594
594
|
"repl.context": "Context:",
|
|
595
|
+
"repl.ctx_part_system": "system",
|
|
596
|
+
"repl.ctx_part_reserve": "reserve",
|
|
597
|
+
"repl.ctx_part_history": "history",
|
|
595
598
|
"repl.sysprompt_label": "System prompt:",
|
|
596
599
|
"repl.sysprompt_size": "{used} / {budget} tokens",
|
|
597
600
|
"repl.sysprompt_desc": "System prompt size and blocks (use --full for the text)",
|
|
@@ -1052,6 +1055,8 @@
|
|
|
1052
1055
|
"web.sessbar.prev": "previous session",
|
|
1053
1056
|
"web.sessbar.next": "next session",
|
|
1054
1057
|
"web.conn.reconnecting": "reconnecting…",
|
|
1058
|
+
"web.i18n.stale": "translations updated — restart the server",
|
|
1059
|
+
"web.i18n.reload": "reload page",
|
|
1055
1060
|
"web.sidebar.plan": "plan",
|
|
1056
1061
|
"web.sidebar.session": "session",
|
|
1057
1062
|
"web.sidebar.usage": "usage",
|
|
@@ -1082,6 +1087,18 @@
|
|
|
1082
1087
|
"web.sidebar.trace_text": "composing… {count} chars",
|
|
1083
1088
|
"web.sidebar.trace_plan": "plan update",
|
|
1084
1089
|
"web.sidebar.trace_question": "question",
|
|
1090
|
+
"web.sidebar.trace_status": "status",
|
|
1091
|
+
"web.sidebar.trace_log": "log · {level}",
|
|
1092
|
+
"web.sidebar.trace_retract": "draft retracted",
|
|
1093
|
+
"web.sidebar.trace_index": "index · {phase}",
|
|
1094
|
+
"web.sidebar.trace_critic": "critic · {status}",
|
|
1095
|
+
"web.sidebar.trace_moe": "moe",
|
|
1096
|
+
"web.sidebar.trace_compaction": "compaction",
|
|
1097
|
+
"web.sidebar.trace_probe": "context probe",
|
|
1098
|
+
"web.sidebar.trace_usage": "llm usage",
|
|
1099
|
+
"web.sidebar.trace_audit": "audit",
|
|
1100
|
+
"web.sidebar.trace_claim": "claim retry · {kind}",
|
|
1101
|
+
"web.sidebar.trace_output": "output",
|
|
1085
1102
|
"web.sidebar.detail_metadata": "metadata",
|
|
1086
1103
|
"web.sidebar.detail_arguments": "arguments",
|
|
1087
1104
|
"web.sidebar.detail_output": "output",
|
|
@@ -1096,6 +1113,10 @@
|
|
|
1096
1113
|
"web.sidebar.detail_time": "time",
|
|
1097
1114
|
"web.sidebar.detail_tool_call": "tool call",
|
|
1098
1115
|
"web.sidebar.detail_session": "session",
|
|
1116
|
+
"web.sidebar.detail_turn": "turn",
|
|
1117
|
+
"web.sidebar.detail_iteration": "iteration",
|
|
1118
|
+
"web.sidebar.detail_provenance": "session-log provenance",
|
|
1119
|
+
"web.sidebar.detail_provenance_count": "{n} assistant messages in log",
|
|
1099
1120
|
"web.env.dir": "dir",
|
|
1100
1121
|
"web.env.agents": "AGENTS.md",
|
|
1101
1122
|
"web.env.map": "map",
|
|
@@ -1118,6 +1139,11 @@
|
|
|
1118
1139
|
"web.usage.cache": "cache",
|
|
1119
1140
|
"web.usage.cost": "cost",
|
|
1120
1141
|
"web.usage.compactions": "compactions",
|
|
1142
|
+
"web.usage.part_system": "instructions",
|
|
1143
|
+
"web.usage.part_tools": "tools",
|
|
1144
|
+
"web.usage.part_history": "dialogue",
|
|
1145
|
+
"web.usage.part_reserve": "response reserve",
|
|
1146
|
+
"web.usage.part_free": "free",
|
|
1121
1147
|
"web.usage.quality": "quality",
|
|
1122
1148
|
"web.usage.probe": "probe",
|
|
1123
1149
|
"web.usage.probe_loaded": "{actual} loaded",
|
|
@@ -1410,9 +1436,10 @@
|
|
|
1410
1436
|
"web.input.shift_enter": "Shift+Enter — newline",
|
|
1411
1437
|
"web.input.esc": "Esc — stop",
|
|
1412
1438
|
"web.input.attach": "Ctrl+V — attach",
|
|
1413
|
-
"web.input.busy": "still working — Esc to stop",
|
|
1414
1439
|
"web.input.send": "send",
|
|
1415
1440
|
"web.input.stop": "stop",
|
|
1441
|
+
"web.input.queued": "queued · position {n}",
|
|
1442
|
+
"web.input.queue_full": "message queue is full — wait for the turn to end",
|
|
1416
1443
|
"web.empty.title": "new chat",
|
|
1417
1444
|
"web.empty.hint": "type a message below · / — commands · model and context are chosen above the input",
|
|
1418
1445
|
"web.attach.title": "attach image",
|
|
@@ -1429,6 +1456,7 @@
|
|
|
1429
1456
|
"web.sessions.none_active": "— no active session —",
|
|
1430
1457
|
"web.sessions.none": "— none —",
|
|
1431
1458
|
"web.sessions.delete": "delete",
|
|
1459
|
+
"web.sessions.search": "search sessions…",
|
|
1432
1460
|
"web.sessions.create_failed": "session create failed",
|
|
1433
1461
|
"web.sessions.delete_failed": "delete failed",
|
|
1434
1462
|
"web.sessions.confirm_title": "Delete session?",
|
|
@@ -1441,6 +1469,7 @@
|
|
|
1441
1469
|
"web.selectors.switch_busy": "switch in progress, please wait",
|
|
1442
1470
|
"web.selectors.reasoning_off": "off (backend ignores it)",
|
|
1443
1471
|
"web.selectors.no_models": "no models",
|
|
1472
|
+
"web.selectors.search_models": "search models…",
|
|
1444
1473
|
"web.selectors.refresh_list": "↻ refresh list",
|
|
1445
1474
|
"web.selectors.custom": "custom…",
|
|
1446
1475
|
"web.selectors.current": "current",
|
package/dist/i18n/ru.json
CHANGED
|
@@ -589,6 +589,9 @@
|
|
|
589
589
|
"repl.model": "Модель:",
|
|
590
590
|
"repl.provider": "Провайдер:",
|
|
591
591
|
"repl.context": "Контекст:",
|
|
592
|
+
"repl.ctx_part_system": "система",
|
|
593
|
+
"repl.ctx_part_reserve": "резерв",
|
|
594
|
+
"repl.ctx_part_history": "история",
|
|
592
595
|
"repl.sysprompt_label": "Системный промпт:",
|
|
593
596
|
"repl.sysprompt_size": "{used} / {budget} токенов",
|
|
594
597
|
"repl.sysprompt_desc": "Размер системного промпта и блоки (текст — через --full)",
|
|
@@ -1055,6 +1058,8 @@
|
|
|
1055
1058
|
"web.sessbar.prev": "предыдущая сессия",
|
|
1056
1059
|
"web.sessbar.next": "следующая сессия",
|
|
1057
1060
|
"web.conn.reconnecting": "переподключение…",
|
|
1061
|
+
"web.i18n.stale": "переводы обновлены — перезапустите сервер",
|
|
1062
|
+
"web.i18n.reload": "обновить страницу",
|
|
1058
1063
|
"web.sidebar.plan": "план",
|
|
1059
1064
|
"web.sidebar.session": "сессия",
|
|
1060
1065
|
"web.sidebar.usage": "использование",
|
|
@@ -1085,6 +1090,18 @@
|
|
|
1085
1090
|
"web.sidebar.trace_text": "печатает… {count} симв.",
|
|
1086
1091
|
"web.sidebar.trace_plan": "обновление плана",
|
|
1087
1092
|
"web.sidebar.trace_question": "вопрос",
|
|
1093
|
+
"web.sidebar.trace_status": "статус",
|
|
1094
|
+
"web.sidebar.trace_log": "лог · {level}",
|
|
1095
|
+
"web.sidebar.trace_retract": "черновик отозван",
|
|
1096
|
+
"web.sidebar.trace_index": "индекс · {phase}",
|
|
1097
|
+
"web.sidebar.trace_critic": "критик · {status}",
|
|
1098
|
+
"web.sidebar.trace_moe": "moe",
|
|
1099
|
+
"web.sidebar.trace_compaction": "компакция",
|
|
1100
|
+
"web.sidebar.trace_probe": "проба контекста",
|
|
1101
|
+
"web.sidebar.trace_usage": "расход llm",
|
|
1102
|
+
"web.sidebar.trace_audit": "аудит",
|
|
1103
|
+
"web.sidebar.trace_claim": "перепроверка · {kind}",
|
|
1104
|
+
"web.sidebar.trace_output": "вывод",
|
|
1088
1105
|
"web.sidebar.detail_metadata": "метаданные",
|
|
1089
1106
|
"web.sidebar.detail_arguments": "аргументы",
|
|
1090
1107
|
"web.sidebar.detail_output": "вывод",
|
|
@@ -1099,6 +1116,10 @@
|
|
|
1099
1116
|
"web.sidebar.detail_time": "время",
|
|
1100
1117
|
"web.sidebar.detail_tool_call": "вызов тула",
|
|
1101
1118
|
"web.sidebar.detail_session": "сессия",
|
|
1119
|
+
"web.sidebar.detail_turn": "ход",
|
|
1120
|
+
"web.sidebar.detail_iteration": "итерация",
|
|
1121
|
+
"web.sidebar.detail_provenance": "сверка с логом",
|
|
1122
|
+
"web.sidebar.detail_provenance_count": "assistant-сообщений в логе: {n}",
|
|
1102
1123
|
"web.env.dir": "директория",
|
|
1103
1124
|
"web.env.agents": "AGENTS.md",
|
|
1104
1125
|
"web.env.map": "карта",
|
|
@@ -1121,6 +1142,11 @@
|
|
|
1121
1142
|
"web.usage.cache": "кеш",
|
|
1122
1143
|
"web.usage.cost": "стоимость",
|
|
1123
1144
|
"web.usage.compactions": "сжатия",
|
|
1145
|
+
"web.usage.part_system": "инструкции",
|
|
1146
|
+
"web.usage.part_tools": "инструменты",
|
|
1147
|
+
"web.usage.part_history": "диалог",
|
|
1148
|
+
"web.usage.part_reserve": "резерв ответа",
|
|
1149
|
+
"web.usage.part_free": "свободно",
|
|
1124
1150
|
"web.usage.quality": "качество",
|
|
1125
1151
|
"web.usage.probe": "проб",
|
|
1126
1152
|
"web.usage.probe_loaded": "загружено {actual}",
|
|
@@ -1386,9 +1412,10 @@
|
|
|
1386
1412
|
"web.input.shift_enter": "Shift+Enter — новая строка",
|
|
1387
1413
|
"web.input.esc": "Esc — стоп",
|
|
1388
1414
|
"web.input.attach": "Ctrl+V — вложить",
|
|
1389
|
-
"web.input.busy": "ещё работаю — Esc для остановки",
|
|
1390
1415
|
"web.input.send": "отправить",
|
|
1391
1416
|
"web.input.stop": "остановить",
|
|
1417
|
+
"web.input.queued": "в очереди · позиция {n}",
|
|
1418
|
+
"web.input.queue_full": "очередь сообщений полна — дождись конца хода",
|
|
1392
1419
|
"web.empty.title": "новый чат",
|
|
1393
1420
|
"web.empty.hint": "введи сообщение ниже · / — команды · модель и контекст выбираются над полем",
|
|
1394
1421
|
"web.attach.title": "прикрепить изображение",
|
|
@@ -1405,6 +1432,7 @@
|
|
|
1405
1432
|
"web.sessions.none_active": "— нет активной сессии —",
|
|
1406
1433
|
"web.sessions.none": "— нет —",
|
|
1407
1434
|
"web.sessions.delete": "удалить",
|
|
1435
|
+
"web.sessions.search": "поиск сессий…",
|
|
1408
1436
|
"web.sessions.create_failed": "не удалось создать сессию",
|
|
1409
1437
|
"web.sessions.delete_failed": "не удалось удалить",
|
|
1410
1438
|
"web.sessions.confirm_title": "Удалить сессию?",
|
|
@@ -1417,6 +1445,7 @@
|
|
|
1417
1445
|
"web.selectors.switch_busy": "переключение уже идёт, подождите",
|
|
1418
1446
|
"web.selectors.reasoning_off": "выкл (бэкенд игнорирует)",
|
|
1419
1447
|
"web.selectors.no_models": "нет моделей",
|
|
1448
|
+
"web.selectors.search_models": "поиск моделей…",
|
|
1420
1449
|
"web.selectors.refresh_list": "↻ обновить список",
|
|
1421
1450
|
"web.selectors.custom": "другое…",
|
|
1422
1451
|
"web.selectors.current": "текущее",
|