diff --git a/plugins/browser-extension/cyberstrikeai-browser-extension/lib/api.js b/plugins/browser-extension/cyberstrikeai-browser-extension/lib/api.js index aefd2ad6..99b5b234 100644 --- a/plugins/browser-extension/cyberstrikeai-browser-extension/lib/api.js +++ b/plugins/browser-extension/cyberstrikeai-browser-extension/lib/api.js @@ -85,12 +85,17 @@ async function fetchRoles(baseUrl, token, signal) { signal, }); const list = (data && data.roles) || []; - const out = [{ id: '', label: 'Default' }]; + const out = []; for (const r of list) { if (r.enabled === false) continue; if (!r.name) continue; + // Server default role is named "默认"; map to empty id + English label (UI is EN). + // Skip it here and prepend a single Default entry below — avoids Default + 默认. + if (r.name === '默认') continue; out.push({ id: r.name, label: r.name }); } + out.sort((a, b) => a.label.localeCompare(b.label, undefined, { sensitivity: 'base' })); + out.unshift({ id: '', label: 'Default' }); return out; } diff --git a/plugins/browser-extension/cyberstrikeai-browser-extension/panel/panel.css b/plugins/browser-extension/cyberstrikeai-browser-extension/panel/panel.css index 5b2d332a..b81d4622 100644 --- a/plugins/browser-extension/cyberstrikeai-browser-extension/panel/panel.css +++ b/plugins/browser-extension/cyberstrikeai-browser-extension/panel/panel.css @@ -816,6 +816,7 @@ body { background: var(--csai-surface); color: var(--csai-text); box-shadow: var(--csai-shadow-md); + overflow: visible; } #send-dialog::backdrop { @@ -823,7 +824,11 @@ body { backdrop-filter: blur(2px); } -#send-dialog form { padding: 20px; margin: 0; } +#send-dialog form { + padding: 20px; + margin: 0; + overflow: visible; +} .dialog-header { display: flex; @@ -849,6 +854,143 @@ body { grid-template-columns: 1fr 1fr 1fr; gap: 12px; margin-bottom: 14px; + position: relative; + z-index: 2; +} + +#send-dialog .field-label { + font-size: 11px; + font-weight: 600; + text-transform: none; + letter-spacing: 0; + color: var(--csai-text-muted); + margin-bottom: 4px; +} + +/* ── Custom select (Send dialog) ── */ +.cs-select { + position: relative; + width: 100%; + min-width: 0; +} + +.cs-select-trigger { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + width: 100%; + height: 36px; + padding: 0 10px 0 12px; + border: 1px solid var(--csai-border); + border-radius: var(--csai-radius-sm); + background: var(--csai-surface-2); + color: var(--csai-text); + font: inherit; + font-size: 12px; + font-weight: 500; + line-height: 1; + cursor: pointer; + transition: border-color 0.15s, box-shadow 0.15s, background 0.15s; +} + +.cs-select-trigger:hover { + border-color: var(--csai-border-strong); + background: var(--csai-surface); +} + +.cs-select.open .cs-select-trigger { + border-color: var(--csai-accent); + box-shadow: 0 0 0 3px var(--csai-accent-ring); + background: var(--csai-surface); +} + +.cs-select-value { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + text-align: left; +} + +.cs-select-caret { + flex-shrink: 0; + color: var(--csai-text-faint); + transition: transform 0.15s ease; +} + +.cs-select.open .cs-select-caret { + transform: rotate(180deg); + color: var(--csai-accent); +} + +.cs-select-menu { + position: absolute; + z-index: 40; + top: calc(100% + 6px); + left: 0; + right: 0; + margin: 0; + padding: 4px; + list-style: none; + max-height: 240px; + overflow-x: hidden; + overflow-y: auto; + background: var(--csai-surface); + border: 1px solid var(--csai-border); + border-radius: var(--csai-radius); + box-shadow: var(--csai-shadow-md); +} + +.cs-select-menu[hidden] { + display: none !important; +} + +.cs-select-option { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + padding: 8px 10px; + border-radius: var(--csai-radius-sm); + font-size: 12px; + font-weight: 500; + color: var(--csai-text); + cursor: pointer; + line-height: 1.35; + transition: background 0.1s, color 0.1s; +} + +.cs-select-option:hover { + background: var(--csai-surface-2); +} + +.cs-select-option.is-selected { + background: var(--csai-accent-soft); + color: var(--csai-accent); + font-weight: 600; +} + +.cs-select-option-check { + flex: 0 0 12px; + width: 12px; + font-size: 10px; + line-height: 1; + opacity: 0; + color: var(--csai-accent); +} + +.cs-select-option.is-selected .cs-select-option-check { + opacity: 1; +} + +.cs-select-option-label { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } #dlg-instruction { diff --git a/plugins/browser-extension/cyberstrikeai-browser-extension/panel/panel.html b/plugins/browser-extension/cyberstrikeai-browser-extension/panel/panel.html index 3e32ea59..defae550 100644 --- a/plugins/browser-extension/cyberstrikeai-browser-extension/panel/panel.html +++ b/plugins/browser-extension/cyberstrikeai-browser-extension/panel/panel.html @@ -117,9 +117,45 @@

Send to CyberStrikeAI

- - - +
+ Project +
+ + + +
+
+
+ Role +
+ + + +
+
+
+ Agent +
+ + + +
+