agentgui 1.0.1110 → 1.0.1112
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/.gm/gm.db +0 -0
- package/.gm/prd.yml +0 -76
- package/AGENTS.md +1 -5
- package/lib/ws-handlers-util.js +63 -0
- package/package.json +4 -2
- package/scripts/capture-screenshots.mjs +206 -0
- package/site/app/js/app.js +125 -35
- package/site/app/js/backend.js +19 -0
- package/site/app/vendor/anentrypoint-design/247420.css +454 -1
- package/site/app/vendor/anentrypoint-design/247420.js +25 -25
|
@@ -2812,6 +2812,24 @@
|
|
|
2812
2812
|
}
|
|
2813
2813
|
.ds-247420 .ds-preview-text { white-space: pre-wrap; word-break: break-word; }
|
|
2814
2814
|
.ds-247420 .ds-preview-code code, .ds-247420 .ds-preview-text code { font: inherit; color: inherit; background: none; }
|
|
2815
|
+
/* wrap-lines toggle (ported from pi-web's DisplayMode word-wrap control) */
|
|
2816
|
+
.ds-247420 .ds-preview-code.is-wrapped { white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
2817
|
+
.ds-247420 .ds-preview-wrap-toggle.active { color: var(--paper); background: color-mix(in oklab, var(--paper) 18%, transparent); }
|
|
2818
|
+
/* source/preview mode switch (ported from pi-web's markdown/HTML DisplayMode
|
|
2819
|
+
tabs) — the host supplies already-rendered, already-sanitized HTML via
|
|
2820
|
+
`previewHtml`; this component only toggles visibility. */
|
|
2821
|
+
.ds-247420 .ds-preview-mode-switch { display: inline-flex; gap: var(--space-1); margin-right: var(--space-1); }
|
|
2822
|
+
.ds-247420 .ds-preview-mode-btn {
|
|
2823
|
+
font-family: var(--ff-mono); font-size: var(--fs-micro);
|
|
2824
|
+
padding: var(--space-1) var(--space-2); border-radius: var(--r-1);
|
|
2825
|
+
color: var(--paper-3); background: none; border: none; cursor: pointer;
|
|
2826
|
+
}
|
|
2827
|
+
.ds-247420 .ds-preview-mode-btn.active { color: var(--paper); background: color-mix(in oklab, var(--paper) 18%, transparent); }
|
|
2828
|
+
.ds-247420 .ds-preview-html {
|
|
2829
|
+
flex: 1; min-height: 0; overflow: auto;
|
|
2830
|
+
padding: var(--space-3) var(--space-4);
|
|
2831
|
+
background: var(--bg-0); border-radius: var(--r-2);
|
|
2832
|
+
}
|
|
2815
2833
|
.ds-247420 .ds-preview-truncated {
|
|
2816
2834
|
margin-top: var(--space-2); padding-top: var(--space-2);
|
|
2817
2835
|
border-top: var(--bw-hair) solid color-mix(in oklab, var(--paper) 20%, transparent);
|
|
@@ -3154,6 +3172,31 @@
|
|
|
3154
3172
|
.ds-247420 .chat-bubble.chat-md th { background: color-mix(in oklab, var(--fg) 5%, transparent); font-weight: 600; }
|
|
3155
3173
|
.ds-247420 .chat-bubble.chat-md hr { border: 0; border-top: var(--bw-hair) solid var(--rule); margin: 12px 0; }
|
|
3156
3174
|
|
|
3175
|
+
/* Mermaid diagram blocks — rendered SVG swapped in over the fenced source by
|
|
3176
|
+
src/mermaid.js's renderMermaidBlocksUnder(); the source .pre stays in the
|
|
3177
|
+
DOM (display:none) behind a source/diagram toggle button. */
|
|
3178
|
+
.ds-247420 .ds-mermaid-block {
|
|
3179
|
+
position: relative; margin: var(--space-2) 0;
|
|
3180
|
+
border: 1px solid color-mix(in oklab, var(--fg) 12%, transparent);
|
|
3181
|
+
border-radius: var(--r-1); background: var(--bg); padding: 12px 16px;
|
|
3182
|
+
}
|
|
3183
|
+
.ds-247420 .ds-mermaid-diagram { overflow-x: auto; display: flex; justify-content: center; }
|
|
3184
|
+
.ds-247420 .ds-mermaid-diagram svg { max-width: 100%; height: auto; }
|
|
3185
|
+
.ds-247420 .ds-mermaid-toggle {
|
|
3186
|
+
position: absolute; top: 6px; right: 6px;
|
|
3187
|
+
font: inherit; font-size: var(--fs-xs); line-height: 1;
|
|
3188
|
+
background: color-mix(in oklab, var(--fg) 8%, transparent);
|
|
3189
|
+
color: var(--fg); border: none; border-radius: var(--r-1);
|
|
3190
|
+
padding: 4px 8px; cursor: pointer;
|
|
3191
|
+
}
|
|
3192
|
+
.ds-247420 .ds-mermaid-toggle:hover { background: color-mix(in oklab, var(--fg) 14%, transparent); }
|
|
3193
|
+
|
|
3194
|
+
/* Inline/display math — KaTeX HTML swapped into text nodes by
|
|
3195
|
+
src/math.js's renderMathBlocksUnder(). Display math centers on its own line;
|
|
3196
|
+
inline math sits within running text. */
|
|
3197
|
+
.ds-247420 .ds-math-display { display: block; margin: var(--space-2) 0; text-align: center; overflow-x: auto; }
|
|
3198
|
+
.ds-247420 .ds-math-inline { display: inline-block; }
|
|
3199
|
+
|
|
3157
3200
|
.ds-247420 .chat-msg .chat-bubble.chat-code,
|
|
3158
3201
|
.ds-247420 .chat-msg.you .chat-bubble.chat-code,
|
|
3159
3202
|
.ds-247420 .chat-bubble.chat-code {
|
|
@@ -5607,6 +5650,265 @@
|
|
|
5607
5650
|
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
5608
5651
|
}
|
|
5609
5652
|
.ds-247420 .ds-dropdown-item[aria-disabled="true"] .ds-wts-item-branch { color: var(--fg); font-weight: 600; }
|
|
5653
|
+
/* ============================================================
|
|
5654
|
+
PluginsConfig — plugin/extension list + detail modal.
|
|
5655
|
+
============================================================ */
|
|
5656
|
+
|
|
5657
|
+
.ds-247420 .ds-plugins-overlay {
|
|
5658
|
+
position: fixed; inset: 0; z-index: var(--z-modal, 1000);
|
|
5659
|
+
background: color-mix(in oklab, var(--ink) 35%, transparent);
|
|
5660
|
+
display: flex; align-items: center; justify-content: center;
|
|
5661
|
+
padding: var(--space-3);
|
|
5662
|
+
}
|
|
5663
|
+
.ds-247420 .ds-plugins-modal {
|
|
5664
|
+
width: min(860px, 100%); height: min(76vh, 720px);
|
|
5665
|
+
background: var(--bg); border: var(--bw-hair) solid var(--rule); border-radius: var(--r-3);
|
|
5666
|
+
display: flex; flex-direction: column; overflow: hidden;
|
|
5667
|
+
box-shadow: var(--shadow-3, 0 8px 32px rgba(0,0,0,0.18));
|
|
5668
|
+
}
|
|
5669
|
+
.ds-247420 .ds-plugins-header {
|
|
5670
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
5671
|
+
padding: var(--space-3) var(--space-4);
|
|
5672
|
+
border-bottom: var(--bw-hair) solid var(--rule); flex: 0 0 auto;
|
|
5673
|
+
}
|
|
5674
|
+
.ds-247420 .ds-plugins-title { font-size: var(--fs-md); font-weight: 700; color: var(--fg); }
|
|
5675
|
+
.ds-247420 .ds-plugins-close {
|
|
5676
|
+
background: none; border: none; color: var(--fg-3); cursor: pointer;
|
|
5677
|
+
font-size: 20px; line-height: 1; padding: 2px 6px; border-radius: var(--r-1);
|
|
5678
|
+
}
|
|
5679
|
+
.ds-247420 .ds-plugins-close:hover { background: var(--bg-2); color: var(--fg); }
|
|
5680
|
+
.ds-247420 .ds-plugins-close:focus-visible { outline: var(--focus-w) solid var(--focus-color); outline-offset: var(--focus-offset); }
|
|
5681
|
+
|
|
5682
|
+
.ds-247420 .ds-plugins-body { flex: 1 1 auto; display: flex; overflow: hidden; }
|
|
5683
|
+
|
|
5684
|
+
.ds-247420 .ds-plugins-sidebar {
|
|
5685
|
+
width: 245px; flex: 0 0 auto; overflow-y: auto;
|
|
5686
|
+
border-right: var(--bw-hair) solid var(--rule); background: var(--bg-2);
|
|
5687
|
+
padding: var(--space-2);
|
|
5688
|
+
}
|
|
5689
|
+
.ds-247420 .ds-plugins-sidebar-status {
|
|
5690
|
+
padding: var(--space-3) var(--space-2); font-size: var(--fs-sm); color: var(--fg-3);
|
|
5691
|
+
}
|
|
5692
|
+
.ds-247420 .ds-plugins-sidebar-status.ds-plugins-status-error { color: var(--flame); }
|
|
5693
|
+
.ds-247420 .ds-plugins-list { display: flex; flex-direction: column; gap: 2px; }
|
|
5694
|
+
|
|
5695
|
+
.ds-247420 .ds-plugins-row {
|
|
5696
|
+
display: flex; align-items: center; gap: 8px; width: 100%;
|
|
5697
|
+
padding: var(--space-2); border-radius: var(--r-2);
|
|
5698
|
+
background: none; border: var(--bw-hair) solid transparent; text-align: left; cursor: pointer;
|
|
5699
|
+
color: var(--fg); font: inherit;
|
|
5700
|
+
transition: background var(--dur-snap) var(--ease), border-color var(--dur-snap) var(--ease);
|
|
5701
|
+
}
|
|
5702
|
+
.ds-247420 .ds-plugins-row:hover { background: var(--bg-3, var(--bg)); }
|
|
5703
|
+
.ds-247420 .ds-plugins-row.active { background: var(--accent-tint); border-color: var(--accent); }
|
|
5704
|
+
.ds-247420 .ds-plugins-row:focus-visible { outline: var(--focus-w) solid var(--focus-color); outline-offset: var(--focus-offset); }
|
|
5705
|
+
|
|
5706
|
+
.ds-247420 .ds-plugins-row-body { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
|
|
5707
|
+
.ds-247420 .ds-plugins-row-name {
|
|
5708
|
+
font-family: var(--ff-mono); font-size: var(--fs-sm); color: var(--fg);
|
|
5709
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
5710
|
+
}
|
|
5711
|
+
.ds-247420 .ds-plugins-row-meta {
|
|
5712
|
+
font-size: var(--fs-micro); color: var(--fg-3);
|
|
5713
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
5714
|
+
}
|
|
5715
|
+
.ds-247420 .ds-plugins-row-busy { flex: 0 0 auto; font-size: var(--fs-micro); color: var(--fg-3); }
|
|
5716
|
+
|
|
5717
|
+
.ds-247420 .ds-plugins-dot {
|
|
5718
|
+
flex: 0 0 auto; width: 7px; height: 7px; border-radius: 50%;
|
|
5719
|
+
}
|
|
5720
|
+
.ds-247420 .ds-plugins-dot.tone-add { background: var(--green-2); }
|
|
5721
|
+
.ds-247420 .ds-plugins-dot.tone-delete { background: var(--flame); }
|
|
5722
|
+
.ds-247420 .ds-plugins-dot.tone-neutral { background: var(--fg-3); }
|
|
5723
|
+
|
|
5724
|
+
.ds-247420 .ds-plugins-main { flex: 1 1 auto; overflow-y: auto; padding: var(--space-4); }
|
|
5725
|
+
|
|
5726
|
+
.ds-247420 .ds-plugins-empty {
|
|
5727
|
+
height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;
|
|
5728
|
+
gap: var(--space-2); color: var(--fg-3);
|
|
5729
|
+
}
|
|
5730
|
+
|
|
5731
|
+
.ds-247420 .ds-plugins-detail { display: flex; flex-direction: column; gap: var(--space-4); max-width: 640px; }
|
|
5732
|
+
.ds-247420 .ds-plugins-detail-head {
|
|
5733
|
+
display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); flex-wrap: wrap;
|
|
5734
|
+
}
|
|
5735
|
+
.ds-247420 .ds-plugins-detail-title { display: flex; align-items: center; gap: 8px; min-width: 0; }
|
|
5736
|
+
.ds-247420 .ds-plugins-detail-title .name {
|
|
5737
|
+
font-family: var(--ff-mono); font-size: var(--fs-md); font-weight: 600; color: var(--fg);
|
|
5738
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
5739
|
+
}
|
|
5740
|
+
.ds-247420 .ds-plugins-version { font-size: var(--fs-micro); color: var(--fg-3); }
|
|
5741
|
+
|
|
5742
|
+
.ds-247420 .ds-plugins-toggle {
|
|
5743
|
+
flex: 0 0 auto; width: 40px; height: 22px; border-radius: 11px; border: none; padding: 0;
|
|
5744
|
+
background: var(--rule); position: relative; cursor: pointer;
|
|
5745
|
+
transition: background var(--dur-snap) var(--ease);
|
|
5746
|
+
}
|
|
5747
|
+
.ds-247420 .ds-plugins-toggle.on { background: var(--accent); }
|
|
5748
|
+
.ds-247420 .ds-plugins-toggle[disabled] { cursor: wait; opacity: 0.65; }
|
|
5749
|
+
.ds-247420 .ds-plugins-toggle-knob {
|
|
5750
|
+
position: absolute; top: 3px; left: 3px; width: 16px; height: 16px; border-radius: 50%;
|
|
5751
|
+
background: var(--bg); box-shadow: var(--shadow-1, 0 1px 4px rgba(0,0,0,0.22));
|
|
5752
|
+
transition: left var(--dur-snap) var(--ease);
|
|
5753
|
+
}
|
|
5754
|
+
.ds-247420 .ds-plugins-toggle.on .ds-plugins-toggle-knob { left: 21px; }
|
|
5755
|
+
|
|
5756
|
+
.ds-247420 .ds-plugins-fact-grid {
|
|
5757
|
+
display: grid; grid-template-columns: minmax(96px, 130px) minmax(0, 1fr);
|
|
5758
|
+
gap: 9px var(--space-3); font-size: var(--fs-sm);
|
|
5759
|
+
}
|
|
5760
|
+
.ds-247420 .ds-plugins-fact-label { color: var(--fg-3); }
|
|
5761
|
+
.ds-247420 .ds-plugins-fact-value { color: var(--fg-2); }
|
|
5762
|
+
.ds-247420 .ds-plugins-fact-value.ds-plugins-mono { font-family: var(--ff-mono); overflow-wrap: anywhere; }
|
|
5763
|
+
.ds-247420 .ds-plugins-fact-value.tone-text-add { color: var(--green-2); }
|
|
5764
|
+
.ds-247420 .ds-plugins-fact-value.tone-text-delete { color: var(--flame); }
|
|
5765
|
+
.ds-247420 .ds-plugins-fact-value.tone-text-neutral { color: var(--fg-3); }
|
|
5766
|
+
|
|
5767
|
+
.ds-247420 .ds-plugins-group-label {
|
|
5768
|
+
font-size: var(--fs-micro); font-weight: 600; color: var(--fg-3);
|
|
5769
|
+
text-transform: uppercase; letter-spacing: 0.02em; margin-bottom: 6px;
|
|
5770
|
+
}
|
|
5771
|
+
.ds-247420 .ds-plugins-requires-list { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
5772
|
+
.ds-247420 .ds-plugins-chip {
|
|
5773
|
+
font-family: var(--ff-mono); font-size: var(--fs-micro); color: var(--fg-2);
|
|
5774
|
+
border: var(--bw-hair) solid var(--rule); border-radius: var(--r-1); padding: 2px 7px;
|
|
5775
|
+
}
|
|
5776
|
+
.ds-247420 .ds-plugins-requires-empty { font-size: var(--fs-sm); color: var(--fg-3); }
|
|
5777
|
+
|
|
5778
|
+
.ds-247420 .ds-plugins-detail-actions { display: flex; gap: var(--space-2); }
|
|
5779
|
+
.ds-247420 .ds-plugins-btn {
|
|
5780
|
+
padding: 6px 12px; background: none; border: var(--bw-hair) solid var(--rule); border-radius: var(--r-2);
|
|
5781
|
+
color: var(--fg-2); cursor: pointer; font-size: var(--fs-sm);
|
|
5782
|
+
}
|
|
5783
|
+
.ds-247420 .ds-plugins-btn:hover { background: var(--bg-2); }
|
|
5784
|
+
.ds-247420 .ds-plugins-btn[disabled] { cursor: not-allowed; opacity: 0.5; }
|
|
5785
|
+
|
|
5786
|
+
.ds-247420 .ds-plugins-footer {
|
|
5787
|
+
display: flex; align-items: center; justify-content: flex-end;
|
|
5788
|
+
padding: var(--space-2) var(--space-4);
|
|
5789
|
+
border-top: var(--bw-hair) solid var(--rule); flex: 0 0 auto;
|
|
5790
|
+
}
|
|
5791
|
+
.ds-247420 .ds-plugins-footer-count { font-size: var(--fs-micro); color: var(--fg-3); }
|
|
5792
|
+
/* ============================================================
|
|
5793
|
+
ModelsConfig — provider/model availability panel.
|
|
5794
|
+
============================================================ */
|
|
5795
|
+
.ds-247420 .ds-mc { display: flex; flex-direction: column; gap: var(--space-3); }
|
|
5796
|
+
|
|
5797
|
+
.ds-247420 .ds-mc-loading, .ds-247420 .ds-mc-empty {
|
|
5798
|
+
display: flex; flex-direction: column; align-items: center; justify-content: center;
|
|
5799
|
+
gap: var(--space-2); padding: var(--space-6) var(--space-3);
|
|
5800
|
+
color: var(--fg-3); text-align: center;
|
|
5801
|
+
}
|
|
5802
|
+
.ds-247420 .ds-mc-empty-hint { font-size: var(--fs-xs); color: var(--fg-3); }
|
|
5803
|
+
|
|
5804
|
+
/* Summary bar: totals + last-checked + refresh/rebuild actions. */
|
|
5805
|
+
.ds-247420 .ds-mc-summary {
|
|
5806
|
+
display: flex; align-items: center; justify-content: space-between; gap: var(--space-3);
|
|
5807
|
+
flex-wrap: wrap;
|
|
5808
|
+
}
|
|
5809
|
+
.ds-247420 .ds-mc-summary-facts { display: flex; gap: var(--space-3); font-size: var(--fs-sm); color: var(--fg-2); }
|
|
5810
|
+
.ds-247420 .ds-mc-summary-ts { color: var(--fg-3); }
|
|
5811
|
+
.ds-247420 .ds-mc-summary-actions { display: flex; align-items: center; gap: var(--space-2); }
|
|
5812
|
+
.ds-247420 .ds-mc-rebuild-error { font-size: var(--fs-xs); color: var(--flame); }
|
|
5813
|
+
|
|
5814
|
+
/* Two-pane body: provider tree (left) + model detail (right). */
|
|
5815
|
+
.ds-247420 .ds-mc-body {
|
|
5816
|
+
display: grid; grid-template-columns: minmax(220px, 300px) 1fr; gap: var(--space-3);
|
|
5817
|
+
align-items: start;
|
|
5818
|
+
}
|
|
5819
|
+
@media (max-width: 720px) {
|
|
5820
|
+
.ds-247420 .ds-mc-body { grid-template-columns: 1fr; }
|
|
5821
|
+
}
|
|
5822
|
+
|
|
5823
|
+
.ds-247420 .ds-mc-tree { display: flex; flex-direction: column; gap: 2px; }
|
|
5824
|
+
.ds-247420 .ds-mc-tree-group + .ds-mc-tree-group { margin-top: 2px; }
|
|
5825
|
+
|
|
5826
|
+
.ds-247420 .ds-mc-key-chip {
|
|
5827
|
+
font-family: var(--ff-mono); font-size: var(--fs-micro); font-weight: 700;
|
|
5828
|
+
padding: 1px 6px; border-radius: var(--r-1);
|
|
5829
|
+
}
|
|
5830
|
+
.ds-247420 .ds-mc-key-chip.tone-ok { color: var(--green-2); background: var(--green-tint); }
|
|
5831
|
+
.ds-247420 .ds-mc-key-chip.tone-fail { color: var(--fg-3); background: var(--bg-3); }
|
|
5832
|
+
|
|
5833
|
+
.ds-247420 .ds-mc-sampler {
|
|
5834
|
+
display: inline-block; margin: 2px 0 4px 12px;
|
|
5835
|
+
font-size: var(--fs-micro); padding: 1px 6px; border-radius: var(--r-1);
|
|
5836
|
+
}
|
|
5837
|
+
.ds-247420 .ds-mc-sampler.tone-ok { color: var(--green-2); background: var(--green-tint); }
|
|
5838
|
+
.ds-247420 .ds-mc-sampler.tone-fail { color: var(--ink); background: var(--sun); }
|
|
5839
|
+
|
|
5840
|
+
/* Detail pane */
|
|
5841
|
+
.ds-247420 .ds-mc-detail-empty { padding: var(--space-3); color: var(--fg-3); font-size: var(--fs-sm); }
|
|
5842
|
+
.ds-247420 .ds-mc-detail-head {
|
|
5843
|
+
display: flex; align-items: center; gap: var(--space-2);
|
|
5844
|
+
margin-bottom: var(--space-2);
|
|
5845
|
+
}
|
|
5846
|
+
.ds-247420 .ds-mc-detail-title { font-family: var(--ff-mono); font-size: var(--fs-base); font-weight: 700; }
|
|
5847
|
+
|
|
5848
|
+
.ds-247420 .ds-mc-discovery-error {
|
|
5849
|
+
display: flex; align-items: center; gap: var(--space-1-75);
|
|
5850
|
+
padding: var(--space-1-75) var(--space-2);
|
|
5851
|
+
margin-bottom: var(--space-2);
|
|
5852
|
+
color: var(--flame); background: color-mix(in oklab, var(--flame) 12%, transparent);
|
|
5853
|
+
border-radius: var(--r-1); font-size: var(--fs-xs);
|
|
5854
|
+
}
|
|
5855
|
+
|
|
5856
|
+
.ds-247420 .ds-mc-model-list { display: flex; flex-direction: column; gap: var(--space-2); }
|
|
5857
|
+
.ds-247420 .ds-mc-model-row {
|
|
5858
|
+
padding: var(--space-2); border: var(--bw-hair) solid var(--rule); border-radius: var(--r-2);
|
|
5859
|
+
}
|
|
5860
|
+
.ds-247420 .ds-mc-model-row.active { border-color: var(--accent); background: var(--accent-tint); }
|
|
5861
|
+
.ds-247420 .ds-mc-model-head {
|
|
5862
|
+
display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap;
|
|
5863
|
+
margin-bottom: var(--space-1-75);
|
|
5864
|
+
}
|
|
5865
|
+
.ds-247420 .ds-mc-model-id { font-family: var(--ff-mono); font-size: var(--fs-sm); font-weight: 600; }
|
|
5866
|
+
.ds-247420 .ds-mc-model-via { font-size: var(--fs-micro); color: var(--fg-3); }
|
|
5867
|
+
.ds-247420 .ds-mc-usable-chip {
|
|
5868
|
+
font-size: var(--fs-micro); font-weight: 700; padding: 1px 6px; border-radius: var(--r-1);
|
|
5869
|
+
margin-left: auto;
|
|
5870
|
+
}
|
|
5871
|
+
.ds-247420 .ds-mc-usable-chip.tone-ok { color: var(--green-2); background: var(--green-tint); }
|
|
5872
|
+
.ds-247420 .ds-mc-usable-chip.tone-fail { color: var(--fg-3); background: var(--bg-3); }
|
|
5873
|
+
|
|
5874
|
+
/* 7-mode availability grid — one chip per mode, wraps on narrow panes. */
|
|
5875
|
+
.ds-247420 .ds-mc-mode-grid { display: flex; flex-wrap: wrap; gap: 4px; }
|
|
5876
|
+
.ds-247420 .ds-mc-chip {
|
|
5877
|
+
font-family: var(--ff-mono); font-size: var(--fs-micro); font-weight: 600;
|
|
5878
|
+
padding: 2px 7px; border-radius: var(--r-1);
|
|
5879
|
+
border: var(--bw-hair) solid transparent;
|
|
5880
|
+
}
|
|
5881
|
+
.ds-247420 .ds-mc-chip.tone-ok { color: var(--green-2); background: var(--green-tint); }
|
|
5882
|
+
.ds-247420 .ds-mc-chip.tone-fail { color: var(--on-color); background: var(--flame); }
|
|
5883
|
+
.ds-247420 .ds-mc-chip.tone-skip { color: var(--fg-3); background: var(--bg-3); }
|
|
5884
|
+
.ds-247420 .ds-mc-chip.tone-unknown { color: var(--fg-3); background: none; border-color: var(--rule); opacity: 0.6; }
|
|
5885
|
+
/* ============================================================
|
|
5886
|
+
SkillsConfig — skill list + detail panel. Shares chrome with
|
|
5887
|
+
PluginsConfig (.ds-plugins-overlay/-modal/-header/-body/-sidebar/-list/
|
|
5888
|
+
-row/-dot/-main/-detail/-toggle/-fact-grid/-chip/-footer); the classes
|
|
5889
|
+
below are the skills-specific additions only.
|
|
5890
|
+
============================================================ */
|
|
5891
|
+
|
|
5892
|
+
.ds-247420 .ds-skills-search-row {
|
|
5893
|
+
padding: var(--space-2) var(--space-4);
|
|
5894
|
+
border-bottom: var(--bw-hair) solid var(--rule); flex: 0 0 auto;
|
|
5895
|
+
}
|
|
5896
|
+
|
|
5897
|
+
.ds-247420 .ds-skills-group { margin-bottom: var(--space-2); }
|
|
5898
|
+
.ds-247420 .ds-skills-group-label {
|
|
5899
|
+
padding: var(--space-2) var(--space-2) 3px;
|
|
5900
|
+
font-size: var(--fs-micro); font-weight: 600; color: var(--fg-3);
|
|
5901
|
+
text-transform: uppercase; letter-spacing: 0.06em;
|
|
5902
|
+
}
|
|
5903
|
+
|
|
5904
|
+
.ds-247420 .ds-skills-description { font-size: var(--fs-sm); color: var(--fg-2); line-height: 1.5; }
|
|
5905
|
+
|
|
5906
|
+
.ds-247420 .ds-skills-body-group { display: flex; flex-direction: column; }
|
|
5907
|
+
.ds-247420 .ds-skills-body-preview {
|
|
5908
|
+
font-family: var(--ff-mono); font-size: var(--fs-micro); color: var(--fg-2);
|
|
5909
|
+
background: var(--bg-2); border: var(--bw-hair) solid var(--rule); border-radius: var(--r-2);
|
|
5910
|
+
padding: var(--space-3); overflow: auto; max-height: 260px; white-space: pre-wrap; word-break: break-word;
|
|
5911
|
+
}
|
|
5610
5912
|
|
|
5611
5913
|
/* community.css */
|
|
5612
5914
|
/* ============================================================
|
|
@@ -7761,6 +8063,55 @@
|
|
|
7761
8063
|
.ds-247420 .ds-session-state { padding: var(--space-5) var(--space-3); text-align: center; color: var(--fg-3); font-size: var(--fs-sm); }
|
|
7762
8064
|
.ds-247420 .ds-session-state-error { color: var(--flame); }
|
|
7763
8065
|
|
|
8066
|
+
/* Fork/branch tree nesting — child sessions indent under their parent with a
|
|
8067
|
+
collapse toggle and a small branch glyph, mirroring pi-web's SessionSidebar
|
|
8068
|
+
tree without reimplementing its inline-style React component. */
|
|
8069
|
+
.ds-247420 .ds-session-row-nested { position: relative; }
|
|
8070
|
+
.ds-247420 .ds-session-tree-toggle {
|
|
8071
|
+
flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center;
|
|
8072
|
+
width: 16px; height: 16px; padding: 0; background: none; border: none;
|
|
8073
|
+
color: var(--fg-3); cursor: pointer; transform: rotate(0deg); transition: transform var(--dur-snap) var(--ease);
|
|
8074
|
+
}
|
|
8075
|
+
.ds-247420 .ds-session-tree-toggle.open { transform: rotate(90deg); }
|
|
8076
|
+
.ds-247420 .ds-session-tree-toggle:hover { color: var(--fg); }
|
|
8077
|
+
.ds-247420 .ds-session-fork-icon { flex: 0 0 auto; display: inline-flex; color: var(--fg-3); }
|
|
8078
|
+
|
|
8079
|
+
/* Hover-revealed rename/delete row actions. */
|
|
8080
|
+
.ds-247420 .ds-session-row-actions { flex: 0 0 auto; display: none; align-items: center; gap: var(--space-1); }
|
|
8081
|
+
.ds-247420 .ds-session-row:hover .ds-session-row-actions,
|
|
8082
|
+
.ds-247420 .ds-session-row:focus-within .ds-session-row-actions { display: flex; }
|
|
8083
|
+
.ds-247420 .ds-session-row-action {
|
|
8084
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
8085
|
+
width: 24px; height: 24px; padding: 0; background: var(--bg-2); border: var(--border-w) solid var(--border);
|
|
8086
|
+
border-radius: var(--r-1); color: var(--fg-3); cursor: pointer;
|
|
8087
|
+
}
|
|
8088
|
+
.ds-247420 .ds-session-row-action:hover { background: var(--bg-3); color: var(--fg); border-color: var(--fg-3); }
|
|
8089
|
+
.ds-247420 .ds-session-row-action-danger:hover { background: color-mix(in srgb, var(--flame) 12%, var(--bg-2)); color: var(--flame); border-color: var(--flame); }
|
|
8090
|
+
@media (pointer: coarse) { .ds-247420 .ds-session-row-action { min-width: 44px; min-height: 44px; } }
|
|
8091
|
+
|
|
8092
|
+
/* Inline rename — the row's title area swaps for a text input at the same
|
|
8093
|
+
height; no modal, matches the row-in-place edit pattern used elsewhere. */
|
|
8094
|
+
.ds-247420 .ds-session-rename-input {
|
|
8095
|
+
flex: 1; min-width: 0; font-size: var(--fs-sm); font-family: inherit; color: var(--fg);
|
|
8096
|
+
background: var(--bg); border: var(--border-w) solid var(--accent); border-radius: var(--r-1);
|
|
8097
|
+
padding: var(--space-1) var(--space-2);
|
|
8098
|
+
}
|
|
8099
|
+
.ds-247420 .ds-session-rename-input:focus { outline: none; }
|
|
8100
|
+
|
|
8101
|
+
/* Inline delete confirm — same row height, two flat buttons, no modal;
|
|
8102
|
+
mirrors SessionDashboard's arm-then-confirm bulk-stop control. */
|
|
8103
|
+
.ds-247420 .ds-session-confirm-msg { flex: 1; min-width: 0; font-size: var(--fs-sm); color: var(--fg); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
8104
|
+
.ds-247420 .ds-session-confirm-actions { flex: 0 0 auto; display: flex; gap: var(--space-1); }
|
|
8105
|
+
.ds-247420 .ds-session-confirm-delete, .ds-247420 .ds-session-confirm-cancel {
|
|
8106
|
+
font-size: var(--fs-tiny); font-weight: 600; padding: var(--space-1) var(--space-2);
|
|
8107
|
+
border-radius: var(--r-1); cursor: pointer;
|
|
8108
|
+
}
|
|
8109
|
+
.ds-247420 .ds-session-confirm-delete { background: var(--flame); border: none; color: var(--bg); }
|
|
8110
|
+
.ds-247420 .ds-session-confirm-delete:hover { filter: brightness(1.1); }
|
|
8111
|
+
.ds-247420 .ds-session-confirm-cancel { background: var(--bg-2); border: var(--border-w) solid var(--border); color: var(--fg-2); }
|
|
8112
|
+
.ds-247420 .ds-session-confirm-cancel:hover { background: var(--bg-3); color: var(--fg); }
|
|
8113
|
+
@media (pointer: coarse) { .ds-247420 .ds-session-confirm-delete, .ds-247420 .ds-session-confirm-cancel { min-height: 44px; } }
|
|
8114
|
+
|
|
7764
8115
|
/* ----------------------------------------------------------------------------
|
|
7765
8116
|
SessionDashboard — grid of live-session cards.
|
|
7766
8117
|
---------------------------------------------------------------------------- */
|
|
@@ -8470,6 +8821,85 @@
|
|
|
8470
8821
|
}
|
|
8471
8822
|
.ds-247420 .chat-composer .send.cancel:active { filter: brightness(0.96); }
|
|
8472
8823
|
|
|
8824
|
+
/* ChatMinimap — scroll-position density overview beside a chat thread.
|
|
8825
|
+
Purely token-driven (no raw color literals — see lintTokensOrThrow). Dot
|
|
8826
|
+
position/tooltip offsets are set imperatively in JS (chat-minimap.js) since
|
|
8827
|
+
they are per-render numeric layout, not a static rule. */
|
|
8828
|
+
.ds-247420 .chat-minimap {
|
|
8829
|
+
position: relative;
|
|
8830
|
+
flex-shrink: 0;
|
|
8831
|
+
align-self: stretch;
|
|
8832
|
+
cursor: default;
|
|
8833
|
+
user-select: none;
|
|
8834
|
+
border-left: var(--bw-hair) solid var(--rule);
|
|
8835
|
+
background: var(--bg-2);
|
|
8836
|
+
overflow: visible;
|
|
8837
|
+
}
|
|
8838
|
+
.ds-247420 .chat-minimap-viewport {
|
|
8839
|
+
position: absolute;
|
|
8840
|
+
left: 0;
|
|
8841
|
+
right: 0;
|
|
8842
|
+
background: color-mix(in oklab, var(--fg-3) 12%, transparent);
|
|
8843
|
+
border-top: var(--bw-hair) solid var(--rule);
|
|
8844
|
+
border-bottom: var(--bw-hair) solid var(--rule);
|
|
8845
|
+
pointer-events: none;
|
|
8846
|
+
z-index: 1;
|
|
8847
|
+
}
|
|
8848
|
+
.ds-247420 .chat-minimap-centerline {
|
|
8849
|
+
position: absolute;
|
|
8850
|
+
left: 50%;
|
|
8851
|
+
top: 0;
|
|
8852
|
+
bottom: 0;
|
|
8853
|
+
width: 1px;
|
|
8854
|
+
background: var(--rule);
|
|
8855
|
+
transform: translateX(-50%);
|
|
8856
|
+
z-index: 0;
|
|
8857
|
+
}
|
|
8858
|
+
.ds-247420 .chat-minimap-dot {
|
|
8859
|
+
position: absolute;
|
|
8860
|
+
left: 50%;
|
|
8861
|
+
width: 6px;
|
|
8862
|
+
height: 6px;
|
|
8863
|
+
border-radius: var(--r-pill, 999px);
|
|
8864
|
+
transform: translate(-50%, -50%) scale(1);
|
|
8865
|
+
transition: transform 0.1s;
|
|
8866
|
+
z-index: 2;
|
|
8867
|
+
}
|
|
8868
|
+
.ds-247420 .chat-minimap-dot.is-user {
|
|
8869
|
+
background: color-mix(in oklab, var(--accent) 18%, transparent);
|
|
8870
|
+
border: 1.5px solid color-mix(in oklab, var(--accent) 70%, transparent);
|
|
8871
|
+
}
|
|
8872
|
+
.ds-247420 .chat-minimap-dot.is-assistant {
|
|
8873
|
+
background: color-mix(in oklab, var(--fg-3) 12%, transparent);
|
|
8874
|
+
border: 1.5px solid color-mix(in oklab, var(--fg-3) 50%, transparent);
|
|
8875
|
+
}
|
|
8876
|
+
.ds-247420 .chat-minimap-dot.is-nearest { transform: translate(-50%, -50%) scale(1.6); }
|
|
8877
|
+
.ds-247420 .chat-minimap-tooltip {
|
|
8878
|
+
position: absolute;
|
|
8879
|
+
right: 100%;
|
|
8880
|
+
margin-right: var(--space-1);
|
|
8881
|
+
background: var(--bg);
|
|
8882
|
+
border-top: var(--bw-hair) solid var(--rule);
|
|
8883
|
+
border-right: var(--bw-hair) solid var(--rule);
|
|
8884
|
+
border-bottom: var(--bw-hair) solid var(--rule);
|
|
8885
|
+
border-left: 2px solid var(--fg-3);
|
|
8886
|
+
border-radius: var(--r-1);
|
|
8887
|
+
padding: calc(var(--space-1) / 2) var(--space-2);
|
|
8888
|
+
z-index: 100;
|
|
8889
|
+
pointer-events: none;
|
|
8890
|
+
opacity: 0.45;
|
|
8891
|
+
font-size: var(--fs-tiny);
|
|
8892
|
+
color: var(--fg-3);
|
|
8893
|
+
line-height: 1.4;
|
|
8894
|
+
white-space: nowrap;
|
|
8895
|
+
overflow: hidden;
|
|
8896
|
+
text-overflow: ellipsis;
|
|
8897
|
+
transition: top 0.1s, opacity 0.1s;
|
|
8898
|
+
}
|
|
8899
|
+
.ds-247420 .chat-minimap-tooltip.is-user { border-left-color: color-mix(in oklab, var(--accent) 70%, transparent); }
|
|
8900
|
+
.ds-247420 .chat-minimap-tooltip.is-assistant { border-left-color: color-mix(in oklab, var(--fg-3) 50%, transparent); }
|
|
8901
|
+
.ds-247420 .chat-minimap-tooltip.is-nearest { opacity: 1; color: var(--fg); }
|
|
8902
|
+
|
|
8473
8903
|
/* editor-primitives.css */
|
|
8474
8904
|
/* editor-primitives.css — chrome for in-engine editors, inspectors, IDEs,
|
|
8475
8905
|
debug HUDs. All rules under .ds-247420 scope (build prefixes). Tokens
|
|
@@ -8612,15 +9042,38 @@
|
|
|
8612
9042
|
@media (prefers-reduced-motion: reduce) {
|
|
8613
9043
|
.ds-247420 .ds-ep-tab-indicator { transition: none; }
|
|
8614
9044
|
}
|
|
9045
|
+
/* scroll: content-sized tabs (min/max-width, no stretch) so overflow-x on the
|
|
9046
|
+
head has real per-tab width to scroll against — the pi-web TabBar shape for
|
|
9047
|
+
an unbounded open-file/open-session strip, vs. the default fixed small set
|
|
9048
|
+
that stretches evenly across the available width. */
|
|
9049
|
+
.ds-247420 .ds-ep-tabs-head.scroll .ds-ep-tab-wrap { flex: 0 0 auto; min-width: 80px; max-width: 180px; }
|
|
9050
|
+
.ds-247420 .ds-ep-tabs-head.scroll .ds-ep-tab { flex: 1; min-width: 0; }
|
|
9051
|
+
.ds-247420 .ds-ep-tab-wrap { display: flex; align-items: stretch; flex: 1; min-width: 0; }
|
|
8615
9052
|
.ds-247420 .ds-ep-tab {
|
|
8616
|
-
flex: 1; appearance: none; background: transparent; border: 0;
|
|
9053
|
+
flex: 1; min-width: 0; appearance: none; background: transparent; border: 0;
|
|
8617
9054
|
border-bottom: 2px solid transparent;
|
|
8618
9055
|
color: var(--panel-text-3);
|
|
8619
9056
|
padding: 8px 10px;
|
|
8620
9057
|
font: inherit; cursor: pointer;
|
|
9058
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
8621
9059
|
transition: color var(--dur-snap, 80ms) var(--ease, ease), border-color var(--dur-snap, 80ms) var(--ease, ease);
|
|
8622
9060
|
}
|
|
8623
9061
|
.ds-247420 .ds-ep-tab:hover { color: var(--panel-text-2); }
|
|
9062
|
+
/* Close button — hidden until hover/focus within the tab, matching pi-web's
|
|
9063
|
+
hover-reveal close affordance; always visible on the active tab so touch/
|
|
9064
|
+
keyboard users without hover can still find it. */
|
|
9065
|
+
.ds-247420 .ds-ep-tab-close {
|
|
9066
|
+
appearance: none; background: transparent; border: 0; border-radius: var(--r-0);
|
|
9067
|
+
display: flex; align-items: center; justify-content: center;
|
|
9068
|
+
width: 22px; height: 22px; margin: var(--space-1-75) var(--space-1) var(--space-1-75) 0; padding: 0;
|
|
9069
|
+
flex-shrink: 0; color: var(--panel-text-3); cursor: pointer;
|
|
9070
|
+
opacity: 0; transition: opacity var(--dur-snap, 80ms) var(--ease, ease), background var(--dur-snap, 80ms) var(--ease, ease), color var(--dur-snap, 80ms) var(--ease, ease);
|
|
9071
|
+
}
|
|
9072
|
+
.ds-247420 .ds-ep-tab-wrap:hover .ds-ep-tab-close,
|
|
9073
|
+
.ds-247420 .ds-ep-tab-wrap:focus-within .ds-ep-tab-close,
|
|
9074
|
+
.ds-247420 .ds-ep-tab-wrap.active .ds-ep-tab-close { opacity: 1; }
|
|
9075
|
+
.ds-247420 .ds-ep-tab-close:hover { background: var(--panel-2); color: var(--panel-text-1); }
|
|
9076
|
+
.ds-247420 .ds-ep-tab-close:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; opacity: 1; }
|
|
8624
9077
|
.ds-247420 .ds-ep-tab.active {
|
|
8625
9078
|
color: var(--accent);
|
|
8626
9079
|
border-bottom-color: var(--accent);
|