@codexhost/cli-darwin-x64 0.6.0 → 0.6.2

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.
@@ -15,7 +15,8 @@
15
15
  "opencode",
16
16
  "grok",
17
17
  "omp",
18
- "antigravity"
18
+ "antigravity",
19
+ "kiro-cli"
19
20
  ];
20
21
  var DEFAULT_RENDERER_AGENTS = KNOWN_RENDERER_AGENTS;
21
22
  function defaultIdFactory(sequence) {
@@ -131,6 +132,7 @@
131
132
  if (agent === "grok" && model) state.grokModel = model;
132
133
  if (agent === "omp" && model) state.ompModel = model;
133
134
  if (agent === "antigravity" && model) state.antigravityModel = model;
135
+ if (agent === "kiro-cli" && model) state.kiroCliModel = model;
134
136
  if (agent === "pi" && thinkingOptionId) state.piThinkingOptionId = thinkingOptionId;
135
137
  else if (agent === "pi") delete state.piThinkingOptionId;
136
138
  if (agent === "claude-code" && thinkingOptionId) {
@@ -146,6 +148,9 @@
146
148
  if (agent === "antigravity" && thinkingOptionId) {
147
149
  state.antigravityThinkingOptionId = thinkingOptionId;
148
150
  } else if (agent === "antigravity") delete state.antigravityThinkingOptionId;
151
+ if (agent === "kiro-cli" && thinkingOptionId) {
152
+ state.kiroCliThinkingOptionId = thinkingOptionId;
153
+ } else if (agent === "kiro-cli") delete state.kiroCliThinkingOptionId;
149
154
  if (agent !== "codex") {
150
155
  const permissionModeByAgent = {};
151
156
  for (const candidate of [
@@ -155,7 +160,8 @@
155
160
  "opencode",
156
161
  "grok",
157
162
  "omp",
158
- "antigravity"
163
+ "antigravity",
164
+ "kiro-cli"
159
165
  ]) {
160
166
  const current = state.permissionModeByAgent?.[candidate];
161
167
  if (candidate !== agent && current) permissionModeByAgent[candidate] = current;
@@ -177,7 +183,9 @@
177
183
  if (agent === "opencode") return state.openCodeModel;
178
184
  if (agent === "grok") return state.grokModel;
179
185
  if (agent === "omp") return state.ompModel;
180
- return state.antigravityModel;
186
+ if (agent === "antigravity") return state.antigravityModel;
187
+ if (agent === "kiro-cli") return state.kiroCliModel;
188
+ return void 0;
181
189
  }
182
190
  thinkingOptionForAgent(composer, agent) {
183
191
  const state = this.#state(composer);
@@ -186,7 +194,9 @@
186
194
  if (agent === "grok") return state.grokThinkingOptionId;
187
195
  if (agent === "opencode") return state.openCodeThinkingOptionId;
188
196
  if (agent === "omp") return state.ompThinkingOptionId;
189
- return agent === "antigravity" ? state.antigravityThinkingOptionId : void 0;
197
+ if (agent === "antigravity") return state.antigravityThinkingOptionId;
198
+ if (agent === "kiro-cli") return state.kiroCliThinkingOptionId;
199
+ return void 0;
190
200
  }
191
201
  permissionModeForAgent(composer, agent) {
192
202
  return this.#state(composer).permissionModeByAgent?.[agent];
@@ -207,7 +217,8 @@
207
217
  else if (agent === "opencode") state.openCodeModel = model;
208
218
  else if (agent === "grok") state.grokModel = model;
209
219
  else if (agent === "omp") state.ompModel = model;
210
- else state.antigravityModel = model;
220
+ else if (agent === "antigravity") state.antigravityModel = model;
221
+ else if (agent === "kiro-cli") state.kiroCliModel = model;
211
222
  return state;
212
223
  }
213
224
  setPiConfiguration(composer, model, thinkingOptionId) {
@@ -244,6 +255,10 @@
244
255
  state.antigravityThinkingOptionId = thinkingOptionId;
245
256
  } else if (agent === "antigravity") {
246
257
  delete state.antigravityThinkingOptionId;
258
+ } else if (agent === "kiro-cli" && thinkingOptionId) {
259
+ state.kiroCliThinkingOptionId = thinkingOptionId;
260
+ } else if (agent === "kiro-cli") {
261
+ delete state.kiroCliThinkingOptionId;
247
262
  }
248
263
  return state;
249
264
  }
@@ -14876,6 +14891,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14876
14891
  reasoningOutputTokens: nonNegativeSafeIntegerSchema.optional(),
14877
14892
  totalTokens: nonNegativeSafeIntegerSchema.optional(),
14878
14893
  totalCostUsd: finiteNonNegativeNumberSchema.optional(),
14894
+ totalCredits: finiteNonNegativeNumberSchema.optional(),
14895
+ contextUsagePercent: finiteNonNegativeNumberSchema.optional(),
14879
14896
  cacheHitRatePercent: cacheHitRatePercentSchema.optional(),
14880
14897
  contextWindowTokens: nonNegativeSafeIntegerSchema.optional(),
14881
14898
  contextUsedTokens: nonNegativeSafeIntegerSchema.optional(),
@@ -15362,12 +15379,36 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15362
15379
  });
15363
15380
 
15364
15381
  // ../shared-contracts/dist/harness-route.js
15382
+ var HARNESS_PLUGIN_ROUTE_PREFIX = "codexhost/plugin-v1@";
15383
+ var MAX_ROUTE_LENGTH = 4096;
15365
15384
  var harnessPluginRouteSchema = external_exports.object({
15366
15385
  harnessId: harnessPluginIdSchema,
15367
15386
  model: harnessModelRefSchema.optional(),
15368
15387
  thinkingOptionId: harnessThinkingOptionIdSchema.optional(),
15369
15388
  permissionModeId: harnessPermissionModeIdSchema.optional()
15370
15389
  }).strict();
15390
+ function encodeHarnessPluginRoute(route) {
15391
+ const parsed = harnessPluginRouteSchema.parse(route);
15392
+ const payload = [...JSON.stringify(parsed)].map((character) => character.charCodeAt(0).toString(16).padStart(2, "0")).join("");
15393
+ return `${HARNESS_PLUGIN_ROUTE_PREFIX}${payload}`;
15394
+ }
15395
+ function decodeHarnessPluginRoute(value) {
15396
+ if (typeof value !== "string" || !value.startsWith(HARNESS_PLUGIN_ROUTE_PREFIX))
15397
+ return null;
15398
+ const payload = value.slice(HARNESS_PLUGIN_ROUTE_PREFIX.length);
15399
+ if (value.length > MAX_ROUTE_LENGTH || !/^(?:[a-f0-9]{2})+$/u.test(payload)) {
15400
+ throw new Error("Invalid Harness plugin route");
15401
+ }
15402
+ try {
15403
+ const json2 = payload.replace(/[a-f0-9]{2}/gu, (byte) => String.fromCharCode(Number.parseInt(byte, 16)));
15404
+ const decoded = harnessPluginRouteSchema.parse(JSON.parse(json2));
15405
+ if (encodeHarnessPluginRoute(decoded) !== value)
15406
+ throw new Error("Noncanonical Harness plugin route");
15407
+ return decoded;
15408
+ } catch {
15409
+ throw new Error("Invalid Harness plugin route");
15410
+ }
15411
+ }
15371
15412
 
15372
15413
  // ../shared-contracts/dist/codex-accounts.js
15373
15414
  var accountIdSchema = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._~-]+$/u);
@@ -15443,6 +15484,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15443
15484
  accountCredits: accountCreditsSnapshotSchema.optional()
15444
15485
  }).strict();
15445
15486
 
15487
+ // ../shared-contracts/dist/reasoning-transcript.js
15488
+ var REASONING_TRANSCRIPT_COMMAND = "thinking";
15489
+
15446
15490
  // ../shared-contracts/dist/harness-session-import.js
15447
15491
  var HARNESS_SESSION_IMPORT_ID_MAX_LENGTH = 1024;
15448
15492
  var HARNESS_SESSION_IMPORT_CWD_MAX_LENGTH = 16384;
@@ -15794,6 +15838,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15794
15838
  // src/assets/antigravity-agent.svg
15795
15839
  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';
15796
15840
 
15841
+ // src/assets/kiro-agent.svg
15842
+ 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';
15843
+
15797
15844
  // src/assets/omp-agent.svg
15798
15845
  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';
15799
15846
 
@@ -15809,7 +15856,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15809
15856
  opencode: "OpenCode",
15810
15857
  grok: "Grok",
15811
15858
  omp: "Oh My Pi",
15812
- antigravity: "Antigravity CLI"
15859
+ antigravity: "Antigravity CLI",
15860
+ "kiro-cli": "Kiro CLI"
15813
15861
  };
15814
15862
  var PI_PATHS = [
15815
15863
  {
@@ -15832,6 +15880,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15832
15880
  const path = ownerDocument.createElementNS("http://www.w3.org/2000/svg", "path");
15833
15881
  path.setAttribute("d", definition.d);
15834
15882
  if (definition.fillRule) path.setAttribute("fill-rule", definition.fillRule);
15883
+ if (definition.fill) path.setAttribute("fill", definition.fill);
15835
15884
  svg.append(path);
15836
15885
  }
15837
15886
  return svg;
@@ -15884,9 +15933,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15884
15933
  image.style.flex = "none";
15885
15934
  return image;
15886
15935
  }
15887
- if (agent === "antigravity") {
15936
+ if (agent === "antigravity" || agent === "kiro-cli") {
15888
15937
  const image = ownerDocument.createElement("img");
15889
- image.src = antigravity_agent_default;
15938
+ image.src = agent === "kiro-cli" ? kiro_agent_default : antigravity_agent_default;
15890
15939
  image.alt = "";
15891
15940
  image.draggable = false;
15892
15941
  image.style.width = `${size}px`;
@@ -16245,6 +16294,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16245
16294
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }]
16246
16295
  ];
16247
16296
 
16297
+ // ../../node_modules/lucide/dist/esm/icons/ellipsis.mjs
16298
+ var Ellipsis = [
16299
+ ["circle", { cx: "12", cy: "12", r: "1" }],
16300
+ ["circle", { cx: "19", cy: "12", r: "1" }],
16301
+ ["circle", { cx: "5", cy: "12", r: "1" }]
16302
+ ];
16303
+
16248
16304
  // ../../node_modules/lucide/dist/esm/icons/folder-input.mjs
16249
16305
  var FolderInput = [
16250
16306
  [
@@ -16458,7 +16514,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16458
16514
  "trash",
16459
16515
  "terminal",
16460
16516
  "search",
16461
- "help"
16517
+ "help",
16518
+ "ellipsis"
16462
16519
  ];
16463
16520
  var iconNodes = {
16464
16521
  settings: Settings,
@@ -16493,7 +16550,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16493
16550
  trash: Trash2,
16494
16551
  terminal: Terminal,
16495
16552
  search: Search,
16496
- help: CircleQuestionMark
16553
+ help: CircleQuestionMark,
16554
+ ellipsis: Ellipsis
16497
16555
  };
16498
16556
  function isRendererSettingsIconName(value) {
16499
16557
  return RENDERER_SETTINGS_ICON_NAMES.includes(value);
@@ -16532,7 +16590,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16532
16590
  opencode: "https://opencode.ai/docs/",
16533
16591
  grok: "https://grok.com/",
16534
16592
  omp: "https://github.com/can1357/oh-my-pi",
16535
- antigravity: "https://antigravity.google/product/antigravity-cli"
16593
+ antigravity: "https://antigravity.google/product/antigravity-cli",
16594
+ "kiro-cli": "https://kiro.dev/docs/cli/"
16536
16595
  });
16537
16596
  function connectionStatusLabel(availability, messages, hasError = false) {
16538
16597
  if (hasError && availability !== "notInstalled") return messages.connectionStatusError;
@@ -17310,6 +17369,9 @@ ${error51.stderrTail}`] : []
17310
17369
  sectionsLabel: "Settings sections",
17311
17370
  generalSection: "General",
17312
17371
  otherSection: "Other",
17372
+ appearanceDescription: "Adjust how thinking text is displayed in the conversation.",
17373
+ reasoningSoftWrapTitle: "Wrap thinking text",
17374
+ reasoningSoftWrapDescription: "Wrap long thinking lines in the transcript. Ordinary shell output is unaffected. Off by default.",
17313
17375
  pageUnavailable: "Page unavailable",
17314
17376
  inDevelopment: "In development",
17315
17377
  notAvailable: "Not available",
@@ -17346,26 +17408,26 @@ ${error51.stderrTail}`] : []
17346
17408
  sessionImportRetryOpen: "Try opening again",
17347
17409
  sessionImportRetrying: "Opening...",
17348
17410
  connectionsDescription: "View runtime status by Host. Select an item to inspect details or complete its setup.",
17349
- accountsDescription: "Choose the default account for new Codex tasks and check account limits.",
17350
- accountTaskHint: "Existing tasks keep the account they were created with. Multi-account is currently available for Codex.",
17351
- accountConnected: "Connected accounts",
17352
- accountDefaultBadge: "Default",
17353
- accountAdd: "Add Account",
17411
+ accountsDescription: "View accounts and limits across Agents, and manage your Codex default account.",
17412
+ accountConnected: "Accounts",
17413
+ accountDefaultBadge: "Codex default",
17414
+ accountAdd: "Add Codex account",
17354
17415
  accountColumnAccount: "Account",
17355
- accountColumnUsage: "Limits",
17356
- accountColumnActions: "Actions",
17357
- accountSearch: "Search accounts\u2026",
17358
- accountEmpty: "No accounts yet. Add an account to get started.",
17416
+ accountColumnActions: "Manage",
17417
+ accountSearch: "Search accounts or Agents\u2026",
17418
+ accountEmpty: "No accounts yet. Add a Codex account or sign in to an Agent in its native client.",
17359
17419
  accountNoMatches: "No matching accounts.",
17360
- accountLoginHelp: "Before signing in",
17361
- harnessAccountsTitle: "Other detected accounts",
17420
+ accountNativeManaged: "Native management",
17421
+ accountNativeManagementHint: "This account comes from {harness}'s native authentication. This page only displays identity and limits; manage sign-in, sign-out and switching in the native client.",
17422
+ accountMore: "Codex account actions",
17423
+ accountDetailsClose: "Close account details",
17424
+ accountDefaultHint: "Use as the default for new Codex tasks only",
17362
17425
  accountCreditsRemaining: "Remaining",
17363
17426
  accountCreditsLoading: "Loading limits\u2026",
17364
17427
  accountCreditsEmpty: "No limit data available",
17365
17428
  accountCreditsFailed: "Could not load limits",
17366
17429
  accountCreditsRetry: "Retry",
17367
17430
  accountCreditsRefresh: "Refresh limits",
17368
- accountResetCreditsUnknown: "No reset card data available",
17369
17431
  accountCreateFailed: "Could not add the Account.",
17370
17432
  accountDelete: "Delete",
17371
17433
  accountDeleteConfirm: "Delete this Account and its local data? This cannot be undone.",
@@ -17375,7 +17437,6 @@ ${error51.stderrTail}`] : []
17375
17437
  accountUse: "Set as default",
17376
17438
  accountSignIn: "Sign in",
17377
17439
  accountSigningIn: "Starting device sign-in...",
17378
- accountDeviceCodePrerequisite: "Before signing in, enable \u201CEnable device code authorization for Codex\u201D in Web Settings \u2192 Account security & sign-in.",
17379
17440
  accountVerificationDescription: "Open the verification page and enter this one-time code:",
17380
17441
  accountCopyCode: "Copy code",
17381
17442
  accountCopied: "Copied",
@@ -17384,7 +17445,10 @@ ${error51.stderrTail}`] : []
17384
17445
  accountLoginFailed: "Sign-in failed.",
17385
17446
  accountLoadFailed: "Could not load Codex Accounts.",
17386
17447
  accountCreditsUsed: "Used",
17387
- accountCreditsReset: "reset",
17448
+ accountCreditsResetAt: "Quota resets: {time}",
17449
+ accountCreditsResetIn: "Quota resets in {time}",
17450
+ accountCreditsResetPending: "Awaiting refresh",
17451
+ accountCreditsResetPendingHint: "The reset time has passed; refresh to check the actual quota.",
17388
17452
  accountCreditsPeriodWeekly: "Weekly limit",
17389
17453
  accountCreditsPeriodMonthly: "Monthly limit",
17390
17454
  accountCreditsPeriodFiveHour: "5-hour",
@@ -17500,6 +17564,7 @@ ${error51.stderrTail}`] : []
17500
17564
  aboutRepository: "Open-source repository",
17501
17565
  pageLabels: Object.freeze({
17502
17566
  connections: "Connections",
17567
+ appearance: "Appearance",
17503
17568
  accounts: "Accounts",
17504
17569
  "session-import": "Session Import",
17505
17570
  updates: "Updates",
@@ -17514,6 +17579,9 @@ ${error51.stderrTail}`] : []
17514
17579
  sectionsLabel: "\u8BBE\u7F6E\u5206\u7C7B",
17515
17580
  generalSection: "\u901A\u7528",
17516
17581
  otherSection: "\u5176\u4ED6",
17582
+ appearanceDescription: "\u8C03\u6574\u4F1A\u8BDD\u4E2D\u601D\u8003\u6587\u672C\u7684\u663E\u793A\u65B9\u5F0F\u3002",
17583
+ reasoningSoftWrapTitle: "\u6362\u884C\u663E\u793A\u601D\u8003\u6587\u672C",
17584
+ reasoningSoftWrapDescription: "\u8BA9\u601D\u8003\u5757\u4E2D\u7684\u957F\u884C\u81EA\u52A8\u6362\u884C\u3002\u666E\u901A Shell \u8F93\u51FA\u4E0D\u53D7\u5F71\u54CD\u3002\u9ED8\u8BA4\u5173\u95ED\u3002",
17517
17585
  pageUnavailable: "\u9875\u9762\u4E0D\u53EF\u7528",
17518
17586
  inDevelopment: "\u5F00\u53D1\u4E2D",
17519
17587
  notAvailable: "\u6682\u4E0D\u53EF\u7528",
@@ -17550,26 +17618,26 @@ ${error51.stderrTail}`] : []
17550
17618
  sessionImportRetryOpen: "\u91CD\u8BD5\u6253\u5F00",
17551
17619
  sessionImportRetrying: "\u6B63\u5728\u6253\u5F00\u2026\u2026",
17552
17620
  connectionsDescription: "\u6309 Host \u67E5\u770B\u8FD0\u884C\u65F6\u72B6\u6001\u3002\u9009\u62E9\u4E00\u9879\uFF0C\u5728\u53F3\u4FA7\u68C0\u67E5\u8BE6\u60C5\u6216\u5B8C\u6210\u914D\u7F6E\u3002",
17553
- accountsDescription: "\u9009\u62E9\u65B0\u5EFA Codex \u4EFB\u52A1\u7684\u9ED8\u8BA4\u8D26\u53F7\uFF0C\u5E76\u67E5\u770B\u5404\u8D26\u53F7\u989D\u5EA6\u3002",
17554
- accountTaskHint: "\u5207\u6362\u9ED8\u8BA4\u8D26\u53F7\u4E0D\u4F1A\u5F71\u54CD\u5DF2\u5F00\u59CB\u7684\u4EFB\u52A1\u3002\u76EE\u524D\u4EC5\u652F\u6301 Codex \u591A\u8D26\u53F7\u3002",
17555
- accountConnected: "\u5DF2\u8FDE\u63A5\u8D26\u53F7",
17556
- accountDefaultBadge: "\u9ED8\u8BA4",
17557
- accountAdd: "\u6DFB\u52A0\u8D26\u53F7",
17621
+ accountsDescription: "\u67E5\u770B\u5404 Agent \u7684\u8D26\u53F7\u4E0E\u989D\u5EA6\uFF0C\u7BA1\u7406 Codex \u9ED8\u8BA4\u8D26\u53F7\u3002",
17622
+ accountConnected: "\u8D26\u53F7",
17623
+ accountDefaultBadge: "Codex \u9ED8\u8BA4",
17624
+ accountAdd: "\u6DFB\u52A0 Codex \u8D26\u53F7",
17558
17625
  accountColumnAccount: "\u8D26\u53F7",
17559
- accountColumnUsage: "\u989D\u5EA6",
17560
- accountColumnActions: "\u64CD\u4F5C",
17561
- accountSearch: "\u641C\u7D22\u8D26\u53F7\u2026",
17562
- accountEmpty: "\u8FD8\u6CA1\u6709\u8D26\u53F7\uFF0C\u6DFB\u52A0\u4E00\u4E2A\u8D26\u53F7\u5373\u53EF\u5F00\u59CB\u3002",
17626
+ accountColumnActions: "\u7BA1\u7406",
17627
+ accountSearch: "\u641C\u7D22\u8D26\u53F7\u6216 Agent\u2026",
17628
+ accountEmpty: "\u8FD8\u6CA1\u6709\u8D26\u53F7\uFF0C\u53EF\u6DFB\u52A0 Codex \u8D26\u53F7\u6216\u5728\u5176\u4ED6 Agent \u7684\u539F\u751F\u5BA2\u6237\u7AEF\u767B\u5F55\u3002",
17563
17629
  accountNoMatches: "\u6CA1\u6709\u5339\u914D\u7684\u8D26\u53F7\u3002",
17564
- accountLoginHelp: "\u767B\u5F55\u524D\u987B\u77E5",
17565
- harnessAccountsTitle: "\u5176\u4ED6\u5DF2\u8BC6\u522B\u8D26\u53F7",
17630
+ accountNativeManaged: "\u539F\u751F\u7BA1\u7406",
17631
+ accountNativeManagementHint: "\u6B64\u8D26\u53F7\u6765\u81EA {harness} \u7684\u539F\u751F\u767B\u5F55\u3002\u8FD9\u91CC\u53EA\u8BFB\u5C55\u793A\u8EAB\u4EFD\u4E0E\u989D\u5EA6\uFF1B\u767B\u5F55\u3001\u9000\u51FA\u548C\u5207\u6362\u8BF7\u5728\u5176\u539F\u751F\u5BA2\u6237\u7AEF\u4E2D\u5B8C\u6210\u3002",
17632
+ accountMore: "Codex \u8D26\u53F7\u64CD\u4F5C",
17633
+ accountDetailsClose: "\u5173\u95ED\u8D26\u53F7\u8BE6\u60C5",
17634
+ accountDefaultHint: "\u4EC5\u8BBE\u4E3A\u65B0 Codex \u4EFB\u52A1\u7684\u9ED8\u8BA4\u8D26\u53F7",
17566
17635
  accountCreditsRemaining: "\u5269\u4F59",
17567
17636
  accountCreditsLoading: "\u6B63\u5728\u8BFB\u53D6\u989D\u5EA6\u2026",
17568
17637
  accountCreditsEmpty: "\u6682\u65E0\u989D\u5EA6\u6570\u636E",
17569
17638
  accountCreditsFailed: "\u989D\u5EA6\u8BFB\u53D6\u5931\u8D25",
17570
17639
  accountCreditsRetry: "\u91CD\u8BD5",
17571
17640
  accountCreditsRefresh: "\u5237\u65B0\u989D\u5EA6",
17572
- accountResetCreditsUnknown: "\u6682\u65E0\u91CD\u7F6E\u5361\u6570\u636E",
17573
17641
  accountCreateFailed: "\u6DFB\u52A0\u8D26\u53F7\u5931\u8D25\u3002",
17574
17642
  accountDelete: "\u5220\u9664",
17575
17643
  accountDeleteConfirm: "\u5220\u9664\u6B64\u8D26\u53F7\u53CA\u5176\u672C\u5730\u6570\u636E\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002",
@@ -17579,7 +17647,6 @@ ${error51.stderrTail}`] : []
17579
17647
  accountUse: "\u8BBE\u4E3A\u9ED8\u8BA4",
17580
17648
  accountSignIn: "\u767B\u5F55",
17581
17649
  accountSigningIn: "\u6B63\u5728\u542F\u52A8\u8BBE\u5907\u767B\u5F55...",
17582
- accountDeviceCodePrerequisite: "\u767B\u5F55\u524D\uFF0C\u8BF7\u5148\u5728 Web \u7AEF\u7684\u201C\u8BBE\u7F6E \u2192 \u8D26\u53F7\u5B89\u5168\u4E0E\u767B\u5F55\u201D\u4E2D\u5F00\u542F\u201C\u4E3A Codex \u542F\u7528\u8BBE\u5907\u4EE3\u7801\u6388\u6743\u201D\u3002",
17583
17650
  accountVerificationDescription: "\u6253\u5F00\u9A8C\u8BC1\u9875\u9762\u5E76\u8F93\u5165\u4EE5\u4E0B\u4E00\u6B21\u6027\u4EE3\u7801\uFF1A",
17584
17651
  accountCopyCode: "\u590D\u5236\u4EE3\u7801",
17585
17652
  accountCopied: "\u5DF2\u590D\u5236",
@@ -17588,7 +17655,10 @@ ${error51.stderrTail}`] : []
17588
17655
  accountLoginFailed: "\u767B\u5F55\u5931\u8D25\u3002",
17589
17656
  accountLoadFailed: "\u65E0\u6CD5\u52A0\u8F7D Codex \u8D26\u53F7\u3002",
17590
17657
  accountCreditsUsed: "\u5DF2\u7528",
17591
- accountCreditsReset: "\u91CD\u7F6E",
17658
+ accountCreditsResetAt: "\u989D\u5EA6\u91CD\u7F6E\u65F6\u95F4\uFF1A{time}",
17659
+ accountCreditsResetIn: "\u8DDD\u91CD\u7F6E\u8FD8\u6709 {time}",
17660
+ accountCreditsResetPending: "\u5F85\u5237\u65B0",
17661
+ accountCreditsResetPendingHint: "\u91CD\u7F6E\u65F6\u95F4\u5DF2\u5230\uFF0C\u8BF7\u5237\u65B0\u4EE5\u786E\u8BA4\u5B9E\u9645\u989D\u5EA6\u3002",
17592
17662
  accountCreditsPeriodWeekly: "\u5468\u989D\u5EA6",
17593
17663
  accountCreditsPeriodMonthly: "\u6708\u989D\u5EA6",
17594
17664
  accountCreditsPeriodFiveHour: "5 \u5C0F\u65F6",
@@ -17704,6 +17774,7 @@ ${error51.stderrTail}`] : []
17704
17774
  aboutRepository: "\u5F00\u6E90\u4ED3\u5E93",
17705
17775
  pageLabels: Object.freeze({
17706
17776
  connections: "\u8FDE\u63A5",
17777
+ appearance: "\u5916\u89C2",
17707
17778
  accounts: "\u8D26\u53F7",
17708
17779
  "session-import": "\u4F1A\u8BDD\u5BFC\u5165",
17709
17780
  updates: "\u66F4\u65B0",
@@ -17755,7 +17826,8 @@ ${error51.stderrTail}`] : []
17755
17826
  opencode: "https://opencode.ai/docs/",
17756
17827
  grok: "https://grok.com/",
17757
17828
  omp: "https://github.com/can1357/oh-my-pi",
17758
- antigravity: "https://antigravity.google/product/antigravity-cli"
17829
+ antigravity: "https://antigravity.google/product/antigravity-cli",
17830
+ "kiro-cli": "https://kiro.dev/docs/cli/"
17759
17831
  };
17760
17832
  var CONTROL_ATTRIBUTE = "data-codexhost-agent-control";
17761
17833
  var AGENT_MENU_WIDTH = 224;
@@ -19393,7 +19465,9 @@ ${error51.stderrTail}`] : []
19393
19465
  // src/renderer-usage-control.ts
19394
19466
  var ENGLISH_USAGE_MESSAGES = Object.freeze({
19395
19467
  usage: "Usage",
19468
+ account: "Account",
19396
19469
  context: "Context",
19470
+ recordedCredits: "Recorded usage",
19397
19471
  latestCacheHit: "Latest cache hit",
19398
19472
  outputSpeed: "Output speed",
19399
19473
  cacheRead: "Cache read",
@@ -19401,19 +19475,17 @@ ${error51.stderrTail}`] : []
19401
19475
  reasoning: "Reasoning",
19402
19476
  totalTokens: "Total tokens",
19403
19477
  inputOutput: "Input / output",
19404
- fiveHourLimit: "5-hour limit",
19405
- sevenDayLimit: "7-day limit",
19406
19478
  sessionCostEstimate: "Session cost estimate",
19407
19479
  threadUsage: "Thread Usage",
19408
19480
  threadUsageDetails: "Thread Usage details",
19409
19481
  tokensSummary: "tokens",
19410
- tokensPerSecond: "tok/s",
19411
- fiveHourSummary: "5h",
19412
- sevenDaySummary: "7d"
19482
+ tokensPerSecond: "tok/s"
19413
19483
  });
19414
19484
  var CHINESE_USAGE_MESSAGES = Object.freeze({
19415
19485
  usage: "\u7528\u91CF",
19486
+ account: "\u8D26\u53F7",
19416
19487
  context: "\u4E0A\u4E0B\u6587",
19488
+ recordedCredits: "\u5DF2\u8BB0\u5F55\u6D88\u8017",
19417
19489
  latestCacheHit: "\u6700\u8FD1\u7F13\u5B58\u547D\u4E2D\u7387",
19418
19490
  outputSpeed: "\u8F93\u51FA\u901F\u5EA6",
19419
19491
  cacheRead: "\u7F13\u5B58\u8BFB\u53D6",
@@ -19421,15 +19493,11 @@ ${error51.stderrTail}`] : []
19421
19493
  reasoning: "\u63A8\u7406",
19422
19494
  totalTokens: "Token \u603B\u6570",
19423
19495
  inputOutput: "\u8F93\u5165 / \u8F93\u51FA",
19424
- fiveHourLimit: "5 \u5C0F\u65F6\u9650\u989D",
19425
- sevenDayLimit: "7 \u5929\u9650\u989D",
19426
19496
  sessionCostEstimate: "\u4F1A\u8BDD\u8D39\u7528\u4F30\u7B97",
19427
19497
  threadUsage: "\u5BF9\u8BDD\u7528\u91CF",
19428
19498
  threadUsageDetails: "\u5BF9\u8BDD\u7528\u91CF\u8BE6\u60C5",
19429
19499
  tokensSummary: "Token",
19430
- tokensPerSecond: "Token/\u79D2",
19431
- fiveHourSummary: "5 \u5C0F\u65F6",
19432
- sevenDaySummary: "7 \u5929"
19500
+ tokensPerSecond: "Token/\u79D2"
19433
19501
  });
19434
19502
  function rendererUsageMessages(locale) {
19435
19503
  return locale === "zh-CN" ? CHINESE_USAGE_MESSAGES : ENGLISH_USAGE_MESSAGES;
@@ -19443,6 +19511,9 @@ ${error51.stderrTail}`] : []
19443
19511
  function formatRendererCost(value) {
19444
19512
  return `$${value.toFixed(3)}`;
19445
19513
  }
19514
+ function formatRendererCredits(value) {
19515
+ return `${value > 0 && value < 1e-3 ? "<0.001" : decimal(value, 3)} credits`;
19516
+ }
19446
19517
  function formatRendererTokenRate(value, locale = "en") {
19447
19518
  return `${decimal(value, 1)} ${rendererUsageMessages(locale).tokensPerSecond}`;
19448
19519
  }
@@ -19497,27 +19568,11 @@ ${error51.stderrTail}`] : []
19497
19568
  svg.append(track, fill);
19498
19569
  return svg;
19499
19570
  }
19500
- function formatRendererPlanReset(unixSeconds, locale) {
19501
- const date5 = new Date(unixSeconds * 1e3);
19502
- if (Number.isNaN(date5.getTime())) return "";
19503
- return date5.toLocaleString(locale === "zh-CN" ? "zh-CN" : void 0, {
19504
- month: "long",
19505
- day: "numeric",
19506
- hour: "numeric",
19507
- minute: "2-digit"
19508
- });
19509
- }
19510
- function formatRendererPlanWindow(usedPercent, resetsAtUnix, locale) {
19511
- const percent = formatRendererCreditsPercent(usedPercent);
19512
- if (resetsAtUnix === void 0) return percent;
19513
- const reset = formatRendererPlanReset(resetsAtUnix, locale);
19514
- return reset.length > 0 ? `${percent} \xB7 ${reset}` : percent;
19515
- }
19516
19571
  function rendererUsageTriggerMaxWidth() {
19517
19572
  return "min(180px, 30vw)";
19518
19573
  }
19519
19574
  function rendererUsageHasDisplayData(usage) {
19520
- return usage?.cacheHitRatePercent !== void 0 || usage?.outputTokensPerSecond !== void 0 || usage?.totalCostUsd !== 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 || usage?.planFiveHourUsedPercent !== void 0 || usage?.planSevenDayUsedPercent !== void 0;
19575
+ 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;
19521
19576
  }
19522
19577
  function applyRendererPopoverChrome(popover) {
19523
19578
  popover.style.border = "1px solid light-dark(rgba(15, 23, 42, 0.10), color-mix(in srgb, CanvasText 16%, transparent))";
@@ -19526,10 +19581,10 @@ ${error51.stderrTail}`] : []
19526
19581
  popover.style.color = "CanvasText";
19527
19582
  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))";
19528
19583
  }
19529
- function addDetailRow(parent, label, value) {
19584
+ function addDetailRow(parent, label, value, wrap = false) {
19530
19585
  const row = document.createElement("div");
19531
19586
  row.style.display = "grid";
19532
- row.style.gridTemplateColumns = "minmax(0, 1fr) auto";
19587
+ row.style.gridTemplateColumns = wrap ? "auto minmax(0, 1fr)" : "minmax(0, 1fr) auto";
19533
19588
  row.style.gap = "20px";
19534
19589
  row.style.padding = "4px 0";
19535
19590
  const labelElement = document.createElement("span");
@@ -19539,17 +19594,24 @@ ${error51.stderrTail}`] : []
19539
19594
  valueElement.textContent = value;
19540
19595
  valueElement.style.fontVariantNumeric = "tabular-nums";
19541
19596
  valueElement.style.textAlign = "right";
19597
+ if (wrap) {
19598
+ valueElement.style.overflowWrap = "anywhere";
19599
+ valueElement.title = value;
19600
+ }
19542
19601
  row.append(labelElement, valueElement);
19543
19602
  parent.append(row);
19544
19603
  }
19545
- function renderDetails(popover, usage, messages, locale) {
19604
+ function renderDetails(popover, usage, messages, locale, accountName) {
19546
19605
  popover.replaceChildren();
19547
19606
  const heading = document.createElement("div");
19548
19607
  heading.textContent = messages.usage;
19549
19608
  heading.style.fontWeight = "600";
19550
19609
  heading.style.marginBottom = "6px";
19551
19610
  popover.append(heading);
19552
- if (usage?.contextUsedTokens !== void 0 && usage.contextWindowTokens !== void 0) {
19611
+ if (accountName) addDetailRow(popover, messages.account, accountName, true);
19612
+ if (usage?.contextUsagePercent !== void 0) {
19613
+ addDetailRow(popover, messages.context, `${decimal(usage.contextUsagePercent, 1)}%`);
19614
+ } else if (usage?.contextUsedTokens !== void 0 && usage.contextWindowTokens !== void 0) {
19553
19615
  const contextPercent = usage.contextWindowTokens > 0 ? usage.contextUsedTokens / usage.contextWindowTokens * 100 : null;
19554
19616
  addDetailRow(
19555
19617
  popover,
@@ -19595,34 +19657,15 @@ ${error51.stderrTail}`] : []
19595
19657
  addDetailRow(
19596
19658
  popover,
19597
19659
  messages.inputOutput,
19598
- `${formatRendererTokenCount(usage.inputTokens ?? 0)} / ${formatRendererTokenCount(usage.outputTokens ?? 0)}`
19599
- );
19600
- }
19601
- if (usage?.planFiveHourUsedPercent !== void 0) {
19602
- addDetailRow(
19603
- popover,
19604
- messages.fiveHourLimit,
19605
- formatRendererPlanWindow(
19606
- usage.planFiveHourUsedPercent,
19607
- usage.planFiveHourResetsAtUnix,
19608
- locale
19609
- )
19610
- );
19611
- }
19612
- if (usage?.planSevenDayUsedPercent !== void 0) {
19613
- addDetailRow(
19614
- popover,
19615
- messages.sevenDayLimit,
19616
- formatRendererPlanWindow(
19617
- usage.planSevenDayUsedPercent,
19618
- usage.planSevenDayResetsAtUnix,
19619
- locale
19620
- )
19660
+ `${usage.inputTokens === void 0 ? "-" : formatRendererTokenCount(usage.inputTokens)} / ${usage.outputTokens === void 0 ? "-" : formatRendererTokenCount(usage.outputTokens)}`
19621
19661
  );
19622
19662
  }
19623
19663
  if (usage?.totalCostUsd !== void 0) {
19624
19664
  addDetailRow(popover, messages.sessionCostEstimate, formatRendererCost(usage.totalCostUsd));
19625
19665
  }
19666
+ if (usage?.totalCredits !== void 0) {
19667
+ addDetailRow(popover, messages.recordedCredits, formatRendererCredits(usage.totalCredits));
19668
+ }
19626
19669
  }
19627
19670
  function popoverIsOpen(popover) {
19628
19671
  try {
@@ -19706,6 +19749,8 @@ ${error51.stderrTail}`] : []
19706
19749
  popover.setAttribute("popover", "auto");
19707
19750
  popover.hidden = typeof popover.showPopover !== "function";
19708
19751
  popover.style.position = "fixed";
19752
+ popover.style.boxSizing = "border-box";
19753
+ popover.style.margin = "0";
19709
19754
  popover.style.inset = "auto";
19710
19755
  popover.style.width = "260px";
19711
19756
  popover.style.maxWidth = "min(320px, calc(100vw - 24px))";
@@ -19777,7 +19822,7 @@ ${error51.stderrTail}`] : []
19777
19822
  document.body.append(popover);
19778
19823
  return control;
19779
19824
  }
19780
- function renderRendererUsageControl(control, usage, locale = control.locale) {
19825
+ function renderRendererUsageControl(control, usage, locale = control.locale, accountName = null) {
19781
19826
  control.locale = locale;
19782
19827
  const messages = rendererUsageMessages(locale);
19783
19828
  control.popover.setAttribute("aria-label", messages.threadUsageDetails);
@@ -19786,18 +19831,20 @@ ${error51.stderrTail}`] : []
19786
19831
  const totalCostUsd = usage?.totalCostUsd;
19787
19832
  const hasContext = usage?.contextUsedTokens !== void 0 && usage.contextWindowTokens !== void 0;
19788
19833
  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;
19789
- const hasPlanLimit = usage?.planFiveHourUsedPercent !== void 0 || usage?.planSevenDayUsedPercent !== void 0;
19790
- const visible = rendererUsageHasDisplayData(usage);
19834
+ const visible = rendererUsageHasDisplayData(usage) || Boolean(accountName);
19791
19835
  control.root.style.display = visible ? "inline-flex" : "none";
19792
19836
  if (!visible) {
19793
19837
  closePopover(control);
19794
19838
  return false;
19795
19839
  }
19796
19840
  const summary = [
19841
+ usage?.totalCredits !== void 0 ? formatRendererCredits(usage.totalCredits) : null,
19797
19842
  cacheHitRatePercent !== void 0 ? formatRendererCacheHitRate(cacheHitRatePercent) : null,
19798
19843
  outputTokensPerSecond !== void 0 ? formatRendererTokenRate(outputTokensPerSecond, locale) : null,
19799
19844
  totalCostUsd !== void 0 ? formatRendererCost(totalCostUsd) : null
19800
19845
  ].filter((value) => value !== null);
19846
+ const contextPercent = usage?.contextUsagePercent;
19847
+ if (contextPercent !== void 0 && summary.length === 0) summary.push(messages.usage);
19801
19848
  if (summary.length === 0 && hasContext && usage?.contextWindowTokens !== void 0 && usage.contextWindowTokens > 0) {
19802
19849
  summary.push(
19803
19850
  formatRendererContextSummary(usage.contextUsedTokens ?? 0, usage.contextWindowTokens)
@@ -19811,18 +19858,13 @@ ${error51.stderrTail}`] : []
19811
19858
  `${formatRendererTokenCount((usage?.inputTokens ?? 0) + (usage?.outputTokens ?? 0))} ${messages.tokensSummary}`
19812
19859
  );
19813
19860
  }
19814
- if (summary.length === 0 && hasPlanLimit) {
19815
- summary.push(
19816
- usage?.planFiveHourUsedPercent !== void 0 ? `${messages.fiveHourSummary} ${formatRendererCreditsPercent(usage.planFiveHourUsedPercent)}` : `${messages.sevenDaySummary} ${formatRendererCreditsPercent(usage?.planSevenDayUsedPercent ?? 0)}`
19817
- );
19818
- }
19819
- const compactSummary = summary.join(" \xB7 ");
19820
- const accessibleSummary = `${messages.threadUsage}: ${compactSummary}`;
19861
+ const compactSummary = summary.join(" \xB7 ") || messages.usage;
19862
+ const accessibleSummary = `${messages.threadUsage}: ${compactSummary}${contextPercent !== void 0 ? `; ${messages.context} ${decimal(contextPercent, 1)}%` : ""}`;
19821
19863
  control.trigger.style.maxWidth = rendererUsageTriggerMaxWidth();
19822
19864
  control.trigger.setAttribute("aria-label", accessibleSummary);
19823
19865
  control.trigger.title = accessibleSummary;
19824
19866
  control.label.textContent = compactSummary;
19825
- renderDetails(control.popover, usage, messages, locale);
19867
+ renderDetails(control.popover, usage, messages, locale, accountName);
19826
19868
  return true;
19827
19869
  }
19828
19870
 
@@ -20986,7 +21028,15 @@ ${error51.stderrTail}`] : []
20986
21028
  permissionModeVisible,
20987
21029
  locale
20988
21030
  );
20989
- if (control.usage) renderRendererUsageControl(control.usage, usage, locale);
21031
+ const selectedCodexAccount = state.agent === "codex" && !ownershipError ? codexAccounts.find((account) => account.active) : void 0;
21032
+ if (control.usage) {
21033
+ renderRendererUsageControl(
21034
+ control.usage,
21035
+ usage,
21036
+ locale,
21037
+ selectedCodexAccount?.email ?? selectedCodexAccount?.label ?? null
21038
+ );
21039
+ }
20990
21040
  control.harnessCommands.setLocale(locale);
20991
21041
  control.harnessCommands.root.hidden = state.agent === "codex";
20992
21042
  control.harnessCommands.root.style.display = state.agent === "codex" ? "none" : "inline-flex";
@@ -21009,6 +21059,51 @@ ${error51.stderrTail}`] : []
21009
21059
  control.picker.dispose();
21010
21060
  }
21011
21061
 
21062
+ // src/renderer-transcript-dom.ts
21063
+ var TRANSCRIPT_TEXT_BODY_SELECTOR = '[data-testid="exec-shell-body"]';
21064
+ var REASONING_SOFT_WRAP_STORAGE_KEY = "codexhost.reasoning-soft-wrap.v1";
21065
+ var REASONING_SOFT_WRAP_CHANGE_EVENT = "codexhost:reasoning-soft-wrap-changed";
21066
+ function readReasoningTranscriptSoftWrap(ownerWindow) {
21067
+ return ownerWindow.localStorage.getItem(REASONING_SOFT_WRAP_STORAGE_KEY) === "true";
21068
+ }
21069
+ function setReasoningTranscriptSoftWrap(ownerWindow, enabled) {
21070
+ ownerWindow.localStorage.setItem(REASONING_SOFT_WRAP_STORAGE_KEY, String(enabled));
21071
+ ownerWindow.dispatchEvent(new Event(REASONING_SOFT_WRAP_CHANGE_EVENT));
21072
+ }
21073
+ function installReasoningTranscriptSoftWrap(ownerDocument) {
21074
+ const ownerWindow = ownerDocument.defaultView;
21075
+ if (!ownerWindow) return () => {
21076
+ };
21077
+ const style = ownerDocument.createElement("style");
21078
+ style.setAttribute("data-codexhost-reasoning-soft-wrap", "true");
21079
+ const body = `${TRANSCRIPT_TEXT_BODY_SELECTOR}:has([aria-label="$ ${REASONING_TRANSCRIPT_COMMAND}"])`;
21080
+ style.textContent = `
21081
+ ${body} .whitespace-pre {
21082
+ white-space: pre-wrap;
21083
+ overflow-wrap: anywhere;
21084
+ }
21085
+ ${body} .whitespace-pre > .w-max {
21086
+ width: 100%;
21087
+ min-width: 0;
21088
+ }
21089
+ `;
21090
+ ownerDocument.head.append(style);
21091
+ const refresh = () => {
21092
+ style.disabled = !readReasoningTranscriptSoftWrap(ownerWindow);
21093
+ };
21094
+ const onStorage = (event) => {
21095
+ if (event.key === REASONING_SOFT_WRAP_STORAGE_KEY || event.key === null) refresh();
21096
+ };
21097
+ refresh();
21098
+ ownerWindow.addEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, refresh);
21099
+ ownerWindow.addEventListener("storage", onStorage);
21100
+ return () => {
21101
+ ownerWindow.removeEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, refresh);
21102
+ ownerWindow.removeEventListener("storage", onStorage);
21103
+ style.remove();
21104
+ };
21105
+ }
21106
+
21012
21107
  // src/renderer-codex-account-state.ts
21013
21108
  function resolveCodexAccountSelection(accounts, overrideAccountId) {
21014
21109
  const activeAccountId = accounts.find((account) => account.active)?.accountId ?? null;
@@ -21135,6 +21230,7 @@ ${error51.stderrTail}`] : []
21135
21230
  if (ownership.harnessId === "grok") return "grok";
21136
21231
  if (ownership.harnessId === "omp") return "omp";
21137
21232
  if (ownership.harnessId === "antigravity") return "antigravity";
21233
+ if (ownership.harnessId === "kiro-cli") return "kiro-cli";
21138
21234
  return null;
21139
21235
  }
21140
21236
  var BrowserSidebarAgentIconRow = class {
@@ -22195,6 +22291,7 @@ ${error51.stderrTail}`] : []
22195
22291
  }
22196
22292
  var DRAFT_PREWARM_POLICY_WAIT_TIMEOUT_MS = 1e4;
22197
22293
  var DRAFT_PREWARM_POLICY_POLL_INTERVAL_MS = 25;
22294
+ var KIRO_CLI_HARNESS_ID = harnessIdSchema.parse("kiro-cli");
22198
22295
  function transportModelIdForAgent(agent) {
22199
22296
  if (agent === "pi") return PI_TRANSPORT_MODEL_ID;
22200
22297
  if (agent === "claude-code") return CLAUDE_CODE_TRANSPORT_MODEL_ID;
@@ -22203,6 +22300,7 @@ ${error51.stderrTail}`] : []
22203
22300
  if (agent === "grok") return GROK_TRANSPORT_MODEL_ID;
22204
22301
  if (agent === "omp") return OMP_TRANSPORT_MODEL_ID;
22205
22302
  if (agent === "antigravity") return ANTIGRAVITY_TRANSPORT_MODEL_ID;
22303
+ if (agent === "kiro-cli") return encodeHarnessPluginRoute({ harnessId: KIRO_CLI_HARNESS_ID });
22206
22304
  return null;
22207
22305
  }
22208
22306
  function isRecord6(value) {
@@ -22645,7 +22743,12 @@ ${error51.stderrTail}`] : []
22645
22743
  }
22646
22744
  }
22647
22745
  function modelSelectionForAgent(officialSelection, reasoningEffort, agent, model, thinkingOptionId, permissionModeId) {
22648
- 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) : transportModelIdForAgent(agent);
22746
+ 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 === "kiro-cli" ? encodeHarnessPluginRoute({
22747
+ harnessId: KIRO_CLI_HARNESS_ID,
22748
+ ...model ? { model } : {},
22749
+ ...thinkingOptionId ? { thinkingOptionId } : {},
22750
+ ...permissionModeId ? { permissionModeId } : {}
22751
+ }) : transportModelIdForAgent(agent);
22649
22752
  return transportModelId ? { model: transportModelId, reasoningEffort } : officialSelection;
22650
22753
  }
22651
22754
  function installCurrentRendererAdapter() {
@@ -23837,6 +23940,50 @@ ${error51.stderrTail}`] : []
23837
23940
  });
23838
23941
  }
23839
23942
 
23943
+ // src/settings/appearance-page.ts
23944
+ function createAppearanceSettingsPage(messages) {
23945
+ return Object.freeze({
23946
+ id: "appearance",
23947
+ label: messages.pageLabels.appearance,
23948
+ icon: "settings",
23949
+ mount(context) {
23950
+ const document2 = context.content.ownerDocument;
23951
+ const ownerWindow = document2.defaultView;
23952
+ if (!ownerWindow) return;
23953
+ const heading = document2.createElement("div");
23954
+ heading.className = "settings-section-label";
23955
+ heading.textContent = messages.pageLabels.appearance;
23956
+ const description = document2.createElement("p");
23957
+ description.className = "settings-page-description";
23958
+ description.textContent = messages.appearanceDescription;
23959
+ const row = document2.createElement("label");
23960
+ row.className = "settings-preference-row";
23961
+ const copy = document2.createElement("span");
23962
+ copy.className = "settings-preference-row__copy";
23963
+ const title = document2.createElement("strong");
23964
+ title.textContent = messages.reasoningSoftWrapTitle;
23965
+ const detail = document2.createElement("span");
23966
+ detail.textContent = messages.reasoningSoftWrapDescription;
23967
+ copy.append(title, detail);
23968
+ const checkbox = document2.createElement("input");
23969
+ checkbox.type = "checkbox";
23970
+ checkbox.className = "settings-preference-checkbox";
23971
+ checkbox.checked = readReasoningTranscriptSoftWrap(ownerWindow);
23972
+ checkbox.setAttribute("aria-label", messages.reasoningSoftWrapTitle);
23973
+ checkbox.addEventListener("change", () => {
23974
+ setReasoningTranscriptSoftWrap(ownerWindow, checkbox.checked);
23975
+ });
23976
+ const sync = () => {
23977
+ checkbox.checked = readReasoningTranscriptSoftWrap(ownerWindow);
23978
+ };
23979
+ ownerWindow.addEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, sync);
23980
+ row.append(copy, checkbox);
23981
+ context.content.append(heading, description, row);
23982
+ return () => ownerWindow.removeEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, sync);
23983
+ }
23984
+ });
23985
+ }
23986
+
23840
23987
  // src/settings/release-notes.ts
23841
23988
  var HEADING_PATTERN = /^(#{1,6})[ \t]+(.+?)\s*$/u;
23842
23989
  var BLOCKQUOTE_PATTERN = /^>[ \t]?(.*?)\s*$/u;
@@ -24012,6 +24159,140 @@ ${error51.stderrTail}`] : []
24012
24159
  }
24013
24160
  }
24014
24161
 
24162
+ // src/settings/accounts-details.ts
24163
+ function createAccountDetails(document2, messages, input) {
24164
+ const root = document2.createElement("div");
24165
+ root.className = "settings-account-details";
24166
+ const trigger = document2.createElement("button");
24167
+ trigger.type = "button";
24168
+ trigger.className = "settings-icon-button";
24169
+ trigger.title = input.triggerLabel ?? input.label;
24170
+ trigger.disabled = input.disabled ?? false;
24171
+ trigger.dataset.accountFocus = input.focusKey;
24172
+ trigger.setAttribute("aria-label", trigger.title);
24173
+ trigger.setAttribute("aria-haspopup", "dialog");
24174
+ trigger.append(createRendererSettingsIcon(input.icon, 16));
24175
+ const dialog = document2.createElement("dialog");
24176
+ dialog.className = "settings-account-dialog";
24177
+ dialog.id = `settings-account-${input.focusKey}-dialog`;
24178
+ dialog.setAttribute("aria-label", input.label);
24179
+ trigger.setAttribute("aria-controls", dialog.id);
24180
+ const heading = document2.createElement("h2");
24181
+ heading.textContent = input.label;
24182
+ const description = document2.createElement("p");
24183
+ description.textContent = input.description;
24184
+ description.id = `${dialog.id}-description`;
24185
+ dialog.setAttribute("aria-describedby", description.id);
24186
+ const close = document2.createElement("button");
24187
+ close.type = "button";
24188
+ close.className = "settings-icon-button settings-account-dialog__close";
24189
+ close.dataset.accountFocus = `${input.focusKey}:close`;
24190
+ close.setAttribute("aria-label", messages.accountDetailsClose);
24191
+ close.append(createRendererSettingsIcon("close", 16));
24192
+ close.addEventListener("click", () => dialog.close());
24193
+ dialog.addEventListener("close", () => {
24194
+ if (trigger.isConnected && !trigger.disabled) trigger.focus({ preventScroll: true });
24195
+ });
24196
+ dialog.addEventListener(
24197
+ "click",
24198
+ (event) => {
24199
+ if (input.actions.some((action) => action.contains(event.target))) {
24200
+ trigger.focus({ preventScroll: true });
24201
+ dialog.close();
24202
+ }
24203
+ },
24204
+ { capture: true }
24205
+ );
24206
+ const actions = document2.createElement("div");
24207
+ actions.className = "settings-account-dialog__actions";
24208
+ actions.append(...input.actions);
24209
+ dialog.append(close, heading, description, actions);
24210
+ trigger.addEventListener("click", () => dialog.showModal());
24211
+ root.append(trigger, dialog);
24212
+ return root;
24213
+ }
24214
+
24215
+ // src/settings/accounts-reset-time.ts
24216
+ function formatAccountResetCountdown(value, messages, now = Date.now()) {
24217
+ const timestamp = Date.parse(value);
24218
+ if (!Number.isFinite(timestamp)) return null;
24219
+ const minutes = Math.max(0, Math.ceil((timestamp - now) / 6e4));
24220
+ if (minutes === 0) {
24221
+ return {
24222
+ text: messages.accountCreditsResetPending,
24223
+ description: messages.accountCreditsResetPendingHint
24224
+ };
24225
+ }
24226
+ const chinese = messages.locale === "zh-CN";
24227
+ const parts = [
24228
+ { value: Math.floor(minutes / 1440), unit: "d", label: chinese ? "\u5929" : " days" },
24229
+ { value: Math.floor(minutes % 1440 / 60), unit: "h", label: chinese ? "\u5C0F\u65F6" : " hours" },
24230
+ { value: minutes % 60, unit: "m", label: chinese ? "\u5206\u949F" : " minutes" }
24231
+ ].filter((part, index) => part.value > 0 && (minutes < 1440 || index < 2));
24232
+ return {
24233
+ text: parts.map((part) => `${part.value}${part.unit}`).join(""),
24234
+ description: messages.accountCreditsResetIn.replace(
24235
+ "{time}",
24236
+ parts.map(
24237
+ (part) => `${part.value}${!chinese && part.value === 1 ? part.label.slice(0, -1) : part.label}`
24238
+ ).join(chinese ? "" : " ")
24239
+ )
24240
+ };
24241
+ }
24242
+ function updateCountdown(element, messages) {
24243
+ const value = formatAccountResetCountdown(element.dataset.resetsAt ?? "", messages);
24244
+ if (!value) return;
24245
+ element.textContent = value.text;
24246
+ element.title = value.description;
24247
+ element.setAttribute("aria-label", value.description);
24248
+ }
24249
+ function renderAccountResetTime(document2, value, messages) {
24250
+ const date5 = new Date(value);
24251
+ if (!Number.isFinite(date5.getTime())) return null;
24252
+ const countdown = document2.createElement("span");
24253
+ countdown.className = "settings-account-usage__countdown";
24254
+ countdown.dataset.resetsAt = date5.toISOString();
24255
+ updateCountdown(countdown, messages);
24256
+ const timestamp = document2.createElement("time");
24257
+ timestamp.className = "settings-account-usage__sub";
24258
+ timestamp.dateTime = date5.toISOString();
24259
+ const pad = (number4) => String(number4).padStart(2, "0");
24260
+ timestamp.textContent = `${pad(date5.getMonth() + 1)}/${pad(date5.getDate())} ${pad(date5.getHours())}:${pad(date5.getMinutes())}`;
24261
+ timestamp.title = messages.accountCreditsResetAt.replace(
24262
+ "{time}",
24263
+ date5.toLocaleString(messages.locale, {
24264
+ year: "numeric",
24265
+ month: "long",
24266
+ day: "numeric",
24267
+ hour: "2-digit",
24268
+ minute: "2-digit",
24269
+ hour12: false,
24270
+ timeZoneName: "short"
24271
+ })
24272
+ );
24273
+ timestamp.setAttribute("aria-label", timestamp.title);
24274
+ return { countdown, timestamp };
24275
+ }
24276
+ function mountAccountResetCountdowns(list, messages, signal) {
24277
+ const window2 = list.ownerDocument.defaultView;
24278
+ if (!window2 || signal.aborted) return () => void 0;
24279
+ const refresh = () => {
24280
+ if (signal.aborted) return;
24281
+ for (const element of list.querySelectorAll("[data-resets-at]")) {
24282
+ updateCountdown(element, messages);
24283
+ }
24284
+ };
24285
+ const timer = window2.setInterval(refresh, 6e4);
24286
+ window2.addEventListener("focus", refresh);
24287
+ const stop = () => {
24288
+ window2.clearInterval(timer);
24289
+ window2.removeEventListener("focus", refresh);
24290
+ signal.removeEventListener("abort", stop);
24291
+ };
24292
+ signal.addEventListener("abort", stop, { once: true });
24293
+ return stop;
24294
+ }
24295
+
24015
24296
  // src/settings/accounts-usage.ts
24016
24297
  function creditsPeriodLabel2(periodType, messages) {
24017
24298
  if (periodType === "weekly") return messages.accountCreditsPeriodWeekly;
@@ -24046,17 +24327,80 @@ ${error51.stderrTail}`] : []
24046
24327
  function resetCreditDetailLine(index, expiresAt, messages, now = /* @__PURE__ */ new Date()) {
24047
24328
  return messages.accountResetCreditsCardExpiry.replace("{index}", String(index)).replace("{time}", formatAccountCreditsReset(expiresAt, messages.locale, now));
24048
24329
  }
24330
+ function accountUsageColumnLabel(period, display, messages) {
24331
+ const mode = display === "remaining" ? messages.accountCreditsRemaining : messages.accountCreditsUsed;
24332
+ return `${creditsPeriodLabel2(period, messages)}${messages.locale === "zh-CN" ? "" : " "}${mode}`;
24333
+ }
24334
+ function splitUsageWindows(credits, messages) {
24335
+ const columns = {};
24336
+ const additional = [];
24337
+ const primary = {
24338
+ label: credits.label ?? creditsPeriodLabel2(credits.periodType, messages),
24339
+ usedPercent: credits.usedPercent,
24340
+ resetsAt: credits.resetsAt
24341
+ };
24342
+ if (!credits.label && credits.periodType === "five_hour") columns.five_hour = primary;
24343
+ else if (!credits.label && ["seven_day", "weekly"].includes(credits.periodType))
24344
+ columns.seven_day = { ...primary, label: messages.accountCreditsPeriodSevenDay };
24345
+ else additional.push(primary);
24346
+ for (const product of credits.productUsage ?? []) {
24347
+ const window2 = {
24348
+ label: creditsProductLabel(product.product, messages),
24349
+ usedPercent: product.usagePercent,
24350
+ resetsAt: product.resetsAt
24351
+ };
24352
+ const period = product.product === "7-day window" ? "seven_day" : product.product === "5-hour window" ? "five_hour" : null;
24353
+ if (period && !columns[period])
24354
+ columns[period] = { ...window2, label: creditsPeriodLabel2(period, messages) };
24355
+ else additional.push(window2);
24356
+ }
24357
+ return { columns, additional };
24358
+ }
24359
+ function renderUsageWindow(document2, window2, messages, display) {
24360
+ const meter = document2.createElement("div");
24361
+ meter.className = "settings-account-usage__meter";
24362
+ const label = document2.createElement("span");
24363
+ label.className = "settings-account-usage__title";
24364
+ label.textContent = window2.label;
24365
+ label.title = window2.label;
24366
+ const value = display === "remaining" ? 100 - window2.usedPercent : window2.usedPercent;
24367
+ const valueLabel = display === "remaining" ? messages.accountCreditsRemaining : messages.accountCreditsUsed;
24368
+ const tone = rendererCreditsTone(window2.usedPercent);
24369
+ const percent = document2.createElement("div");
24370
+ percent.className = `settings-account-usage__percent settings-account-usage__percent--${tone}`;
24371
+ const number4 = document2.createElement("span");
24372
+ number4.textContent = formatRendererCreditsPercent(value);
24373
+ const reset = window2.resetsAt ? renderAccountResetTime(document2, window2.resetsAt, messages) : null;
24374
+ if (reset) percent.append(reset.countdown);
24375
+ percent.append(number4);
24376
+ const bar = document2.createElement("div");
24377
+ bar.className = `settings-account-usage__bar settings-account-usage__bar--${tone}`;
24378
+ bar.setAttribute("role", "meter");
24379
+ bar.setAttribute("aria-label", `${window2.label} \xB7 ${valueLabel}`);
24380
+ bar.setAttribute("aria-valuemin", "0");
24381
+ bar.setAttribute("aria-valuemax", "100");
24382
+ bar.setAttribute("aria-valuenow", String(value));
24383
+ const fill = document2.createElement("span");
24384
+ fill.style.width = `${Math.min(100, Math.max(0, value))}%`;
24385
+ bar.append(fill);
24386
+ meter.append(label, percent, bar);
24387
+ if (reset) meter.append(reset.timestamp);
24388
+ return meter;
24389
+ }
24049
24390
  function renderAccountUsage(document2, state, messages, display, onRetry) {
24050
- if (!state) return null;
24051
- const usage = document2.createElement("div");
24052
- usage.className = "settings-account-usage";
24053
- if (state.status !== "ready") {
24391
+ if (state?.status !== "ready") {
24392
+ const cell = document2.createElement("td");
24393
+ cell.colSpan = 2;
24394
+ cell.className = "settings-account-usage-cell settings-account-usage-cell--message";
24395
+ const usage = document2.createElement("div");
24396
+ usage.className = "settings-account-usage";
24054
24397
  const message = document2.createElement("span");
24055
24398
  message.className = "settings-account-usage__message";
24056
- message.textContent = state.status === "loading" ? messages.accountCreditsLoading : state.status === "error" ? messages.accountCreditsFailed : messages.accountCreditsEmpty;
24399
+ message.textContent = !state ? "\u2014" : state.status === "loading" ? messages.accountCreditsLoading : state.status === "error" ? messages.accountCreditsFailed : messages.accountCreditsEmpty;
24400
+ if (!state) message.title = messages.accountCreditsEmpty;
24057
24401
  usage.append(message);
24058
- if (state.status === "loading") usage.setAttribute("aria-busy", "true");
24059
- if (state.status === "error") {
24402
+ if (state?.status === "loading") usage.setAttribute("aria-busy", "true");
24403
+ if (state?.status === "error") {
24060
24404
  const retry = document2.createElement("button");
24061
24405
  retry.type = "button";
24062
24406
  retry.className = "settings-command-button settings-command-button--secondary";
@@ -24064,59 +24408,35 @@ ${error51.stderrTail}`] : []
24064
24408
  retry.addEventListener("click", onRetry);
24065
24409
  usage.append(retry);
24066
24410
  }
24067
- return usage;
24411
+ cell.append(usage);
24412
+ return { cells: [cell], additional: null };
24068
24413
  }
24069
- const credits = state.credits;
24070
- const windows = [
24071
- {
24072
- label: credits.label ?? creditsPeriodLabel2(credits.periodType, messages),
24073
- usedPercent: credits.usedPercent,
24074
- resetsAt: credits.resetsAt
24075
- },
24076
- ...(credits.productUsage ?? []).map((product) => ({
24077
- label: creditsProductLabel(product.product, messages),
24078
- usedPercent: product.usagePercent,
24079
- resetsAt: product.resetsAt
24080
- }))
24081
- ];
24082
- for (const window2 of windows) {
24083
- const meter = document2.createElement("div");
24084
- meter.className = "settings-account-usage__meter";
24085
- const label = document2.createElement("span");
24086
- label.className = "settings-account-usage__title";
24087
- label.textContent = window2.label;
24088
- label.title = window2.label;
24089
- const value = display === "remaining" ? 100 - window2.usedPercent : window2.usedPercent;
24090
- const valueLabel = display === "remaining" ? messages.accountCreditsRemaining : messages.accountCreditsUsed;
24091
- const tone = rendererCreditsTone(window2.usedPercent);
24092
- const bar = document2.createElement("div");
24093
- bar.className = `settings-account-usage__bar settings-account-usage__bar--${tone}`;
24094
- bar.setAttribute("role", "meter");
24095
- bar.setAttribute("aria-label", `${window2.label} \xB7 ${valueLabel}`);
24096
- bar.setAttribute("aria-valuemin", "0");
24097
- bar.setAttribute("aria-valuemax", "100");
24098
- bar.setAttribute("aria-valuenow", String(value));
24099
- const fill = document2.createElement("span");
24100
- fill.style.width = `${Math.min(100, Math.max(0, value))}%`;
24101
- bar.append(fill);
24102
- const percent = document2.createElement("span");
24103
- percent.className = `settings-account-usage__percent settings-account-usage__percent--${tone}`;
24104
- const prefix = document2.createElement("span");
24105
- prefix.textContent = valueLabel;
24106
- prefix.className = "settings-account-usage__value-label";
24107
- const number4 = document2.createElement("span");
24108
- number4.textContent = formatRendererCreditsPercent(value);
24109
- percent.append(prefix, number4);
24110
- meter.append(label, bar, percent);
24111
- if (window2.resetsAt) {
24112
- const reset = document2.createElement("span");
24113
- reset.className = "settings-account-usage__sub";
24114
- reset.textContent = `${formatAccountCreditsReset(window2.resetsAt, messages.locale)} ${messages.accountCreditsReset}`;
24115
- meter.append(reset);
24116
- }
24117
- usage.append(meter);
24118
- }
24119
- return usage;
24414
+ const { columns, additional } = splitUsageWindows(state.credits, messages);
24415
+ const cells = ["five_hour", "seven_day"].map((period) => {
24416
+ const cell = document2.createElement("td");
24417
+ cell.className = "settings-account-usage-cell";
24418
+ const window2 = columns[period];
24419
+ if (window2) cell.append(renderUsageWindow(document2, window2, messages, display));
24420
+ else {
24421
+ const missing = document2.createElement("div");
24422
+ missing.className = "settings-account-usage__missing";
24423
+ const label = document2.createElement("span");
24424
+ label.className = "settings-account-usage__title";
24425
+ label.textContent = creditsPeriodLabel2(period, messages);
24426
+ const dash = document2.createElement("span");
24427
+ dash.textContent = "\u2014";
24428
+ dash.setAttribute("aria-hidden", "true");
24429
+ missing.append(label, dash);
24430
+ cell.append(missing);
24431
+ }
24432
+ return cell;
24433
+ });
24434
+ if (!additional.length) return { cells, additional: null };
24435
+ const extra = document2.createElement("div");
24436
+ extra.className = "settings-account-extra-usage";
24437
+ for (const window2 of additional)
24438
+ extra.append(renderUsageWindow(document2, window2, messages, display));
24439
+ return { cells, additional: extra };
24120
24440
  }
24121
24441
  function renderAccountResetCredits(document2, credits, messages, options) {
24122
24442
  const resetCredits = credits.resetCredits;
@@ -24128,8 +24448,11 @@ ${error51.stderrTail}`] : []
24128
24448
  summary.title = messages.accountResetCreditsDetails;
24129
24449
  const count = document2.createElement("span");
24130
24450
  count.textContent = messages.locale === "zh-CN" ? `${resetCredits.availableCount} \u5F20` : String(resetCredits.availableCount);
24451
+ const label = document2.createElement("span");
24452
+ label.textContent = messages.accountResetCredits;
24131
24453
  summary.append(
24132
24454
  createRendererSettingsIcon("ticket", 16),
24455
+ label,
24133
24456
  count,
24134
24457
  createRendererSettingsIcon("chevron-right", 14)
24135
24458
  );
@@ -24199,6 +24522,8 @@ ${error51.stderrTail}`] : []
24199
24522
  return () => {
24200
24523
  const target = key ? list.querySelector(`[data-account-focus="${CSS.escape(key)}"]`) : null;
24201
24524
  if (target && !target.matches(":disabled")) {
24525
+ const dialog = target.closest("dialog");
24526
+ if (dialog && !dialog.open) dialog.showModal();
24202
24527
  target.focus({ preventScroll: true });
24203
24528
  return;
24204
24529
  }
@@ -24214,87 +24539,100 @@ ${error51.stderrTail}`] : []
24214
24539
  table.setAttribute("aria-label", messages.pageLabels.accounts);
24215
24540
  const head = document2.createElement("thead");
24216
24541
  const row = document2.createElement("tr");
24217
- for (const label of [
24218
- messages.accountColumnAccount,
24219
- messages.accountColumnUsage,
24220
- messages.accountResetCredits,
24221
- messages.accountColumnActions
24222
- ]) {
24542
+ const headers = Array.from({ length: 4 }, () => {
24223
24543
  const cell = document2.createElement("th");
24224
24544
  cell.scope = "col";
24225
- cell.textContent = label;
24226
24545
  row.append(cell);
24227
- }
24546
+ return cell;
24547
+ });
24548
+ const updateDisplay = (display) => {
24549
+ const labels = [
24550
+ messages.accountColumnAccount,
24551
+ accountUsageColumnLabel("five_hour", display, messages),
24552
+ accountUsageColumnLabel("seven_day", display, messages),
24553
+ messages.accountColumnActions
24554
+ ];
24555
+ headers.forEach((cell, index) => {
24556
+ cell.textContent = labels[index] ?? "";
24557
+ });
24558
+ };
24559
+ updateDisplay("remaining");
24228
24560
  head.append(row);
24229
24561
  const body = document2.createElement("tbody");
24230
24562
  table.append(head, body);
24231
- return { table, body };
24563
+ return { table, body, updateDisplay };
24232
24564
  }
24233
- function renderAccountRows(document2, account, messages, input) {
24234
- const row = document2.createElement("tr");
24235
- row.className = "settings-account-row";
24236
- row.dataset.accountId = account.accountId;
24237
- row.dataset.accountFocus = `${account.accountId}:row`;
24238
- row.tabIndex = -1;
24239
- const name = codexAccountDisplayName(account);
24240
- row.setAttribute("aria-label", name.full);
24241
- const personCell = document2.createElement("td");
24565
+ function createAccountPerson(document2, messages, input) {
24242
24566
  const person = document2.createElement("div");
24243
24567
  person.className = "settings-account-row__person";
24244
- const mark = document2.createElement("div");
24245
- mark.className = "settings-account-row__mark";
24246
- mark.setAttribute("aria-hidden", "true");
24247
- mark.append(createRendererSettingsIcon("terminal", 17));
24248
24568
  const identity = document2.createElement("div");
24249
24569
  identity.className = "settings-account-row__identity";
24250
- const title = document2.createElement("div");
24251
- title.className = "settings-account-title";
24252
- const local = document2.createElement("strong");
24253
- local.className = "settings-account-email";
24254
- local.textContent = name.local;
24255
- local.title = name.full;
24256
- title.append(local);
24257
- if (account.active) {
24258
- const badge = document2.createElement("span");
24259
- badge.className = "settings-account-active";
24260
- badge.textContent = messages.accountDefaultBadge;
24261
- title.append(badge);
24262
- }
24263
- identity.append(title);
24570
+ const title = document2.createElement("strong");
24571
+ title.className = "settings-account-email";
24572
+ title.textContent = input.name;
24573
+ title.title = input.name;
24574
+ title.translate = false;
24264
24575
  const metadata = document2.createElement("div");
24265
24576
  metadata.className = "settings-account-metadata";
24266
- if (name.domain) {
24267
- const domain2 = document2.createElement("span");
24268
- domain2.className = "settings-account-domain";
24269
- domain2.textContent = `@${name.domain}`;
24270
- metadata.append(domain2);
24271
- }
24272
- const planLabel = accountPlanLabel(account.planType);
24273
- if (planLabel) {
24274
- if (name.domain) {
24577
+ const agent = document2.createElement("span");
24578
+ agent.textContent = input.agent;
24579
+ agent.translate = false;
24580
+ if (input.name !== input.agent) metadata.append(agent);
24581
+ if (input.plan) {
24582
+ if (metadata.childElementCount) {
24275
24583
  const separator = document2.createElement("span");
24276
- separator.className = "settings-account-plan-separator";
24277
24584
  separator.textContent = "\xB7";
24278
24585
  separator.setAttribute("aria-hidden", "true");
24279
24586
  metadata.append(separator);
24280
24587
  }
24281
24588
  const plan = document2.createElement("span");
24282
- plan.className = account.planType === "pro" || account.planType === "prolite" ? "settings-account-plan settings-account-plan--highlighted" : "settings-account-plan";
24283
- plan.textContent = planLabel;
24589
+ plan.className = input.highlighted ? "settings-account-plan settings-account-plan--highlighted" : "settings-account-plan";
24590
+ plan.textContent = input.plan;
24591
+ plan.translate = false;
24284
24592
  metadata.append(plan);
24285
24593
  }
24286
- if (metadata.childElementCount > 0) identity.append(metadata);
24287
- person.append(mark, identity);
24288
- personCell.append(person);
24289
- const usageCell = document2.createElement("td");
24594
+ if (input.active) {
24595
+ const badge = document2.createElement("span");
24596
+ badge.className = "settings-account-active";
24597
+ badge.textContent = messages.accountDefaultBadge;
24598
+ badge.title = messages.accountDefaultHint;
24599
+ metadata.append(badge);
24600
+ }
24601
+ identity.append(title);
24602
+ if (metadata.childElementCount) identity.append(metadata);
24603
+ person.append(input.mark, identity);
24604
+ return person;
24605
+ }
24606
+ function renderAccountRows(document2, account, messages, input) {
24607
+ const row = document2.createElement("tr");
24608
+ row.className = "settings-account-row";
24609
+ row.dataset.accountId = account.accountId;
24610
+ row.dataset.accountFocus = `${account.accountId}:row`;
24611
+ row.tabIndex = -1;
24612
+ const name = codexAccountDisplayName(account);
24613
+ row.setAttribute("aria-label", name.full);
24614
+ const personCell = document2.createElement("td");
24615
+ personCell.className = "settings-account-person-cell";
24616
+ const mark = document2.createElement("div");
24617
+ mark.className = "settings-account-row__mark";
24618
+ mark.setAttribute("aria-hidden", "true");
24619
+ mark.append(createRendererSettingsIcon("terminal", 17));
24620
+ personCell.append(
24621
+ createAccountPerson(document2, messages, {
24622
+ name: name.full,
24623
+ agent: "Codex",
24624
+ plan: accountPlanLabel(account.planType),
24625
+ highlighted: account.planType === "pro" || account.planType === "prolite",
24626
+ active: account.active,
24627
+ mark
24628
+ })
24629
+ );
24290
24630
  const usage = renderAccountUsage(document2, input.usage, messages, input.display, input.onRetry);
24291
- if (usage) usageCell.append(usage);
24292
- const resetCell = document2.createElement("td");
24293
- const resetLabel2 = document2.createElement("span");
24294
- resetLabel2.className = "settings-account-mobile-label";
24295
- resetLabel2.textContent = messages.accountResetCredits;
24296
- resetCell.append(resetLabel2);
24631
+ if (usage.additional) personCell.append(usage.additional);
24297
24632
  const actionsCell = document2.createElement("td");
24633
+ actionsCell.className = "settings-account-management-cell";
24634
+ const management = document2.createElement("div");
24635
+ management.className = "settings-account-management";
24298
24636
  const actions = document2.createElement("div");
24299
24637
  actions.className = "settings-account-actions";
24300
24638
  if (!account.active) {
@@ -24302,6 +24640,7 @@ ${error51.stderrTail}`] : []
24302
24640
  activate.type = "button";
24303
24641
  activate.className = "settings-account-action";
24304
24642
  activate.textContent = messages.accountUse;
24643
+ activate.title = messages.accountDefaultHint;
24305
24644
  activate.dataset.accountFocus = `${account.accountId}:activate`;
24306
24645
  activate.disabled = input.actionsDisabled;
24307
24646
  activate.addEventListener("click", input.onActivate);
@@ -24317,30 +24656,45 @@ ${error51.stderrTail}`] : []
24317
24656
  signIn.addEventListener("click", input.onSignIn);
24318
24657
  actions.append(signIn);
24319
24658
  }
24659
+ const more = [];
24660
+ if (account.email && input.usage) {
24661
+ const refresh = document2.createElement("button");
24662
+ refresh.type = "button";
24663
+ refresh.className = "settings-account-action";
24664
+ refresh.textContent = messages.accountCreditsRefresh;
24665
+ refresh.dataset.accountFocus = `${account.accountId}:refresh`;
24666
+ refresh.disabled = input.actionsDisabled || input.usage.status === "loading";
24667
+ refresh.addEventListener("click", input.onRetry);
24668
+ more.push(refresh);
24669
+ }
24320
24670
  if (!account.isDefault) {
24321
24671
  const remove = document2.createElement("button");
24322
24672
  remove.type = "button";
24323
- remove.className = "settings-icon-button settings-account-delete";
24324
- remove.title = messages.accountDelete;
24673
+ remove.className = "settings-account-action settings-account-delete";
24674
+ remove.textContent = messages.accountDelete;
24325
24675
  remove.dataset.accountFocus = `${account.accountId}:delete`;
24326
24676
  remove.setAttribute("aria-label", `${messages.accountDelete}: ${name.full}`);
24327
24677
  remove.disabled = input.actionsDisabled;
24328
- remove.append(createRendererSettingsIcon("trash", 16));
24329
24678
  remove.addEventListener("click", input.onDelete);
24330
- actions.append(remove);
24331
- }
24332
- actionsCell.append(actions);
24333
- row.append(personCell, usageCell, resetCell, actionsCell);
24679
+ more.push(remove);
24680
+ }
24681
+ if (more.length)
24682
+ actions.append(
24683
+ createAccountDetails(document2, messages, {
24684
+ label: messages.accountMore,
24685
+ triggerLabel: `${name.full} \xB7 ${messages.accountMore}`,
24686
+ description: name.full,
24687
+ focusKey: `${account.accountId}:more`,
24688
+ icon: "ellipsis",
24689
+ disabled: input.actionsDisabled,
24690
+ actions: more
24691
+ })
24692
+ );
24693
+ management.append(actions);
24694
+ actionsCell.append(management);
24695
+ row.append(personCell, ...usage.cells, actionsCell);
24334
24696
  const reset = input.usage?.status === "ready" ? renderAccountResetCredits(document2, input.usage.credits, messages, input) : null;
24335
- if (!reset) {
24336
- const unknown2 = document2.createElement("span");
24337
- unknown2.className = "settings-account-unknown";
24338
- unknown2.textContent = "\u2014";
24339
- unknown2.title = messages.accountResetCreditsUnknown;
24340
- unknown2.setAttribute("aria-label", messages.accountResetCreditsUnknown);
24341
- resetCell.append(unknown2);
24342
- return [row];
24343
- }
24697
+ if (!reset) return [row];
24344
24698
  const detailsRow = document2.createElement("tr");
24345
24699
  detailsRow.className = "settings-account-details-row";
24346
24700
  detailsRow.id = `settings-account-reset-${++resetDetailsSequence}`;
@@ -24357,120 +24711,84 @@ ${error51.stderrTail}`] : []
24357
24711
  reset.summary.setAttribute("aria-expanded", String(!detailsRow.hidden));
24358
24712
  input.onResetExpanded(!detailsRow.hidden);
24359
24713
  });
24360
- resetCell.append(reset.summary);
24714
+ management.append(reset.summary);
24361
24715
  return [row, detailsRow];
24362
24716
  }
24717
+ function renderHarnessAccountRow(document2, account, messages, display) {
24718
+ const row = document2.createElement("tr");
24719
+ row.className = "settings-account-row";
24720
+ row.dataset.harnessId = account.harnessId;
24721
+ row.tabIndex = -1;
24722
+ const name = account.email ?? account.label ?? account.harnessName;
24723
+ row.setAttribute("aria-label", name);
24724
+ const personCell = document2.createElement("td");
24725
+ personCell.className = "settings-account-person-cell";
24726
+ const logo = document2.createElement("div");
24727
+ logo.className = "settings-harness-account__logo";
24728
+ logo.setAttribute("aria-hidden", "true");
24729
+ const agent = KNOWN_RENDERER_AGENTS.find((agent2) => agent2 === account.harnessId);
24730
+ if (agent) logo.append(createRendererAgentIcon(agent, 26, document2));
24731
+ personCell.append(
24732
+ createAccountPerson(document2, messages, {
24733
+ name,
24734
+ agent: account.harnessName,
24735
+ plan: account.plan ?? null,
24736
+ mark: logo
24737
+ })
24738
+ );
24739
+ const usage = renderAccountUsage(
24740
+ document2,
24741
+ { status: "ready", credits: account.credits },
24742
+ messages,
24743
+ display,
24744
+ () => void 0
24745
+ );
24746
+ if (usage.additional) personCell.append(usage.additional);
24747
+ const managementCell = document2.createElement("td");
24748
+ managementCell.className = "settings-account-management-cell";
24749
+ const management = document2.createElement("div");
24750
+ management.className = "settings-account-native";
24751
+ const label = document2.createElement("span");
24752
+ label.textContent = messages.accountNativeManaged;
24753
+ const info = createAccountDetails(document2, messages, {
24754
+ label: `${account.harnessName} \xB7 ${messages.accountNativeManaged}`,
24755
+ description: messages.accountNativeManagementHint.replace("{harness}", account.harnessName),
24756
+ focusKey: `harness:${account.harnessId}:info`,
24757
+ icon: "info",
24758
+ actions: []
24759
+ });
24760
+ management.append(label, info);
24761
+ managementCell.append(management);
24762
+ row.append(personCell, ...usage.cells, managementCell);
24763
+ return row;
24764
+ }
24363
24765
 
24364
24766
  // src/settings/harness-accounts.ts
24365
- function mountHarnessAccounts(context, messages, getClient, onChange) {
24366
- const document2 = context.content.ownerDocument;
24367
- const section = document2.createElement("section");
24368
- section.className = "settings-harness-accounts";
24369
- section.hidden = true;
24370
- const heading = document2.createElement("h2");
24371
- heading.className = "settings-harness-accounts__title";
24372
- heading.textContent = messages.harnessAccountsTitle;
24373
- const list = document2.createElement("div");
24374
- list.className = "settings-account-list";
24375
- section.append(heading, list);
24376
- context.content.append(section);
24767
+ function createHarnessAccounts(signal, getClient, onChange) {
24377
24768
  let accounts = [];
24378
24769
  let refreshing = false;
24379
- let query = "";
24380
- let display = "remaining";
24381
- const render = () => {
24382
- section.hidden = accounts.length === 0;
24383
- list.replaceChildren();
24384
- const visible = accounts.filter(
24385
- (account) => `${account.harnessName} ${account.email ?? ""} ${account.label ?? ""} ${account.plan ?? ""}`.toLocaleLowerCase().includes(query)
24386
- );
24387
- for (const account of visible) {
24388
- const row = document2.createElement("article");
24389
- row.className = "settings-harness-account";
24390
- row.dataset.harnessId = account.harnessId;
24391
- const identity = document2.createElement("div");
24392
- identity.className = "settings-harness-account__identity";
24393
- const name = document2.createElement("strong");
24394
- name.className = "settings-account-email";
24395
- const accountName = account.email ?? account.label;
24396
- name.textContent = accountName ?? account.harnessName;
24397
- name.title = name.textContent;
24398
- identity.append(name);
24399
- const metadata = document2.createElement("div");
24400
- metadata.className = "settings-account-metadata";
24401
- if (accountName) {
24402
- const harness = document2.createElement("span");
24403
- harness.textContent = account.harnessName;
24404
- metadata.append(harness);
24405
- }
24406
- if (account.plan) {
24407
- if (accountName) {
24408
- const separator = document2.createElement("span");
24409
- separator.textContent = "\xB7";
24410
- separator.setAttribute("aria-hidden", "true");
24411
- metadata.append(separator);
24412
- }
24413
- const plan = document2.createElement("span");
24414
- plan.className = "settings-account-plan";
24415
- plan.textContent = account.plan;
24416
- metadata.append(plan);
24417
- }
24418
- if (metadata.childElementCount) identity.append(metadata);
24419
- const usage = renderAccountUsage(
24420
- document2,
24421
- { status: "ready", credits: account.credits },
24422
- messages,
24423
- display,
24424
- () => void 0
24425
- );
24426
- const person = document2.createElement("div");
24427
- person.className = "settings-account-row__person";
24428
- const agent = KNOWN_RENDERER_AGENTS.find((agent2) => agent2 === account.harnessId);
24429
- if (agent) {
24430
- const logo = document2.createElement("div");
24431
- logo.className = "settings-harness-account__logo";
24432
- logo.setAttribute("aria-hidden", "true");
24433
- logo.append(createRendererAgentIcon(agent, 28, document2));
24434
- person.append(logo);
24435
- }
24436
- person.append(identity);
24437
- row.append(person);
24438
- if (usage) row.append(usage);
24439
- list.append(row);
24440
- }
24441
- if (accounts.length && !visible.length) {
24442
- const empty = document2.createElement("p");
24443
- empty.className = "settings-account-empty";
24444
- empty.textContent = messages.accountNoMatches;
24445
- list.append(empty);
24446
- }
24447
- };
24448
24770
  return {
24771
+ get accounts() {
24772
+ return accounts;
24773
+ },
24449
24774
  get refreshing() {
24450
24775
  return refreshing;
24451
24776
  },
24452
- update(nextQuery, nextDisplay) {
24453
- query = nextQuery;
24454
- display = nextDisplay;
24455
- render();
24456
- },
24457
24777
  async refresh() {
24458
- if (refreshing || context.signal.aborted) return;
24778
+ if (refreshing || signal.aborted) return;
24459
24779
  const client = getClient();
24460
24780
  if (!client?.listHarnessAccounts) return;
24461
24781
  refreshing = true;
24462
24782
  onChange();
24463
24783
  try {
24464
24784
  const result = await client.listHarnessAccounts();
24465
- if (!context.signal.aborted) accounts = result.accounts;
24785
+ if (!signal.aborted)
24786
+ accounts = [...result.accounts].sort((a, b) => a.harnessId.localeCompare(b.harnessId));
24466
24787
  } catch {
24467
- if (!context.signal.aborted) accounts = [];
24788
+ if (!signal.aborted) accounts = [];
24468
24789
  } finally {
24469
24790
  refreshing = false;
24470
- if (!context.signal.aborted) {
24471
- render();
24472
- onChange();
24473
- }
24791
+ if (!signal.aborted) onChange();
24474
24792
  }
24475
24793
  }
24476
24794
  };
@@ -24490,16 +24808,13 @@ ${error51.stderrTail}`] : []
24490
24808
  const header = document2.createElement("div");
24491
24809
  header.className = "settings-account-header";
24492
24810
  const copy = document2.createElement("div");
24493
- const eyebrow = document2.createElement("p");
24494
- eyebrow.className = "settings-account-eyebrow";
24495
- eyebrow.textContent = "ACCOUNT MANAGEMENT";
24496
24811
  const heading = document2.createElement("h1");
24497
24812
  heading.className = "settings-section-label";
24498
24813
  heading.textContent = messages.pageLabels.accounts;
24499
24814
  const description = document2.createElement("p");
24500
24815
  description.className = "settings-page-description";
24501
24816
  description.textContent = messages.accountsDescription;
24502
- copy.append(eyebrow, heading, description);
24817
+ copy.append(heading, description);
24503
24818
  const add = document2.createElement("button");
24504
24819
  add.type = "button";
24505
24820
  add.className = "settings-command-button";
@@ -24508,29 +24823,6 @@ ${error51.stderrTail}`] : []
24508
24823
  const status = document2.createElement("p");
24509
24824
  status.className = "settings-account-status";
24510
24825
  status.setAttribute("aria-live", "polite");
24511
- const helpRow = document2.createElement("div");
24512
- helpRow.className = "settings-account-help-row";
24513
- const taskHint = document2.createElement("p");
24514
- taskHint.className = "settings-account-task-hint";
24515
- const taskHintText = document2.createElement("span");
24516
- taskHintText.textContent = messages.accountTaskHint;
24517
- taskHint.append(createRendererSettingsIcon("info", 16), taskHintText);
24518
- const help = document2.createElement("button");
24519
- help.type = "button";
24520
- help.className = "settings-account-help-button";
24521
- help.append(createRendererSettingsIcon("help", 16), messages.accountLoginHelp);
24522
- help.setAttribute("aria-expanded", "false");
24523
- help.setAttribute("aria-controls", "settings-account-login-help");
24524
- const deviceCodeNote = document2.createElement("p");
24525
- deviceCodeNote.id = "settings-account-login-help";
24526
- deviceCodeNote.className = "settings-account-device-code-note";
24527
- deviceCodeNote.textContent = messages.accountDeviceCodePrerequisite;
24528
- deviceCodeNote.hidden = true;
24529
- help.addEventListener("click", () => {
24530
- deviceCodeNote.hidden = !deviceCodeNote.hidden;
24531
- help.setAttribute("aria-expanded", String(!deviceCodeNote.hidden));
24532
- });
24533
- helpRow.append(taskHint, help);
24534
24826
  const toolbar = document2.createElement("div");
24535
24827
  toolbar.className = "settings-account-toolbar";
24536
24828
  const connected = document2.createElement("div");
@@ -24578,9 +24870,10 @@ ${error51.stderrTail}`] : []
24578
24870
  toolbar.append(connected, searchWrapper, displayControls, refreshUsage);
24579
24871
  const list = document2.createElement("div");
24580
24872
  list.className = "settings-account-list";
24581
- const { table, body } = createAccountsTable(document2, messages);
24873
+ const { table, body, updateDisplay } = createAccountsTable(document2, messages);
24582
24874
  list.append(table);
24583
- context.content.append(header, helpRow, deviceCodeNote, status, toolbar, list);
24875
+ context.content.append(header, status, toolbar, list);
24876
+ const stopCountdowns = mountAccountResetCountdowns(list, messages, context.signal);
24584
24877
  let accounts = [];
24585
24878
  let accountCreating = false;
24586
24879
  let accountActivating = false;
@@ -24630,18 +24923,21 @@ ${error51.stderrTail}`] : []
24630
24923
  const restoreFocus = accountListFocusRestorer(list, search);
24631
24924
  body.replaceChildren();
24632
24925
  status.textContent = loginMessage ?? "";
24633
- connectedCount.textContent = String(accounts.filter((account) => account.email).length);
24926
+ connectedCount.textContent = String(accounts.length + harnessAccounts.accounts.length);
24927
+ updateDisplay(usageDisplay);
24634
24928
  search.disabled = login !== null || loginStartingAccountId !== null;
24635
24929
  for (const [display, button] of displayButtons) {
24636
24930
  button.setAttribute("aria-pressed", String(display === usageDisplay));
24637
24931
  }
24638
24932
  refreshUsage.disabled = (!getClient()?.inspectCodexAccountUsage || !accounts.some((account) => account.email)) && !getClient()?.listHarnessAccounts || harnessAccounts?.refreshing === true || [...usageByAccountId.values()].some((usage) => usage.status === "loading") || accountBusy();
24639
24933
  const query = search.value.trim().toLocaleLowerCase();
24640
- harnessAccounts?.update(query, usageDisplay);
24641
24934
  const visibleAccounts = accounts.filter(
24642
- (account) => `${account.email ?? ""} ${account.label}`.toLocaleLowerCase().includes(query)
24935
+ (account) => `Codex ${account.email ?? ""} ${account.label} ${accountPlanLabel(account.planType) ?? ""}`.toLocaleLowerCase().includes(query)
24643
24936
  );
24644
- if (visibleAccounts.length === 0) {
24937
+ const visibleHarnessAccounts = harnessAccounts.accounts.filter(
24938
+ (account) => `${account.harnessName} ${account.email ?? ""} ${account.label ?? ""} ${account.plan ?? ""}`.toLocaleLowerCase().includes(query)
24939
+ );
24940
+ if (visibleAccounts.length + visibleHarnessAccounts.length === 0) {
24645
24941
  const emptyRow = document2.createElement("tr");
24646
24942
  const emptyCell = document2.createElement("td");
24647
24943
  emptyCell.colSpan = 4;
@@ -24726,6 +25022,9 @@ ${error51.stderrTail}`] : []
24726
25022
  body.append(verificationRow);
24727
25023
  }
24728
25024
  }
25025
+ for (const account of visibleHarnessAccounts) {
25026
+ body.append(renderHarnessAccountRow(document2, account, messages, usageDisplay));
25027
+ }
24729
25028
  restoreFocus();
24730
25029
  };
24731
25030
  const client = () => {
@@ -24956,10 +25255,11 @@ ${error51.stderrTail}`] : []
24956
25255
  });
24957
25256
  } catch {
24958
25257
  }
24959
- const harnessAccounts = mountHarnessAccounts(context, messages, getClient, render);
25258
+ const harnessAccounts = createHarnessAccounts(context.signal, getClient, render);
24960
25259
  void harnessAccounts.refresh();
24961
25260
  load();
24962
25261
  return () => {
25262
+ stopCountdowns();
24963
25263
  clearLoginRefresh();
24964
25264
  unsubscribe?.();
24965
25265
  };
@@ -25451,6 +25751,7 @@ ${error51.stderrTail}`] : []
25451
25751
  createConnectionsSettingsPage(messages, getDiagnostics),
25452
25752
  createAccountsSettingsPage(messages, getAccountClient),
25453
25753
  createSessionImportSettingsPage(messages, getSessionImportClient, openImportedThread),
25754
+ createAppearanceSettingsPage(messages),
25454
25755
  updatesPage(messages, getUpdateClient),
25455
25756
  aboutPage(messages)
25456
25757
  ]);
@@ -25469,10 +25770,10 @@ ${error51.stderrTail}`] : []
25469
25770
  }
25470
25771
 
25471
25772
  // src/settings/shell.css
25472
- var shell_default = ':host {\n --settings-bg: light-dark(#ffffff, #202020);\n --settings-sidebar: light-dark(#f7f7f8, #191919);\n --settings-panel: light-dark(#ffffff, #232323);\n --settings-surface: light-dark(#f6f6f6, #292929);\n --settings-surface-hover: light-dark(#eeeeee, #303030);\n --settings-inset: light-dark(#f3f3f3, #161616);\n --settings-text: light-dark(#0d0d0d, #ececec);\n --settings-muted: light-dark(#676767, #a3a3a3);\n --settings-subtle: light-dark(#8a8a8a, #777777);\n --settings-border: light-dark(rgb(13 13 13 / 9%), rgb(255 255 255 / 9%));\n --settings-divider: light-dark(rgb(13 13 13 / 7%), rgb(255 255 255 / 7%));\n --settings-hover: light-dark(rgb(13 13 13 / 5%), rgb(255 255 255 / 7%));\n --settings-active: light-dark(rgb(13 13 13 / 7%), rgb(255 255 255 / 9%));\n --settings-focus: light-dark(#0b75d1, #66aaf9);\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.settings-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\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: 14px;\n box-shadow: light-dark(0 16px 42px rgb(0 0 0 / 16%), 0 20px 54px rgb(0 0 0 / 42%));\n}\n\n.codexhost-settings-dialog::backdrop {\n background: light-dark(rgb(0 0 0 / 24%), rgb(0 0 0 / 56%));\n backdrop-filter: blur(1px);\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: 24px;\n padding: 4px 9px 2px;\n color: var(--settings-subtle);\n font-size: 11px;\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: 13px;\n line-height: 20px;\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-nav-star-link {\n margin-top: 0;\n color: var(--settings-text);\n text-decoration: none;\n}\n\n.settings-nav-star-link .codexhost-settings-icon {\n color: var(--settings-warning);\n}\n\n.settings-nav-star-link:hover {\n color: var(--settings-warning);\n background: var(--settings-warning-bg);\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 margin: 0;\n padding: 0 0 18px;\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);\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);\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 align-items: center;\n min-width: 0;\n gap: 12px;\n margin: -12px 0 16px;\n color: var(--settings-muted);\n font-size: 13px;\n}\n\n.settings-session-import-harness > span {\n flex: none;\n}\n\n.settings-session-import-harness__options {\n display: flex;\n align-items: center;\n min-width: 0;\n flex: 1;\n gap: 6px;\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: none;\n}\n\n.settings-session-import-harness__options::-webkit-scrollbar {\n display: none;\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: rgb(255 255 255 / 4%);\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-harness + .settings-page-description {\n margin-top: 0;\n margin-bottom: 4px;\n}\n\n.settings-session-import-availability-note {\n margin-top: 0;\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 margin: 16px 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 min-height: 36px;\n padding: 6px 10px;\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: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}\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: 1;\n min-width: 130px;\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-status {\n display: flex;\n align-items: center;\n min-height: 64px;\n gap: 12px;\n padding: 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-hover);\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: 5px 0 0;\n}\n\n.settings-connections-content,\n.settings-connections-layout,\n.settings-connection-list,\n.settings-connection-rows {\n min-width: 0;\n}\n\n.settings-connections-layout {\n display: grid;\n grid-template-columns: minmax(0, 1.55fr) minmax(280px, 0.85fr);\n align-items: start;\n gap: 18px;\n}\n\n.settings-connection-list,\n.settings-connection-inspector {\n overflow: hidden;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 10px;\n}\n\n.settings-connection-host-strip {\n display: grid;\n grid-template-columns: 30px minmax(0, 1fr) 30px;\n align-items: center;\n min-width: 0;\n gap: 5px;\n padding: 9px 10px;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-host-scroll {\n display: none;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 34px;\n padding: 0;\n color: var(--settings-muted);\n background: var(--settings-inset);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n cursor: pointer;\n}\n\n.settings-connection-host-strip[data-connection-host-overflow="true"]\n .settings-connection-host-scroll {\n display: inline-flex;\n}\n\n.settings-connection-host-strip:not([data-connection-host-overflow="true"]) {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.settings-connection-host-scroll:hover:not(:disabled) {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-connection-host-scroll:disabled {\n cursor: default;\n opacity: 0.35;\n}\n\n.settings-connection-host-scroll:focus-visible,\n.settings-connection-host-tab:focus-visible,\n.settings-connection-row:focus-visible,\n.settings-connection-install-link:focus-visible,\n.settings-connection-view-error:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 1px;\n}\n\n.settings-connection-host-tabs {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 6px;\n overflow-x: auto;\n overflow-y: hidden;\n overscroll-behavior-x: contain;\n scrollbar-width: none;\n scroll-behavior: smooth;\n scroll-snap-type: x proximity;\n touch-action: pan-x;\n}\n\n.settings-connection-host-tabs::-webkit-scrollbar {\n display: none;\n}\n\n.settings-connection-host-tab {\n display: inline-flex;\n align-items: center;\n height: 30px;\n min-width: max-content;\n flex: none;\n padding: 0 9px;\n color: var(--settings-muted);\n font: inherit;\n font-size: 12px;\n line-height: 18px;\n white-space: nowrap;\n background: var(--settings-inset);\n border: 1px solid var(--settings-border);\n border-radius: 7px;\n cursor: pointer;\n scroll-snap-align: start;\n}\n\n.settings-connection-host-tab:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-connection-host-tab[aria-selected="true"] {\n color: var(--settings-text);\n font-weight: 600;\n background: var(--settings-active);\n border-color: var(--settings-border);\n}\n\n.settings-connection-table-header,\n.settings-connection-row {\n display: grid;\n grid-template-columns: minmax(160px, 1fr) minmax(92px, auto) 108px;\n align-items: center;\n min-width: 0;\n gap: 10px;\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: transparent;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-row {\n min-height: 52px;\n padding: 8px 10px;\n cursor: pointer;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-row:last-child {\n border-bottom: 0;\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-muted);\n font-size: 10px;\n font-weight: 700;\n background: var(--settings-surface);\n border-radius: 6px;\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-row__status {\n display: inline-flex;\n align-items: center;\n width: fit-content;\n gap: 5px;\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-row__group-toggle {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.settings-connection-row__group-toggle:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\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-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-panel {\n display: grid;\n max-width: 720px;\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-copy p,\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: 2px 0;\n color: var(--settings-warning);\n font-size: 14px;\n font-weight: 600;\n line-height: 22px;\n}\n\n.settings-about-repository {\n display: grid;\n gap: 10px;\n padding-top: 18px;\n border-top: 1px solid var(--settings-divider);\n}\n\n.settings-about-repository-link {\n display: flex;\n align-items: center;\n width: fit-content;\n min-width: 0;\n max-width: 100%;\n gap: 8px;\n color: var(--settings-focus);\n font-size: 13px;\n font-weight: 600;\n text-decoration: none;\n}\n\n.settings-about-repository-link:hover {\n text-decoration: underline;\n}\n\n.settings-about-repository-link code {\n min-width: 0;\n overflow: hidden;\n color: var(--settings-muted);\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 11px;\n font-weight: 400;\n text-overflow: ellipsis;\n white-space: nowrap;\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 4px 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.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"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="downloading"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="installing"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="restarting"] .codexhost-settings-icon {\n color: var(--settings-focus);\n}\n\n.settings-update-panel[data-update-state="current"] .codexhost-settings-icon {\n color: var(--settings-success);\n}\n\n.settings-update-panel[data-update-state="failed"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="error"] .codexhost-settings-icon {\n color: var(--settings-danger);\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);\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-text);\n background: var(--settings-panel);\n border-color: var(--settings-border);\n}\n\n.settings-command-button:hover:not(:disabled) {\n background: var(--settings-primary-hover);\n border-color: var(--settings-primary-hover);\n}\n\n.settings-command-button--secondary:hover:not(:disabled),\n.settings-update-link:hover {\n background: var(--settings-hover);\n border-color: var(--settings-border);\n}\n\n.settings-command-button--danger {\n color: #f87171;\n}\n\n.settings-command-button--danger:hover:not(:disabled) {\n color: #fecaca;\n background: rgb(127 29 29 / 24%);\n border-color: rgb(248 113 113 / 45%);\n}\n\n.settings-command-button:disabled {\n cursor: default;\n opacity: 0.45;\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.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-session-import-row {\n grid-template-columns: minmax(0, 1fr);\n }\n\n .settings-session-import-row__action {\n align-items: flex-start;\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-nav-star-link {\n margin-top: 0;\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-connections-layout {\n grid-template-columns: minmax(0, 1fr);\n }\n\n .settings-connection-inspector {\n position: static;\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 --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-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';
25773
+ var shell_default = ':host {\n --settings-bg: light-dark(#ffffff, #202020);\n --settings-sidebar: light-dark(#f7f7f8, #191919);\n --settings-panel: light-dark(#ffffff, #232323);\n --settings-surface: light-dark(#f6f6f6, #292929);\n --settings-surface-hover: light-dark(#eeeeee, #303030);\n --settings-inset: light-dark(#f3f3f3, #161616);\n --settings-text: light-dark(#0d0d0d, #ececec);\n --settings-muted: light-dark(#676767, #a3a3a3);\n --settings-subtle: light-dark(#8a8a8a, #777777);\n --settings-border: light-dark(rgb(13 13 13 / 9%), rgb(255 255 255 / 9%));\n --settings-divider: light-dark(rgb(13 13 13 / 7%), rgb(255 255 255 / 7%));\n --settings-hover: light-dark(rgb(13 13 13 / 5%), rgb(255 255 255 / 7%));\n --settings-active: light-dark(rgb(13 13 13 / 7%), rgb(255 255 255 / 9%));\n --settings-focus: light-dark(#0b75d1, #66aaf9);\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.settings-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\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: 14px;\n box-shadow: light-dark(0 16px 42px rgb(0 0 0 / 16%), 0 20px 54px rgb(0 0 0 / 42%));\n}\n\n.codexhost-settings-dialog::backdrop {\n background: light-dark(rgb(0 0 0 / 24%), rgb(0 0 0 / 56%));\n backdrop-filter: blur(1px);\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: 24px;\n padding: 4px 9px 2px;\n color: var(--settings-subtle);\n font-size: 11px;\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: 13px;\n line-height: 20px;\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-nav-star-link {\n margin-top: 0;\n color: var(--settings-text);\n text-decoration: none;\n}\n\n.settings-nav-star-link .codexhost-settings-icon {\n color: var(--settings-warning);\n}\n\n.settings-nav-star-link:hover {\n color: var(--settings-warning);\n background: var(--settings-warning-bg);\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 margin: 0;\n padding: 0 0 18px;\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);\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);\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 align-items: center;\n min-width: 0;\n gap: 12px;\n margin: -12px 0 16px;\n color: var(--settings-muted);\n font-size: 13px;\n}\n\n.settings-session-import-harness > span {\n flex: none;\n}\n\n.settings-session-import-harness__options {\n display: flex;\n align-items: center;\n min-width: 0;\n flex: 1;\n gap: 6px;\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: none;\n}\n\n.settings-session-import-harness__options::-webkit-scrollbar {\n display: none;\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: rgb(255 255 255 / 4%);\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-harness + .settings-page-description {\n margin-top: 0;\n margin-bottom: 4px;\n}\n\n.settings-session-import-availability-note {\n margin-top: 0;\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 margin: 16px 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 min-height: 36px;\n padding: 6px 10px;\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: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}\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: 1;\n min-width: 130px;\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-status {\n display: flex;\n align-items: center;\n min-height: 64px;\n gap: 12px;\n padding: 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-hover);\n cursor: pointer;\n transition: background 120ms ease;\n}\n\n.settings-preference-switch[aria-checked="true"] {\n justify-content: flex-end;\n background: var(--settings-focus);\n}\n\n.settings-preference-switch:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-preference-switch__thumb {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--settings-primary-text);\n box-shadow: 0 1px 3px rgb(0 0 0 / 24%);\n}\n\n.settings-preference-checkbox {\n width: 18px;\n height: 18px;\n flex: none;\n margin: 0;\n accent-color: var(--settings-focus);\n cursor: pointer;\n}\n\n.settings-preference-checkbox:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-connection-page-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 18px;\n margin-bottom: 18px;\n}\n\n.settings-connection-page-header .settings-section-label {\n padding-bottom: 0;\n}\n\n.settings-connection-page-header .settings-page-description {\n margin: 5px 0 0;\n}\n\n.settings-connections-content,\n.settings-connections-layout,\n.settings-connection-list,\n.settings-connection-rows {\n min-width: 0;\n}\n\n.settings-connections-layout {\n display: grid;\n grid-template-columns: minmax(0, 1.55fr) minmax(280px, 0.85fr);\n align-items: start;\n gap: 18px;\n}\n\n.settings-connection-list,\n.settings-connection-inspector {\n overflow: hidden;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 10px;\n}\n\n.settings-connection-host-strip {\n display: grid;\n grid-template-columns: 30px minmax(0, 1fr) 30px;\n align-items: center;\n min-width: 0;\n gap: 5px;\n padding: 9px 10px;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-host-scroll {\n display: none;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 34px;\n padding: 0;\n color: var(--settings-muted);\n background: var(--settings-inset);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n cursor: pointer;\n}\n\n.settings-connection-host-strip[data-connection-host-overflow="true"]\n .settings-connection-host-scroll {\n display: inline-flex;\n}\n\n.settings-connection-host-strip:not([data-connection-host-overflow="true"]) {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.settings-connection-host-scroll:hover:not(:disabled) {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-connection-host-scroll:disabled {\n cursor: default;\n opacity: 0.35;\n}\n\n.settings-connection-host-scroll:focus-visible,\n.settings-connection-host-tab:focus-visible,\n.settings-connection-row:focus-visible,\n.settings-connection-install-link:focus-visible,\n.settings-connection-view-error:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 1px;\n}\n\n.settings-connection-host-tabs {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 6px;\n overflow-x: auto;\n overflow-y: hidden;\n overscroll-behavior-x: contain;\n scrollbar-width: none;\n scroll-behavior: smooth;\n scroll-snap-type: x proximity;\n touch-action: pan-x;\n}\n\n.settings-connection-host-tabs::-webkit-scrollbar {\n display: none;\n}\n\n.settings-connection-host-tab {\n display: inline-flex;\n align-items: center;\n height: 30px;\n min-width: max-content;\n flex: none;\n padding: 0 9px;\n color: var(--settings-muted);\n font: inherit;\n font-size: 12px;\n line-height: 18px;\n white-space: nowrap;\n background: var(--settings-inset);\n border: 1px solid var(--settings-border);\n border-radius: 7px;\n cursor: pointer;\n scroll-snap-align: start;\n}\n\n.settings-connection-host-tab:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-connection-host-tab[aria-selected="true"] {\n color: var(--settings-text);\n font-weight: 600;\n background: var(--settings-active);\n border-color: var(--settings-border);\n}\n\n.settings-connection-table-header,\n.settings-connection-row {\n display: grid;\n grid-template-columns: minmax(160px, 1fr) minmax(92px, auto) 108px;\n align-items: center;\n min-width: 0;\n gap: 10px;\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: transparent;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-row {\n min-height: 52px;\n padding: 8px 10px;\n cursor: pointer;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-row:last-child {\n border-bottom: 0;\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-muted);\n font-size: 10px;\n font-weight: 700;\n background: var(--settings-surface);\n border-radius: 6px;\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-row__status {\n display: inline-flex;\n align-items: center;\n width: fit-content;\n gap: 5px;\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-row__group-toggle {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.settings-connection-row__group-toggle:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\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-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-panel {\n display: grid;\n max-width: 720px;\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-copy p,\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: 2px 0;\n color: var(--settings-warning);\n font-size: 14px;\n font-weight: 600;\n line-height: 22px;\n}\n\n.settings-about-repository {\n display: grid;\n gap: 10px;\n padding-top: 18px;\n border-top: 1px solid var(--settings-divider);\n}\n\n.settings-about-repository-link {\n display: flex;\n align-items: center;\n width: fit-content;\n min-width: 0;\n max-width: 100%;\n gap: 8px;\n color: var(--settings-focus);\n font-size: 13px;\n font-weight: 600;\n text-decoration: none;\n}\n\n.settings-about-repository-link:hover {\n text-decoration: underline;\n}\n\n.settings-about-repository-link code {\n min-width: 0;\n overflow: hidden;\n color: var(--settings-muted);\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 11px;\n font-weight: 400;\n text-overflow: ellipsis;\n white-space: nowrap;\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 4px 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.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"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="downloading"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="installing"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="restarting"] .codexhost-settings-icon {\n color: var(--settings-focus);\n}\n\n.settings-update-panel[data-update-state="current"] .codexhost-settings-icon {\n color: var(--settings-success);\n}\n\n.settings-update-panel[data-update-state="failed"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="error"] .codexhost-settings-icon {\n color: var(--settings-danger);\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);\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-text);\n background: var(--settings-panel);\n border-color: var(--settings-border);\n}\n\n.settings-command-button:hover:not(:disabled) {\n background: var(--settings-primary-hover);\n border-color: var(--settings-primary-hover);\n}\n\n.settings-command-button--secondary:hover:not(:disabled),\n.settings-update-link:hover {\n background: var(--settings-hover);\n border-color: var(--settings-border);\n}\n\n.settings-command-button--danger {\n color: #f87171;\n}\n\n.settings-command-button--danger:hover:not(:disabled) {\n color: #fecaca;\n background: rgb(127 29 29 / 24%);\n border-color: rgb(248 113 113 / 45%);\n}\n\n.settings-command-button:disabled {\n cursor: default;\n opacity: 0.45;\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.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-session-import-row {\n grid-template-columns: minmax(0, 1fr);\n }\n\n .settings-session-import-row__action {\n align-items: flex-start;\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-nav-star-link {\n margin-top: 0;\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-connections-layout {\n grid-template-columns: minmax(0, 1fr);\n }\n\n .settings-connection-inspector {\n position: static;\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 --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-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';
25473
25774
 
25474
25775
  // src/settings/accounts.css
25475
- 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-eyebrow {\n margin: 0 0 8px;\n color: var(--settings-muted);\n font-size: 11px;\n letter-spacing: 0.13em;\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 margin-top: 20px;\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';
25776
+ var accounts_default = '.settings-harness-account__logo {\n display: grid;\n place-items: center;\n width: 34px;\n height: 34px;\n}\n\n.settings-account-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 margin-top: 0;\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-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: 210px;\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: 12px 16px;\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.settings-account-table th:nth-child(3) {\n width: 24%;\n}\n.settings-account-table th:nth-child(4) {\n width: 20%;\n text-align: right;\n}\n.settings-account-table td {\n padding: 17px 16px;\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-email {\n display: block;\n min-width: 0;\n overflow: hidden;\n font-size: 12px;\n font-weight: 550;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.settings-account-metadata {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 5px;\n margin-top: 4px;\n color: var(--settings-muted);\n flex-wrap: wrap;\n font-size: 11px;\n overflow-wrap: anywhere;\n}\n.settings-account-plan {\n flex: none;\n padding: 0 4px;\n color: var(--settings-muted);\n border: 1px solid var(--settings-border);\n border-radius: 5px;\n font-size: 10px;\n max-width: 100%;\n overflow-wrap: anywhere;\n}\n.settings-account-plan--highlighted {\n color: light-dark(#654f91, #c8bfff);\n background: light-dark(#f2edf9, #a99bff18);\n border-color: light-dark(#d9ccea, #a99bff52);\n font-weight: 600;\n}\n.settings-account-active {\n flex: none;\n color: light-dark(#66548e, #c8bfff);\n font-size: 10px;\n white-space: nowrap;\n}\n\n.settings-account-usage {\n display: grid;\n gap: 10px;\n}\n.settings-account-usage__meter {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n grid-template-rows: 20px 4px 17px;\n align-items: center;\n gap: 6px 0;\n min-width: 0;\n font-variant-numeric: tabular-nums;\n}\n.settings-account-usage__title {\n display: none;\n min-width: 0;\n color: var(--settings-muted);\n font-size: 11px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.settings-account-extra-usage {\n display: grid;\n gap: 12px;\n margin-top: 14px;\n}\n.settings-account-extra-usage .settings-account-usage__meter {\n grid-template-rows: auto 20px 4px 17px;\n}\n.settings-account-extra-usage .settings-account-usage__title {\n display: block;\n grid-column: 1 / -1;\n white-space: normal;\n overflow-wrap: anywhere;\n}\n.settings-account-usage__percent {\n grid-column: 1 / -1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n justify-content: flex-end;\n gap: 7px;\n font-size: 14px;\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n.settings-account-usage__countdown {\n min-width: 0;\n color: var(--settings-muted);\n font-size: 10px;\n font-weight: 400;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.settings-account-usage__percent > :last-child {\n flex: none;\n}\n.settings-account-usage__percent--warn {\n color: var(--settings-warning);\n}\n.settings-account-usage__percent--hot {\n color: var(--settings-danger);\n}\n.settings-account-usage__bar {\n grid-column: 1 / -1;\n height: 4px;\n overflow: hidden;\n background: light-dark(#e3e1e8, #3c3c43);\n border-radius: 4px;\n}\n.settings-account-usage__bar > span {\n display: block;\n height: 100%;\n background: light-dark(#81769e, #9993b8);\n border-radius: inherit;\n}\n.settings-account-usage__bar--warn > span {\n background: var(--settings-warning);\n}\n.settings-account-usage__bar--hot > span {\n background: var(--settings-danger);\n}\n.settings-account-usage__sub {\n grid-column: 1 / -1;\n color: var(--account-muted);\n font-size: 10px;\n font-variant-numeric: tabular-nums;\n text-align: right;\n white-space: nowrap;\n}\n.settings-account-usage__message {\n color: var(--settings-muted);\n}\n.settings-account-usage__missing {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-content: center;\n gap: 6px;\n min-height: 53px;\n color: var(--settings-muted);\n}\n.settings-account-usage__missing > span:not(.settings-account-usage__title) {\n grid-column: 1 / -1;\n font-size: 14px;\n}\n.settings-account-management {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n}\n.settings-account-native {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 3px;\n color: var(--settings-muted);\n font-size: 11px;\n}\n.settings-account-native .settings-icon-button {\n width: 25px;\n height: 28px;\n}\n.settings-account-usage > button {\n justify-self: start;\n}\n.settings-account-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: 4px 5px;\n min-height: 30px;\n font-size: 12px;\n color: var(--settings-text);\n background: transparent;\n border: 1px solid transparent;\n border-radius: 7px;\n white-space: nowrap;\n cursor: pointer;\n}\n.settings-account-action:hover {\n background: var(--settings-hover);\n}\n.settings-account-action:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n.settings-account-delete {\n color: var(--settings-danger);\n}\n.settings-account-delete:hover,\n.settings-account-delete:focus-visible {\n color: var(--settings-danger);\n background: var(--settings-danger-bg);\n}\n.settings-account-reset-summary {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n min-height: 24px;\n padding: 3px 0;\n font-size: 10px;\n white-space: nowrap;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 5px;\n cursor: pointer;\n}\n.settings-account-reset-summary:hover {\n background: var(--settings-hover);\n}\n.settings-account-reset-summary[aria-expanded="true"] > svg:last-child {\n transform: rotate(90deg);\n}\n.settings-account-details-row > td {\n background: var(--settings-inset);\n}\n.settings-account-reset-details {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n flex-wrap: wrap;\n}\n.settings-account-reset-details strong {\n font-size: 12px;\n}\n.settings-account-reset-expiry {\n margin: 6px 0;\n color: var(--settings-muted);\n font-size: 11px;\n}\n.settings-account-reset-expiry.is-warn {\n color: var(--settings-warning);\n}\n.settings-account-reset-expiry.is-hot {\n color: var(--settings-danger);\n}\n.settings-account-reset-list {\n margin: 8px 0 0;\n padding: 0;\n list-style: none;\n color: var(--settings-muted);\n font-size: 11px;\n}\n.settings-account-reset-list li + li {\n margin-top: 4px;\n}\n.settings-account-empty {\n text-align: center;\n color: var(--settings-muted);\n}\n.settings-account-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 outline: 2px solid var(--settings-focus);\n outline-offset: -2px;\n}\n\n.settings-account-dialog {\n position: fixed;\n width: min(360px, calc(100vw - 40px));\n max-height: calc(100vh - 40px);\n overflow: auto;\n padding: 22px;\n color: var(--settings-text);\n background: var(--settings-surface);\n border: 1px solid var(--settings-border);\n border-radius: 12px;\n text-align: left;\n}\n.settings-account-dialog::backdrop {\n background: #0005;\n}\n.settings-account-dialog h2 {\n margin: 0 28px 12px 0;\n font-size: 15px;\n}\n.settings-account-dialog p {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 1.6;\n overflow-wrap: anywhere;\n}\n.settings-account-dialog__close {\n position: absolute;\n top: 12px;\n right: 12px;\n}\n.settings-account-dialog__actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n@container (max-width: 680px) {\n .settings-account-table,\n .settings-account-table tbody {\n display: block;\n }\n .settings-account-table thead {\n display: none;\n }\n .settings-account-row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n padding: 18px;\n gap: 18px 22px;\n border-top: 1px solid var(--settings-divider);\n }\n .settings-account-row:first-child {\n border-top: 0;\n }\n .settings-account-table .settings-account-row > td {\n display: block;\n min-width: 0;\n padding: 0;\n border: 0;\n }\n .settings-account-person-cell,\n .settings-account-management-cell,\n .settings-account-usage-cell--message {\n grid-column: 1 / -1;\n }\n .settings-account-table .settings-account-management-cell {\n border-top: 1px solid var(--settings-divider);\n padding-top: 8px;\n }\n .settings-account-email {\n font-size: 13px;\n }\n .settings-account-usage__title {\n display: block;\n grid-column: 1;\n }\n .settings-account-usage__percent,\n .settings-account-usage__missing > span:not(.settings-account-usage__title) {\n grid-column: 2;\n text-align: right;\n }\n .settings-account-extra-usage .settings-account-usage__percent {\n grid-column: 1 / -1;\n }\n .settings-account-management {\n flex-direction: row;\n justify-content: space-between;\n }\n .settings-account-actions {\n order: 1;\n margin-left: auto;\n }\n .settings-account-native {\n justify-content: flex-start;\n }\n .settings-account-table tr:not(.settings-account-row, [hidden]),\n .settings-account-table tr:not(.settings-account-row, [hidden]) > td {\n display: block;\n }\n}\n\n@container (max-width: 360px) {\n .settings-account-row {\n grid-template-columns: minmax(0, 1fr);\n gap: 16px;\n padding: 16px;\n }\n}\n\n@media (forced-colors: active) {\n .settings-account-usage__bar {\n border: 1px solid CanvasText;\n }\n .settings-account-usage__bar > span {\n background: Highlight;\n }\n}\n';
25476
25777
 
25477
25778
  // src/settings/shell.ts
25478
25779
  var SETTINGS_SHELL_ATTRIBUTE = "data-codexhost-settings-shell";
@@ -26103,7 +26404,8 @@ ${accounts_default}`;
26103
26404
  opencode: harnessIdSchema.parse("opencode"),
26104
26405
  grok: harnessIdSchema.parse("grok"),
26105
26406
  omp: harnessIdSchema.parse("omp"),
26106
- antigravity: harnessIdSchema.parse("antigravity")
26407
+ antigravity: harnessIdSchema.parse("antigravity"),
26408
+ "kiro-cli": harnessIdSchema.parse("kiro-cli")
26107
26409
  };
26108
26410
  var externalAgents = [
26109
26411
  "pi",
@@ -26112,7 +26414,8 @@ ${accounts_default}`;
26112
26414
  "opencode",
26113
26415
  "grok",
26114
26416
  "omp",
26115
- "antigravity"
26417
+ "antigravity",
26418
+ "kiro-cli"
26116
26419
  ];
26117
26420
  function isRetryableHarnessAvailability(availability, error51) {
26118
26421
  return availability !== void 0 && availability !== "ready" && availability !== "notInstalled" && error51?.retryable === true;
@@ -26148,8 +26451,8 @@ ${accounts_default}`;
26148
26451
  if (usage === null) return true;
26149
26452
  return externalAgentHasAccountCredits(agent) && accountCredits === null;
26150
26453
  }
26151
- function shouldReloadExternalCatalogAfterAvailabilityRefresh(previous, next, configurationReady) {
26152
- return previous !== next || !configurationReady;
26454
+ function shouldReloadExternalCatalogAfterAvailabilityRefresh(previous, next, configurationReady, explicitRefresh = false) {
26455
+ return explicitRefresh || previous !== next || !configurationReady;
26153
26456
  }
26154
26457
  function isExternalConfigurationReadyView(modelView, permissionModeView) {
26155
26458
  return modelView.status !== "selecting" && modelView.catalog?.models.some((model) => model.ref.id === modelView.selected?.id) === true && isPermissionModeControlReady(permissionModeView);
@@ -26282,6 +26585,21 @@ ${accounts_default}`;
26282
26585
  ...permissionModeId ? { permissionModeId } : {}
26283
26586
  };
26284
26587
  }
26588
+ if (inspection.harnessId === "kiro-cli") {
26589
+ const route = decodeHarnessPluginRoute(inspection.transportModelId);
26590
+ if (!route || route.harnessId !== "kiro-cli") {
26591
+ throw new Error("Kiro CLI Thread reported an incompatible transport Model");
26592
+ }
26593
+ const model = inspection.effectiveModel ?? route.model;
26594
+ const thinkingOptionId = inspection.availableThinkingOptions !== void 0 ? selectableThinkingOptionId(inspection) : inspection.effectiveThinkingOptionId ?? route.thinkingOptionId;
26595
+ const permissionModeId = inspection.effectivePermissionModeId ?? route.permissionModeId;
26596
+ return {
26597
+ agent: "kiro-cli",
26598
+ ...model ? { model } : {},
26599
+ ...thinkingOptionId ? { thinkingOptionId } : {},
26600
+ ...permissionModeId ? { permissionModeId } : {}
26601
+ };
26602
+ }
26285
26603
  throw new Error("Thread owner is not a Renderer Agent");
26286
26604
  }
26287
26605
  function isOwnershipSubmissionBlocked(status) {
@@ -26355,6 +26673,7 @@ ${accounts_default}`;
26355
26673
  const mountedByComposer = /* @__PURE__ */ new Map();
26356
26674
  const pendingReplacements = /* @__PURE__ */ new Map();
26357
26675
  let disposed = false;
26676
+ const disposeReasoningSoftWrap = installReasoningTranscriptSoftWrap(document);
26358
26677
  let scanScheduled = false;
26359
26678
  let refreshTargetsOnNextScan = false;
26360
26679
  let adapterDispose = null;
@@ -26424,7 +26743,8 @@ ${accounts_default}`;
26424
26743
  opencode: void 0,
26425
26744
  grok: void 0,
26426
26745
  omp: void 0,
26427
- antigravity: void 0
26746
+ antigravity: void 0,
26747
+ "kiro-cli": void 0
26428
26748
  },
26429
26749
  webUi: Object.fromEntries(
26430
26750
  externalAgents.map((agent) => [agent, false])
@@ -26907,7 +27227,22 @@ ${accounts_default}`;
26907
27227
  return;
26908
27228
  }
26909
27229
  if (current.phase === "locked" && previousModel && !previousModelAvailable) {
26910
- throw new Error("Existing Thread Model is absent from the current Catalog");
27230
+ mounted.modelView = {
27231
+ status: "error",
27232
+ catalog: inspection.catalog,
27233
+ selected: previousModel,
27234
+ thinkingSelectionSupported: inspection.capabilities.configuration.selectThinkingOption,
27235
+ error: "Existing Thread Model is absent from the current Catalog"
27236
+ };
27237
+ if (selectedPermissionModeId && mounted.permissionModeView.catalog) {
27238
+ mounted.permissionModeView = {
27239
+ status: "ready",
27240
+ catalog: mounted.permissionModeView.catalog,
27241
+ selected: selectedPermissionModeId,
27242
+ ...permissionModeLock
27243
+ };
27244
+ }
27245
+ return;
26911
27246
  }
26912
27247
  const selected = previousModelAvailable ? previousModel : preferredConfiguration?.model ?? inspection.catalog.defaultModel;
26913
27248
  if (!selected) throw new Error("External Harness did not report its default Model");
@@ -27550,7 +27885,8 @@ ${accounts_default}`;
27550
27885
  if (composerState.agent === agent && shouldReloadExternalCatalogAfterAvailabilityRefresh(
27551
27886
  previousStatus,
27552
27887
  status,
27553
- isExternalConfigurationStable(mounted.modelView, mounted.permissionModeView)
27888
+ isExternalConfigurationStable(mounted.modelView, mounted.permissionModeView),
27889
+ refresh && force
27554
27890
  )) {
27555
27891
  void loadExternalCatalog(mounted);
27556
27892
  }
@@ -28157,6 +28493,7 @@ ${accounts_default}`;
28157
28493
  applyAdapterAgent = null;
28158
28494
  modelControl = null;
28159
28495
  mutationObserver.disconnect();
28496
+ disposeReasoningSoftWrap();
28160
28497
  sidebarAgentIcons.dispose();
28161
28498
  settingsLifecycle.dispose();
28162
28499
  document.removeEventListener("beforeinput", onBeforeInput, true);
@@ -28239,6 +28576,7 @@ lucide/dist/esm/icons/circle-off.mjs:
28239
28576
  lucide/dist/esm/icons/copy.mjs:
28240
28577
  lucide/dist/esm/icons/download.mjs:
28241
28578
  lucide/dist/esm/icons/external-link.mjs:
28579
+ lucide/dist/esm/icons/ellipsis.mjs:
28242
28580
  lucide/dist/esm/icons/folder-input.mjs:
28243
28581
  lucide/dist/esm/icons/grip-vertical.mjs:
28244
28582
  lucide/dist/esm/icons/info.mjs: