@liberseek/boft-cli-win32-arm64 0.6.1 → 0.6.3
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/app/codexhost-distribution.json +1 -1
- package/app/desktop-controller.mjs +4 -1
- package/app/host-runtime.mjs +516 -200
- package/app/plugins/antigravity/plugin.mjs +24 -3
- package/app/plugins/claude-code/plugin.mjs +546 -51
- package/app/plugins/deepseek-harness/plugin.mjs +29 -3
- package/app/plugins/enabled.json +4 -1
- package/app/plugins/grok/plugin.mjs +1992 -1602
- package/app/plugins/hermes/manifest.json +11 -0
- package/app/plugins/hermes/plugin.mjs +21491 -0
- package/app/plugins/kiro-cli/assets/icon.svg +5 -0
- package/app/plugins/kiro-cli/manifest.json +12 -0
- package/app/plugins/kiro-cli/plugin.mjs +23353 -0
- package/app/plugins/muse/assets/icon.svg +4 -0
- package/app/plugins/muse/manifest.json +12 -0
- package/app/plugins/muse/plugin.mjs +18151 -0
- package/app/plugins/omp/plugin.mjs +29 -3
- package/app/plugins/opencode/plugin.mjs +29 -3
- package/app/plugins/pi/plugin.mjs +29 -3
- package/app/renderer-extension.js +571 -153
- package/bin/codexhost.exe +0 -0
- package/libexec/codexhost-node-repl.exe +0 -0
- package/libexec/codexhost-shim.exe +0 -0
- package/libexec/codexhost-updater.exe +0 -0
- package/package.json +1 -1
|
@@ -15,7 +15,10 @@
|
|
|
15
15
|
"opencode",
|
|
16
16
|
"grok",
|
|
17
17
|
"omp",
|
|
18
|
-
"antigravity"
|
|
18
|
+
"antigravity",
|
|
19
|
+
"hermes",
|
|
20
|
+
"muse",
|
|
21
|
+
"kiro-cli"
|
|
19
22
|
];
|
|
20
23
|
var DEFAULT_RENDERER_AGENTS = KNOWN_RENDERER_AGENTS;
|
|
21
24
|
function defaultIdFactory(sequence) {
|
|
@@ -131,6 +134,9 @@
|
|
|
131
134
|
if (agent === "grok" && model) state.grokModel = model;
|
|
132
135
|
if (agent === "omp" && model) state.ompModel = model;
|
|
133
136
|
if (agent === "antigravity" && model) state.antigravityModel = model;
|
|
137
|
+
if (agent === "hermes" && model) state.hermesModel = model;
|
|
138
|
+
if (agent === "muse" && model) state.museModel = model;
|
|
139
|
+
if (agent === "kiro-cli" && model) state.kiroCliModel = model;
|
|
134
140
|
if (agent === "pi" && thinkingOptionId) state.piThinkingOptionId = thinkingOptionId;
|
|
135
141
|
else if (agent === "pi") delete state.piThinkingOptionId;
|
|
136
142
|
if (agent === "claude-code" && thinkingOptionId) {
|
|
@@ -146,6 +152,12 @@
|
|
|
146
152
|
if (agent === "antigravity" && thinkingOptionId) {
|
|
147
153
|
state.antigravityThinkingOptionId = thinkingOptionId;
|
|
148
154
|
} else if (agent === "antigravity") delete state.antigravityThinkingOptionId;
|
|
155
|
+
if (agent === "muse" && thinkingOptionId) {
|
|
156
|
+
state.museThinkingOptionId = thinkingOptionId;
|
|
157
|
+
} else if (agent === "muse") delete state.museThinkingOptionId;
|
|
158
|
+
if (agent === "kiro-cli" && thinkingOptionId) {
|
|
159
|
+
state.kiroCliThinkingOptionId = thinkingOptionId;
|
|
160
|
+
} else if (agent === "kiro-cli") delete state.kiroCliThinkingOptionId;
|
|
149
161
|
if (agent !== "codex") {
|
|
150
162
|
const permissionModeByAgent = {};
|
|
151
163
|
for (const candidate of [
|
|
@@ -155,7 +167,10 @@
|
|
|
155
167
|
"opencode",
|
|
156
168
|
"grok",
|
|
157
169
|
"omp",
|
|
158
|
-
"antigravity"
|
|
170
|
+
"antigravity",
|
|
171
|
+
"hermes",
|
|
172
|
+
"muse",
|
|
173
|
+
"kiro-cli"
|
|
159
174
|
]) {
|
|
160
175
|
const current = state.permissionModeByAgent?.[candidate];
|
|
161
176
|
if (candidate !== agent && current) permissionModeByAgent[candidate] = current;
|
|
@@ -177,7 +192,11 @@
|
|
|
177
192
|
if (agent === "opencode") return state.openCodeModel;
|
|
178
193
|
if (agent === "grok") return state.grokModel;
|
|
179
194
|
if (agent === "omp") return state.ompModel;
|
|
180
|
-
return state.
|
|
195
|
+
if (agent === "hermes") return state.hermesModel;
|
|
196
|
+
if (agent === "antigravity") return state.antigravityModel;
|
|
197
|
+
if (agent === "muse") return state.museModel;
|
|
198
|
+
if (agent === "kiro-cli") return state.kiroCliModel;
|
|
199
|
+
return void 0;
|
|
181
200
|
}
|
|
182
201
|
thinkingOptionForAgent(composer, agent) {
|
|
183
202
|
const state = this.#state(composer);
|
|
@@ -186,7 +205,10 @@
|
|
|
186
205
|
if (agent === "grok") return state.grokThinkingOptionId;
|
|
187
206
|
if (agent === "opencode") return state.openCodeThinkingOptionId;
|
|
188
207
|
if (agent === "omp") return state.ompThinkingOptionId;
|
|
189
|
-
|
|
208
|
+
if (agent === "antigravity") return state.antigravityThinkingOptionId;
|
|
209
|
+
if (agent === "muse") return state.museThinkingOptionId;
|
|
210
|
+
if (agent === "kiro-cli") return state.kiroCliThinkingOptionId;
|
|
211
|
+
return void 0;
|
|
190
212
|
}
|
|
191
213
|
permissionModeForAgent(composer, agent) {
|
|
192
214
|
return this.#state(composer).permissionModeByAgent?.[agent];
|
|
@@ -207,7 +229,10 @@
|
|
|
207
229
|
else if (agent === "opencode") state.openCodeModel = model;
|
|
208
230
|
else if (agent === "grok") state.grokModel = model;
|
|
209
231
|
else if (agent === "omp") state.ompModel = model;
|
|
210
|
-
else state.
|
|
232
|
+
else if (agent === "hermes") state.hermesModel = model;
|
|
233
|
+
else if (agent === "antigravity") state.antigravityModel = model;
|
|
234
|
+
else if (agent === "muse") state.museModel = model;
|
|
235
|
+
else if (agent === "kiro-cli") state.kiroCliModel = model;
|
|
211
236
|
return state;
|
|
212
237
|
}
|
|
213
238
|
setPiConfiguration(composer, model, thinkingOptionId) {
|
|
@@ -244,6 +269,14 @@
|
|
|
244
269
|
state.antigravityThinkingOptionId = thinkingOptionId;
|
|
245
270
|
} else if (agent === "antigravity") {
|
|
246
271
|
delete state.antigravityThinkingOptionId;
|
|
272
|
+
} else if (agent === "muse" && thinkingOptionId) {
|
|
273
|
+
state.museThinkingOptionId = thinkingOptionId;
|
|
274
|
+
} else if (agent === "muse") {
|
|
275
|
+
delete state.museThinkingOptionId;
|
|
276
|
+
} else if (agent === "kiro-cli" && thinkingOptionId) {
|
|
277
|
+
state.kiroCliThinkingOptionId = thinkingOptionId;
|
|
278
|
+
} else if (agent === "kiro-cli") {
|
|
279
|
+
delete state.kiroCliThinkingOptionId;
|
|
247
280
|
}
|
|
248
281
|
return state;
|
|
249
282
|
}
|
|
@@ -14876,6 +14909,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
14876
14909
|
reasoningOutputTokens: nonNegativeSafeIntegerSchema.optional(),
|
|
14877
14910
|
totalTokens: nonNegativeSafeIntegerSchema.optional(),
|
|
14878
14911
|
totalCostUsd: finiteNonNegativeNumberSchema.optional(),
|
|
14912
|
+
totalCredits: finiteNonNegativeNumberSchema.optional(),
|
|
14913
|
+
contextUsagePercent: finiteNonNegativeNumberSchema.optional(),
|
|
14879
14914
|
cacheHitRatePercent: cacheHitRatePercentSchema.optional(),
|
|
14880
14915
|
contextWindowTokens: nonNegativeSafeIntegerSchema.optional(),
|
|
14881
14916
|
contextUsedTokens: nonNegativeSafeIntegerSchema.optional(),
|
|
@@ -14932,12 +14967,28 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
14932
14967
|
var accountCreditsSnapshotSchema = external_exports.object({
|
|
14933
14968
|
/** Native label when the primary limit is scoped to a model or product group. */
|
|
14934
14969
|
label: external_exports.string().min(1).optional(),
|
|
14935
|
-
usedPercent: usagePercentSchema,
|
|
14970
|
+
usedPercent: usagePercentSchema.optional(),
|
|
14971
|
+
remaining: external_exports.number().finite().optional(),
|
|
14972
|
+
unit: external_exports.string().trim().min(1).max(32).optional(),
|
|
14936
14973
|
resetsAt: external_exports.string().min(1).optional(),
|
|
14937
14974
|
periodType: external_exports.enum(["weekly", "monthly", "five_hour", "seven_day", "unknown"]),
|
|
14938
14975
|
productUsage: external_exports.array(accountCreditsProductUsageSchema).min(1).optional(),
|
|
14939
14976
|
resetCredits: accountResetCreditsSchema.optional()
|
|
14940
|
-
}).strict()
|
|
14977
|
+
}).strict().superRefine((credits, context) => {
|
|
14978
|
+
if (credits.usedPercent === void 0 && credits.remaining === void 0) {
|
|
14979
|
+
context.addIssue({
|
|
14980
|
+
code: "custom",
|
|
14981
|
+
message: "Account credits must include usedPercent or remaining"
|
|
14982
|
+
});
|
|
14983
|
+
}
|
|
14984
|
+
if (credits.remaining !== void 0 && !credits.unit) {
|
|
14985
|
+
context.addIssue({
|
|
14986
|
+
code: "custom",
|
|
14987
|
+
message: "Account remaining credits require a unit",
|
|
14988
|
+
path: ["unit"]
|
|
14989
|
+
});
|
|
14990
|
+
}
|
|
14991
|
+
});
|
|
14941
14992
|
var threadUsageInspectionParamsSchema = external_exports.object({
|
|
14942
14993
|
threadId: hostThreadIdSchema,
|
|
14943
14994
|
refresh: external_exports.literal("exact").optional()
|
|
@@ -15367,12 +15418,36 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15367
15418
|
});
|
|
15368
15419
|
|
|
15369
15420
|
// ../shared-contracts/dist/harness-route.js
|
|
15421
|
+
var HARNESS_PLUGIN_ROUTE_PREFIX = "codexhost/plugin-v1@";
|
|
15422
|
+
var MAX_ROUTE_LENGTH = 4096;
|
|
15370
15423
|
var harnessPluginRouteSchema = external_exports.object({
|
|
15371
15424
|
harnessId: harnessPluginIdSchema,
|
|
15372
15425
|
model: harnessModelRefSchema.optional(),
|
|
15373
15426
|
thinkingOptionId: harnessThinkingOptionIdSchema.optional(),
|
|
15374
15427
|
permissionModeId: harnessPermissionModeIdSchema.optional()
|
|
15375
15428
|
}).strict();
|
|
15429
|
+
function encodeHarnessPluginRoute(route) {
|
|
15430
|
+
const parsed = harnessPluginRouteSchema.parse(route);
|
|
15431
|
+
const payload = [...JSON.stringify(parsed)].map((character) => character.charCodeAt(0).toString(16).padStart(2, "0")).join("");
|
|
15432
|
+
return `${HARNESS_PLUGIN_ROUTE_PREFIX}${payload}`;
|
|
15433
|
+
}
|
|
15434
|
+
function decodeHarnessPluginRoute(value) {
|
|
15435
|
+
if (typeof value !== "string" || !value.startsWith(HARNESS_PLUGIN_ROUTE_PREFIX))
|
|
15436
|
+
return null;
|
|
15437
|
+
const payload = value.slice(HARNESS_PLUGIN_ROUTE_PREFIX.length);
|
|
15438
|
+
if (value.length > MAX_ROUTE_LENGTH || !/^(?:[a-f0-9]{2})+$/u.test(payload)) {
|
|
15439
|
+
throw new Error("Invalid Harness plugin route");
|
|
15440
|
+
}
|
|
15441
|
+
try {
|
|
15442
|
+
const json2 = payload.replace(/[a-f0-9]{2}/gu, (byte) => String.fromCharCode(Number.parseInt(byte, 16)));
|
|
15443
|
+
const decoded = harnessPluginRouteSchema.parse(JSON.parse(json2));
|
|
15444
|
+
if (encodeHarnessPluginRoute(decoded) !== value)
|
|
15445
|
+
throw new Error("Noncanonical Harness plugin route");
|
|
15446
|
+
return decoded;
|
|
15447
|
+
} catch {
|
|
15448
|
+
throw new Error("Invalid Harness plugin route");
|
|
15449
|
+
}
|
|
15450
|
+
}
|
|
15376
15451
|
|
|
15377
15452
|
// ../shared-contracts/dist/codex-accounts.js
|
|
15378
15453
|
var accountIdSchema = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._~-]+$/u);
|
|
@@ -15833,6 +15908,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15833
15908
|
// src/assets/antigravity-agent.svg
|
|
15834
15909
|
var antigravity_agent_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -1 28 28"><path d="M21.751 22.607c1.34 1.005 3.35.335 1.508-1.508C17.73 15.74 18.904 1 12.037 1 5.17 1 6.342 15.74.815 21.1c-2.01 2.009.167 2.511 1.507 1.506 5.192-3.517 4.857-9.714 9.715-9.714 4.857 0 4.522 6.197 9.714 9.715z" fill="url(%23ag)"/><defs><linearGradient id="ag" x1="2" y1="12" x2="22" y2="12" gradientUnits="userSpaceOnUse"><stop stop-color="%234285F4"/><stop offset=".33" stop-color="%23EA4335"/><stop offset=".66" stop-color="%23FBBC04"/><stop offset="1" stop-color="%2334A853"/></linearGradient></defs></svg>%0A';
|
|
15835
15910
|
|
|
15911
|
+
// src/assets/hermes-agent.png
|
|
15912
|
+
var hermes_agent_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAACACAYAAADNu93hAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAfqADAAQAAAABAAAAgAAAAADXkvl6AAApwUlEQVR4Ae2dB5xV1Z3HGXoHRQTpVUAUERXBCIJYYmzR1USTGLElMW2jqRtjLImpuzFmo4muGk3U2I0aE2tQUAGxooJIG3oHBYGh7/c7vjPeub5y35v3ZsDw+3y+3nbuaf9yznszg/Xq7dbuGdg9A7tnYPcM7J6B3TPwcZyBso/joLKMqSHPmqVoxNHxb4MKWA+b4d9CH1fDa9xe0Af6Qm/oBh1hT2gOOkEw/EbO18AymAPT4U2YAUtA5/hY6eNgeI28N2jcgTAEDoD+0AIKlcZeDVNgAjwDb4CZYZfXrmh4I7UddIZ9oClsB6N2A5i2d4BG7wBG/CDQIbpAEyhE1msGeBIehpfB9nZJ7SqGb8Ds7gEaug24Fi8HU7MGTyKd5RA4DY6HrlCodIJX4S74GywEnW+X0c5u+MbMZCfQSEa2E74F6oPPTMdrwZS8EpI4ge+69n8BPg/uBWoi9wR/hdvAc/u002unNHxbtG3bttFbt249YuPGjRretC5GrSncdB+kI6yDxfAGPAP/glmQTY7dJeCbYBZoCzXRXF6+AW4FM9Fu5TEDrSl7dllZ2ZQGDRpsBdfqfDHlOvG/hAPBZSKbXDougGmQb1vpyj9HPSeCnxx2K8cMaPCxMBnSTWah9xZQ38/A1J5Npv/RMA4KbSv63rvUczW4J9mtNDPgun0GTIToxBXz3AzwInwWckWhm7+HYCsUow+PUM9g2CmXVPpV63KNHgruiN0MFWOSc9Vh+v85dINsOoiHD0Cx+uXuX4dyzP+20vPbw1XgLjyXsYr9fBNt3g0aN5t0ykehWO270TwaGsG/nfz4dSxMgmJNaKH1PEkfRkA2jeHhBCi0jWrv1a9ffyGbVTd9zsO/jfzyxSj3M3e1CanD62doexRkkhu+s2AF5NVnPpX4BZO4v6h8F8PvwPBPcK3D1XnkN6ATpZT17w9/gPOh0K9LebVgbU0Zwgo0phs3DdILusAcWABxabBycHNm2XzWaN+dS7vbGjZsWH/79u0Nd+zYUQY6kRHvt44udfajTlRKw2vkk+BmcM2sbWlwN2iOcQn4Ecsvf/z2bzb4LZ9GbQvTQWPEZdTOg8OgI+TanQdD2qbjfxVj245fMPl9gXW4d+gGC8H7Okmtq1SGb8lILoJrGzVq1LF58+Y7+BZOj087QAxUjzS4jedGZKHyG7z3wI+IGkgDu5M3wpvBFFgFfUBjvAYadjgor9+vPKv+n0VcGqV+GeT3Ddmk4XUy51Un0/jjYT04eDe2tv0ncKc/H+xnrasUhtezL4MrMXhZ69att2/YsKEBhs80uG2sf4t52ATD12Tt0/BO5BwwhVvXGtD47jHKYRwojfwrmAn+CPdgWA2vg1kirre5MRh6QbY+1ue5708HnX9v0OCPg6m9E+iUN4Nl7edSyDg5PCuJim14o+3X8DWYRSS/u379+r2M9mjvjXBBTtI8DL4KTH9Gvoe8RF07UmvpBl70SxPVHZx8I1ZDz4K/wU3wGOgkM0ADjISOoNPMhbg2ccNsYnYwaoPe5USjuf6HMZpddDjr0uF6wTx4ASxv9ngYtkN/MN1btw5Sa8p/ljN3TaNfBV8BB7mKH7QMIdXXY3OzrXHjxlu5bkh012vatOn2VAYw9ToJo8C0uAUDrqacaXIzBjUtOlG5tAXHcVIdzwIwoo6DVuCE3gI65FIwtWpIDdQPnHjb+CSYkl9JHTlU03yu+oPv2FelwV4Cs5x9DjLSXwM/xUwDs9E9qXP75z0d7QSwPzqGZWpN9YvUkhPxrRQacjaMwnCzMOI6jDJr82aX03qm9RUY3fXcSTH6OoBrp9G/bMuWLaZEJ2EJZco5VsksgWPs8BhTA8oaeRp2ILwDTrSNek/i2ocb34DT4UWYCkfBCEgn678DNFKQfS+HV0GnCbKDY2AS2MYX4W2w3P1gWR3lVDCLuO8wa9SaimF4O3wyXAVOzGQ40yPGqMDwb3Fu5FmuHKMvxLhO4j9hIhwPSmPPBKPHlO0Ee6wS9RnZq7gRvb/dLIJce3Um2+oKGv4v8Ad4HOKpVOM0hdPA8hqpNxwNOkU66SATwHaCTOe3gak9Kp35QDCb2HZo36NzYRvN4RQYCi5LtaYGNWzJydsP7gI9+Tq4FuaDUbcXuFMeDGvgORgGGvUSuBDcWCmN+SYMgeXwJHSDLhBkpjAjmGLbpW5qhPLU9SKOT4Ptu9wsgcXg/bh0lL5wGGikcXADrIBt4HtxbeeGWaQnbAQd2H7fCjqy6d1otj7H61zoLL4T5Jx1hFFwBDg+3ymHpWAbJZeeVxM5wF/AQ3AZ3AuG3z/gZHgGLmSdX0+kj8NoTpiTcA3odGeAcqKXgfc0iBOgIdQT0AGcoM7gZFtWo6mt1Kux2oPr9XXQBCrA7GC5PmA2UW3YY7StqKgYyLnOsxoOBddq+98WrEt0wLgs93sws+nU1mF/jOQt4FxsSl3roPa3KdgnnVSjH0iW2sHeJxh5NPdehrfgXSi5amJ4DWSamgo/hlFQDo/ACDBiR7NLL2vSpMlU0vs8rk+Cx8EJPhOehSPBSSuHPUHHcAKmQ3O4D4KaceLEfQqOA99bAE/DeLBuI1XnU3NgCPwvtACNtnbTpk0jOW5gr6DDtYT6OM/RHHU4+9QY7Es6w2sYDfYd0KiPguU0+olwBkyBv8CL4Fx8El6FF2AYHIfNvdYxbUfHPgxs2/vWu1OqjF51BQdvlO4DnUHpEIfA76ACnJjvwVTQSEPB8mYEo0Aj3g8a502YCMdCL7gINHZUtm39f4WxoCN4z36k037cvBt0Eo32PNjOUgz/EiwEn20iCldyPi9V5nMcMwXGvjzTiXxvHVwJjqkfTAIdwyXAsSyC9+HrcDmcSDDMpJ2nOL8FfN96ZsP5oIOWXJkmK1fDRoTRbpSZKruBHVcOwoF3h0fAidwDxsCl4IAPhoWwBGbCfeBEWv5amAGdQAeYAysgqm1cLIMHwYlTtptOa7ipc+gsRlfrFKb0tWCGaQd+1NTJ2hD9jsc0/UrqyKGadKADoD+0guFgnzaBc9obrL8L+Nz5sh9NwKXJ+g+HVyGUacP5YtAprT/TeHhUcxVieKNLow6Gv4ODcPKDATit3KxM5qhTNIf28Gt4IHU9hOMEcLKUg1wPK2ErKNPfidAU5oLtOoEejUSNuRGi7XJZOfG+49iMHsv6ntHYE3wmLgemZ9vT4I0wiF8rW78yYjWCjheX/dWww0Cnti0zlH3WkT3fC0JdnNbrAU/CkfAG6Dg6RTl0BvuoE06DeRDmhtPiK1Mqy9aSqfw4MHU7eQ7wZVChPidT7+4P4+ApcDJ6g4P9HDwH88FyGkhGwCiYDdbvBJ8P/wGmUq91ECNxIvhsAjwDTpjGMLXbxxXgZO4Pe0MFOLHeqxTp1vsa3+8BPrj54X/tb1+w7x95yD0dexn0BA3cmfraUY9z8DbY33YQ1JoT56N+6oZO7nU56MA6n30dBC+CfU3XLrdrrmCofGpqzwC/QFr8BZ/RO/Gig98OTujhMAXssA6xHNR1MIa17Vu842QfA3fDXNBQpki9/Azw3VlgdDSjLSffz+/NOQYZWdZzGHwWlsKjYD2fhPvBSNXYTqTZybIaqEopI2Wag/YU3Bc0yIaqlz480WlngPXrtPWorymHI+B2WAV7QrRNx/0gHAzTQefQwRaDAWG61/gGiEuNTlkSNciz1kaUP52PZ+dyfJ2dqZ006oaCOhWeB+sdDU7cJ+CrYBpdzdFBD4AucAB0gNagIT06UUZud76lM/26JupEUWmMzqCz2aeW0CN1br3W4XMjymemYyc4n/EamcvgSXgf4tLZ+4Dj0WhBGn8B+I5j8jpI510IHcEyPVLn5RydB8di38tBx9gCJVEmb8/UmBN9BlHr16ZOyqXg5Bqha2EsvAOuT6fA0RDkIPRwjR2VA9XgEqSBOtKOKfgNzs0s0b5qlMoo4xikgfuCS4dGtowTb1Qq+2S9+Ugnsl9LUy/5vk6pkZQZy3E7rqiGcWFk6+BGcVSHcqFRe8IicP5swwi3731gIDhmlzwdrOhycpLKsr1hOJH+OkbRax2YBn0ORoIe/X04BIZAVHpzPwiTFn2W9txo58Ea0MlySac0M9gH+2aabQbtUsdNHPOVfdWhXMKuB8f5GrwMT0NXWA8uT1F15sJIXwgV0Qec6yQa0+MK0CGtR8N7bp+d1/3BMZVE+Ri+IT0YDXZmEpwGys6ugqFeIL3WCXPio/I9PdkJSSqdxUmalvQFyplBnLyQfl2rdQT7n6+MbqP+YjgXhqWuHYMO8S4shc0Q12BuvAPOTVzdubEWrMMloTXfJrbw2zzOVR8YBM5lSZSv4Y+hF0ahxjBl2dElYEp1or12QL0gnfJpz/c1oJNjlBUqjWS6LSR6QvYYz/sTwehW8+Fb4FgzOZURuw7MWMGgnFaqG//dAEZ9ZaSXldXbkx9db2cJtUAn9jca3nL5Lk++n1P5GMKUeRAshgMhRKPpbD8IastJ93BRw6OGN3OUg2mxtuX8nA2O+aswBcxws8Fo/CkMgXTG0eFcp2dBfJnx3RbQkN9SaoOxy/iBZTPUOGX4Zo0bNxyAI2j8QhyW17IrqeEd2L6gd28EO6SM/NXQ0wuku2p4B1YM2T8ziVnmuWJUWEAdR/DOnfAZ0FjqAHCsD4GG1RnSSaeYA85ZXO4DnLtWRHd9fohVGeqk+8pyZWUNOpD+D+EPh4s1l9Xaz8fwRnV9OqkDuIYrDW/H9vCiRLJuI+cJyDTBJWq6qtqZnBl5LhkGgZtIU70G/Qb8BOZBPKX34J4GXQ7xvjuubfyCSkjv9fjhURkflSt/0YSNbet27doNIyO0plzRldTwlnOnWY/dvCksyEjsAUnrCe/lczSD9IPXYGo+LxapbDn1/B5cs7tAkBuwq+Am0Di/ArNSNK3rJD3hJaiAqHSIlkT6Oj8e+wAn0PD1TPfcb9i+ffv9yQC+39DnxVRSg1muqw3jiVXt08EmdKxH1Y3SnLjOO8n24Z7SNJGx1s08uR2OglHQHOIyZV8C3wHLu6GLynT/FkQdIjxvz/xtxPBmTo1daXTTvb+qRgZoyRwP5JHZpqhyMpPIcn4sqiacwL8Q0TBJ5QBXghOUj9xbHARPQj4f7fJpI11ZP6oNg6PBNG+/y2ESjIcJGOZ1vop+j/MeMAZcBqIyS5jmF6SO0Wct+V2FhkZ4kMZnOa2MrnXr1ukIB3br1q3o63xSw7uDT+ft1TJA6HyWo4ZfDu6O85GTeSQsgVuhMkI4llp+3DoK9sAA/gr3ao5buHafo0MMh14ar3HjRh+mQm5G5Bwbta/AR9I9gePmrmr9N93jSJWRr+E5Hwh1FvG6ZFInoWhGuVZpxPFg5CeV+wp30vJPMOJqQzp85bgxUBnR2JFjX+7tCRrDjNeKPxhpsXnzlmzzo5NMh4+ke74FbYFhq6LeiDfVq/fff989Vfe1a9faXlGVrbPRhvTmYkWZH4lcNn4bbSDBuSnzdFgIf4T3IYnsuxGVKSKT1FHTMr2owGViMVRFt5XyK2n+PMJf/fKyMoMG47PG+7w9/wBUDx4ltZXV5FTSyrZSk980FUMuGUeC6/VdeVTYkrJHgNEzER6DJPKbMzdXi5IULlEZM10f8JNJRbQNDY5xP1zkeajhXffJBm7y/NOy3txuEH2vpudJK7Pjx0H/mjbI+w7SNKlBfgambweWRH60G85Hnr1Jh8uZmL259hvFbDIzvA6uzd2yFSzxM+d6HOi41TbEIdoj7WP3DwzP+q8DzMMZDBQDsCjSoElkmn8nScGEZYzez8PdcAFcA6eBsi03cTO8QCNAZ5kHD8HjRMirHNeDBr0O2kBcIbWHd81YZoy60gAaDt/d78G5/UorI13DKz/WoX6QNEgtn1NJDa+nvZSztuQFHJXRexZcCufBeOgKRoWG7QG/gaVwA9ycOudQ+YWGhn0YFkIXcFKNbjdQOo/Pw2S5tu4DM8FJNMP0AjdNSZc7itZILnGdYUbq2DRbbRpfmfbZ/PXg1GDR2YuijF4Xq91y3eEFcAILkZsa19kXwZ35ZNBoa0EjReWS8iswJf4IZjL4YaT3vtCYTY/OIBp0AVhHPmpMYT9i/QDcMNaW8R23Tv1V0PFzyshnzH7JY7Zyj/CBR+R8M3uBpBGvYZbBo3BBrEqfJXGgdyn3W7gejMpM0ghG6u3wNLRk4F8hAg5iLRxIBLTnnhloFRg9E2ECvAVJd/rmz1kwG7ZAE6gNDaGRh2EjJDK86z9GNwD8GDkVimJ4JzipbHAlnAWNIi85iXYoXSbwmR7+33ATuBF7D5ZDJulIK0BDtiTSx3DsxwQcBX04dxJagRu7ATAKDgejeB6Y8pPIMbjRGg7R8SR5t9Aypmud2bmSfOZ/BuV1cDNnjZVPw8EgHWn10EjL3n8WmsOekfueLoDPgF4+F9aDu/gKWA3ZZBbZjrFdC88ADf0AOHk6UJBj6ACjYAxsgrch1wSZ7TS8TpNvxNt39wtilvG7iaTOs5Cyzsv+kE+7OvT9YIaqsfJd25zUn4G76SAn3si7OdyIHE1nI1PXtuW6/Br0BqM3m3Qos0xz1rk1HL8H/4IeEJVZRQO8CUPgargUPgF7QaYxhvo9JpVGuwJ0mINhBAyC4fBHyOXMFKn8NW+j17nMR/0pbKYrijRavtLDX4LjoA0YmR7/DHrlQRDUCKN1I13PJ3KN/LPAjzKmf98xA1RAJtk/vxadw3EcONljwLQe5LLhpH8fVoIRrCG8r0O4tOhAcTXkhuXcNCWJPOv7NtwCOvQosC2zzXS4FxyLGa01ZJLv/h3cXLaDTI7Jo2oy05k5F0E+zlqtkppe2FnT/VSwE262HoN9QAN5rxJ+fWgHmHZDuU2cPw1HQz/IJY3vuq6cVN+tqp/zufBFUEbFPTjanzh29EYWWeePYC1E68t0voVys+FlWBN7Rwe7Dx4Hoz5THeH+TylzB+j44V6S40WUT7qkULQ0MtK7wu2wDTbAWOgMemZ0IEadS8QvUvctb5QcC7mk4fV21QmugVC3DjcJzARGz3ng82FgRGeT6/IVYAYL9dXW8Sna/AEkcZJon/6Pd0IQcFq4nNSayGjRyK+ARjkFHJQd3AKDoSlY7iYwFZ8Aeq0D+hvMgmzSQEav6dh0+yqsAJ3HCLs6dX4+RzPOjfBm6h6HjGrOk1HwCcjlJBQpqlzuHLsO2gYMoiRyzswUZs0aqRgD3koPNP6jYOSZvjXwtTAATgeXBo09GYx+1+gloBFzyfplOPQF69ZZ5oHr64WwJ1j3/TAfnKBcsg86VTHmIFdb8ecavj28BcGp42XSXffhZhcwkJKMMV0dlfeKOWgj8MUUGtlNjBOrbMeMYFrVaKare2EZ5FIFBcpBR3GSuoOp34zyNoyHRWDatA9JZR+sp6ZZL2l78XKHc2MKeGwSf5jh2uywH8wAg2GnlEZy/dUzTU1/Byf6RHgcjNa6lBN4D9i/umA57V4AC/Js/1eUd/mskYoZ8fGOGFGmYFW/UaOGffijAT8KuQm8EpJEO8VKJjOS1JVM9eIm12PSqD+MsjXOUq69pZD1muZbpypfjdGv4bwc3Pi9AHUtnTI4Zl31ZSgNm+5dzpJqAAXNlkk3hGnrLZXh7ZRGbw6mUb9A8fp/4HnYGbQzGN7oXQz5GH4vyu8HNYr6UhneTplGg+Hd1M2Fuk7vdKFSbj73hrpM9XbEfZBLopvTpJs1g6rG6b5UhrdeJ1UHcEDlYOT7EWpnkJtMJ91jXUoj9oFp4AY4qQ6lYI32Z6UyvAYP66cfu+ZAOQwH5fPusD+Uqg9UnVF+y+c6aeTXWH4t3aRJ43T/uHKSugdRaDZsTlI4VWYgR+e34HW+VJNuva5FyvV9OejVRryd9vO2X+T0ADc4ta2wo86r3fB7cOElfxGyTZs2O/jDRn5ZYnvG/wNHKJ/huC/3nYt8DN+J8m7yCrZfjdIFDWeSEW1UKQ3vGr8RngMNrZdPhX+Am77a1t40aMQnlkbn79d38KfLO/iNoDLgh4Y7yvid93r8QUVZ+B25bBXyw6Pt/DZN3FhGrp/LDQ6DxbnLJetwHp+FfL60qqq3lIZ3coM0vtL4fnw5BpaCg30XalOmR9d3oz6xMHKlgf1T5tRLZRgx8fsWxHnWQTPqiu51rG8fmA99IYnhKVb5MwY/IuezN/C9SsW9L9yv6TEa8Q7MnWuQs7UK8oq48HIRji2oowv4fXne0tiBfF/m9wVXYHTTegiEUEU/TuaB+6GkOoiCBldwxKTvVZYrleHdNIVUb1aJRpfP/M55AdSFTK2ukVFnLFk/YvsCDb4W4obvyT2zX9KPdBStDJzBHJNmCN+pUikMrwcaVVHD9+JaBzDF2VlTW22neJqsVFjfC4qUUEnSo//CBfuBUFwjpTO8jmgmzGeDZ50joaDluqpH1lIkWacRHTZtRngf6AyqCWh8Nyfe0ylCWU5LLpeY6P6jpA36L1ywqQttOBfpDG+g+J2CwZBu45DuHkUrf+fP+cxbpTK80d481Rsjy/R6COjR75D+erZq1epaPgYdykeirtw7Bz4DBQ2C9/KRRo8uPfm8m3dZPgD4/5T1yyul4d2MhWvvBemQKyGdkWemnsXf8yOdQZW3HfN+gUZySff2Y4mDDNIJjklduMG5jb/9HsAO+RLOr+T+b+Ev8CgcC6YvHabY6diPTe7ok27s/Bi6BtIZg9u5xf9wazNjDJs250TnjxvQikz3qyFTW34aij9zXodB3um+VIaP79jdSLkedQUHPpXJmMbuuDXHOVxfDlfDMtARHoGLocY/d6aOqFyC3NFXfVUb23xFy3r+BswA+1yQGKN/G6DBNLbznSninRsdLb7x41blkvg8x41exHQU13kbPu8XYo2mu7ROoyoqI9cN3SlwHVTAC3AHX3x05/g3UKb6Q8FU/CJYrphyyTEbVS26GCVT/UaphrffBYvxbcG5bCQ4cTrDWr/9clefrkOtuG82mAyjoar/nLtXcmndAIlViojX8Okmyyg7CxyEn+Mngh78FrQFJ8bJ1uAPwiJINwncLlhOrpOURLZvejXVF9wPPrtvBh041JFp+XKD67NQjtNq6s7VXRDPPp25NwjyCuJSGF5vdL2Ky471h1NB75wOF8KJMBB8bjTEB8atokmjJzW8/ZsKGi1TlPIou1xKIMyz9YTz+ItmO9dsnT+d8Q/g/hOwOPZcZxkJdW541/MOkE569fngx5e34TcwHly/XN9KLVO95JLG1ujvgP3SGAWJpWQz6T44jvUaGJmi3u85DIp0hu/GfT/uafz4Fz2Hc69ODe+A3EC5RqeTndsfzgQnw3T6MtSGjCj7pfPl0nwKvA5O9DqITzS3Esv3g+E1qvOTKert2yZIZ3gzlRnBZXAzRGXGNOVncqho2crzTB2IF3R9jm4o4s/DtQ3vDdkm12dfSpXjUGsyy2h4Jy+XplFAlMYvOOJ51yjX4Z0bDe9HyUxz6f5HowZH4bRK2sC5nQTlEHUO63QpyFQvj6orl+HtrBu1oRBtqHotH15ZXycwujLJzvUF1/falJNqmm+Uo1GN8wbMSZVzcxePsNSjRAffdeMaDO9GNtO865yZ2rIOg2Y9uLuPZ6GDuVc0wxsdX4dySOeF3K4mB9St2p30Fxrhi9An/eOS3DXFOukaIJvm8lDDr0sVWsDRTx+FyGgPEe/77n90vkyG17iZNncaVae1/34Ujhv+QO4lXuczdYA6Kn+gMpajxgnez2lW2bl9s5b44KGdd03SqWpLGj7bEhT68TYnokyvw0GHKUSreMlMyca+zN/U6cHRqM7kfDpGEumY8eXHebe/iZTJ8HasI3wXwiQkqdD6kkaxE3AaDEtScRHKaPRchjeNupsvBw1+A1wGLneFaCkvmd3435fyfzDetm0PdvmZ5tz6NXwm45txQzZYyLl7j+jyq71cZq1fJ3fdz+RgGVOOKeNY8GPZMkgiGzGNdU9SOFXGzcrFkGvdzaPKjEWNhlwR8Q5llsBFcCd8DrLtV3icVat56pw09F8m958ozSayQRN+aNWOMunWal/WMdVaiBveQHLuNXwFjIaMmSqT92n4EZCPrKsnaMykclKPgbFJX6hBOSMp147eifpPuAJ6gJoPiyCeWn2WTcEw2VJ7/H3/BZH23ExneI2uwY1yo9/v/+PqxQ3toJPY/tfAfcNHZKF00vB9wSi2I0lkZw8F381HpqQr4RxI8q5l7NMB8Ck4G46AxpBNvpduQqPv6LgDQSfR0OPhVLgZ1kA+WkBhM6aGTyR/buA/apyhsIZ0w6nhtYvE1YMbwaYTOTeoRsJH6sw00UaGk+sLAyCJGlFoTJKCacq4ht4AGvFxcDPpxDsI07NZpDP0gG6pcx0meLOTcjdcBYshndJNVLpy3psFN8HtYLQ7B+shqYxGjdQHdKJiyP2CHzWVdTov8TG5zgfD+0nEcXwHXoBE34x2oeA8MKVoBDcN2WRjB8F7oEfWBQ7MdTnTUnMuzxxTtr7Z/9tgMJRBkJnsdcj2btUz1un1sJy0bcqtul/Dc50wOJFZaWWa+p7iXjTDXMy1DjscgkNwGruovPPBfzS4cvAa/SteZJFr9Zch3a7Zuuxkvmskr+QlB2zqvwzSreVueCSTNPr1YIS8BhosyMiZD4nGwK9bOR/tSd25lp9Qf5KjG89gl/04D04Qfdf5jxp4WerhsRzNyFWKFgo3Tf9+HHAilIP4OpzhRRpZ/tMwNs0zb7kheQRCp71XKtnv/4CL0jTgeMKY0jyufDaTByvSPHSeQuSmeVz9VkVFRQN+FFv9Zs2vplGFS4gaBc57XN6LZir3Jfb7SMhpeA1tupwNQXtwcjNcDX3AtdWK9gGd4g/ge3EZYc/DQkj3PF6+GNf26XwYFKtsMdeSSb53CMSXNT+OXQ5HQKIIdpNWZJmuQ8TvxfnRUM2QqfYMrmjjIdj25b42rFK6iPdFd6Pjq0p9cOIXET+El+EleDF1vIajkZZOpvjrwDWpNtWbxk6D6NJjH6PX8f44kSfAmdAWjJ4BcAucB9Umjuva1BwaWwAa8lToCtHI5rJSm/lv1PDazHI6i46dVUam69zhsASsqBDe5T3r0ejLY3U4AHe9ZoRC6k7yjg56EjjwMfAM2G6ud+2XaXUKuEbmKl8bz2+gH2ZZnfcVMOWna/cx7reAILOxu3vH7RxUKV3EO1HtwHT/m6qS+Z2Ymv4MN8Lp0B6i0jOnwprozSKfD6I+De96/3M4EtJFCberqSVXRvoh4BzUtTSau3U3lhrSjV06u3G78lfaLB/ksmxZx63jZJXrmLv4f4KpUS9K512Z7r1PeR1GzzPa50O8rFF1J6xO8yxetibXertYxyq4Fe6DTVCTemvzXbNPZxgJK3L0+5c8DwZuwPnT4C7T/n4KskoPGQym6gugAzwJuQarpy2C88A63BTdCvH3LLcYrobaMoDro8uO6/RZ8DbE+7WzXv+Qvpq9poNzl62fZrdGoHpDWKrNFiO8mUumu2dgJRwPepEdmAPxhu2ME2uU9wVltH8bgrdF33Fd15H+C6L3S3Vun81gzUF1g5sgXd9K1YdC69VBPwuTINO6Hup2PKPBSFc6wQbwuZm1H+SUXvNF8CWN/yVQrUBH0Al+Cd+HE6EjBGn0/4TQaOhYONqJ78L1EO6V6hiM3oy2ovLj0AQoVbvFqvc1+jgPkjip5bqAagLjIbznfsoMnEimxWfBQZgqHoIjIJPKeKADaFDLpxv8du5Pg6GgF6crU6x786n/G6AjKiMhRINHPxa9AsVqr67ruZexhKxmMLrXCn36M+dx5+dWerlOu7N1PQ4VaNBxcAl8AnqnGMnxSpgJoWy643s8vwIOhrWQrkwx7rmRM723BL3/JPD7hJMhyPGNATdAudJoMfpU6jrOYxxm6qapMYVot91zUs84JJORYWpfDuk6rle5QzeS0z2P3rMjU6Ar6DjRZzU5t20/Fr4OZqhrYTRoWHUcPAU+Pxvi2pcbvwfrqEk/6vLdRfS9B5SBDrABQn8M3J7gs7yk8U3xTlyorJCjzmPE+SnhuRrWFW3faLW+ARAGp+ebkUaA7bkEuS9xGbJcXG24cT68BdG6d5Xz39FvI70LuCGMBqKB4LOC5IQ6eVZSSIr2o+HFYNo9FTZDMSfVDehPwX7qqMNgNpiN/gGnwEHwW3BD6hKQTvtx82pw8lzW8umjH03fA8cqK2ApLAOzyXrQSfOpM0lZl7X9wQx3I0TnNvqMRx/KSUoq0/oT8Fjqhc4cW6XOMx30vLlwGRhtRt+voRcUU25qrHtWCp3Tyd4DWoAZ61BQfcHnGjcujfUOtIcDQEdNJ51Cx3oWJsBUMN36icUxO/k6nVmuHHxu2b/C3WCG0iGMxLYQliVO85bO/ACcDpdCNLp/wfXDsBWKIiOrE3webgUHrHfPh3JwoPfARdANlE5yOSTx4kLKGHEOUqOp1vBjcGI0/HfhFXD9uxcGQlRO/gh4BKzLPujsGkkDev0W/Bys7xOp81c5boTQZ6N+IcwA29MxXoA3YU7q+nscdX6NZF23go4S6kh6dJ73gkHg3Ot04d3nOQ9zwWnxZUQ5WddCM9DATSAqI/JL4KSHjoXjeu7NSnM/PM/nqPP9EIKGcnIT6IANoUvq3InfD4KcvG+C0W57RqwROhZ+Ag/C+WAGaQ3fAvscUrcOcTUcDd3BMs6BARLk3PSFL8DtoMP8BuyT5Y6CyWA2STJmnW0MdIUpEPriu87DIaAzl0x6rVH1LpwLDSDIATkwoyQaFWFg3nsKHodwr6ZHo8DIVRr7EngD7ofjIKpGXFjWZzqgbRup3waN9Gn4MnQA5UT/CyrAsmaCy6AzRI3MZU5Z/50wEwwKg2MfsC+h/mxzYR9t9xnYCqGsdjgRHHtJZQMngA3bgefg9/Br+CvMhdCp+NH0dA6ESIs/L+RaZ7oXWqT4Ksdb4CQwEpUGNyLs5yKwncWgAw8A3z0MDofGKS7mGMpa/hX4FOj4hcq503FcHm4Hg6QN3A3ZjP+/PLf/k2AbhHlawnmtGJ12KmVn/wmhA0mOayj/TTCKTK1J3klaRoc6BozCJqChlQY9Gm6DZWB9Hm8ElwXLNYPuYJT7vtc/gRUQ2n+S8yEQzW5cFqwLeXM1TIGDwbXZNuLzYmCZEYz2BRBd01/k2jGUNL1TfzXZ2ECYBmFysh318O9DK9Djs5Ut5JkTdjloaKVjngwPganQOk3tD8IoMKqV6bYHdATluC4F18zQjwc47w86RTE1lspWwWw4AgbAmxCNaOdtMugAoT8bODdT6Sx1IidiX3gYNkHoWPS4hfsvw6mgjKpnIFqmWOf3Uu9I+DwYPe9DqNt1/BvQDoI0vv3vBSGSD+dcQ4T37uK8D5RKF1GxkW+bB8FnYSWE9uPHx3k2GkJ/Oa07OYF67E/A6HgCHoE/wOdgT1Cm1aMgbKrig6rptYZ2OTH6Q13rOL8bhoHRHKTT9ga/CGkGXncD+xwizrH0hVLrxzSwFozs7nAHbIQwBtP7Y/BpcI+wy2kPevxHCAOq6VEDmSoXROr0/HrQ2OPgTGgLcXXkxoGwNzQAl63/gVDXPzjfD3SIUsvAuRlM4fbhOFgMzo+p/hwwaHZJOblDIVsay8cRXPMmwrnwL/Bd0+WFYBQfCZ0gnVpy82AYkHrYl390+Hf8FcwKrq1nPJh2oxmCy5KqA7U/BxraTw6mdMd4JbhZ3WVluter8zFuprKmvpfgePgOuI8wVX4T3KwZpZkitRnPToHToRUolyP3ALY3D1y26iKljqDdJXAjXAEuW2aiTGPhUXLVpheHXumxR4GbrmJoFpWYEtvApWBkuJn7C5gug8NwWk1NuTobjgFTuuu/y4Apvzu4yboJdCrrrG1NoEHbHwQ6gM7svmWXlCl+MMyEYJB8jhW8p0E0kpHu2vdfcAJovE3wBPSDbNLoXwaNegmENdNJvh+sx41dN6hL9aLxSWAWcnzDoS6ClWYLlx3WIM9DPsa2rN5+H5wMDv4K8N4dcBK8BUal66KOlU1NeHge6HwPget30Imc6AyTwaWjrmWgjIX+cAi0gF1KrpF2/BVIanQj2g3WnfBJcOftzlrn+Tu8DT+A18E6p8KRkE3umE3v08Gs8SMw+pWO+TVYBn+CHvCxVVE2Cglmxwk/HFxPXXdttyWYYo1UPVvn2AZGsrvZhaAxjUzlRkzj6PXH84//b+a4kX9QSGNrrHFgWsymLjzU8ENgMjwM74CybrPJSHgZrG8L7NbuGfj4zMD/A1DD7XafOaXCAAAAAElFTkSuQmCC";
|
|
15913
|
+
|
|
15914
|
+
// src/assets/kiro-agent.svg
|
|
15915
|
+
var kiro_agent_default = 'data:image/svg+xml,<svg width="1200" height="1200" viewBox="0 0 1200 1200" fill="none" xmlns="http://www.w3.org/2000/svg">%0A<rect width="1200" height="1200" rx="260" fill="%239046FF"/>%0A<mask id="mask0_1106_4856" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="272" y="202" width="655" height="796">%0A<path d="M926.578 202.793H272.637V997.857H926.578V202.793Z" fill="white"/>%0A</mask>%0A<g mask="url(%23mask0_1106_4856)">%0A<path d="M398.554 818.914C316.315 1001.03 491.477 1046.74 620.672 940.156C658.687 1059.66 801.052 970.473 852.234 877.795C964.787 673.567 919.318 465.357 907.64 422.374C827.637 129.443 427.623 128.946 358.8 423.865C342.651 475.544 342.402 534.18 333.458 595.051C328.986 625.86 325.507 645.488 313.83 677.785C306.873 696.424 297.68 712.819 282.773 740.645C259.915 783.881 269.604 867.113 387.87 823.883L399.051 818.914H398.554Z" fill="white"/>%0A<path d="M636.123 549.353C603.328 549.353 598.359 510.097 598.359 486.742C598.359 465.623 602.086 448.977 609.293 438.293C615.504 428.852 624.697 424.131 636.123 424.131C647.555 424.131 657.492 428.852 664.447 438.541C672.398 449.474 676.623 466.12 676.623 486.742C676.623 525.998 661.471 549.353 636.375 549.353H636.123Z" fill="black"/>%0A<path d="M771.24 549.353C738.445 549.353 733.477 510.097 733.477 486.742C733.477 465.623 737.203 448.977 744.41 438.293C750.621 428.852 759.814 424.131 771.24 424.131C782.672 424.131 792.609 428.852 799.564 438.541C807.516 449.474 811.74 466.12 811.74 486.742C811.74 525.998 796.588 549.353 771.492 549.353H771.24Z" fill="black"/>%0A</g>%0A</svg>%0A';
|
|
15916
|
+
|
|
15836
15917
|
// src/assets/omp-agent.svg
|
|
15837
15918
|
var omp_agent_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">%0A <defs>%0A <linearGradient id="omp-gradient" x1="0" y1="0" x2="1" y2="1">%0A <stop offset="0" stop-color="%23ed4abf" />%0A <stop offset=".5" stop-color="%239b4dff" />%0A <stop offset="1" stop-color="%235ad8e6" />%0A </linearGradient>%0A </defs>%0A <path%0A fill="url(%23omp-gradient)"%0A transform="translate(-14.4 -20.2) scale(1.45)"%0A d="M14 16h36v8H40v32h-8V24h-6v22h-8V24h-4z"%0A />%0A</svg>%0A';
|
|
15838
15919
|
|
|
@@ -15848,7 +15929,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15848
15929
|
opencode: "OpenCode",
|
|
15849
15930
|
grok: "Grok",
|
|
15850
15931
|
omp: "Oh My Pi",
|
|
15851
|
-
antigravity: "Antigravity CLI"
|
|
15932
|
+
antigravity: "Antigravity CLI",
|
|
15933
|
+
hermes: "Hermes",
|
|
15934
|
+
muse: "Meta Muse Code",
|
|
15935
|
+
"kiro-cli": "Kiro CLI"
|
|
15852
15936
|
};
|
|
15853
15937
|
var PI_PATHS = [
|
|
15854
15938
|
{
|
|
@@ -15934,6 +16018,40 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15934
16018
|
image.style.flex = "none";
|
|
15935
16019
|
return image;
|
|
15936
16020
|
}
|
|
16021
|
+
if (agent === "hermes") {
|
|
16022
|
+
const image = ownerDocument.createElement("img");
|
|
16023
|
+
image.src = hermes_agent_default;
|
|
16024
|
+
image.alt = "";
|
|
16025
|
+
image.draggable = false;
|
|
16026
|
+
image.style.width = `${size}px`;
|
|
16027
|
+
image.style.height = `${size}px`;
|
|
16028
|
+
image.style.objectFit = "contain";
|
|
16029
|
+
image.style.flex = "none";
|
|
16030
|
+
return image;
|
|
16031
|
+
}
|
|
16032
|
+
if (agent === "kiro-cli") {
|
|
16033
|
+
const image = ownerDocument.createElement("img");
|
|
16034
|
+
image.src = kiro_agent_default;
|
|
16035
|
+
image.alt = "";
|
|
16036
|
+
image.draggable = false;
|
|
16037
|
+
image.style.width = `${size}px`;
|
|
16038
|
+
image.style.height = `${size}px`;
|
|
16039
|
+
image.style.objectFit = "contain";
|
|
16040
|
+
image.style.flex = "none";
|
|
16041
|
+
return image;
|
|
16042
|
+
}
|
|
16043
|
+
if (agent === "muse") {
|
|
16044
|
+
return createSvgIcon(
|
|
16045
|
+
[
|
|
16046
|
+
{
|
|
16047
|
+
d: "M12 2.2c-1.9 3.4-4.8 6.4-8.6 8.4 3.8 2 6.7 5 8.6 8.4 1.9-3.4 4.8-6.4 8.6-8.4C16.8 8.6 13.9 5.6 12 2.2z"
|
|
16048
|
+
}
|
|
16049
|
+
],
|
|
16050
|
+
"#0668E1",
|
|
16051
|
+
size,
|
|
16052
|
+
ownerDocument
|
|
16053
|
+
);
|
|
16054
|
+
}
|
|
15937
16055
|
const mark = ownerDocument.createElement("img");
|
|
15938
16056
|
mark.src = grok_agent_default;
|
|
15939
16057
|
mark.alt = "";
|
|
@@ -16068,6 +16186,15 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16068
16186
|
["path", { d: "m7 10 5 5 5-5" }]
|
|
16069
16187
|
];
|
|
16070
16188
|
|
|
16189
|
+
// ../../node_modules/lucide/dist/esm/icons/hard-drive-download.mjs
|
|
16190
|
+
var HardDriveDownload = [
|
|
16191
|
+
["path", { d: "M12 2v8" }],
|
|
16192
|
+
["path", { d: "m16 6-4 4-4-4" }],
|
|
16193
|
+
["rect", { width: "20", height: "8", x: "2", y: "14", rx: "2" }],
|
|
16194
|
+
["path", { d: "M6 18h.01" }],
|
|
16195
|
+
["path", { d: "M10 18h.01" }]
|
|
16196
|
+
];
|
|
16197
|
+
|
|
16071
16198
|
// ../../node_modules/lucide/dist/esm/icons/external-link.mjs
|
|
16072
16199
|
var ExternalLink = [
|
|
16073
16200
|
["path", { d: "M15 3h6v6" }],
|
|
@@ -16280,6 +16407,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16280
16407
|
"copy",
|
|
16281
16408
|
"ellipsis",
|
|
16282
16409
|
"download",
|
|
16410
|
+
"hard-drive-download",
|
|
16283
16411
|
"chevron-left",
|
|
16284
16412
|
"chevron-right",
|
|
16285
16413
|
"chevron-down",
|
|
@@ -16317,6 +16445,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16317
16445
|
copy: Copy,
|
|
16318
16446
|
ellipsis: Ellipsis,
|
|
16319
16447
|
download: Download,
|
|
16448
|
+
"hard-drive-download": HardDriveDownload,
|
|
16320
16449
|
"chevron-left": ChevronLeft,
|
|
16321
16450
|
"chevron-right": ChevronRight,
|
|
16322
16451
|
"chevron-down": ChevronDown,
|
|
@@ -16681,17 +16810,94 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16681
16810
|
element.style.setProperty("-webkit-backdrop-filter", "none");
|
|
16682
16811
|
}
|
|
16683
16812
|
|
|
16813
|
+
// src/settings/harness-install.ts
|
|
16814
|
+
var HARNESS_INSTALL_SPECS = Object.freeze({
|
|
16815
|
+
pi: {
|
|
16816
|
+
url: "https://pi.dev/",
|
|
16817
|
+
binary: "pi",
|
|
16818
|
+
posix: "curl -fsSL https://pi.dev/install.sh | sh",
|
|
16819
|
+
windows: "npm install -g --ignore-scripts @earendil-works/pi-coding-agent"
|
|
16820
|
+
},
|
|
16821
|
+
"claude-code": {
|
|
16822
|
+
url: "https://code.claude.com/docs/en/quickstart",
|
|
16823
|
+
binary: "claude",
|
|
16824
|
+
posix: "curl -fsSL https://claude.ai/install.sh | bash",
|
|
16825
|
+
windows: "irm https://claude.ai/install.ps1 | iex"
|
|
16826
|
+
},
|
|
16827
|
+
"deepseek-harness": {
|
|
16828
|
+
url: "https://deepseek-harness.github.io/deepseek-harness/",
|
|
16829
|
+
binary: "dsh",
|
|
16830
|
+
posix: "npm install -g @deepseek-ai/dsh",
|
|
16831
|
+
windows: "npm install -g @deepseek-ai/dsh"
|
|
16832
|
+
},
|
|
16833
|
+
opencode: {
|
|
16834
|
+
url: "https://opencode.ai/docs/",
|
|
16835
|
+
binary: "opencode",
|
|
16836
|
+
posix: "curl -fsSL https://opencode.ai/install | bash",
|
|
16837
|
+
windows: "npm install -g opencode-ai"
|
|
16838
|
+
},
|
|
16839
|
+
grok: {
|
|
16840
|
+
url: "https://grok.com/",
|
|
16841
|
+
binary: "grok",
|
|
16842
|
+
posix: "curl -fsSL https://x.ai/cli/install.sh | bash",
|
|
16843
|
+
windows: "irm https://x.ai/cli/install.ps1 | iex"
|
|
16844
|
+
},
|
|
16845
|
+
omp: {
|
|
16846
|
+
url: "https://github.com/can1357/oh-my-pi",
|
|
16847
|
+
binary: "omp",
|
|
16848
|
+
posix: "curl -fsSL https://omp.sh/install | sh",
|
|
16849
|
+
windows: "irm https://omp.sh/install.ps1 | iex"
|
|
16850
|
+
},
|
|
16851
|
+
antigravity: {
|
|
16852
|
+
url: "https://antigravity.google/product/antigravity-cli",
|
|
16853
|
+
binary: "agy",
|
|
16854
|
+
posix: "curl -fsSL https://antigravity.google/cli/install.sh | bash",
|
|
16855
|
+
windows: "irm https://antigravity.google/cli/install.ps1 | iex"
|
|
16856
|
+
},
|
|
16857
|
+
hermes: {
|
|
16858
|
+
url: "https://hermes-agent.nousresearch.com/docs/getting-started/installation",
|
|
16859
|
+
binary: "hermes",
|
|
16860
|
+
posix: "curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash",
|
|
16861
|
+
windows: "iex (irm https://hermes-agent.nousresearch.com/install.ps1)"
|
|
16862
|
+
},
|
|
16863
|
+
muse: {
|
|
16864
|
+
url: "https://developer.meta.com/ai/products/muse-code/",
|
|
16865
|
+
binary: "muse",
|
|
16866
|
+
posix: "curl -fsSL https://dev.meta.ai/install.sh | bash",
|
|
16867
|
+
windows: "curl -fsSL https://dev.meta.ai/install.sh | bash"
|
|
16868
|
+
},
|
|
16869
|
+
"kiro-cli": {
|
|
16870
|
+
url: "https://kiro.dev/docs/cli/",
|
|
16871
|
+
binary: "kiro-cli",
|
|
16872
|
+
posix: "curl -fsSL https://cli.kiro.dev/install | bash",
|
|
16873
|
+
windows: "irm 'https://cli.kiro.dev/install.ps1' | iex"
|
|
16874
|
+
}
|
|
16875
|
+
});
|
|
16876
|
+
function harnessInstallPlatform(window2) {
|
|
16877
|
+
const navigator2 = window2?.navigator;
|
|
16878
|
+
if (!navigator2) return "posix";
|
|
16879
|
+
const identity = `${navigator2.platform ?? ""} ${navigator2.userAgent}`;
|
|
16880
|
+
return /windows|win32|win64/iu.test(identity) ? "windows" : "posix";
|
|
16881
|
+
}
|
|
16882
|
+
function harnessInstallGuide(agent, platform) {
|
|
16883
|
+
const spec = HARNESS_INSTALL_SPECS[agent];
|
|
16884
|
+
return {
|
|
16885
|
+
url: spec.url,
|
|
16886
|
+
binary: spec.binary,
|
|
16887
|
+
command: platform === "windows" ? spec.windows : spec.posix
|
|
16888
|
+
};
|
|
16889
|
+
}
|
|
16890
|
+
function fillHarnessInstallPrompt(template, values) {
|
|
16891
|
+
return template.replaceAll(/\{(name|binary|command|url)\}/g, (_, key) => {
|
|
16892
|
+
if (key === "name") return values.name;
|
|
16893
|
+
if (key === "binary") return values.binary;
|
|
16894
|
+
if (key === "command") return values.command;
|
|
16895
|
+
return values.url;
|
|
16896
|
+
});
|
|
16897
|
+
}
|
|
16898
|
+
|
|
16684
16899
|
// src/settings/connections-page.ts
|
|
16685
16900
|
var CODEXHOST_GITHUB_ISSUES_NEW_URL = "https://github.com/LiberSeek/BOFT-CLI/issues/new";
|
|
16686
|
-
var HARNESS_INSTALL_URLS = Object.freeze({
|
|
16687
|
-
pi: "https://pi.dev/",
|
|
16688
|
-
"claude-code": "https://code.claude.com/docs/en/quickstart",
|
|
16689
|
-
"deepseek-harness": "https://deepseek-harness.github.io/deepseek-harness/",
|
|
16690
|
-
opencode: "https://opencode.ai/docs/",
|
|
16691
|
-
grok: "https://grok.com/",
|
|
16692
|
-
omp: "https://github.com/can1357/oh-my-pi",
|
|
16693
|
-
antigravity: "https://antigravity.google/product/antigravity-cli"
|
|
16694
|
-
});
|
|
16695
16901
|
function connectionStatusLabel(availability, messages, hasError = false) {
|
|
16696
16902
|
if (hasError && availability !== "notInstalled") return messages.connectionStatusError;
|
|
16697
16903
|
if (availability === "ready") return messages.connectionStatusReady;
|
|
@@ -16738,24 +16944,24 @@ ${error51.stderrTail}`] : []
|
|
|
16738
16944
|
line.append(name, content);
|
|
16739
16945
|
return line;
|
|
16740
16946
|
}
|
|
16741
|
-
function
|
|
16742
|
-
button.replaceChildren(createRendererSettingsIcon(
|
|
16947
|
+
function setActionButtonLabel(button, icon2, label) {
|
|
16948
|
+
button.replaceChildren(createRendererSettingsIcon(icon2, 16), label);
|
|
16743
16949
|
}
|
|
16744
|
-
function showCopyButtonFeedback(button, label, restoreLabel) {
|
|
16745
|
-
|
|
16950
|
+
function showCopyButtonFeedback(button, icon2, label, restoreLabel) {
|
|
16951
|
+
setActionButtonLabel(button, icon2, label);
|
|
16746
16952
|
button.ownerDocument.defaultView?.setTimeout(() => {
|
|
16747
|
-
|
|
16953
|
+
setActionButtonLabel(button, icon2, restoreLabel);
|
|
16748
16954
|
}, 2e3);
|
|
16749
16955
|
}
|
|
16750
|
-
function
|
|
16956
|
+
function copyTextToClipboard(document2, button, report, messages, restoreLabel, icon2 = "copy") {
|
|
16751
16957
|
const clipboard = document2.defaultView?.navigator.clipboard;
|
|
16752
16958
|
if (!clipboard) {
|
|
16753
|
-
showCopyButtonFeedback(button, messages.connectionCopyFailed, restoreLabel);
|
|
16959
|
+
showCopyButtonFeedback(button, icon2, messages.connectionCopyFailed, restoreLabel);
|
|
16754
16960
|
return;
|
|
16755
16961
|
}
|
|
16756
16962
|
void clipboard.writeText(report).then(
|
|
16757
|
-
() => showCopyButtonFeedback(button, messages.connectionCopied, restoreLabel),
|
|
16758
|
-
() => showCopyButtonFeedback(button, messages.connectionCopyFailed, restoreLabel)
|
|
16963
|
+
() => showCopyButtonFeedback(button, icon2, messages.connectionCopied, restoreLabel),
|
|
16964
|
+
() => showCopyButtonFeedback(button, icon2, messages.connectionCopyFailed, restoreLabel)
|
|
16759
16965
|
);
|
|
16760
16966
|
}
|
|
16761
16967
|
function connectionHostName(hostId, messages) {
|
|
@@ -16818,6 +17024,16 @@ ${error51.stderrTail}`] : []
|
|
|
16818
17024
|
body.className = "settings-connection-inline-detail";
|
|
16819
17025
|
body.dataset.connectionDetail = item.key;
|
|
16820
17026
|
if (item.agentSnapshot?.availability === "notInstalled") {
|
|
17027
|
+
const guide = harnessInstallGuide(
|
|
17028
|
+
item.agentSnapshot.agent,
|
|
17029
|
+
harnessInstallPlatform(document2.defaultView)
|
|
17030
|
+
);
|
|
17031
|
+
const prompt = fillHarnessInstallPrompt(messages.connectionInstallPrompt, {
|
|
17032
|
+
name: item.name,
|
|
17033
|
+
binary: guide.binary,
|
|
17034
|
+
command: guide.command,
|
|
17035
|
+
url: guide.url
|
|
17036
|
+
});
|
|
16821
17037
|
const callout = document2.createElement("div");
|
|
16822
17038
|
callout.className = "settings-connection-install-callout";
|
|
16823
17039
|
const icon2 = document2.createElement("span");
|
|
@@ -16828,18 +17044,67 @@ ${error51.stderrTail}`] : []
|
|
|
16828
17044
|
title2.textContent = `${messages.connectionInstall} ${item.name}`;
|
|
16829
17045
|
const description2 = document2.createElement("p");
|
|
16830
17046
|
description2.textContent = messages.connectionInstallDescription;
|
|
16831
|
-
|
|
17047
|
+
const commandBlock = document2.createElement("div");
|
|
17048
|
+
commandBlock.className = "settings-connection-install-command";
|
|
17049
|
+
const commandLabel = document2.createElement("span");
|
|
17050
|
+
commandLabel.textContent = messages.connectionInstallCommand;
|
|
17051
|
+
const command = document2.createElement("code");
|
|
17052
|
+
command.textContent = guide.command;
|
|
17053
|
+
commandBlock.append(commandLabel, command);
|
|
17054
|
+
copy2.append(title2, description2, commandBlock);
|
|
16832
17055
|
callout.append(icon2, copy2);
|
|
16833
|
-
const
|
|
16834
|
-
|
|
16835
|
-
install2
|
|
16836
|
-
install2.
|
|
16837
|
-
install2.
|
|
16838
|
-
install2.
|
|
17056
|
+
const actions2 = document2.createElement("div");
|
|
17057
|
+
actions2.className = "settings-connection-install-actions";
|
|
17058
|
+
const install2 = document2.createElement("button");
|
|
17059
|
+
install2.type = "button";
|
|
17060
|
+
install2.className = "settings-command-button";
|
|
17061
|
+
install2.dataset.connectionAction = "install-command";
|
|
17062
|
+
setActionButtonLabel(install2, "hard-drive-download", messages.connectionInstall);
|
|
17063
|
+
install2.addEventListener("click", () => {
|
|
17064
|
+
copyTextToClipboard(
|
|
17065
|
+
document2,
|
|
17066
|
+
install2,
|
|
17067
|
+
guide.command,
|
|
17068
|
+
messages,
|
|
17069
|
+
messages.connectionInstall,
|
|
17070
|
+
"hard-drive-download"
|
|
17071
|
+
);
|
|
17072
|
+
});
|
|
17073
|
+
const copyPromptWrap = document2.createElement("div");
|
|
17074
|
+
copyPromptWrap.className = "settings-connection-copy-prompt";
|
|
17075
|
+
const copyPrompt = document2.createElement("button");
|
|
17076
|
+
copyPrompt.type = "button";
|
|
17077
|
+
copyPrompt.className = "settings-command-button settings-command-button--secondary";
|
|
17078
|
+
copyPrompt.dataset.connectionAction = "copy-prompt";
|
|
17079
|
+
copyPrompt.setAttribute("aria-describedby", `${item.key}-install-prompt-tooltip`);
|
|
17080
|
+
setActionButtonLabel(copyPrompt, "copy", messages.connectionCopyPrompt);
|
|
17081
|
+
copyPrompt.addEventListener("click", () => {
|
|
17082
|
+
copyTextToClipboard(
|
|
17083
|
+
document2,
|
|
17084
|
+
copyPrompt,
|
|
17085
|
+
prompt,
|
|
17086
|
+
messages,
|
|
17087
|
+
messages.connectionCopyPrompt
|
|
17088
|
+
);
|
|
17089
|
+
});
|
|
17090
|
+
const tooltip = document2.createElement("div");
|
|
17091
|
+
tooltip.id = `${item.key}-install-prompt-tooltip`;
|
|
17092
|
+
tooltip.className = "settings-connection-copy-prompt__tooltip";
|
|
17093
|
+
tooltip.setAttribute("role", "tooltip");
|
|
17094
|
+
tooltip.textContent = prompt;
|
|
17095
|
+
copyPromptWrap.append(copyPrompt, tooltip);
|
|
17096
|
+
const official = document2.createElement("a");
|
|
17097
|
+
official.className = "settings-command-button settings-command-button--secondary";
|
|
17098
|
+
official.dataset.connectionAction = "open-installation";
|
|
17099
|
+
official.href = guide.url;
|
|
17100
|
+
official.target = "_blank";
|
|
17101
|
+
official.rel = "noopener noreferrer";
|
|
17102
|
+
official.append(
|
|
16839
17103
|
messages.connectionOpenInstallation,
|
|
16840
17104
|
createRendererSettingsIcon("external-link", 14)
|
|
16841
17105
|
);
|
|
16842
|
-
|
|
17106
|
+
actions2.append(install2, copyPromptWrap, official);
|
|
17107
|
+
body.append(callout, actions2);
|
|
16843
17108
|
return body;
|
|
16844
17109
|
}
|
|
16845
17110
|
if (!item.error) {
|
|
@@ -16901,10 +17166,10 @@ ${error51.stderrTail}`] : []
|
|
|
16901
17166
|
const copy = document2.createElement("button");
|
|
16902
17167
|
copy.type = "button";
|
|
16903
17168
|
copy.className = "settings-command-button settings-command-button--secondary";
|
|
16904
|
-
|
|
17169
|
+
setActionButtonLabel(copy, "copy", messages.connectionCopyDetails);
|
|
16905
17170
|
const report = diagnosticText(hostId, item);
|
|
16906
17171
|
copy.addEventListener("click", () => {
|
|
16907
|
-
|
|
17172
|
+
copyTextToClipboard(document2, copy, report, messages, messages.connectionCopyDetails);
|
|
16908
17173
|
});
|
|
16909
17174
|
logHeader.append(logTitle, copy);
|
|
16910
17175
|
const log = document2.createElement("pre");
|
|
@@ -16959,14 +17224,18 @@ ${error51.stderrTail}`] : []
|
|
|
16959
17224
|
action.setAttribute("role", "cell");
|
|
16960
17225
|
const canExpand = item.error !== null || item.agentSnapshot?.availability === "notInstalled" || item.openWebUi !== void 0;
|
|
16961
17226
|
if (item.agentSnapshot?.availability === "notInstalled") {
|
|
16962
|
-
const install2 = document2.createElement("
|
|
17227
|
+
const install2 = document2.createElement("button");
|
|
17228
|
+
install2.type = "button";
|
|
16963
17229
|
install2.className = "settings-connection-install-link";
|
|
16964
|
-
install2.
|
|
16965
|
-
install2.
|
|
16966
|
-
install2.
|
|
16967
|
-
install2.
|
|
16968
|
-
install2.title = messages.connectionOpenInstallation;
|
|
17230
|
+
install2.dataset.connectionAction = "show-install";
|
|
17231
|
+
install2.setAttribute("aria-label", `${messages.connectionInstall}: ${item.name}`);
|
|
17232
|
+
install2.setAttribute("aria-expanded", String(expanded));
|
|
17233
|
+
install2.title = messages.connectionInstall;
|
|
16969
17234
|
install2.append(createRendererSettingsIcon("download", 17));
|
|
17235
|
+
install2.addEventListener("click", (event) => {
|
|
17236
|
+
event?.stopPropagation?.();
|
|
17237
|
+
toggleExpand();
|
|
17238
|
+
});
|
|
16970
17239
|
action.append(install2);
|
|
16971
17240
|
} else if (item.error) {
|
|
16972
17241
|
const viewError = document2.createElement("button");
|
|
@@ -17431,11 +17700,11 @@ ${error51.stderrTail}`] : []
|
|
|
17431
17700
|
sessionImportTitle: "Session Import",
|
|
17432
17701
|
sessionImportHarness: "Harness",
|
|
17433
17702
|
sessionImportDescription: "Sessions keep their original project path. If a folder is not in the Codex sidebar, add it as a project first. Original history remains managed by the Harness.",
|
|
17434
|
-
sessionImportAvailabilityNote: "Available Harnesses come from the
|
|
17703
|
+
sessionImportAvailabilityNote: "Available Harnesses come from the selected Host. If activity is unknown, close the session in its native client before importing to avoid concurrent writes.",
|
|
17435
17704
|
sessionImportRefresh: "Refresh",
|
|
17436
|
-
sessionImportRefreshing: "Loading
|
|
17437
|
-
sessionImportUnavailable: "Session import is unavailable for this
|
|
17438
|
-
sessionImportEmpty: "No
|
|
17705
|
+
sessionImportRefreshing: "Loading sessions from the selected Host...",
|
|
17706
|
+
sessionImportUnavailable: "Session import is unavailable for this Harness or the selected Host protocol. Update the Host/plugin or choose another Harness.",
|
|
17707
|
+
sessionImportEmpty: "No sessions are available to import on the selected Host.",
|
|
17439
17708
|
sessionImportSearch: "Search",
|
|
17440
17709
|
sessionImportSearchPlaceholder: "Search titles, session IDs or project paths",
|
|
17441
17710
|
sessionImportNoMatches: "No sessions match your search.",
|
|
@@ -17443,7 +17712,7 @@ ${error51.stderrTail}`] : []
|
|
|
17443
17712
|
sessionImportPrevious: "Previous",
|
|
17444
17713
|
sessionImportNext: "Next",
|
|
17445
17714
|
sessionImportPageSummary: "{total} records / {from}-{to}",
|
|
17446
|
-
sessionImportLoadFailed: "
|
|
17715
|
+
sessionImportLoadFailed: "Sessions could not be loaded from the selected Host. Check directory access or duplicate session IDs, then retry.",
|
|
17447
17716
|
sessionImportFailed: "The session could not be imported.",
|
|
17448
17717
|
sessionImportUntitled: "Untitled session",
|
|
17449
17718
|
sessionImportUpdatedAt: "Updated",
|
|
@@ -17557,7 +17826,10 @@ ${error51.stderrTail}`] : []
|
|
|
17557
17826
|
connectionOpenInstallation: "Open official installation page",
|
|
17558
17827
|
connectionOpenHarnessWeb: "Open DeepSeek Harness Web",
|
|
17559
17828
|
connectionInstall: "Install",
|
|
17560
|
-
connectionInstallDescription: "This Harness was not detected.
|
|
17829
|
+
connectionInstallDescription: "This Harness was not detected. Copy the official install command, copy an install prompt for another Agent, or open the official installation page. After installing, return here and run the check again.",
|
|
17830
|
+
connectionInstallCommand: "Install command",
|
|
17831
|
+
connectionCopyPrompt: "Copy prompt",
|
|
17832
|
+
connectionInstallPrompt: "Please install {name} (CLI command: {binary}) on this machine.\n\nUse the official install method and run:\n{command}\n\nOfficial installation page: {url}\n\nAfter installation, verify that `{binary}` is available in the terminal and report the result.",
|
|
17561
17833
|
connectionErrorTitle: "Connection check failed",
|
|
17562
17834
|
connectionErrorLog: "Error log",
|
|
17563
17835
|
connectionOpenIssue: "Open GitHub Issue",
|
|
@@ -17656,11 +17928,11 @@ ${error51.stderrTail}`] : []
|
|
|
17656
17928
|
sessionImportTitle: "\u4F1A\u8BDD\u5BFC\u5165",
|
|
17657
17929
|
sessionImportHarness: "Harness",
|
|
17658
17930
|
sessionImportDescription: "\u4F1A\u8BDD\u5C06\u4FDD\u7559\u539F\u59CB\u9879\u76EE\u8DEF\u5F84\uFF1B\u82E5\u8BE5\u6587\u4EF6\u5939\u5C1A\u672A\u51FA\u73B0\u5728 Codex \u4FA7\u680F\uFF0C\u8BF7\u5148\u5C06\u5176\u6DFB\u52A0\u4E3A\u9879\u76EE\u3002\u539F\u59CB\u5386\u53F2\u4ECD\u7531 Harness \u7BA1\u7406\u3002",
|
|
17659
|
-
sessionImportAvailabilityNote: "\u53EF\u9009 Harness \u6765\u81EA\
|
|
17931
|
+
sessionImportAvailabilityNote: "\u53EF\u9009 Harness \u6765\u81EA\u5F53\u524D Host\u3002\u8FD0\u884C\u72B6\u6001\u672A\u77E5\u65F6\uFF0C\u8BF7\u5148\u5728\u539F\u751F\u5BA2\u6237\u7AEF\u5173\u95ED\u8BE5\u4F1A\u8BDD\u518D\u5BFC\u5165\uFF0C\u907F\u514D\u540C\u65F6\u5199\u5165\u3002",
|
|
17660
17932
|
sessionImportRefresh: "\u5237\u65B0",
|
|
17661
|
-
sessionImportRefreshing: "\u6B63\u5728\u8BFB\u53D6\
|
|
17662
|
-
sessionImportUnavailable: "\
|
|
17663
|
-
sessionImportEmpty: "\u6CA1\u6709\u53EF\u5BFC\u5165\u7684\
|
|
17933
|
+
sessionImportRefreshing: "\u6B63\u5728\u8BFB\u53D6\u5F53\u524D Host \u4E0A\u7684\u4F1A\u8BDD\u2026\u2026",
|
|
17934
|
+
sessionImportUnavailable: "\u8BE5 Harness \u6216\u5F53\u524D Host \u534F\u8BAE\u6682\u4E0D\u652F\u6301\u4F1A\u8BDD\u5BFC\u5165\uFF0C\u8BF7\u66F4\u65B0 Host/\u63D2\u4EF6\u6216\u9009\u62E9\u5176\u4ED6 Harness\u3002",
|
|
17935
|
+
sessionImportEmpty: "\u5F53\u524D Host \u4E0A\u6CA1\u6709\u53EF\u5BFC\u5165\u7684\u4F1A\u8BDD\u3002",
|
|
17664
17936
|
sessionImportSearch: "\u641C\u7D22",
|
|
17665
17937
|
sessionImportSearchPlaceholder: "\u641C\u7D22\u6807\u9898\u3001\u4F1A\u8BDD ID \u6216\u9879\u76EE\u8DEF\u5F84",
|
|
17666
17938
|
sessionImportNoMatches: "\u6CA1\u6709\u5339\u914D\u7684\u4F1A\u8BDD\u3002",
|
|
@@ -17668,7 +17940,7 @@ ${error51.stderrTail}`] : []
|
|
|
17668
17940
|
sessionImportPrevious: "\u4E0A\u4E00\u9875",
|
|
17669
17941
|
sessionImportNext: "\u4E0B\u4E00\u9875",
|
|
17670
17942
|
sessionImportPageSummary: "{total} \u6761\u8BB0\u5F55 / {from}-{to}",
|
|
17671
|
-
sessionImportLoadFailed: "\u65E0\u6CD5\u8BFB\u53D6\
|
|
17943
|
+
sessionImportLoadFailed: "\u65E0\u6CD5\u8BFB\u53D6\u5F53\u524D Host \u4E0A\u7684\u4F1A\u8BDD\uFF0C\u8BF7\u68C0\u67E5\u76EE\u5F55\u8BBF\u95EE\u6743\u9650\u6216\u91CD\u590D\u7684\u4F1A\u8BDD ID \u540E\u91CD\u8BD5\u3002",
|
|
17672
17944
|
sessionImportFailed: "\u65E0\u6CD5\u5BFC\u5165\u8BE5\u4F1A\u8BDD\u3002",
|
|
17673
17945
|
sessionImportUntitled: "\u672A\u547D\u540D\u4F1A\u8BDD",
|
|
17674
17946
|
sessionImportUpdatedAt: "\u66F4\u65B0\u65F6\u95F4",
|
|
@@ -17782,7 +18054,10 @@ ${error51.stderrTail}`] : []
|
|
|
17782
18054
|
connectionOpenInstallation: "\u524D\u5F80\u5B98\u65B9\u5B89\u88C5\u9875\u9762",
|
|
17783
18055
|
connectionOpenHarnessWeb: "\u6253\u5F00 DeepSeek Harness Web",
|
|
17784
18056
|
connectionInstall: "\u5B89\u88C5",
|
|
17785
|
-
connectionInstallDescription: "\u5C1A\u672A\u68C0\u6D4B\u5230\u8BE5 Harness\u3002\
|
|
18057
|
+
connectionInstallDescription: "\u5C1A\u672A\u68C0\u6D4B\u5230\u8BE5 Harness\u3002\u53EF\u4EE5\u590D\u5236\u5B98\u65B9\u5B89\u88C5\u547D\u4EE4\u3001\u590D\u5236\u5B89\u88C5 Prompt \u4EA4\u7ED9\u5176\u4ED6 Agent \u6267\u884C\uFF0C\u6216\u524D\u5F80\u5B98\u65B9\u5B89\u88C5\u9875\u9762\u3002\u5B89\u88C5\u5B8C\u6210\u540E\u8BF7\u8FD4\u56DE\u6B64\u9875\u9762\u91CD\u65B0\u68C0\u67E5\u3002",
|
|
18058
|
+
connectionInstallCommand: "\u5B89\u88C5\u547D\u4EE4",
|
|
18059
|
+
connectionCopyPrompt: "\u590D\u5236 Prompt",
|
|
18060
|
+
connectionInstallPrompt: "\u8BF7\u5E2E\u6211\u5728\u672C\u673A\u5B89\u88C5 {name}\uFF08CLI \u547D\u4EE4\uFF1A{binary}\uFF09\u3002\n\n\u8BF7\u6309\u5B98\u65B9\u5B89\u88C5\u65B9\u5F0F\u6267\u884C\u4EE5\u4E0B\u547D\u4EE4\uFF0C\u5E76\u5904\u7406 PATH\u3001\u6743\u9650\u548C\u4F9D\u8D56\u95EE\u9898\uFF1A\n{command}\n\n\u5B98\u65B9\u5B89\u88C5\u9875\u9762\uFF1A{url}\n\n\u5B89\u88C5\u5B8C\u6210\u540E\u8BF7\u9A8C\u8BC1 `{binary}` \u53EF\u4EE5\u5728\u7EC8\u7AEF\u4E2D\u8FD0\u884C\uFF0C\u5E76\u544A\u8BC9\u6211\u7ED3\u679C\u3002",
|
|
17786
18061
|
connectionErrorTitle: "\u8FDE\u63A5\u68C0\u67E5\u5931\u8D25",
|
|
17787
18062
|
connectionErrorLog: "\u9519\u8BEF\u65E5\u5FD7",
|
|
17788
18063
|
connectionOpenIssue: "\u63D0\u4EA4 GitHub Issue",
|
|
@@ -17911,7 +18186,10 @@ ${error51.stderrTail}`] : []
|
|
|
17911
18186
|
opencode: "https://opencode.ai/docs/",
|
|
17912
18187
|
grok: "https://grok.com/",
|
|
17913
18188
|
omp: "https://github.com/can1357/oh-my-pi",
|
|
17914
|
-
antigravity: "https://antigravity.google/product/antigravity-cli"
|
|
18189
|
+
antigravity: "https://antigravity.google/product/antigravity-cli",
|
|
18190
|
+
hermes: "https://hermes-agent.nousresearch.com/docs",
|
|
18191
|
+
muse: "https://www.meta.ai/",
|
|
18192
|
+
"kiro-cli": "https://kiro.dev/docs/cli/"
|
|
17915
18193
|
};
|
|
17916
18194
|
var CONTROL_ATTRIBUTE = "data-codexhost-agent-control";
|
|
17917
18195
|
var AGENT_MENU_WIDTH = 224;
|
|
@@ -19258,7 +19536,10 @@ ${error51.stderrTail}`] : []
|
|
|
19258
19536
|
["Workspace write", "\u5DE5\u4F5C\u533A\u5199\u5165"],
|
|
19259
19537
|
["Full access (dangerous)", "\u5B8C\u5168\u8BBF\u95EE\uFF08\u5371\u9669\uFF09"],
|
|
19260
19538
|
["Configured permissions", "\u4F7F\u7528\u5DF2\u914D\u7F6E\u6743\u9650"],
|
|
19261
|
-
["Skip permissions", "\u8DF3\u8FC7\u6743\u9650\u68C0\u67E5"]
|
|
19539
|
+
["Skip permissions", "\u8DF3\u8FC7\u6743\u9650\u68C0\u67E5"],
|
|
19540
|
+
["On request", "\u6309\u8BF7\u6C42\u8BE2\u95EE"],
|
|
19541
|
+
["Prompt unmatched", "\u672A\u5339\u914D\u65F6\u8BE2\u95EE"],
|
|
19542
|
+
["Deny unmatched", "\u672A\u5339\u914D\u65F6\u62D2\u7EDD"]
|
|
19262
19543
|
]);
|
|
19263
19544
|
var CHINESE_PERMISSION_MODE_DESCRIPTIONS = /* @__PURE__ */ new Map([
|
|
19264
19545
|
[
|
|
@@ -19610,7 +19891,9 @@ ${error51.stderrTail}`] : []
|
|
|
19610
19891
|
// src/renderer-usage-control.ts
|
|
19611
19892
|
var ENGLISH_USAGE_MESSAGES = Object.freeze({
|
|
19612
19893
|
usage: "Usage",
|
|
19894
|
+
account: "Account",
|
|
19613
19895
|
context: "Context",
|
|
19896
|
+
recordedCredits: "Recorded usage",
|
|
19614
19897
|
latestCacheHit: "Latest cache hit",
|
|
19615
19898
|
outputSpeed: "Output speed",
|
|
19616
19899
|
cacheRead: "Cache read",
|
|
@@ -19618,19 +19901,17 @@ ${error51.stderrTail}`] : []
|
|
|
19618
19901
|
reasoning: "Reasoning",
|
|
19619
19902
|
totalTokens: "Total tokens",
|
|
19620
19903
|
inputOutput: "Input / output",
|
|
19621
|
-
fiveHourLimit: "5-hour limit",
|
|
19622
|
-
sevenDayLimit: "7-day limit",
|
|
19623
19904
|
sessionCostEstimate: "Session cost estimate",
|
|
19624
19905
|
threadUsage: "Thread Usage",
|
|
19625
19906
|
threadUsageDetails: "Thread Usage details",
|
|
19626
19907
|
tokensSummary: "tokens",
|
|
19627
|
-
tokensPerSecond: "tok/s"
|
|
19628
|
-
fiveHourSummary: "5h",
|
|
19629
|
-
sevenDaySummary: "7d"
|
|
19908
|
+
tokensPerSecond: "tok/s"
|
|
19630
19909
|
});
|
|
19631
19910
|
var CHINESE_USAGE_MESSAGES = Object.freeze({
|
|
19632
19911
|
usage: "\u7528\u91CF",
|
|
19912
|
+
account: "\u8D26\u53F7",
|
|
19633
19913
|
context: "\u4E0A\u4E0B\u6587",
|
|
19914
|
+
recordedCredits: "\u5DF2\u8BB0\u5F55\u6D88\u8017",
|
|
19634
19915
|
latestCacheHit: "\u7F13\u5B58\u547D\u4E2D\u7387",
|
|
19635
19916
|
outputSpeed: "\u8F93\u51FA\u901F\u5EA6",
|
|
19636
19917
|
cacheRead: "\u7F13\u5B58\u8BFB\u53D6",
|
|
@@ -19638,15 +19919,11 @@ ${error51.stderrTail}`] : []
|
|
|
19638
19919
|
reasoning: "\u63A8\u7406",
|
|
19639
19920
|
totalTokens: "Token \u603B\u6570",
|
|
19640
19921
|
inputOutput: "\u8F93\u5165 / \u8F93\u51FA",
|
|
19641
|
-
fiveHourLimit: "5 \u5C0F\u65F6\u9650\u989D",
|
|
19642
|
-
sevenDayLimit: "7 \u5929\u9650\u989D",
|
|
19643
19922
|
sessionCostEstimate: "\u4F1A\u8BDD\u8D39\u7528\u4F30\u7B97",
|
|
19644
19923
|
threadUsage: "\u5BF9\u8BDD\u7528\u91CF",
|
|
19645
19924
|
threadUsageDetails: "\u5BF9\u8BDD\u7528\u91CF\u8BE6\u60C5",
|
|
19646
19925
|
tokensSummary: "Token",
|
|
19647
|
-
tokensPerSecond: "Token/\u79D2"
|
|
19648
|
-
fiveHourSummary: "5 \u5C0F\u65F6",
|
|
19649
|
-
sevenDaySummary: "7 \u5929"
|
|
19926
|
+
tokensPerSecond: "Token/\u79D2"
|
|
19650
19927
|
});
|
|
19651
19928
|
function rendererUsageMessages(locale) {
|
|
19652
19929
|
return locale === "zh-CN" ? CHINESE_USAGE_MESSAGES : ENGLISH_USAGE_MESSAGES;
|
|
@@ -19660,6 +19937,9 @@ ${error51.stderrTail}`] : []
|
|
|
19660
19937
|
function formatRendererCost(value) {
|
|
19661
19938
|
return `$${value.toFixed(3)}`;
|
|
19662
19939
|
}
|
|
19940
|
+
function formatRendererCredits(value) {
|
|
19941
|
+
return `${value > 0 && value < 1e-3 ? "<0.001" : decimal(value, 3)} credits`;
|
|
19942
|
+
}
|
|
19663
19943
|
function formatRendererTokenRate(value, locale = "en") {
|
|
19664
19944
|
return `${decimal(value, 1)} ${rendererUsageMessages(locale).tokensPerSecond}`;
|
|
19665
19945
|
}
|
|
@@ -19714,27 +19994,11 @@ ${error51.stderrTail}`] : []
|
|
|
19714
19994
|
svg.append(track, fill);
|
|
19715
19995
|
return svg;
|
|
19716
19996
|
}
|
|
19717
|
-
function formatRendererPlanReset(unixSeconds, locale) {
|
|
19718
|
-
const date5 = new Date(unixSeconds * 1e3);
|
|
19719
|
-
if (Number.isNaN(date5.getTime())) return "";
|
|
19720
|
-
return date5.toLocaleString(locale === "zh-CN" ? "zh-CN" : void 0, {
|
|
19721
|
-
month: "long",
|
|
19722
|
-
day: "numeric",
|
|
19723
|
-
hour: "numeric",
|
|
19724
|
-
minute: "2-digit"
|
|
19725
|
-
});
|
|
19726
|
-
}
|
|
19727
|
-
function formatRendererPlanWindow(usedPercent, resetsAtUnix, locale) {
|
|
19728
|
-
const percent = formatRendererCreditsPercent(usedPercent);
|
|
19729
|
-
if (resetsAtUnix === void 0) return percent;
|
|
19730
|
-
const reset = formatRendererPlanReset(resetsAtUnix, locale);
|
|
19731
|
-
return reset.length > 0 ? `${percent} \xB7 ${reset}` : percent;
|
|
19732
|
-
}
|
|
19733
19997
|
function rendererUsageTriggerMaxWidth() {
|
|
19734
19998
|
return "min(180px, 30vw)";
|
|
19735
19999
|
}
|
|
19736
20000
|
function rendererUsageHasDisplayData(usage) {
|
|
19737
|
-
return usage?.cacheHitRatePercent !== void 0 || usage?.outputTokensPerSecond !== void 0 || usage?.totalCostUsd !== void 0 || usage?.
|
|
20001
|
+
return usage?.cacheHitRatePercent !== void 0 || usage?.outputTokensPerSecond !== void 0 || usage?.totalCostUsd !== void 0 || usage?.totalCredits !== void 0 || usage?.contextUsagePercent !== void 0 || usage?.contextUsedTokens !== void 0 && usage.contextWindowTokens !== void 0 || usage?.totalTokens !== void 0 || usage?.inputTokens !== void 0 || usage?.cachedInputTokens !== void 0 || usage?.cacheWriteInputTokens !== void 0 || usage?.outputTokens !== void 0 || usage?.reasoningOutputTokens !== void 0;
|
|
19738
20002
|
}
|
|
19739
20003
|
function applyRendererPopoverChrome(popover) {
|
|
19740
20004
|
popover.style.border = "1px solid light-dark(rgba(15, 23, 42, 0.10), color-mix(in srgb, CanvasText 16%, transparent))";
|
|
@@ -19743,10 +20007,10 @@ ${error51.stderrTail}`] : []
|
|
|
19743
20007
|
popover.style.color = "CanvasText";
|
|
19744
20008
|
popover.style.boxShadow = "light-dark(0 10px 24px rgba(15, 23, 42, 0.12), 0 20px 45px rgba(0, 0, 0, 0.42)), 0 2px 8px light-dark(rgba(15, 23, 42, 0.06), rgba(0, 0, 0, 0.28))";
|
|
19745
20009
|
}
|
|
19746
|
-
function addDetailRow(parent, label, value) {
|
|
20010
|
+
function addDetailRow(parent, label, value, wrap = false) {
|
|
19747
20011
|
const row = document.createElement("div");
|
|
19748
20012
|
row.style.display = "grid";
|
|
19749
|
-
row.style.gridTemplateColumns = "minmax(0, 1fr) auto";
|
|
20013
|
+
row.style.gridTemplateColumns = wrap ? "auto minmax(0, 1fr)" : "minmax(0, 1fr) auto";
|
|
19750
20014
|
row.style.gap = "20px";
|
|
19751
20015
|
row.style.padding = "4px 0";
|
|
19752
20016
|
const labelElement = document.createElement("span");
|
|
@@ -19756,17 +20020,24 @@ ${error51.stderrTail}`] : []
|
|
|
19756
20020
|
valueElement.textContent = value;
|
|
19757
20021
|
valueElement.style.fontVariantNumeric = "tabular-nums";
|
|
19758
20022
|
valueElement.style.textAlign = "right";
|
|
20023
|
+
if (wrap) {
|
|
20024
|
+
valueElement.style.overflowWrap = "anywhere";
|
|
20025
|
+
valueElement.title = value;
|
|
20026
|
+
}
|
|
19759
20027
|
row.append(labelElement, valueElement);
|
|
19760
20028
|
parent.append(row);
|
|
19761
20029
|
}
|
|
19762
|
-
function renderDetails(popover, usage, messages, locale) {
|
|
20030
|
+
function renderDetails(popover, usage, messages, locale, accountName) {
|
|
19763
20031
|
popover.replaceChildren();
|
|
19764
20032
|
const heading = document.createElement("div");
|
|
19765
20033
|
heading.textContent = messages.usage;
|
|
19766
20034
|
heading.style.fontWeight = "600";
|
|
19767
20035
|
heading.style.marginBottom = "6px";
|
|
19768
20036
|
popover.append(heading);
|
|
19769
|
-
if (
|
|
20037
|
+
if (accountName) addDetailRow(popover, messages.account, accountName, true);
|
|
20038
|
+
if (usage?.contextUsagePercent !== void 0) {
|
|
20039
|
+
addDetailRow(popover, messages.context, `${decimal(usage.contextUsagePercent, 1)}%`);
|
|
20040
|
+
} else if (usage?.contextUsedTokens !== void 0 && usage.contextWindowTokens !== void 0) {
|
|
19770
20041
|
const contextPercent = usage.contextWindowTokens > 0 ? usage.contextUsedTokens / usage.contextWindowTokens * 100 : null;
|
|
19771
20042
|
addDetailRow(
|
|
19772
20043
|
popover,
|
|
@@ -19808,34 +20079,15 @@ ${error51.stderrTail}`] : []
|
|
|
19808
20079
|
addDetailRow(
|
|
19809
20080
|
popover,
|
|
19810
20081
|
messages.inputOutput,
|
|
19811
|
-
`${
|
|
19812
|
-
);
|
|
19813
|
-
}
|
|
19814
|
-
if (usage?.planFiveHourUsedPercent !== void 0) {
|
|
19815
|
-
addDetailRow(
|
|
19816
|
-
popover,
|
|
19817
|
-
messages.fiveHourLimit,
|
|
19818
|
-
formatRendererPlanWindow(
|
|
19819
|
-
usage.planFiveHourUsedPercent,
|
|
19820
|
-
usage.planFiveHourResetsAtUnix,
|
|
19821
|
-
locale
|
|
19822
|
-
)
|
|
19823
|
-
);
|
|
19824
|
-
}
|
|
19825
|
-
if (usage?.planSevenDayUsedPercent !== void 0) {
|
|
19826
|
-
addDetailRow(
|
|
19827
|
-
popover,
|
|
19828
|
-
messages.sevenDayLimit,
|
|
19829
|
-
formatRendererPlanWindow(
|
|
19830
|
-
usage.planSevenDayUsedPercent,
|
|
19831
|
-
usage.planSevenDayResetsAtUnix,
|
|
19832
|
-
locale
|
|
19833
|
-
)
|
|
20082
|
+
`${usage.inputTokens === void 0 ? "-" : formatRendererTokenCount(usage.inputTokens)} / ${usage.outputTokens === void 0 ? "-" : formatRendererTokenCount(usage.outputTokens)}`
|
|
19834
20083
|
);
|
|
19835
20084
|
}
|
|
19836
20085
|
if (usage?.totalCostUsd !== void 0) {
|
|
19837
20086
|
addDetailRow(popover, messages.sessionCostEstimate, formatRendererCost(usage.totalCostUsd));
|
|
19838
20087
|
}
|
|
20088
|
+
if (usage?.totalCredits !== void 0) {
|
|
20089
|
+
addDetailRow(popover, messages.recordedCredits, formatRendererCredits(usage.totalCredits));
|
|
20090
|
+
}
|
|
19839
20091
|
}
|
|
19840
20092
|
function popoverIsOpen(popover) {
|
|
19841
20093
|
try {
|
|
@@ -19919,6 +20171,8 @@ ${error51.stderrTail}`] : []
|
|
|
19919
20171
|
popover.setAttribute("popover", "auto");
|
|
19920
20172
|
popover.hidden = typeof popover.showPopover !== "function";
|
|
19921
20173
|
popover.style.position = "fixed";
|
|
20174
|
+
popover.style.boxSizing = "border-box";
|
|
20175
|
+
popover.style.margin = "0";
|
|
19922
20176
|
popover.style.inset = "auto";
|
|
19923
20177
|
popover.style.width = "260px";
|
|
19924
20178
|
popover.style.maxWidth = "min(320px, calc(100vw - 24px))";
|
|
@@ -19990,7 +20244,7 @@ ${error51.stderrTail}`] : []
|
|
|
19990
20244
|
document.body.append(popover);
|
|
19991
20245
|
return control;
|
|
19992
20246
|
}
|
|
19993
|
-
function renderRendererUsageControl(control, usage, locale = control.locale) {
|
|
20247
|
+
function renderRendererUsageControl(control, usage, locale = control.locale, accountName = null) {
|
|
19994
20248
|
control.locale = locale;
|
|
19995
20249
|
const messages = rendererUsageMessages(locale);
|
|
19996
20250
|
control.popover.setAttribute("aria-label", messages.threadUsageDetails);
|
|
@@ -19999,18 +20253,20 @@ ${error51.stderrTail}`] : []
|
|
|
19999
20253
|
const totalCostUsd = usage?.totalCostUsd;
|
|
20000
20254
|
const hasContext = usage?.contextUsedTokens !== void 0 && usage.contextWindowTokens !== void 0;
|
|
20001
20255
|
const hasTokenUsage = usage?.totalTokens !== void 0 || usage?.inputTokens !== void 0 || usage?.cachedInputTokens !== void 0 || usage?.cacheWriteInputTokens !== void 0 || usage?.outputTokens !== void 0 || usage?.reasoningOutputTokens !== void 0;
|
|
20002
|
-
const
|
|
20003
|
-
const visible = rendererUsageHasDisplayData(usage);
|
|
20256
|
+
const visible = rendererUsageHasDisplayData(usage) || Boolean(accountName);
|
|
20004
20257
|
control.root.style.display = visible ? "inline-flex" : "none";
|
|
20005
20258
|
if (!visible) {
|
|
20006
20259
|
closePopover(control);
|
|
20007
20260
|
return false;
|
|
20008
20261
|
}
|
|
20009
20262
|
const summary = [
|
|
20263
|
+
usage?.totalCredits !== void 0 ? formatRendererCredits(usage.totalCredits) : null,
|
|
20010
20264
|
cacheHitRatePercent !== void 0 ? formatRendererCacheHitRate(cacheHitRatePercent) : null,
|
|
20011
20265
|
outputTokensPerSecond !== void 0 ? formatRendererTokenRate(outputTokensPerSecond, locale) : null,
|
|
20012
20266
|
totalCostUsd !== void 0 ? formatRendererCost(totalCostUsd) : null
|
|
20013
20267
|
].filter((value) => value !== null);
|
|
20268
|
+
const contextPercent = usage?.contextUsagePercent;
|
|
20269
|
+
if (contextPercent !== void 0 && summary.length === 0) summary.push(messages.usage);
|
|
20014
20270
|
if (summary.length === 0 && hasContext && usage?.contextWindowTokens !== void 0 && usage.contextWindowTokens > 0) {
|
|
20015
20271
|
summary.push(
|
|
20016
20272
|
formatRendererContextSummary(usage.contextUsedTokens ?? 0, usage.contextWindowTokens)
|
|
@@ -20024,18 +20280,13 @@ ${error51.stderrTail}`] : []
|
|
|
20024
20280
|
`${formatRendererTokenCount((usage?.inputTokens ?? 0) + (usage?.outputTokens ?? 0))} ${messages.tokensSummary}`
|
|
20025
20281
|
);
|
|
20026
20282
|
}
|
|
20027
|
-
|
|
20028
|
-
|
|
20029
|
-
usage?.planFiveHourUsedPercent !== void 0 ? `${messages.fiveHourSummary} ${formatRendererCreditsPercent(usage.planFiveHourUsedPercent)}` : `${messages.sevenDaySummary} ${formatRendererCreditsPercent(usage?.planSevenDayUsedPercent ?? 0)}`
|
|
20030
|
-
);
|
|
20031
|
-
}
|
|
20032
|
-
const compactSummary = summary.join(" \xB7 ");
|
|
20033
|
-
const accessibleSummary = `${messages.threadUsage}: ${compactSummary}`;
|
|
20283
|
+
const compactSummary = summary.join(" \xB7 ") || messages.usage;
|
|
20284
|
+
const accessibleSummary = `${messages.threadUsage}: ${compactSummary}${contextPercent !== void 0 ? `; ${messages.context} ${decimal(contextPercent, 1)}%` : ""}`;
|
|
20034
20285
|
control.trigger.style.maxWidth = rendererUsageTriggerMaxWidth();
|
|
20035
20286
|
control.trigger.setAttribute("aria-label", accessibleSummary);
|
|
20036
20287
|
control.trigger.title = accessibleSummary;
|
|
20037
20288
|
control.label.textContent = compactSummary;
|
|
20038
|
-
renderDetails(control.popover, usage, messages, locale);
|
|
20289
|
+
renderDetails(control.popover, usage, messages, locale, accountName);
|
|
20039
20290
|
return true;
|
|
20040
20291
|
}
|
|
20041
20292
|
|
|
@@ -20045,6 +20296,17 @@ ${error51.stderrTail}`] : []
|
|
|
20045
20296
|
if (usedPercent >= 70) return "warn";
|
|
20046
20297
|
return "ok";
|
|
20047
20298
|
}
|
|
20299
|
+
function formatAccountCreditsBalance(remaining, unit) {
|
|
20300
|
+
const amount = Number.isInteger(remaining) ? remaining.toLocaleString("en-US") : remaining.toLocaleString("en-US", {
|
|
20301
|
+
maximumFractionDigits: 4,
|
|
20302
|
+
minimumFractionDigits: 0
|
|
20303
|
+
});
|
|
20304
|
+
const normalized = unit.trim();
|
|
20305
|
+
if (!normalized || normalized.toUpperCase() === "USD" || normalized === "$") {
|
|
20306
|
+
return `$${amount}`;
|
|
20307
|
+
}
|
|
20308
|
+
return `${amount} ${normalized}`;
|
|
20309
|
+
}
|
|
20048
20310
|
var ENGLISH_CREDITS_MESSAGES = Object.freeze({
|
|
20049
20311
|
remaining: "Remaining",
|
|
20050
20312
|
resets: "Resets",
|
|
@@ -20160,6 +20422,10 @@ ${error51.stderrTail}`] : []
|
|
|
20160
20422
|
reset.style.color = "color-mix(in srgb, currentColor 62%, transparent)";
|
|
20161
20423
|
left.append(reset);
|
|
20162
20424
|
}
|
|
20425
|
+
if (credits.usedPercent === void 0) {
|
|
20426
|
+
wrapper.append(top);
|
|
20427
|
+
return wrapper;
|
|
20428
|
+
}
|
|
20163
20429
|
const color = toneColor(rendererCreditsTone(credits.usedPercent));
|
|
20164
20430
|
const remaining = remainingPercent(credits.usedPercent);
|
|
20165
20431
|
const percent = document.createElement("span");
|
|
@@ -20217,6 +20483,18 @@ ${error51.stderrTail}`] : []
|
|
|
20217
20483
|
}
|
|
20218
20484
|
function renderDetails2(popover, credits, locale) {
|
|
20219
20485
|
const messages = rendererCreditsMessages(locale);
|
|
20486
|
+
if (credits.usedPercent === void 0) {
|
|
20487
|
+
const amount = credits.remaining === void 0 || !credits.unit ? "" : formatAccountCreditsBalance(credits.remaining, credits.unit);
|
|
20488
|
+
popover.style.backgroundImage = "";
|
|
20489
|
+
popover.setAttribute("aria-label", messages.details);
|
|
20490
|
+
popover.replaceChildren();
|
|
20491
|
+
const header = document.createElement("div");
|
|
20492
|
+
header.textContent = amount ? `${messages.remaining} ${amount}` : messages.account;
|
|
20493
|
+
header.style.fontSize = "13px";
|
|
20494
|
+
header.style.fontWeight = "600";
|
|
20495
|
+
popover.append(header);
|
|
20496
|
+
return;
|
|
20497
|
+
}
|
|
20220
20498
|
const glowColor = toneColor(rendererCreditsTone(credits.usedPercent));
|
|
20221
20499
|
popover.style.backgroundImage = `radial-gradient(160px 100px at 18% -10%, color-mix(in srgb, ${glowColor} 20%, transparent), transparent 70%)`;
|
|
20222
20500
|
popover.setAttribute("aria-label", messages.details);
|
|
@@ -20391,6 +20669,23 @@ ${error51.stderrTail}`] : []
|
|
|
20391
20669
|
closePopover2(control);
|
|
20392
20670
|
return false;
|
|
20393
20671
|
}
|
|
20672
|
+
if (accountCredits.usedPercent === void 0) {
|
|
20673
|
+
const amount = accountCredits.remaining === void 0 || !accountCredits.unit ? null : formatAccountCreditsBalance(accountCredits.remaining, accountCredits.unit);
|
|
20674
|
+
if (!amount) {
|
|
20675
|
+
control.root.style.display = "none";
|
|
20676
|
+
closePopover2(control);
|
|
20677
|
+
return false;
|
|
20678
|
+
}
|
|
20679
|
+
const ringSlot2 = control.trigger.querySelector("[data-codexhost-credits-ring]");
|
|
20680
|
+
const label2 = control.trigger.querySelector("[data-codexhost-credits-label]");
|
|
20681
|
+
ringSlot2?.replaceChildren();
|
|
20682
|
+
if (label2) label2.textContent = amount;
|
|
20683
|
+
control.root.style.display = "inline-flex";
|
|
20684
|
+
control.trigger.setAttribute("aria-label", amount);
|
|
20685
|
+
control.trigger.title = amount;
|
|
20686
|
+
renderDetails2(control.popover, accountCredits, locale);
|
|
20687
|
+
return true;
|
|
20688
|
+
}
|
|
20394
20689
|
const remaining = remainingPercent(accountCredits.usedPercent);
|
|
20395
20690
|
const percent = formatRendererCreditsPercent(remaining);
|
|
20396
20691
|
const title = `${creditsPeriodLabel(accountCredits.periodType)} ${percent}`;
|
|
@@ -21200,7 +21495,15 @@ ${error51.stderrTail}`] : []
|
|
|
21200
21495
|
permissionModeVisible,
|
|
21201
21496
|
locale
|
|
21202
21497
|
);
|
|
21203
|
-
|
|
21498
|
+
const selectedCodexAccount = state.agent === "codex" && !ownershipError ? codexAccounts.find((account) => account.active) : void 0;
|
|
21499
|
+
if (control.usage) {
|
|
21500
|
+
renderRendererUsageControl(
|
|
21501
|
+
control.usage,
|
|
21502
|
+
usage,
|
|
21503
|
+
locale,
|
|
21504
|
+
selectedCodexAccount?.email ?? selectedCodexAccount?.label ?? null
|
|
21505
|
+
);
|
|
21506
|
+
}
|
|
21204
21507
|
control.harnessCommands.setLocale(locale);
|
|
21205
21508
|
control.harnessCommands.root.hidden = state.agent === "codex";
|
|
21206
21509
|
control.harnessCommands.root.style.display = state.agent === "codex" ? "none" : "inline-flex";
|
|
@@ -21344,14 +21647,7 @@ ${error51.stderrTail}`] : []
|
|
|
21344
21647
|
}
|
|
21345
21648
|
function rendererAgentForThreadOwnership(ownership) {
|
|
21346
21649
|
if (ownership.owner === "codex") return null;
|
|
21347
|
-
|
|
21348
|
-
if (ownership.harnessId === "claude-code") return "claude-code";
|
|
21349
|
-
if (ownership.harnessId === "deepseek-harness") return "deepseek-harness";
|
|
21350
|
-
if (ownership.harnessId === "opencode") return "opencode";
|
|
21351
|
-
if (ownership.harnessId === "grok") return "grok";
|
|
21352
|
-
if (ownership.harnessId === "omp") return "omp";
|
|
21353
|
-
if (ownership.harnessId === "antigravity") return "antigravity";
|
|
21354
|
-
return null;
|
|
21650
|
+
return KNOWN_RENDERER_AGENTS.includes(ownership.harnessId) && ownership.harnessId !== "codex" ? ownership.harnessId : null;
|
|
21355
21651
|
}
|
|
21356
21652
|
var BrowserSidebarAgentIconRow = class {
|
|
21357
21653
|
constructor(element) {
|
|
@@ -22482,6 +22778,13 @@ ${error51.stderrTail}`] : []
|
|
|
22482
22778
|
var OMP_TRANSPORT_MODEL_PREFIX = `${OMP_TRANSPORT_MODEL_ID}@`;
|
|
22483
22779
|
var ANTIGRAVITY_TRANSPORT_MODEL_ID = "codexhost/antigravity-native";
|
|
22484
22780
|
var ANTIGRAVITY_TRANSPORT_MODEL_PREFIX = `${ANTIGRAVITY_TRANSPORT_MODEL_ID}@`;
|
|
22781
|
+
function hermesTransportModelId(model, permissionModeId) {
|
|
22782
|
+
return encodeHarnessPluginRoute({
|
|
22783
|
+
harnessId: harnessIdSchema.parse("hermes"),
|
|
22784
|
+
...model ? { model: harnessModelRefSchema.parse(model) } : {},
|
|
22785
|
+
...permissionModeId ? { permissionModeId: harnessPermissionModeIdSchema.parse(permissionModeId) } : {}
|
|
22786
|
+
});
|
|
22787
|
+
}
|
|
22485
22788
|
function transitionRendererAdapterStatus(current, next, publish) {
|
|
22486
22789
|
if (current.state === next.state && current.reason === next.reason && current.hook === next.hook) {
|
|
22487
22790
|
return false;
|
|
@@ -22502,7 +22805,8 @@ ${error51.stderrTail}`] : []
|
|
|
22502
22805
|
if (agent === "grok") return GROK_TRANSPORT_MODEL_ID;
|
|
22503
22806
|
if (agent === "omp") return OMP_TRANSPORT_MODEL_ID;
|
|
22504
22807
|
if (agent === "antigravity") return ANTIGRAVITY_TRANSPORT_MODEL_ID;
|
|
22505
|
-
return null;
|
|
22808
|
+
if (agent === "codex") return null;
|
|
22809
|
+
return encodeHarnessPluginRoute({ harnessId: harnessPluginIdSchema.parse(agent) });
|
|
22506
22810
|
}
|
|
22507
22811
|
function isRecord6(value) {
|
|
22508
22812
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -22944,7 +23248,12 @@ ${error51.stderrTail}`] : []
|
|
|
22944
23248
|
}
|
|
22945
23249
|
}
|
|
22946
23250
|
function modelSelectionForAgent(officialSelection, reasoningEffort, agent, model, thinkingOptionId, permissionModeId) {
|
|
22947
|
-
const transportModelId = agent === "pi" ? piTransportModelId(model, thinkingOptionId) : agent === "claude-code" ? claudeTransportModelId(model, permissionModeId, thinkingOptionId) : agent === "deepseek-harness" ? deepSeekHarnessTransportModelId(model, permissionModeId) : agent === "opencode" ? openCodeTransportModelId(model, permissionModeId, thinkingOptionId) : agent === "grok" ? grokTransportModelId(model, permissionModeId, thinkingOptionId) : agent === "omp" ? ompTransportModelId(model, thinkingOptionId, permissionModeId) : agent === "antigravity" ? antigravityTransportModelId(model, permissionModeId, thinkingOptionId) :
|
|
23251
|
+
const transportModelId = agent === "pi" ? piTransportModelId(model, thinkingOptionId) : agent === "claude-code" ? claudeTransportModelId(model, permissionModeId, thinkingOptionId) : agent === "deepseek-harness" ? deepSeekHarnessTransportModelId(model, permissionModeId) : agent === "opencode" ? openCodeTransportModelId(model, permissionModeId, thinkingOptionId) : agent === "grok" ? grokTransportModelId(model, permissionModeId, thinkingOptionId) : agent === "omp" ? ompTransportModelId(model, thinkingOptionId, permissionModeId) : agent === "antigravity" ? antigravityTransportModelId(model, permissionModeId, thinkingOptionId) : agent === "hermes" ? hermesTransportModelId(model, permissionModeId) : agent === "codex" ? null : model || thinkingOptionId || permissionModeId ? encodeHarnessPluginRoute({
|
|
23252
|
+
harnessId: harnessPluginIdSchema.parse(agent),
|
|
23253
|
+
...model ? { model } : {},
|
|
23254
|
+
...thinkingOptionId ? { thinkingOptionId } : {},
|
|
23255
|
+
...permissionModeId ? { permissionModeId } : {}
|
|
23256
|
+
}) : transportModelIdForAgent(agent);
|
|
22948
23257
|
return transportModelId ? { model: transportModelId, reasoningEffort } : officialSelection;
|
|
22949
23258
|
}
|
|
22950
23259
|
function installCurrentRendererAdapter() {
|
|
@@ -23211,6 +23520,24 @@ ${error51.stderrTail}`] : []
|
|
|
23211
23520
|
};
|
|
23212
23521
|
}
|
|
23213
23522
|
|
|
23523
|
+
// src/renderer-approval-style.ts
|
|
23524
|
+
function installRendererApprovalStyle(ownerDocument) {
|
|
23525
|
+
if (typeof ownerDocument.createElement !== "function") return () => void 0;
|
|
23526
|
+
ownerDocument.querySelector("style[data-codexhost-approval-style]")?.remove();
|
|
23527
|
+
const style = ownerDocument.createElement("style");
|
|
23528
|
+
style.setAttribute("data-codexhost-approval-style", "true");
|
|
23529
|
+
style.textContent = `
|
|
23530
|
+
[data-codex-approval-surface] > form {
|
|
23531
|
+
justify-content: flex-end;
|
|
23532
|
+
}
|
|
23533
|
+
[data-codex-approval-surface] > form > .ms-auto {
|
|
23534
|
+
margin-inline-start: 0;
|
|
23535
|
+
}
|
|
23536
|
+
`;
|
|
23537
|
+
(ownerDocument.head ?? ownerDocument.documentElement)?.append?.(style);
|
|
23538
|
+
return () => style.remove();
|
|
23539
|
+
}
|
|
23540
|
+
|
|
23214
23541
|
// src/renderer-permission-mode-preference.ts
|
|
23215
23542
|
var CLAUDE_PERMISSION_MODE_PREFERENCE_KEY = "codexhost.claude-code.permission-mode.v1";
|
|
23216
23543
|
function rendererStorage() {
|
|
@@ -23836,6 +24163,7 @@ ${error51.stderrTail}`] : []
|
|
|
23836
24163
|
listControls.pagination
|
|
23837
24164
|
);
|
|
23838
24165
|
let candidates = [];
|
|
24166
|
+
let loadedClient = null;
|
|
23839
24167
|
let importingId = null;
|
|
23840
24168
|
let actions = [];
|
|
23841
24169
|
const updateImportActions = () => {
|
|
@@ -23884,7 +24212,7 @@ ${error51.stderrTail}`] : []
|
|
|
23884
24212
|
status.focus();
|
|
23885
24213
|
}
|
|
23886
24214
|
};
|
|
23887
|
-
const renderOpenRecovery = (candidate, threadId) => {
|
|
24215
|
+
const renderOpenRecovery = (candidate, threadId, hostId) => {
|
|
23888
24216
|
actions = [];
|
|
23889
24217
|
refresh.disabled = false;
|
|
23890
24218
|
const recovery = document2.createElement("section");
|
|
@@ -23950,12 +24278,12 @@ ${error51.stderrTail}`] : []
|
|
|
23950
24278
|
retry.addEventListener("click", () => {
|
|
23951
24279
|
if (retry.disabled) return;
|
|
23952
24280
|
setRetrying(true);
|
|
23953
|
-
void context.runLatest((signal) => openImportedThread(threadId, signal), {
|
|
24281
|
+
void context.runLatest((signal) => openImportedThread(threadId, signal, hostId), {
|
|
23954
24282
|
success() {
|
|
23955
24283
|
setRetrying(false);
|
|
23956
24284
|
},
|
|
23957
24285
|
failure() {
|
|
23958
|
-
renderOpenRecovery(candidate, threadId);
|
|
24286
|
+
renderOpenRecovery(candidate, threadId, hostId);
|
|
23959
24287
|
}
|
|
23960
24288
|
});
|
|
23961
24289
|
});
|
|
@@ -24032,7 +24360,7 @@ ${error51.stderrTail}`] : []
|
|
|
24032
24360
|
if (candidate.running === true || importingId !== null || selectedHarness === null)
|
|
24033
24361
|
return;
|
|
24034
24362
|
const harnessId = selectedHarness;
|
|
24035
|
-
const client =
|
|
24363
|
+
const client = loadedClient;
|
|
24036
24364
|
if (!client) {
|
|
24037
24365
|
renderUnavailable(true);
|
|
24038
24366
|
return;
|
|
@@ -24048,7 +24376,9 @@ ${error51.stderrTail}`] : []
|
|
|
24048
24376
|
nativeSessionId: candidate.nativeSessionId
|
|
24049
24377
|
});
|
|
24050
24378
|
committedThreadId = result.threadId;
|
|
24051
|
-
if (!signal.aborted)
|
|
24379
|
+
if (!signal.aborted) {
|
|
24380
|
+
await openImportedThread(result.threadId, signal, client.hostId);
|
|
24381
|
+
}
|
|
24052
24382
|
},
|
|
24053
24383
|
{
|
|
24054
24384
|
success() {
|
|
@@ -24061,7 +24391,7 @@ ${error51.stderrTail}`] : []
|
|
|
24061
24391
|
updateImportActions();
|
|
24062
24392
|
refresh.disabled = false;
|
|
24063
24393
|
if (committedThreadId) {
|
|
24064
|
-
renderOpenRecovery(candidate, committedThreadId);
|
|
24394
|
+
renderOpenRecovery(candidate, committedThreadId, client.hostId);
|
|
24065
24395
|
} else {
|
|
24066
24396
|
renderFailure(error51, "import");
|
|
24067
24397
|
}
|
|
@@ -24079,6 +24409,7 @@ ${error51.stderrTail}`] : []
|
|
|
24079
24409
|
};
|
|
24080
24410
|
const load = () => {
|
|
24081
24411
|
if (importingId !== null || context.signal.aborted) return;
|
|
24412
|
+
loadedClient = null;
|
|
24082
24413
|
const client = getClient();
|
|
24083
24414
|
if (!client) {
|
|
24084
24415
|
refresh.disabled = false;
|
|
@@ -24108,6 +24439,7 @@ ${error51.stderrTail}`] : []
|
|
|
24108
24439
|
},
|
|
24109
24440
|
{
|
|
24110
24441
|
success(result) {
|
|
24442
|
+
loadedClient = client;
|
|
24111
24443
|
listControls.setBusy(false);
|
|
24112
24444
|
if (listControls.setTotal(result.total)) {
|
|
24113
24445
|
load();
|
|
@@ -24120,6 +24452,7 @@ ${error51.stderrTail}`] : []
|
|
|
24120
24452
|
else renderCandidates();
|
|
24121
24453
|
},
|
|
24122
24454
|
failure(error51) {
|
|
24455
|
+
loadedClient = null;
|
|
24123
24456
|
listControls.setBusy(false);
|
|
24124
24457
|
candidates = [];
|
|
24125
24458
|
refresh.disabled = false;
|
|
@@ -24508,6 +24841,24 @@ ${error51.stderrTail}`] : []
|
|
|
24508
24841
|
return usage;
|
|
24509
24842
|
}
|
|
24510
24843
|
const credits = state.credits;
|
|
24844
|
+
if (credits.remaining !== void 0 && credits.unit) {
|
|
24845
|
+
const meter = document2.createElement("div");
|
|
24846
|
+
meter.className = "settings-account-usage__meter settings-account-usage__meter--balance";
|
|
24847
|
+
const amount = formatAccountCreditsBalance(credits.remaining, credits.unit);
|
|
24848
|
+
const value = document2.createElement("span");
|
|
24849
|
+
value.className = "settings-account-usage__balance";
|
|
24850
|
+
const number4 = document2.createElement("span");
|
|
24851
|
+
number4.textContent = amount;
|
|
24852
|
+
const suffix = document2.createElement("span");
|
|
24853
|
+
suffix.className = "settings-account-usage__value-label";
|
|
24854
|
+
suffix.textContent = messages.accountCreditsRemaining;
|
|
24855
|
+
value.append(number4, suffix);
|
|
24856
|
+
value.title = `${amount} ${messages.accountCreditsRemaining}`;
|
|
24857
|
+
meter.append(value);
|
|
24858
|
+
usage.append(meter);
|
|
24859
|
+
if (credits.usedPercent === void 0) return usage;
|
|
24860
|
+
}
|
|
24861
|
+
if (credits.usedPercent === void 0) return usage;
|
|
24511
24862
|
const windows = [
|
|
24512
24863
|
{
|
|
24513
24864
|
label: credits.label ?? creditsPeriodLabel2(credits.periodType, messages),
|
|
@@ -24925,6 +25276,9 @@ ${error51.stderrTail}`] : []
|
|
|
24925
25276
|
function errorMessage(error51, fallback) {
|
|
24926
25277
|
return error51 instanceof Error && error51.message ? error51.message : fallback;
|
|
24927
25278
|
}
|
|
25279
|
+
function accountHasUsage(account) {
|
|
25280
|
+
return account.authKind === "api" || Boolean(account.email);
|
|
25281
|
+
}
|
|
24928
25282
|
function createAccountsSettingsPage(messages, getClient) {
|
|
24929
25283
|
return Object.freeze({
|
|
24930
25284
|
id: "accounts",
|
|
@@ -24944,8 +25298,8 @@ ${error51.stderrTail}`] : []
|
|
|
24944
25298
|
copy.append(heading, description);
|
|
24945
25299
|
const add = document2.createElement("button");
|
|
24946
25300
|
add.type = "button";
|
|
24947
|
-
add.className = "settings-command-button";
|
|
24948
|
-
add.append(createRendererSettingsIcon("add",
|
|
25301
|
+
add.className = "settings-command-button settings-command-button--secondary";
|
|
25302
|
+
add.append(createRendererSettingsIcon("add", 15), messages.accountAdd);
|
|
24949
25303
|
header.append(copy, add);
|
|
24950
25304
|
const status = document2.createElement("p");
|
|
24951
25305
|
status.className = "settings-account-status";
|
|
@@ -25077,7 +25431,7 @@ ${error51.stderrTail}`] : []
|
|
|
25077
25431
|
for (const [display, button] of displayButtons) {
|
|
25078
25432
|
button.setAttribute("aria-pressed", String(display === usageDisplay));
|
|
25079
25433
|
}
|
|
25080
|
-
refreshUsage.disabled = (!getClient()?.inspectCodexAccountUsage || !accounts.some((account) => account
|
|
25434
|
+
refreshUsage.disabled = (!getClient()?.inspectCodexAccountUsage || !accounts.some((account) => accountHasUsage(account))) && !getClient()?.listHarnessAccounts || harnessAccounts?.refreshing === true || [...usageByAccountId.values()].some((usage) => usage.status === "loading") || accountBusy();
|
|
25081
25435
|
const query = search.value.trim().toLocaleLowerCase();
|
|
25082
25436
|
harnessAccounts?.update(query, usageDisplay);
|
|
25083
25437
|
const visibleAccounts = accounts.filter(
|
|
@@ -25177,7 +25531,7 @@ ${error51.stderrTail}`] : []
|
|
|
25177
25531
|
};
|
|
25178
25532
|
const loadUsage = (nextAccounts) => {
|
|
25179
25533
|
const inspect = getClient()?.inspectCodexAccountUsage;
|
|
25180
|
-
const signedIn = nextAccounts.filter((account) => account
|
|
25534
|
+
const signedIn = nextAccounts.filter((account) => accountHasUsage(account));
|
|
25181
25535
|
const keep = new Set(signedIn.map((account) => account.accountId));
|
|
25182
25536
|
for (const accountId of [...usageByAccountId.keys()]) {
|
|
25183
25537
|
if (!keep.has(accountId)) usageByAccountId.delete(accountId);
|
|
@@ -25999,10 +26353,10 @@ ${error51.stderrTail}`] : []
|
|
|
25999
26353
|
}
|
|
26000
26354
|
|
|
26001
26355
|
// src/settings/shell.css
|
|
26002
|
-
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 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(1120px, calc(100vw - 32px));\n height: min(780px, calc(100vh - 32px));\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-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\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 color: var(--settings-focus);\n text-decoration: none;\n background: transparent;\n border: 1px solid transparent;\n border-radius: 7px;\n opacity: 0;\n transition: opacity 120ms ease;\n}\n\n.settings-connection-row:hover .settings-connection-install-link,\n.settings-connection-install-link:focus-visible {\n opacity: 1;\n}\n\n.settings-connection-install-link:hover {\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-button {\n width: fit-content;\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 (unavailable / request failure) 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 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 width: calc(100vw - 16px);\n height: calc(100vh - 16px);\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-account-header,\n .settings-connection-page-header {\n flex-direction: column;\n }\n\n .settings-account-header > .settings-command-button,\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';
|
|
26356
|
+
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 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(1120px, calc(100vw - 32px));\n height: min(780px, calc(100vh - 32px));\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-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\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 width: calc(100vw - 16px);\n height: calc(100vh - 16px);\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-account-header,\n .settings-connection-page-header {\n flex-direction: column;\n }\n\n .settings-account-header > .settings-command-button,\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';
|
|
26003
26357
|
|
|
26004
26358
|
// src/settings/accounts.css
|
|
26005
|
-
var accounts_default = '.settings-harness-accounts {\n margin-top: 32px;\n}\n\n.settings-harness-accounts__title {\n margin: 0 0 16px;\n font-size: 14px;\n font-weight: 500;\n}\n\n.settings-harness-account__identity {\n min-width: 0;\n}\n\n.settings-harness-account__identity > .settings-account-email {\n display: block;\n max-width: 24ch;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-harness-account__logo {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n flex: none;\n}\n\n.settings-harness-account {\n display: grid;\n grid-template-columns: minmax(180px, 1fr) minmax(0, 2fr);\n align-items: center;\n gap: 24px;\n padding: 24px;\n}\n\n.settings-harness-account + .settings-harness-account {\n border-top: 1px solid var(--settings-border);\n}\n\n.settings-harness-account > div {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n@media (max-width: 700px) {\n .settings-harness-account {\n grid-template-columns: minmax(0, 1fr);\n padding: 16px;\n }\n}\n\n.settings-account-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 20px;\n}\n\n.settings-account-header > :first-child {\n min-width: 0;\n flex: 1 1 auto;\n}\n\n.settings-account-header > .settings-command-button {\n flex: none;\n white-space: nowrap;\n min-height: 36px;\n padding: 8px 12px;\n border-radius: 7px;\n}\n\n.settings-account-header .settings-section-label {\n margin: 0;\n padding: 0;\n font-size: 27px;\n line-height: 1.4;\n font-weight: 650;\n letter-spacing: -0.035em;\n}\n.settings-account-header .settings-page-description {\n margin: 8px 0 0;\n font-size: 13px;\n}\n\n.settings-account-status {\n margin: 0;\n color: var(--settings-muted);\n font-size: 12px;\n}\n.settings-account-status:empty {\n display: none;\n}\n\n.settings-account-help-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-top: 20px;\n flex-wrap: wrap;\n}\n.settings-account-task-hint {\n display: flex;\n align-items: flex-start;\n gap: 9px;\n margin: 0;\n color: var(--settings-muted);\n font-size: 12px;\n flex: 1 1 280px;\n}\n.settings-account-task-hint svg {\n flex: none;\n margin-top: 1px;\n}\n.settings-account-help-button {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n color: var(--settings-muted);\n font-size: 12px;\n background: transparent;\n border: 0;\n border-radius: 7px;\n cursor: pointer;\n}\n.settings-account-help-button:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n.settings-account-device-code-note {\n margin: 12px 0 0;\n font-size: 12px;\n padding: 10px 12px;\n color: var(--settings-warning);\n background: var(--settings-warning-bg);\n border: 1px solid var(--settings-warning-border);\n border-radius: 8px;\n}\n\n.settings-account-toolbar {\n margin-top: 27px;\n padding: 18px 0;\n border-top: 1px solid var(--settings-border);\n display: flex;\n align-items: center;\n gap: 14px;\n flex-wrap: wrap;\n}\n.settings-account-count {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n white-space: nowrap;\n}\n.settings-account-count > :last-child {\n color: var(--settings-muted);\n font-variant-numeric: tabular-nums;\n}\n.settings-account-search {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--settings-muted);\n margin-right: auto;\n min-width: 0;\n max-width: 100%;\n}\n.settings-account-search svg {\n flex: none;\n}\n.settings-account-toolbar input {\n min-width: 80px;\n width: 150px;\n max-width: 100%;\n padding: 5px 0;\n color: var(--settings-text);\n background: transparent;\n border: 0;\n font-size: 13px;\n}\n.settings-account-toolbar input::placeholder {\n color: var(--settings-muted);\n}\n.settings-account-display-controls {\n display: flex;\n padding: 3px;\n border: 1px solid var(--settings-border);\n border-radius: 7px;\n background: var(--settings-inset);\n}\n.settings-account-display-controls button {\n padding: 4px 10px;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 4px;\n font-size: 12px;\n cursor: pointer;\n}\n.settings-account-display-controls button:hover {\n color: var(--settings-text);\n}\n.settings-account-display-controls button[aria-pressed="true"] {\n color: var(--settings-text);\n background: var(--settings-active);\n}\n\n.settings-account-list {\n --account-border: light-dark(#e2e2e8, #36363b);\n --account-muted: light-dark(#676773, #a5a5af);\n border: 1px solid var(--account-border);\n border-radius: 11px;\n overflow: hidden;\n container-type: inline-size;\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: 13px 20px;\n color: var(--account-muted);\n background: light-dark(#f8f8fa, #202024);\n font-size: 11px;\n font-weight: 500;\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 width: 38%;\n}\n.settings-account-table th:nth-child(3) {\n width: 12%;\n}\n.settings-account-table th:nth-child(4) {\n width: 18%;\n text-align: right;\n}\n.settings-account-table td {\n padding: 19px 20px;\n vertical-align: middle;\n border-top: 1px solid var(--settings-divider);\n}\n.settings-account-row {\n background: light-dark(#ffffff, #232326);\n}\n.settings-account-row:hover {\n background: light-dark(#f7f7fa, #26262a);\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-title {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-wrap: wrap;\n}\n.settings-account-email {\n min-width: 0;\n overflow: hidden;\n font-size: 13px;\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: 7px;\n margin-top: 4px;\n color: var(--settings-muted);\n}\n.settings-account-domain {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.settings-account-plan-separator {\n flex: none;\n}\n.settings-account-plan {\n flex: none;\n padding: 1px 6px;\n color: var(--settings-muted);\n border: 1px solid var(--settings-border);\n border-radius: 5px;\n font-size: 11px;\n white-space: nowrap;\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 padding: 2px 7px;\n color: light-dark(#66548e, #bdb4ff);\n background: light-dark(#f4f0fb, #aca0ff12);\n border: 1px solid light-dark(#dfd5f1, #aca0ff24);\n border-radius: 5px;\n font-size: 11px;\n white-space: nowrap;\n}\n\n.settings-account-usage {\n display: grid;\n gap: 14px;\n max-width: 380px;\n}\n.settings-account-usage__meter {\n display: grid;\n grid-template-columns: 48px minmax(36px, 1fr) 96px;\n align-items: center;\n gap: 3px 10px;\n}\n:host([lang="zh-CN"]) .settings-account-usage__meter {\n grid-template-columns: 48px minmax(36px, 1fr) 72px;\n}\n\n.settings-account-usage__title {\n color: light-dark(#5d5d68, #c3c3cd);\n font-size: 12px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.settings-account-usage__percent {\n display: flex;\n align-items: baseline;\n justify-content: flex-end;\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 color: var(--settings-muted);\n font-size: 11px;\n font-weight: 400;\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 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: 2 / -1;\n color: var(--account-muted);\n font-size: 11px;\n font-variant-numeric: tabular-nums;\n overflow-wrap: anywhere;\n}\n.settings-account-usage__message,\n.settings-account-unknown {\n color: var(--settings-muted);\n}\n.settings-account-usage > button {\n justify-self: start;\n}\n.settings-account-actions {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n.settings-account-action {\n padding: 8px 10px;\n min-height: 36px;\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-actions .settings-account-delete {\n color: var(--settings-muted);\n}\n.settings-account-actions .settings-account-delete:hover,\n.settings-account-actions .settings-account-delete:focus-visible {\n color: var(--settings-danger);\n background: var(--settings-danger-bg);\n}\n.settings-account-mobile-label {\n display: none;\n}\n.settings-account-reset-summary {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n min-height: 32px;\n padding: 3px 0;\n font-size: 12px;\n white-space: nowrap;\n color: var(--settings-text);\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-verification {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n color: var(--settings-muted);\n}\n.settings-account-verification a {\n color: var(--settings-focus);\n overflow-wrap: anywhere;\n}\n.settings-account-verification code {\n padding: 5px 8px;\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 600;\n letter-spacing: 0.08em;\n background: var(--settings-inset);\n border-radius: 6px;\n}\n.settings-account-list :focus-visible,\n.settings-account-toolbar :focus-visible,\n.settings-account-help-button:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: -2px;\n}\n\n@container (min-width: 611px) and (max-width: 800px) {\n .settings-account-table th,\n .settings-account-table td {\n padding-left: 12px;\n padding-right: 12px;\n }\n .settings-account-table th:nth-child(1) {\n width: 30%;\n }\n .settings-account-table th:nth-child(2) {\n width: 37%;\n }\n .settings-account-table th:nth-child(4) {\n width: 21%;\n }\n}\n\n@container (max-width: 610px) {\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: 1fr 1fr;\n padding: 16px;\n gap: 12px;\n border-bottom: 1px solid var(--settings-divider);\n }\n .settings-account-table .settings-account-row > td {\n padding: 0;\n border: 0;\n }\n .settings-account-row > td:nth-child(1),\n .settings-account-row > td:nth-child(2) {\n grid-column: 1 / -1;\n }\n .settings-account-row > td:nth-child(3) {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .settings-account-mobile-label {\n display: inline;\n color: var(--settings-muted);\n font-size: 11px;\n }\n .settings-account-usage {\n max-width: none;\n }\n .settings-account-table tr:not(.settings-account-row),\n .settings-account-table tr:not(.settings-account-row) > td {\n display: block;\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';
|
|
26359
|
+
var accounts_default = '.settings-harness-accounts {\n margin-top: 32px;\n}\n\n.settings-harness-accounts__title {\n margin: 0 0 16px;\n font-size: 14px;\n font-weight: 500;\n}\n\n.settings-harness-account__identity {\n min-width: 0;\n}\n\n.settings-harness-account__identity > .settings-account-email {\n display: block;\n max-width: 24ch;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-harness-account__logo {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n flex: none;\n}\n\n.settings-harness-account {\n display: grid;\n grid-template-columns: minmax(180px, 1fr) minmax(0, 2fr);\n align-items: center;\n gap: 24px;\n padding: 24px;\n}\n\n.settings-harness-account + .settings-harness-account {\n border-top: 1px solid var(--settings-border);\n}\n\n.settings-harness-account > div {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n@media (max-width: 700px) {\n .settings-harness-account {\n grid-template-columns: minmax(0, 1fr);\n padding: 16px;\n }\n}\n\n.settings-account-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 20px;\n}\n\n.settings-account-header > :first-child {\n min-width: 0;\n flex: 1 1 auto;\n}\n\n.settings-account-header > .settings-command-button {\n flex: none;\n white-space: nowrap;\n}\n\n.settings-account-header .settings-section-label {\n margin: 0;\n padding: 0;\n font-size: 27px;\n line-height: 1.4;\n font-weight: 650;\n letter-spacing: -0.035em;\n}\n.settings-account-header .settings-page-description {\n margin: 8px 0 0;\n font-size: 13px;\n}\n\n.settings-account-status {\n margin: 0;\n color: var(--settings-muted);\n font-size: 12px;\n}\n.settings-account-status:empty {\n display: none;\n}\n\n.settings-account-help-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-top: 20px;\n flex-wrap: wrap;\n}\n.settings-account-task-hint {\n display: flex;\n align-items: flex-start;\n gap: 9px;\n margin: 0;\n color: var(--settings-muted);\n font-size: 12px;\n flex: 1 1 280px;\n}\n.settings-account-task-hint svg {\n flex: none;\n margin-top: 1px;\n}\n.settings-account-help-button {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n color: var(--settings-muted);\n font-size: 12px;\n background: transparent;\n border: 0;\n border-radius: 7px;\n cursor: pointer;\n}\n.settings-account-help-button:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n.settings-account-device-code-note {\n margin: 12px 0 0;\n font-size: 12px;\n padding: 10px 12px;\n color: var(--settings-warning);\n background: var(--settings-warning-bg);\n border: 1px solid var(--settings-warning-border);\n border-radius: 8px;\n}\n\n.settings-account-toolbar {\n margin-top: 27px;\n padding: 18px 0;\n border-top: 1px solid var(--settings-border);\n display: flex;\n align-items: center;\n gap: 14px;\n flex-wrap: wrap;\n}\n.settings-account-count {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n white-space: nowrap;\n}\n.settings-account-count > :last-child {\n color: var(--settings-muted);\n font-variant-numeric: tabular-nums;\n}\n.settings-account-search {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--settings-muted);\n margin-right: auto;\n min-width: 0;\n max-width: 100%;\n}\n.settings-account-search svg {\n flex: none;\n}\n.settings-account-toolbar input {\n min-width: 80px;\n width: 150px;\n max-width: 100%;\n padding: 5px 0;\n color: var(--settings-text);\n background: transparent;\n border: 0;\n font-size: 13px;\n}\n.settings-account-toolbar input::placeholder {\n color: var(--settings-muted);\n}\n.settings-account-display-controls {\n display: flex;\n padding: 3px;\n border: 1px solid var(--settings-border);\n border-radius: 7px;\n background: var(--settings-inset);\n}\n.settings-account-display-controls button {\n padding: 4px 10px;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 4px;\n font-size: 12px;\n cursor: pointer;\n}\n.settings-account-display-controls button:hover {\n color: var(--settings-text);\n}\n.settings-account-display-controls button[aria-pressed="true"] {\n color: var(--settings-text);\n background: var(--settings-active);\n}\n\n.settings-account-list {\n --account-border: light-dark(#e2e2e8, #36363b);\n --account-muted: light-dark(#676773, #a5a5af);\n border: 1px solid var(--account-border);\n border-radius: 11px;\n overflow: hidden;\n container-type: inline-size;\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: 13px 20px;\n color: var(--account-muted);\n background: light-dark(#f8f8fa, #202024);\n font-size: 11px;\n font-weight: 500;\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 width: 38%;\n}\n.settings-account-table th:nth-child(3) {\n width: 12%;\n}\n.settings-account-table th:nth-child(4) {\n width: 18%;\n text-align: right;\n}\n.settings-account-table td {\n padding: 19px 20px;\n vertical-align: middle;\n border-top: 1px solid var(--settings-divider);\n}\n.settings-account-row {\n background: light-dark(#ffffff, #232326);\n}\n.settings-account-row:hover {\n background: light-dark(#f7f7fa, #26262a);\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-title {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-wrap: wrap;\n}\n.settings-account-email {\n min-width: 0;\n overflow: hidden;\n font-size: 13px;\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: 7px;\n margin-top: 4px;\n color: var(--settings-muted);\n}\n.settings-account-domain {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.settings-account-plan-separator {\n flex: none;\n}\n.settings-account-plan {\n flex: none;\n padding: 1px 6px;\n color: var(--settings-muted);\n border: 1px solid var(--settings-border);\n border-radius: 5px;\n font-size: 11px;\n white-space: nowrap;\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 padding: 2px 7px;\n color: light-dark(#66548e, #bdb4ff);\n background: light-dark(#f4f0fb, #aca0ff12);\n border: 1px solid light-dark(#dfd5f1, #aca0ff24);\n border-radius: 5px;\n font-size: 11px;\n white-space: nowrap;\n}\n\n.settings-account-usage {\n display: grid;\n gap: 14px;\n max-width: 380px;\n}\n.settings-account-usage__meter {\n display: grid;\n grid-template-columns: 48px minmax(36px, 1fr) 96px;\n align-items: center;\n gap: 3px 10px;\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\n.settings-account-usage__title {\n color: light-dark(#5d5d68, #c3c3cd);\n font-size: 12px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.settings-account-usage__percent {\n display: flex;\n align-items: baseline;\n justify-content: flex-end;\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 color: var(--settings-muted);\n font-size: 11px;\n font-weight: 400;\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 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: 2 / -1;\n color: var(--account-muted);\n font-size: 11px;\n font-variant-numeric: tabular-nums;\n overflow-wrap: anywhere;\n}\n.settings-account-usage__message,\n.settings-account-unknown {\n color: var(--settings-muted);\n}\n.settings-account-usage > button {\n justify-self: start;\n}\n.settings-account-actions {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n.settings-account-action {\n padding: 8px 10px;\n min-height: 36px;\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-actions .settings-account-delete {\n color: var(--settings-muted);\n}\n.settings-account-actions .settings-account-delete:hover,\n.settings-account-actions .settings-account-delete:focus-visible {\n color: var(--settings-danger);\n background: var(--settings-danger-bg);\n}\n.settings-account-mobile-label {\n display: none;\n}\n.settings-account-reset-summary {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n min-height: 32px;\n padding: 3px 0;\n font-size: 12px;\n white-space: nowrap;\n color: var(--settings-text);\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-verification {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n color: var(--settings-muted);\n}\n.settings-account-verification a {\n color: var(--settings-focus);\n overflow-wrap: anywhere;\n}\n.settings-account-verification code {\n padding: 5px 8px;\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 600;\n letter-spacing: 0.08em;\n background: var(--settings-inset);\n border-radius: 6px;\n}\n.settings-account-list :focus-visible,\n.settings-account-toolbar :focus-visible,\n.settings-account-help-button:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: -2px;\n}\n\n@container (min-width: 611px) and (max-width: 800px) {\n .settings-account-table th,\n .settings-account-table td {\n padding-left: 12px;\n padding-right: 12px;\n }\n .settings-account-table th:nth-child(1) {\n width: 30%;\n }\n .settings-account-table th:nth-child(2) {\n width: 37%;\n }\n .settings-account-table th:nth-child(4) {\n width: 21%;\n }\n}\n\n@container (max-width: 610px) {\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: 1fr 1fr;\n padding: 16px;\n gap: 12px;\n border-bottom: 1px solid var(--settings-divider);\n }\n .settings-account-table .settings-account-row > td {\n padding: 0;\n border: 0;\n }\n .settings-account-row > td:nth-child(1),\n .settings-account-row > td:nth-child(2) {\n grid-column: 1 / -1;\n }\n .settings-account-row > td:nth-child(3) {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .settings-account-mobile-label {\n display: inline;\n color: var(--settings-muted);\n font-size: 11px;\n }\n .settings-account-usage {\n max-width: none;\n }\n .settings-account-table tr:not(.settings-account-row),\n .settings-account-table tr:not(.settings-account-row) > td {\n display: block;\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';
|
|
26006
26360
|
|
|
26007
26361
|
// src/settings/shell.ts
|
|
26008
26362
|
var SETTINGS_SHELL_ATTRIBUTE = "data-codexhost-settings-shell";
|
|
@@ -26595,11 +26949,11 @@ ${accounts_default}`;
|
|
|
26595
26949
|
options.getConnectionDiagnostics ?? (() => null),
|
|
26596
26950
|
options.getAccountClient ?? (() => null),
|
|
26597
26951
|
options.getSessionImportClient ?? (() => null),
|
|
26598
|
-
async (threadId, signal) => {
|
|
26952
|
+
async (threadId, signal, hostId) => {
|
|
26599
26953
|
if (!options.openImportedThread) {
|
|
26600
26954
|
throw new Error("Imported Thread navigation is unavailable");
|
|
26601
26955
|
}
|
|
26602
|
-
await options.openImportedThread(threadId, signal);
|
|
26956
|
+
await options.openImportedThread(threadId, signal, hostId);
|
|
26603
26957
|
if (!disposed && !signal.aborted) shell?.close();
|
|
26604
26958
|
}
|
|
26605
26959
|
);
|
|
@@ -26754,7 +27108,10 @@ ${accounts_default}`;
|
|
|
26754
27108
|
opencode: harnessIdSchema.parse("opencode"),
|
|
26755
27109
|
grok: harnessIdSchema.parse("grok"),
|
|
26756
27110
|
omp: harnessIdSchema.parse("omp"),
|
|
26757
|
-
antigravity: harnessIdSchema.parse("antigravity")
|
|
27111
|
+
antigravity: harnessIdSchema.parse("antigravity"),
|
|
27112
|
+
hermes: harnessIdSchema.parse("hermes"),
|
|
27113
|
+
muse: harnessIdSchema.parse("muse"),
|
|
27114
|
+
"kiro-cli": harnessIdSchema.parse("kiro-cli")
|
|
26758
27115
|
};
|
|
26759
27116
|
var externalAgents = [
|
|
26760
27117
|
"pi",
|
|
@@ -26763,7 +27120,10 @@ ${accounts_default}`;
|
|
|
26763
27120
|
"opencode",
|
|
26764
27121
|
"grok",
|
|
26765
27122
|
"omp",
|
|
26766
|
-
"antigravity"
|
|
27123
|
+
"antigravity",
|
|
27124
|
+
"hermes",
|
|
27125
|
+
"muse",
|
|
27126
|
+
"kiro-cli"
|
|
26767
27127
|
];
|
|
26768
27128
|
function isRetryableHarnessAvailability(availability, error51) {
|
|
26769
27129
|
return availability !== void 0 && availability !== "ready" && availability !== "notInstalled" && error51?.retryable === true;
|
|
@@ -26933,7 +27293,42 @@ ${accounts_default}`;
|
|
|
26933
27293
|
...permissionModeId ? { permissionModeId } : {}
|
|
26934
27294
|
};
|
|
26935
27295
|
}
|
|
26936
|
-
|
|
27296
|
+
if (inspection.harnessId === "hermes") {
|
|
27297
|
+
return {
|
|
27298
|
+
agent: "hermes",
|
|
27299
|
+
...inspection.effectiveModel ? { model: inspection.effectiveModel } : {},
|
|
27300
|
+
...inspection.effectivePermissionModeId ? { permissionModeId: inspection.effectivePermissionModeId } : {}
|
|
27301
|
+
};
|
|
27302
|
+
}
|
|
27303
|
+
return restoredPluginRouteOwnership(inspection);
|
|
27304
|
+
}
|
|
27305
|
+
function isKnownExternalRendererAgent(value) {
|
|
27306
|
+
return KNOWN_RENDERER_AGENTS.includes(value) && value !== "codex";
|
|
27307
|
+
}
|
|
27308
|
+
function restoredPluginRouteOwnership(inspection) {
|
|
27309
|
+
if (inspection.owner !== "external") {
|
|
27310
|
+
throw new Error("Thread owner is not a Renderer Agent");
|
|
27311
|
+
}
|
|
27312
|
+
const agent = inspection.harnessId;
|
|
27313
|
+
if (!isKnownExternalRendererAgent(agent)) {
|
|
27314
|
+
throw new Error("Thread owner is not a Renderer Agent");
|
|
27315
|
+
}
|
|
27316
|
+
const transportSelection = decodeHarnessPluginRoute(inspection.transportModelId);
|
|
27317
|
+
if (transportSelection && transportSelection.harnessId !== agent) {
|
|
27318
|
+
throw new Error(`${agent} Thread reported an incompatible transport Model`);
|
|
27319
|
+
}
|
|
27320
|
+
if (!transportSelection && !inspection.effectiveModel && !inspection.effectivePermissionModeId && !selectableThinkingOptionId(inspection)) {
|
|
27321
|
+
throw new Error(`${agent} Thread reported an incompatible transport Model`);
|
|
27322
|
+
}
|
|
27323
|
+
const model = inspection.effectiveModel ?? transportSelection?.model;
|
|
27324
|
+
const thinkingOptionId = selectableThinkingOptionId(inspection) ?? transportSelection?.thinkingOptionId;
|
|
27325
|
+
const permissionModeId = inspection.effectivePermissionModeId ?? transportSelection?.permissionModeId;
|
|
27326
|
+
return {
|
|
27327
|
+
agent,
|
|
27328
|
+
...model ? { model } : {},
|
|
27329
|
+
...thinkingOptionId ? { thinkingOptionId } : {},
|
|
27330
|
+
...permissionModeId ? { permissionModeId } : {}
|
|
27331
|
+
};
|
|
26937
27332
|
}
|
|
26938
27333
|
function isOwnershipSubmissionBlocked(status) {
|
|
26939
27334
|
return status === "loading" || status === "error";
|
|
@@ -26997,6 +27392,7 @@ ${accounts_default}`;
|
|
|
26997
27392
|
function installRendererBindingProbe(options = {}) {
|
|
26998
27393
|
const existing = window.__codexhostRendererBindingProbeV1;
|
|
26999
27394
|
if (existing) return existing;
|
|
27395
|
+
const disposeApprovalStyle = installRendererApprovalStyle(document);
|
|
27000
27396
|
const enabledAgents = [...new Set(options.enabledAgents ?? DEFAULT_RENDERER_AGENTS)];
|
|
27001
27397
|
const enabledAgentSet = new Set(enabledAgents);
|
|
27002
27398
|
const controller = new DraftAgentController({
|
|
@@ -27050,18 +27446,20 @@ ${accounts_default}`;
|
|
|
27050
27446
|
getAccountClient: () => modelControl,
|
|
27051
27447
|
getConnectionDiagnostics: () => connectionDiagnostics,
|
|
27052
27448
|
getSessionImportClient: () => {
|
|
27053
|
-
const
|
|
27449
|
+
const hostId = activeModelHostId() ?? "local";
|
|
27450
|
+
const client = modelClientForHost(hostId);
|
|
27054
27451
|
const sources = client?.listSessionImportSources;
|
|
27055
27452
|
const list = client?.listHarnessSessions;
|
|
27056
27453
|
const importSession = client?.importHarnessSession;
|
|
27057
27454
|
if (!sources || !list || !importSession) return null;
|
|
27058
27455
|
return {
|
|
27456
|
+
hostId,
|
|
27059
27457
|
listSessionImportSources: () => sources(),
|
|
27060
27458
|
listHarnessSessions: (input) => list(input),
|
|
27061
27459
|
importHarnessSession: (input) => importSession(input)
|
|
27062
27460
|
};
|
|
27063
27461
|
},
|
|
27064
|
-
openImportedThread: (threadId, signal) => openRendererThread(threadId, { hostId: "local", signal }),
|
|
27462
|
+
openImportedThread: (threadId, signal, hostId) => openRendererThread(threadId, { hostId: hostId ?? "local", signal }),
|
|
27065
27463
|
onLocaleChange() {
|
|
27066
27464
|
for (const mounted of mountedByComposer.values()) renderMounted(mounted);
|
|
27067
27465
|
}
|
|
@@ -27084,7 +27482,10 @@ ${accounts_default}`;
|
|
|
27084
27482
|
opencode: void 0,
|
|
27085
27483
|
grok: void 0,
|
|
27086
27484
|
omp: void 0,
|
|
27087
|
-
antigravity: void 0
|
|
27485
|
+
antigravity: void 0,
|
|
27486
|
+
hermes: void 0,
|
|
27487
|
+
muse: void 0,
|
|
27488
|
+
"kiro-cli": void 0
|
|
27088
27489
|
},
|
|
27089
27490
|
webUi: Object.fromEntries(
|
|
27090
27491
|
externalAgents.map((agent) => [agent, false])
|
|
@@ -27567,7 +27968,22 @@ ${accounts_default}`;
|
|
|
27567
27968
|
return;
|
|
27568
27969
|
}
|
|
27569
27970
|
if (current.phase === "locked" && previousModel && !previousModelAvailable) {
|
|
27570
|
-
|
|
27971
|
+
mounted.modelView = {
|
|
27972
|
+
status: "error",
|
|
27973
|
+
catalog: inspection.catalog,
|
|
27974
|
+
selected: previousModel,
|
|
27975
|
+
thinkingSelectionSupported: inspection.capabilities.configuration.selectThinkingOption,
|
|
27976
|
+
error: "Existing Thread Model is absent from the current Catalog"
|
|
27977
|
+
};
|
|
27978
|
+
if (selectedPermissionModeId && mounted.permissionModeView.catalog) {
|
|
27979
|
+
mounted.permissionModeView = {
|
|
27980
|
+
status: "ready",
|
|
27981
|
+
catalog: mounted.permissionModeView.catalog,
|
|
27982
|
+
selected: selectedPermissionModeId,
|
|
27983
|
+
...permissionModeLock
|
|
27984
|
+
};
|
|
27985
|
+
}
|
|
27986
|
+
return;
|
|
27571
27987
|
}
|
|
27572
27988
|
const selected = previousModelAvailable ? previousModel : preferredConfiguration?.model ?? inspection.catalog.defaultModel;
|
|
27573
27989
|
if (!selected) throw new Error("External Harness did not report its default Model");
|
|
@@ -28810,6 +29226,7 @@ ${accounts_default}`;
|
|
|
28810
29226
|
dispose() {
|
|
28811
29227
|
if (disposed) return;
|
|
28812
29228
|
disposed = true;
|
|
29229
|
+
disposeApprovalStyle();
|
|
28813
29230
|
usageNotificationDispose?.();
|
|
28814
29231
|
usageNotificationDispose = null;
|
|
28815
29232
|
adapterDispose?.();
|
|
@@ -28901,6 +29318,7 @@ lucide/dist/esm/icons/circle-off.mjs:
|
|
|
28901
29318
|
lucide/dist/esm/icons/copy.mjs:
|
|
28902
29319
|
lucide/dist/esm/icons/ellipsis.mjs:
|
|
28903
29320
|
lucide/dist/esm/icons/download.mjs:
|
|
29321
|
+
lucide/dist/esm/icons/hard-drive-download.mjs:
|
|
28904
29322
|
lucide/dist/esm/icons/external-link.mjs:
|
|
28905
29323
|
lucide/dist/esm/icons/folder-input.mjs:
|
|
28906
29324
|
lucide/dist/esm/icons/grip-vertical.mjs:
|