@liberseek/boft-cli-win32-arm64 0.6.9 → 0.7.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/README.md +1 -1
- package/THIRD_PARTY_NOTICES.txt +12 -0
- package/app/codexhost-distribution.json +1 -1
- package/app/desktop-controller.mjs +67 -27
- package/app/host-runtime.mjs +1963 -880
- package/app/plugins/antigravity/plugin.mjs +44 -15
- package/app/plugins/claude-code/plugin.mjs +59 -12
- package/app/plugins/codebuddy/plugin.mjs +76 -23
- package/app/plugins/cursor-cli/plugin.mjs +43 -4
- package/app/plugins/deepseek-harness/plugin.mjs +55 -7
- package/app/plugins/enabled.json +3 -1
- package/app/plugins/grok/plugin.mjs +68 -15
- package/app/plugins/hermes/plugin.mjs +40 -3
- package/app/plugins/kiro-cli/plugin.mjs +50 -3
- package/app/plugins/muse/plugin.mjs +40 -0
- package/app/plugins/omp/plugin.mjs +53 -6
- package/app/plugins/opencode/plugin.mjs +92 -46
- package/app/plugins/pi/plugin.mjs +53 -6
- package/app/plugins/qoder/assets/icon.svg +1 -0
- package/app/plugins/qoder/manifest.json +12 -0
- package/app/plugins/qoder/plugin.mjs +52290 -0
- package/app/plugins/qoder-cn/assets/icon.svg +1 -0
- package/app/plugins/qoder-cn/manifest.json +12 -0
- package/app/plugins/qoder-cn/plugin.mjs +52288 -0
- package/app/renderer-extension.js +3297 -162
- package/bin/boft.exe +0 -0
- package/libexec/boft-node-repl.exe +0 -0
- package/libexec/boft-shim.exe +0 -0
- package/libexec/boft-updater.exe +0 -0
- package/licenses/Qoder-Agent-SDK-LICENSE.txt +7 -0
- package/licenses/QoderCN-Agent-SDK-LICENSE.txt +7 -0
- package/licenses/tailwindcss-LICENSE.txt +21 -0
- package/package.json +1 -1
|
@@ -20,7 +20,9 @@
|
|
|
20
20
|
"muse",
|
|
21
21
|
"kiro-cli",
|
|
22
22
|
"codebuddy",
|
|
23
|
-
"cursor-cli"
|
|
23
|
+
"cursor-cli",
|
|
24
|
+
"qoder",
|
|
25
|
+
"qoder-cn"
|
|
24
26
|
];
|
|
25
27
|
var DEFAULT_RENDERER_AGENTS = KNOWN_RENDERER_AGENTS;
|
|
26
28
|
function defaultIdFactory(sequence) {
|
|
@@ -151,6 +153,10 @@
|
|
|
151
153
|
else if (agent === "codebuddy") delete state.codeBuddyModel;
|
|
152
154
|
if (agent === "cursor-cli" && model) state.cursorCliModel = model;
|
|
153
155
|
else if (agent === "cursor-cli") delete state.cursorCliModel;
|
|
156
|
+
if (agent === "qoder" && model) state.qoderModel = model;
|
|
157
|
+
else if (agent === "qoder") delete state.qoderModel;
|
|
158
|
+
if (agent === "qoder-cn" && model) state.qoderCnModel = model;
|
|
159
|
+
else if (agent === "qoder-cn") delete state.qoderCnModel;
|
|
154
160
|
if (agent === "pi" && thinkingOptionId) state.piThinkingOptionId = thinkingOptionId;
|
|
155
161
|
else if (agent === "pi") delete state.piThinkingOptionId;
|
|
156
162
|
if (agent === "claude-code" && thinkingOptionId) {
|
|
@@ -175,6 +181,12 @@
|
|
|
175
181
|
if (agent === "codebuddy" && thinkingOptionId) {
|
|
176
182
|
state.codeBuddyThinkingOptionId = thinkingOptionId;
|
|
177
183
|
} else if (agent === "codebuddy") delete state.codeBuddyThinkingOptionId;
|
|
184
|
+
if (agent === "qoder" && thinkingOptionId) {
|
|
185
|
+
state.qoderThinkingOptionId = thinkingOptionId;
|
|
186
|
+
} else if (agent === "qoder") delete state.qoderThinkingOptionId;
|
|
187
|
+
if (agent === "qoder-cn" && thinkingOptionId) {
|
|
188
|
+
state.qoderCnThinkingOptionId = thinkingOptionId;
|
|
189
|
+
} else if (agent === "qoder-cn") delete state.qoderCnThinkingOptionId;
|
|
178
190
|
if (agent !== "codex") {
|
|
179
191
|
const permissionModeByAgent = {};
|
|
180
192
|
for (const candidate of [
|
|
@@ -189,7 +201,9 @@
|
|
|
189
201
|
"muse",
|
|
190
202
|
"kiro-cli",
|
|
191
203
|
"codebuddy",
|
|
192
|
-
"cursor-cli"
|
|
204
|
+
"cursor-cli",
|
|
205
|
+
"qoder",
|
|
206
|
+
"qoder-cn"
|
|
193
207
|
]) {
|
|
194
208
|
const current = state.permissionModeByAgent?.[candidate];
|
|
195
209
|
if (candidate !== agent && current) permissionModeByAgent[candidate] = current;
|
|
@@ -217,6 +231,8 @@
|
|
|
217
231
|
if (agent === "kiro-cli") return state.kiroCliModel;
|
|
218
232
|
if (agent === "codebuddy") return state.codeBuddyModel;
|
|
219
233
|
if (agent === "cursor-cli") return state.cursorCliModel;
|
|
234
|
+
if (agent === "qoder") return state.qoderModel;
|
|
235
|
+
if (agent === "qoder-cn") return state.qoderCnModel;
|
|
220
236
|
return void 0;
|
|
221
237
|
}
|
|
222
238
|
thinkingOptionForAgent(composer, agent) {
|
|
@@ -230,6 +246,8 @@
|
|
|
230
246
|
if (agent === "muse") return state.museThinkingOptionId;
|
|
231
247
|
if (agent === "kiro-cli") return state.kiroCliThinkingOptionId;
|
|
232
248
|
if (agent === "codebuddy") return state.codeBuddyThinkingOptionId;
|
|
249
|
+
if (agent === "qoder") return state.qoderThinkingOptionId;
|
|
250
|
+
if (agent === "qoder-cn") return state.qoderCnThinkingOptionId;
|
|
233
251
|
return void 0;
|
|
234
252
|
}
|
|
235
253
|
permissionModeForAgent(composer, agent) {
|
|
@@ -257,6 +275,8 @@
|
|
|
257
275
|
else if (agent === "kiro-cli") state.kiroCliModel = model;
|
|
258
276
|
else if (agent === "codebuddy") state.codeBuddyModel = model;
|
|
259
277
|
else if (agent === "cursor-cli") state.cursorCliModel = model;
|
|
278
|
+
else if (agent === "qoder") state.qoderModel = model;
|
|
279
|
+
else if (agent === "qoder-cn") state.qoderCnModel = model;
|
|
260
280
|
else state.antigravityModel = model;
|
|
261
281
|
return state;
|
|
262
282
|
}
|
|
@@ -306,6 +326,14 @@
|
|
|
306
326
|
state.codeBuddyThinkingOptionId = thinkingOptionId;
|
|
307
327
|
} else if (agent === "codebuddy") {
|
|
308
328
|
delete state.codeBuddyThinkingOptionId;
|
|
329
|
+
} else if (agent === "qoder" && thinkingOptionId) {
|
|
330
|
+
state.qoderThinkingOptionId = thinkingOptionId;
|
|
331
|
+
} else if (agent === "qoder") {
|
|
332
|
+
delete state.qoderThinkingOptionId;
|
|
333
|
+
} else if (agent === "qoder-cn" && thinkingOptionId) {
|
|
334
|
+
state.qoderCnThinkingOptionId = thinkingOptionId;
|
|
335
|
+
} else if (agent === "qoder-cn") {
|
|
336
|
+
delete state.qoderCnThinkingOptionId;
|
|
309
337
|
}
|
|
310
338
|
return state;
|
|
311
339
|
}
|
|
@@ -14911,6 +14939,48 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
14911
14939
|
// ../shared-contracts/dist/version.js
|
|
14912
14940
|
var WORKSPACE_CONTRACT_VERSION = 1;
|
|
14913
14941
|
|
|
14942
|
+
// ../shared-contracts/dist/idle-release.js
|
|
14943
|
+
var IDLE_RELEASE_SETTINGS_METHOD = "codexhost/settings/idle-release/set";
|
|
14944
|
+
var IDLE_RELEASE_TIMEOUT_MINUTES_MIN = 5;
|
|
14945
|
+
var IDLE_RELEASE_TIMEOUT_MINUTES_MAX = 1440;
|
|
14946
|
+
var idleReleaseSettingsSchema = external_exports.strictObject({
|
|
14947
|
+
enabled: external_exports.boolean(),
|
|
14948
|
+
timeoutMinutes: external_exports.number().int().min(IDLE_RELEASE_TIMEOUT_MINUTES_MIN).max(IDLE_RELEASE_TIMEOUT_MINUTES_MAX)
|
|
14949
|
+
});
|
|
14950
|
+
var DEFAULT_IDLE_RELEASE_SETTINGS = Object.freeze({
|
|
14951
|
+
enabled: false,
|
|
14952
|
+
timeoutMinutes: 30
|
|
14953
|
+
});
|
|
14954
|
+
|
|
14955
|
+
// ../shared-contracts/dist/loaded-sessions.js
|
|
14956
|
+
var LOADED_SESSIONS_METHOD = "codexhost/sessions/loaded/list";
|
|
14957
|
+
var loadedSessionStateSchema = external_exports.enum([
|
|
14958
|
+
"idle",
|
|
14959
|
+
"running",
|
|
14960
|
+
"busy",
|
|
14961
|
+
"closing",
|
|
14962
|
+
"failed",
|
|
14963
|
+
"blocked"
|
|
14964
|
+
]);
|
|
14965
|
+
var loadedSessionReasonSchema = external_exports.enum([
|
|
14966
|
+
"none",
|
|
14967
|
+
"disabled",
|
|
14968
|
+
"timeout",
|
|
14969
|
+
"operation",
|
|
14970
|
+
"background",
|
|
14971
|
+
"identity",
|
|
14972
|
+
"persistence",
|
|
14973
|
+
"closeFailed"
|
|
14974
|
+
]);
|
|
14975
|
+
var loadedSessionsSchema = external_exports.array(external_exports.strictObject({
|
|
14976
|
+
threadId: external_exports.string(),
|
|
14977
|
+
title: external_exports.string(),
|
|
14978
|
+
harnessId: external_exports.string(),
|
|
14979
|
+
state: loadedSessionStateSchema,
|
|
14980
|
+
reason: loadedSessionReasonSchema,
|
|
14981
|
+
inactiveMs: external_exports.number().nonnegative()
|
|
14982
|
+
}));
|
|
14983
|
+
|
|
14914
14984
|
// ../shared-contracts/dist/ids.js
|
|
14915
14985
|
var opaqueIdSchema = external_exports.string().refine((value) => value.trim().length > 0, {
|
|
14916
14986
|
message: "Identifier must not be empty or whitespace"
|
|
@@ -15782,6 +15852,19 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15782
15852
|
return [...installed, ...uninstalled];
|
|
15783
15853
|
}
|
|
15784
15854
|
var AGENT_GROUP_PREFERENCE_STORAGE_KEY = "codexhost.agentGroupPreference.v1";
|
|
15855
|
+
var DEFAULT_MAIN_EXTERNAL_AGENTS = [
|
|
15856
|
+
"claude-code",
|
|
15857
|
+
"grok",
|
|
15858
|
+
"pi",
|
|
15859
|
+
"hermes",
|
|
15860
|
+
"opencode"
|
|
15861
|
+
];
|
|
15862
|
+
var DEFAULT_MAIN_EXTERNAL_AGENT_SET = new Set(
|
|
15863
|
+
DEFAULT_MAIN_EXTERNAL_AGENTS
|
|
15864
|
+
);
|
|
15865
|
+
function defaultAgentGroupSection(agent) {
|
|
15866
|
+
return DEFAULT_MAIN_EXTERNAL_AGENT_SET.has(agent) ? "main" : "more";
|
|
15867
|
+
}
|
|
15785
15868
|
var EXTERNAL_AGENTS = KNOWN_RENDERER_AGENTS.filter(
|
|
15786
15869
|
(agent) => agent !== "codex"
|
|
15787
15870
|
);
|
|
@@ -15822,7 +15905,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15822
15905
|
function createAgentGroupPreferenceStore(storage = safeLocalStorage()) {
|
|
15823
15906
|
let order = [...EXTERNAL_AGENTS];
|
|
15824
15907
|
let sections = new Map(
|
|
15825
|
-
EXTERNAL_AGENTS.map((agent) => [agent,
|
|
15908
|
+
EXTERNAL_AGENTS.map((agent) => [agent, defaultAgentGroupSection(agent)])
|
|
15826
15909
|
);
|
|
15827
15910
|
const listeners = /* @__PURE__ */ new Set();
|
|
15828
15911
|
const stored = readStorage(storage);
|
|
@@ -15844,7 +15927,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15844
15927
|
const persist = () => {
|
|
15845
15928
|
writeStorage(
|
|
15846
15929
|
storage,
|
|
15847
|
-
order.map((agent) => ({
|
|
15930
|
+
order.map((agent) => ({
|
|
15931
|
+
agent,
|
|
15932
|
+
section: sections.get(agent) ?? defaultAgentGroupSection(agent)
|
|
15933
|
+
}))
|
|
15848
15934
|
);
|
|
15849
15935
|
};
|
|
15850
15936
|
const notify = () => {
|
|
@@ -15852,10 +15938,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15852
15938
|
};
|
|
15853
15939
|
return {
|
|
15854
15940
|
list() {
|
|
15855
|
-
return order.map((agent) => ({
|
|
15941
|
+
return order.map((agent) => ({
|
|
15942
|
+
agent,
|
|
15943
|
+
section: sections.get(agent) ?? defaultAgentGroupSection(agent)
|
|
15944
|
+
}));
|
|
15856
15945
|
},
|
|
15857
15946
|
sectionOf(agent) {
|
|
15858
|
-
return sections.get(agent) ??
|
|
15947
|
+
return sections.get(agent) ?? defaultAgentGroupSection(agent);
|
|
15859
15948
|
},
|
|
15860
15949
|
moveAgent(agent, section, beforeAgent = null) {
|
|
15861
15950
|
if (!EXTERNAL_AGENTS.includes(agent)) return;
|
|
@@ -15880,10 +15969,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15880
15969
|
for (const agent of EXTERNAL_AGENTS) {
|
|
15881
15970
|
if (seen.has(agent)) continue;
|
|
15882
15971
|
nextOrder.push(agent);
|
|
15883
|
-
nextSections.set(agent, sections.get(agent) ??
|
|
15972
|
+
nextSections.set(agent, sections.get(agent) ?? defaultAgentGroupSection(agent));
|
|
15884
15973
|
}
|
|
15885
15974
|
const unchanged = nextOrder.length === order.length && nextOrder.every(
|
|
15886
|
-
(agent, index) => agent === order[index] && (nextSections.get(agent) ??
|
|
15975
|
+
(agent, index) => agent === order[index] && (nextSections.get(agent) ?? defaultAgentGroupSection(agent)) === (sections.get(agent) ?? defaultAgentGroupSection(agent))
|
|
15887
15976
|
);
|
|
15888
15977
|
if (unchanged) return;
|
|
15889
15978
|
order = nextOrder;
|
|
@@ -15892,7 +15981,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15892
15981
|
},
|
|
15893
15982
|
resetToDefault() {
|
|
15894
15983
|
order = [...EXTERNAL_AGENTS];
|
|
15895
|
-
sections = new Map(EXTERNAL_AGENTS.map((agent) => [agent,
|
|
15984
|
+
sections = new Map(EXTERNAL_AGENTS.map((agent) => [agent, defaultAgentGroupSection(agent)]));
|
|
15896
15985
|
persist();
|
|
15897
15986
|
notify();
|
|
15898
15987
|
},
|
|
@@ -15935,6 +16024,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15935
16024
|
// src/assets/opencode-agent.png
|
|
15936
16025
|
var opencode_agent_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAYAAAA9zQYyAAAFuklEQVR4AezUzY0bRxRF4YZWnp0w3k4a1sZKYaAkbMUiW9EYSmEUl0WBAEFS/Guyurree9+ATbCbxap3zz3Su9/fv//fhUEWB95N/hBIRIDQicoUZZoIzYJUBAidqk5hCF3GgRpBCV2j5zIpCV2m6hpBCV2j5zIpCV2m6hpBCV2j5zIpCT1NU5m2CwQldIGSK0UkdKW2C2QldIGSK0UkdKW2C2QldIGSK0W8InQlFLJmIEDoDC3KsCNA6B0KHzIQIHSGFmXYESD0DoUPGQgQOkOLLTIk2YPQSYoUY0uA0FsO3pMQIHSSIsXYEiD0loP3JAQInaRIMbYECL3lcOndd4EIEDpQWUa9ToDQ1xlZEYgAoQOVZdTrBAh9nZEVgQiEFPrPjx8n1/IMAnm8G/UxoXfb9P3w37dvk2t5Bn1bbXNaSKHbRLdLRgKEzthq4UyELlx+xuiEzthq4UyELlz+nOhR1hI6SlPmvIkAoW/CZFEUAoSO0pQ5byJA6JswWRSFAKGjNGXOmwgQ+iZMlxb5biQChB6pDbM8TIDQDyO0wUgECD1SG2Z5mAChH0Zog5EIEHqkNszyMIFFhX54OhsgMJMAoWcCs3xsAoQeux/TzSRA6JnALB+bAKHH7sd0MwkQeg/Yv1++TJ9eX0NdP2fei7DWx2HOJfRRFd/f3qZI19H45W8JXV6BXAAInavP8mkIXV6BXAAInavP8mkIvbQC9u9KgNBdcTtsaQKEXpqw/bsSIHRX3A5bmgChlyZs/64ECN0Vt8OWJrCm0Etns39BAoQuWHrmyITO3G7BbIQuWHrmyITO3G7BbIQuWHr/yP1OJHQ/1k7qQIDQHSA7oh8BQvdj7aQOBAjdAbIj+hEg9B7rp6en6fn5OdT1c+bJ344AoXcopum3jdB/fPgw9bwePYvQewVuPhJ6A8ErDwFC5+lSkg0BQm8geOUhQOg8XUqyIUDoDQSvPAQGFjoPZEn6ESB0P9ZO6kCA0B0gO6IfAUL3Y+2kDgQI3QGyI/oRIHQ/1k46R6Dhc0I3hGmr9QkQev0OTNCQAKEbwrTV+gQIvX4HJmhIgNANYdpqfQKEXr+DSxP4biYBQs8EZvnYBAg9dj+mm0mA0DOBWT42AUKP3Y/pZhIg9Exglo9NIK7QY3M13UoECL0SeMcuQ4DQy3C160oECL0SeMcuQ4DQy3C160oECL0SeMfeTmDOSkLPoWXt8AQIPXxFBpxDgNBzaFk7PAFCD1+RAecQIPQcWtYOT4DQw1d0aUDfHRMg9DER96EJEDp0fYY/JkDoYyLuQxMgdOj6DH9MgNDHRNyHJpBW6NCtGP5uAoS+G50fjkiA0CO2Yqa7CRD6bnR+OCIBQh+18vLyMkW6jsYvf0voPQX+/vx5+ufr11DXX5uZ9yJU/HiQmdAHONxEJ0Do6A2a/4AAoQ9wuIlOgNDRGzT/AQFCH+BwE50AoaM3eGn+gt8RumDpmSMTOnO7BbMRumDpmSMTOnO7BbMRumDpmSNXFTpzp6WzEbp0/fnCEzpfp6UTEbp0/fnCEzpfp6UTEbp0/fnC/yp0vowSFSJA6EJlV4hK6AotF8pI6EJlV4gaUuhPr6+Ta3kGEf8BhBT6+9vb5HqcwTWGhI5IwMypCIT8HzpVA8I0JUDopjhttjYBQq/dgPObEiB0U5w2W5sAoU824GFUAoSO2py5TxIg9EksHkYlQOiozZn7JAFCn8TiYVQChI7anLlPEpgt9MldPERgEAKEHqQIY7QhQOg2HO0yCAFCD1KEMdoQIHQbjnYZhAChByliwDFCjkTokLUZ+hwBQp8j43lIAoQOWZuhzxEg9DkynockQOiQtRn6HAFCnyNz6bnvhiVA6GGrMdg9BAh9DzW/GZYAoYetxmD3ECD0PdT8ZlgChB62GoPdQ6C10PfM4DcINCNA6GYobTQCAUKP0IIZmhEgdDOUNhqBwA8AAAD//xJjf0UAAAAGSURBVAMA8iYCzXEuU58AAAAASUVORK5CYII=";
|
|
15937
16026
|
|
|
16027
|
+
// src/assets/qoder-agent.svg
|
|
16028
|
+
var qoder_agent_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="206" height="206" fill="none" viewBox="0 0 206 206"><rect width="206" height="206" fill="%23f3f3f3" rx="52"/><path fill="%230f0d0c" fill-rule="evenodd" d="M104.003 35.836q.178.08.305.145.4.2.629.321l49.944 26.33.019.01q.139.073.273.155 8.37 4.521 12.99 13.05 4.587 8.466 4.587 19.301v22.489q0 .238-.022.474v40.14q0 7.99-6.72 12.312-6.719 4.323-13.987 1.01l-8.542-3.891-.03.017-.17.097-.12.071q-.849.502-1.319.758-.077.043-.308.165l-.106.056-.252.133q-.622.337-1.213.631l-.619.301-.15.071a79 79 0 0 1-1.167.542l-.773.336q-.387.17-1.115.46l-.135.054-.11.046-.167.068a13 13 0 0 1-.588.228q-.398.146-1.256.444l-.002.001-.164.058q-.249.091-.55.188-.89.294-2.014.605l-3.505.961q-.975.27-1.813.459l-.396.083-.398.081q-.564.12-.9.186a11 11 0 0 1-.52.092l-.509.082-.066.011q-.472.08-.74.118-.189.029-.577.074l-.396.05-.657.076q-.221.025-.494.045l-.114.011-.051.004a42 42 0 0 1-1.407.098l.037-.004q-.223.02-.447.02h-.061q-.6.028-1.016.028h-.666l-.111-.001-.222-.003a24 24 0 0 1-1.27-.049l-.028-.002-.17-.006-.381-.019q-.092-.005-.185-.013l-.7-.062q-.66-.063-1.264-.142l-.199-.024q-.065-.007-.129-.017a50 50 0 0 1-1.393-.228l-.502-.094-.03-.006a12 12 0 0 1-.601-.123l-.046-.011-.066-.015-.121-.028a31 31 0 0 1-1.381-.343l-.027-.007a10 10 0 0 1-.428-.113h-.001a31 31 0 0 1-1.737-.547 5 5 0 0 1-.459-.168l-.12-.046a39 39 0 0 1-1.209-.472 11 11 0 0 1-.333-.144l-.087-.038-.171-.074a29 29 0 0 1-1.098-.502l-.08-.038-.015-.007a6 6 0 0 1-.251-.12q-.104-.052-.209-.107l-.062-.032a5 5 0 0 1-.357-.17l-.003-.001-49.452-26.07a5 5 0 0 1-.972-.517 31 31 0 0 1-6.12-4.384l-.003-.003-.011-.011-.045-.04a32 32 0 0 1-2.374-2.438l-.022-.026-.005-.006a36 36 0 0 1-1.448-1.788q-7.307-9.666-7.307-23.449V90.495q0-.996.043-2.303a20 20 0 0 1 .06-.904q.05-.84.119-1.563a19 19 0 0 1 .11-.975l.035-.301q.083-.72.14-1.117a57 57 0 0 1 .167-1.031l.038-.234q.115-.71.192-1.108v-.005l-.003.017q.023-.15.044-.258a49 49 0 0 1 .389-1.818q.18-.803.45-1.817.051-.2.132-.493l.023-.08a75 75 0 0 1 .604-2.032q.047-.15.12-.356l.012-.032q.359-1.105.677-1.972a35 35 0 0 1 .313-.821l.08-.21q.333-.864.526-1.323l-.004.007q.056-.147.107-.266a16 16 0 0 1 .31-.713q.327-.75.5-1.132a55 55 0 0 1 .668-1.404q.244-.502.382-.772l.032-.065q.075-.157.136-.278a15 15 0 0 1 .36-.676l.137-.257a58 58 0 0 1 .995-1.79 30 30 0 0 1 .642-1.095l-.004.005.007-.011-.007.011q.078-.137.131-.227.155-.257.429-.682.27-.44.588-.93.231-.356.671-1.004l.314-.456.297-.43.063-.09v-.002q.12-.18.211-.306.09-.128.296-.403l.13-.174q.471-.645.726-.979l.357-.456.331-.424a36 36 0 0 1 .837-1.05 17 17 0 0 1 .63-.75l.327-.378q.358-.417.556-.64l.696-.767a74 74 0 0 1 1.015-1.086l.011-.015a11 11 0 0 1 .54-.555l.104-.102a78 78 0 0 1 1.898-1.84 50 50 0 0 1 1.59-1.424l-.011.008q.148-.137.256-.232a5 5 0 0 1 .275-.223l.027-.02.017-.014a77 77 0 0 1 1.496-1.217q.303-.24.475-.37a83 83 0 0 1 1.224-.92q.126-.088.424-.306.585-.423 1.403-.976l-.002.001.045-.032a13 13 0 0 1 .466-.315q.992-.647 1.703-1.075.141-.088.456-.268l.103-.061a47 47 0 0 1 1.32-.758l.632-.337.033-.017q.623-.336 1.213-.631.273-.136.774-.374.509-.243 1.163-.539l.415-.182.358-.155q.448-.193 1.248-.514l.225-.088q.365-.143.565-.218a88 88 0 0 1 1.515-.536q.339-.12.556-.19.924-.302 1.993-.6l3.509-.96a37 37 0 0 1 1.807-.46q.248-.057.627-.133.482-.11 1.1-.228a17 17 0 0 1 .743-.126l.298-.05a33 33 0 0 1 .862-.135l.33-.04.331-.04.248-.032q.424-.054.664-.08.165-.016.33-.023l.324-.024q.695-.06 1.128-.081.21-.013.655-.026h.016l.336-.01a23 23 0 0 1 1.147-.017l.185.001.314.005a26 26 0 0 1 1.376.048l.23.013.344.018q.18.01.524.046l.306.027q.609.058 1.245.14l.014.002h.001q.165.018.29.036.642.086 1.428.228.098.018.194.04l.003-.001.303.059q.336.06.554.11.115.024.294.073l.072.016q.328.073.682.162.293.073.6.157l-.004-.002.033.008q.165.04.304.078l.045.013q.09.024.168.049l.012.003a31 31 0 0 1 1.731.553q.2.067.444.166.697.252 1.267.491l.148.064.459.2q.515.23 1.045.485zm-2.971-1.263h-.002q.004 0 .008.002zm3.871 127.988.763.402q.077.042.269.139l.09.046q.1.045.12.057l.136.064q.41.198.771.353l.011.005q.127.053.317.138l.072.032q.341.141.956.372l.05.02.183.068.014.006q.599.21 1.264.398l-.084-.018q.104.023.206.05l.208.054q.52.14 1.057.261l.073.017.072.016.113.026.108.019.031.006.436.082q.536.095 1.052.173l.2.025q.44.057.878.098l.611.055.186.01.376.016.028.002q.261.017.429.023.098.004.368.008l.239.003h.615q.208 0 .643-.021a4 4 0 0 1 .251-.007h.022l.137-.007-.018.003.178-.013q.25-.012.835-.061l.156-.014.154-.012.07-.006.539-.061.504-.064q.204-.024.312-.04a20 20 0 0 0 .618-.099l.402-.066.199-.032-.009.004q.057-.013.116-.024.252-.048.838-.172l.33-.067.255-.053q.608-.138 1.377-.35l3.477-.953a37 37 0 0 0 1.655-.499l.104-.034.127-.047.239-.084h.002q.78-.27 1.191-.421l.146-.059.135-.055.22-.091.141-.056q.579-.231.832-.342l.639-.278q.57-.257.997-.461l.089-.042.509-.247q.458-.228 1.02-.532l.158-.083.218-.116q.096-.049.178-.095.317-.174 1.018-.587l.207-.122.128-.074h.001q.124-.073.226-.13a39 39 0 0 0 1.26-.793l.358-.245a4.95 4.95 0 0 1 4.843-.416l10.977 5.001q2.352 1.073 4.527-.327t2.176-3.986v-40.637q0-.237.022-.474V95.148q0-17.112-12.596-23.755l-.295-.156-.163-.079-.176-.086a19 19 0 0 0-.767-.354q-.265-.12-.385-.168-.35-.148-.871-.337l-.182-.067-.102-.04q-.56-.194-1.217-.383l-.097-.026-.222-.058a38 38 0 0 0-1.026-.253l-.122-.026a31 31 0 0 0-.681-.144l-.118-.023a25 25 0 0 0-1.016-.163 6 6 0 0 1-.225-.027 29 29 0 0 0-.873-.1h-.006l-.327-.03a37 37 0 0 0-1.369-.078q-.12-.008-.523-.008h-.509a44 44 0 0 0-1.116.038l-.18.007q-.256.013-.859.063l-.046.004-.204.014-.135.01a20 20 0 0 0-.454.053 35 35 0 0 1-.636.075l-.206.025q-.145.022-.496.082l-.612.1q-.197.03-.279.046-.171.032-.602.125l-.237.051a22 22 0 0 1-.524.112q-.735.168-1.382.346l-3.476.953a36 36 0 0 0-1.54.46l-.291.102-.355.122a27 27 0 0 0-1.659.61q-.613.242-.941.383l-.648.284-.42.193V91.28q0 1.152-.056 2.307-.01.223-.037.576l-.001.004-.019.28-.001.026a43 43 0 0 1-.113 1.478 25 25 0 0 1-.076.68l-.052.433-.03.249a32 32 0 0 1-.234 1.677l-.056.354v.002q-.138.833-.221 1.265-.19.999-.399 1.935l-.027.11a45 45 0 0 1-.46 1.83l-.141.512a62 62 0 0 1-.542 1.831l-.151.467a54 54 0 0 1-.663 1.928 19 19 0 0 1-.2.526l-.017.042.004-.01-.112.295-.073.188q-.326.841-.495 1.251a27 27 0 0 1-.354.834l-.063.152q-.269.631-.492 1.106-.124.28-.359.772l-.135.283-.098.204a46 46 0 0 1-.971 1.916l-.314.587-.216.397q-.188.339-.563.993l-.076.132a32 32 0 0 1-.507.856q-.284.475-.6.969l-.084.133a42 42 0 0 1-.965 1.488l-.22.327-.021.032-.58.845-.066.092-.58.805a53 53 0 0 1-1.41 1.856l-.212.268q-.316.401-.48.601-.234.29-.674.806l-.04.046-.005.005q-.386.461-.854.988-.237.266-.69.767a46.143 46.143 0 0 1-1.393 1.477l-.219.223a55 55 0 0 1-1.216 1.193l-.18.174-.202.193-.258.247q-.778.722-1.567 1.402l-.099.086-.08.071-.08.072q-.067.06-.137.117l-.198.165a76 76 0 0 1-1.308 1.071l-.006.005q-.134.11-.339.266l-.147.113-.083.063a58 58 0 0 1-1.375 1.031q-.198.147-.307.225-.66.473-1.278.885l-.32.222-.103.07q-.884.584-1.833 1.157l-.009.005q.348 15.759 11.753 22.249zM85.109 152.14q-1.87-5.93-1.874-12.803v-22.492q0-1.2.056-2.394a20 20 0 0 1 .058-.825l.023-.336q.054-.795.098-1.255.019-.19.059-.524.029-.237.047-.42l.036-.309q.084-.721.145-1.146.06-.399.16-.987l.025-.153q.126-.756.202-1.176a50 50 0 0 1 .435-2.086l.011-.046a61 61 0 0 1 .594-2.337q.275-.996.552-1.867l.01-.028q.022-.074.045-.144.054-.17.132-.387l.006-.016q.387-1.18.662-1.928a36 36 0 0 1 .307-.805 52 52 0 0 1 1.037-2.544q.32-.736.5-1.132.162-.36.48-1.016l.003-.01q.271-.57.547-1.11.136-.273.4-.78l.138-.267a54 54 0 0 1 1.136-2.052l.267-.46.298-.51q.215-.36.604-.977.152-.248.443-.703l.177-.278q.228-.352.645-.965.386-.578.667-.969.323-.46.674-.931.465-.637.71-.958.275-.36.721-.922l.345-.434.39-.49q.232-.281.686-.819l.023-.028.204-.239a51 51 0 0 1 1.37-1.552q.31-.343.926-.994.368-.388.717-.737.525-.533 1.23-1.206.44-.428.662-.63a61 61 0 0 1 1.657-1.483l.013-.012.011-.01-.011.01a8 8 0 0 1 .61-.519q.738-.615 1.302-1.06.203-.159.561-.432.655-.507 1.155-.872l.542-.397q.627-.453 1.35-.938l.049-.034q.216-.15.395-.265a59 59 0 0 1 1.883-1.19q.193-.11.295-.171a50 50 0 0 1 1.797-1.02l.208-.11.148-.076a44 44 0 0 1 1.986-1.005q.645-.307 1.169-.545l.754-.331q.534-.23 1.292-.529.481-.192.76-.297.6-.228 1.397-.494l.247-.086.292-.1a49 49 0 0 1 2.128-.645l3.508-.961q.325-.09.667-.178L100.3 45.05a21 21 0 0 0-.393-.201l-.006-.003.007.004a10 10 0 0 1-.29-.137 28 28 0 0 0-1.186-.536l-.002-.001a16 16 0 0 0-.783-.3 7 7 0 0 1-.282-.107l-.036-.013a24 24 0 0 0-1.27-.405l-.086-.023q-.12-.03-.197-.05a19 19 0 0 0-.981-.242 6 6 0 0 1-.354-.085l-.111-.021-.36-.07h-.003l-.182-.035a23 23 0 0 0-.95-.152 9 9 0 0 1-.291-.035q-.405-.052-.83-.093l-.354-.032-.067-.007h-.004l-.103-.01-.207-.011-.344-.019a18 18 0 0 0-.918-.031l-.311-.005h-.146a8 8 0 0 0-.357 0q-.087 0-.354.01-.25.009-.403.012-.29.009-.396.015-.315.017-.895.066l-.284.021-.23.017-.033.003a39 39 0 0 0-.608.077l-.34.04-.262.032-.46.075a64 64 0 0 1-.811.134q-.489.094-.942.196-.327.066-.456.096-.654.149-1.381.351l-3.516.964q-.838.233-1.604.483-.09.03-.25.086l-.276.097q-.762.265-1.128.399l-.385.15-.207.08a44 44 0 0 0-.952.391l-.33.144-.358.156a58 58 0 0 0-.93.432l-.005.002q-.41.195-.594.287-.456.228-.983.512l-.034.018-.595.317a39 39 0 0 0-1.145.664q-.223.128-.268.156a50 50 0 0 0-1.574.997l-.056.04-.174.12a47 47 0 0 0-2.596 1.874q-.14.106-.374.291-.059.046-.088.07-.623.495-1.143.93-.09.079-.264.216a9 9 0 0 1-.21.188 43 43 0 0 0-1.92 1.752q-.45.432-1.045 1.027a22 22 0 0 1-.308.302l-.011.014a12 12 0 0 1-.269.287q-.51.543-.75.806l-.666.734q-.11.125-.411.474l-.466.54a13 13 0 0 0-.433.522q-.323.395-.572.72l-.357.457-.332.424q-.156.204-.557.754l-.206.277-.162.22-.03.045q-.094.14-.169.246l-.275.4-.297.43q-.362.534-.532.796a41 41 0 0 0-.556.88q-.205.317-.282.444l-.02.037q-.117.205-.217.365-.232.385-.415.714a55 55 0 0 0-.87 1.564l-.133.248a19 19 0 0 1-.221.408l-.068.134-.004.01q-.098.205-.173.349-.07.138-.276.563l-.17.348q-.266.552-.384.811a91 91 0 0 0-.435.988q-.044.103-.131.295a8 8 0 0 0-.142.329l-.002.006.008-.018q-.05.13-.087.219-.147.352-.425 1.075l-.086.222-.068.175q-.13.337-.184.482a46 46 0 0 0-.57 1.663l-.07.209a5 5 0 0 1-.098.3q-.155.493-.44 1.494l-.016.053a9 9 0 0 0-.095.36 38 38 0 0 0-.407 1.643l-.008.036q-.135.582-.274 1.29v.005l.003-.018q-.023.15-.044.257-.054.277-.145.844l-.047.283q-.09.54-.138.847-.032.225-.099.802l-.07.586a12 12 0 0 0-.047.422q-.06.62-.101 1.342l-.026.35q-.019.23-.023.307-.034 1.072-.034 1.906v22.489q0 10.089 4.938 16.98.183.257.372.507.45.599 1.037 1.278a22 22 0 0 0 1.648 1.689l.04.037a21.4 21.4 0 0 0 4.484 3.147l.03.015.051.027zm8.026-23.904q.47-.383.73-.601l.197-.164.014-.012.08-.071.173-.153q.705-.608 1.35-1.206l.146-.142.203-.193.15-.146a48 48 0 0 0 1.62-1.612 59 59 0 0 0 1.356-1.483 37 37 0 0 0 .788-.91l.019-.022a29 29 0 0 0 .899-1.097l.232-.293a40 40 0 0 0 1.143-1.505l.562-.78.022-.031.49-.716.002-.003.188-.28q.254-.377.359-.542.16-.245.432-.677l.088-.141a26 26 0 0 0 .564-.911q.104-.166.347-.589l.082-.143q.33-.574.485-.853l.171-.315.279-.523a41 41 0 0 0 .786-1.549l.104-.217.113-.238a37.223 37.223 0 0 0 .679-1.496l.016-.042.149-.347q.131-.303.181-.426.154-.374.439-1.112l.076-.194.081-.217.07-.178.082-.21q.297-.815.567-1.649l.156-.479q.189-.607.426-1.45l.122-.445q.199-.726.36-1.428l.053-.221q.135-.61.296-1.46.064-.33.177-1.021l.001-.002.046-.294.016-.1q.049-.3.065-.418a30 30 0 0 0 .134-1.055l.05-.421q.037-.296.049-.425.04-.385.089-1.179l.002-.027.024-.358.007-.092.015-.195q.047-.981.047-1.896V79.333l-.311.259-.116.094-.117.094-.003.003.012-.009a8 8 0 0 1-.256.227q-.683.59-1.382 1.24-.145.133-.507.483a50 50 0 0 0-3.576 3.782l-.197.231q-.412.488-.551.655l-.345.435-.341.428a53 53 0 0 0-.596.762q-.19.248-.608.82a43 43 0 0 0-1.103 1.563q-.38.56-.525.783l-.164.258q-.247.388-.385.61-.358.57-.484.778l-.267.46-.264.453a47 47 0 0 0-1.392 2.579q-.235.463-.466.947v.002q-.272.565-.387.817a85 85 0 0 0-.799 1.835q-.228.55-.508 1.289l-.066.171q-.13.338-.19.5-.225.614-.6 1.755l-.048.134-.003.001-.035.112-.05.159a40 40 0 0 0-.547 1.889 51 51 0 0 0-.407 1.643l-.004.014a39 39 0 0 0-.314 1.518q-.059.325-.173 1.015l-.028.171q-.088.512-.13.791-.036.254-.103.831l-.03.251q-.018.192-.059.525l-.035.301q-.028.303-.073.97l-.026.366-.022.287q-.018.23-.022.308-.046.959-.046 1.923z" clip-rule="evenodd"/><path stroke="%230f0d0c" stroke-width="3.5" d="m41.782 61.323.004-.005-.07.114q-.34.561-.572.98a55 55 0 0 0-1.133 2.048l-.075.138a15 15 0 0 0-.42.816l-.032.065q-.139.27-.382.772l-.178.365q-.32.665-.49 1.039a100 100 0 0 0-.57 1.289 16 16 0 0 0-.347.822l.004-.008a50 50 0 0 0-.606 1.534l-.06.156q-.17.435-.253.665a54 54 0 0 0-.677 1.972l-.012.032a10 10 0 0 0-.177.536 75 75 0 0 0-.547 1.851l-.023.08q-.081.293-.131.494a47 47 0 0 0-.492 1.99 49 49 0 0 0-.348 1.645q-.02.108-.044.258l.003-.017v.005q-.077.397-.192 1.108l-.038.234a57 57 0 0 0-.167 1.03 42 42 0 0 0-.175 1.419l-.024.19q-.066.536-.086.785a43 43 0 0 0-.118 1.563l-.016.2q-.03.392-.045.704a72 72 0 0 0-.043 2.303v22.488q0 13.783 7.307 23.449l.277.363a36 36 0 0 0 1.176 1.431l.022.026q1.169 1.332 2.374 2.438l.045.04.011.011.004.003a31 31 0 0 0 6.119 4.384q.458.313.972.517l49.452 26.07.003.001q.177.093.357.17l.062.032q.105.055.209.107.112.057.251.12l.015.007.08.038q.606.29 1.098.502l.171.074.087.038q.19.085.333.144.49.203 1.209.472l.12.046q.225.096.459.168a31 31 0 0 0 1.737.547h.001q.235.067.428.113l.027.007q.74.2 1.381.343l.121.028.066.015.046.011q.239.057.601.123l.03.006.502.094q.708.126 1.393.228.065.01.129.017l.199.024q.604.08 1.264.142l.7.062q.093.008.185.013l.381.019.17.006.028.002q.42.026.609.032a24 24 0 0 0 .994.021h.666q.416 0 1.016-.028h.061q.224 0 .447-.02l-.037.004q.163-.007.295-.017a42 42 0 0 0 1.112-.081l.051-.004.114-.011q.273-.02.494-.045l.657-.076.396-.05q.388-.045.577-.074a35 35 0 0 0 .806-.129l.509-.082.062-.01q.26-.042.458-.082.336-.066.9-.186l.398-.081.396-.083a39 39 0 0 0 1.813-.459l3.505-.961q1.123-.31 2.014-.605.301-.097.55-.188l.164-.058.002-.001q.858-.298 1.256-.444.236-.083.588-.228l.167-.068.11-.046.135-.054q.728-.29 1.115-.46l.773-.336a79 79 0 0 0 1.167-.542l.15-.071.619-.301q.59-.294 1.213-.631l.252-.133.106-.056q.231-.121.308-.165.47-.256 1.319-.758l.12-.071.17-.097.03-.017 8.542 3.891q7.268 3.313 13.987-1.01 6.72-4.322 6.72-12.312v-40.14q.022-.236.022-.474V95.148q0-10.834-4.587-19.302-4.62-8.528-12.99-13.049a5 5 0 0 0-.273-.155l-.019-.01-49.944-26.33a30 30 0 0 0-.629-.322 9 9 0 0 0-.305-.144l-.04-.02a39 39 0 0 0-1.504-.684l-.148-.064q-.57-.24-1.267-.491a8 8 0 0 0-.522-.192 31 31 0 0 0-1.653-.527l-.012-.003-.168-.05-.045-.012-.304-.078-.033-.008.005.002a32 32 0 0 0-1.283-.319l-.072-.016a5 5 0 0 0-.294-.073 14 14 0 0 0-.645-.127l-.212-.042h-.003l-.194-.039q-.786-.142-1.427-.228a9 9 0 0 0-.29-.036h-.002l-.014-.002a37 37 0 0 0-1.245-.14l-.306-.027q-.344-.036-.524-.046l-.344-.018-.23-.013a26 26 0 0 0-1.376-.048l-.314-.005-.185-.001a23.248 23.248 0 0 0-1.147.016q-.2.007-.336.01h-.016q-.445.014-.655.027-.433.023-1.128.081l-.325.024a5 5 0 0 0-.33.024 28 28 0 0 0-.911.111l-.33.04-.33.04-.12.016a33 33 0 0 0-.743.12l-.46.075q-.36.057-.58.1-.62.12-1.102.228-.378.075-.626.133a37 37 0 0 0-1.807.46l-3.509.96q-1.069.299-1.993.6-.217.07-.556.19l-.176.062a88 88 0 0 0-1.339.474q-.2.075-.565.218l-.225.089q-.8.32-1.248.513l-.358.155-.415.182a68 68 0 0 0-1.937.913q-.59.295-1.213.63l-.033.018-.632.337a47 47 0 0 0-1.423.82q-.315.18-.456.267a58 58 0 0 0-1.842 1.167q-.137.09-.327.223l-.044.032.001-.001a55 55 0 0 0-1.949 1.37 83 83 0 0 0-1.686 1.288q-.735.585-1.387 1.13l-.017.014-.027.021-.08.063a5 5 0 0 0-.195.16q-.108.094-.256.232l.01-.008-.002.002a50 50 0 0 0-2.254 2.056 78 78 0 0 0-1.335 1.308q-.128.123-.203.2-.144.142-.337.355l-.01.015-.101.103q-.603.639-.915.983l-.696.767q-.198.223-.556.64l-.438.507a22 22 0 0 0-.601.722q-.435.53-.755.949l-.331.424-.357.456q-.255.334-.727.979l-.129.174a18 18 0 0 0-.507.71l-.063.09-.297.43-.314.457q-.44.648-.67 1.004-.318.49-.589.93-.274.424-.429.682-.054.09-.13.227Zm0 0 .007-.011zm62.786 11.145-.013.012q-.87.75-1.657 1.483-.222.203-.662.63a58 58 0 0 0-4.243 4.49l-.203.238-.024.028q-.454.537-.686.819l-.39.49-.345.434q-.446.56-.72.922-.247.322-.711.958a51 51 0 0 0-1.341 1.9q-.417.613-.645.965l-.177.278q-.291.456-.443.703-.389.618-.604.976l-.298.51-.267.46a57 57 0 0 0-1.674 3.1q-.276.54-.547 1.11l-.004.01q-.315.656-.48 1.016a101 101 0 0 0-.937 2.157 52 52 0 0 0-.647 1.64q-.17.438-.259.684a59 59 0 0 0-.662 1.928l-.006.016a13 13 0 0 0-.178.531l-.009.028a49 49 0 0 0-.67 2.306 61 61 0 0 0-.476 1.898l-.01.046q-.025.099-.044.188a50 50 0 0 0-.392 1.898q-.075.42-.202 1.176l-.025.153q-.1.588-.16.987a41 41 0 0 0-.18 1.455l-.048.42a30 30 0 0 0-.06.524 51 51 0 0 0-.12 1.591l-.015.196q-.031.391-.043.629a50 50 0 0 0-.057 2.394v20.581l.001.095v1.816q.003 6.873 1.874 12.803l-29.357-15.476-.052-.027-.03-.015-.047-.025q-.74-.391-1.444-.837a21.4 21.4 0 0 1-2.992-2.285l-.041-.037-.01-.009a21.6 21.6 0 0 1-2.675-2.958q-.189-.25-.372-.507-4.938-6.891-4.938-16.98V90.495q0-.834.034-1.906.004-.077.023-.308l.026-.349q.042-.722.1-1.342.009-.104.049-.422l.07-.586q.066-.578.098-.801.046-.309.138-.848l.047-.283q.091-.567.145-.844.02-.107.044-.257l-.004.018.001-.006q.14-.706.274-1.289l.008-.036.046-.196a38 38 0 0 1 .392-1.567l.064-.24.015-.053a67 67 0 0 1 .457-1.544q.045-.124.082-.25.037-.105.07-.209.312-.96.57-1.663.054-.146.184-.482l.068-.175.086-.222q.278-.723.425-1.075.037-.09.087-.22l-.008.02.002-.007.06-.145.082-.184q.087-.192.131-.295.294-.675.435-.988a45 45 0 0 1 .554-1.16q.206-.424.276-.562.075-.144.173-.348l.004-.011q.035-.066.067-.134l.083-.152.14-.256.132-.248a46 46 0 0 1 .87-1.564q.183-.33.415-.714.1-.16.216-.365l.021-.037a19 19 0 0 1 .342-.539q.225-.365.496-.785.17-.262.532-.796l.297-.43.275-.4q.075-.106.168-.246l.03-.045.163-.22q.136-.18.206-.277.401-.55.557-.754l.332-.424.357-.456q.25-.327.572-.72a17 17 0 0 0 .244-.302 13 13 0 0 1 .309-.36l.346-.4q.3-.35.41-.475l.666-.733q.24-.264.752-.807a12 12 0 0 0 .268-.287l.011-.014.104-.102.204-.2a66 66 0 0 1 1.63-1.582q.553-.52 1.336-1.197.09-.079.209-.188.174-.137.264-.215.52-.435 1.143-.932l.088-.069q.233-.185.374-.29.305-.237.946-.716.202-.142.505-.365.43-.31 1.145-.793l.174-.121.056-.04q.06-.038.12-.08a50 50 0 0 1 1.454-.917q.046-.03.267-.156l.168-.1q.699-.413.978-.564l.596-.317.033-.018q.527-.285.983-.512.184-.092.594-.287l.005-.002q.427-.204.93-.432l.357-.156.331-.144a44 44 0 0 1 1.544-.621 80 80 0 0 1 1.404-.496q.16-.056.25-.086.765-.25 1.604-.483l3.516-.964q.727-.203 1.381-.35.129-.03.456-.097.453-.102.942-.196.05-.01.235-.038a28 28 0 0 0 .577-.096q.304-.052.46-.075l.262-.032.339-.04a45 45 0 0 0 .608-.078l.033-.002.23-.017.284-.021q.58-.05.895-.066.106-.006.396-.015.153-.003.403-.012a13 13 0 0 1 .711-.01h.146l.31.005a20 20 0 0 1 .919.031 22 22 0 0 0 .55.03l.104.01h.004l.067.007.355.032q.423.04.828.093.126.017.293.035a23 23 0 0 1 1.13.187h.004l.133.028.338.063q.207.056.354.085.387.082.981.243l.197.05.086.022q.596.171 1.27.405l.036.013a7 7 0 0 0 .282.108 22 22 0 0 1 .783.299l.002.001.098.042a33 33 0 0 1 1.377.63l-.006-.003.006.003q.264.132.393.2l28.763 15.164q-.342.088-.667.178l-3.508.961q-1.07.297-2.128.644l-.292.101-.247.086a36 36 0 0 0-2.157.791q-.758.299-1.292.529l-.754.331q-.524.238-1.169.545a44.262 44.262 0 0 0-2.134 1.082l-.208.109q-.06.03-.12.062-.148.08-.28.155-.435.236-1.397.803-.102.06-.295.171-.065.037-.129.077a59 59 0 0 0-2.149 1.378l-.049.034q-.723.485-1.35.938l-.542.397q-.5.365-1.155.872-.359.272-.561.432-.564.445-1.302 1.06-.202.16-.341.279a8 8 0 0 0-.269.24Zm0 0 .011-.01zm-3.536-37.895h-.002q.004 0 .008.002zm3.871 127.988.763.402q.077.042.269.139l.09.046q.1.045.12.057l.136.064q.41.198.771.353l.011.005q.127.053.317.138l.072.032q.341.141.956.372l.05.02.183.068.014.006q.599.21 1.264.398l-.084-.018q.104.023.206.05l.208.054q.52.14 1.057.261l.073.017.072.016.113.026.108.019.031.006.436.082q.536.095 1.052.173l.2.025q.44.057.878.098l.611.055.186.01.376.016.028.002q.261.017.429.023.098.004.368.008l.239.003h.615q.208 0 .643-.021a4 4 0 0 1 .251-.007h.022l.137-.007-.018.003.178-.013q.25-.012.835-.061l.156-.014.154-.012.07-.006.539-.061.504-.064q.204-.024.312-.04a20 20 0 0 0 .618-.099l.402-.066.199-.032-.009.004q.057-.013.116-.024.252-.048.838-.172l.33-.067.255-.053q.608-.138 1.377-.35l3.477-.953a37 37 0 0 0 1.655-.499l.104-.034.127-.047.239-.084h.002q.78-.27 1.191-.421l.146-.059.135-.055.22-.091.141-.056q.579-.231.832-.342l.639-.278q.57-.257.997-.461l.089-.042.509-.247q.458-.228 1.02-.532l.158-.083.218-.116q.096-.049.178-.095.317-.174 1.018-.587l.207-.122.128-.074h.001q.124-.073.226-.13a39 39 0 0 0 1.26-.793l.358-.245a4.95 4.95 0 0 1 4.843-.416l10.977 5.001q2.352 1.073 4.527-.327t2.176-3.986v-40.637q0-.237.022-.474V95.148q0-17.112-12.596-23.755l-.295-.156-.163-.079-.176-.086a19 19 0 0 0-.767-.354q-.265-.12-.385-.168-.35-.148-.871-.337l-.182-.067-.102-.04q-.56-.194-1.217-.383l-.097-.026-.222-.058a38 38 0 0 0-1.026-.253l-.122-.026a31 31 0 0 0-.681-.144l-.118-.023a25 25 0 0 0-1.016-.163 6 6 0 0 1-.225-.027 29 29 0 0 0-.873-.1h-.006l-.327-.03a37 37 0 0 0-1.369-.078q-.12-.008-.523-.008h-.509a44 44 0 0 0-1.116.038l-.18.007q-.256.013-.859.063l-.046.004-.204.014-.135.01a20 20 0 0 0-.454.053 35 35 0 0 1-.636.075l-.206.025q-.145.022-.496.082l-.612.1q-.197.03-.279.046-.171.032-.602.125l-.237.051a22 22 0 0 1-.524.112q-.735.168-1.382.346l-3.476.953a36 36 0 0 0-1.54.46l-.291.102-.355.122a27 27 0 0 0-1.659.61q-.613.242-.941.383l-.648.284-.42.193V91.28q0 1.152-.056 2.307-.01.223-.037.576l-.001.004-.019.28-.001.026a43 43 0 0 1-.113 1.478 25 25 0 0 1-.076.68l-.052.433-.03.249a32 32 0 0 1-.234 1.677l-.056.354v.002q-.138.833-.221 1.265-.19.999-.399 1.935l-.027.11a45 45 0 0 1-.46 1.83l-.141.512a62 62 0 0 1-.542 1.831l-.151.467a54 54 0 0 1-.663 1.928 19 19 0 0 1-.2.526l-.017.042.004-.01-.112.295-.073.188q-.326.841-.495 1.251a27 27 0 0 1-.354.834l-.063.152q-.269.631-.492 1.106-.124.28-.359.772l-.135.283-.098.204a46 46 0 0 1-.971 1.916l-.314.587-.216.397q-.188.339-.563.993l-.076.132a32 32 0 0 1-.507.856q-.284.475-.6.969l-.084.133a42 42 0 0 1-.965 1.488l-.22.327-.021.032-.58.845-.066.092-.58.805a53 53 0 0 1-1.41 1.856l-.212.268q-.316.401-.48.601-.234.29-.674.806l-.04.046-.005.005q-.386.461-.854.988-.237.266-.69.767a46.143 46.143 0 0 1-1.393 1.477l-.219.223a55 55 0 0 1-1.216 1.193l-.18.174-.202.193-.258.247q-.778.722-1.567 1.402l-.099.086-.08.071-.08.072q-.067.06-.137.117l-.198.165a76 76 0 0 1-1.308 1.071l-.006.005q-.134.11-.339.266l-.147.113-.083.063a58 58 0 0 1-1.375 1.031q-.198.147-.307.225-.66.473-1.278.885l-.32.222-.103.07q-.884.584-1.833 1.157l-.009.005q.348 15.759 11.753 22.249zm-11.768-34.325q.47-.383.73-.601l.197-.164.014-.012.08-.071.173-.153q.705-.608 1.35-1.206l.146-.142.203-.193.15-.146a48 48 0 0 0 1.62-1.612 59 59 0 0 0 1.356-1.483 37 37 0 0 0 .788-.91l.019-.022a29 29 0 0 0 .899-1.097l.232-.293a40 40 0 0 0 1.143-1.505l.562-.78.022-.031.49-.716.002-.003.188-.28q.254-.377.359-.542.16-.245.432-.677l.088-.141a26 26 0 0 0 .564-.911q.104-.166.347-.589l.082-.143q.33-.574.485-.853l.171-.315.279-.523a41 41 0 0 0 .786-1.549l.104-.217.113-.238a37.223 37.223 0 0 0 .679-1.496l.016-.042.149-.347q.131-.303.181-.426.154-.374.439-1.112l.076-.194.081-.217.07-.178.082-.21q.297-.815.567-1.649l.156-.479q.189-.607.426-1.45l.122-.445q.199-.726.36-1.428l.053-.221q.135-.61.296-1.46.064-.33.177-1.021l.001-.002.046-.294.016-.1q.049-.3.065-.418a30 30 0 0 0 .134-1.055l.05-.421q.037-.296.049-.425.04-.385.089-1.179l.002-.027.024-.358.007-.092.015-.195q.047-.981.047-1.896V79.333l-.311.259-.116.094-.117.094-.003.003.012-.009a8 8 0 0 1-.256.227q-.683.59-1.382 1.24-.145.133-.507.483a50 50 0 0 0-3.576 3.782l-.197.231q-.412.488-.551.655l-.345.435-.341.428a53 53 0 0 0-.596.762q-.19.248-.608.82a43 43 0 0 0-1.103 1.563q-.38.56-.525.783l-.164.258q-.247.388-.385.61-.358.57-.484.778l-.267.46-.264.453a47 47 0 0 0-1.392 2.579q-.235.463-.466.947v.002q-.272.565-.387.817a85 85 0 0 0-.799 1.835 45 45 0 0 0-.508 1.289l-.066.171q-.13.338-.19.5-.225.614-.6 1.755l-.048.134-.003.001-.035.112-.05.159a40 40 0 0 0-.547 1.889 51 51 0 0 0-.407 1.643l-.004.014a39 39 0 0 0-.314 1.518q-.059.325-.173 1.015l-.028.171q-.088.512-.13.791-.036.254-.103.831l-.03.251q-.018.192-.059.525l-.035.301q-.028.303-.073.97l-.026.366-.022.287q-.018.23-.022.308-.046.959-.046 1.923z"/></svg>';
|
|
16029
|
+
|
|
15938
16030
|
// src/renderer-agent-icon.ts
|
|
15939
16031
|
var RENDERER_AGENT_LABELS = {
|
|
15940
16032
|
codex: "Codex",
|
|
@@ -15949,7 +16041,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15949
16041
|
muse: "Meta Muse Code",
|
|
15950
16042
|
"kiro-cli": "Kiro CLI",
|
|
15951
16043
|
codebuddy: "CodeBuddy",
|
|
15952
|
-
"cursor-cli": "Cursor CLI (Experimental)"
|
|
16044
|
+
"cursor-cli": "Cursor CLI (Experimental)",
|
|
16045
|
+
qoder: "Qoder",
|
|
16046
|
+
"qoder-cn": "Qoder CN"
|
|
15953
16047
|
};
|
|
15954
16048
|
var PI_PATHS = [
|
|
15955
16049
|
{
|
|
@@ -16062,6 +16156,17 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16062
16156
|
ownerDocument
|
|
16063
16157
|
);
|
|
16064
16158
|
}
|
|
16159
|
+
if (agent === "qoder" || agent === "qoder-cn") {
|
|
16160
|
+
const image = ownerDocument.createElement("img");
|
|
16161
|
+
image.src = qoder_agent_default;
|
|
16162
|
+
image.alt = "";
|
|
16163
|
+
image.draggable = false;
|
|
16164
|
+
image.style.width = `${size}px`;
|
|
16165
|
+
image.style.height = `${size}px`;
|
|
16166
|
+
image.style.objectFit = "contain";
|
|
16167
|
+
image.style.flex = "none";
|
|
16168
|
+
return image;
|
|
16169
|
+
}
|
|
16065
16170
|
const mark = ownerDocument.createElement("img");
|
|
16066
16171
|
mark.src = grok_agent_default;
|
|
16067
16172
|
mark.alt = "";
|
|
@@ -16665,6 +16770,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16665
16770
|
binary: "cursor-agent",
|
|
16666
16771
|
posix: "curl https://cursor.com/install -fsS | bash",
|
|
16667
16772
|
windows: "irm https://cursor.com/install.ps1 | iex"
|
|
16773
|
+
},
|
|
16774
|
+
qoder: {
|
|
16775
|
+
url: "https://docs.qoder.com/",
|
|
16776
|
+
binary: "qodercli",
|
|
16777
|
+
posix: "npm install -g @qoder-ai/qodercli",
|
|
16778
|
+
windows: "npm install -g @qoder-ai/qodercli"
|
|
16779
|
+
},
|
|
16780
|
+
"qoder-cn": {
|
|
16781
|
+
url: "https://docs.qoder.cn/",
|
|
16782
|
+
binary: "qoderclicn",
|
|
16783
|
+
posix: "npm install -g @qodercn-ai/qoderclicn",
|
|
16784
|
+
windows: "npm install -g @qodercn-ai/qoderclicn"
|
|
16668
16785
|
}
|
|
16669
16786
|
});
|
|
16670
16787
|
function harnessInstallPlatform(window2) {
|
|
@@ -17234,7 +17351,7 @@ ${error51.stderrTail}`] : []
|
|
|
17234
17351
|
}
|
|
17235
17352
|
const requestedFocus = pendingFocusAgent;
|
|
17236
17353
|
pendingFocusAgent = null;
|
|
17237
|
-
if (requestedFocus && items.some((item) => item.key === requestedFocus)
|
|
17354
|
+
if (requestedFocus && items.some((item) => item.key === requestedFocus)) {
|
|
17238
17355
|
expandedItemKey = requestedFocus;
|
|
17239
17356
|
}
|
|
17240
17357
|
const rowElements = /* @__PURE__ */ new Map();
|
|
@@ -17250,7 +17367,10 @@ ${error51.stderrTail}`] : []
|
|
|
17250
17367
|
const preferenceOrder = groupPreference.list().filter((entry) => agentByKey.has(entry.agent));
|
|
17251
17368
|
for (const item of groupableItems) {
|
|
17252
17369
|
if (!preferenceOrder.some((entry) => entry.agent === item.key)) {
|
|
17253
|
-
preferenceOrder.push({
|
|
17370
|
+
preferenceOrder.push({
|
|
17371
|
+
agent: item.key,
|
|
17372
|
+
section: defaultAgentGroupSection(item.key)
|
|
17373
|
+
});
|
|
17254
17374
|
}
|
|
17255
17375
|
}
|
|
17256
17376
|
const mainEntries = partitionAgentsByInstallStatus(
|
|
@@ -17481,9 +17601,53 @@ ${error51.stderrTail}`] : []
|
|
|
17481
17601
|
connectionSection: "Connections",
|
|
17482
17602
|
generalSection: "General",
|
|
17483
17603
|
otherSection: "Other",
|
|
17484
|
-
appearanceDescription: "
|
|
17604
|
+
appearanceDescription: "Conversation display and local resource management.",
|
|
17605
|
+
appearanceGroup: "Appearance",
|
|
17606
|
+
loadedSessions: {
|
|
17607
|
+
title: "Loaded sessions",
|
|
17608
|
+
description: "Local external Harnesses only. Refreshes every 10 seconds without waking sessions or resetting activity. Released sessions disappear from this list.",
|
|
17609
|
+
columns: ["Session", "Harness", "State", "Since last activity", "Release constraint"],
|
|
17610
|
+
empty: "No loaded external sessions.",
|
|
17611
|
+
failed: "Could not load session status.",
|
|
17612
|
+
unavailable: "Local Host does not support session status or is unavailable.",
|
|
17613
|
+
loading: "Loading session status\u2026",
|
|
17614
|
+
minutes: "{minutes} min",
|
|
17615
|
+
states: {
|
|
17616
|
+
idle: "Idle",
|
|
17617
|
+
running: "Running",
|
|
17618
|
+
busy: "Busy",
|
|
17619
|
+
closing: "Releasing",
|
|
17620
|
+
failed: "Release failed",
|
|
17621
|
+
blocked: "Blocked"
|
|
17622
|
+
},
|
|
17623
|
+
reasons: {
|
|
17624
|
+
none: "\u2014",
|
|
17625
|
+
disabled: "Automatic release is off",
|
|
17626
|
+
timeout: "Timeout not reached",
|
|
17627
|
+
operation: "Turn or Host operation in progress",
|
|
17628
|
+
background: "Subagent, steering, command or interaction pending",
|
|
17629
|
+
identity: "Session identity unavailable or snapshot-only session",
|
|
17630
|
+
persistence: "Persistence or output error",
|
|
17631
|
+
closeFailed: "Restart Desktop before retrying"
|
|
17632
|
+
}
|
|
17633
|
+
},
|
|
17634
|
+
idleReleaseSection: "Resource management",
|
|
17635
|
+
idleReleaseTitle: "Release idle sessions",
|
|
17636
|
+
idleReleaseDescription: "Close background instances after the idle timeout; they resume on next use.",
|
|
17637
|
+
idleReleaseHelpLabel: "About releasing idle sessions",
|
|
17638
|
+
idleReleaseHelp: Object.freeze([
|
|
17639
|
+
"After an Agent finishes replying, its background process may continue running and using memory. Keeping more sessions open may increase resource usage.",
|
|
17640
|
+
"When enabled, codexhost periodically checks sessions and closes background instances once the idle timeout is reached and no tasks or interactions are pending, reducing resource usage. Chat history is not deleted. Opening the session again or sending a message restarts the process."
|
|
17641
|
+
]),
|
|
17642
|
+
idleReleaseTimeout: "Idle timeout",
|
|
17643
|
+
idleReleaseTimeoutDescription: "5\u20131440 minutes.",
|
|
17644
|
+
idleReleaseMinutes: "min",
|
|
17645
|
+
idleReleaseInvalid: "Enter a whole number from 5 to 1440.",
|
|
17646
|
+
idleReleasePending: "Syncing\u2026",
|
|
17647
|
+
idleReleaseUnavailable: "Not supported by this Host",
|
|
17648
|
+
idleReleaseFailed: "Sync failed, try again",
|
|
17485
17649
|
reasoningSoftWrapTitle: "Wrap thinking text",
|
|
17486
|
-
reasoningSoftWrapDescription: "Wrap long
|
|
17650
|
+
reasoningSoftWrapDescription: "Wrap long lines in thinking blocks. Shell output is unaffected.",
|
|
17487
17651
|
pageUnavailable: "Page unavailable",
|
|
17488
17652
|
inDevelopment: "In development",
|
|
17489
17653
|
notAvailable: "Not available",
|
|
@@ -17509,7 +17673,6 @@ ${error51.stderrTail}`] : []
|
|
|
17509
17673
|
sessionImportUpdatedAt: "Updated",
|
|
17510
17674
|
sessionImportSessionId: "Session ID",
|
|
17511
17675
|
sessionImportRunning: "Running",
|
|
17512
|
-
sessionImportRunningUnknown: "Activity unknown",
|
|
17513
17676
|
sessionImportRunningHint: "Close this session in its native client before importing, then refresh.",
|
|
17514
17677
|
sessionImportAction: "Import and open",
|
|
17515
17678
|
sessionImportImporting: "Importing...",
|
|
@@ -17693,9 +17856,53 @@ ${error51.stderrTail}`] : []
|
|
|
17693
17856
|
connectionSection: "\u8FDE\u63A5",
|
|
17694
17857
|
generalSection: "\u901A\u7528",
|
|
17695
17858
|
otherSection: "\u5176\u4ED6",
|
|
17696
|
-
appearanceDescription: "\
|
|
17859
|
+
appearanceDescription: "\u4F1A\u8BDD\u663E\u793A\u4E0E\u672C\u5730\u8D44\u6E90\u7BA1\u7406\u3002",
|
|
17860
|
+
appearanceGroup: "\u5916\u89C2",
|
|
17861
|
+
loadedSessions: {
|
|
17862
|
+
title: "\u5DF2\u52A0\u8F7D\u4F1A\u8BDD",
|
|
17863
|
+
description: "\u4EC5\u663E\u793A\u672C\u5730\u5916\u90E8 Harness\u3002\u6BCF 10 \u79D2\u5237\u65B0\uFF0C\u4E0D\u5524\u9192\u4F1A\u8BDD\u3001\u4E0D\u91CD\u7F6E\u6D3B\u52A8\u65F6\u95F4\u3002\u91CA\u653E\u540E\u7684\u4F1A\u8BDD\u4ECE\u5217\u8868\u79FB\u9664\u3002",
|
|
17864
|
+
columns: ["\u4F1A\u8BDD", "Harness", "\u72B6\u6001", "\u8DDD\u6700\u540E\u6D3B\u52A8", "\u6682\u4E0D\u80FD\u91CA\u653E\u7684\u539F\u56E0"],
|
|
17865
|
+
empty: "\u6682\u65E0\u5DF2\u52A0\u8F7D\u7684\u5916\u90E8\u4F1A\u8BDD\u3002",
|
|
17866
|
+
failed: "\u65E0\u6CD5\u52A0\u8F7D\u4F1A\u8BDD\u72B6\u6001\u3002",
|
|
17867
|
+
unavailable: "\u672C\u5730 Host \u4E0D\u652F\u6301\u4F1A\u8BDD\u72B6\u6001\u67E5\u8BE2\u6216\u5F53\u524D\u4E0D\u53EF\u7528\u3002",
|
|
17868
|
+
loading: "\u6B63\u5728\u52A0\u8F7D\u4F1A\u8BDD\u72B6\u6001\u2026",
|
|
17869
|
+
minutes: "{minutes} \u5206\u949F",
|
|
17870
|
+
states: {
|
|
17871
|
+
idle: "\u7A7A\u95F2",
|
|
17872
|
+
running: "\u6267\u884C\u4E2D",
|
|
17873
|
+
busy: "\u5FD9\u788C",
|
|
17874
|
+
closing: "\u91CA\u653E\u4E2D",
|
|
17875
|
+
failed: "\u91CA\u653E\u5931\u8D25",
|
|
17876
|
+
blocked: "\u4E0D\u53EF\u91CA\u653E"
|
|
17877
|
+
},
|
|
17878
|
+
reasons: {
|
|
17879
|
+
none: "\u2014",
|
|
17880
|
+
disabled: "\u81EA\u52A8\u91CA\u653E\u5DF2\u5173\u95ED",
|
|
17881
|
+
timeout: "\u5C1A\u672A\u8FBE\u5230\u8D85\u65F6",
|
|
17882
|
+
operation: "\u4EFB\u52A1\u6216 Host \u64CD\u4F5C\u5C1A\u672A\u7ED3\u675F",
|
|
17883
|
+
background: "\u5B58\u5728\u5B50\u4EFB\u52A1\u3001\u8F6C\u5411\u3001\u547D\u4EE4\u6216\u5F85\u5904\u7406\u4EA4\u4E92",
|
|
17884
|
+
identity: "\u7F3A\u5C11\u53EF\u6062\u590D\u8EAB\u4EFD\u6216\u4EC5\u6709\u5FEB\u7167",
|
|
17885
|
+
persistence: "\u6301\u4E45\u5316\u6216\u8F93\u51FA\u5F02\u5E38",
|
|
17886
|
+
closeFailed: "\u9700\u91CD\u542F Desktop \u540E\u91CD\u8BD5"
|
|
17887
|
+
}
|
|
17888
|
+
},
|
|
17889
|
+
idleReleaseSection: "\u8D44\u6E90\u7BA1\u7406",
|
|
17890
|
+
idleReleaseTitle: "\u81EA\u52A8\u91CA\u653E\u7A7A\u95F2\u4F1A\u8BDD",
|
|
17891
|
+
idleReleaseDescription: "\u7A7A\u95F2\u8D85\u65F6\u540E\u5173\u95ED\u540E\u53F0\u5B9E\u4F8B\uFF0C\u518D\u6B21\u4F7F\u7528\u65F6\u81EA\u52A8\u6062\u590D\u3002",
|
|
17892
|
+
idleReleaseHelpLabel: "\u81EA\u52A8\u91CA\u653E\u7A7A\u95F2\u4F1A\u8BDD\u8BF4\u660E",
|
|
17893
|
+
idleReleaseHelp: Object.freeze([
|
|
17894
|
+
"Agent \u56DE\u590D\u7ED3\u675F\u540E\uFF0C\u540E\u53F0\u8FDB\u7A0B\u53EF\u80FD\u4ECD\u5728\u8FD0\u884C\u5E76\u5360\u7528\u5185\u5B58\u3002\u6253\u5F00\u7684\u4F1A\u8BDD\u8D8A\u591A\uFF0C\u8D44\u6E90\u5360\u7528\u53EF\u80FD\u8D8A\u5927\u3002",
|
|
17895
|
+
"\u5F00\u542F\u540E\uFF0Ccodexhost \u4F1A\u5B9A\u671F\u68C0\u67E5\uFF0C\u5728\u4F1A\u8BDD\u7A7A\u95F2\u8FBE\u5230\u8BBE\u5B9A\u65F6\u95F4\u3001\u4E14\u6CA1\u6709\u4EFB\u52A1\u6216\u5F85\u5904\u7406\u4EA4\u4E92\u65F6\uFF0C\u81EA\u52A8\u5173\u95ED\u540E\u53F0\u5B9E\u4F8B\uFF0C\u51CF\u5C11\u8D44\u6E90\u5360\u7528\u3002\u804A\u5929\u8BB0\u5F55\u4E0D\u4F1A\u5220\u9664\uFF0C\u518D\u6B21\u6253\u5F00\u6216\u53D1\u9001\u6D88\u606F\u65F6\u4F1A\u91CD\u65B0\u542F\u52A8\u8BE5\u8FDB\u7A0B\u3002"
|
|
17896
|
+
]),
|
|
17897
|
+
idleReleaseTimeout: "\u7A7A\u95F2\u8D85\u65F6",
|
|
17898
|
+
idleReleaseTimeoutDescription: "5\uFF5E1440 \u5206\u949F\u3002",
|
|
17899
|
+
idleReleaseMinutes: "\u5206\u949F",
|
|
17900
|
+
idleReleaseInvalid: "\u8BF7\u8F93\u5165 5\uFF5E1440 \u4E4B\u95F4\u7684\u6574\u6570\u3002",
|
|
17901
|
+
idleReleasePending: "\u540C\u6B65\u4E2D\u2026",
|
|
17902
|
+
idleReleaseUnavailable: "\u5F53\u524D Host \u4E0D\u652F\u6301",
|
|
17903
|
+
idleReleaseFailed: "\u540C\u6B65\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
|
|
17697
17904
|
reasoningSoftWrapTitle: "\u6362\u884C\u663E\u793A\u601D\u8003\u6587\u672C",
|
|
17698
|
-
reasoningSoftWrapDescription: "\
|
|
17905
|
+
reasoningSoftWrapDescription: "\u601D\u8003\u5757\u4E2D\u7684\u957F\u884C\u81EA\u52A8\u6362\u884C\uFF0C\u4E0D\u5F71\u54CD Shell \u8F93\u51FA\u3002",
|
|
17699
17906
|
pageUnavailable: "\u9875\u9762\u4E0D\u53EF\u7528",
|
|
17700
17907
|
inDevelopment: "\u5F00\u53D1\u4E2D",
|
|
17701
17908
|
notAvailable: "\u6682\u4E0D\u53EF\u7528",
|
|
@@ -17721,7 +17928,6 @@ ${error51.stderrTail}`] : []
|
|
|
17721
17928
|
sessionImportUpdatedAt: "\u66F4\u65B0\u65F6\u95F4",
|
|
17722
17929
|
sessionImportSessionId: "\u4F1A\u8BDD ID",
|
|
17723
17930
|
sessionImportRunning: "\u8FD0\u884C\u4E2D",
|
|
17724
|
-
sessionImportRunningUnknown: "\u8FD0\u884C\u72B6\u6001\u672A\u77E5",
|
|
17725
17931
|
sessionImportRunningHint: "\u8BF7\u5148\u5728\u539F\u751F\u5BA2\u6237\u7AEF\u5173\u95ED\u8BE5\u4F1A\u8BDD\uFF0C\u518D\u5237\u65B0\u5E76\u5BFC\u5165\u3002",
|
|
17726
17932
|
sessionImportAction: "\u5BFC\u5165\u5E76\u6253\u5F00",
|
|
17727
17933
|
sessionImportImporting: "\u6B63\u5728\u5BFC\u5165\u2026\u2026",
|
|
@@ -17933,20 +18139,6 @@ ${error51.stderrTail}`] : []
|
|
|
17933
18139
|
function openConnectionsSettings(opener) {
|
|
17934
18140
|
openSettingsPage("connections", opener);
|
|
17935
18141
|
}
|
|
17936
|
-
var RENDERER_AGENT_INSTALL_URLS = {
|
|
17937
|
-
pi: "https://pi.dev/",
|
|
17938
|
-
"claude-code": "https://code.claude.com/docs/en/quickstart",
|
|
17939
|
-
"deepseek-harness": "https://github.com/deepseek-ai/deepseek-harness",
|
|
17940
|
-
opencode: "https://opencode.ai/docs/",
|
|
17941
|
-
grok: "https://grok.com/",
|
|
17942
|
-
omp: "https://github.com/can1357/oh-my-pi",
|
|
17943
|
-
antigravity: "https://antigravity.google/product/antigravity-cli",
|
|
17944
|
-
"kiro-cli": "https://kiro.dev/docs/cli/",
|
|
17945
|
-
codebuddy: "https://www.codebuddy.ai/docs/zh/cli/overview",
|
|
17946
|
-
"cursor-cli": "https://cursor.com/docs/cli/installation",
|
|
17947
|
-
hermes: "https://hermes-agent.nousresearch.com/docs",
|
|
17948
|
-
muse: "https://www.meta.ai/"
|
|
17949
|
-
};
|
|
17950
18142
|
var CONTROL_ATTRIBUTE = "data-codexhost-agent-control";
|
|
17951
18143
|
var AGENT_MENU_WIDTH = 224;
|
|
17952
18144
|
var AGENT_GROUP_CTA_THRESHOLD = 5;
|
|
@@ -18014,7 +18206,7 @@ ${error51.stderrTail}`] : []
|
|
|
18014
18206
|
return !menu.hidden;
|
|
18015
18207
|
}
|
|
18016
18208
|
}
|
|
18017
|
-
function mountRendererAgentPicker(composerId, enabledAgents, onSelect,
|
|
18209
|
+
function mountRendererAgentPicker(composerId, enabledAgents, onSelect, onOpen, groupPreference = getSharedAgentGroupPreferenceStore()) {
|
|
18018
18210
|
const root = document.createElement("div");
|
|
18019
18211
|
root.setAttribute(CONTROL_ATTRIBUTE, composerId);
|
|
18020
18212
|
root.style.display = "inline-flex";
|
|
@@ -18189,12 +18381,8 @@ ${error51.stderrTail}`] : []
|
|
|
18189
18381
|
});
|
|
18190
18382
|
control2.addEventListener("click", (event) => {
|
|
18191
18383
|
event.stopPropagation();
|
|
18192
|
-
|
|
18193
|
-
|
|
18194
|
-
openConnectionsSettings(trigger);
|
|
18195
|
-
} else {
|
|
18196
|
-
onDownload(agent);
|
|
18197
|
-
}
|
|
18384
|
+
requestConnectionsPageFocus(agent);
|
|
18385
|
+
openConnectionsSettings(trigger);
|
|
18198
18386
|
});
|
|
18199
18387
|
return control2;
|
|
18200
18388
|
})();
|
|
@@ -18337,6 +18525,7 @@ ${error51.stderrTail}`] : []
|
|
|
18337
18525
|
initiallyHidden: true,
|
|
18338
18526
|
bordered: true
|
|
18339
18527
|
});
|
|
18528
|
+
let notInstalled = /* @__PURE__ */ new Set();
|
|
18340
18529
|
let mainAgents = [...enabledAgents];
|
|
18341
18530
|
let moreAgents = [];
|
|
18342
18531
|
const regroup = () => {
|
|
@@ -18357,10 +18546,12 @@ ${error51.stderrTail}`] : []
|
|
|
18357
18546
|
for (const agent of enabledAgents) {
|
|
18358
18547
|
if (seen.has(agent)) continue;
|
|
18359
18548
|
seen.add(agent);
|
|
18360
|
-
nextMain.push(agent);
|
|
18549
|
+
if (agent === "codex" || defaultAgentGroupSection(agent) === "main") nextMain.push(agent);
|
|
18550
|
+
else nextMore.push(agent);
|
|
18361
18551
|
}
|
|
18362
|
-
|
|
18363
|
-
|
|
18552
|
+
const installationOrder = (a, b) => Number(notInstalled.has(a)) - Number(notInstalled.has(b));
|
|
18553
|
+
mainAgents = nextMain.sort(installationOrder);
|
|
18554
|
+
moreAgents = nextMore.sort(installationOrder);
|
|
18364
18555
|
const mainChildren = [];
|
|
18365
18556
|
for (const agent of mainAgents) {
|
|
18366
18557
|
const row = rowsByAgent.get(agent);
|
|
@@ -18437,6 +18628,18 @@ ${error51.stderrTail}`] : []
|
|
|
18437
18628
|
menu,
|
|
18438
18629
|
agents: [...enabledAgents],
|
|
18439
18630
|
options,
|
|
18631
|
+
updateAvailability(availability) {
|
|
18632
|
+
const next = new Set(
|
|
18633
|
+
enabledAgents.filter(
|
|
18634
|
+
(agent) => agent !== "codex" && availability[agent] === "notInstalled"
|
|
18635
|
+
)
|
|
18636
|
+
);
|
|
18637
|
+
if (next.size === notInstalled.size && [...next].every((agent) => notInstalled.has(agent))) {
|
|
18638
|
+
return;
|
|
18639
|
+
}
|
|
18640
|
+
notInstalled = next;
|
|
18641
|
+
regroup();
|
|
18642
|
+
},
|
|
18440
18643
|
close,
|
|
18441
18644
|
dispose() {
|
|
18442
18645
|
close();
|
|
@@ -18460,6 +18663,7 @@ ${error51.stderrTail}`] : []
|
|
|
18460
18663
|
control.agents,
|
|
18461
18664
|
availability
|
|
18462
18665
|
);
|
|
18666
|
+
control.updateAvailability(availability);
|
|
18463
18667
|
if (control.iconSlot.dataset.agent !== state.agent) {
|
|
18464
18668
|
control.iconSlot.replaceChildren(createRendererAgentIcon(state.agent));
|
|
18465
18669
|
control.iconSlot.dataset.agent = state.agent;
|
|
@@ -18643,6 +18847,113 @@ ${error51.stderrTail}`] : []
|
|
|
18643
18847
|
(ownerDocument.head ?? ownerDocument.documentElement).append(style);
|
|
18644
18848
|
}
|
|
18645
18849
|
|
|
18850
|
+
// src/renderer-model-favorites.ts
|
|
18851
|
+
var STORAGE_KEY = "codexhost.model-favorites.v1";
|
|
18852
|
+
function rendererStorage() {
|
|
18853
|
+
try {
|
|
18854
|
+
return window.localStorage;
|
|
18855
|
+
} catch {
|
|
18856
|
+
return null;
|
|
18857
|
+
}
|
|
18858
|
+
}
|
|
18859
|
+
function readModelFavorites(harnessId, storage = rendererStorage()) {
|
|
18860
|
+
try {
|
|
18861
|
+
const value = JSON.parse(storage?.getItem(`${STORAGE_KEY}:${harnessId}`) ?? "[]");
|
|
18862
|
+
return new Set(
|
|
18863
|
+
Array.isArray(value) ? value.filter((id) => typeof id === "string" && id.length > 0) : []
|
|
18864
|
+
);
|
|
18865
|
+
} catch {
|
|
18866
|
+
return /* @__PURE__ */ new Set();
|
|
18867
|
+
}
|
|
18868
|
+
}
|
|
18869
|
+
function writeModelFavorites(harnessId, favorites, storage = rendererStorage()) {
|
|
18870
|
+
try {
|
|
18871
|
+
storage?.setItem(`${STORAGE_KEY}:${harnessId}`, JSON.stringify([...favorites]));
|
|
18872
|
+
} catch {
|
|
18873
|
+
}
|
|
18874
|
+
}
|
|
18875
|
+
|
|
18876
|
+
// ../../node_modules/lucide/dist/esm/icons/star.mjs
|
|
18877
|
+
var Star = [
|
|
18878
|
+
[
|
|
18879
|
+
"path",
|
|
18880
|
+
{
|
|
18881
|
+
d: "M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z"
|
|
18882
|
+
}
|
|
18883
|
+
]
|
|
18884
|
+
];
|
|
18885
|
+
|
|
18886
|
+
// src/renderer-model-option-style.ts
|
|
18887
|
+
var STYLE_ATTRIBUTE3 = "data-codexhost-model-option-style";
|
|
18888
|
+
function ensureModelOptionStyle(ownerDocument) {
|
|
18889
|
+
if (ownerDocument.querySelector(`style[${STYLE_ATTRIBUTE3}]`)) return;
|
|
18890
|
+
const style = ownerDocument.createElement("style");
|
|
18891
|
+
style.setAttribute(STYLE_ATTRIBUTE3, "true");
|
|
18892
|
+
style.textContent = `
|
|
18893
|
+
[data-codexhost-model-row] {
|
|
18894
|
+
display: flex;
|
|
18895
|
+
align-items: center;
|
|
18896
|
+
border-radius: 8px;
|
|
18897
|
+
padding: 0 4px;
|
|
18898
|
+
}
|
|
18899
|
+
[data-codexhost-model-row]:hover,
|
|
18900
|
+
[data-codexhost-model-row]:focus-within {
|
|
18901
|
+
background: var(--color-token-list-hover-background, rgba(127, 127, 127, .07));
|
|
18902
|
+
}
|
|
18903
|
+
[data-codexhost-model-row] > button[data-model-id] {
|
|
18904
|
+
background: transparent;
|
|
18905
|
+
min-height: 36px;
|
|
18906
|
+
}
|
|
18907
|
+
[data-codexhost-model-row] > button[data-favorite-model-id] {
|
|
18908
|
+
display: inline-flex;
|
|
18909
|
+
align-items: center;
|
|
18910
|
+
justify-content: center;
|
|
18911
|
+
flex: none;
|
|
18912
|
+
width: 24px;
|
|
18913
|
+
height: 24px;
|
|
18914
|
+
padding: 4px;
|
|
18915
|
+
border: 0;
|
|
18916
|
+
border-radius: 999px;
|
|
18917
|
+
background: transparent;
|
|
18918
|
+
color: var(--color-token-border, #dcdce2);
|
|
18919
|
+
cursor: pointer;
|
|
18920
|
+
}
|
|
18921
|
+
[data-codexhost-model-row] > button[data-favorite-model-id]:hover {
|
|
18922
|
+
background: var(--color-token-list-hover-background, rgba(127, 127, 127, .09));
|
|
18923
|
+
color: var(--color-token-text-secondary, #85858f);
|
|
18924
|
+
}
|
|
18925
|
+
[data-codexhost-model-row] > button[data-favorite-model-id][aria-pressed="true"] {
|
|
18926
|
+
color: #f59e0b;
|
|
18927
|
+
}
|
|
18928
|
+
[data-codexhost-model-row] button:focus-visible {
|
|
18929
|
+
outline: 2px solid var(--color-token-text-secondary, #85858f);
|
|
18930
|
+
outline-offset: -2px;
|
|
18931
|
+
}
|
|
18932
|
+
[data-favorite-model-id] > svg {
|
|
18933
|
+
width: 16px;
|
|
18934
|
+
height: 16px;
|
|
18935
|
+
fill: none;
|
|
18936
|
+
stroke: currentColor;
|
|
18937
|
+
stroke-width: 2;
|
|
18938
|
+
stroke-linejoin: round;
|
|
18939
|
+
}
|
|
18940
|
+
[data-favorite-model-id][aria-pressed="true"] > svg {
|
|
18941
|
+
fill: currentColor;
|
|
18942
|
+
}
|
|
18943
|
+
`;
|
|
18944
|
+
(ownerDocument.head ?? ownerDocument.documentElement).append(style);
|
|
18945
|
+
}
|
|
18946
|
+
function createModelFavoriteIcon(ownerDocument) {
|
|
18947
|
+
return ownerDocument.adoptNode(
|
|
18948
|
+
createElement(Star, {
|
|
18949
|
+
width: 16,
|
|
18950
|
+
height: 16,
|
|
18951
|
+
"aria-hidden": "true",
|
|
18952
|
+
focusable: "false"
|
|
18953
|
+
})
|
|
18954
|
+
);
|
|
18955
|
+
}
|
|
18956
|
+
|
|
18646
18957
|
// src/renderer-model-picker.ts
|
|
18647
18958
|
var MENU_CLASSES = `fixed z-50 overflow-hidden ${PICKER_POPOVER_CLASS}`;
|
|
18648
18959
|
var SEARCH_INPUT_CLASSES = "mb-1 w-full shrink-0 rounded-lg px-2 py-1.5 text-sm outline-none placeholder:text-token-text-tertiary disabled:cursor-not-allowed disabled:opacity-40";
|
|
@@ -18792,13 +19103,30 @@ ${error51.stderrTail}`] : []
|
|
|
18792
19103
|
let visibleCount = 0;
|
|
18793
19104
|
for (const option of control.options.values()) {
|
|
18794
19105
|
const matches = query.length === 0 || option.searchText.includes(query);
|
|
18795
|
-
option.
|
|
19106
|
+
option.row.hidden = !matches;
|
|
19107
|
+
option.row.style.display = matches ? "flex" : "none";
|
|
18796
19108
|
if (matches) visibleCount += 1;
|
|
18797
19109
|
}
|
|
18798
19110
|
control.searchEmpty.hidden = query.length === 0 || visibleCount > 0;
|
|
18799
19111
|
}
|
|
19112
|
+
function syncFavorite(option, favorite) {
|
|
19113
|
+
option.favorite.setAttribute("aria-pressed", String(favorite));
|
|
19114
|
+
const label = `${favorite ? "Unfavorite" : "Favorite"} ${option.label}`;
|
|
19115
|
+
option.favorite.setAttribute("aria-label", label);
|
|
19116
|
+
option.favorite.title = label;
|
|
19117
|
+
}
|
|
19118
|
+
function orderModelFavorites(control) {
|
|
19119
|
+
for (const favorite of [true, false]) {
|
|
19120
|
+
for (const [id, option] of control.options) {
|
|
19121
|
+
const isFavorite = control.favorites.has(id);
|
|
19122
|
+
syncFavorite(option, isFavorite);
|
|
19123
|
+
if (isFavorite === favorite) control.modelMenu.append(option.row);
|
|
19124
|
+
}
|
|
19125
|
+
}
|
|
19126
|
+
}
|
|
18800
19127
|
function mountRendererModelPicker(composerId, onSelectModel, onSelectThinking) {
|
|
18801
19128
|
ensureRendererTriggerChipStyle(document);
|
|
19129
|
+
ensureModelOptionStyle(document);
|
|
18802
19130
|
const root = document.createElement("div");
|
|
18803
19131
|
root.setAttribute("data-codexhost-model-control", composerId);
|
|
18804
19132
|
root.className = "relative min-w-0";
|
|
@@ -18909,7 +19237,8 @@ ${error51.stderrTail}`] : []
|
|
|
18909
19237
|
const movedToComposer = active === document.body || active instanceof Element && (active.matches('textarea, [contenteditable="true"], [role="textbox"]') || active.closest('textarea, [contenteditable="true"], [role="textbox"]') !== null);
|
|
18910
19238
|
if (!movedToComposer) return;
|
|
18911
19239
|
requestAnimationFrame(() => {
|
|
18912
|
-
if (popoverOpen2(modelMenu) && searchInput.isConnected
|
|
19240
|
+
if (popoverOpen2(modelMenu) && searchInput.isConnected && !modelMenu.contains(document.activeElement))
|
|
19241
|
+
searchInput.focus();
|
|
18913
19242
|
});
|
|
18914
19243
|
};
|
|
18915
19244
|
searchInput.addEventListener("blur", onSearchBlur);
|
|
@@ -18928,6 +19257,9 @@ ${error51.stderrTail}`] : []
|
|
|
18928
19257
|
};
|
|
18929
19258
|
const openModelMenu = (standalone = false) => {
|
|
18930
19259
|
if (!standalone && !popoverOpen2(menu) || popoverOpen2(modelMenu)) return;
|
|
19260
|
+
control.favorites = readModelFavorites(control.harnessId);
|
|
19261
|
+
orderModelFavorites(control);
|
|
19262
|
+
modelMenu.scrollTop = 0;
|
|
18931
19263
|
modelMenu.showPopover();
|
|
18932
19264
|
positionModelMenu(control, standalone);
|
|
18933
19265
|
modelButton.setAttribute("aria-expanded", "true");
|
|
@@ -18971,6 +19303,22 @@ ${error51.stderrTail}`] : []
|
|
|
18971
19303
|
}
|
|
18972
19304
|
};
|
|
18973
19305
|
const onModelMenuClick = (event) => {
|
|
19306
|
+
const favoriteButton = event.target instanceof Element ? event.target.closest("button[data-favorite-model-id]") : null;
|
|
19307
|
+
const favoriteId = favoriteButton?.dataset.favoriteModelId;
|
|
19308
|
+
if (favoriteId) {
|
|
19309
|
+
event.stopPropagation();
|
|
19310
|
+
control.favorites = readModelFavorites(control.harnessId);
|
|
19311
|
+
if (control.favorites.has(favoriteId)) control.favorites.delete(favoriteId);
|
|
19312
|
+
else control.favorites.add(favoriteId);
|
|
19313
|
+
writeModelFavorites(control.harnessId, control.favorites);
|
|
19314
|
+
const focused = document.activeElement;
|
|
19315
|
+
orderModelFavorites(control);
|
|
19316
|
+
if (focused instanceof HTMLElement && modelMenu.contains(focused)) {
|
|
19317
|
+
focused.focus({ preventScroll: true });
|
|
19318
|
+
}
|
|
19319
|
+
modelMenu.scrollTop = 0;
|
|
19320
|
+
return;
|
|
19321
|
+
}
|
|
18974
19322
|
const target = event.target instanceof Element ? event.target.closest("button[data-model-id]") : null;
|
|
18975
19323
|
if (!target?.dataset.modelId) return;
|
|
18976
19324
|
close();
|
|
@@ -19022,6 +19370,8 @@ ${error51.stderrTail}`] : []
|
|
|
19022
19370
|
searchInput,
|
|
19023
19371
|
searchHeader,
|
|
19024
19372
|
searchEmpty,
|
|
19373
|
+
harnessId: "",
|
|
19374
|
+
favorites: /* @__PURE__ */ new Set(),
|
|
19025
19375
|
options,
|
|
19026
19376
|
thinkingOptions,
|
|
19027
19377
|
close,
|
|
@@ -19103,17 +19453,37 @@ ${error51.stderrTail}`] : []
|
|
|
19103
19453
|
text.title = model.label;
|
|
19104
19454
|
const check2 = createCheck();
|
|
19105
19455
|
button.append(text, check2);
|
|
19456
|
+
const row = document.createElement("div");
|
|
19457
|
+
row.setAttribute("role", "presentation");
|
|
19458
|
+
row.dataset.codexhostModelRow = "true";
|
|
19459
|
+
button.style.minWidth = "0";
|
|
19460
|
+
button.style.flex = "1";
|
|
19461
|
+
const favorite = document.createElement("button");
|
|
19462
|
+
favorite.type = "button";
|
|
19463
|
+
favorite.dataset.favoriteModelId = model.ref.id;
|
|
19464
|
+
favorite.append(createModelFavoriteIcon(document));
|
|
19465
|
+
row.append(button, favorite);
|
|
19106
19466
|
control.options.set(model.ref.id, {
|
|
19467
|
+
row,
|
|
19468
|
+
favorite,
|
|
19469
|
+
label: model.label,
|
|
19107
19470
|
button,
|
|
19108
19471
|
check: check2,
|
|
19109
19472
|
searchText: `${model.label} ${model.ref.id}`.toLowerCase()
|
|
19110
19473
|
});
|
|
19111
|
-
control.modelMenu.append(
|
|
19474
|
+
control.modelMenu.append(row);
|
|
19112
19475
|
}
|
|
19476
|
+
orderModelFavorites(control);
|
|
19113
19477
|
applyModelSearchFilter(control);
|
|
19114
19478
|
if (popoverOpen2(control.modelMenu)) control.searchInput.focus();
|
|
19115
19479
|
}
|
|
19116
|
-
function renderRendererModelPicker(control, view, visible) {
|
|
19480
|
+
function renderRendererModelPicker(control, view, visible, harnessId = "") {
|
|
19481
|
+
if (control.harnessId !== harnessId) {
|
|
19482
|
+
control.close();
|
|
19483
|
+
control.harnessId = harnessId;
|
|
19484
|
+
control.favorites = readModelFavorites(harnessId);
|
|
19485
|
+
delete control.root.dataset.catalogSignature;
|
|
19486
|
+
}
|
|
19117
19487
|
control.root.style.display = visible ? "inline-flex" : "none";
|
|
19118
19488
|
control.root.style.alignItems = "center";
|
|
19119
19489
|
control.root.style.alignSelf = "center";
|
|
@@ -21211,7 +21581,7 @@ ${error51.stderrTail}`] : []
|
|
|
21211
21581
|
setNativeControlHidden(control.nativeContextUsageControl, false);
|
|
21212
21582
|
setNativeControlHidden(control.nativePermissionModeControl, hidePermissionMode);
|
|
21213
21583
|
}
|
|
21214
|
-
function mountComposerAgentControl(composer, composerId, sendButton, enabledAgents, onSelect,
|
|
21584
|
+
function mountComposerAgentControl(composer, composerId, sendButton, enabledAgents, onSelect, onOpenProviderPicker, onSelectModel, onSelectThinking, onSelectPermissionMode, onSelectCommand) {
|
|
21215
21585
|
const nativeModelControl = captureNativeControl(nativeModelControlForComposer(composer));
|
|
21216
21586
|
const nativeContextUsageControl = captureNativeControl(
|
|
21217
21587
|
nativeContextUsageControlForComposer(composer)
|
|
@@ -21223,7 +21593,6 @@ ${error51.stderrTail}`] : []
|
|
|
21223
21593
|
composerId,
|
|
21224
21594
|
enabledAgents,
|
|
21225
21595
|
onSelect,
|
|
21226
|
-
onDownload,
|
|
21227
21596
|
onOpenProviderPicker
|
|
21228
21597
|
);
|
|
21229
21598
|
const modelPicker = mountRendererModelPicker(composerId, onSelectModel, onSelectThinking);
|
|
@@ -21303,7 +21672,7 @@ ${error51.stderrTail}`] : []
|
|
|
21303
21672
|
pickerView.nativeModelHidden,
|
|
21304
21673
|
switching || state.agent !== "codex"
|
|
21305
21674
|
);
|
|
21306
|
-
renderRendererModelPicker(control.modelPicker, modelView, state.agent !== "codex");
|
|
21675
|
+
renderRendererModelPicker(control.modelPicker, modelView, state.agent !== "codex", state.agent);
|
|
21307
21676
|
const permissionModeVisible = state.agent !== "codex" && permissionModeView.status !== "idle" && permissionModeView.status !== "loading" && permissionModeView.status !== "unsupported" && control.nativePermissionModeControlVerified;
|
|
21308
21677
|
renderRendererPermissionModePicker(
|
|
21309
21678
|
control.permissionModePicker,
|
|
@@ -21540,6 +21909,98 @@ ${error51.stderrTail}`] : []
|
|
|
21540
21909
|
};
|
|
21541
21910
|
}
|
|
21542
21911
|
|
|
21912
|
+
// src/renderer-idle-release-preference.ts
|
|
21913
|
+
var IDLE_RELEASE_STORAGE_KEY = "codexhost.idle-release.v1";
|
|
21914
|
+
var IDLE_RELEASE_CHANGE_EVENT = "codexhost:idle-release-changed";
|
|
21915
|
+
var IDLE_RELEASE_STATUS_EVENT = "codexhost:idle-release-status";
|
|
21916
|
+
function readIdleReleasePreference(owner) {
|
|
21917
|
+
try {
|
|
21918
|
+
const raw = owner.localStorage.getItem(IDLE_RELEASE_STORAGE_KEY);
|
|
21919
|
+
const parsed = idleReleaseSettingsSchema.safeParse(raw ? JSON.parse(raw) : null);
|
|
21920
|
+
if (parsed.success) return parsed.data;
|
|
21921
|
+
} catch {
|
|
21922
|
+
}
|
|
21923
|
+
return { ...DEFAULT_IDLE_RELEASE_SETTINGS };
|
|
21924
|
+
}
|
|
21925
|
+
function writeIdleReleasePreference(owner, value) {
|
|
21926
|
+
const parsed = idleReleaseSettingsSchema.safeParse(value);
|
|
21927
|
+
if (!parsed.success) return false;
|
|
21928
|
+
try {
|
|
21929
|
+
owner.localStorage.setItem(IDLE_RELEASE_STORAGE_KEY, JSON.stringify(parsed.data));
|
|
21930
|
+
} catch {
|
|
21931
|
+
return false;
|
|
21932
|
+
}
|
|
21933
|
+
owner.dispatchEvent(new Event(IDLE_RELEASE_CHANGE_EVENT));
|
|
21934
|
+
return true;
|
|
21935
|
+
}
|
|
21936
|
+
function installIdleReleasePreferenceSync(owner) {
|
|
21937
|
+
let client = null;
|
|
21938
|
+
let disposed = false;
|
|
21939
|
+
let generation = 0;
|
|
21940
|
+
let work = { pending: false, dirty: false };
|
|
21941
|
+
const publish = (value) => {
|
|
21942
|
+
owner.dispatchEvent(new CustomEvent(IDLE_RELEASE_STATUS_EVENT, { detail: value }));
|
|
21943
|
+
};
|
|
21944
|
+
const sync = async () => {
|
|
21945
|
+
const currentWork = work;
|
|
21946
|
+
const version2 = generation;
|
|
21947
|
+
currentWork.dirty = true;
|
|
21948
|
+
if (currentWork.pending || disposed) return;
|
|
21949
|
+
currentWork.pending = true;
|
|
21950
|
+
try {
|
|
21951
|
+
while (currentWork.dirty && !disposed && version2 === generation) {
|
|
21952
|
+
currentWork.dirty = false;
|
|
21953
|
+
const target = client;
|
|
21954
|
+
if (!target) {
|
|
21955
|
+
publish("pending");
|
|
21956
|
+
continue;
|
|
21957
|
+
}
|
|
21958
|
+
if (!target.setIdleReleaseSettings) {
|
|
21959
|
+
publish("unavailable");
|
|
21960
|
+
continue;
|
|
21961
|
+
}
|
|
21962
|
+
const settings = readIdleReleasePreference(owner);
|
|
21963
|
+
publish("pending");
|
|
21964
|
+
try {
|
|
21965
|
+
await target.setIdleReleaseSettings(settings);
|
|
21966
|
+
if (!disposed && version2 === generation && !currentWork.dirty) publish("applied");
|
|
21967
|
+
} catch (error51) {
|
|
21968
|
+
if (!disposed && version2 === generation) {
|
|
21969
|
+
publish(error51 instanceof RendererMethodUnavailableError ? "unavailable" : "failed");
|
|
21970
|
+
}
|
|
21971
|
+
}
|
|
21972
|
+
}
|
|
21973
|
+
} finally {
|
|
21974
|
+
currentWork.pending = false;
|
|
21975
|
+
}
|
|
21976
|
+
};
|
|
21977
|
+
const changed = () => {
|
|
21978
|
+
void sync();
|
|
21979
|
+
};
|
|
21980
|
+
const storage = (event) => {
|
|
21981
|
+
if (event.key === IDLE_RELEASE_STORAGE_KEY || event.key === null) changed();
|
|
21982
|
+
};
|
|
21983
|
+
owner.addEventListener(IDLE_RELEASE_CHANGE_EVENT, changed);
|
|
21984
|
+
owner.addEventListener("storage", storage);
|
|
21985
|
+
return {
|
|
21986
|
+
connect(next) {
|
|
21987
|
+
if (disposed) return;
|
|
21988
|
+
if (next === client) return;
|
|
21989
|
+
client = next;
|
|
21990
|
+
generation += 1;
|
|
21991
|
+
work = { pending: false, dirty: false };
|
|
21992
|
+
void sync();
|
|
21993
|
+
},
|
|
21994
|
+
dispose() {
|
|
21995
|
+
disposed = true;
|
|
21996
|
+
generation += 1;
|
|
21997
|
+
client = null;
|
|
21998
|
+
owner.removeEventListener(IDLE_RELEASE_CHANGE_EVENT, changed);
|
|
21999
|
+
owner.removeEventListener("storage", storage);
|
|
22000
|
+
}
|
|
22001
|
+
};
|
|
22002
|
+
}
|
|
22003
|
+
|
|
21543
22004
|
// src/renderer-sidebar-agent-icons.ts
|
|
21544
22005
|
var SIDEBAR_THREAD_ROW_ATTRIBUTE = "data-app-action-sidebar-thread-row";
|
|
21545
22006
|
var SIDEBAR_THREAD_ROW_SELECTOR = `[${SIDEBAR_THREAD_ROW_ATTRIBUTE}]`;
|
|
@@ -22567,6 +23028,15 @@ ${error51.stderrTail}`] : []
|
|
|
22567
23028
|
return harnessConfigurationStateSchema.parse(result);
|
|
22568
23029
|
};
|
|
22569
23030
|
return Object.freeze({
|
|
23031
|
+
async listLoadedSessions() {
|
|
23032
|
+
return loadedSessionsSchema.parse(await manager.sendRequest(LOADED_SESSIONS_METHOD, {}));
|
|
23033
|
+
},
|
|
23034
|
+
async setIdleReleaseSettings(settings) {
|
|
23035
|
+
const params = idleReleaseSettingsSchema.parse(settings);
|
|
23036
|
+
return idleReleaseSettingsSchema.parse(
|
|
23037
|
+
await manager.sendRequest(IDLE_RELEASE_SETTINGS_METHOD, params)
|
|
23038
|
+
);
|
|
23039
|
+
},
|
|
22570
23040
|
...createRendererSessionImportClient(
|
|
22571
23041
|
async (method, params) => manager.sendRequest(method, params)
|
|
22572
23042
|
),
|
|
@@ -23248,6 +23718,7 @@ ${error51.stderrTail}`] : []
|
|
|
23248
23718
|
});
|
|
23249
23719
|
};
|
|
23250
23720
|
const usageSubscription = createThreadUsageSubscriptionRelay();
|
|
23721
|
+
const idleReleaseSync = installIdleReleasePreferenceSync(window);
|
|
23251
23722
|
const requestRouteResolver = createRendererRequestRouteResolver(
|
|
23252
23723
|
() => window.__codexhostDraftPrewarmPolicyV1,
|
|
23253
23724
|
() => findActivePrewarmTargets(document)
|
|
@@ -23258,7 +23729,7 @@ ${error51.stderrTail}`] : []
|
|
|
23258
23729
|
const target = targets[0];
|
|
23259
23730
|
if (targets.length !== 1 || !target) return null;
|
|
23260
23731
|
const cached2 = clientsByTarget.get(target);
|
|
23261
|
-
if (cached2
|
|
23732
|
+
if (cached2 && (policy === null || cached2.policy === policy) && cached2.requestClient === target.requestClient)
|
|
23262
23733
|
return cached2.client;
|
|
23263
23734
|
const client = createRendererModelClient([target]);
|
|
23264
23735
|
if (client) {
|
|
@@ -23278,6 +23749,10 @@ ${error51.stderrTail}`] : []
|
|
|
23278
23749
|
const policy = route?.policy ?? null;
|
|
23279
23750
|
const client = route ? modelClientForTargets(route.targets, route.policy) : null;
|
|
23280
23751
|
usageSubscription.connect(client);
|
|
23752
|
+
const localClient = policy?.hostId === "local" ? client : modelClientForTargets(
|
|
23753
|
+
rendererRequestTargetsForHost(findActivePrewarmTargets(document), "local") ?? []
|
|
23754
|
+
);
|
|
23755
|
+
idleReleaseSync.connect(localClient);
|
|
23281
23756
|
if (activeRoutePolicy === policy && activeRouteClient === client) return client;
|
|
23282
23757
|
activeRoutePolicy = policy;
|
|
23283
23758
|
activeRouteClient = client;
|
|
@@ -23492,7 +23967,8 @@ ${error51.stderrTail}`] : []
|
|
|
23492
23967
|
() => syncActiveRoute(null),
|
|
23493
23968
|
() => forkControl.dispose(),
|
|
23494
23969
|
...turnControlCleanups,
|
|
23495
|
-
() => usageSubscription.dispose()
|
|
23970
|
+
() => usageSubscription.dispose(),
|
|
23971
|
+
() => idleReleaseSync.dispose()
|
|
23496
23972
|
];
|
|
23497
23973
|
for (const cleanup of cleanups) {
|
|
23498
23974
|
try {
|
|
@@ -24158,14 +24634,14 @@ ${error51.stderrTail}`] : []
|
|
|
24158
24634
|
|
|
24159
24635
|
// src/renderer-permission-mode-preference.ts
|
|
24160
24636
|
var CLAUDE_PERMISSION_MODE_PREFERENCE_KEY = "codexhost.claude-code.permission-mode.v1";
|
|
24161
|
-
function
|
|
24637
|
+
function rendererStorage2() {
|
|
24162
24638
|
try {
|
|
24163
24639
|
return window.localStorage;
|
|
24164
24640
|
} catch {
|
|
24165
24641
|
return null;
|
|
24166
24642
|
}
|
|
24167
24643
|
}
|
|
24168
|
-
function readClaudePermissionModePreference(catalog, storage =
|
|
24644
|
+
function readClaudePermissionModePreference(catalog, storage = rendererStorage2()) {
|
|
24169
24645
|
if (!storage) return void 0;
|
|
24170
24646
|
try {
|
|
24171
24647
|
const parsed = harnessPermissionModeIdSchema.safeParse(
|
|
@@ -24176,7 +24652,7 @@ ${error51.stderrTail}`] : []
|
|
|
24176
24652
|
return void 0;
|
|
24177
24653
|
}
|
|
24178
24654
|
}
|
|
24179
|
-
function writeClaudePermissionModePreference(permissionModeId, storage =
|
|
24655
|
+
function writeClaudePermissionModePreference(permissionModeId, storage = rendererStorage2()) {
|
|
24180
24656
|
if (!storage) return;
|
|
24181
24657
|
try {
|
|
24182
24658
|
storage.setItem(CLAUDE_PERMISSION_MODE_PREFERENCE_KEY, permissionModeId);
|
|
@@ -24186,7 +24662,7 @@ ${error51.stderrTail}`] : []
|
|
|
24186
24662
|
|
|
24187
24663
|
// src/renderer-new-thread-preference.ts
|
|
24188
24664
|
var RENDERER_NEW_THREAD_PREFERENCE_KEY = "codexhost.new-thread-preference.v1";
|
|
24189
|
-
function
|
|
24665
|
+
function rendererStorage3() {
|
|
24190
24666
|
try {
|
|
24191
24667
|
return window.localStorage;
|
|
24192
24668
|
} catch {
|
|
@@ -24241,11 +24717,11 @@ ${error51.stderrTail}`] : []
|
|
|
24241
24717
|
} catch {
|
|
24242
24718
|
}
|
|
24243
24719
|
}
|
|
24244
|
-
function readNewThreadAgentPreference(enabledAgents, storage =
|
|
24720
|
+
function readNewThreadAgentPreference(enabledAgents, storage = rendererStorage3()) {
|
|
24245
24721
|
const agent = readPreference(storage)?.lastAgent;
|
|
24246
24722
|
return agent && enabledAgents.has(agent) ? agent : void 0;
|
|
24247
24723
|
}
|
|
24248
|
-
function readNewThreadExternalConfigurationPreference(agent, catalog, permissionModes, storage =
|
|
24724
|
+
function readNewThreadExternalConfigurationPreference(agent, catalog, permissionModes, storage = rendererStorage3()) {
|
|
24249
24725
|
const preference = readPreference(storage)?.externalByAgent[agent];
|
|
24250
24726
|
if (!preference) return void 0;
|
|
24251
24727
|
const catalogModel = catalog.models.find(({ ref }) => ref.id === preference.model.id);
|
|
@@ -24258,7 +24734,7 @@ ${error51.stderrTail}`] : []
|
|
|
24258
24734
|
...permissionModeId ? { permissionModeId } : {}
|
|
24259
24735
|
};
|
|
24260
24736
|
}
|
|
24261
|
-
function writeNewThreadAgentPreference(agent, storage =
|
|
24737
|
+
function writeNewThreadAgentPreference(agent, storage = rendererStorage3()) {
|
|
24262
24738
|
const current = readPreference(storage);
|
|
24263
24739
|
writePreference(
|
|
24264
24740
|
{
|
|
@@ -24269,7 +24745,7 @@ ${error51.stderrTail}`] : []
|
|
|
24269
24745
|
storage
|
|
24270
24746
|
);
|
|
24271
24747
|
}
|
|
24272
|
-
function writeNewThreadExternalConfigurationPreference(agent, model, thinkingOptionId, permissionModeId, storage =
|
|
24748
|
+
function writeNewThreadExternalConfigurationPreference(agent, model, thinkingOptionId, permissionModeId, storage = rendererStorage3()) {
|
|
24273
24749
|
const current = readPreference(storage);
|
|
24274
24750
|
writePreference(
|
|
24275
24751
|
{
|
|
@@ -24956,10 +25432,10 @@ ${error51.stderrTail}`] : []
|
|
|
24956
25432
|
);
|
|
24957
25433
|
const actionArea = document2.createElement("div");
|
|
24958
25434
|
actionArea.className = "settings-session-import-row__action";
|
|
24959
|
-
if (candidate.running
|
|
25435
|
+
if (candidate.running === true) {
|
|
24960
25436
|
const running = document2.createElement("span");
|
|
24961
25437
|
running.className = "settings-session-import-running";
|
|
24962
|
-
running.textContent =
|
|
25438
|
+
running.textContent = messages.sessionImportRunning;
|
|
24963
25439
|
running.title = messages.sessionImportRunningHint;
|
|
24964
25440
|
running.setAttribute("aria-hidden", "true");
|
|
24965
25441
|
actionArea.append(
|
|
@@ -25229,8 +25705,319 @@ ${error51.stderrTail}`] : []
|
|
|
25229
25705
|
});
|
|
25230
25706
|
}
|
|
25231
25707
|
|
|
25708
|
+
// src/settings/loaded-sessions-table.ts
|
|
25709
|
+
function mountLoadedSessionsTable(context, messages, getClient) {
|
|
25710
|
+
const document2 = context.content.ownerDocument;
|
|
25711
|
+
const owner = document2.defaultView;
|
|
25712
|
+
if (!owner) return () => void 0;
|
|
25713
|
+
const text = messages.loadedSessions;
|
|
25714
|
+
const container = document2.createElement("div");
|
|
25715
|
+
container.className = "border-t border-settings-border";
|
|
25716
|
+
const header = document2.createElement("div");
|
|
25717
|
+
header.className = "px-4 pt-4";
|
|
25718
|
+
const title = document2.createElement("p");
|
|
25719
|
+
title.className = "m-0 text-sm font-medium";
|
|
25720
|
+
title.textContent = text.title;
|
|
25721
|
+
const description = document2.createElement("p");
|
|
25722
|
+
description.className = "text-xs text-settings-muted";
|
|
25723
|
+
description.textContent = text.description;
|
|
25724
|
+
const status = document2.createElement("p");
|
|
25725
|
+
status.className = "p-4 text-sm text-settings-muted";
|
|
25726
|
+
status.setAttribute("role", "status");
|
|
25727
|
+
status.textContent = text.loading;
|
|
25728
|
+
const scroll = document2.createElement("div");
|
|
25729
|
+
scroll.className = "overflow-x-auto";
|
|
25730
|
+
const table = document2.createElement("table");
|
|
25731
|
+
table.className = "w-full text-left text-sm";
|
|
25732
|
+
table.setAttribute("aria-label", text.title);
|
|
25733
|
+
const head = table.createTHead().insertRow();
|
|
25734
|
+
for (const label of text.columns) {
|
|
25735
|
+
const cell = document2.createElement("th");
|
|
25736
|
+
cell.scope = "col";
|
|
25737
|
+
cell.className = "px-4 py-3 font-medium text-settings-muted";
|
|
25738
|
+
cell.textContent = label;
|
|
25739
|
+
head.append(cell);
|
|
25740
|
+
}
|
|
25741
|
+
const body = table.createTBody();
|
|
25742
|
+
scroll.append(table);
|
|
25743
|
+
scroll.hidden = true;
|
|
25744
|
+
header.append(title, description);
|
|
25745
|
+
container.append(header, status, scroll);
|
|
25746
|
+
context.content.append(container);
|
|
25747
|
+
let disposed = false;
|
|
25748
|
+
let timer;
|
|
25749
|
+
let requestTimer;
|
|
25750
|
+
const refresh = async () => {
|
|
25751
|
+
try {
|
|
25752
|
+
const client = getClient();
|
|
25753
|
+
if (!client?.listLoadedSessions) {
|
|
25754
|
+
status.textContent = text.unavailable;
|
|
25755
|
+
status.hidden = false;
|
|
25756
|
+
scroll.hidden = true;
|
|
25757
|
+
return;
|
|
25758
|
+
}
|
|
25759
|
+
const rows = await Promise.race([
|
|
25760
|
+
client.listLoadedSessions(),
|
|
25761
|
+
new Promise((_, reject) => {
|
|
25762
|
+
requestTimer = owner.setTimeout(
|
|
25763
|
+
() => reject(new Error("Session status timed out")),
|
|
25764
|
+
1e4
|
|
25765
|
+
);
|
|
25766
|
+
})
|
|
25767
|
+
]);
|
|
25768
|
+
if (disposed || context.signal.aborted) return;
|
|
25769
|
+
body.replaceChildren();
|
|
25770
|
+
for (const row of rows.toSorted(
|
|
25771
|
+
(a, b) => b.inactiveMs - a.inactiveMs || a.harnessId.localeCompare(b.harnessId) || a.threadId.localeCompare(b.threadId)
|
|
25772
|
+
)) {
|
|
25773
|
+
const tr = body.insertRow();
|
|
25774
|
+
const values = [
|
|
25775
|
+
row.title,
|
|
25776
|
+
row.harnessId,
|
|
25777
|
+
text.states[row.state],
|
|
25778
|
+
text.minutes.replace("{minutes}", String(Math.floor(row.inactiveMs / 6e4))),
|
|
25779
|
+
text.reasons[row.reason]
|
|
25780
|
+
];
|
|
25781
|
+
for (const value of values) {
|
|
25782
|
+
const cell = tr.insertCell();
|
|
25783
|
+
cell.className = "max-w-64 break-words px-4 py-3 align-top";
|
|
25784
|
+
cell.textContent = value;
|
|
25785
|
+
}
|
|
25786
|
+
tr.title = row.threadId;
|
|
25787
|
+
}
|
|
25788
|
+
status.textContent = rows.length ? "" : text.empty;
|
|
25789
|
+
status.hidden = rows.length > 0;
|
|
25790
|
+
scroll.hidden = rows.length === 0;
|
|
25791
|
+
} catch (error51) {
|
|
25792
|
+
if (disposed || context.signal.aborted) return;
|
|
25793
|
+
status.textContent = error51 instanceof RendererMethodUnavailableError ? text.unavailable : text.failed;
|
|
25794
|
+
status.hidden = false;
|
|
25795
|
+
scroll.hidden = true;
|
|
25796
|
+
} finally {
|
|
25797
|
+
owner.clearTimeout(requestTimer);
|
|
25798
|
+
if (!disposed && !context.signal.aborted)
|
|
25799
|
+
timer = owner.setTimeout(() => void refresh(), 1e4);
|
|
25800
|
+
}
|
|
25801
|
+
};
|
|
25802
|
+
void refresh();
|
|
25803
|
+
return () => {
|
|
25804
|
+
disposed = true;
|
|
25805
|
+
owner.clearTimeout(timer);
|
|
25806
|
+
owner.clearTimeout(requestTimer);
|
|
25807
|
+
};
|
|
25808
|
+
}
|
|
25809
|
+
|
|
25810
|
+
// src/settings/preference-ui.ts
|
|
25811
|
+
var nextPreferenceId = 0;
|
|
25812
|
+
function preferenceId(prefix) {
|
|
25813
|
+
nextPreferenceId += 1;
|
|
25814
|
+
return `codexhost-${prefix}-${nextPreferenceId}`;
|
|
25815
|
+
}
|
|
25816
|
+
function createPreferenceGroup(document2, title) {
|
|
25817
|
+
const group = document2.createElement("section");
|
|
25818
|
+
group.className = "mt-7 first-of-type:mt-0";
|
|
25819
|
+
const header = document2.createElement("div");
|
|
25820
|
+
header.className = "mb-2 flex min-h-6 items-center gap-2 px-1";
|
|
25821
|
+
const heading = document2.createElement("h3");
|
|
25822
|
+
heading.id = preferenceId("preference-group");
|
|
25823
|
+
heading.className = "m-0 text-[13px] leading-5 font-semibold text-settings-text";
|
|
25824
|
+
heading.textContent = title;
|
|
25825
|
+
header.append(heading);
|
|
25826
|
+
const card = document2.createElement("div");
|
|
25827
|
+
card.className = "rounded-[10px] border border-settings-border bg-settings-panel";
|
|
25828
|
+
group.setAttribute("aria-labelledby", heading.id);
|
|
25829
|
+
group.append(header, card);
|
|
25830
|
+
return { group, header, card };
|
|
25831
|
+
}
|
|
25832
|
+
function createPreferenceItem(document2, input) {
|
|
25833
|
+
const item = document2.createElement("div");
|
|
25834
|
+
item.className = "flex min-h-[60px] items-center justify-between gap-6 border-t border-settings-divider px-4 py-3 first:border-t-0";
|
|
25835
|
+
const copy = document2.createElement("div");
|
|
25836
|
+
copy.className = "flex min-w-0 flex-col gap-0.5";
|
|
25837
|
+
const heading = document2.createElement("div");
|
|
25838
|
+
heading.className = "flex items-center gap-1.5";
|
|
25839
|
+
const title = document2.createElement("label");
|
|
25840
|
+
title.htmlFor = input.controlId;
|
|
25841
|
+
title.className = "cursor-pointer text-[13px] leading-5 font-medium text-settings-text";
|
|
25842
|
+
title.textContent = input.title;
|
|
25843
|
+
heading.append(title);
|
|
25844
|
+
if (input.help) heading.append(createHelpTooltip(document2, input.help.label, input.help.lines));
|
|
25845
|
+
const description = document2.createElement("div");
|
|
25846
|
+
description.id = preferenceId("preference-description");
|
|
25847
|
+
description.className = "text-xs leading-[18px] text-settings-muted data-[invalid=true]:text-settings-danger";
|
|
25848
|
+
description.textContent = input.description;
|
|
25849
|
+
copy.append(heading, description);
|
|
25850
|
+
item.append(copy);
|
|
25851
|
+
return { item, description };
|
|
25852
|
+
}
|
|
25853
|
+
function createHelpTooltip(document2, label, lines) {
|
|
25854
|
+
const wrapper = document2.createElement("span");
|
|
25855
|
+
wrapper.className = "group relative inline-flex";
|
|
25856
|
+
const button = document2.createElement("button");
|
|
25857
|
+
button.type = "button";
|
|
25858
|
+
button.className = "inline-flex size-4 cursor-help items-center justify-center rounded-full border-0 bg-transparent p-0 text-settings-subtle transition-colors hover:text-settings-text focus-visible:text-settings-text focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-settings-focus";
|
|
25859
|
+
button.setAttribute("aria-label", label);
|
|
25860
|
+
button.append(createRendererSettingsIcon("help", 14));
|
|
25861
|
+
const tooltip = document2.createElement("div");
|
|
25862
|
+
tooltip.id = preferenceId("preference-tooltip");
|
|
25863
|
+
tooltip.setAttribute("role", "tooltip");
|
|
25864
|
+
tooltip.className = "pointer-events-none invisible absolute top-full left-0 z-20 mt-2 w-80 rounded-lg border border-settings-border bg-settings-panel px-3 py-2.5 text-xs leading-[18px] font-normal text-settings-text opacity-0 shadow-[0_10px_30px_rgb(0_0_0/0.22)] transition-opacity duration-150 group-hover:visible group-hover:opacity-100 group-focus-within:visible group-focus-within:opacity-100";
|
|
25865
|
+
const list = document2.createElement("ul");
|
|
25866
|
+
list.className = "m-0 grid list-disc gap-1 pl-4 marker:text-settings-subtle";
|
|
25867
|
+
for (const line of lines) {
|
|
25868
|
+
const item = document2.createElement("li");
|
|
25869
|
+
item.textContent = line;
|
|
25870
|
+
list.append(item);
|
|
25871
|
+
}
|
|
25872
|
+
tooltip.append(list);
|
|
25873
|
+
button.setAttribute("aria-describedby", tooltip.id);
|
|
25874
|
+
button.addEventListener("keydown", (event) => {
|
|
25875
|
+
if (event.key === "Escape") button.blur();
|
|
25876
|
+
});
|
|
25877
|
+
wrapper.append(button, tooltip);
|
|
25878
|
+
return wrapper;
|
|
25879
|
+
}
|
|
25880
|
+
function createPreferenceSwitch(document2, id, describedBy) {
|
|
25881
|
+
const input = document2.createElement("input");
|
|
25882
|
+
input.type = "checkbox";
|
|
25883
|
+
input.id = id;
|
|
25884
|
+
input.setAttribute("role", "switch");
|
|
25885
|
+
input.setAttribute("aria-describedby", describedBy);
|
|
25886
|
+
input.className = "relative m-0 h-5 w-9 shrink-0 cursor-pointer appearance-none rounded-full bg-settings-surface-hover ring-1 ring-settings-border transition-colors ring-inset before:absolute before:top-0.5 before:left-0.5 before:size-4 before:rounded-full before:bg-white before:shadow-[0_1px_2px_rgb(0_0_0/0.3)] before:transition-transform checked:bg-settings-focus checked:ring-transparent checked:before:translate-x-4 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-settings-focus";
|
|
25887
|
+
return input;
|
|
25888
|
+
}
|
|
25889
|
+
function createNumberField(document2, input) {
|
|
25890
|
+
const field = document2.createElement("div");
|
|
25891
|
+
field.className = "flex h-8 shrink-0 items-center gap-1.5 rounded-md border border-settings-border bg-settings-surface px-2.5 transition-colors focus-within:border-settings-focus data-[invalid=true]:border-settings-danger";
|
|
25892
|
+
const control = document2.createElement("input");
|
|
25893
|
+
control.type = "number";
|
|
25894
|
+
control.id = input.id;
|
|
25895
|
+
control.min = String(input.min);
|
|
25896
|
+
control.max = String(input.max);
|
|
25897
|
+
control.step = "1";
|
|
25898
|
+
control.setAttribute("aria-describedby", input.describedBy);
|
|
25899
|
+
control.className = "w-14 border-0 bg-transparent p-0 text-right text-[13px] leading-5 text-settings-text tabular-nums outline-none";
|
|
25900
|
+
const unit = document2.createElement("span");
|
|
25901
|
+
unit.className = "text-xs text-settings-muted";
|
|
25902
|
+
unit.setAttribute("aria-hidden", "true");
|
|
25903
|
+
unit.textContent = input.unit;
|
|
25904
|
+
field.append(control, unit);
|
|
25905
|
+
return { field, control };
|
|
25906
|
+
}
|
|
25907
|
+
|
|
25908
|
+
// src/settings/idle-release-controls.ts
|
|
25909
|
+
function mountIdleReleaseControls(context, messages, getLoadedSessionsClient) {
|
|
25910
|
+
const { content } = context;
|
|
25911
|
+
const document2 = content.ownerDocument;
|
|
25912
|
+
const owner = document2.defaultView;
|
|
25913
|
+
if (!owner) return () => void 0;
|
|
25914
|
+
const { group, header, card } = createPreferenceGroup(document2, messages.idleReleaseSection);
|
|
25915
|
+
const status = document2.createElement("div");
|
|
25916
|
+
status.className = "group/status ml-auto inline-flex items-center gap-1.5 text-xs leading-[18px] text-settings-muted data-[state=failed]:text-settings-danger data-[state=unavailable]:text-settings-warning";
|
|
25917
|
+
const statusDot = document2.createElement("span");
|
|
25918
|
+
statusDot.setAttribute("aria-hidden", "true");
|
|
25919
|
+
statusDot.className = "size-1.5 shrink-0 rounded-full bg-settings-subtle group-data-[state=failed]/status:bg-settings-danger group-data-[state=unavailable]/status:bg-settings-warning";
|
|
25920
|
+
const statusText = document2.createElement("span");
|
|
25921
|
+
statusText.setAttribute("role", "status");
|
|
25922
|
+
status.append(statusDot, statusText);
|
|
25923
|
+
header.append(status);
|
|
25924
|
+
const enabledId = preferenceId("idle-release-enabled");
|
|
25925
|
+
const toggle = createPreferenceItem(document2, {
|
|
25926
|
+
title: messages.idleReleaseTitle,
|
|
25927
|
+
description: messages.idleReleaseDescription,
|
|
25928
|
+
controlId: enabledId,
|
|
25929
|
+
help: { label: messages.idleReleaseHelpLabel, lines: messages.idleReleaseHelp }
|
|
25930
|
+
});
|
|
25931
|
+
const enabled = createPreferenceSwitch(document2, enabledId, toggle.description.id);
|
|
25932
|
+
toggle.item.append(enabled);
|
|
25933
|
+
const minutesId = preferenceId("idle-release-minutes");
|
|
25934
|
+
const timeout = createPreferenceItem(document2, {
|
|
25935
|
+
title: messages.idleReleaseTimeout,
|
|
25936
|
+
description: messages.idleReleaseTimeoutDescription,
|
|
25937
|
+
controlId: minutesId
|
|
25938
|
+
});
|
|
25939
|
+
const { field, control: minutes } = createNumberField(document2, {
|
|
25940
|
+
id: minutesId,
|
|
25941
|
+
describedBy: timeout.description.id,
|
|
25942
|
+
unit: messages.idleReleaseMinutes,
|
|
25943
|
+
min: IDLE_RELEASE_TIMEOUT_MINUTES_MIN,
|
|
25944
|
+
max: IDLE_RELEASE_TIMEOUT_MINUTES_MAX
|
|
25945
|
+
});
|
|
25946
|
+
timeout.item.append(field);
|
|
25947
|
+
timeout.item.id = preferenceId("idle-release-timeout");
|
|
25948
|
+
enabled.setAttribute("aria-controls", timeout.item.id);
|
|
25949
|
+
card.append(toggle.item, timeout.item);
|
|
25950
|
+
content.append(group);
|
|
25951
|
+
const disposeTable = mountLoadedSessionsTable(
|
|
25952
|
+
{ ...context, content: card },
|
|
25953
|
+
messages,
|
|
25954
|
+
getLoadedSessionsClient
|
|
25955
|
+
);
|
|
25956
|
+
const statusMessages = {
|
|
25957
|
+
pending: messages.idleReleasePending,
|
|
25958
|
+
unavailable: messages.idleReleaseUnavailable,
|
|
25959
|
+
failed: messages.idleReleaseFailed
|
|
25960
|
+
};
|
|
25961
|
+
const showStatus = (value) => {
|
|
25962
|
+
status.dataset.state = value;
|
|
25963
|
+
status.hidden = value === "applied";
|
|
25964
|
+
statusText.textContent = value === "applied" ? "" : statusMessages[value];
|
|
25965
|
+
};
|
|
25966
|
+
const setInvalid = (invalid) => {
|
|
25967
|
+
field.dataset.invalid = String(invalid);
|
|
25968
|
+
timeout.description.dataset.invalid = String(invalid);
|
|
25969
|
+
timeout.description.textContent = invalid ? messages.idleReleaseInvalid : messages.idleReleaseTimeoutDescription;
|
|
25970
|
+
minutes.setAttribute("aria-invalid", String(invalid));
|
|
25971
|
+
minutes.setCustomValidity(invalid ? messages.idleReleaseInvalid : "");
|
|
25972
|
+
};
|
|
25973
|
+
const sync = () => {
|
|
25974
|
+
const settings = readIdleReleasePreference(owner);
|
|
25975
|
+
enabled.checked = settings.enabled;
|
|
25976
|
+
timeout.item.hidden = !settings.enabled;
|
|
25977
|
+
if (!settings.enabled && minutes.getAttribute("aria-invalid") === "true") setInvalid(false);
|
|
25978
|
+
if (minutes.getAttribute("aria-invalid") !== "true") {
|
|
25979
|
+
minutes.value = String(settings.timeoutMinutes);
|
|
25980
|
+
}
|
|
25981
|
+
};
|
|
25982
|
+
const save = (settings) => {
|
|
25983
|
+
if (writeIdleReleasePreference(owner, settings)) return;
|
|
25984
|
+
sync();
|
|
25985
|
+
showStatus("failed");
|
|
25986
|
+
};
|
|
25987
|
+
enabled.addEventListener("change", () => {
|
|
25988
|
+
save({ ...readIdleReleasePreference(owner), enabled: enabled.checked });
|
|
25989
|
+
});
|
|
25990
|
+
minutes.addEventListener("change", () => {
|
|
25991
|
+
const parsed = idleReleaseSettingsSchema.safeParse({
|
|
25992
|
+
enabled: readIdleReleasePreference(owner).enabled,
|
|
25993
|
+
timeoutMinutes: minutes.valueAsNumber
|
|
25994
|
+
});
|
|
25995
|
+
setInvalid(!parsed.success);
|
|
25996
|
+
if (parsed.success) save(parsed.data);
|
|
25997
|
+
});
|
|
25998
|
+
minutes.addEventListener("input", () => {
|
|
25999
|
+
if (minutes.getAttribute("aria-invalid") === "true") setInvalid(false);
|
|
26000
|
+
});
|
|
26001
|
+
const storage = (event) => {
|
|
26002
|
+
if (event.key === IDLE_RELEASE_STORAGE_KEY || event.key === null) sync();
|
|
26003
|
+
};
|
|
26004
|
+
const onStatus = (event) => showStatus(event.detail);
|
|
26005
|
+
owner.addEventListener(IDLE_RELEASE_CHANGE_EVENT, sync);
|
|
26006
|
+
owner.addEventListener(IDLE_RELEASE_STATUS_EVENT, onStatus);
|
|
26007
|
+
owner.addEventListener("storage", storage);
|
|
26008
|
+
sync();
|
|
26009
|
+
showStatus("pending");
|
|
26010
|
+
owner.dispatchEvent(new Event(IDLE_RELEASE_CHANGE_EVENT));
|
|
26011
|
+
return () => {
|
|
26012
|
+
disposeTable();
|
|
26013
|
+
owner.removeEventListener(IDLE_RELEASE_CHANGE_EVENT, sync);
|
|
26014
|
+
owner.removeEventListener(IDLE_RELEASE_STATUS_EVENT, onStatus);
|
|
26015
|
+
owner.removeEventListener("storage", storage);
|
|
26016
|
+
};
|
|
26017
|
+
}
|
|
26018
|
+
|
|
25232
26019
|
// src/settings/appearance-page.ts
|
|
25233
|
-
function createAppearanceSettingsPage(messages) {
|
|
26020
|
+
function createAppearanceSettingsPage(messages, getLoadedSessionsClient = () => null) {
|
|
25234
26021
|
return Object.freeze({
|
|
25235
26022
|
id: "appearance",
|
|
25236
26023
|
label: messages.pageLabels.appearance,
|
|
@@ -25245,30 +26032,34 @@ ${error51.stderrTail}`] : []
|
|
|
25245
26032
|
const description = document2.createElement("p");
|
|
25246
26033
|
description.className = "settings-page-description";
|
|
25247
26034
|
description.textContent = messages.appearanceDescription;
|
|
25248
|
-
const
|
|
25249
|
-
|
|
25250
|
-
const
|
|
25251
|
-
|
|
25252
|
-
|
|
25253
|
-
|
|
25254
|
-
|
|
25255
|
-
|
|
25256
|
-
|
|
25257
|
-
|
|
25258
|
-
|
|
25259
|
-
checkbox.className = "settings-preference-checkbox";
|
|
25260
|
-
checkbox.checked = readReasoningTranscriptSoftWrap(ownerWindow);
|
|
25261
|
-
checkbox.setAttribute("aria-label", messages.reasoningSoftWrapTitle);
|
|
25262
|
-
checkbox.addEventListener("change", () => {
|
|
25263
|
-
setReasoningTranscriptSoftWrap(ownerWindow, checkbox.checked);
|
|
26035
|
+
const { group, card } = createPreferenceGroup(document2, messages.appearanceGroup);
|
|
26036
|
+
const softWrapId = preferenceId("reasoning-soft-wrap");
|
|
26037
|
+
const row = createPreferenceItem(document2, {
|
|
26038
|
+
title: messages.reasoningSoftWrapTitle,
|
|
26039
|
+
description: messages.reasoningSoftWrapDescription,
|
|
26040
|
+
controlId: softWrapId
|
|
26041
|
+
});
|
|
26042
|
+
const toggle = createPreferenceSwitch(document2, softWrapId, row.description.id);
|
|
26043
|
+
toggle.checked = readReasoningTranscriptSoftWrap(ownerWindow);
|
|
26044
|
+
toggle.addEventListener("change", () => {
|
|
26045
|
+
setReasoningTranscriptSoftWrap(ownerWindow, toggle.checked);
|
|
25264
26046
|
});
|
|
25265
26047
|
const sync = () => {
|
|
25266
|
-
|
|
26048
|
+
toggle.checked = readReasoningTranscriptSoftWrap(ownerWindow);
|
|
25267
26049
|
};
|
|
25268
26050
|
ownerWindow.addEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, sync);
|
|
25269
|
-
row.append(
|
|
25270
|
-
|
|
25271
|
-
|
|
26051
|
+
row.item.append(toggle);
|
|
26052
|
+
card.append(row.item);
|
|
26053
|
+
context.content.append(heading, description, group);
|
|
26054
|
+
const disposeIdleRelease = mountIdleReleaseControls(
|
|
26055
|
+
context,
|
|
26056
|
+
messages,
|
|
26057
|
+
getLoadedSessionsClient
|
|
26058
|
+
);
|
|
26059
|
+
return () => {
|
|
26060
|
+
ownerWindow.removeEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, sync);
|
|
26061
|
+
disposeIdleRelease();
|
|
26062
|
+
};
|
|
25272
26063
|
}
|
|
25273
26064
|
});
|
|
25274
26065
|
}
|
|
@@ -27057,12 +27848,12 @@ ${error51.stderrTail}`] : []
|
|
|
27057
27848
|
}
|
|
27058
27849
|
});
|
|
27059
27850
|
}
|
|
27060
|
-
function createDefaultRendererSettingsPages(messages = DEFAULT_RENDERER_SETTINGS_MESSAGES, getUpdateClient = () => null, getDiagnostics = () => null, getAccountClient = () => null, getSessionImportClient = () => null, openImportedThread = () => Promise.reject(new Error("Imported Thread navigation is unavailable"))) {
|
|
27851
|
+
function createDefaultRendererSettingsPages(messages = DEFAULT_RENDERER_SETTINGS_MESSAGES, getUpdateClient = () => null, getDiagnostics = () => null, getAccountClient = () => null, getSessionImportClient = () => null, openImportedThread = () => Promise.reject(new Error("Imported Thread navigation is unavailable")), getLoadedSessionsClient = () => null) {
|
|
27061
27852
|
return Object.freeze([
|
|
27062
27853
|
createConnectionsSettingsPage(messages, getDiagnostics),
|
|
27063
27854
|
createAccountsSettingsPage(messages, getAccountClient),
|
|
27064
27855
|
createSessionImportSettingsPage(messages, getSessionImportClient, openImportedThread),
|
|
27065
|
-
createAppearanceSettingsPage(messages),
|
|
27856
|
+
createAppearanceSettingsPage(messages, getLoadedSessionsClient),
|
|
27066
27857
|
createPluginsSettingsPage(messages, getDiagnostics),
|
|
27067
27858
|
updatesPage(messages, getUpdateClient),
|
|
27068
27859
|
aboutPage(messages)
|
|
@@ -27082,70 +27873,2398 @@ ${error51.stderrTail}`] : []
|
|
|
27082
27873
|
}
|
|
27083
27874
|
|
|
27084
27875
|
// src/settings/shell.css
|
|
27085
|
-
var shell_default = ':host {\n /* Inherit Codex Desktop color-scheme; light-dark() tracks the host page. */\n --settings-bg: light-dark(#ffffff, #181818);\n --settings-sidebar: light-dark(#f4f4f5, #1c1c1c);\n --settings-panel: transparent;\n --settings-text: light-dark(#171717, #f5f5f5);\n --settings-muted: light-dark(#737373, #a1a1a1);\n --settings-subtle: light-dark(#8a8a8a, #777777);\n --settings-border: light-dark(rgb(15 23 42 / 10%), rgb(255 255 255 / 10%));\n --settings-divider: light-dark(rgb(15 23 42 / 10%), rgb(255 255 255 / 10%));\n --settings-hover: light-dark(rgb(15 23 42 / 5%), rgb(255 255 255 / 6%));\n --settings-active: light-dark(rgb(51 156 255 / 14%), rgb(51 156 255 / 12%));\n --settings-focus: #339cff;\n --settings-elevated: light-dark(#ffffff, #2c2c2e);\n --settings-inset: light-dark(rgb(15 23 42 / 4%), rgb(0 0 0 / 18%));\n --settings-surface: light-dark(rgb(15 23 42 / 3%), rgb(255 255 255 / 2%));\n --settings-surface-strong: light-dark(rgb(15 23 42 / 6%), rgb(255 255 255 / 6%));\n --settings-surface-hover: light-dark(#eeeeee, #303030);\n --settings-mark: light-dark(#52525b, #d4d8de);\n --settings-dialog-shadow: light-dark(\n 0 24px 64px rgb(15 23 42 / 16%),\n 0 24px 64px rgb(0 0 0 / 38%)\n );\n --settings-backdrop: light-dark(rgb(15 23 42 / 28%), rgb(0 0 0 / 52%));\n --settings-segmented-shadow:\n 0 0 0 0.5px light-dark(rgb(15 23 42 / 6%), rgb(0 0 0 / 4%)),\n 0 3px 1px 0 light-dark(rgb(15 23 42 / 4%), rgb(0 0 0 / 4%)),\n 0 3px 8px 0 light-dark(rgb(15 23 42 / 10%), rgb(0 0 0 / 12%));\n --settings-primary: light-dark(#171717, #f4f4f4);\n --settings-primary-hover: light-dark(#2f2f2f, #ffffff);\n --settings-primary-text: light-dark(#ffffff, #171717);\n --settings-warning: light-dark(#8a5500, #f5c96a);\n --settings-warning-bg: light-dark(#fff8e6, rgb(245 201 106 / 8%));\n --settings-warning-border: light-dark(#ead8a8, rgb(245 201 106 / 24%));\n --settings-danger: light-dark(#b42318, #f87171);\n --settings-danger-bg: light-dark(#fff1f0, rgb(239 68 68 / 8%));\n --settings-danger-border: light-dark(#f3c7c3, rgb(239 68 68 / 22%));\n --settings-success: light-dark(#16784a, #4ade80);\n --settings-dialog-max-width: 1120px;\n --settings-dialog-max-height: 780px;\n --settings-dialog-inset: max(52px, env(titlebar-area-height, 0px));\n color: var(--settings-text);\n color-scheme: inherit;\n font:\n 13px/1.5 system-ui,\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n sans-serif;\n letter-spacing: 0;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n letter-spacing: 0;\n}\n\nbutton,\ninput,\nselect {\n font: inherit;\n}\n\nbutton {\n color: inherit;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.codexhost-settings-dialog {\n width: min(var(--settings-dialog-max-width), calc(100vw - 2 * var(--settings-dialog-inset)));\n height: min(var(--settings-dialog-max-height), calc(100vh - 2 * var(--settings-dialog-inset)));\n max-width: none;\n max-height: none;\n margin: auto;\n padding: 0;\n overflow: hidden;\n color: var(--settings-text);\n background: var(--settings-bg);\n border: 1px solid var(--settings-border);\n border-radius: 12px;\n box-shadow: var(--settings-dialog-shadow);\n}\n\n.codexhost-settings-dialog::backdrop {\n background: var(--settings-backdrop);\n}\n\n.settings-frame,\n.settings-layout {\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n}\n\n.settings-frame {\n display: flex;\n flex-direction: column;\n}\n\n.settings-layout {\n flex: 1;\n display: grid;\n grid-template-columns: 184px minmax(0, 1fr);\n background: var(--settings-bg);\n}\n\n.settings-sidebar {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n overflow: hidden;\n background: var(--settings-sidebar);\n border-right: 1px solid var(--settings-border);\n padding-top: 14px;\n}\n\n.settings-header {\n display: flex;\n align-items: center;\n min-width: 0;\n height: 48px;\n flex: none;\n padding: 0 12px;\n border-bottom: 1px solid var(--settings-border);\n}\n\n.settings-header-actions {\n display: flex;\n align-items: center;\n flex: none;\n gap: 12px;\n margin-left: auto;\n}\n\n.settings-brand {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 7px;\n}\n\n.settings-brand__mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n flex: none;\n color: var(--settings-text);\n}\n\n.settings-brand__mark .codexhost-settings-icon {\n width: 24px;\n height: 24px;\n object-fit: contain;\n}\n\n.settings-brand__copy {\n display: flex;\n min-width: 0;\n align-items: baseline;\n gap: 0;\n line-height: 20px;\n}\n\n.settings-brand__name {\n overflow: hidden;\n color: var(--settings-text);\n font-size: 13px;\n font-weight: 600;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-brand__title {\n margin-left: 8px;\n padding-left: 8px;\n color: var(--settings-muted);\n font-size: 13px;\n font-weight: 400;\n border-left: 1px solid var(--settings-border);\n}\n\n.settings-nav {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex: 1;\n flex-direction: column;\n gap: 2px;\n padding: 0 7px 10px;\n overflow-y: auto;\n}\n\n.settings-nav-section-label {\n min-height: 28px;\n padding: 7px 9px 3px 4px;\n color: var(--settings-muted);\n font-size: 12px;\n font-weight: 600;\n line-height: 18px;\n}\n\n.settings-nav-section-label:not(:first-child) {\n margin-top: 8px;\n}\n\n.settings-nav-button {\n display: grid;\n grid-template-columns: 16px minmax(0, 1fr);\n align-items: center;\n width: 100%;\n position: relative;\n min-height: 34px;\n flex: none;\n gap: 9px;\n padding: 6px 9px;\n color: var(--settings-text);\n font-size: 14px;\n font-weight: 600;\n line-height: 21px;\n text-align: left;\n background: transparent;\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n}\n\n.settings-nav-button .codexhost-settings-icon {\n width: 16px;\n height: 16px;\n opacity: 0.9;\n}\n\n.settings-nav-button:hover {\n background: var(--settings-hover);\n}\n\n.settings-nav-button[aria-current="page"] {\n background: var(--settings-active);\n color: var(--settings-text);\n font-weight: 500;\n}\n\n.settings-nav-button span {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-icon-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n flex: none;\n padding: 0;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n}\n\n.settings-icon-button:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-icon-button:focus-visible,\n.settings-nav-button:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 1px;\n}\n\n.settings-page {\n display: block;\n position: relative;\n min-width: 0;\n min-height: 0;\n overflow-y: auto;\n background: var(--settings-bg);\n scrollbar-gutter: stable;\n}\n\n.settings-page__content {\n width: min(930px, calc(100% - 80px));\n margin-inline: auto;\n}\n\n.settings-page__content {\n min-width: 0;\n padding: 28px 0 36px;\n}\n\n.settings-section-label {\n min-height: auto;\n padding: 0 0 28px;\n color: var(--settings-text);\n font-size: 18px;\n font-weight: 600;\n line-height: 26px;\n}\n\n.settings-status-list,\n.settings-empty {\n overflow: hidden;\n background: var(--settings-panel);\n}\n\n.settings-status-row {\n display: grid;\n grid-template-columns: minmax(170px, 1fr) auto minmax(280px, 1.45fr);\n position: relative;\n align-items: center;\n min-height: 72px;\n gap: 20px;\n padding: 12px 0;\n}\n\n.settings-status-row:not(:last-child)::after {\n content: "";\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 1px;\n background: var(--settings-divider);\n}\n\n.settings-status-row__identity {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n color: var(--settings-text);\n gap: 10px;\n font-size: 14px;\n font-weight: 500;\n line-height: 22px;\n}\n\n.settings-status-row__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n flex: none;\n color: var(--settings-muted);\n background: var(--settings-surface-strong);\n border-radius: 50%;\n}\n\n.settings-status-badge {\n flex: none;\n padding: 3px 8px;\n color: var(--settings-muted);\n font-size: 11px;\n font-weight: 500;\n line-height: 18px;\n background: var(--settings-surface-strong);\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n}\n\n.settings-status-row__detail {\n min-width: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-page-description {\n max-width: 760px;\n margin: -10px 0 20px;\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-session-import-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 24px;\n}\n\n.settings-session-import-header .settings-section-label {\n min-width: 0;\n}\n\n.settings-session-import-harness {\n display: flex;\n min-width: 0;\n margin: 0 0 16px;\n}\n\n.settings-session-import-harness__options {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n width: fit-content;\n max-width: 100%;\n gap: 8px;\n}\n\n.settings-session-import-harness__option {\n min-height: 32px;\n flex: none;\n padding: 6px 10px;\n color: var(--settings-muted);\n font: inherit;\n font-size: 12px;\n white-space: nowrap;\n background: transparent;\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n cursor: pointer;\n}\n\n.settings-session-import-harness__option[aria-pressed="true"] {\n color: var(--settings-text);\n background: var(--settings-active);\n border-color: rgb(51 156 255 / 50%);\n}\n\n.settings-session-import-harness__option:disabled {\n opacity: 0.38;\n cursor: not-allowed;\n}\n\n.settings-session-import-harness__option:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-session-import-search,\n.settings-session-import-pagination {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 10px;\n}\n\n.settings-session-import-search {\n align-items: stretch;\n margin: 16px 0 0;\n}\n\n.settings-session-import-pagination {\n margin: 16px 0 0;\n}\n\n.settings-session-import-search input {\n flex: 1;\n min-width: 160px;\n}\n\n.settings-session-import-search input,\n.settings-session-import-pagination select {\n box-sizing: border-box;\n color: var(--settings-text);\n background: var(--settings-bg);\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n}\n\n.settings-session-import-search input,\n.settings-session-import-search .settings-command-button {\n box-sizing: border-box;\n height: 36px;\n min-height: 36px;\n padding: 6px 10px;\n border-radius: 6px;\n}\n\n.settings-session-import-pagination select {\n min-height: 28px;\n padding: 2px 8px;\n}\n\n.settings-session-import-search input:focus-visible,\n.settings-session-import-pagination select:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-session-import-pagination {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-session-import-pagination label {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.settings-session-import-pagination > span {\n flex: none;\n min-width: 0;\n}\n\n.settings-session-import-pagination__navigation {\n display: flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.settings-session-import-content,\n.settings-session-import-list {\n display: grid;\n gap: 10px;\n}\n\n.settings-session-import-content {\n margin-top: 16px;\n}\n\n.settings-session-import-status {\n display: flex;\n align-items: center;\n min-height: 0;\n gap: 12px;\n padding: 12px 16px;\n color: var(--settings-muted);\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n.settings-session-import-status.is-error {\n color: #ef4444;\n}\n\n.settings-session-import-recovery {\n display: grid;\n justify-items: start;\n gap: 14px;\n padding: 16px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n.settings-session-import-recovery:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-session-import-recovery__copy {\n display: grid;\n gap: 4px;\n}\n\n.settings-session-import-recovery__copy strong {\n color: var(--settings-text);\n font-size: 14px;\n}\n\n.settings-session-import-recovery__copy p {\n margin: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-session-import-recovery__path {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-width: 0;\n overflow: hidden;\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n}\n\n.settings-session-import-recovery__path code {\n min-width: 0;\n flex: 1;\n padding: 8px 10px;\n overflow-x: auto;\n color: var(--settings-text);\n font-size: 12px;\n line-height: 20px;\n white-space: nowrap;\n}\n\n.settings-session-import-recovery__path .settings-command-button {\n min-height: 0;\n flex: none;\n border-width: 0 0 0 1px;\n border-radius: 0;\n}\n\n.settings-session-import-row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n gap: 20px;\n min-width: 0;\n padding: 16px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n.settings-session-import-row__copy {\n display: grid;\n min-width: 0;\n gap: 4px;\n}\n\n.settings-session-import-row__copy strong {\n overflow: hidden;\n color: var(--settings-text);\n font-size: 14px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-session-import-row__copy span,\n.settings-session-import-row__cwd {\n overflow: hidden;\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-session-import-row__cwd {\n display: block;\n min-width: 0;\n background: transparent;\n}\n\n.settings-session-import-row__action {\n display: flex;\n align-items: flex-end;\n flex-direction: column;\n gap: 8px;\n}\n\n.settings-session-import-running {\n color: var(--settings-muted);\n font-size: 12px;\n}\n\n.settings-preference-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 32px;\n min-height: 88px;\n padding: 18px 0;\n border-top: 1px solid var(--settings-divider);\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-preference-row__copy {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-width: 0;\n gap: 5px;\n}\n\n.settings-preference-row__copy strong {\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 600;\n line-height: 22px;\n}\n\n.settings-preference-row__copy span {\n max-width: 680px;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-preference-switch {\n display: inline-flex;\n align-items: center;\n width: 42px;\n height: 24px;\n flex: none;\n padding: 2px;\n border: 0;\n border-radius: 999px;\n background: var(--settings-surface-strong);\n cursor: pointer;\n transition: background 120ms ease;\n}\n\n.settings-preference-switch[aria-checked="true"] {\n justify-content: flex-end;\n background: var(--settings-focus);\n}\n\n.settings-preference-switch:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-preference-switch__thumb {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--settings-primary-text);\n box-shadow: 0 1px 3px rgb(0 0 0 / 24%);\n}\n\n.settings-preference-checkbox {\n width: 18px;\n height: 18px;\n flex: none;\n margin: 0;\n accent-color: var(--settings-focus);\n cursor: pointer;\n}\n\n.settings-preference-checkbox:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-connection-page-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 18px;\n margin-bottom: 18px;\n}\n\n.settings-connection-page-header .settings-section-label {\n padding-bottom: 0;\n}\n\n.settings-connection-page-header .settings-page-description {\n margin: 8px 0 0;\n}\n\n.settings-connection-page-header .settings-page-description + .settings-page-description {\n margin-top: 8px;\n}\n\n.settings-update-header {\n margin-bottom: 8px;\n}\n\n.settings-connections-content,\n.settings-plugins-content,\n.settings-connection-list,\n.settings-connection-rows {\n min-width: 0;\n}\n\n.settings-connections-content,\n.settings-plugins-content {\n display: grid;\n gap: 12px;\n}\n\n.settings-connection-list {\n overflow: hidden;\n background: var(--settings-surface);\n border: 1px solid var(--settings-border);\n border-radius: 10px;\n}\n\n.settings-segmented {\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n width: fit-content;\n max-width: 100%;\n padding: 2px;\n gap: 3px;\n background: var(--settings-surface-strong);\n border-radius: 10px;\n}\n\n.settings-segmented__item {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 28px;\n padding: 4px 14px;\n color: var(--settings-muted);\n font: inherit;\n font-size: 12px;\n font-weight: 600;\n line-height: 18px;\n white-space: nowrap;\n background: transparent;\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n transition:\n color 0.15s ease,\n background-color 0.15s ease,\n box-shadow 0.15s ease;\n}\n\n.settings-segmented__item:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-segmented__item--selected,\n.settings-segmented__item[aria-selected="true"],\n.settings-segmented__item[aria-pressed="true"] {\n color: var(--settings-text);\n background: var(--settings-elevated);\n box-shadow: var(--settings-segmented-shadow);\n}\n\n.settings-segmented__item:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.settings-segmented__item:disabled:hover {\n color: var(--settings-muted);\n background: transparent;\n}\n\n.settings-segmented__item:focus-visible,\n.settings-connection-row:focus-visible,\n.settings-connection-install-link:focus-visible,\n.settings-connection-view-error:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 1px;\n}\n\n.settings-connection-host-tabs {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 6px;\n overflow-x: auto;\n overflow-y: hidden;\n overscroll-behavior-x: contain;\n scrollbar-width: none;\n scroll-behavior: smooth;\n scroll-snap-type: x proximity;\n touch-action: pan-x;\n}\n\n.settings-connection-host-tabs::-webkit-scrollbar {\n display: none;\n}\n\n.settings-connection-host-tab {\n display: inline-flex;\n align-items: center;\n height: 30px;\n min-width: max-content;\n flex: none;\n padding: 0 9px;\n color: var(--settings-muted);\n font: inherit;\n font-size: 12px;\n line-height: 18px;\n white-space: nowrap;\n background: var(--settings-inset);\n border: 1px solid var(--settings-border);\n border-radius: 7px;\n cursor: pointer;\n scroll-snap-align: start;\n}\n\n.settings-connection-host-tab:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-connection-host-tab[aria-selected="true"] {\n color: var(--settings-text);\n font-weight: 600;\n background: var(--settings-active);\n border-color: var(--settings-border);\n}\n\n.settings-connection-table-header,\n.settings-connection-row {\n display: grid;\n /* Component : Status : Actions = 4 : 3 : 3 */\n grid-template-columns: minmax(0, 4fr) minmax(0, 3fr) minmax(0, 3fr);\n align-items: center;\n min-width: 0;\n column-gap: 16px;\n}\n\n.settings-connection-table-header {\n min-height: 30px;\n padding: 0 10px;\n color: var(--settings-muted);\n font-size: 10px;\n font-weight: 600;\n line-height: 16px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n background: var(--settings-surface);\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-rows > .settings-connection-row,\n.settings-connection-rows > .settings-connection-block {\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-rows > .settings-connection-row:last-child,\n.settings-connection-rows > .settings-connection-block:last-child {\n border-bottom: 0;\n}\n\n.settings-connection-row {\n min-height: 52px;\n padding: 8px 10px;\n cursor: pointer;\n}\n\n.settings-connection-row:hover {\n background: var(--settings-hover);\n}\n\n.settings-connection-row[data-connection-selected="true"] {\n background: var(--settings-surface);\n}\n\n.settings-connection-row__identity,\n.settings-connection-inspector__identity {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n gap: 8px;\n color: var(--settings-text);\n}\n\n.settings-connection-row__identity strong,\n.settings-connection-inspector__identity strong {\n min-width: 0;\n overflow-wrap: anywhere;\n font-size: 12px;\n font-weight: 500;\n line-height: 18px;\n}\n\n.settings-connection-row__mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n flex: none;\n color: var(--settings-mark);\n font-size: 10px;\n font-weight: 700;\n background: var(--settings-surface-strong);\n border-radius: 7px;\n}\n\n.settings-connection-row__mark--logo {\n color: var(--settings-text);\n background: transparent;\n}\n\n.settings-connection-row__mark--logo > img,\n.settings-connection-row__mark--logo > svg {\n display: block;\n max-width: 18px;\n max-height: 18px;\n}\n\n.settings-connection-table-header > :last-child {\n text-align: end;\n}\n\n.settings-connection-row__status {\n display: inline-flex;\n align-items: center;\n width: fit-content;\n max-width: 100%;\n gap: 6px;\n color: var(--settings-muted);\n font-size: 11px;\n font-weight: 500;\n line-height: 18px;\n}\n\n.settings-connection-row__status::before {\n width: 6px;\n height: 6px;\n flex: none;\n content: "";\n background: currentColor;\n border-radius: 50%;\n}\n\n.settings-connection-row__status[data-connection-tone="ready"] {\n color: var(--settings-success);\n}\n\n.settings-connection-row__status[data-connection-tone="checking"] {\n color: var(--settings-warning);\n}\n\n.settings-connection-row__status[data-connection-tone="setup"] {\n color: var(--settings-muted);\n}\n\n.settings-connection-row__status[data-connection-tone="setup"]::before {\n background: transparent;\n border: 1.5px solid currentColor;\n}\n\n.settings-connection-row__status[data-connection-tone="failed"] {\n color: var(--settings-danger);\n}\n\n.settings-connection-row__action {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n min-width: 0;\n gap: 4px;\n}\n\n.settings-connection-row__handle {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 16px;\n color: var(--settings-muted);\n cursor: grab;\n opacity: 0.6;\n}\n\n.settings-connection-row__handle:hover {\n opacity: 1;\n}\n\n.settings-connection-row[draggable="true"] {\n cursor: grab;\n}\n\n.settings-connection-row[data-connection-dragging="true"] {\n opacity: 0.4;\n}\n\n.settings-connection-row[data-connection-drop-indicator="before"] {\n box-shadow: inset 0 2px 0 0 var(--settings-focus);\n}\n\n.settings-connection-row[data-connection-drop-indicator="after"] {\n box-shadow: inset 0 -2px 0 0 var(--settings-focus);\n}\n\n.settings-connection-inline-detail {\n display: grid;\n gap: 12px;\n margin-top: 2px;\n padding: 14px 12px 16px;\n border-top: 1px solid var(--settings-divider);\n background: var(--settings-inset);\n}\n\n.settings-connection-group-divider {\n padding: 10px 12px 6px;\n color: var(--settings-muted);\n font-size: 10px;\n font-weight: 600;\n line-height: 16px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n /* No border-top here: the row immediately above already carries its own\n border-bottom (it is no longer :last-child once this divider follows\n it), so adding one here would double the separator line. */\n}\n\n.settings-connection-group-divider[data-connection-drag-over="true"] {\n color: var(--settings-focus);\n background: rgb(51 156 255 / 8%);\n border-radius: 6px;\n}\n\n.settings-connection-group-more[data-connection-drag-over="true"] {\n background: rgb(51 156 255 / 8%);\n}\n\n.settings-connection-group-hint {\n display: grid;\n gap: 3px;\n margin: 0 12px 12px;\n padding: 14px 16px;\n text-align: center;\n border: 1.5px dashed var(--settings-border);\n border-radius: 10px;\n}\n\n.settings-connection-group-more[data-connection-drag-over="true"] .settings-connection-group-hint {\n border-color: var(--settings-focus);\n}\n\n.settings-connection-group-hint strong {\n color: var(--settings-text);\n font-size: 12.5px;\n font-weight: 500;\n line-height: 18px;\n}\n\n.settings-connection-group-hint span {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 17px;\n}\n\n.settings-connection-group-reset {\n display: flex;\n width: 100%;\n align-items: center;\n gap: 6px;\n padding: 10px 12px;\n color: var(--settings-muted);\n font: inherit;\n font-size: 12px;\n text-align: left;\n background: transparent;\n border: 0;\n border-top: 1px solid var(--settings-divider);\n cursor: pointer;\n}\n\n.settings-connection-group-reset:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-connection-install-link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n padding: 0;\n color: var(--settings-focus);\n font: inherit;\n text-decoration: none;\n background: transparent;\n border: 1px solid transparent;\n border-radius: 7px;\n cursor: pointer;\n}\n\n.settings-connection-install-link:hover,\n.settings-connection-install-link:focus-visible {\n color: var(--settings-focus);\n background: var(--settings-active);\n border-color: var(--settings-border);\n}\n\n.settings-connection-view-error {\n padding: 4px 7px;\n color: var(--settings-danger);\n font: inherit;\n font-size: 11px;\n line-height: 18px;\n background: transparent;\n border: 0;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.settings-connection-view-error:hover {\n color: var(--settings-danger);\n background: var(--settings-danger-bg);\n}\n\n.settings-connection-inspector {\n position: sticky;\n top: 18px;\n}\n\n.settings-connection-inspector__header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n min-width: 0;\n gap: 10px;\n padding: 12px;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-inspector__body {\n display: grid;\n min-width: 0;\n gap: 12px;\n padding: 12px;\n}\n\n.settings-connection-install-callout {\n display: grid;\n grid-template-columns: 28px minmax(0, 1fr);\n gap: 9px;\n padding: 11px;\n background: var(--settings-surface);\n border: 0;\n border-radius: 8px;\n}\n\n.settings-connection-install-callout__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n color: var(--settings-focus);\n background: var(--settings-active);\n border-radius: 7px;\n}\n\n.settings-connection-install-callout strong,\n.settings-connection-error-summary strong,\n.settings-connection-state-summary strong {\n display: block;\n margin: 0 0 4px;\n color: var(--settings-text);\n font-size: 12px;\n font-weight: 500;\n line-height: 18px;\n}\n\n.settings-connection-install-callout p,\n.settings-connection-error-summary p,\n.settings-connection-state-summary p,\n.settings-connection-issue-note {\n margin: 0;\n color: var(--settings-muted);\n font-size: 11px;\n line-height: 16px;\n}\n\n.settings-connection-install-command {\n display: grid;\n gap: 4px;\n margin-top: 8px;\n}\n\n.settings-connection-install-command span {\n color: var(--settings-muted);\n font-size: 10px;\n font-weight: 600;\n line-height: 14px;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n\n.settings-connection-install-command code {\n display: block;\n min-width: 0;\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 11px;\n line-height: 16px;\n white-space: pre-wrap;\n}\n\n.settings-connection-install-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n}\n\n.settings-connection-copy-prompt {\n position: relative;\n}\n\n.settings-connection-copy-prompt__tooltip {\n position: absolute;\n z-index: 4;\n bottom: calc(100% + 6px);\n left: 0;\n width: max-content;\n max-width: min(360px, 72vw);\n max-height: 180px;\n overflow: auto;\n padding: 8px 10px;\n color: var(--settings-text);\n font-size: 11px;\n line-height: 16px;\n white-space: pre-wrap;\n text-align: left;\n background: var(--settings-elevated);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n box-shadow: 0 10px 24px rgb(0 0 0 / 22%);\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n transition: opacity 120ms ease;\n}\n\n.settings-connection-copy-prompt:hover .settings-connection-copy-prompt__tooltip,\n.settings-connection-copy-prompt:focus-within .settings-connection-copy-prompt__tooltip {\n opacity: 1;\n visibility: visible;\n}\n\n.settings-connection-error-summary {\n padding: 13px 14px;\n color: var(--settings-danger);\n background: var(--settings-danger-bg);\n border: 1px solid var(--settings-danger-border);\n border-radius: 10px;\n}\n\n.settings-connection-error-metadata {\n display: grid;\n gap: 7px;\n padding: 12px;\n background: var(--settings-inset);\n border: 1px solid var(--settings-border);\n border-radius: 9px;\n}\n\n.settings-connection-detail-line {\n display: grid;\n grid-template-columns: 92px minmax(0, 1fr);\n gap: 10px;\n min-width: 0;\n color: var(--settings-muted);\n font-size: 10px;\n line-height: 16px;\n}\n\n.settings-connection-detail-line code {\n min-width: 0;\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n white-space: pre-wrap;\n}\n\n.settings-connection-error-log-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n}\n\n.settings-connection-error-log-header strong {\n color: var(--settings-text);\n font-size: 11px;\n font-weight: 600;\n}\n\n.settings-connection-error-log-header .settings-command-button {\n min-height: 30px;\n padding: 5px 9px;\n font-size: 11px;\n}\n\n.settings-connection-stderr {\n max-height: 220px;\n min-width: 0;\n margin: 0;\n padding: 11px;\n overflow: auto;\n color: var(--settings-text);\n font:\n 10px/16px ui-monospace,\n "SFMono-Regular",\n Consolas,\n "Liberation Mono",\n monospace;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n background: var(--settings-inset);\n border: 1px solid var(--settings-border);\n border-radius: 9px;\n}\n\n.settings-connection-error-actions {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: 8px;\n}\n\n.settings-connection-error-actions .settings-command-button {\n width: 100%;\n}\n\n.settings-connection-issue-note {\n margin-top: -4px;\n}\n\n.settings-connection-state-summary {\n padding: 14px;\n background: var(--settings-surface);\n border: 1px solid var(--settings-border);\n border-radius: 10px;\n}\n\n.settings-empty {\n display: flex;\n align-items: center;\n min-height: 72px;\n padding: 12px 16px;\n}\n\n.settings-empty > div {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n\n.settings-empty strong {\n color: var(--settings-text);\n font-size: 13px;\n font-weight: 500;\n line-height: 19px;\n}\n\n.settings-empty span {\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 19px;\n}\n\n.settings-about-page {\n display: flex;\n flex-direction: column;\n gap: 18px;\n box-sizing: border-box;\n min-height: min(620px, calc(100vh - 200px));\n max-width: 720px;\n}\n\n.settings-about-page > .settings-section-label {\n padding-bottom: 10px;\n}\n\n.settings-about-panel {\n display: grid;\n gap: 18px;\n padding: 24px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 12px;\n}\n\n.settings-about-product {\n color: var(--settings-text);\n font-size: 24px;\n font-weight: 700;\n line-height: 32px;\n}\n\n.settings-about-tagline {\n color: var(--settings-text);\n font-size: 16px;\n font-weight: 600;\n line-height: 24px;\n}\n\n.settings-about-copy {\n display: grid;\n max-width: 660px;\n gap: 12px;\n}\n\n.settings-about-lead,\n.settings-about-extension,\n.settings-about-closing p,\n.settings-about-copy p {\n margin: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 21px;\n}\n\n.settings-about-lead {\n color: var(--settings-text);\n font-weight: 500;\n}\n\n.settings-about-agents {\n display: grid;\n gap: 10px;\n margin: 2px 0;\n padding: 0;\n list-style: none;\n}\n\n.settings-about-agent {\n display: grid;\n gap: 4px;\n padding-left: 2px;\n}\n\n.settings-about-agent-name {\n color: var(--settings-text);\n font-size: 13px;\n font-weight: 600;\n line-height: 18px;\n}\n\n.settings-about-agent-name::before {\n content: "\xB7 ";\n color: var(--settings-muted);\n font-weight: 600;\n}\n\n.settings-about-agent-description {\n display: block;\n padding-left: 0.85em;\n color: var(--settings-muted);\n font-size: 12px;\n font-weight: 400;\n line-height: 18px;\n}\n\n.settings-about-closing {\n display: grid;\n gap: 8px;\n}\n\n.settings-about-repository {\n gap: 10px;\n}\n\n.settings-about-open-source {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 0.35em;\n margin: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 21px;\n}\n\n.settings-about-repository p {\n margin: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 21px;\n}\n\n.settings-about-star-callout {\n margin: 4px 0 0;\n color: var(--settings-warning);\n font-size: 14px;\n font-weight: 600;\n line-height: 22px;\n}\n\n.settings-about-repository-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: #7cb8ff;\n font-weight: 600;\n line-height: 1;\n text-decoration: none;\n}\n\n.settings-about-repository-link .codexhost-settings-icon {\n display: block;\n flex: none;\n}\n\n.settings-about-repository-link:hover {\n text-decoration: underline;\n}\n\n.settings-about-brand {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n margin-top: auto;\n padding-top: 12px;\n color: inherit;\n opacity: 0.9;\n text-decoration: none;\n transition: opacity 160ms ease;\n}\n\n.settings-about-brand:hover {\n opacity: 1;\n}\n\n.settings-about-brand-video {\n width: 40px;\n height: 40px;\n flex: none;\n overflow: hidden;\n object-fit: cover;\n border-radius: 999px;\n box-shadow: 0 1px 2px rgb(0 0 0 / 18%);\n}\n\n.settings-about-brand-copy {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n}\n\n.settings-about-brand-name {\n color: var(--settings-text);\n font-size: 14px;\n font-weight: 800;\n letter-spacing: 0.18em;\n line-height: 18px;\n}\n\n.settings-about-brand-tagline {\n color: var(--settings-muted);\n font-size: 12px;\n font-weight: 500;\n letter-spacing: 0.18em;\n line-height: 16px;\n}\n\n.settings-page-error {\n padding: 16px;\n color: var(--settings-text);\n font-size: 13px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 20px;\n}\n\n.settings-update-metadata {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: 24px;\n margin-bottom: 24px;\n padding: 0 0 20px;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-update-metadata__item {\n display: grid;\n min-width: 0;\n gap: 4px;\n}\n\n.settings-update-metadata__item span {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-metadata__item strong {\n min-width: 0;\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 500;\n line-height: 22px;\n}\n\n/* The only emphasis on this screen: a latest version newer than the installed one. */\n.settings-update-metadata__value--newer {\n color: var(--settings-focus);\n}\n\n.settings-update-panel {\n display: grid;\n gap: 12px;\n padding: 20px;\n color: var(--settings-text);\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n/* Soft status copy and the Update action should not sit in a framed card. */\n.settings-update-panel[data-update-state="unavailable"],\n.settings-update-panel[data-update-state="failed"],\n.settings-update-panel[data-update-state="error"],\n.settings-update-panel[data-update-state="available"] {\n padding: 4px 0 0;\n border: 0;\n border-radius: 0;\n}\n\n.settings-update-panel__status-row {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n min-width: 0;\n}\n\n.settings-update-panel__status-row .settings-update-actions {\n flex: none;\n}\n\n.settings-update-panel__status-row .settings-update-panel__head {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.settings-update-panel__head {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 8px;\n}\n\n.settings-update-panel__head .codexhost-settings-icon {\n color: var(--settings-muted);\n}\n\n.settings-update-panel[data-update-state="available"]\n .settings-update-panel__head\n .codexhost-settings-icon,\n.settings-update-panel[data-update-state="downloading"]\n .settings-update-panel__head\n .codexhost-settings-icon,\n.settings-update-panel[data-update-state="installing"]\n .settings-update-panel__head\n .codexhost-settings-icon,\n.settings-update-panel[data-update-state="restarting"]\n .settings-update-panel__head\n .codexhost-settings-icon {\n color: var(--settings-focus);\n}\n\n.settings-update-panel[data-update-state="current"]\n .settings-update-panel__head\n .codexhost-settings-icon {\n color: var(--settings-success);\n}\n\n.settings-update-panel[data-update-state="failed"]\n .settings-update-panel__head\n .codexhost-settings-icon,\n.settings-update-panel[data-update-state="error"]\n .settings-update-panel__head\n .codexhost-settings-icon {\n color: var(--settings-danger);\n}\n\n.settings-update-panel[data-update-state="unavailable"]\n .settings-update-panel__head\n .codexhost-settings-icon {\n color: var(--settings-muted);\n}\n\n.settings-update-panel__title {\n min-width: 0;\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-size: 14px;\n font-weight: 600;\n line-height: 22px;\n}\n\n.settings-update-summary,\n.settings-update-error {\n margin: 0;\n overflow-wrap: anywhere;\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-update-summary {\n color: var(--settings-muted);\n}\n\n.settings-update-error {\n color: var(--settings-danger);\n}\n\n.settings-update-progress {\n width: 100%;\n height: 8px;\n accent-color: var(--settings-focus);\n}\n\n.settings-update-progress-detail {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n/* Release notes scroll with the page; a scroller inside a scroller traps the wheel. */\n.settings-update-notes-section {\n min-width: 0;\n margin-top: 24px;\n padding-top: 24px;\n border-top: 1px solid var(--settings-divider);\n}\n\n.settings-update-notes-section:empty {\n display: none;\n}\n\n.settings-update-notes {\n display: grid;\n min-width: 0;\n gap: 12px;\n color: var(--settings-muted);\n font-size: 14px;\n line-height: 22px;\n overflow-wrap: anywhere;\n}\n\n.settings-update-notes > :first-child {\n margin-top: 0;\n}\n\n.settings-update-notes > :last-child {\n margin-bottom: 0;\n}\n\n.settings-update-notes h1,\n.settings-update-notes h2,\n.settings-update-notes h3,\n.settings-update-notes h4,\n.settings-update-notes h5,\n.settings-update-notes h6 {\n margin: 6px 0 0;\n color: var(--settings-text);\n font-weight: 600;\n}\n\n.settings-update-notes h1 {\n font-size: 18px;\n line-height: 26px;\n}\n\n.settings-update-notes h2 {\n font-size: 17px;\n line-height: 24px;\n}\n\n.settings-update-notes h3,\n.settings-update-notes h4,\n.settings-update-notes h5,\n.settings-update-notes h6 {\n font-size: 14px;\n line-height: 22px;\n}\n\n.settings-update-notes p,\n.settings-update-notes ul,\n.settings-update-notes ol,\n.settings-update-notes pre,\n.settings-update-notes blockquote {\n margin: 0;\n}\n\n.settings-update-notes ul,\n.settings-update-notes ol {\n padding-left: 24px;\n}\n\n.settings-update-notes li {\n padding-left: 4px;\n}\n\n.settings-update-notes li::marker {\n color: var(--settings-muted);\n font-size: 0.85em;\n}\n\n.settings-update-notes li + li {\n margin-top: 14px;\n}\n\n.settings-update-notes .release-note-translation {\n display: block;\n margin-top: 3px;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-update-notes blockquote {\n padding: 8px 12px;\n color: var(--settings-muted);\n border-left: 3px solid var(--settings-focus);\n background: var(--settings-surface);\n}\n\n.settings-update-notes hr {\n width: 100%;\n margin: 2px 0;\n border: 0;\n border-top: 1px solid var(--settings-divider);\n}\n\n.settings-update-notes strong {\n color: var(--settings-text);\n font-weight: 600;\n}\n\n.settings-update-notes a {\n color: var(--settings-focus);\n text-decoration: none;\n}\n\n.settings-update-notes a:hover {\n text-decoration: underline;\n}\n\n.settings-update-notes code {\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 12px;\n}\n\n.settings-update-notes :not(pre) > code {\n padding: 1px 5px;\n background: var(--settings-surface-strong);\n border-radius: 4px;\n}\n\n.settings-update-notes pre {\n min-width: 0;\n max-width: 100%;\n padding: 10px 12px;\n overflow-x: auto;\n overflow-y: hidden;\n background: var(--settings-inset);\n border-radius: 6px;\n}\n\n.settings-update-notes pre code {\n line-height: 18px;\n white-space: pre-wrap;\n}\n\n/* Manual update sits directly under the status panel, not behind a disclosure:\n automatic updates can fail for machine-local reasons and this is the way out. */\n.settings-update-controls {\n display: grid;\n min-width: 0;\n gap: 10px;\n margin-top: 24px;\n}\n\n.settings-update-manual-title {\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 600;\n line-height: 22px;\n}\n\n.settings-update-manual {\n display: grid;\n min-width: 0;\n gap: 8px;\n}\n\n.settings-update-manual[hidden] {\n display: none;\n}\n\n.settings-update-manual-description {\n margin: 0;\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-manual-description.is-fallback {\n color: var(--settings-danger);\n}\n\n.settings-update-command {\n display: flex;\n align-items: stretch;\n min-width: 0;\n overflow: hidden;\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n}\n\n.settings-update-command code {\n min-width: 0;\n flex: 1;\n padding: 9px 12px;\n overflow-x: auto;\n color: var(--settings-text);\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 12px;\n line-height: 20px;\n white-space: nowrap;\n}\n\n.settings-update-command__copy {\n display: inline-flex;\n align-items: center;\n flex: none;\n gap: 6px;\n padding: 0 12px;\n color: var(--settings-muted);\n font-size: 12px;\n background: transparent;\n border: 0;\n border-left: 1px solid var(--settings-border);\n cursor: pointer;\n}\n\n.settings-update-command__copy:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-update-command__copy:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: -2px;\n}\n\n.settings-update-actions {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.settings-command-button,\n.settings-update-link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n width: max-content;\n max-width: 100%;\n min-height: 30px;\n gap: 6px;\n padding: 5px 10px;\n white-space: nowrap;\n color: var(--settings-primary-text);\n font: inherit;\n font-size: 12px;\n text-decoration: none;\n background: var(--settings-primary);\n border: 1px solid var(--settings-primary);\n border-radius: 7px;\n cursor: pointer;\n}\n\n.settings-command-button--secondary,\n.settings-update-link {\n color: var(--settings-muted);\n background: transparent;\n border-color: var(--settings-border);\n}\n\n.settings-command-button--secondary .codexhost-settings-icon,\n.settings-update-link .codexhost-settings-icon {\n color: var(--settings-muted);\n}\n\n.settings-command-button:hover:not(.settings-command-button--secondary) {\n filter: brightness(1.08);\n}\n\n.settings-command-button--danger {\n color: var(--settings-danger);\n}\n\n.settings-command-button--danger:hover:not(:disabled) {\n color: #fecaca;\n background: var(--settings-danger-bg);\n border-color: var(--settings-danger-border);\n}\n\n.settings-command-button--secondary:hover,\n.settings-update-link:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-command-button--secondary:hover .codexhost-settings-icon,\n.settings-update-link:hover .codexhost-settings-icon {\n color: var(--settings-text);\n}\n\n.settings-command-button:disabled,\n.settings-command-button[aria-disabled="true"] {\n opacity: 0.55;\n cursor: not-allowed;\n filter: none;\n}\n\n.settings-command-button:focus-visible,\n.settings-update-link:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.settings-session-import-content {\n display: grid;\n min-width: 0;\n gap: 12px;\n margin-top: 16px;\n}\n\n.settings-session-import-list {\n display: grid;\n min-width: 0;\n overflow: hidden;\n background: var(--settings-surface);\n border: 1px solid var(--settings-border);\n border-radius: 12px;\n}\n\n.settings-session-import-row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n min-width: 0;\n gap: 16px;\n padding: 14px 16px;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-session-import-row:last-child {\n border-bottom: 0;\n}\n\n.settings-session-import-row__copy {\n display: grid;\n min-width: 0;\n gap: 4px;\n}\n\n.settings-session-import-row__copy strong {\n color: var(--settings-text);\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n}\n\n.settings-session-import-row__copy span,\n.settings-session-import-row__cwd {\n min-width: 0;\n overflow-wrap: anywhere;\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-session-import-row__cwd {\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n}\n\n.settings-session-import-row__action {\n display: flex;\n align-items: center;\n flex: none;\n gap: 8px;\n}\n\n.settings-session-import-running {\n color: #f5c542;\n font-size: 12px;\n font-weight: 500;\n line-height: 18px;\n white-space: nowrap;\n}\n\n.settings-session-import-recovery {\n display: grid;\n min-width: 0;\n gap: 12px;\n padding: 16px;\n background: var(--settings-surface);\n border: 1px solid var(--settings-border);\n border-radius: 12px;\n}\n\n.settings-session-import-recovery__copy {\n display: grid;\n gap: 6px;\n}\n\n.settings-session-import-recovery__copy strong {\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 600;\n line-height: 22px;\n}\n\n.settings-session-import-recovery__copy p {\n margin: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-session-import-recovery__path {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 8px;\n}\n\n.settings-session-import-recovery__path code {\n min-width: 0;\n flex: 1;\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 12px;\n line-height: 18px;\n}\n\n.codexhost-settings-icon {\n display: block;\n flex: none;\n stroke: currentColor;\n}\n\n@media (max-width: 720px) {\n .codexhost-settings-dialog {\n border-radius: 10px;\n }\n\n .settings-layout {\n grid-template-columns: minmax(0, 1fr);\n grid-template-rows: auto minmax(0, 1fr);\n }\n\n .settings-sidebar {\n border-right: 0;\n border-bottom: 1px solid var(--settings-border);\n }\n\n .settings-header {\n height: 56px;\n padding-inline: 14px;\n }\n\n .settings-sidebar {\n padding-top: 20px;\n }\n\n .settings-nav {\n flex: none;\n flex-direction: row;\n gap: 4px;\n padding: 7px 8px 8px;\n overflow-x: auto;\n overflow-y: hidden;\n }\n\n .settings-nav-section-label {\n display: none;\n }\n\n .settings-nav-button {\n width: auto;\n min-width: max-content;\n min-height: 34px;\n grid-template-columns: 16px auto;\n border-radius: 10px;\n }\n\n .settings-page__content {\n width: calc(100% - 40px);\n }\n\n .settings-page__content {\n padding-top: 32px;\n padding-bottom: 32px;\n }\n\n .settings-section-label {\n padding-bottom: 20px;\n font-size: 20px;\n line-height: 26px;\n }\n\n .settings-update-metadata {\n grid-template-columns: minmax(0, 1fr);\n gap: 16px;\n }\n\n .settings-status-row {\n grid-template-columns: minmax(0, 1fr) auto;\n gap: 16px;\n }\n\n .settings-connection-page-header {\n flex-direction: column;\n }\n\n .settings-connection-page-header > .settings-command-button {\n width: 100%;\n }\n\n .settings-session-import-row {\n grid-template-columns: minmax(0, 1fr);\n }\n\n .settings-session-import-row__action {\n justify-content: flex-start;\n flex-wrap: wrap;\n }\n\n .settings-status-row__detail {\n grid-column: 1 / -1;\n margin: -8px 0 0 58px;\n }\n}\n\n@media (forced-colors: active) {\n :host,\n :host([data-theme="light"]),\n :host([data-theme="dark"]) {\n --settings-bg: Canvas;\n --settings-sidebar: Canvas;\n --settings-panel: Canvas;\n --settings-surface: Canvas;\n --settings-surface-hover: Highlight;\n --settings-inset: Canvas;\n --settings-text: CanvasText;\n --settings-muted: GrayText;\n --settings-subtle: GrayText;\n --settings-border: ButtonBorder;\n --settings-divider: ButtonBorder;\n --settings-hover: Highlight;\n --settings-active: Highlight;\n --settings-focus: Highlight;\n --settings-elevated: Canvas;\n --settings-surface-strong: Canvas;\n --settings-mark: CanvasText;\n --settings-primary: ButtonFace;\n --settings-primary-hover: Highlight;\n --settings-primary-text: ButtonText;\n --settings-warning: CanvasText;\n --settings-warning-bg: Canvas;\n --settings-warning-border: ButtonBorder;\n --settings-danger: CanvasText;\n --settings-danger-bg: Canvas;\n --settings-danger-border: ButtonBorder;\n --settings-success: CanvasText;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n *,\n *::before,\n *::after {\n scroll-behavior: auto !important;\n transition-duration: 0s !important;\n }\n}\n';
|
|
27086
|
-
|
|
27087
|
-
|
|
27088
|
-
var accounts_default = '.settings-harness-account__logo {\n display: grid;\n place-items: center;\n width: 34px;\n height: 34px;\n}\n\n.settings-account-status {\n margin: 0 0 12px;\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n.settings-account-status:empty {\n display: none;\n}\n\n.settings-account-toolbar {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n margin: 0 0 16px;\n}\n.settings-account-count {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n white-space: nowrap;\n}\n.settings-account-count > :last-child {\n color: var(--settings-text);\n font-variant-numeric: tabular-nums;\n font-weight: 600;\n}\n.settings-account-search {\n display: flex;\n align-items: center;\n gap: 8px;\n box-sizing: border-box;\n height: 36px;\n min-width: 180px;\n max-width: 100%;\n margin-right: auto;\n padding: 0 10px;\n color: var(--settings-muted);\n background: var(--settings-bg);\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n}\n.settings-account-search svg {\n flex: none;\n}\n.settings-account-search input {\n flex: 1;\n min-width: 0;\n width: 210px;\n padding: 0;\n color: var(--settings-text);\n background: transparent;\n border: 0;\n font-size: 13px;\n}\n.settings-account-search input::placeholder {\n color: var(--settings-muted);\n}\n.settings-account-search:focus-within {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-account-groups {\n display: grid;\n gap: 18px;\n}\n.settings-account-group__title {\n margin: 0 0 8px;\n color: var(--settings-text);\n font-size: 13px;\n font-weight: 600;\n letter-spacing: -0.01em;\n}\n.settings-account-list {\n overflow: hidden;\n background: var(--settings-surface);\n border: 1px solid var(--settings-border);\n border-radius: 10px;\n container-type: inline-size;\n}\n.settings-account-list > .settings-account-empty {\n margin: 0;\n padding: 28px 16px;\n}\n.settings-account-table {\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n font-size: 12px;\n}\n.settings-account-table th {\n padding: 10px 16px;\n color: var(--settings-muted);\n background: var(--settings-surface);\n font-size: 10px;\n font-weight: 600;\n line-height: 16px;\n text-align: left;\n}\n.settings-account-table th:nth-child(1) {\n width: 32%;\n}\n.settings-account-table th:nth-child(2),\n.settings-account-table th:nth-child(3) {\n width: 24%;\n}\n.settings-account-table th:nth-child(4) {\n width: 20%;\n text-align: right;\n}\n.settings-account-table--api th:nth-child(1) {\n width: 48%;\n}\n.settings-account-table--api th:nth-child(2) {\n width: 32%;\n}\n.settings-account-table--api th:nth-child(3) {\n width: 20%;\n text-align: right;\n}\n.settings-account-table td {\n padding: 17px 16px;\n vertical-align: middle;\n border-top: 1px solid var(--settings-divider);\n}\n.settings-account-row {\n background: transparent;\n}\n.settings-account-row:hover {\n background: var(--settings-hover);\n}\n.settings-account-row__person {\n display: grid;\n grid-template-columns: 34px minmax(0, 1fr);\n align-items: center;\n gap: 11px;\n min-width: 0;\n}\n.settings-account-row__mark {\n display: grid;\n place-items: center;\n width: 34px;\n height: 34px;\n color: light-dark(#67558d, #c3baff);\n background: light-dark(#f0ecf7, #353044);\n border: 1px solid light-dark(#d9d0e6, #4d435f);\n border-radius: 10px;\n}\n.settings-account-row__identity {\n min-width: 0;\n}\n.settings-account-email {\n display: block;\n min-width: 0;\n overflow: hidden;\n font-size: 12px;\n font-weight: 550;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.settings-account-metadata {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 5px;\n margin-top: 4px;\n color: var(--settings-muted);\n flex-wrap: wrap;\n font-size: 11px;\n overflow-wrap: anywhere;\n}\n.settings-account-plan {\n flex: none;\n padding: 0 4px;\n color: var(--settings-muted);\n border: 1px solid var(--settings-border);\n border-radius: 5px;\n font-size: 10px;\n max-width: 100%;\n overflow-wrap: anywhere;\n}\n.settings-account-plan--highlighted {\n color: light-dark(#654f91, #c8bfff);\n background: light-dark(#f2edf9, #a99bff18);\n border-color: light-dark(#d9ccea, #a99bff52);\n font-weight: 600;\n}\n.settings-account-active {\n flex: none;\n color: light-dark(#66548e, #c8bfff);\n font-size: 10px;\n white-space: nowrap;\n}\n\n.settings-account-usage {\n display: grid;\n gap: 10px;\n}\n.settings-account-usage__meter {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n grid-template-rows: 20px 4px 17px;\n align-items: center;\n gap: 6px 0;\n min-width: 0;\n font-variant-numeric: tabular-nums;\n}\n:host([lang="zh-CN"]) .settings-account-usage__meter {\n grid-template-columns: 48px minmax(36px, 1fr) 72px;\n}\n.settings-account-usage__meter--balance {\n display: flex;\n grid-template-columns: none;\n justify-content: flex-start;\n gap: 6px;\n}\n.settings-account-usage__balance {\n display: inline-flex;\n align-items: baseline;\n gap: 4px;\n font-size: 14px;\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n.settings-account-usage__value-label {\n font-size: 14px;\n font-weight: 600;\n}\n\n.settings-account-usage__title {\n display: none;\n min-width: 0;\n color: var(--settings-muted);\n font-size: 11px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.settings-account-extra-usage {\n display: grid;\n gap: 12px;\n margin-top: 14px;\n}\n.settings-account-extra-usage .settings-account-usage__meter,\n.settings-account-usage__meter--scoped {\n grid-template-rows: auto 20px 4px 17px;\n}\n.settings-account-extra-usage .settings-account-usage__title,\n.settings-account-usage__meter--scoped .settings-account-usage__title {\n display: block;\n grid-column: 1 / -1;\n white-space: normal;\n overflow-wrap: anywhere;\n}\n.settings-account-usage__percent {\n grid-column: 1 / -1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n justify-content: flex-end;\n gap: 7px;\n font-size: 14px;\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n.settings-account-usage__countdown {\n min-width: 0;\n color: var(--settings-muted);\n font-size: 10px;\n font-weight: 400;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.settings-account-usage__percent > :last-child {\n flex: none;\n}\n.settings-account-usage__percent--warn {\n color: var(--settings-warning);\n}\n.settings-account-usage__percent--hot {\n color: var(--settings-danger);\n}\n.settings-account-usage__bar {\n grid-column: 1 / -1;\n height: 4px;\n overflow: hidden;\n background: light-dark(#e3e1e8, #3c3c43);\n border-radius: 4px;\n}\n.settings-account-usage__bar > span {\n display: block;\n height: 100%;\n background: light-dark(#81769e, #9993b8);\n border-radius: inherit;\n}\n.settings-account-usage__bar--warn > span {\n background: var(--settings-warning);\n}\n.settings-account-usage__bar--hot > span {\n background: var(--settings-danger);\n}\n.settings-account-usage__sub {\n grid-column: 1 / -1;\n color: var(--settings-muted);\n font-size: 10px;\n font-variant-numeric: tabular-nums;\n text-align: right;\n white-space: nowrap;\n}\n.settings-account-usage__message {\n color: var(--settings-muted);\n}\n.settings-account-usage__missing {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-content: center;\n gap: 6px;\n min-height: 53px;\n color: var(--settings-muted);\n}\n.settings-account-usage__missing > span:not(.settings-account-usage__title) {\n grid-column: 1 / -1;\n font-size: 14px;\n}\n.settings-account-table .settings-account-spanning-cell {\n vertical-align: top;\n}\n.settings-account-quota-continuation-row > .settings-account-usage-cell {\n background: inherit;\n}\n.settings-account-management {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n}\n.settings-account-native {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 3px;\n color: var(--settings-muted);\n font-size: 11px;\n}\n.settings-account-native .settings-icon-button {\n width: 25px;\n height: 28px;\n}\n.settings-account-usage > button {\n justify-self: start;\n}\n.settings-account-action {\n padding: 4px 5px;\n min-height: 30px;\n font-size: 12px;\n color: var(--settings-text);\n background: transparent;\n border: 1px solid transparent;\n border-radius: 7px;\n white-space: nowrap;\n cursor: pointer;\n}\n.settings-account-action:hover {\n background: var(--settings-hover);\n}\n.settings-account-action:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n.settings-account-reset-summary {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n min-height: 24px;\n padding: 3px 0;\n font-size: 10px;\n white-space: nowrap;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 5px;\n cursor: pointer;\n}\n.settings-account-reset-summary:hover {\n background: var(--settings-hover);\n}\n.settings-account-reset-summary[aria-expanded="true"] > svg:last-child {\n transform: rotate(90deg);\n}\n.settings-account-details-row > td {\n background: var(--settings-inset);\n}\n.settings-account-reset-details {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n flex-wrap: wrap;\n}\n.settings-account-reset-details strong {\n font-size: 12px;\n}\n.settings-account-reset-expiry {\n margin: 6px 0;\n color: var(--settings-muted);\n font-size: 11px;\n}\n.settings-account-reset-expiry.is-warn {\n color: var(--settings-warning);\n}\n.settings-account-reset-expiry.is-hot {\n color: var(--settings-danger);\n}\n.settings-account-reset-list {\n margin: 8px 0 0;\n padding: 0;\n list-style: none;\n color: var(--settings-muted);\n font-size: 11px;\n}\n.settings-account-reset-list li + li {\n margin-top: 4px;\n}\n.settings-account-empty {\n text-align: center;\n color: var(--settings-muted);\n}\n.settings-account-list :focus-visible,\n.settings-account-toolbar :focus-visible:not(.settings-segmented__item):not(input) {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-account-dialog {\n position: fixed;\n width: min(360px, calc(100vw - 40px));\n max-height: calc(100vh - 40px);\n overflow: auto;\n padding: 22px;\n color: var(--settings-text);\n background: var(--settings-elevated);\n border: 1px solid var(--settings-border);\n border-radius: 12px;\n box-shadow: var(--settings-dialog-shadow);\n text-align: left;\n}\n.settings-account-dialog::backdrop {\n background: var(--settings-backdrop);\n}\n.settings-account-dialog h2 {\n margin: 0 28px 12px 0;\n font-size: 15px;\n}\n.settings-account-dialog p {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 1.6;\n overflow-wrap: anywhere;\n}\n.settings-account-dialog__close {\n position: absolute;\n top: 12px;\n right: 12px;\n}\n\n@container (max-width: 680px) {\n .settings-account-table,\n .settings-account-table tbody {\n display: block;\n }\n .settings-account-table thead {\n display: none;\n }\n .settings-account-row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n padding: 18px;\n gap: 18px 22px;\n border-top: 1px solid var(--settings-divider);\n }\n .settings-account-row:first-child {\n border-top: 0;\n }\n .settings-account-table .settings-account-row > td {\n display: block;\n min-width: 0;\n padding: 0;\n border: 0;\n }\n .settings-account-person-cell,\n .settings-account-management-cell,\n .settings-account-usage-cell--message,\n .settings-account-table--api .settings-account-usage-cell {\n grid-column: 1 / -1;\n }\n .settings-account-table .settings-account-management-cell {\n border-top: 1px solid var(--settings-divider);\n padding-top: 8px;\n }\n .settings-account-email {\n font-size: 13px;\n }\n .settings-account-usage__title {\n display: block;\n grid-column: 1;\n }\n .settings-account-usage__percent,\n .settings-account-usage__missing > span:not(.settings-account-usage__title) {\n grid-column: 2;\n text-align: right;\n }\n .settings-account-extra-usage .settings-account-usage__percent {\n grid-column: 1 / -1;\n }\n .settings-account-management {\n flex-direction: row;\n justify-content: space-between;\n }\n .settings-account-native {\n justify-content: flex-start;\n }\n .settings-account-table tr:not(.settings-account-row, [hidden]),\n .settings-account-table tr:not(.settings-account-row, [hidden]) > td {\n display: block;\n }\n}\n\n@container (max-width: 360px) {\n .settings-account-row {\n grid-template-columns: minmax(0, 1fr);\n gap: 16px;\n padding: 16px;\n }\n}\n\n@media (forced-colors: active) {\n .settings-account-usage__bar {\n border: 1px solid CanvasText;\n }\n .settings-account-usage__bar > span {\n background: Highlight;\n }\n}\n';
|
|
27876
|
+
var shell_default = `:host {
|
|
27877
|
+
/* Inherit Codex Desktop color-scheme; light-dark() tracks the host page. */
|
|
27878
|
+
--settings-titlebar-height: env(titlebar-area-height, 0px);
|
|
27879
|
+
--settings-bg: light-dark(#ffffff, #181818);
|
|
27880
|
+
--settings-sidebar: light-dark(#f4f4f5, #1c1c1c);
|
|
27881
|
+
--settings-panel: transparent;
|
|
27882
|
+
--settings-text: light-dark(#171717, #f5f5f5);
|
|
27883
|
+
--settings-muted: light-dark(#737373, #a1a1a1);
|
|
27884
|
+
--settings-subtle: light-dark(#8a8a8a, #777777);
|
|
27885
|
+
--settings-border: light-dark(rgb(15 23 42 / 10%), rgb(255 255 255 / 10%));
|
|
27886
|
+
--settings-divider: light-dark(rgb(15 23 42 / 10%), rgb(255 255 255 / 10%));
|
|
27887
|
+
--settings-hover: light-dark(rgb(15 23 42 / 5%), rgb(255 255 255 / 6%));
|
|
27888
|
+
--settings-active: light-dark(rgb(51 156 255 / 14%), rgb(51 156 255 / 12%));
|
|
27889
|
+
--settings-focus: #339cff;
|
|
27890
|
+
--settings-elevated: light-dark(#ffffff, #2c2c2e);
|
|
27891
|
+
--settings-inset: light-dark(rgb(15 23 42 / 4%), rgb(0 0 0 / 18%));
|
|
27892
|
+
--settings-surface: light-dark(rgb(15 23 42 / 3%), rgb(255 255 255 / 2%));
|
|
27893
|
+
--settings-surface-strong: light-dark(rgb(15 23 42 / 6%), rgb(255 255 255 / 6%));
|
|
27894
|
+
--settings-surface-hover: light-dark(#eeeeee, #303030);
|
|
27895
|
+
--settings-mark: light-dark(#52525b, #d4d8de);
|
|
27896
|
+
--settings-dialog-shadow: light-dark(
|
|
27897
|
+
0 24px 64px rgb(15 23 42 / 16%),
|
|
27898
|
+
0 24px 64px rgb(0 0 0 / 38%)
|
|
27899
|
+
);
|
|
27900
|
+
--settings-backdrop: light-dark(rgb(15 23 42 / 28%), rgb(0 0 0 / 52%));
|
|
27901
|
+
--settings-segmented-shadow:
|
|
27902
|
+
0 0 0 0.5px light-dark(rgb(15 23 42 / 6%), rgb(0 0 0 / 4%)),
|
|
27903
|
+
0 3px 1px 0 light-dark(rgb(15 23 42 / 4%), rgb(0 0 0 / 4%)),
|
|
27904
|
+
0 3px 8px 0 light-dark(rgb(15 23 42 / 10%), rgb(0 0 0 / 12%));
|
|
27905
|
+
--settings-primary: light-dark(#171717, #f4f4f4);
|
|
27906
|
+
--settings-primary-hover: light-dark(#2f2f2f, #ffffff);
|
|
27907
|
+
--settings-primary-text: light-dark(#ffffff, #171717);
|
|
27908
|
+
--settings-warning: light-dark(#8a5500, #f5c96a);
|
|
27909
|
+
--settings-warning-bg: light-dark(#fff8e6, rgb(245 201 106 / 8%));
|
|
27910
|
+
--settings-warning-border: light-dark(#ead8a8, rgb(245 201 106 / 24%));
|
|
27911
|
+
--settings-danger: light-dark(#b42318, #f87171);
|
|
27912
|
+
--settings-danger-bg: light-dark(#fff1f0, rgb(239 68 68 / 8%));
|
|
27913
|
+
--settings-danger-border: light-dark(#f3c7c3, rgb(239 68 68 / 22%));
|
|
27914
|
+
--settings-success: light-dark(#16784a, #4ade80);
|
|
27915
|
+
--settings-dialog-max-width: 1120px;
|
|
27916
|
+
--settings-dialog-max-height: 780px;
|
|
27917
|
+
--settings-dialog-inset: 52px;
|
|
27918
|
+
color: var(--settings-text);
|
|
27919
|
+
color-scheme: inherit;
|
|
27920
|
+
font:
|
|
27921
|
+
13px/1.5 system-ui,
|
|
27922
|
+
-apple-system,
|
|
27923
|
+
BlinkMacSystemFont,
|
|
27924
|
+
"Segoe UI",
|
|
27925
|
+
sans-serif;
|
|
27926
|
+
letter-spacing: 0;
|
|
27927
|
+
}
|
|
27089
27928
|
|
|
27090
|
-
|
|
27091
|
-
|
|
27092
|
-
|
|
27093
|
-
|
|
27094
|
-
|
|
27095
|
-
|
|
27096
|
-
|
|
27097
|
-
try {
|
|
27098
|
-
const scheme = ownerDocument.defaultView?.getComputedStyle(ownerDocument.documentElement).colorScheme.toLowerCase();
|
|
27099
|
-
if (scheme?.includes("dark") && !scheme.includes("light")) return "dark";
|
|
27100
|
-
if (scheme?.includes("light") && !scheme.includes("dark")) return "light";
|
|
27101
|
-
} catch {
|
|
27102
|
-
}
|
|
27103
|
-
return "dark";
|
|
27929
|
+
/* Element defaults stay below Tailwind utilities; unlayered component classes still override them. */
|
|
27930
|
+
@layer base {
|
|
27931
|
+
*,
|
|
27932
|
+
*::before,
|
|
27933
|
+
*::after {
|
|
27934
|
+
box-sizing: border-box;
|
|
27935
|
+
letter-spacing: 0;
|
|
27104
27936
|
}
|
|
27105
|
-
|
|
27106
|
-
|
|
27937
|
+
|
|
27938
|
+
button,
|
|
27939
|
+
input,
|
|
27940
|
+
select {
|
|
27941
|
+
font: inherit;
|
|
27107
27942
|
}
|
|
27108
|
-
|
|
27109
|
-
|
|
27110
|
-
|
|
27111
|
-
else button.removeAttribute("aria-current");
|
|
27112
|
-
}
|
|
27943
|
+
|
|
27944
|
+
button {
|
|
27945
|
+
color: inherit;
|
|
27113
27946
|
}
|
|
27114
|
-
|
|
27115
|
-
|
|
27116
|
-
|
|
27117
|
-
|
|
27118
|
-
|
|
27119
|
-
|
|
27120
|
-
|
|
27121
|
-
|
|
27122
|
-
|
|
27123
|
-
|
|
27124
|
-
|
|
27125
|
-
|
|
27126
|
-
|
|
27127
|
-
|
|
27128
|
-
|
|
27129
|
-
|
|
27130
|
-
|
|
27131
|
-
|
|
27132
|
-
|
|
27133
|
-
|
|
27134
|
-
|
|
27135
|
-
|
|
27136
|
-
|
|
27137
|
-
|
|
27138
|
-
|
|
27139
|
-
|
|
27140
|
-
|
|
27141
|
-
|
|
27142
|
-
|
|
27143
|
-
|
|
27144
|
-
|
|
27145
|
-
|
|
27146
|
-
|
|
27147
|
-
|
|
27148
|
-
|
|
27947
|
+
}
|
|
27948
|
+
|
|
27949
|
+
[hidden] {
|
|
27950
|
+
display: none !important;
|
|
27951
|
+
}
|
|
27952
|
+
|
|
27953
|
+
.codexhost-settings-dialog {
|
|
27954
|
+
/* Native window controls sit above the DOM top layer. Center below them. */
|
|
27955
|
+
inset: var(--settings-titlebar-height) 0 0;
|
|
27956
|
+
width: min(var(--settings-dialog-max-width), calc(100vw - 2 * var(--settings-dialog-inset)));
|
|
27957
|
+
height: min(
|
|
27958
|
+
var(--settings-dialog-max-height),
|
|
27959
|
+
calc(100vh - var(--settings-titlebar-height) - 2 * var(--settings-dialog-inset))
|
|
27960
|
+
);
|
|
27961
|
+
-webkit-app-region: no-drag;
|
|
27962
|
+
max-width: none;
|
|
27963
|
+
max-height: none;
|
|
27964
|
+
margin: auto;
|
|
27965
|
+
padding: 0;
|
|
27966
|
+
overflow: hidden;
|
|
27967
|
+
color: var(--settings-text);
|
|
27968
|
+
background: var(--settings-bg);
|
|
27969
|
+
border: 1px solid var(--settings-border);
|
|
27970
|
+
border-radius: 12px;
|
|
27971
|
+
box-shadow: var(--settings-dialog-shadow);
|
|
27972
|
+
}
|
|
27973
|
+
|
|
27974
|
+
.codexhost-settings-dialog::backdrop {
|
|
27975
|
+
/* Backdrops do not inherit the shell's custom properties. */
|
|
27976
|
+
top: env(titlebar-area-height, 0px);
|
|
27977
|
+
-webkit-app-region: no-drag;
|
|
27978
|
+
background: light-dark(rgb(15 23 42 / 28%), rgb(0 0 0 / 52%));
|
|
27979
|
+
backdrop-filter: blur(1px);
|
|
27980
|
+
}
|
|
27981
|
+
|
|
27982
|
+
.settings-frame,
|
|
27983
|
+
.settings-layout {
|
|
27984
|
+
width: 100%;
|
|
27985
|
+
height: 100%;
|
|
27986
|
+
min-width: 0;
|
|
27987
|
+
min-height: 0;
|
|
27988
|
+
}
|
|
27989
|
+
|
|
27990
|
+
.settings-frame {
|
|
27991
|
+
display: flex;
|
|
27992
|
+
flex-direction: column;
|
|
27993
|
+
}
|
|
27994
|
+
|
|
27995
|
+
.settings-layout {
|
|
27996
|
+
flex: 1;
|
|
27997
|
+
display: grid;
|
|
27998
|
+
grid-template-columns: 184px minmax(0, 1fr);
|
|
27999
|
+
background: var(--settings-bg);
|
|
28000
|
+
}
|
|
28001
|
+
|
|
28002
|
+
.settings-sidebar {
|
|
28003
|
+
display: flex;
|
|
28004
|
+
min-width: 0;
|
|
28005
|
+
min-height: 0;
|
|
28006
|
+
flex-direction: column;
|
|
28007
|
+
overflow: hidden;
|
|
28008
|
+
background: var(--settings-sidebar);
|
|
28009
|
+
border-right: 1px solid var(--settings-border);
|
|
28010
|
+
padding-top: 14px;
|
|
28011
|
+
}
|
|
28012
|
+
|
|
28013
|
+
.settings-header {
|
|
28014
|
+
display: flex;
|
|
28015
|
+
align-items: center;
|
|
28016
|
+
min-width: 0;
|
|
28017
|
+
height: 48px;
|
|
28018
|
+
flex: none;
|
|
28019
|
+
padding: 0 12px;
|
|
28020
|
+
border-bottom: 1px solid var(--settings-border);
|
|
28021
|
+
}
|
|
28022
|
+
|
|
28023
|
+
.settings-header-actions {
|
|
28024
|
+
display: flex;
|
|
28025
|
+
align-items: center;
|
|
28026
|
+
flex: none;
|
|
28027
|
+
gap: 12px;
|
|
28028
|
+
margin-left: auto;
|
|
28029
|
+
}
|
|
28030
|
+
|
|
28031
|
+
.settings-brand {
|
|
28032
|
+
display: flex;
|
|
28033
|
+
align-items: center;
|
|
28034
|
+
min-width: 0;
|
|
28035
|
+
gap: 7px;
|
|
28036
|
+
}
|
|
28037
|
+
|
|
28038
|
+
.settings-brand__mark {
|
|
28039
|
+
display: inline-flex;
|
|
28040
|
+
align-items: center;
|
|
28041
|
+
justify-content: center;
|
|
28042
|
+
width: 26px;
|
|
28043
|
+
height: 26px;
|
|
28044
|
+
flex: none;
|
|
28045
|
+
color: var(--settings-text);
|
|
28046
|
+
}
|
|
28047
|
+
|
|
28048
|
+
.settings-brand__mark .codexhost-settings-icon {
|
|
28049
|
+
width: 24px;
|
|
28050
|
+
height: 24px;
|
|
28051
|
+
object-fit: contain;
|
|
28052
|
+
}
|
|
28053
|
+
|
|
28054
|
+
.settings-brand__copy {
|
|
28055
|
+
display: flex;
|
|
28056
|
+
min-width: 0;
|
|
28057
|
+
align-items: baseline;
|
|
28058
|
+
gap: 0;
|
|
28059
|
+
line-height: 20px;
|
|
28060
|
+
}
|
|
28061
|
+
|
|
28062
|
+
.settings-brand__name {
|
|
28063
|
+
overflow: hidden;
|
|
28064
|
+
color: var(--settings-text);
|
|
28065
|
+
font-size: 13px;
|
|
28066
|
+
font-weight: 600;
|
|
28067
|
+
text-overflow: ellipsis;
|
|
28068
|
+
white-space: nowrap;
|
|
28069
|
+
}
|
|
28070
|
+
|
|
28071
|
+
.settings-brand__title {
|
|
28072
|
+
margin-left: 8px;
|
|
28073
|
+
padding-left: 8px;
|
|
28074
|
+
color: var(--settings-muted);
|
|
28075
|
+
font-size: 13px;
|
|
28076
|
+
font-weight: 400;
|
|
28077
|
+
border-left: 1px solid var(--settings-border);
|
|
28078
|
+
}
|
|
28079
|
+
|
|
28080
|
+
.settings-nav {
|
|
28081
|
+
display: flex;
|
|
28082
|
+
min-width: 0;
|
|
28083
|
+
min-height: 0;
|
|
28084
|
+
flex: 1;
|
|
28085
|
+
flex-direction: column;
|
|
28086
|
+
gap: 2px;
|
|
28087
|
+
padding: 0 7px 10px;
|
|
28088
|
+
overflow-y: auto;
|
|
28089
|
+
}
|
|
28090
|
+
|
|
28091
|
+
.settings-nav-section-label {
|
|
28092
|
+
min-height: 28px;
|
|
28093
|
+
padding: 7px 9px 3px 4px;
|
|
28094
|
+
color: var(--settings-muted);
|
|
28095
|
+
font-size: 12px;
|
|
28096
|
+
font-weight: 600;
|
|
28097
|
+
line-height: 18px;
|
|
28098
|
+
}
|
|
28099
|
+
|
|
28100
|
+
.settings-nav-section-label:not(:first-child) {
|
|
28101
|
+
margin-top: 8px;
|
|
28102
|
+
}
|
|
28103
|
+
|
|
28104
|
+
.settings-nav-button {
|
|
28105
|
+
display: grid;
|
|
28106
|
+
grid-template-columns: 16px minmax(0, 1fr);
|
|
28107
|
+
align-items: center;
|
|
28108
|
+
width: 100%;
|
|
28109
|
+
position: relative;
|
|
28110
|
+
min-height: 34px;
|
|
28111
|
+
flex: none;
|
|
28112
|
+
gap: 9px;
|
|
28113
|
+
padding: 6px 9px;
|
|
28114
|
+
color: var(--settings-text);
|
|
28115
|
+
font-size: 14px;
|
|
28116
|
+
font-weight: 600;
|
|
28117
|
+
line-height: 21px;
|
|
28118
|
+
text-align: left;
|
|
28119
|
+
background: transparent;
|
|
28120
|
+
border: 0;
|
|
28121
|
+
border-radius: 8px;
|
|
28122
|
+
cursor: pointer;
|
|
28123
|
+
}
|
|
28124
|
+
|
|
28125
|
+
.settings-nav-button .codexhost-settings-icon {
|
|
28126
|
+
width: 16px;
|
|
28127
|
+
height: 16px;
|
|
28128
|
+
opacity: 0.9;
|
|
28129
|
+
}
|
|
28130
|
+
|
|
28131
|
+
.settings-nav-button:hover {
|
|
28132
|
+
background: var(--settings-hover);
|
|
28133
|
+
}
|
|
28134
|
+
|
|
28135
|
+
.settings-nav-button[aria-current="page"] {
|
|
28136
|
+
background: var(--settings-active);
|
|
28137
|
+
color: var(--settings-text);
|
|
28138
|
+
font-weight: 500;
|
|
28139
|
+
}
|
|
28140
|
+
|
|
28141
|
+
.settings-nav-button span {
|
|
28142
|
+
min-width: 0;
|
|
28143
|
+
overflow: hidden;
|
|
28144
|
+
text-overflow: ellipsis;
|
|
28145
|
+
white-space: nowrap;
|
|
28146
|
+
}
|
|
28147
|
+
|
|
28148
|
+
.settings-icon-button {
|
|
28149
|
+
display: inline-flex;
|
|
28150
|
+
align-items: center;
|
|
28151
|
+
justify-content: center;
|
|
28152
|
+
width: 28px;
|
|
28153
|
+
height: 28px;
|
|
28154
|
+
flex: none;
|
|
28155
|
+
padding: 0;
|
|
28156
|
+
color: var(--settings-muted);
|
|
28157
|
+
background: transparent;
|
|
28158
|
+
border: 0;
|
|
28159
|
+
border-radius: 8px;
|
|
28160
|
+
cursor: pointer;
|
|
28161
|
+
}
|
|
28162
|
+
|
|
28163
|
+
.settings-icon-button:hover {
|
|
28164
|
+
color: var(--settings-text);
|
|
28165
|
+
background: var(--settings-hover);
|
|
28166
|
+
}
|
|
28167
|
+
|
|
28168
|
+
.settings-icon-button:focus-visible,
|
|
28169
|
+
.settings-nav-button:focus-visible {
|
|
28170
|
+
outline: 2px solid var(--settings-focus);
|
|
28171
|
+
outline-offset: 1px;
|
|
28172
|
+
}
|
|
28173
|
+
|
|
28174
|
+
.settings-page {
|
|
28175
|
+
display: block;
|
|
28176
|
+
position: relative;
|
|
28177
|
+
min-width: 0;
|
|
28178
|
+
min-height: 0;
|
|
28179
|
+
overflow-y: auto;
|
|
28180
|
+
background: var(--settings-bg);
|
|
28181
|
+
scrollbar-gutter: stable;
|
|
28182
|
+
}
|
|
28183
|
+
|
|
28184
|
+
.settings-page__content {
|
|
28185
|
+
width: min(930px, calc(100% - 80px));
|
|
28186
|
+
margin-inline: auto;
|
|
28187
|
+
}
|
|
28188
|
+
|
|
28189
|
+
.settings-page__content {
|
|
28190
|
+
min-width: 0;
|
|
28191
|
+
padding: 28px 0 36px;
|
|
28192
|
+
}
|
|
28193
|
+
|
|
28194
|
+
.settings-section-label {
|
|
28195
|
+
min-height: auto;
|
|
28196
|
+
padding: 0 0 28px;
|
|
28197
|
+
color: var(--settings-text);
|
|
28198
|
+
font-size: 18px;
|
|
28199
|
+
font-weight: 600;
|
|
28200
|
+
line-height: 26px;
|
|
28201
|
+
}
|
|
28202
|
+
|
|
28203
|
+
.settings-status-list,
|
|
28204
|
+
.settings-empty {
|
|
28205
|
+
overflow: hidden;
|
|
28206
|
+
background: var(--settings-panel);
|
|
28207
|
+
}
|
|
28208
|
+
|
|
28209
|
+
.settings-status-row {
|
|
28210
|
+
display: grid;
|
|
28211
|
+
grid-template-columns: minmax(170px, 1fr) auto minmax(280px, 1.45fr);
|
|
28212
|
+
position: relative;
|
|
28213
|
+
align-items: center;
|
|
28214
|
+
min-height: 72px;
|
|
28215
|
+
gap: 20px;
|
|
28216
|
+
padding: 12px 0;
|
|
28217
|
+
}
|
|
28218
|
+
|
|
28219
|
+
.settings-status-row:not(:last-child)::after {
|
|
28220
|
+
content: "";
|
|
28221
|
+
position: absolute;
|
|
28222
|
+
right: 0;
|
|
28223
|
+
bottom: 0;
|
|
28224
|
+
left: 0;
|
|
28225
|
+
height: 1px;
|
|
28226
|
+
background: var(--settings-divider);
|
|
28227
|
+
}
|
|
28228
|
+
|
|
28229
|
+
.settings-status-row__identity {
|
|
28230
|
+
display: inline-flex;
|
|
28231
|
+
align-items: center;
|
|
28232
|
+
min-width: 0;
|
|
28233
|
+
color: var(--settings-text);
|
|
28234
|
+
gap: 10px;
|
|
28235
|
+
font-size: 14px;
|
|
28236
|
+
font-weight: 500;
|
|
28237
|
+
line-height: 22px;
|
|
28238
|
+
}
|
|
28239
|
+
|
|
28240
|
+
.settings-status-row__icon {
|
|
28241
|
+
display: inline-flex;
|
|
28242
|
+
align-items: center;
|
|
28243
|
+
justify-content: center;
|
|
28244
|
+
width: 36px;
|
|
28245
|
+
height: 36px;
|
|
28246
|
+
flex: none;
|
|
28247
|
+
color: var(--settings-muted);
|
|
28248
|
+
background: var(--settings-surface-strong);
|
|
28249
|
+
border-radius: 50%;
|
|
28250
|
+
}
|
|
28251
|
+
|
|
28252
|
+
.settings-status-badge {
|
|
28253
|
+
flex: none;
|
|
28254
|
+
padding: 3px 8px;
|
|
28255
|
+
color: var(--settings-muted);
|
|
28256
|
+
font-size: 11px;
|
|
28257
|
+
font-weight: 500;
|
|
28258
|
+
line-height: 18px;
|
|
28259
|
+
background: var(--settings-surface-strong);
|
|
28260
|
+
border: 1px solid var(--settings-border);
|
|
28261
|
+
border-radius: 6px;
|
|
28262
|
+
}
|
|
28263
|
+
|
|
28264
|
+
.settings-status-row__detail {
|
|
28265
|
+
min-width: 0;
|
|
28266
|
+
color: var(--settings-muted);
|
|
28267
|
+
font-size: 13px;
|
|
28268
|
+
line-height: 20px;
|
|
28269
|
+
}
|
|
28270
|
+
|
|
28271
|
+
.settings-page-description {
|
|
28272
|
+
max-width: 760px;
|
|
28273
|
+
margin: -10px 0 20px;
|
|
28274
|
+
color: var(--settings-muted);
|
|
28275
|
+
font-size: 12px;
|
|
28276
|
+
line-height: 18px;
|
|
28277
|
+
}
|
|
28278
|
+
|
|
28279
|
+
.settings-session-import-header {
|
|
28280
|
+
display: flex;
|
|
28281
|
+
align-items: flex-start;
|
|
28282
|
+
justify-content: space-between;
|
|
28283
|
+
gap: 24px;
|
|
28284
|
+
}
|
|
28285
|
+
|
|
28286
|
+
.settings-session-import-header .settings-section-label {
|
|
28287
|
+
min-width: 0;
|
|
28288
|
+
}
|
|
28289
|
+
|
|
28290
|
+
.settings-session-import-harness {
|
|
28291
|
+
display: flex;
|
|
28292
|
+
min-width: 0;
|
|
28293
|
+
margin: 0 0 16px;
|
|
28294
|
+
}
|
|
28295
|
+
|
|
28296
|
+
.settings-session-import-harness__options {
|
|
28297
|
+
display: flex;
|
|
28298
|
+
flex-wrap: wrap;
|
|
28299
|
+
align-items: center;
|
|
28300
|
+
width: fit-content;
|
|
28301
|
+
max-width: 100%;
|
|
28302
|
+
gap: 8px;
|
|
28303
|
+
}
|
|
28304
|
+
|
|
28305
|
+
.settings-session-import-harness__option {
|
|
28306
|
+
min-height: 32px;
|
|
28307
|
+
flex: none;
|
|
28308
|
+
padding: 6px 10px;
|
|
28309
|
+
color: var(--settings-muted);
|
|
28310
|
+
font: inherit;
|
|
28311
|
+
font-size: 12px;
|
|
28312
|
+
white-space: nowrap;
|
|
28313
|
+
background: transparent;
|
|
28314
|
+
border: 1px solid var(--settings-border);
|
|
28315
|
+
border-radius: 6px;
|
|
28316
|
+
cursor: pointer;
|
|
28317
|
+
}
|
|
28318
|
+
|
|
28319
|
+
.settings-session-import-harness__option[aria-pressed="true"] {
|
|
28320
|
+
color: var(--settings-text);
|
|
28321
|
+
background: var(--settings-active);
|
|
28322
|
+
border-color: rgb(51 156 255 / 50%);
|
|
28323
|
+
}
|
|
28324
|
+
|
|
28325
|
+
.settings-session-import-harness__option:disabled {
|
|
28326
|
+
opacity: 0.38;
|
|
28327
|
+
cursor: not-allowed;
|
|
28328
|
+
}
|
|
28329
|
+
|
|
28330
|
+
.settings-session-import-harness__option:focus-visible {
|
|
28331
|
+
outline: 2px solid var(--settings-focus);
|
|
28332
|
+
outline-offset: 2px;
|
|
28333
|
+
}
|
|
28334
|
+
|
|
28335
|
+
.settings-session-import-search,
|
|
28336
|
+
.settings-session-import-pagination {
|
|
28337
|
+
display: flex;
|
|
28338
|
+
flex-wrap: wrap;
|
|
28339
|
+
align-items: center;
|
|
28340
|
+
gap: 10px;
|
|
28341
|
+
}
|
|
28342
|
+
|
|
28343
|
+
.settings-session-import-search {
|
|
28344
|
+
align-items: stretch;
|
|
28345
|
+
margin: 16px 0 0;
|
|
28346
|
+
}
|
|
28347
|
+
|
|
28348
|
+
.settings-session-import-pagination {
|
|
28349
|
+
margin: 16px 0 0;
|
|
28350
|
+
}
|
|
28351
|
+
|
|
28352
|
+
.settings-session-import-search input {
|
|
28353
|
+
flex: 1;
|
|
28354
|
+
min-width: 160px;
|
|
28355
|
+
}
|
|
28356
|
+
|
|
28357
|
+
.settings-session-import-search input,
|
|
28358
|
+
.settings-session-import-pagination select {
|
|
28359
|
+
box-sizing: border-box;
|
|
28360
|
+
color: var(--settings-text);
|
|
28361
|
+
background: var(--settings-bg);
|
|
28362
|
+
border: 1px solid var(--settings-border);
|
|
28363
|
+
border-radius: 6px;
|
|
28364
|
+
}
|
|
28365
|
+
|
|
28366
|
+
.settings-session-import-search input,
|
|
28367
|
+
.settings-session-import-search .settings-command-button {
|
|
28368
|
+
box-sizing: border-box;
|
|
28369
|
+
height: 36px;
|
|
28370
|
+
min-height: 36px;
|
|
28371
|
+
padding: 6px 10px;
|
|
28372
|
+
border-radius: 6px;
|
|
28373
|
+
}
|
|
28374
|
+
|
|
28375
|
+
.settings-session-import-pagination select {
|
|
28376
|
+
min-height: 28px;
|
|
28377
|
+
padding: 2px 8px;
|
|
28378
|
+
}
|
|
28379
|
+
|
|
28380
|
+
.settings-session-import-search input:focus-visible,
|
|
28381
|
+
.settings-session-import-pagination select:focus-visible {
|
|
28382
|
+
outline: 2px solid var(--settings-focus);
|
|
28383
|
+
outline-offset: 2px;
|
|
28384
|
+
}
|
|
28385
|
+
|
|
28386
|
+
.settings-session-import-pagination {
|
|
28387
|
+
color: var(--settings-muted);
|
|
28388
|
+
font-size: 12px;
|
|
28389
|
+
line-height: 18px;
|
|
28390
|
+
}
|
|
28391
|
+
|
|
28392
|
+
.settings-session-import-pagination label {
|
|
28393
|
+
display: flex;
|
|
28394
|
+
align-items: center;
|
|
28395
|
+
gap: 8px;
|
|
28396
|
+
}
|
|
28397
|
+
|
|
28398
|
+
.settings-session-import-pagination > span {
|
|
28399
|
+
flex: none;
|
|
28400
|
+
min-width: 0;
|
|
28401
|
+
}
|
|
28402
|
+
|
|
28403
|
+
.settings-session-import-pagination__navigation {
|
|
28404
|
+
display: flex;
|
|
28405
|
+
gap: 8px;
|
|
28406
|
+
margin-left: auto;
|
|
28407
|
+
}
|
|
28408
|
+
|
|
28409
|
+
.settings-session-import-content,
|
|
28410
|
+
.settings-session-import-list {
|
|
28411
|
+
display: grid;
|
|
28412
|
+
gap: 10px;
|
|
28413
|
+
}
|
|
28414
|
+
|
|
28415
|
+
.settings-session-import-content {
|
|
28416
|
+
margin-top: 16px;
|
|
28417
|
+
}
|
|
28418
|
+
|
|
28419
|
+
.settings-session-import-status {
|
|
28420
|
+
display: flex;
|
|
28421
|
+
align-items: center;
|
|
28422
|
+
min-height: 0;
|
|
28423
|
+
gap: 12px;
|
|
28424
|
+
padding: 12px 16px;
|
|
28425
|
+
color: var(--settings-muted);
|
|
28426
|
+
background: var(--settings-panel);
|
|
28427
|
+
border: 1px solid var(--settings-border);
|
|
28428
|
+
border-radius: 8px;
|
|
28429
|
+
}
|
|
28430
|
+
|
|
28431
|
+
.settings-session-import-status.is-error {
|
|
28432
|
+
color: #ef4444;
|
|
28433
|
+
}
|
|
28434
|
+
|
|
28435
|
+
.settings-session-import-recovery {
|
|
28436
|
+
display: grid;
|
|
28437
|
+
justify-items: start;
|
|
28438
|
+
gap: 14px;
|
|
28439
|
+
padding: 16px;
|
|
28440
|
+
background: var(--settings-panel);
|
|
28441
|
+
border: 1px solid var(--settings-border);
|
|
28442
|
+
border-radius: 8px;
|
|
28443
|
+
}
|
|
28444
|
+
|
|
28445
|
+
.settings-session-import-recovery:focus-visible {
|
|
28446
|
+
outline: 2px solid var(--settings-focus);
|
|
28447
|
+
outline-offset: 2px;
|
|
28448
|
+
}
|
|
28449
|
+
|
|
28450
|
+
.settings-session-import-recovery__copy {
|
|
28451
|
+
display: grid;
|
|
28452
|
+
gap: 4px;
|
|
28453
|
+
}
|
|
28454
|
+
|
|
28455
|
+
.settings-session-import-recovery__copy strong {
|
|
28456
|
+
color: var(--settings-text);
|
|
28457
|
+
font-size: 14px;
|
|
28458
|
+
}
|
|
28459
|
+
|
|
28460
|
+
.settings-session-import-recovery__copy p {
|
|
28461
|
+
margin: 0;
|
|
28462
|
+
color: var(--settings-muted);
|
|
28463
|
+
font-size: 13px;
|
|
28464
|
+
line-height: 20px;
|
|
28465
|
+
}
|
|
28466
|
+
|
|
28467
|
+
.settings-session-import-recovery__path {
|
|
28468
|
+
display: flex;
|
|
28469
|
+
align-items: stretch;
|
|
28470
|
+
width: 100%;
|
|
28471
|
+
min-width: 0;
|
|
28472
|
+
overflow: hidden;
|
|
28473
|
+
border: 1px solid var(--settings-border);
|
|
28474
|
+
border-radius: 6px;
|
|
28475
|
+
}
|
|
28476
|
+
|
|
28477
|
+
.settings-session-import-recovery__path code {
|
|
28478
|
+
min-width: 0;
|
|
28479
|
+
flex: 1;
|
|
28480
|
+
padding: 8px 10px;
|
|
28481
|
+
overflow-x: auto;
|
|
28482
|
+
color: var(--settings-text);
|
|
28483
|
+
font-size: 12px;
|
|
28484
|
+
line-height: 20px;
|
|
28485
|
+
white-space: nowrap;
|
|
28486
|
+
}
|
|
28487
|
+
|
|
28488
|
+
.settings-session-import-recovery__path .settings-command-button {
|
|
28489
|
+
min-height: 0;
|
|
28490
|
+
flex: none;
|
|
28491
|
+
border-width: 0 0 0 1px;
|
|
28492
|
+
border-radius: 0;
|
|
28493
|
+
}
|
|
28494
|
+
|
|
28495
|
+
.settings-session-import-row {
|
|
28496
|
+
display: grid;
|
|
28497
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
28498
|
+
align-items: center;
|
|
28499
|
+
gap: 20px;
|
|
28500
|
+
min-width: 0;
|
|
28501
|
+
padding: 16px;
|
|
28502
|
+
background: var(--settings-panel);
|
|
28503
|
+
border: 1px solid var(--settings-border);
|
|
28504
|
+
border-radius: 8px;
|
|
28505
|
+
}
|
|
28506
|
+
|
|
28507
|
+
.settings-session-import-row__copy {
|
|
28508
|
+
display: grid;
|
|
28509
|
+
min-width: 0;
|
|
28510
|
+
gap: 4px;
|
|
28511
|
+
}
|
|
28512
|
+
|
|
28513
|
+
.settings-session-import-row__copy strong {
|
|
28514
|
+
overflow: hidden;
|
|
28515
|
+
color: var(--settings-text);
|
|
28516
|
+
font-size: 14px;
|
|
28517
|
+
text-overflow: ellipsis;
|
|
28518
|
+
white-space: nowrap;
|
|
28519
|
+
}
|
|
28520
|
+
|
|
28521
|
+
.settings-session-import-row__copy span,
|
|
28522
|
+
.settings-session-import-row__cwd {
|
|
28523
|
+
overflow: hidden;
|
|
28524
|
+
color: var(--settings-muted);
|
|
28525
|
+
font-size: 12px;
|
|
28526
|
+
line-height: 18px;
|
|
28527
|
+
text-overflow: ellipsis;
|
|
28528
|
+
white-space: nowrap;
|
|
28529
|
+
}
|
|
28530
|
+
|
|
28531
|
+
.settings-session-import-row__cwd {
|
|
28532
|
+
display: block;
|
|
28533
|
+
min-width: 0;
|
|
28534
|
+
background: transparent;
|
|
28535
|
+
}
|
|
28536
|
+
|
|
28537
|
+
.settings-session-import-row__action {
|
|
28538
|
+
display: flex;
|
|
28539
|
+
align-items: flex-end;
|
|
28540
|
+
flex-direction: column;
|
|
28541
|
+
gap: 8px;
|
|
28542
|
+
}
|
|
28543
|
+
|
|
28544
|
+
.settings-session-import-running {
|
|
28545
|
+
color: var(--settings-muted);
|
|
28546
|
+
font-size: 12px;
|
|
28547
|
+
}
|
|
28548
|
+
|
|
28549
|
+
.settings-connection-page-header {
|
|
28550
|
+
display: flex;
|
|
28551
|
+
align-items: flex-start;
|
|
28552
|
+
justify-content: space-between;
|
|
28553
|
+
gap: 18px;
|
|
28554
|
+
margin-bottom: 18px;
|
|
28555
|
+
}
|
|
28556
|
+
|
|
28557
|
+
.settings-connection-page-header .settings-section-label {
|
|
28558
|
+
padding-bottom: 0;
|
|
28559
|
+
}
|
|
28560
|
+
|
|
28561
|
+
.settings-connection-page-header .settings-page-description {
|
|
28562
|
+
margin: 8px 0 0;
|
|
28563
|
+
}
|
|
28564
|
+
|
|
28565
|
+
.settings-connection-page-header .settings-page-description + .settings-page-description {
|
|
28566
|
+
margin-top: 8px;
|
|
28567
|
+
}
|
|
28568
|
+
|
|
28569
|
+
.settings-update-header {
|
|
28570
|
+
margin-bottom: 8px;
|
|
28571
|
+
}
|
|
28572
|
+
|
|
28573
|
+
.settings-connections-content,
|
|
28574
|
+
.settings-plugins-content,
|
|
28575
|
+
.settings-connection-list,
|
|
28576
|
+
.settings-connection-rows {
|
|
28577
|
+
min-width: 0;
|
|
28578
|
+
}
|
|
28579
|
+
|
|
28580
|
+
.settings-connections-content,
|
|
28581
|
+
.settings-plugins-content {
|
|
28582
|
+
display: grid;
|
|
28583
|
+
gap: 12px;
|
|
28584
|
+
}
|
|
28585
|
+
|
|
28586
|
+
.settings-connection-list {
|
|
28587
|
+
overflow: hidden;
|
|
28588
|
+
background: var(--settings-surface);
|
|
28589
|
+
border: 1px solid var(--settings-border);
|
|
28590
|
+
border-radius: 10px;
|
|
28591
|
+
}
|
|
28592
|
+
|
|
28593
|
+
.settings-segmented {
|
|
28594
|
+
display: inline-flex;
|
|
28595
|
+
flex-wrap: wrap;
|
|
28596
|
+
align-items: center;
|
|
28597
|
+
width: fit-content;
|
|
28598
|
+
max-width: 100%;
|
|
28599
|
+
padding: 2px;
|
|
28600
|
+
gap: 3px;
|
|
28601
|
+
background: var(--settings-surface-strong);
|
|
28602
|
+
border-radius: 10px;
|
|
28603
|
+
}
|
|
28604
|
+
|
|
28605
|
+
.settings-segmented__item {
|
|
28606
|
+
position: relative;
|
|
28607
|
+
display: inline-flex;
|
|
28608
|
+
align-items: center;
|
|
28609
|
+
justify-content: center;
|
|
28610
|
+
min-height: 28px;
|
|
28611
|
+
padding: 4px 14px;
|
|
28612
|
+
color: var(--settings-muted);
|
|
28613
|
+
font: inherit;
|
|
28614
|
+
font-size: 12px;
|
|
28615
|
+
font-weight: 600;
|
|
28616
|
+
line-height: 18px;
|
|
28617
|
+
white-space: nowrap;
|
|
28618
|
+
background: transparent;
|
|
28619
|
+
border: 0;
|
|
28620
|
+
border-radius: 8px;
|
|
28621
|
+
cursor: pointer;
|
|
28622
|
+
transition:
|
|
28623
|
+
color 0.15s ease,
|
|
28624
|
+
background-color 0.15s ease,
|
|
28625
|
+
box-shadow 0.15s ease;
|
|
28626
|
+
}
|
|
28627
|
+
|
|
28628
|
+
.settings-segmented__item:hover {
|
|
28629
|
+
color: var(--settings-text);
|
|
28630
|
+
background: var(--settings-hover);
|
|
28631
|
+
}
|
|
28632
|
+
|
|
28633
|
+
.settings-segmented__item--selected,
|
|
28634
|
+
.settings-segmented__item[aria-selected="true"],
|
|
28635
|
+
.settings-segmented__item[aria-pressed="true"] {
|
|
28636
|
+
color: var(--settings-text);
|
|
28637
|
+
background: var(--settings-elevated);
|
|
28638
|
+
box-shadow: var(--settings-segmented-shadow);
|
|
28639
|
+
}
|
|
28640
|
+
|
|
28641
|
+
.settings-segmented__item:disabled {
|
|
28642
|
+
opacity: 0.5;
|
|
28643
|
+
cursor: not-allowed;
|
|
28644
|
+
}
|
|
28645
|
+
|
|
28646
|
+
.settings-segmented__item:disabled:hover {
|
|
28647
|
+
color: var(--settings-muted);
|
|
28648
|
+
background: transparent;
|
|
28649
|
+
}
|
|
28650
|
+
|
|
28651
|
+
.settings-segmented__item:focus-visible,
|
|
28652
|
+
.settings-connection-row:focus-visible,
|
|
28653
|
+
.settings-connection-install-link:focus-visible,
|
|
28654
|
+
.settings-connection-view-error:focus-visible {
|
|
28655
|
+
outline: 2px solid var(--settings-focus);
|
|
28656
|
+
outline-offset: 1px;
|
|
28657
|
+
}
|
|
28658
|
+
|
|
28659
|
+
.settings-connection-host-tabs {
|
|
28660
|
+
display: flex;
|
|
28661
|
+
align-items: center;
|
|
28662
|
+
min-width: 0;
|
|
28663
|
+
gap: 6px;
|
|
28664
|
+
overflow-x: auto;
|
|
28665
|
+
overflow-y: hidden;
|
|
28666
|
+
overscroll-behavior-x: contain;
|
|
28667
|
+
scrollbar-width: none;
|
|
28668
|
+
scroll-behavior: smooth;
|
|
28669
|
+
scroll-snap-type: x proximity;
|
|
28670
|
+
touch-action: pan-x;
|
|
28671
|
+
}
|
|
28672
|
+
|
|
28673
|
+
.settings-connection-host-tabs::-webkit-scrollbar {
|
|
28674
|
+
display: none;
|
|
28675
|
+
}
|
|
28676
|
+
|
|
28677
|
+
.settings-connection-host-tab {
|
|
28678
|
+
display: inline-flex;
|
|
28679
|
+
align-items: center;
|
|
28680
|
+
height: 30px;
|
|
28681
|
+
min-width: max-content;
|
|
28682
|
+
flex: none;
|
|
28683
|
+
padding: 0 9px;
|
|
28684
|
+
color: var(--settings-muted);
|
|
28685
|
+
font: inherit;
|
|
28686
|
+
font-size: 12px;
|
|
28687
|
+
line-height: 18px;
|
|
28688
|
+
white-space: nowrap;
|
|
28689
|
+
background: var(--settings-inset);
|
|
28690
|
+
border: 1px solid var(--settings-border);
|
|
28691
|
+
border-radius: 7px;
|
|
28692
|
+
cursor: pointer;
|
|
28693
|
+
scroll-snap-align: start;
|
|
28694
|
+
}
|
|
28695
|
+
|
|
28696
|
+
.settings-connection-host-tab:hover {
|
|
28697
|
+
color: var(--settings-text);
|
|
28698
|
+
background: var(--settings-hover);
|
|
28699
|
+
}
|
|
28700
|
+
|
|
28701
|
+
.settings-connection-host-tab[aria-selected="true"] {
|
|
28702
|
+
color: var(--settings-text);
|
|
28703
|
+
font-weight: 600;
|
|
28704
|
+
background: var(--settings-active);
|
|
28705
|
+
border-color: var(--settings-border);
|
|
28706
|
+
}
|
|
28707
|
+
|
|
28708
|
+
.settings-connection-table-header,
|
|
28709
|
+
.settings-connection-row {
|
|
28710
|
+
display: grid;
|
|
28711
|
+
/* Component : Status : Actions = 4 : 3 : 3 */
|
|
28712
|
+
grid-template-columns: minmax(0, 4fr) minmax(0, 3fr) minmax(0, 3fr);
|
|
28713
|
+
align-items: center;
|
|
28714
|
+
min-width: 0;
|
|
28715
|
+
column-gap: 16px;
|
|
28716
|
+
}
|
|
28717
|
+
|
|
28718
|
+
.settings-connection-table-header {
|
|
28719
|
+
min-height: 30px;
|
|
28720
|
+
padding: 0 10px;
|
|
28721
|
+
color: var(--settings-muted);
|
|
28722
|
+
font-size: 10px;
|
|
28723
|
+
font-weight: 600;
|
|
28724
|
+
line-height: 16px;
|
|
28725
|
+
text-transform: uppercase;
|
|
28726
|
+
letter-spacing: 0.06em;
|
|
28727
|
+
background: var(--settings-surface);
|
|
28728
|
+
border-bottom: 1px solid var(--settings-divider);
|
|
28729
|
+
}
|
|
28730
|
+
|
|
28731
|
+
.settings-connection-rows > .settings-connection-row,
|
|
28732
|
+
.settings-connection-rows > .settings-connection-block {
|
|
28733
|
+
border-bottom: 1px solid var(--settings-divider);
|
|
28734
|
+
}
|
|
28735
|
+
|
|
28736
|
+
.settings-connection-rows > .settings-connection-row:last-child,
|
|
28737
|
+
.settings-connection-rows > .settings-connection-block:last-child {
|
|
28738
|
+
border-bottom: 0;
|
|
28739
|
+
}
|
|
28740
|
+
|
|
28741
|
+
.settings-connection-row {
|
|
28742
|
+
min-height: 52px;
|
|
28743
|
+
padding: 8px 10px;
|
|
28744
|
+
cursor: pointer;
|
|
28745
|
+
}
|
|
28746
|
+
|
|
28747
|
+
.settings-connection-row:hover {
|
|
28748
|
+
background: var(--settings-hover);
|
|
28749
|
+
}
|
|
28750
|
+
|
|
28751
|
+
.settings-connection-row[data-connection-selected="true"] {
|
|
28752
|
+
background: var(--settings-surface);
|
|
28753
|
+
}
|
|
28754
|
+
|
|
28755
|
+
.settings-connection-row__identity,
|
|
28756
|
+
.settings-connection-inspector__identity {
|
|
28757
|
+
display: inline-flex;
|
|
28758
|
+
align-items: center;
|
|
28759
|
+
min-width: 0;
|
|
28760
|
+
gap: 8px;
|
|
28761
|
+
color: var(--settings-text);
|
|
28762
|
+
}
|
|
28763
|
+
|
|
28764
|
+
.settings-connection-row__identity strong,
|
|
28765
|
+
.settings-connection-inspector__identity strong {
|
|
28766
|
+
min-width: 0;
|
|
28767
|
+
overflow-wrap: anywhere;
|
|
28768
|
+
font-size: 12px;
|
|
28769
|
+
font-weight: 500;
|
|
28770
|
+
line-height: 18px;
|
|
28771
|
+
}
|
|
28772
|
+
|
|
28773
|
+
.settings-connection-row__mark {
|
|
28774
|
+
display: inline-flex;
|
|
28775
|
+
align-items: center;
|
|
28776
|
+
justify-content: center;
|
|
28777
|
+
width: 24px;
|
|
28778
|
+
height: 24px;
|
|
28779
|
+
flex: none;
|
|
28780
|
+
color: var(--settings-mark);
|
|
28781
|
+
font-size: 10px;
|
|
28782
|
+
font-weight: 700;
|
|
28783
|
+
background: var(--settings-surface-strong);
|
|
28784
|
+
border-radius: 7px;
|
|
28785
|
+
}
|
|
28786
|
+
|
|
28787
|
+
.settings-connection-row__mark--logo {
|
|
28788
|
+
color: var(--settings-text);
|
|
28789
|
+
background: transparent;
|
|
28790
|
+
}
|
|
28791
|
+
|
|
28792
|
+
.settings-connection-row__mark--logo > img,
|
|
28793
|
+
.settings-connection-row__mark--logo > svg {
|
|
28794
|
+
display: block;
|
|
28795
|
+
max-width: 18px;
|
|
28796
|
+
max-height: 18px;
|
|
28797
|
+
}
|
|
28798
|
+
|
|
28799
|
+
.settings-connection-table-header > :last-child {
|
|
28800
|
+
text-align: end;
|
|
28801
|
+
}
|
|
28802
|
+
|
|
28803
|
+
.settings-connection-row__status {
|
|
28804
|
+
display: inline-flex;
|
|
28805
|
+
align-items: center;
|
|
28806
|
+
width: fit-content;
|
|
28807
|
+
max-width: 100%;
|
|
28808
|
+
gap: 6px;
|
|
28809
|
+
color: var(--settings-muted);
|
|
28810
|
+
font-size: 11px;
|
|
28811
|
+
font-weight: 500;
|
|
28812
|
+
line-height: 18px;
|
|
28813
|
+
}
|
|
28814
|
+
|
|
28815
|
+
.settings-connection-row__status::before {
|
|
28816
|
+
width: 6px;
|
|
28817
|
+
height: 6px;
|
|
28818
|
+
flex: none;
|
|
28819
|
+
content: "";
|
|
28820
|
+
background: currentColor;
|
|
28821
|
+
border-radius: 50%;
|
|
28822
|
+
}
|
|
28823
|
+
|
|
28824
|
+
.settings-connection-row__status[data-connection-tone="ready"] {
|
|
28825
|
+
color: var(--settings-success);
|
|
28826
|
+
}
|
|
28827
|
+
|
|
28828
|
+
.settings-connection-row__status[data-connection-tone="checking"] {
|
|
28829
|
+
color: var(--settings-warning);
|
|
28830
|
+
}
|
|
28831
|
+
|
|
28832
|
+
.settings-connection-row__status[data-connection-tone="setup"] {
|
|
28833
|
+
color: var(--settings-muted);
|
|
28834
|
+
}
|
|
28835
|
+
|
|
28836
|
+
.settings-connection-row__status[data-connection-tone="setup"]::before {
|
|
28837
|
+
background: transparent;
|
|
28838
|
+
border: 1.5px solid currentColor;
|
|
28839
|
+
}
|
|
28840
|
+
|
|
28841
|
+
.settings-connection-row__status[data-connection-tone="failed"] {
|
|
28842
|
+
color: var(--settings-danger);
|
|
28843
|
+
}
|
|
28844
|
+
|
|
28845
|
+
.settings-connection-row__action {
|
|
28846
|
+
display: flex;
|
|
28847
|
+
align-items: center;
|
|
28848
|
+
justify-content: flex-end;
|
|
28849
|
+
min-width: 0;
|
|
28850
|
+
gap: 4px;
|
|
28851
|
+
}
|
|
28852
|
+
|
|
28853
|
+
.settings-connection-row__handle {
|
|
28854
|
+
display: inline-flex;
|
|
28855
|
+
flex: none;
|
|
28856
|
+
align-items: center;
|
|
28857
|
+
justify-content: center;
|
|
28858
|
+
width: 16px;
|
|
28859
|
+
color: var(--settings-muted);
|
|
28860
|
+
cursor: grab;
|
|
28861
|
+
opacity: 0.6;
|
|
28862
|
+
}
|
|
28863
|
+
|
|
28864
|
+
.settings-connection-row__handle:hover {
|
|
28865
|
+
opacity: 1;
|
|
28866
|
+
}
|
|
28867
|
+
|
|
28868
|
+
.settings-connection-row[draggable="true"] {
|
|
28869
|
+
cursor: grab;
|
|
28870
|
+
}
|
|
28871
|
+
|
|
28872
|
+
.settings-connection-row[data-connection-dragging="true"] {
|
|
28873
|
+
opacity: 0.4;
|
|
28874
|
+
}
|
|
28875
|
+
|
|
28876
|
+
.settings-connection-row[data-connection-drop-indicator="before"] {
|
|
28877
|
+
box-shadow: inset 0 2px 0 0 var(--settings-focus);
|
|
28878
|
+
}
|
|
28879
|
+
|
|
28880
|
+
.settings-connection-row[data-connection-drop-indicator="after"] {
|
|
28881
|
+
box-shadow: inset 0 -2px 0 0 var(--settings-focus);
|
|
28882
|
+
}
|
|
28883
|
+
|
|
28884
|
+
.settings-connection-inline-detail {
|
|
28885
|
+
display: grid;
|
|
28886
|
+
gap: 12px;
|
|
28887
|
+
margin-top: 2px;
|
|
28888
|
+
padding: 14px 12px 16px;
|
|
28889
|
+
border-top: 1px solid var(--settings-divider);
|
|
28890
|
+
background: var(--settings-inset);
|
|
28891
|
+
}
|
|
28892
|
+
|
|
28893
|
+
.settings-connection-group-divider {
|
|
28894
|
+
padding: 10px 12px 6px;
|
|
28895
|
+
color: var(--settings-muted);
|
|
28896
|
+
font-size: 10px;
|
|
28897
|
+
font-weight: 600;
|
|
28898
|
+
line-height: 16px;
|
|
28899
|
+
text-transform: uppercase;
|
|
28900
|
+
letter-spacing: 0.06em;
|
|
28901
|
+
/* No border-top here: the row immediately above already carries its own
|
|
28902
|
+
border-bottom (it is no longer :last-child once this divider follows
|
|
28903
|
+
it), so adding one here would double the separator line. */
|
|
28904
|
+
}
|
|
28905
|
+
|
|
28906
|
+
.settings-connection-group-divider[data-connection-drag-over="true"] {
|
|
28907
|
+
color: var(--settings-focus);
|
|
28908
|
+
background: rgb(51 156 255 / 8%);
|
|
28909
|
+
border-radius: 6px;
|
|
28910
|
+
}
|
|
28911
|
+
|
|
28912
|
+
.settings-connection-group-more[data-connection-drag-over="true"] {
|
|
28913
|
+
background: rgb(51 156 255 / 8%);
|
|
28914
|
+
}
|
|
28915
|
+
|
|
28916
|
+
.settings-connection-group-hint {
|
|
28917
|
+
display: grid;
|
|
28918
|
+
gap: 3px;
|
|
28919
|
+
margin: 0 12px 12px;
|
|
28920
|
+
padding: 14px 16px;
|
|
28921
|
+
text-align: center;
|
|
28922
|
+
border: 1.5px dashed var(--settings-border);
|
|
28923
|
+
border-radius: 10px;
|
|
28924
|
+
}
|
|
28925
|
+
|
|
28926
|
+
.settings-connection-group-more[data-connection-drag-over="true"] .settings-connection-group-hint {
|
|
28927
|
+
border-color: var(--settings-focus);
|
|
28928
|
+
}
|
|
28929
|
+
|
|
28930
|
+
.settings-connection-group-hint strong {
|
|
28931
|
+
color: var(--settings-text);
|
|
28932
|
+
font-size: 12.5px;
|
|
28933
|
+
font-weight: 500;
|
|
28934
|
+
line-height: 18px;
|
|
28935
|
+
}
|
|
28936
|
+
|
|
28937
|
+
.settings-connection-group-hint span {
|
|
28938
|
+
color: var(--settings-muted);
|
|
28939
|
+
font-size: 12px;
|
|
28940
|
+
line-height: 17px;
|
|
28941
|
+
}
|
|
28942
|
+
|
|
28943
|
+
.settings-connection-group-reset {
|
|
28944
|
+
display: flex;
|
|
28945
|
+
width: 100%;
|
|
28946
|
+
align-items: center;
|
|
28947
|
+
gap: 6px;
|
|
28948
|
+
padding: 10px 12px;
|
|
28949
|
+
color: var(--settings-muted);
|
|
28950
|
+
font: inherit;
|
|
28951
|
+
font-size: 12px;
|
|
28952
|
+
text-align: left;
|
|
28953
|
+
background: transparent;
|
|
28954
|
+
border: 0;
|
|
28955
|
+
border-top: 1px solid var(--settings-divider);
|
|
28956
|
+
cursor: pointer;
|
|
28957
|
+
}
|
|
28958
|
+
|
|
28959
|
+
.settings-connection-group-reset:hover {
|
|
28960
|
+
color: var(--settings-text);
|
|
28961
|
+
background: var(--settings-hover);
|
|
28962
|
+
}
|
|
28963
|
+
|
|
28964
|
+
.settings-connection-install-link {
|
|
28965
|
+
display: inline-flex;
|
|
28966
|
+
align-items: center;
|
|
28967
|
+
justify-content: center;
|
|
28968
|
+
width: 26px;
|
|
28969
|
+
height: 26px;
|
|
28970
|
+
padding: 0;
|
|
28971
|
+
color: var(--settings-focus);
|
|
28972
|
+
font: inherit;
|
|
28973
|
+
text-decoration: none;
|
|
28974
|
+
background: transparent;
|
|
28975
|
+
border: 1px solid transparent;
|
|
28976
|
+
border-radius: 7px;
|
|
28977
|
+
cursor: pointer;
|
|
28978
|
+
}
|
|
28979
|
+
|
|
28980
|
+
.settings-connection-install-link:hover,
|
|
28981
|
+
.settings-connection-install-link:focus-visible {
|
|
28982
|
+
color: var(--settings-focus);
|
|
28983
|
+
background: var(--settings-active);
|
|
28984
|
+
border-color: var(--settings-border);
|
|
28985
|
+
}
|
|
28986
|
+
|
|
28987
|
+
.settings-connection-view-error {
|
|
28988
|
+
padding: 4px 7px;
|
|
28989
|
+
color: var(--settings-danger);
|
|
28990
|
+
font: inherit;
|
|
28991
|
+
font-size: 11px;
|
|
28992
|
+
line-height: 18px;
|
|
28993
|
+
background: transparent;
|
|
28994
|
+
border: 0;
|
|
28995
|
+
border-radius: 6px;
|
|
28996
|
+
cursor: pointer;
|
|
28997
|
+
}
|
|
28998
|
+
|
|
28999
|
+
.settings-connection-view-error:hover {
|
|
29000
|
+
color: var(--settings-danger);
|
|
29001
|
+
background: var(--settings-danger-bg);
|
|
29002
|
+
}
|
|
29003
|
+
|
|
29004
|
+
.settings-connection-inspector {
|
|
29005
|
+
position: sticky;
|
|
29006
|
+
top: 18px;
|
|
29007
|
+
}
|
|
29008
|
+
|
|
29009
|
+
.settings-connection-inspector__header {
|
|
29010
|
+
display: flex;
|
|
29011
|
+
align-items: flex-start;
|
|
29012
|
+
justify-content: space-between;
|
|
29013
|
+
min-width: 0;
|
|
29014
|
+
gap: 10px;
|
|
29015
|
+
padding: 12px;
|
|
29016
|
+
border-bottom: 1px solid var(--settings-divider);
|
|
29017
|
+
}
|
|
29018
|
+
|
|
29019
|
+
.settings-connection-inspector__body {
|
|
29020
|
+
display: grid;
|
|
29021
|
+
min-width: 0;
|
|
29022
|
+
gap: 12px;
|
|
29023
|
+
padding: 12px;
|
|
29024
|
+
}
|
|
29025
|
+
|
|
29026
|
+
.settings-connection-install-callout {
|
|
29027
|
+
display: grid;
|
|
29028
|
+
grid-template-columns: 28px minmax(0, 1fr);
|
|
29029
|
+
gap: 9px;
|
|
29030
|
+
padding: 11px;
|
|
29031
|
+
background: var(--settings-surface);
|
|
29032
|
+
border: 0;
|
|
29033
|
+
border-radius: 8px;
|
|
29034
|
+
}
|
|
29035
|
+
|
|
29036
|
+
.settings-connection-install-callout__icon {
|
|
29037
|
+
display: inline-flex;
|
|
29038
|
+
align-items: center;
|
|
29039
|
+
justify-content: center;
|
|
29040
|
+
width: 28px;
|
|
29041
|
+
height: 28px;
|
|
29042
|
+
color: var(--settings-focus);
|
|
29043
|
+
background: var(--settings-active);
|
|
29044
|
+
border-radius: 7px;
|
|
29045
|
+
}
|
|
29046
|
+
|
|
29047
|
+
.settings-connection-install-callout strong,
|
|
29048
|
+
.settings-connection-error-summary strong,
|
|
29049
|
+
.settings-connection-state-summary strong {
|
|
29050
|
+
display: block;
|
|
29051
|
+
margin: 0 0 4px;
|
|
29052
|
+
color: var(--settings-text);
|
|
29053
|
+
font-size: 12px;
|
|
29054
|
+
font-weight: 500;
|
|
29055
|
+
line-height: 18px;
|
|
29056
|
+
}
|
|
29057
|
+
|
|
29058
|
+
.settings-connection-install-callout p,
|
|
29059
|
+
.settings-connection-error-summary p,
|
|
29060
|
+
.settings-connection-state-summary p,
|
|
29061
|
+
.settings-connection-issue-note {
|
|
29062
|
+
margin: 0;
|
|
29063
|
+
color: var(--settings-muted);
|
|
29064
|
+
font-size: 11px;
|
|
29065
|
+
line-height: 16px;
|
|
29066
|
+
}
|
|
29067
|
+
|
|
29068
|
+
.settings-connection-install-command {
|
|
29069
|
+
display: grid;
|
|
29070
|
+
gap: 4px;
|
|
29071
|
+
margin-top: 8px;
|
|
29072
|
+
}
|
|
29073
|
+
|
|
29074
|
+
.settings-connection-install-command span {
|
|
29075
|
+
color: var(--settings-muted);
|
|
29076
|
+
font-size: 10px;
|
|
29077
|
+
font-weight: 600;
|
|
29078
|
+
line-height: 14px;
|
|
29079
|
+
letter-spacing: 0.04em;
|
|
29080
|
+
text-transform: uppercase;
|
|
29081
|
+
}
|
|
29082
|
+
|
|
29083
|
+
.settings-connection-install-command code {
|
|
29084
|
+
display: block;
|
|
29085
|
+
min-width: 0;
|
|
29086
|
+
overflow-wrap: anywhere;
|
|
29087
|
+
color: var(--settings-text);
|
|
29088
|
+
font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
29089
|
+
font-size: 11px;
|
|
29090
|
+
line-height: 16px;
|
|
29091
|
+
white-space: pre-wrap;
|
|
29092
|
+
}
|
|
29093
|
+
|
|
29094
|
+
.settings-connection-install-actions {
|
|
29095
|
+
display: flex;
|
|
29096
|
+
flex-wrap: wrap;
|
|
29097
|
+
align-items: center;
|
|
29098
|
+
gap: 8px;
|
|
29099
|
+
}
|
|
29100
|
+
|
|
29101
|
+
.settings-connection-copy-prompt {
|
|
29102
|
+
position: relative;
|
|
29103
|
+
}
|
|
29104
|
+
|
|
29105
|
+
.settings-connection-copy-prompt__tooltip {
|
|
29106
|
+
position: absolute;
|
|
29107
|
+
z-index: 4;
|
|
29108
|
+
bottom: calc(100% + 6px);
|
|
29109
|
+
left: 0;
|
|
29110
|
+
width: max-content;
|
|
29111
|
+
max-width: min(360px, 72vw);
|
|
29112
|
+
max-height: 180px;
|
|
29113
|
+
overflow: auto;
|
|
29114
|
+
padding: 8px 10px;
|
|
29115
|
+
color: var(--settings-text);
|
|
29116
|
+
font-size: 11px;
|
|
29117
|
+
line-height: 16px;
|
|
29118
|
+
white-space: pre-wrap;
|
|
29119
|
+
text-align: left;
|
|
29120
|
+
background: var(--settings-elevated);
|
|
29121
|
+
border: 1px solid var(--settings-border);
|
|
29122
|
+
border-radius: 8px;
|
|
29123
|
+
box-shadow: 0 10px 24px rgb(0 0 0 / 22%);
|
|
29124
|
+
opacity: 0;
|
|
29125
|
+
visibility: hidden;
|
|
29126
|
+
pointer-events: none;
|
|
29127
|
+
transition: opacity 120ms ease;
|
|
29128
|
+
}
|
|
29129
|
+
|
|
29130
|
+
.settings-connection-copy-prompt:hover .settings-connection-copy-prompt__tooltip,
|
|
29131
|
+
.settings-connection-copy-prompt:focus-within .settings-connection-copy-prompt__tooltip {
|
|
29132
|
+
opacity: 1;
|
|
29133
|
+
visibility: visible;
|
|
29134
|
+
}
|
|
29135
|
+
|
|
29136
|
+
.settings-connection-error-summary {
|
|
29137
|
+
padding: 13px 14px;
|
|
29138
|
+
color: var(--settings-danger);
|
|
29139
|
+
background: var(--settings-danger-bg);
|
|
29140
|
+
border: 1px solid var(--settings-danger-border);
|
|
29141
|
+
border-radius: 10px;
|
|
29142
|
+
}
|
|
29143
|
+
|
|
29144
|
+
.settings-connection-error-metadata {
|
|
29145
|
+
display: grid;
|
|
29146
|
+
gap: 7px;
|
|
29147
|
+
padding: 12px;
|
|
29148
|
+
background: var(--settings-inset);
|
|
29149
|
+
border: 1px solid var(--settings-border);
|
|
29150
|
+
border-radius: 9px;
|
|
29151
|
+
}
|
|
29152
|
+
|
|
29153
|
+
.settings-connection-detail-line {
|
|
29154
|
+
display: grid;
|
|
29155
|
+
grid-template-columns: 92px minmax(0, 1fr);
|
|
29156
|
+
gap: 10px;
|
|
29157
|
+
min-width: 0;
|
|
29158
|
+
color: var(--settings-muted);
|
|
29159
|
+
font-size: 10px;
|
|
29160
|
+
line-height: 16px;
|
|
29161
|
+
}
|
|
29162
|
+
|
|
29163
|
+
.settings-connection-detail-line code {
|
|
29164
|
+
min-width: 0;
|
|
29165
|
+
overflow-wrap: anywhere;
|
|
29166
|
+
color: var(--settings-text);
|
|
29167
|
+
font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
29168
|
+
white-space: pre-wrap;
|
|
29169
|
+
}
|
|
29170
|
+
|
|
29171
|
+
.settings-connection-error-log-header {
|
|
29172
|
+
display: flex;
|
|
29173
|
+
align-items: center;
|
|
29174
|
+
justify-content: space-between;
|
|
29175
|
+
gap: 10px;
|
|
29176
|
+
}
|
|
29177
|
+
|
|
29178
|
+
.settings-connection-error-log-header strong {
|
|
29179
|
+
color: var(--settings-text);
|
|
29180
|
+
font-size: 11px;
|
|
29181
|
+
font-weight: 600;
|
|
29182
|
+
}
|
|
29183
|
+
|
|
29184
|
+
.settings-connection-error-log-header .settings-command-button {
|
|
29185
|
+
min-height: 30px;
|
|
29186
|
+
padding: 5px 9px;
|
|
29187
|
+
font-size: 11px;
|
|
29188
|
+
}
|
|
29189
|
+
|
|
29190
|
+
.settings-connection-stderr {
|
|
29191
|
+
max-height: 220px;
|
|
29192
|
+
min-width: 0;
|
|
29193
|
+
margin: 0;
|
|
29194
|
+
padding: 11px;
|
|
29195
|
+
overflow: auto;
|
|
29196
|
+
color: var(--settings-text);
|
|
29197
|
+
font:
|
|
29198
|
+
10px/16px ui-monospace,
|
|
29199
|
+
"SFMono-Regular",
|
|
29200
|
+
Consolas,
|
|
29201
|
+
"Liberation Mono",
|
|
29202
|
+
monospace;
|
|
29203
|
+
white-space: pre-wrap;
|
|
29204
|
+
overflow-wrap: anywhere;
|
|
29205
|
+
background: var(--settings-inset);
|
|
29206
|
+
border: 1px solid var(--settings-border);
|
|
29207
|
+
border-radius: 9px;
|
|
29208
|
+
}
|
|
29209
|
+
|
|
29210
|
+
.settings-connection-error-actions {
|
|
29211
|
+
display: grid;
|
|
29212
|
+
grid-template-columns: minmax(0, 1fr);
|
|
29213
|
+
gap: 8px;
|
|
29214
|
+
}
|
|
29215
|
+
|
|
29216
|
+
.settings-connection-error-actions .settings-command-button {
|
|
29217
|
+
width: 100%;
|
|
29218
|
+
}
|
|
29219
|
+
|
|
29220
|
+
.settings-connection-issue-note {
|
|
29221
|
+
margin-top: -4px;
|
|
29222
|
+
}
|
|
29223
|
+
|
|
29224
|
+
.settings-connection-state-summary {
|
|
29225
|
+
padding: 14px;
|
|
29226
|
+
background: var(--settings-surface);
|
|
29227
|
+
border: 1px solid var(--settings-border);
|
|
29228
|
+
border-radius: 10px;
|
|
29229
|
+
}
|
|
29230
|
+
|
|
29231
|
+
.settings-empty {
|
|
29232
|
+
display: flex;
|
|
29233
|
+
align-items: center;
|
|
29234
|
+
min-height: 72px;
|
|
29235
|
+
padding: 12px 16px;
|
|
29236
|
+
}
|
|
29237
|
+
|
|
29238
|
+
.settings-empty > div {
|
|
29239
|
+
display: grid;
|
|
29240
|
+
min-width: 0;
|
|
29241
|
+
gap: 2px;
|
|
29242
|
+
}
|
|
29243
|
+
|
|
29244
|
+
.settings-empty strong {
|
|
29245
|
+
color: var(--settings-text);
|
|
29246
|
+
font-size: 13px;
|
|
29247
|
+
font-weight: 500;
|
|
29248
|
+
line-height: 19px;
|
|
29249
|
+
}
|
|
29250
|
+
|
|
29251
|
+
.settings-empty span {
|
|
29252
|
+
color: var(--settings-muted);
|
|
29253
|
+
font-size: 13px;
|
|
29254
|
+
line-height: 19px;
|
|
29255
|
+
}
|
|
29256
|
+
|
|
29257
|
+
.settings-about-page {
|
|
29258
|
+
display: flex;
|
|
29259
|
+
flex-direction: column;
|
|
29260
|
+
gap: 18px;
|
|
29261
|
+
box-sizing: border-box;
|
|
29262
|
+
min-height: min(620px, calc(100vh - 200px));
|
|
29263
|
+
max-width: 720px;
|
|
29264
|
+
}
|
|
29265
|
+
|
|
29266
|
+
.settings-about-page > .settings-section-label {
|
|
29267
|
+
padding-bottom: 10px;
|
|
29268
|
+
}
|
|
29269
|
+
|
|
29270
|
+
.settings-about-panel {
|
|
29271
|
+
display: grid;
|
|
29272
|
+
gap: 18px;
|
|
29273
|
+
padding: 24px;
|
|
29274
|
+
background: var(--settings-panel);
|
|
29275
|
+
border: 1px solid var(--settings-border);
|
|
29276
|
+
border-radius: 12px;
|
|
29277
|
+
}
|
|
29278
|
+
|
|
29279
|
+
.settings-about-product {
|
|
29280
|
+
color: var(--settings-text);
|
|
29281
|
+
font-size: 24px;
|
|
29282
|
+
font-weight: 700;
|
|
29283
|
+
line-height: 32px;
|
|
29284
|
+
}
|
|
29285
|
+
|
|
29286
|
+
.settings-about-tagline {
|
|
29287
|
+
color: var(--settings-text);
|
|
29288
|
+
font-size: 16px;
|
|
29289
|
+
font-weight: 600;
|
|
29290
|
+
line-height: 24px;
|
|
29291
|
+
}
|
|
29292
|
+
|
|
29293
|
+
.settings-about-copy {
|
|
29294
|
+
display: grid;
|
|
29295
|
+
max-width: 660px;
|
|
29296
|
+
gap: 12px;
|
|
29297
|
+
}
|
|
29298
|
+
|
|
29299
|
+
.settings-about-lead,
|
|
29300
|
+
.settings-about-extension,
|
|
29301
|
+
.settings-about-closing p,
|
|
29302
|
+
.settings-about-copy p {
|
|
29303
|
+
margin: 0;
|
|
29304
|
+
color: var(--settings-muted);
|
|
29305
|
+
font-size: 13px;
|
|
29306
|
+
line-height: 21px;
|
|
29307
|
+
}
|
|
29308
|
+
|
|
29309
|
+
.settings-about-lead {
|
|
29310
|
+
color: var(--settings-text);
|
|
29311
|
+
font-weight: 500;
|
|
29312
|
+
}
|
|
29313
|
+
|
|
29314
|
+
.settings-about-agents {
|
|
29315
|
+
display: grid;
|
|
29316
|
+
gap: 10px;
|
|
29317
|
+
margin: 2px 0;
|
|
29318
|
+
padding: 0;
|
|
29319
|
+
list-style: none;
|
|
29320
|
+
}
|
|
29321
|
+
|
|
29322
|
+
.settings-about-agent {
|
|
29323
|
+
display: grid;
|
|
29324
|
+
gap: 4px;
|
|
29325
|
+
padding-left: 2px;
|
|
29326
|
+
}
|
|
29327
|
+
|
|
29328
|
+
.settings-about-agent-name {
|
|
29329
|
+
color: var(--settings-text);
|
|
29330
|
+
font-size: 13px;
|
|
29331
|
+
font-weight: 600;
|
|
29332
|
+
line-height: 18px;
|
|
29333
|
+
}
|
|
29334
|
+
|
|
29335
|
+
.settings-about-agent-name::before {
|
|
29336
|
+
content: "\xB7 ";
|
|
29337
|
+
color: var(--settings-muted);
|
|
29338
|
+
font-weight: 600;
|
|
29339
|
+
}
|
|
29340
|
+
|
|
29341
|
+
.settings-about-agent-description {
|
|
29342
|
+
display: block;
|
|
29343
|
+
padding-left: 0.85em;
|
|
29344
|
+
color: var(--settings-muted);
|
|
29345
|
+
font-size: 12px;
|
|
29346
|
+
font-weight: 400;
|
|
29347
|
+
line-height: 18px;
|
|
29348
|
+
}
|
|
29349
|
+
|
|
29350
|
+
.settings-about-closing {
|
|
29351
|
+
display: grid;
|
|
29352
|
+
gap: 8px;
|
|
29353
|
+
}
|
|
29354
|
+
|
|
29355
|
+
.settings-about-repository {
|
|
29356
|
+
gap: 10px;
|
|
29357
|
+
}
|
|
29358
|
+
|
|
29359
|
+
.settings-about-open-source {
|
|
29360
|
+
display: flex;
|
|
29361
|
+
align-items: center;
|
|
29362
|
+
flex-wrap: wrap;
|
|
29363
|
+
gap: 0.35em;
|
|
29364
|
+
margin: 0;
|
|
29365
|
+
color: var(--settings-muted);
|
|
29366
|
+
font-size: 13px;
|
|
29367
|
+
line-height: 21px;
|
|
29368
|
+
}
|
|
29369
|
+
|
|
29370
|
+
.settings-about-repository p {
|
|
29371
|
+
margin: 0;
|
|
29372
|
+
color: var(--settings-muted);
|
|
29373
|
+
font-size: 13px;
|
|
29374
|
+
line-height: 21px;
|
|
29375
|
+
}
|
|
29376
|
+
|
|
29377
|
+
.settings-about-star-callout {
|
|
29378
|
+
margin: 4px 0 0;
|
|
29379
|
+
color: var(--settings-warning);
|
|
29380
|
+
font-size: 14px;
|
|
29381
|
+
font-weight: 600;
|
|
29382
|
+
line-height: 22px;
|
|
29383
|
+
}
|
|
29384
|
+
|
|
29385
|
+
.settings-about-repository-link {
|
|
29386
|
+
display: inline-flex;
|
|
29387
|
+
align-items: center;
|
|
29388
|
+
gap: 6px;
|
|
29389
|
+
color: #7cb8ff;
|
|
29390
|
+
font-weight: 600;
|
|
29391
|
+
line-height: 1;
|
|
29392
|
+
text-decoration: none;
|
|
29393
|
+
}
|
|
29394
|
+
|
|
29395
|
+
.settings-about-repository-link .codexhost-settings-icon {
|
|
29396
|
+
display: block;
|
|
29397
|
+
flex: none;
|
|
29398
|
+
}
|
|
29399
|
+
|
|
29400
|
+
.settings-about-repository-link:hover {
|
|
29401
|
+
text-decoration: underline;
|
|
29402
|
+
}
|
|
29403
|
+
|
|
29404
|
+
.settings-about-brand {
|
|
29405
|
+
display: flex;
|
|
29406
|
+
align-items: center;
|
|
29407
|
+
justify-content: center;
|
|
29408
|
+
gap: 12px;
|
|
29409
|
+
margin-top: auto;
|
|
29410
|
+
padding-top: 12px;
|
|
29411
|
+
color: inherit;
|
|
29412
|
+
opacity: 0.9;
|
|
29413
|
+
text-decoration: none;
|
|
29414
|
+
transition: opacity 160ms ease;
|
|
29415
|
+
}
|
|
29416
|
+
|
|
29417
|
+
.settings-about-brand:hover {
|
|
29418
|
+
opacity: 1;
|
|
29419
|
+
}
|
|
29420
|
+
|
|
29421
|
+
.settings-about-brand-video {
|
|
29422
|
+
width: 40px;
|
|
29423
|
+
height: 40px;
|
|
29424
|
+
flex: none;
|
|
29425
|
+
overflow: hidden;
|
|
29426
|
+
object-fit: cover;
|
|
29427
|
+
border-radius: 999px;
|
|
29428
|
+
box-shadow: 0 1px 2px rgb(0 0 0 / 18%);
|
|
29429
|
+
}
|
|
29430
|
+
|
|
29431
|
+
.settings-about-brand-copy {
|
|
29432
|
+
display: flex;
|
|
29433
|
+
flex-direction: column;
|
|
29434
|
+
align-items: flex-start;
|
|
29435
|
+
gap: 2px;
|
|
29436
|
+
}
|
|
29437
|
+
|
|
29438
|
+
.settings-about-brand-name {
|
|
29439
|
+
color: var(--settings-text);
|
|
29440
|
+
font-size: 14px;
|
|
29441
|
+
font-weight: 800;
|
|
29442
|
+
letter-spacing: 0.18em;
|
|
29443
|
+
line-height: 18px;
|
|
29444
|
+
}
|
|
29445
|
+
|
|
29446
|
+
.settings-about-brand-tagline {
|
|
29447
|
+
color: var(--settings-muted);
|
|
29448
|
+
font-size: 12px;
|
|
29449
|
+
font-weight: 500;
|
|
29450
|
+
letter-spacing: 0.18em;
|
|
29451
|
+
line-height: 16px;
|
|
29452
|
+
}
|
|
29453
|
+
|
|
29454
|
+
.settings-page-error {
|
|
29455
|
+
padding: 16px;
|
|
29456
|
+
color: var(--settings-text);
|
|
29457
|
+
font-size: 13px;
|
|
29458
|
+
background: var(--settings-panel);
|
|
29459
|
+
border: 1px solid var(--settings-border);
|
|
29460
|
+
border-radius: 20px;
|
|
29461
|
+
}
|
|
29462
|
+
|
|
29463
|
+
.settings-update-metadata {
|
|
29464
|
+
display: grid;
|
|
29465
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
29466
|
+
gap: 24px;
|
|
29467
|
+
margin-bottom: 24px;
|
|
29468
|
+
padding: 0 0 20px;
|
|
29469
|
+
border-bottom: 1px solid var(--settings-divider);
|
|
29470
|
+
}
|
|
29471
|
+
|
|
29472
|
+
.settings-update-metadata__item {
|
|
29473
|
+
display: grid;
|
|
29474
|
+
min-width: 0;
|
|
29475
|
+
gap: 4px;
|
|
29476
|
+
}
|
|
29477
|
+
|
|
29478
|
+
.settings-update-metadata__item span {
|
|
29479
|
+
color: var(--settings-muted);
|
|
29480
|
+
font-size: 12px;
|
|
29481
|
+
line-height: 18px;
|
|
29482
|
+
}
|
|
29483
|
+
|
|
29484
|
+
.settings-update-metadata__item strong {
|
|
29485
|
+
min-width: 0;
|
|
29486
|
+
overflow-wrap: anywhere;
|
|
29487
|
+
color: var(--settings-text);
|
|
29488
|
+
font-size: 15px;
|
|
29489
|
+
font-weight: 500;
|
|
29490
|
+
line-height: 22px;
|
|
29491
|
+
}
|
|
29492
|
+
|
|
29493
|
+
/* The only emphasis on this screen: a latest version newer than the installed one. */
|
|
29494
|
+
.settings-update-metadata__value--newer {
|
|
29495
|
+
color: var(--settings-focus);
|
|
29496
|
+
}
|
|
29497
|
+
|
|
29498
|
+
.settings-update-panel {
|
|
29499
|
+
display: grid;
|
|
29500
|
+
gap: 12px;
|
|
29501
|
+
padding: 20px;
|
|
29502
|
+
color: var(--settings-text);
|
|
29503
|
+
background: var(--settings-panel);
|
|
29504
|
+
border: 1px solid var(--settings-border);
|
|
29505
|
+
border-radius: 8px;
|
|
29506
|
+
}
|
|
29507
|
+
|
|
29508
|
+
/* Soft status copy and the Update action should not sit in a framed card. */
|
|
29509
|
+
.settings-update-panel[data-update-state="unavailable"],
|
|
29510
|
+
.settings-update-panel[data-update-state="failed"],
|
|
29511
|
+
.settings-update-panel[data-update-state="error"],
|
|
29512
|
+
.settings-update-panel[data-update-state="available"] {
|
|
29513
|
+
padding: 4px 0 0;
|
|
29514
|
+
border: 0;
|
|
29515
|
+
border-radius: 0;
|
|
29516
|
+
}
|
|
29517
|
+
|
|
29518
|
+
.settings-update-panel__status-row {
|
|
29519
|
+
display: flex;
|
|
29520
|
+
align-items: center;
|
|
29521
|
+
flex-wrap: wrap;
|
|
29522
|
+
gap: 8px;
|
|
29523
|
+
min-width: 0;
|
|
29524
|
+
}
|
|
29525
|
+
|
|
29526
|
+
.settings-update-panel__status-row .settings-update-actions {
|
|
29527
|
+
flex: none;
|
|
29528
|
+
}
|
|
29529
|
+
|
|
29530
|
+
.settings-update-panel__status-row .settings-update-panel__head {
|
|
29531
|
+
flex: 1 1 auto;
|
|
29532
|
+
min-width: 0;
|
|
29533
|
+
}
|
|
29534
|
+
|
|
29535
|
+
.settings-update-panel__head {
|
|
29536
|
+
display: flex;
|
|
29537
|
+
align-items: center;
|
|
29538
|
+
min-width: 0;
|
|
29539
|
+
gap: 8px;
|
|
29540
|
+
}
|
|
29541
|
+
|
|
29542
|
+
.settings-update-panel__head .codexhost-settings-icon {
|
|
29543
|
+
color: var(--settings-muted);
|
|
29544
|
+
}
|
|
29545
|
+
|
|
29546
|
+
.settings-update-panel[data-update-state="available"]
|
|
29547
|
+
.settings-update-panel__head
|
|
29548
|
+
.codexhost-settings-icon,
|
|
29549
|
+
.settings-update-panel[data-update-state="downloading"]
|
|
29550
|
+
.settings-update-panel__head
|
|
29551
|
+
.codexhost-settings-icon,
|
|
29552
|
+
.settings-update-panel[data-update-state="installing"]
|
|
29553
|
+
.settings-update-panel__head
|
|
29554
|
+
.codexhost-settings-icon,
|
|
29555
|
+
.settings-update-panel[data-update-state="restarting"]
|
|
29556
|
+
.settings-update-panel__head
|
|
29557
|
+
.codexhost-settings-icon {
|
|
29558
|
+
color: var(--settings-focus);
|
|
29559
|
+
}
|
|
29560
|
+
|
|
29561
|
+
.settings-update-panel[data-update-state="current"]
|
|
29562
|
+
.settings-update-panel__head
|
|
29563
|
+
.codexhost-settings-icon {
|
|
29564
|
+
color: var(--settings-success);
|
|
29565
|
+
}
|
|
29566
|
+
|
|
29567
|
+
.settings-update-panel[data-update-state="failed"]
|
|
29568
|
+
.settings-update-panel__head
|
|
29569
|
+
.codexhost-settings-icon,
|
|
29570
|
+
.settings-update-panel[data-update-state="error"]
|
|
29571
|
+
.settings-update-panel__head
|
|
29572
|
+
.codexhost-settings-icon {
|
|
29573
|
+
color: var(--settings-danger);
|
|
29574
|
+
}
|
|
29575
|
+
|
|
29576
|
+
.settings-update-panel[data-update-state="unavailable"]
|
|
29577
|
+
.settings-update-panel__head
|
|
29578
|
+
.codexhost-settings-icon {
|
|
29579
|
+
color: var(--settings-muted);
|
|
29580
|
+
}
|
|
29581
|
+
|
|
29582
|
+
.settings-update-panel__title {
|
|
29583
|
+
min-width: 0;
|
|
29584
|
+
overflow-wrap: anywhere;
|
|
29585
|
+
color: var(--settings-text);
|
|
29586
|
+
font-size: 14px;
|
|
29587
|
+
font-weight: 600;
|
|
29588
|
+
line-height: 22px;
|
|
29589
|
+
}
|
|
29590
|
+
|
|
29591
|
+
.settings-update-summary,
|
|
29592
|
+
.settings-update-error {
|
|
29593
|
+
margin: 0;
|
|
29594
|
+
overflow-wrap: anywhere;
|
|
29595
|
+
font-size: 13px;
|
|
29596
|
+
line-height: 20px;
|
|
29597
|
+
}
|
|
29598
|
+
|
|
29599
|
+
.settings-update-summary {
|
|
29600
|
+
color: var(--settings-muted);
|
|
29601
|
+
}
|
|
29602
|
+
|
|
29603
|
+
.settings-update-error {
|
|
29604
|
+
color: var(--settings-danger);
|
|
29605
|
+
}
|
|
29606
|
+
|
|
29607
|
+
.settings-update-progress {
|
|
29608
|
+
width: 100%;
|
|
29609
|
+
height: 8px;
|
|
29610
|
+
accent-color: var(--settings-focus);
|
|
29611
|
+
}
|
|
29612
|
+
|
|
29613
|
+
.settings-update-progress-detail {
|
|
29614
|
+
color: var(--settings-muted);
|
|
29615
|
+
font-size: 12px;
|
|
29616
|
+
line-height: 18px;
|
|
29617
|
+
}
|
|
29618
|
+
|
|
29619
|
+
/* Release notes scroll with the page; a scroller inside a scroller traps the wheel. */
|
|
29620
|
+
.settings-update-notes-section {
|
|
29621
|
+
min-width: 0;
|
|
29622
|
+
margin-top: 24px;
|
|
29623
|
+
padding-top: 24px;
|
|
29624
|
+
border-top: 1px solid var(--settings-divider);
|
|
29625
|
+
}
|
|
29626
|
+
|
|
29627
|
+
.settings-update-notes-section:empty {
|
|
29628
|
+
display: none;
|
|
29629
|
+
}
|
|
29630
|
+
|
|
29631
|
+
.settings-update-notes {
|
|
29632
|
+
display: grid;
|
|
29633
|
+
min-width: 0;
|
|
29634
|
+
gap: 12px;
|
|
29635
|
+
color: var(--settings-muted);
|
|
29636
|
+
font-size: 14px;
|
|
29637
|
+
line-height: 22px;
|
|
29638
|
+
overflow-wrap: anywhere;
|
|
29639
|
+
}
|
|
29640
|
+
|
|
29641
|
+
.settings-update-notes > :first-child {
|
|
29642
|
+
margin-top: 0;
|
|
29643
|
+
}
|
|
29644
|
+
|
|
29645
|
+
.settings-update-notes > :last-child {
|
|
29646
|
+
margin-bottom: 0;
|
|
29647
|
+
}
|
|
29648
|
+
|
|
29649
|
+
.settings-update-notes h1,
|
|
29650
|
+
.settings-update-notes h2,
|
|
29651
|
+
.settings-update-notes h3,
|
|
29652
|
+
.settings-update-notes h4,
|
|
29653
|
+
.settings-update-notes h5,
|
|
29654
|
+
.settings-update-notes h6 {
|
|
29655
|
+
margin: 6px 0 0;
|
|
29656
|
+
color: var(--settings-text);
|
|
29657
|
+
font-weight: 600;
|
|
29658
|
+
}
|
|
29659
|
+
|
|
29660
|
+
.settings-update-notes h1 {
|
|
29661
|
+
font-size: 18px;
|
|
29662
|
+
line-height: 26px;
|
|
29663
|
+
}
|
|
29664
|
+
|
|
29665
|
+
.settings-update-notes h2 {
|
|
29666
|
+
font-size: 17px;
|
|
29667
|
+
line-height: 24px;
|
|
29668
|
+
}
|
|
29669
|
+
|
|
29670
|
+
.settings-update-notes h3,
|
|
29671
|
+
.settings-update-notes h4,
|
|
29672
|
+
.settings-update-notes h5,
|
|
29673
|
+
.settings-update-notes h6 {
|
|
29674
|
+
font-size: 14px;
|
|
29675
|
+
line-height: 22px;
|
|
29676
|
+
}
|
|
29677
|
+
|
|
29678
|
+
.settings-update-notes p,
|
|
29679
|
+
.settings-update-notes ul,
|
|
29680
|
+
.settings-update-notes ol,
|
|
29681
|
+
.settings-update-notes pre,
|
|
29682
|
+
.settings-update-notes blockquote {
|
|
29683
|
+
margin: 0;
|
|
29684
|
+
}
|
|
29685
|
+
|
|
29686
|
+
.settings-update-notes ul,
|
|
29687
|
+
.settings-update-notes ol {
|
|
29688
|
+
padding-left: 24px;
|
|
29689
|
+
}
|
|
29690
|
+
|
|
29691
|
+
.settings-update-notes li {
|
|
29692
|
+
padding-left: 4px;
|
|
29693
|
+
}
|
|
29694
|
+
|
|
29695
|
+
.settings-update-notes li::marker {
|
|
29696
|
+
color: var(--settings-muted);
|
|
29697
|
+
font-size: 0.85em;
|
|
29698
|
+
}
|
|
29699
|
+
|
|
29700
|
+
.settings-update-notes li + li {
|
|
29701
|
+
margin-top: 14px;
|
|
29702
|
+
}
|
|
29703
|
+
|
|
29704
|
+
.settings-update-notes .release-note-translation {
|
|
29705
|
+
display: block;
|
|
29706
|
+
margin-top: 3px;
|
|
29707
|
+
color: var(--settings-muted);
|
|
29708
|
+
font-size: 13px;
|
|
29709
|
+
line-height: 20px;
|
|
29710
|
+
}
|
|
29711
|
+
|
|
29712
|
+
.settings-update-notes blockquote {
|
|
29713
|
+
padding: 8px 12px;
|
|
29714
|
+
color: var(--settings-muted);
|
|
29715
|
+
border-left: 3px solid var(--settings-focus);
|
|
29716
|
+
background: var(--settings-surface);
|
|
29717
|
+
}
|
|
29718
|
+
|
|
29719
|
+
.settings-update-notes hr {
|
|
29720
|
+
width: 100%;
|
|
29721
|
+
margin: 2px 0;
|
|
29722
|
+
border: 0;
|
|
29723
|
+
border-top: 1px solid var(--settings-divider);
|
|
29724
|
+
}
|
|
29725
|
+
|
|
29726
|
+
.settings-update-notes strong {
|
|
29727
|
+
color: var(--settings-text);
|
|
29728
|
+
font-weight: 600;
|
|
29729
|
+
}
|
|
29730
|
+
|
|
29731
|
+
.settings-update-notes a {
|
|
29732
|
+
color: var(--settings-focus);
|
|
29733
|
+
text-decoration: none;
|
|
29734
|
+
}
|
|
29735
|
+
|
|
29736
|
+
.settings-update-notes a:hover {
|
|
29737
|
+
text-decoration: underline;
|
|
29738
|
+
}
|
|
29739
|
+
|
|
29740
|
+
.settings-update-notes code {
|
|
29741
|
+
font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
29742
|
+
font-size: 12px;
|
|
29743
|
+
}
|
|
29744
|
+
|
|
29745
|
+
.settings-update-notes :not(pre) > code {
|
|
29746
|
+
padding: 1px 5px;
|
|
29747
|
+
background: var(--settings-surface-strong);
|
|
29748
|
+
border-radius: 4px;
|
|
29749
|
+
}
|
|
29750
|
+
|
|
29751
|
+
.settings-update-notes pre {
|
|
29752
|
+
min-width: 0;
|
|
29753
|
+
max-width: 100%;
|
|
29754
|
+
padding: 10px 12px;
|
|
29755
|
+
overflow-x: auto;
|
|
29756
|
+
overflow-y: hidden;
|
|
29757
|
+
background: var(--settings-inset);
|
|
29758
|
+
border-radius: 6px;
|
|
29759
|
+
}
|
|
29760
|
+
|
|
29761
|
+
.settings-update-notes pre code {
|
|
29762
|
+
line-height: 18px;
|
|
29763
|
+
white-space: pre-wrap;
|
|
29764
|
+
}
|
|
29765
|
+
|
|
29766
|
+
/* Manual update sits directly under the status panel, not behind a disclosure:
|
|
29767
|
+
automatic updates can fail for machine-local reasons and this is the way out. */
|
|
29768
|
+
.settings-update-controls {
|
|
29769
|
+
display: grid;
|
|
29770
|
+
min-width: 0;
|
|
29771
|
+
gap: 10px;
|
|
29772
|
+
margin-top: 24px;
|
|
29773
|
+
}
|
|
29774
|
+
|
|
29775
|
+
.settings-update-manual-title {
|
|
29776
|
+
color: var(--settings-text);
|
|
29777
|
+
font-size: 15px;
|
|
29778
|
+
font-weight: 600;
|
|
29779
|
+
line-height: 22px;
|
|
29780
|
+
}
|
|
29781
|
+
|
|
29782
|
+
.settings-update-manual {
|
|
29783
|
+
display: grid;
|
|
29784
|
+
min-width: 0;
|
|
29785
|
+
gap: 8px;
|
|
29786
|
+
}
|
|
29787
|
+
|
|
29788
|
+
.settings-update-manual[hidden] {
|
|
29789
|
+
display: none;
|
|
29790
|
+
}
|
|
29791
|
+
|
|
29792
|
+
.settings-update-manual-description {
|
|
29793
|
+
margin: 0;
|
|
29794
|
+
color: var(--settings-muted);
|
|
29795
|
+
font-size: 12px;
|
|
29796
|
+
line-height: 18px;
|
|
29797
|
+
}
|
|
29798
|
+
|
|
29799
|
+
.settings-update-manual-description.is-fallback {
|
|
29800
|
+
color: var(--settings-danger);
|
|
29801
|
+
}
|
|
29802
|
+
|
|
29803
|
+
.settings-update-command {
|
|
29804
|
+
display: flex;
|
|
29805
|
+
align-items: stretch;
|
|
29806
|
+
min-width: 0;
|
|
29807
|
+
overflow: hidden;
|
|
29808
|
+
border: 1px solid var(--settings-border);
|
|
29809
|
+
border-radius: 6px;
|
|
29810
|
+
}
|
|
29811
|
+
|
|
29812
|
+
.settings-update-command code {
|
|
29813
|
+
min-width: 0;
|
|
29814
|
+
flex: 1;
|
|
29815
|
+
padding: 9px 12px;
|
|
29816
|
+
overflow-x: auto;
|
|
29817
|
+
color: var(--settings-text);
|
|
29818
|
+
font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
29819
|
+
font-size: 12px;
|
|
29820
|
+
line-height: 20px;
|
|
29821
|
+
white-space: nowrap;
|
|
29822
|
+
}
|
|
29823
|
+
|
|
29824
|
+
.settings-update-command__copy {
|
|
29825
|
+
display: inline-flex;
|
|
29826
|
+
align-items: center;
|
|
29827
|
+
flex: none;
|
|
29828
|
+
gap: 6px;
|
|
29829
|
+
padding: 0 12px;
|
|
29830
|
+
color: var(--settings-muted);
|
|
29831
|
+
font-size: 12px;
|
|
29832
|
+
background: transparent;
|
|
29833
|
+
border: 0;
|
|
29834
|
+
border-left: 1px solid var(--settings-border);
|
|
29835
|
+
cursor: pointer;
|
|
29836
|
+
}
|
|
29837
|
+
|
|
29838
|
+
.settings-update-command__copy:hover {
|
|
29839
|
+
color: var(--settings-text);
|
|
29840
|
+
background: var(--settings-hover);
|
|
29841
|
+
}
|
|
29842
|
+
|
|
29843
|
+
.settings-update-command__copy:focus-visible {
|
|
29844
|
+
outline: 2px solid var(--settings-focus);
|
|
29845
|
+
outline-offset: -2px;
|
|
29846
|
+
}
|
|
29847
|
+
|
|
29848
|
+
.settings-update-actions {
|
|
29849
|
+
display: flex;
|
|
29850
|
+
align-items: center;
|
|
29851
|
+
min-width: 0;
|
|
29852
|
+
gap: 12px;
|
|
29853
|
+
flex-wrap: wrap;
|
|
29854
|
+
}
|
|
29855
|
+
|
|
29856
|
+
.settings-command-button,
|
|
29857
|
+
.settings-update-link {
|
|
29858
|
+
display: inline-flex;
|
|
29859
|
+
align-items: center;
|
|
29860
|
+
justify-content: center;
|
|
29861
|
+
flex: none;
|
|
29862
|
+
width: max-content;
|
|
29863
|
+
max-width: 100%;
|
|
29864
|
+
min-height: 30px;
|
|
29865
|
+
gap: 6px;
|
|
29866
|
+
padding: 5px 10px;
|
|
29867
|
+
white-space: nowrap;
|
|
29868
|
+
color: var(--settings-primary-text);
|
|
29869
|
+
font: inherit;
|
|
29870
|
+
font-size: 12px;
|
|
29871
|
+
text-decoration: none;
|
|
29872
|
+
background: var(--settings-primary);
|
|
29873
|
+
border: 1px solid var(--settings-primary);
|
|
29874
|
+
border-radius: 7px;
|
|
29875
|
+
cursor: pointer;
|
|
29876
|
+
}
|
|
29877
|
+
|
|
29878
|
+
.settings-command-button--secondary,
|
|
29879
|
+
.settings-update-link {
|
|
29880
|
+
color: var(--settings-muted);
|
|
29881
|
+
background: transparent;
|
|
29882
|
+
border-color: var(--settings-border);
|
|
29883
|
+
}
|
|
29884
|
+
|
|
29885
|
+
.settings-command-button--secondary .codexhost-settings-icon,
|
|
29886
|
+
.settings-update-link .codexhost-settings-icon {
|
|
29887
|
+
color: var(--settings-muted);
|
|
29888
|
+
}
|
|
29889
|
+
|
|
29890
|
+
.settings-command-button:hover:not(.settings-command-button--secondary) {
|
|
29891
|
+
filter: brightness(1.08);
|
|
29892
|
+
}
|
|
29893
|
+
|
|
29894
|
+
.settings-command-button--danger {
|
|
29895
|
+
color: var(--settings-danger);
|
|
29896
|
+
}
|
|
29897
|
+
|
|
29898
|
+
.settings-command-button--danger:hover:not(:disabled) {
|
|
29899
|
+
color: #fecaca;
|
|
29900
|
+
background: var(--settings-danger-bg);
|
|
29901
|
+
border-color: var(--settings-danger-border);
|
|
29902
|
+
}
|
|
29903
|
+
|
|
29904
|
+
.settings-command-button--secondary:hover,
|
|
29905
|
+
.settings-update-link:hover {
|
|
29906
|
+
color: var(--settings-text);
|
|
29907
|
+
background: var(--settings-hover);
|
|
29908
|
+
}
|
|
29909
|
+
|
|
29910
|
+
.settings-command-button--secondary:hover .codexhost-settings-icon,
|
|
29911
|
+
.settings-update-link:hover .codexhost-settings-icon {
|
|
29912
|
+
color: var(--settings-text);
|
|
29913
|
+
}
|
|
29914
|
+
|
|
29915
|
+
.settings-command-button:disabled,
|
|
29916
|
+
.settings-command-button[aria-disabled="true"] {
|
|
29917
|
+
opacity: 0.55;
|
|
29918
|
+
cursor: not-allowed;
|
|
29919
|
+
filter: none;
|
|
29920
|
+
}
|
|
29921
|
+
|
|
29922
|
+
.settings-command-button:focus-visible,
|
|
29923
|
+
.settings-update-link:focus-visible {
|
|
29924
|
+
outline: 2px solid var(--settings-focus);
|
|
29925
|
+
outline-offset: 2px;
|
|
29926
|
+
}
|
|
29927
|
+
|
|
29928
|
+
.settings-visually-hidden {
|
|
29929
|
+
position: absolute;
|
|
29930
|
+
width: 1px;
|
|
29931
|
+
height: 1px;
|
|
29932
|
+
padding: 0;
|
|
29933
|
+
margin: -1px;
|
|
29934
|
+
overflow: hidden;
|
|
29935
|
+
clip: rect(0, 0, 0, 0);
|
|
29936
|
+
white-space: nowrap;
|
|
29937
|
+
border: 0;
|
|
29938
|
+
}
|
|
29939
|
+
|
|
29940
|
+
.settings-session-import-content {
|
|
29941
|
+
display: grid;
|
|
29942
|
+
min-width: 0;
|
|
29943
|
+
gap: 12px;
|
|
29944
|
+
margin-top: 16px;
|
|
29945
|
+
}
|
|
29946
|
+
|
|
29947
|
+
.settings-session-import-list {
|
|
29948
|
+
display: grid;
|
|
29949
|
+
min-width: 0;
|
|
29950
|
+
overflow: hidden;
|
|
29951
|
+
background: var(--settings-surface);
|
|
29952
|
+
border: 1px solid var(--settings-border);
|
|
29953
|
+
border-radius: 12px;
|
|
29954
|
+
}
|
|
29955
|
+
|
|
29956
|
+
.settings-session-import-row {
|
|
29957
|
+
display: grid;
|
|
29958
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
29959
|
+
align-items: center;
|
|
29960
|
+
min-width: 0;
|
|
29961
|
+
gap: 16px;
|
|
29962
|
+
padding: 14px 16px;
|
|
29963
|
+
border-bottom: 1px solid var(--settings-divider);
|
|
29964
|
+
}
|
|
29965
|
+
|
|
29966
|
+
.settings-session-import-row:last-child {
|
|
29967
|
+
border-bottom: 0;
|
|
29968
|
+
}
|
|
29969
|
+
|
|
29970
|
+
.settings-session-import-row__copy {
|
|
29971
|
+
display: grid;
|
|
29972
|
+
min-width: 0;
|
|
29973
|
+
gap: 4px;
|
|
29974
|
+
}
|
|
29975
|
+
|
|
29976
|
+
.settings-session-import-row__copy strong {
|
|
29977
|
+
color: var(--settings-text);
|
|
29978
|
+
font-size: 14px;
|
|
29979
|
+
font-weight: 600;
|
|
29980
|
+
line-height: 20px;
|
|
29981
|
+
}
|
|
29982
|
+
|
|
29983
|
+
.settings-session-import-row__copy span,
|
|
29984
|
+
.settings-session-import-row__cwd {
|
|
29985
|
+
min-width: 0;
|
|
29986
|
+
overflow-wrap: anywhere;
|
|
29987
|
+
color: var(--settings-muted);
|
|
29988
|
+
font-size: 12px;
|
|
29989
|
+
line-height: 18px;
|
|
29990
|
+
}
|
|
29991
|
+
|
|
29992
|
+
.settings-session-import-row__cwd {
|
|
29993
|
+
font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
29994
|
+
}
|
|
29995
|
+
|
|
29996
|
+
.settings-session-import-row__action {
|
|
29997
|
+
display: flex;
|
|
29998
|
+
align-items: center;
|
|
29999
|
+
flex: none;
|
|
30000
|
+
gap: 8px;
|
|
30001
|
+
}
|
|
30002
|
+
|
|
30003
|
+
.settings-session-import-running {
|
|
30004
|
+
color: #f5c542;
|
|
30005
|
+
font-size: 12px;
|
|
30006
|
+
font-weight: 500;
|
|
30007
|
+
line-height: 18px;
|
|
30008
|
+
white-space: nowrap;
|
|
30009
|
+
}
|
|
30010
|
+
|
|
30011
|
+
.settings-session-import-recovery {
|
|
30012
|
+
display: grid;
|
|
30013
|
+
min-width: 0;
|
|
30014
|
+
gap: 12px;
|
|
30015
|
+
padding: 16px;
|
|
30016
|
+
background: var(--settings-surface);
|
|
30017
|
+
border: 1px solid var(--settings-border);
|
|
30018
|
+
border-radius: 12px;
|
|
30019
|
+
}
|
|
30020
|
+
|
|
30021
|
+
.settings-session-import-recovery__copy {
|
|
30022
|
+
display: grid;
|
|
30023
|
+
gap: 6px;
|
|
30024
|
+
}
|
|
30025
|
+
|
|
30026
|
+
.settings-session-import-recovery__copy strong {
|
|
30027
|
+
color: var(--settings-text);
|
|
30028
|
+
font-size: 15px;
|
|
30029
|
+
font-weight: 600;
|
|
30030
|
+
line-height: 22px;
|
|
30031
|
+
}
|
|
30032
|
+
|
|
30033
|
+
.settings-session-import-recovery__copy p {
|
|
30034
|
+
margin: 0;
|
|
30035
|
+
color: var(--settings-muted);
|
|
30036
|
+
font-size: 13px;
|
|
30037
|
+
line-height: 20px;
|
|
30038
|
+
}
|
|
30039
|
+
|
|
30040
|
+
.settings-session-import-recovery__path {
|
|
30041
|
+
display: flex;
|
|
30042
|
+
align-items: center;
|
|
30043
|
+
min-width: 0;
|
|
30044
|
+
gap: 8px;
|
|
30045
|
+
}
|
|
30046
|
+
|
|
30047
|
+
.settings-session-import-recovery__path code {
|
|
30048
|
+
min-width: 0;
|
|
30049
|
+
flex: 1;
|
|
30050
|
+
overflow-wrap: anywhere;
|
|
30051
|
+
color: var(--settings-text);
|
|
30052
|
+
font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
30053
|
+
font-size: 12px;
|
|
30054
|
+
line-height: 18px;
|
|
30055
|
+
}
|
|
30056
|
+
|
|
30057
|
+
.codexhost-settings-icon {
|
|
30058
|
+
display: block;
|
|
30059
|
+
flex: none;
|
|
30060
|
+
stroke: currentColor;
|
|
30061
|
+
}
|
|
30062
|
+
|
|
30063
|
+
@media (max-width: 720px) {
|
|
30064
|
+
.codexhost-settings-dialog {
|
|
30065
|
+
width: calc(100vw - 16px);
|
|
30066
|
+
height: calc(100vh - var(--settings-titlebar-height) - 16px);
|
|
30067
|
+
border-radius: 10px;
|
|
30068
|
+
}
|
|
30069
|
+
|
|
30070
|
+
.settings-layout {
|
|
30071
|
+
grid-template-columns: minmax(0, 1fr);
|
|
30072
|
+
grid-template-rows: auto minmax(0, 1fr);
|
|
30073
|
+
}
|
|
30074
|
+
|
|
30075
|
+
.settings-sidebar {
|
|
30076
|
+
border-right: 0;
|
|
30077
|
+
border-bottom: 1px solid var(--settings-border);
|
|
30078
|
+
}
|
|
30079
|
+
|
|
30080
|
+
.settings-header {
|
|
30081
|
+
height: 56px;
|
|
30082
|
+
padding-inline: 14px;
|
|
30083
|
+
}
|
|
30084
|
+
|
|
30085
|
+
.settings-sidebar {
|
|
30086
|
+
padding-top: 20px;
|
|
30087
|
+
}
|
|
30088
|
+
|
|
30089
|
+
.settings-nav {
|
|
30090
|
+
flex: none;
|
|
30091
|
+
flex-direction: row;
|
|
30092
|
+
gap: 4px;
|
|
30093
|
+
padding: 7px 8px 8px;
|
|
30094
|
+
overflow-x: auto;
|
|
30095
|
+
overflow-y: hidden;
|
|
30096
|
+
}
|
|
30097
|
+
|
|
30098
|
+
.settings-nav-section-label {
|
|
30099
|
+
display: none;
|
|
30100
|
+
}
|
|
30101
|
+
|
|
30102
|
+
.settings-nav-button {
|
|
30103
|
+
width: auto;
|
|
30104
|
+
min-width: max-content;
|
|
30105
|
+
min-height: 34px;
|
|
30106
|
+
grid-template-columns: 16px auto;
|
|
30107
|
+
border-radius: 10px;
|
|
30108
|
+
}
|
|
30109
|
+
|
|
30110
|
+
.settings-page__content {
|
|
30111
|
+
width: calc(100% - 40px);
|
|
30112
|
+
}
|
|
30113
|
+
|
|
30114
|
+
.settings-page__content {
|
|
30115
|
+
padding-top: 32px;
|
|
30116
|
+
padding-bottom: 32px;
|
|
30117
|
+
}
|
|
30118
|
+
|
|
30119
|
+
.settings-section-label {
|
|
30120
|
+
padding-bottom: 20px;
|
|
30121
|
+
font-size: 20px;
|
|
30122
|
+
line-height: 26px;
|
|
30123
|
+
}
|
|
30124
|
+
|
|
30125
|
+
.settings-update-metadata {
|
|
30126
|
+
grid-template-columns: minmax(0, 1fr);
|
|
30127
|
+
gap: 16px;
|
|
30128
|
+
}
|
|
30129
|
+
|
|
30130
|
+
.settings-status-row {
|
|
30131
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
30132
|
+
gap: 16px;
|
|
30133
|
+
}
|
|
30134
|
+
|
|
30135
|
+
.settings-connection-page-header {
|
|
30136
|
+
flex-direction: column;
|
|
30137
|
+
}
|
|
30138
|
+
|
|
30139
|
+
.settings-connection-page-header > .settings-command-button {
|
|
30140
|
+
width: 100%;
|
|
30141
|
+
}
|
|
30142
|
+
|
|
30143
|
+
.settings-session-import-row {
|
|
30144
|
+
grid-template-columns: minmax(0, 1fr);
|
|
30145
|
+
}
|
|
30146
|
+
|
|
30147
|
+
.settings-session-import-row__action {
|
|
30148
|
+
justify-content: flex-start;
|
|
30149
|
+
flex-wrap: wrap;
|
|
30150
|
+
}
|
|
30151
|
+
|
|
30152
|
+
.settings-status-row__detail {
|
|
30153
|
+
grid-column: 1 / -1;
|
|
30154
|
+
margin: -8px 0 0 58px;
|
|
30155
|
+
}
|
|
30156
|
+
}
|
|
30157
|
+
|
|
30158
|
+
@media (forced-colors: active) {
|
|
30159
|
+
:host,
|
|
30160
|
+
:host([data-theme="light"]),
|
|
30161
|
+
:host([data-theme="dark"]) {
|
|
30162
|
+
--settings-bg: Canvas;
|
|
30163
|
+
--settings-sidebar: Canvas;
|
|
30164
|
+
--settings-panel: Canvas;
|
|
30165
|
+
--settings-surface: Canvas;
|
|
30166
|
+
--settings-surface-hover: Highlight;
|
|
30167
|
+
--settings-inset: Canvas;
|
|
30168
|
+
--settings-text: CanvasText;
|
|
30169
|
+
--settings-muted: GrayText;
|
|
30170
|
+
--settings-subtle: GrayText;
|
|
30171
|
+
--settings-border: ButtonBorder;
|
|
30172
|
+
--settings-divider: ButtonBorder;
|
|
30173
|
+
--settings-hover: Highlight;
|
|
30174
|
+
--settings-active: Highlight;
|
|
30175
|
+
--settings-focus: Highlight;
|
|
30176
|
+
--settings-elevated: Canvas;
|
|
30177
|
+
--settings-surface-strong: Canvas;
|
|
30178
|
+
--settings-mark: CanvasText;
|
|
30179
|
+
--settings-primary: ButtonFace;
|
|
30180
|
+
--settings-primary-hover: Highlight;
|
|
30181
|
+
--settings-primary-text: ButtonText;
|
|
30182
|
+
--settings-warning: CanvasText;
|
|
30183
|
+
--settings-warning-bg: Canvas;
|
|
30184
|
+
--settings-warning-border: ButtonBorder;
|
|
30185
|
+
--settings-danger: CanvasText;
|
|
30186
|
+
--settings-danger-bg: Canvas;
|
|
30187
|
+
--settings-danger-border: ButtonBorder;
|
|
30188
|
+
--settings-success: CanvasText;
|
|
30189
|
+
}
|
|
30190
|
+
}
|
|
30191
|
+
|
|
30192
|
+
@media (prefers-reduced-motion: reduce) {
|
|
30193
|
+
*,
|
|
30194
|
+
*::before,
|
|
30195
|
+
*::after {
|
|
30196
|
+
scroll-behavior: auto !important;
|
|
30197
|
+
transition-duration: 0s !important;
|
|
30198
|
+
}
|
|
30199
|
+
}
|
|
30200
|
+
`;
|
|
30201
|
+
|
|
30202
|
+
// src/settings/accounts.css
|
|
30203
|
+
var accounts_default = '.settings-harness-account__logo {\n display: grid;\n place-items: center;\n width: 34px;\n height: 34px;\n}\n\n.settings-account-status {\n margin: 0 0 12px;\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n.settings-account-status:empty {\n display: none;\n}\n\n.settings-account-toolbar {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n margin: 0 0 16px;\n}\n.settings-account-count {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n white-space: nowrap;\n}\n.settings-account-count > :last-child {\n color: var(--settings-text);\n font-variant-numeric: tabular-nums;\n font-weight: 600;\n}\n.settings-account-search {\n display: flex;\n align-items: center;\n gap: 8px;\n box-sizing: border-box;\n height: 36px;\n min-width: 180px;\n max-width: 100%;\n margin-right: auto;\n padding: 0 10px;\n color: var(--settings-muted);\n background: var(--settings-bg);\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n}\n.settings-account-search svg {\n flex: none;\n}\n.settings-account-search input {\n flex: 1;\n min-width: 0;\n width: 210px;\n padding: 0;\n color: var(--settings-text);\n background: transparent;\n border: 0;\n font-size: 13px;\n}\n.settings-account-search input::placeholder {\n color: var(--settings-muted);\n}\n.settings-account-search:focus-within {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-account-groups {\n display: grid;\n gap: 18px;\n}\n.settings-account-group__title {\n margin: 0 0 8px;\n color: var(--settings-text);\n font-size: 13px;\n font-weight: 600;\n letter-spacing: -0.01em;\n}\n.settings-account-list {\n overflow: hidden;\n background: var(--settings-surface);\n border: 1px solid var(--settings-border);\n border-radius: 10px;\n container-type: inline-size;\n}\n.settings-account-list > .settings-account-empty {\n margin: 0;\n padding: 28px 16px;\n}\n.settings-account-table {\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n font-size: 12px;\n}\n.settings-account-table th {\n padding: 10px 16px;\n color: var(--settings-muted);\n background: var(--settings-surface);\n font-size: 10px;\n font-weight: 600;\n line-height: 16px;\n text-align: left;\n}\n.settings-account-table th:nth-child(1) {\n width: 32%;\n}\n.settings-account-table th:nth-child(2),\n.settings-account-table th:nth-child(3) {\n width: 24%;\n}\n.settings-account-table th:nth-child(4) {\n width: 20%;\n text-align: right;\n}\n.settings-account-table--api th:nth-child(1) {\n width: 48%;\n}\n.settings-account-table--api th:nth-child(2) {\n width: 32%;\n}\n.settings-account-table--api th:nth-child(3) {\n width: 20%;\n text-align: right;\n}\n.settings-account-table td {\n padding: 17px 16px;\n vertical-align: middle;\n border-top: 1px solid var(--settings-divider);\n}\n.settings-account-row {\n background: transparent;\n}\n.settings-account-row:hover {\n background: var(--settings-hover);\n}\n.settings-account-row__person {\n display: grid;\n grid-template-columns: 34px minmax(0, 1fr);\n align-items: center;\n gap: 11px;\n min-width: 0;\n}\n.settings-account-row__mark {\n display: grid;\n place-items: center;\n width: 34px;\n height: 34px;\n color: light-dark(#67558d, #c3baff);\n background: light-dark(#f0ecf7, #353044);\n border: 1px solid light-dark(#d9d0e6, #4d435f);\n border-radius: 10px;\n}\n.settings-account-row__identity {\n min-width: 0;\n}\n.settings-account-email {\n display: block;\n min-width: 0;\n overflow: hidden;\n font-size: 12px;\n font-weight: 550;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.settings-account-metadata {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 5px;\n margin-top: 4px;\n color: var(--settings-muted);\n flex-wrap: wrap;\n font-size: 11px;\n overflow-wrap: anywhere;\n}\n.settings-account-plan {\n flex: none;\n padding: 0 4px;\n color: var(--settings-muted);\n border: 1px solid var(--settings-border);\n border-radius: 5px;\n font-size: 10px;\n max-width: 100%;\n overflow-wrap: anywhere;\n}\n.settings-account-plan--highlighted {\n color: light-dark(#654f91, #c8bfff);\n background: light-dark(#f2edf9, #a99bff18);\n border-color: light-dark(#d9ccea, #a99bff52);\n font-weight: 600;\n}\n.settings-account-active {\n flex: none;\n color: light-dark(#66548e, #c8bfff);\n font-size: 10px;\n white-space: nowrap;\n}\n\n.settings-account-usage {\n display: grid;\n gap: 10px;\n}\n.settings-account-usage__meter {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n grid-template-rows: 20px 4px 17px;\n align-items: center;\n gap: 6px 0;\n min-width: 0;\n font-variant-numeric: tabular-nums;\n}\n:host([lang="zh-CN"]) .settings-account-usage__meter {\n grid-template-columns: 48px minmax(36px, 1fr) 72px;\n}\n.settings-account-usage__meter--balance {\n display: flex;\n grid-template-columns: none;\n justify-content: flex-start;\n gap: 6px;\n}\n.settings-account-usage__balance {\n display: inline-flex;\n align-items: baseline;\n gap: 4px;\n font-size: 14px;\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n.settings-account-usage__value-label {\n font-size: 14px;\n font-weight: 600;\n}\n\n.settings-account-usage__title {\n display: none;\n min-width: 0;\n color: var(--settings-muted);\n font-size: 11px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.settings-account-extra-usage {\n display: grid;\n gap: 12px;\n margin-top: 14px;\n}\n.settings-account-extra-usage .settings-account-usage__meter,\n.settings-account-usage__meter--scoped {\n grid-template-rows: auto 20px 4px 17px;\n}\n.settings-account-extra-usage .settings-account-usage__title,\n.settings-account-usage__meter--scoped .settings-account-usage__title {\n display: block;\n grid-column: 1 / -1;\n white-space: normal;\n overflow-wrap: anywhere;\n}\n.settings-account-usage__percent {\n grid-column: 1 / -1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n justify-content: flex-end;\n gap: 7px;\n font-size: 14px;\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n.settings-account-usage__countdown {\n min-width: 0;\n color: var(--settings-muted);\n font-size: 10px;\n font-weight: 400;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.settings-account-usage__percent > :last-child {\n flex: none;\n}\n.settings-account-usage__percent--warn {\n color: var(--settings-warning);\n}\n.settings-account-usage__percent--hot {\n color: var(--settings-danger);\n}\n.settings-account-usage__bar {\n grid-column: 1 / -1;\n height: 4px;\n overflow: hidden;\n background: light-dark(#e3e1e8, #3c3c43);\n border-radius: 4px;\n}\n.settings-account-usage__bar > span {\n display: block;\n height: 100%;\n background: light-dark(#81769e, #9993b8);\n border-radius: inherit;\n}\n.settings-account-usage__bar--warn > span {\n background: var(--settings-warning);\n}\n.settings-account-usage__bar--hot > span {\n background: var(--settings-danger);\n}\n.settings-account-usage__sub {\n grid-column: 1 / -1;\n color: var(--settings-muted);\n font-size: 10px;\n font-variant-numeric: tabular-nums;\n text-align: right;\n white-space: nowrap;\n}\n.settings-account-usage__message {\n color: var(--settings-muted);\n}\n.settings-account-usage__missing {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-content: center;\n gap: 6px;\n min-height: 53px;\n color: var(--settings-muted);\n}\n.settings-account-usage__missing > span:not(.settings-account-usage__title) {\n grid-column: 1 / -1;\n font-size: 14px;\n}\n.settings-account-table .settings-account-spanning-cell {\n vertical-align: top;\n}\n.settings-account-quota-continuation-row > .settings-account-usage-cell {\n background: inherit;\n}\n.settings-account-management {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n}\n.settings-account-native {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 3px;\n color: var(--settings-muted);\n font-size: 11px;\n}\n.settings-account-native .settings-icon-button {\n width: 25px;\n height: 28px;\n}\n.settings-account-usage > button {\n justify-self: start;\n}\n.settings-account-action {\n padding: 4px 5px;\n min-height: 30px;\n font-size: 12px;\n color: var(--settings-text);\n background: transparent;\n border: 1px solid transparent;\n border-radius: 7px;\n white-space: nowrap;\n cursor: pointer;\n}\n.settings-account-action:hover {\n background: var(--settings-hover);\n}\n.settings-account-action:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n.settings-account-reset-summary {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n min-height: 24px;\n padding: 3px 0;\n font-size: 10px;\n white-space: nowrap;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 5px;\n cursor: pointer;\n}\n.settings-account-reset-summary:hover {\n background: var(--settings-hover);\n}\n.settings-account-reset-summary[aria-expanded="true"] > svg:last-child {\n transform: rotate(90deg);\n}\n.settings-account-details-row > td {\n background: var(--settings-inset);\n}\n.settings-account-reset-details {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n flex-wrap: wrap;\n}\n.settings-account-reset-details strong {\n font-size: 12px;\n}\n.settings-account-reset-expiry {\n margin: 6px 0;\n color: var(--settings-muted);\n font-size: 11px;\n}\n.settings-account-reset-expiry.is-warn {\n color: var(--settings-warning);\n}\n.settings-account-reset-expiry.is-hot {\n color: var(--settings-danger);\n}\n.settings-account-reset-list {\n margin: 8px 0 0;\n padding: 0;\n list-style: none;\n color: var(--settings-muted);\n font-size: 11px;\n}\n.settings-account-reset-list li + li {\n margin-top: 4px;\n}\n.settings-account-empty {\n text-align: center;\n color: var(--settings-muted);\n}\n.settings-account-list :focus-visible,\n.settings-account-toolbar :focus-visible:not(.settings-segmented__item):not(input) {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-account-dialog {\n position: fixed;\n width: min(360px, calc(100vw - 40px));\n max-height: calc(100vh - 40px);\n overflow: auto;\n padding: 22px;\n color: var(--settings-text);\n background: var(--settings-elevated);\n border: 1px solid var(--settings-border);\n border-radius: 12px;\n box-shadow: var(--settings-dialog-shadow);\n text-align: left;\n}\n.settings-account-dialog::backdrop {\n background: var(--settings-backdrop);\n}\n.settings-account-dialog h2 {\n margin: 0 28px 12px 0;\n font-size: 15px;\n}\n.settings-account-dialog p {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 1.6;\n overflow-wrap: anywhere;\n}\n.settings-account-dialog__close {\n position: absolute;\n top: 12px;\n right: 12px;\n}\n\n@container (max-width: 680px) {\n .settings-account-table,\n .settings-account-table tbody {\n display: block;\n }\n .settings-account-table thead {\n display: none;\n }\n .settings-account-row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n padding: 18px;\n gap: 18px 22px;\n border-top: 1px solid var(--settings-divider);\n }\n .settings-account-row:first-child {\n border-top: 0;\n }\n .settings-account-table .settings-account-row > td {\n display: block;\n min-width: 0;\n padding: 0;\n border: 0;\n }\n .settings-account-person-cell,\n .settings-account-management-cell,\n .settings-account-usage-cell--message,\n .settings-account-table--api .settings-account-usage-cell {\n grid-column: 1 / -1;\n }\n .settings-account-table .settings-account-management-cell {\n border-top: 1px solid var(--settings-divider);\n padding-top: 8px;\n }\n .settings-account-email {\n font-size: 13px;\n }\n .settings-account-usage__title {\n display: block;\n grid-column: 1;\n }\n .settings-account-usage__percent,\n .settings-account-usage__missing > span:not(.settings-account-usage__title) {\n grid-column: 2;\n text-align: right;\n }\n .settings-account-extra-usage .settings-account-usage__percent {\n grid-column: 1 / -1;\n }\n .settings-account-management {\n flex-direction: row;\n justify-content: space-between;\n }\n .settings-account-native {\n justify-content: flex-start;\n }\n .settings-account-table tr:not(.settings-account-row, [hidden]),\n .settings-account-table tr:not(.settings-account-row, [hidden]) > td {\n display: block;\n }\n}\n\n@container (max-width: 360px) {\n .settings-account-row {\n grid-template-columns: minmax(0, 1fr);\n gap: 16px;\n padding: 16px;\n }\n}\n\n@media (forced-colors: active) {\n .settings-account-usage__bar {\n border: 1px solid CanvasText;\n }\n .settings-account-usage__bar > span {\n background: Highlight;\n }\n}\n';
|
|
30204
|
+
|
|
30205
|
+
// src/settings/tailwind.css
|
|
30206
|
+
var tailwind_default = '@layer properties, theme, base, components, utilities;\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-content:"";--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@layer theme{:root,:host{--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.relative{position:relative}.top-full{top:100%}.left-0{left:0}.z-20{z-index:20}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:0}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-7{margin-top:calc(var(--spacing) * 7)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-1{margin-left:var(--spacing)}.ml-\\[45px\\]{margin-left:45px}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.size-1\\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-8{height:calc(var(--spacing) * 8)}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-\\[60px\\]{min-height:60px}.w-9{width:calc(var(--spacing) * 9)}.w-14{width:calc(var(--spacing) * 14)}.w-80{width:calc(var(--spacing) * 80)}.w-full{width:100%}.w-px{width:1px}.max-w-64{max-width:calc(var(--spacing) * 64)}.min-w-0{min-width:0}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-disc{list-style-type:disc}.appearance-none{appearance:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.overflow-x-auto{overflow-x:auto}.rounded-\\[10px\\]{border-radius:10px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-settings-border{border-color:var(--settings-border)}.border-settings-divider{border-color:var(--settings-divider)}.bg-settings-panel{background-color:var(--settings-panel)}.bg-settings-subtle{background-color:var(--settings-subtle)}.bg-settings-surface{background-color:var(--settings-surface)}.bg-settings-surface-hover{background-color:var(--settings-surface-hover)}.bg-transparent{background-color:#0000}.p-0{padding:0}.p-4{padding:calc(var(--spacing) * 4)}.\\!px-0{padding-inline:0!important}.px-1{padding-inline:var(--spacing)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pl-4{padding-left:calc(var(--spacing) * 4)}.\\!text-right{text-align:right!important}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[11px\\]{font-size:11px}.text-\\[13px\\]{font-size:13px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.leading-\\[18px\\]{--tw-leading:18px;line-height:18px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-settings-muted{color:var(--settings-muted)}.text-settings-subtle{color:var(--settings-subtle)}.text-settings-text{color:var(--settings-text)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\\[0_10px_30px_rgb\\(0_0_0\\/0\\.22\\)\\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000038);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-settings-border{--tw-ring-color:var(--settings-border)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.ring-inset{--tw-ring-inset:inset}.group-focus-within\\:visible:is(:where(.group):focus-within *){visibility:visible}.group-focus-within\\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media (hover:hover){.group-hover\\:visible:is(:where(.group):hover *){visibility:visible}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-data-\\[state\\=failed\\]\\/status\\:bg-settings-danger:is(:where(.group\\/status)[data-state=failed] *){background-color:var(--settings-danger)}.group-data-\\[state\\=unavailable\\]\\/status\\:bg-settings-warning:is(:where(.group\\/status)[data-state=unavailable] *){background-color:var(--settings-warning)}.marker\\:text-settings-subtle ::marker{color:var(--settings-subtle)}.marker\\:text-settings-subtle::marker{color:var(--settings-subtle)}.marker\\:text-settings-subtle ::-webkit-details-marker{color:var(--settings-subtle)}.marker\\:text-settings-subtle::-webkit-details-marker{color:var(--settings-subtle)}.before\\:absolute:before{content:var(--tw-content);position:absolute}.before\\:top-0\\.5:before{content:var(--tw-content);top:calc(var(--spacing) * .5)}.before\\:left-0\\.5:before{content:var(--tw-content);left:calc(var(--spacing) * .5)}.before\\:size-4:before{content:var(--tw-content);width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.before\\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.before\\:bg-white:before{content:var(--tw-content);background-color:#fff}.before\\:shadow-\\[0_1px_2px_rgb\\(0_0_0\\/0\\.3\\)\\]:before{content:var(--tw-content);--tw-shadow:0 1px 2px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.before\\:transition-transform:before{content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.first\\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.first-of-type\\:mt-0:first-of-type{margin-top:0}.checked\\:bg-settings-focus:checked{background-color:var(--settings-focus)}.checked\\:ring-transparent:checked{--tw-ring-color:transparent}.checked\\:before\\:translate-x-4:checked:before{content:var(--tw-content);--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.focus-within\\:border-settings-focus:focus-within{border-color:var(--settings-focus)}@media (hover:hover){.hover\\:text-settings-text:hover{color:var(--settings-text)}}.focus-visible\\:text-settings-text:focus-visible{color:var(--settings-text)}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-settings-focus:focus-visible{outline-color:var(--settings-focus)}.data-\\[invalid\\=true\\]\\:border-settings-danger[data-invalid=true]{border-color:var(--settings-danger)}.data-\\[invalid\\=true\\]\\:text-settings-danger[data-invalid=true],.data-\\[state\\=failed\\]\\:text-settings-danger[data-state=failed]{color:var(--settings-danger)}.data-\\[state\\=unavailable\\]\\:text-settings-warning[data-state=unavailable]{color:var(--settings-warning)}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@layer properties{\n *, ::before, ::after, ::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-alpha:100%;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-offset-width:0;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-drop-shadow-alpha:100%;--tw-content:"";--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}\n';
|
|
30207
|
+
|
|
30208
|
+
// src/settings/shell.ts
|
|
30209
|
+
var SETTINGS_SHELL_ATTRIBUTE = "data-codexhost-settings-shell";
|
|
30210
|
+
var RENDERER_SETTINGS_COLOR_SCHEME = "inherit";
|
|
30211
|
+
function isRendererSettingsDialogSupported(dialog) {
|
|
30212
|
+
return typeof dialog.showModal === "function" && typeof dialog.close === "function";
|
|
30213
|
+
}
|
|
30214
|
+
function resolveRendererSettingsTheme(ownerDocument = document) {
|
|
30215
|
+
try {
|
|
30216
|
+
const scheme = ownerDocument.defaultView?.getComputedStyle(ownerDocument.documentElement).colorScheme.toLowerCase();
|
|
30217
|
+
if (scheme?.includes("dark") && !scheme.includes("light")) return "dark";
|
|
30218
|
+
if (scheme?.includes("light") && !scheme.includes("dark")) return "light";
|
|
30219
|
+
} catch {
|
|
30220
|
+
}
|
|
30221
|
+
return "dark";
|
|
30222
|
+
}
|
|
30223
|
+
function applyRendererSettingsTheme(root, ownerDocument) {
|
|
30224
|
+
root.dataset.theme = resolveRendererSettingsTheme(ownerDocument);
|
|
30225
|
+
}
|
|
30226
|
+
function setActiveNavigation(buttons, activePageId) {
|
|
30227
|
+
for (const [pageId, button] of buttons) {
|
|
30228
|
+
if (pageId === activePageId) button.setAttribute("aria-current", "page");
|
|
30229
|
+
else button.removeAttribute("aria-current");
|
|
30230
|
+
}
|
|
30231
|
+
}
|
|
30232
|
+
function mountRendererSettingsShell(registry2, ownerDocument = document, messages = DEFAULT_RENDERER_SETTINGS_MESSAGES) {
|
|
30233
|
+
const resolvedRegistry = registry2 ?? createDefaultRendererSettingsRegistry(messages);
|
|
30234
|
+
if (!ownerDocument.body) throw new Error("Renderer document body is unavailable");
|
|
30235
|
+
if (ownerDocument.querySelector(`[${SETTINGS_SHELL_ATTRIBUTE}]`)) {
|
|
30236
|
+
throw new Error("A codexhost settings shell is already mounted");
|
|
30237
|
+
}
|
|
30238
|
+
const root = ownerDocument.createElement("div");
|
|
30239
|
+
root.setAttribute(SETTINGS_SHELL_ATTRIBUTE, "v1");
|
|
30240
|
+
root.lang = messages.locale;
|
|
30241
|
+
applyRendererSettingsTheme(root, ownerDocument);
|
|
30242
|
+
root.style.colorScheme = RENDERER_SETTINGS_COLOR_SCHEME;
|
|
30243
|
+
const shadow = root.attachShadow({ mode: "open" });
|
|
30244
|
+
const style = ownerDocument.createElement("style");
|
|
30245
|
+
style.textContent = `${tailwind_default}
|
|
30246
|
+
${shell_default}
|
|
30247
|
+
${accounts_default}`;
|
|
30248
|
+
const dialog = ownerDocument.createElement("dialog");
|
|
30249
|
+
dialog.className = "codexhost-settings-dialog";
|
|
30250
|
+
const frame = ownerDocument.createElement("div");
|
|
30251
|
+
frame.className = "settings-frame";
|
|
30252
|
+
const header = ownerDocument.createElement("header");
|
|
30253
|
+
header.className = "settings-header";
|
|
30254
|
+
const brand = ownerDocument.createElement("div");
|
|
30255
|
+
brand.className = "settings-brand";
|
|
30256
|
+
const brandMark = ownerDocument.createElement("span");
|
|
30257
|
+
brandMark.className = "settings-brand__mark";
|
|
30258
|
+
brandMark.append(createRendererSettingsBrandIcon(32));
|
|
30259
|
+
const brandCopy = ownerDocument.createElement("span");
|
|
30260
|
+
brandCopy.className = "settings-brand__copy";
|
|
30261
|
+
const brandName = ownerDocument.createElement("span");
|
|
30262
|
+
brandName.className = "settings-brand__name";
|
|
30263
|
+
brandName.textContent = "BOFT CLI";
|
|
30264
|
+
const brandTitle = ownerDocument.createElement("span");
|
|
30265
|
+
brandTitle.className = "settings-brand__title";
|
|
30266
|
+
brandTitle.id = "codexhost-settings-dialog-title";
|
|
30267
|
+
brandTitle.textContent = messages.title;
|
|
27149
30268
|
brandCopy.append(brandName, brandTitle);
|
|
27150
30269
|
brand.append(brandMark, brandCopy);
|
|
27151
30270
|
const headerActions = ownerDocument.createElement("div");
|
|
@@ -27349,8 +30468,10 @@ ${accounts_default}`;
|
|
|
27349
30468
|
|
|
27350
30469
|
// src/settings/trigger.ts
|
|
27351
30470
|
var SETTINGS_TRIGGER_ATTRIBUTE = "data-codexhost-settings-trigger";
|
|
30471
|
+
var SETTINGS_HEADER_SURFACE_SELECTOR = '[data-testid="app-shell-header-context-menu-surface"]';
|
|
27352
30472
|
var SETTINGS_APPLICATION_HEADER_SELECTOR = 'header[data-pip-obstacle="app-shell-header"]';
|
|
27353
30473
|
var SETTINGS_HEADER_SLOT_SELECTOR = ':scope > [data-test-id="header-shell-slot"]';
|
|
30474
|
+
var SETTINGS_HEADER_NATIVE_ACTION_GROUP_SELECTOR = ':scope > [data-app-shell-header-obstacle="true"]';
|
|
27354
30475
|
function measuredBounds(element) {
|
|
27355
30476
|
const bounds = element.getBoundingClientRect();
|
|
27356
30477
|
return {
|
|
@@ -27362,11 +30483,23 @@ ${accounts_default}`;
|
|
|
27362
30483
|
height: bounds.height
|
|
27363
30484
|
};
|
|
27364
30485
|
}
|
|
30486
|
+
function findNativeHeaderActionGroup(header) {
|
|
30487
|
+
const surface = header.querySelector(SETTINGS_HEADER_SURFACE_SELECTOR);
|
|
30488
|
+
if (!surface) return null;
|
|
30489
|
+
const groups = [
|
|
30490
|
+
...surface.querySelectorAll(SETTINGS_HEADER_NATIVE_ACTION_GROUP_SELECTOR)
|
|
30491
|
+
];
|
|
30492
|
+
return groups.at(-1) ?? null;
|
|
30493
|
+
}
|
|
27365
30494
|
function findRendererSettingsHeaderInsertionPoint(ownerDocument) {
|
|
27366
30495
|
const header = ownerDocument.querySelector(SETTINGS_APPLICATION_HEADER_SELECTOR);
|
|
27367
30496
|
if (!header) return null;
|
|
27368
30497
|
const headerBounds = measuredBounds(header);
|
|
27369
30498
|
if (headerBounds.width <= 0 || headerBounds.height <= 0) return null;
|
|
30499
|
+
const nativeActionGroup = findNativeHeaderActionGroup(header);
|
|
30500
|
+
if (nativeActionGroup?.parentElement) {
|
|
30501
|
+
return { parent: nativeActionGroup.parentElement, before: nativeActionGroup };
|
|
30502
|
+
}
|
|
27370
30503
|
const endSlot = [...header.querySelectorAll(SETTINGS_HEADER_SLOT_SELECTOR)].filter((slot) => {
|
|
27371
30504
|
const bounds = measuredBounds(slot);
|
|
27372
30505
|
return bounds.width > 0 && bounds.height > 0;
|
|
@@ -27686,7 +30819,8 @@ ${accounts_default}`;
|
|
|
27686
30819
|
}
|
|
27687
30820
|
await options.openImportedThread(threadId, signal, hostId);
|
|
27688
30821
|
if (!disposed && !signal.aborted) shell?.close();
|
|
27689
|
-
}
|
|
30822
|
+
},
|
|
30823
|
+
options.getLoadedSessionsClient ?? (() => null)
|
|
27690
30824
|
);
|
|
27691
30825
|
const nextShell = installRendererSettingsShell(definitions, messages, ownerWindow.document);
|
|
27692
30826
|
const nextTrigger = installRendererSettingsHeaderTrigger({
|
|
@@ -27844,7 +30978,9 @@ ${accounts_default}`;
|
|
|
27844
30978
|
muse: harnessIdSchema.parse("muse"),
|
|
27845
30979
|
"kiro-cli": harnessIdSchema.parse("kiro-cli"),
|
|
27846
30980
|
codebuddy: harnessIdSchema.parse("codebuddy"),
|
|
27847
|
-
"cursor-cli": harnessIdSchema.parse("cursor-cli")
|
|
30981
|
+
"cursor-cli": harnessIdSchema.parse("cursor-cli"),
|
|
30982
|
+
qoder: harnessIdSchema.parse("qoder"),
|
|
30983
|
+
"qoder-cn": harnessIdSchema.parse("qoder-cn")
|
|
27848
30984
|
};
|
|
27849
30985
|
var externalAgents = [
|
|
27850
30986
|
"pi",
|
|
@@ -27858,7 +30994,9 @@ ${accounts_default}`;
|
|
|
27858
30994
|
"muse",
|
|
27859
30995
|
"kiro-cli",
|
|
27860
30996
|
"codebuddy",
|
|
27861
|
-
"cursor-cli"
|
|
30997
|
+
"cursor-cli",
|
|
30998
|
+
"qoder",
|
|
30999
|
+
"qoder-cn"
|
|
27862
31000
|
];
|
|
27863
31001
|
function isRetryableHarnessAvailability(availability, error51) {
|
|
27864
31002
|
return availability !== void 0 && availability !== "ready" && availability !== "notInstalled" && error51?.retryable === true;
|
|
@@ -28071,7 +31209,7 @@ ${accounts_default}`;
|
|
|
28071
31209
|
throw new Error(`${agent} Thread reported an incompatible transport Model`);
|
|
28072
31210
|
}
|
|
28073
31211
|
const model = inspection.effectiveModel ?? transportSelection?.model;
|
|
28074
|
-
const thinkingOptionId = selectableThinkingOptionId(inspection) ?? transportSelection?.thinkingOptionId;
|
|
31212
|
+
const thinkingOptionId = inspection.availableThinkingOptions !== void 0 ? selectableThinkingOptionId(inspection) : inspection.effectiveThinkingOptionId ?? transportSelection?.thinkingOptionId;
|
|
28075
31213
|
const permissionModeId = inspection.effectivePermissionModeId ?? transportSelection?.permissionModeId;
|
|
28076
31214
|
return {
|
|
28077
31215
|
agent,
|
|
@@ -28166,16 +31304,14 @@ ${accounts_default}`;
|
|
|
28166
31304
|
const controllerTarget = (target, hostId) => scopedComposerTarget(target, hostId);
|
|
28167
31305
|
let usageNotificationDispose = null;
|
|
28168
31306
|
const localAgentForSidebarThread = (input) => {
|
|
28169
|
-
const mountedHostId = modelControl?.currentHostId?.() ?? "local";
|
|
28170
|
-
if (input.hostId !== mountedHostId) return null;
|
|
28171
31307
|
for (const mounted of mountedByComposer.values()) {
|
|
28172
31308
|
const target = mounted.modelTarget;
|
|
28173
|
-
|
|
28174
|
-
|
|
28175
|
-
|
|
28176
|
-
|
|
28177
|
-
|
|
28178
|
-
|
|
31309
|
+
const matchesDraft = target?.[0] === "default" && input.draftId !== null && target[1] === input.draftId;
|
|
31310
|
+
const matchesConversation = target?.[0] === "conversation" && input.threadId !== null && target[1] === input.threadId && mounted.ownershipStatus === "ready";
|
|
31311
|
+
if (!matchesDraft && !matchesConversation) continue;
|
|
31312
|
+
const mountedHostId = modelControl?.currentHostId?.() ?? "local";
|
|
31313
|
+
if (input.hostId !== mountedHostId) return null;
|
|
31314
|
+
return controller.get(mounted.composer).agent;
|
|
28179
31315
|
}
|
|
28180
31316
|
return null;
|
|
28181
31317
|
};
|
|
@@ -28197,6 +31333,7 @@ ${accounts_default}`;
|
|
|
28197
31333
|
getUpdateClient: () => modelControl,
|
|
28198
31334
|
getAccountClient: () => modelControl,
|
|
28199
31335
|
getConnectionDiagnostics: () => connectionDiagnostics,
|
|
31336
|
+
getLoadedSessionsClient: () => modelClientForHost("local"),
|
|
28200
31337
|
getSessionImportClient: () => {
|
|
28201
31338
|
const hostId = activeModelHostId() ?? "local";
|
|
28202
31339
|
const client = modelClientForHost(hostId);
|
|
@@ -28239,7 +31376,9 @@ ${accounts_default}`;
|
|
|
28239
31376
|
muse: void 0,
|
|
28240
31377
|
"kiro-cli": void 0,
|
|
28241
31378
|
codebuddy: void 0,
|
|
28242
|
-
"cursor-cli": void 0
|
|
31379
|
+
"cursor-cli": void 0,
|
|
31380
|
+
qoder: void 0,
|
|
31381
|
+
"qoder-cn": void 0
|
|
28243
31382
|
},
|
|
28244
31383
|
webUi: Object.fromEntries(
|
|
28245
31384
|
externalAgents.map((agent) => [agent, false])
|
|
@@ -29238,10 +32377,6 @@ ${accounts_default}`;
|
|
|
29238
32377
|
void refreshDraftCodexUsage(mounted);
|
|
29239
32378
|
}
|
|
29240
32379
|
};
|
|
29241
|
-
const openInstallPage = (agent) => {
|
|
29242
|
-
const url2 = RENDERER_AGENT_INSTALL_URLS[agent];
|
|
29243
|
-
window.open(url2, "_blank", "noopener,noreferrer");
|
|
29244
|
-
};
|
|
29245
32380
|
function resetHarnessAvailabilityRetry(hostId) {
|
|
29246
32381
|
const state = hostHarnessAvailabilityState(hostId);
|
|
29247
32382
|
if (state.retryTimer !== null) {
|
|
@@ -29506,7 +32641,6 @@ ${accounts_default}`;
|
|
|
29506
32641
|
if (!composer.isConnected || !mounted2) return;
|
|
29507
32642
|
void switchComposerAgent(mounted2, agent);
|
|
29508
32643
|
},
|
|
29509
|
-
openInstallPage,
|
|
29510
32644
|
() => {
|
|
29511
32645
|
void loadCodexAccounts();
|
|
29512
32646
|
},
|
|
@@ -30050,6 +33184,7 @@ lucide/dist/esm/icons/search.mjs:
|
|
|
30050
33184
|
lucide/dist/esm/icons/circle-question-mark.mjs:
|
|
30051
33185
|
lucide/dist/esm/icons/users.mjs:
|
|
30052
33186
|
lucide/dist/esm/icons/x.mjs:
|
|
33187
|
+
lucide/dist/esm/icons/star.mjs:
|
|
30053
33188
|
lucide/dist/esm/icons/lock.mjs:
|
|
30054
33189
|
lucide/dist/esm/icons/shield.mjs:
|
|
30055
33190
|
lucide/dist/esm/icons/shield-alert.mjs:
|