@codexhost/cli-linux-arm64 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -16,7 +16,9 @@
16
16
  "grok",
17
17
  "omp",
18
18
  "antigravity",
19
- "kiro-cli"
19
+ "kiro-cli",
20
+ "codebuddy",
21
+ "cursor-cli"
20
22
  ];
21
23
  var DEFAULT_RENDERER_AGENTS = KNOWN_RENDERER_AGENTS;
22
24
  function defaultIdFactory(sequence) {
@@ -126,13 +128,25 @@
126
128
  if (agent === "codex" && codexAccountId) state.codexAccountId = codexAccountId;
127
129
  else delete state.codexAccountId;
128
130
  if (agent === "pi" && model) state.piModel = model;
131
+ else if (agent === "pi") delete state.piModel;
129
132
  if (agent === "claude-code" && model) state.claudeModel = model;
133
+ else if (agent === "claude-code") delete state.claudeModel;
130
134
  if (agent === "deepseek-harness" && model) state.deepSeekHarnessModel = model;
135
+ else if (agent === "deepseek-harness") delete state.deepSeekHarnessModel;
131
136
  if (agent === "opencode" && model) state.openCodeModel = model;
137
+ else if (agent === "opencode") delete state.openCodeModel;
132
138
  if (agent === "grok" && model) state.grokModel = model;
139
+ else if (agent === "grok") delete state.grokModel;
133
140
  if (agent === "omp" && model) state.ompModel = model;
141
+ else if (agent === "omp") delete state.ompModel;
134
142
  if (agent === "antigravity" && model) state.antigravityModel = model;
143
+ else if (agent === "antigravity") delete state.antigravityModel;
135
144
  if (agent === "kiro-cli" && model) state.kiroCliModel = model;
145
+ else if (agent === "kiro-cli") delete state.kiroCliModel;
146
+ if (agent === "codebuddy" && model) state.codeBuddyModel = model;
147
+ else if (agent === "codebuddy") delete state.codeBuddyModel;
148
+ if (agent === "cursor-cli" && model) state.cursorCliModel = model;
149
+ else if (agent === "cursor-cli") delete state.cursorCliModel;
136
150
  if (agent === "pi" && thinkingOptionId) state.piThinkingOptionId = thinkingOptionId;
137
151
  else if (agent === "pi") delete state.piThinkingOptionId;
138
152
  if (agent === "claude-code" && thinkingOptionId) {
@@ -151,6 +165,9 @@
151
165
  if (agent === "kiro-cli" && thinkingOptionId) {
152
166
  state.kiroCliThinkingOptionId = thinkingOptionId;
153
167
  } else if (agent === "kiro-cli") delete state.kiroCliThinkingOptionId;
168
+ if (agent === "codebuddy" && thinkingOptionId) {
169
+ state.codeBuddyThinkingOptionId = thinkingOptionId;
170
+ } else if (agent === "codebuddy") delete state.codeBuddyThinkingOptionId;
154
171
  if (agent !== "codex") {
155
172
  const permissionModeByAgent = {};
156
173
  for (const candidate of [
@@ -161,7 +178,9 @@
161
178
  "grok",
162
179
  "omp",
163
180
  "antigravity",
164
- "kiro-cli"
181
+ "kiro-cli",
182
+ "codebuddy",
183
+ "cursor-cli"
165
184
  ]) {
166
185
  const current = state.permissionModeByAgent?.[candidate];
167
186
  if (candidate !== agent && current) permissionModeByAgent[candidate] = current;
@@ -185,6 +204,8 @@
185
204
  if (agent === "omp") return state.ompModel;
186
205
  if (agent === "antigravity") return state.antigravityModel;
187
206
  if (agent === "kiro-cli") return state.kiroCliModel;
207
+ if (agent === "codebuddy") return state.codeBuddyModel;
208
+ if (agent === "cursor-cli") return state.cursorCliModel;
188
209
  return void 0;
189
210
  }
190
211
  thinkingOptionForAgent(composer, agent) {
@@ -196,6 +217,7 @@
196
217
  if (agent === "omp") return state.ompThinkingOptionId;
197
218
  if (agent === "antigravity") return state.antigravityThinkingOptionId;
198
219
  if (agent === "kiro-cli") return state.kiroCliThinkingOptionId;
220
+ if (agent === "codebuddy") return state.codeBuddyThinkingOptionId;
199
221
  return void 0;
200
222
  }
201
223
  permissionModeForAgent(composer, agent) {
@@ -219,6 +241,8 @@
219
241
  else if (agent === "omp") state.ompModel = model;
220
242
  else if (agent === "antigravity") state.antigravityModel = model;
221
243
  else if (agent === "kiro-cli") state.kiroCliModel = model;
244
+ else if (agent === "codebuddy") state.codeBuddyModel = model;
245
+ else if (agent === "cursor-cli") state.cursorCliModel = model;
222
246
  return state;
223
247
  }
224
248
  setPiConfiguration(composer, model, thinkingOptionId) {
@@ -259,6 +283,10 @@
259
283
  state.kiroCliThinkingOptionId = thinkingOptionId;
260
284
  } else if (agent === "kiro-cli") {
261
285
  delete state.kiroCliThinkingOptionId;
286
+ } else if (agent === "codebuddy" && thinkingOptionId) {
287
+ state.codeBuddyThinkingOptionId = thinkingOptionId;
288
+ } else if (agent === "codebuddy") {
289
+ delete state.codeBuddyThinkingOptionId;
262
290
  }
263
291
  return state;
264
292
  }
@@ -15484,6 +15512,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15484
15512
  accountCredits: accountCreditsSnapshotSchema.optional()
15485
15513
  }).strict();
15486
15514
 
15515
+ // ../shared-contracts/dist/reasoning-transcript.js
15516
+ var REASONING_TRANSCRIPT_COMMAND = "thinking";
15517
+
15487
15518
  // ../shared-contracts/dist/harness-session-import.js
15488
15519
  var HARNESS_SESSION_IMPORT_ID_MAX_LENGTH = 1024;
15489
15520
  var HARNESS_SESSION_IMPORT_CWD_MAX_LENGTH = 16384;
@@ -15838,6 +15869,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15838
15869
  // src/assets/kiro-agent.svg
15839
15870
  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';
15840
15871
 
15872
+ // src/assets/codebuddy-agent.svg
15873
+ var codebuddy_agent_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none"><g clip-path="url(%23clip0_4958_10776)"><rect x="-0.00146484" width="40" height="40" rx="8.63158" fill="%236C4DFF"></rect><path d="M30.5918 3.12856C30.984 2.77679 31.0078 2.7632 31.2955 2.74593C31.7615 2.71193 32.1882 2.93586 32.9147 3.59728C34.6119 5.13959 36.9755 8.30995 38.4449 11.0177L39.0125 12.0691L39.8143 12.4677C40.5885 12.8589 41.8587 13.6611 42.389 14.0913C42.6286 14.2894 42.6626 14.2934 42.912 14.1964C44.0375 13.7583 45.6494 14.3393 47.0714 15.7033C48.3516 16.9303 49.5781 19.0269 50.0478 20.7767C50.1164 21.0582 50.2074 21.6636 50.2405 22.1144C50.3477 23.6973 49.84 24.9617 48.8624 25.5341C48.6628 25.6493 48.6492 25.6807 48.6548 26.1783C48.6998 28.5492 48.0606 30.9165 46.7768 33.2244C45.3276 35.8156 42.7467 38.496 39.2544 41.0214C37.3789 42.3862 32.9421 44.9717 30.9361 45.8792C26.1304 48.0428 22.278 48.8718 18.9316 48.4618C16.9356 48.22 14.6761 47.4417 13.3392 46.5373C12.9873 46.294 12.9318 46.2791 12.6629 46.3561C11.2318 46.7671 9.35752 45.9219 7.76528 44.1544C7.13027 43.448 6.10508 41.7136 5.77273 40.7853C5.00409 38.6128 5.15721 36.6516 6.18105 35.4808C6.44522 35.1797 6.4538 35.1667 6.39603 34.6598C6.30065 33.8298 6.25703 32.6017 6.30061 31.809L6.33535 31.0683L5.22371 29.1019C3.50212 26.0386 2.40857 23.4663 1.98661 21.501C1.76389 20.4233 1.77734 19.9446 2.05091 19.5908C2.21741 19.3773 2.76347 19.1568 3.42155 19.0352C5.07869 18.7442 8.69327 19.0065 12.7142 19.7165L13.1316 19.789L14.0497 18.977C15.5733 17.6274 16.5858 16.8705 18.4518 15.707C20.3967 14.4901 22.5922 13.4895 25.064 12.6968L25.8564 12.4423L26.2926 11.2974C27.8535 7.17701 29.452 4.13917 30.5918 3.12856ZM17.5169 24.2439C15.7528 25.2625 14.8705 25.7716 14.2223 26.3423C11.5975 28.6536 10.6172 32.3151 11.7346 35.6292C12.0106 36.4475 12.5193 37.3301 13.5378 39.0941C14.5563 40.8582 15.0662 41.7401 15.637 42.3882C17.9483 45.0128 21.6091 45.9938 24.923 44.8764C25.7414 44.6004 26.6233 44.0909 28.3875 43.0724L38.5362 37.213C40.3004 36.1945 41.1826 35.6854 41.8308 35.1147C44.4555 32.8034 45.4363 29.1426 44.319 25.8286C44.043 25.0103 43.5343 24.1277 42.5158 22.3637C41.4974 20.5997 40.9873 19.7177 40.4166 19.0696C38.1053 16.4448 34.4441 15.4631 31.1301 16.5806C30.3118 16.8565 29.4297 17.3661 27.6656 18.3846L17.5169 24.2439Z" fill="white"></path><rect x="18.4944" y="31.334" width="4.00904" height="8.32646" rx="2.00452" transform="rotate(-30 18.4944 31.334)" fill="white"></rect><rect x="29.311" y="25.0898" width="4.00904" height="8.32646" rx="2.00452" transform="rotate(-30 29.311 25.0898)" fill="white"></rect></g><defs><clipPath id="clip0_4958_10776"><rect x="-0.00146484" width="40" height="40" rx="8.63158" fill="white"></rect></clipPath></defs></svg>';
15874
+
15875
+ // src/assets/cursor-agent.svg
15876
+ var cursor_agent_default = 'data:image/svg+xml,<svg fill="none" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m512 325.5c0 7.124 0 14.24-.041 21.364-.034 5.999-.103 11.998-.268 17.99-.356 13.068-1.124 26.245-3.448 39.169-2.359 13.109-6.205 25.306-12.266 37.222-5.958 11.703-13.746 22.419-23.029 31.709-9.29 9.29-20 17.072-31.71 23.03-11.909 6.061-24.113 9.907-37.222 12.266-12.923 2.324-26.101 3.092-39.169 3.448-5.999.165-11.991.233-17.99.268-7.123.048-14.24.041-21.364.041h-139c-7.124 0-14.24 0-21.364-.041-5.999-.035-11.998-.103-17.99-.268-13.068-.356-26.245-1.124-39.169-3.448-13.109-2.359-25.306-6.205-37.2219-12.266-11.7033-5.958-22.4194-13.746-31.7095-23.03-9.29-9.29-17.0717-19.999-23.0296-31.709-6.0608-11.909-9.90707-24.113-12.26557-37.222-2.32422-12.924-3.0921-26.101-3.448618-39.169-.164546-5.999-.2331071-11.991-.2673876-17.99-.0274244-7.124-.0274244-14.24-.0274244-21.364v-139c0-7.124 0-14.24.0411366-21.364.0342805-5.999.1028414-11.998.2673884-17.99.356517-13.068 1.124405-26.245 3.448615-39.169 2.3585-13.1091 6.20478-25.3061 12.26556-37.222 5.958-11.7034 13.7465-22.4195 23.0297-31.7095 9.29-9.29 19.9992-17.0717 31.7094-23.0296 11.9091-6.06084 24.1129-9.90711 37.2222-12.26561 12.923-2.32422 26.101-3.092104 39.169-3.448622 5.999-.164546 11.991-.233107 17.99-.2673875 7.117-.0342805 14.233-.0342805 21.357-.0342805h139c7.124 0 14.24 0 21.364.0411366 5.999.0342805 11.998.1028414 17.99.2673884 13.068.356517 26.245 1.124405 39.169 3.448615 13.109 2.3585 25.306 6.20478 37.222 12.26556 11.703 5.958 22.419 13.7465 31.709 23.0297 9.29 9.29 17.072 19.9992 23.03 31.7094 6.061 11.9091 9.907 24.1129 12.266 37.2222 2.324 12.923 3.092 26.101 3.448 39.169.165 5.999.233 11.991.268 17.99.048 7.123.041 14.24.041 21.364v139z" fill="%2314120b"/><path d="m186.5 4h139c7.125 0 14.231-.00004 21.341.04102 5.985.0342 11.952.10221 17.903.26562h.001c13.003.35475 25.943 1.11709 38.569 3.3877 12.775 2.29827 24.592 6.03146 36.118 11.89356v-.001c10.974 5.5867 21.052 12.8384 29.848 21.457l.847.8379c8.993 8.993 16.525 19.3594 22.292 30.6934v.001c5.678 11.1575 9.36 22.6023 11.674 34.9208l.219 1.195c2.129 11.837 2.932 23.95 3.316 36.132l.072 2.438c.164 5.958.232 11.919.266 17.904v.004c.048 7.107.041 14.207.041 21.337v129.344l-.007-.007v9.656c0 7.125 0 14.231-.041 21.341-.034 5.985-.102 11.952-.266 17.903v.001c-.354 13.003-1.117 25.943-3.387 38.569-2.227 12.376-5.8 23.853-11.351 35.037l-.543 1.08c-5.766 11.327-13.306 21.701-22.293 30.695-8.993 8.993-19.361 16.526-30.695 22.293-11.518 5.861-23.342 9.595-36.116 11.893-11.837 2.129-23.95 2.932-36.132 3.316l-2.438.072c-5.958.164-11.919.232-17.904.266h-.004c-7.107.048-14.207.041-21.337.041h-139c-7.125 0-14.231 0-21.341-.041-5.985-.034-11.952-.102-17.903-.266h-.001c-13.003-.355-25.944-1.117-38.57-3.388-12.7742-2.298-24.5914-6.031-36.1165-11.893h.001c-10.974-5.587-21.0534-12.837-29.8496-21.456l-.8467-.838c-8.7118-8.712-16.0531-18.713-21.7461-29.634l-.5459-1.06-.5439-1.081c-5.371-10.816-8.8905-21.919-11.12991-33.84l-.21973-1.196c-2.27061-12.626-3.03294-25.566-3.38769-38.569v-.001c-.16341-5.958-.23142-11.918-.26563-17.903-.02736-7.112-.02734-14.219-.02734-21.341v-139c0-7.125-.00004-14.231.04102-21.341.0342-5.985.10221-11.952.26562-17.903v-.001c.35476-13.003 1.117-25.944 3.3877-38.57 2.29828-12.7744 6.03156-24.5916 11.89356-36.1166l-.001-.001c5.7666-11.327 13.3073-21.6999 22.294-30.6934 8.9933-8.9933 19.3607-16.5261 30.6953-22.2929 11.5173-5.8615 23.3406-9.59619 36.1148-11.89458 11.837-2.12877 23.951-2.93016 36.133-3.31445l2.438-.07227c5.958-.16342 11.919-.23142 17.904-.26562l-.001-.00098c7.104-.03421 14.211-.0332 21.335-.0332z" stroke="%23edecec" stroke-opacity=".2" stroke-width="8"/><path d="m415.035 156.35-151.503-87.4695c-4.865-2.8094-10.868-2.8094-15.733 0l-151.4969 87.4695c-4.0897 2.362-6.6146 6.729-6.6146 11.459v176.383c0 4.73 2.5249 9.097 6.6146 11.458l151.5039 87.47c4.865 2.809 10.868 2.809 15.733 0l151.504-87.47c4.089-2.361 6.614-6.728 6.614-11.458v-176.383c0-4.73-2.525-9.097-6.614-11.459zm-9.516 18.528-146.255 253.32c-.988 1.707-3.599 1.01-3.599-.967v-165.872c0-3.314-1.771-6.379-4.644-8.044l-143.645-82.932c-1.707-.988-1.01-3.599.968-3.599h292.509c4.154 0 6.75 4.503 4.673 8.101h-.007z" fill="%23edecec"/></svg>';
15877
+
15841
15878
  // src/assets/omp-agent.svg
15842
15879
  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';
15843
15880
 
@@ -15854,7 +15891,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15854
15891
  grok: "Grok",
15855
15892
  omp: "Oh My Pi",
15856
15893
  antigravity: "Antigravity CLI",
15857
- "kiro-cli": "Kiro CLI"
15894
+ "kiro-cli": "Kiro CLI",
15895
+ codebuddy: "CodeBuddy",
15896
+ "cursor-cli": "Cursor CLI (Experimental)"
15858
15897
  };
15859
15898
  var PI_PATHS = [
15860
15899
  {
@@ -15930,9 +15969,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15930
15969
  image.style.flex = "none";
15931
15970
  return image;
15932
15971
  }
15933
- if (agent === "antigravity" || agent === "kiro-cli") {
15972
+ if (agent === "antigravity" || agent === "kiro-cli" || agent === "codebuddy" || agent === "cursor-cli") {
15934
15973
  const image = ownerDocument.createElement("img");
15935
- image.src = agent === "kiro-cli" ? kiro_agent_default : antigravity_agent_default;
15974
+ image.src = agent === "codebuddy" ? codebuddy_agent_default : agent === "cursor-cli" ? cursor_agent_default : agent === "kiro-cli" ? kiro_agent_default : antigravity_agent_default;
15936
15975
  image.alt = "";
15937
15976
  image.draggable = false;
15938
15977
  image.style.width = `${size}px`;
@@ -16291,6 +16330,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16291
16330
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }]
16292
16331
  ];
16293
16332
 
16333
+ // ../../node_modules/lucide/dist/esm/icons/ellipsis.mjs
16334
+ var Ellipsis = [
16335
+ ["circle", { cx: "12", cy: "12", r: "1" }],
16336
+ ["circle", { cx: "19", cy: "12", r: "1" }],
16337
+ ["circle", { cx: "5", cy: "12", r: "1" }]
16338
+ ];
16339
+
16294
16340
  // ../../node_modules/lucide/dist/esm/icons/folder-input.mjs
16295
16341
  var FolderInput = [
16296
16342
  [
@@ -16504,7 +16550,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16504
16550
  "trash",
16505
16551
  "terminal",
16506
16552
  "search",
16507
- "help"
16553
+ "help",
16554
+ "ellipsis"
16508
16555
  ];
16509
16556
  var iconNodes = {
16510
16557
  settings: Settings,
@@ -16539,7 +16586,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16539
16586
  trash: Trash2,
16540
16587
  terminal: Terminal,
16541
16588
  search: Search,
16542
- help: CircleQuestionMark
16589
+ help: CircleQuestionMark,
16590
+ ellipsis: Ellipsis
16543
16591
  };
16544
16592
  function isRendererSettingsIconName(value) {
16545
16593
  return RENDERER_SETTINGS_ICON_NAMES.includes(value);
@@ -16579,7 +16627,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16579
16627
  grok: "https://grok.com/",
16580
16628
  omp: "https://github.com/can1357/oh-my-pi",
16581
16629
  antigravity: "https://antigravity.google/product/antigravity-cli",
16582
- "kiro-cli": "https://kiro.dev/docs/cli/"
16630
+ "kiro-cli": "https://kiro.dev/docs/cli/",
16631
+ codebuddy: "https://www.codebuddy.ai/docs/zh/cli/overview",
16632
+ "cursor-cli": "https://cursor.com/docs/cli/installation"
16583
16633
  });
16584
16634
  function connectionStatusLabel(availability, messages, hasError = false) {
16585
16635
  if (hasError && availability !== "notInstalled") return messages.connectionStatusError;
@@ -17357,6 +17407,9 @@ ${error51.stderrTail}`] : []
17357
17407
  sectionsLabel: "Settings sections",
17358
17408
  generalSection: "General",
17359
17409
  otherSection: "Other",
17410
+ appearanceDescription: "Adjust how thinking text is displayed in the conversation.",
17411
+ reasoningSoftWrapTitle: "Wrap thinking text",
17412
+ reasoningSoftWrapDescription: "Wrap long thinking lines in the transcript. Ordinary shell output is unaffected. Off by default.",
17360
17413
  pageUnavailable: "Page unavailable",
17361
17414
  inDevelopment: "In development",
17362
17415
  notAvailable: "Not available",
@@ -17393,26 +17446,26 @@ ${error51.stderrTail}`] : []
17393
17446
  sessionImportRetryOpen: "Try opening again",
17394
17447
  sessionImportRetrying: "Opening...",
17395
17448
  connectionsDescription: "View runtime status by Host. Select an item to inspect details or complete its setup.",
17396
- accountsDescription: "Choose the default account for new Codex tasks and check account limits.",
17397
- accountTaskHint: "Existing tasks keep the account they were created with. Multi-account is currently available for Codex.",
17398
- accountConnected: "Connected accounts",
17399
- accountDefaultBadge: "Default",
17400
- accountAdd: "Add Account",
17449
+ accountsDescription: "View accounts and limits across Agents, and manage your Codex default account.",
17450
+ accountConnected: "Accounts",
17451
+ accountDefaultBadge: "Codex default",
17452
+ accountAdd: "Add Codex account",
17401
17453
  accountColumnAccount: "Account",
17402
- accountColumnUsage: "Limits",
17403
- accountColumnActions: "Actions",
17404
- accountSearch: "Search accounts\u2026",
17405
- accountEmpty: "No accounts yet. Add an account to get started.",
17454
+ accountColumnActions: "Manage",
17455
+ accountSearch: "Search accounts or Agents\u2026",
17456
+ accountEmpty: "No accounts yet. Add a Codex account or sign in to an Agent in its native client.",
17406
17457
  accountNoMatches: "No matching accounts.",
17407
- accountLoginHelp: "Before signing in",
17408
- harnessAccountsTitle: "Other detected accounts",
17458
+ accountNativeManaged: "Native management",
17459
+ 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.",
17460
+ accountMore: "Codex account actions",
17461
+ accountDetailsClose: "Close account details",
17462
+ accountDefaultHint: "Use as the default for new Codex tasks only",
17409
17463
  accountCreditsRemaining: "Remaining",
17410
17464
  accountCreditsLoading: "Loading limits\u2026",
17411
17465
  accountCreditsEmpty: "No limit data available",
17412
17466
  accountCreditsFailed: "Could not load limits",
17413
17467
  accountCreditsRetry: "Retry",
17414
17468
  accountCreditsRefresh: "Refresh limits",
17415
- accountResetCreditsUnknown: "No reset card data available",
17416
17469
  accountCreateFailed: "Could not add the Account.",
17417
17470
  accountDelete: "Delete",
17418
17471
  accountDeleteConfirm: "Delete this Account and its local data? This cannot be undone.",
@@ -17422,7 +17475,6 @@ ${error51.stderrTail}`] : []
17422
17475
  accountUse: "Set as default",
17423
17476
  accountSignIn: "Sign in",
17424
17477
  accountSigningIn: "Starting device sign-in...",
17425
- accountDeviceCodePrerequisite: "Before signing in, enable \u201CEnable device code authorization for Codex\u201D in Web Settings \u2192 Account security & sign-in.",
17426
17478
  accountVerificationDescription: "Open the verification page and enter this one-time code:",
17427
17479
  accountCopyCode: "Copy code",
17428
17480
  accountCopied: "Copied",
@@ -17431,7 +17483,10 @@ ${error51.stderrTail}`] : []
17431
17483
  accountLoginFailed: "Sign-in failed.",
17432
17484
  accountLoadFailed: "Could not load Codex Accounts.",
17433
17485
  accountCreditsUsed: "Used",
17434
- accountCreditsReset: "reset",
17486
+ accountCreditsResetAt: "Quota resets: {time}",
17487
+ accountCreditsResetIn: "Quota resets in {time}",
17488
+ accountCreditsResetPending: "Awaiting refresh",
17489
+ accountCreditsResetPendingHint: "The reset time has passed; refresh to check the actual quota.",
17435
17490
  accountCreditsPeriodWeekly: "Weekly limit",
17436
17491
  accountCreditsPeriodMonthly: "Monthly limit",
17437
17492
  accountCreditsPeriodFiveHour: "5-hour",
@@ -17547,6 +17602,7 @@ ${error51.stderrTail}`] : []
17547
17602
  aboutRepository: "Open-source repository",
17548
17603
  pageLabels: Object.freeze({
17549
17604
  connections: "Connections",
17605
+ appearance: "Appearance",
17550
17606
  accounts: "Accounts",
17551
17607
  "session-import": "Session Import",
17552
17608
  updates: "Updates",
@@ -17561,6 +17617,9 @@ ${error51.stderrTail}`] : []
17561
17617
  sectionsLabel: "\u8BBE\u7F6E\u5206\u7C7B",
17562
17618
  generalSection: "\u901A\u7528",
17563
17619
  otherSection: "\u5176\u4ED6",
17620
+ appearanceDescription: "\u8C03\u6574\u4F1A\u8BDD\u4E2D\u601D\u8003\u6587\u672C\u7684\u663E\u793A\u65B9\u5F0F\u3002",
17621
+ reasoningSoftWrapTitle: "\u6362\u884C\u663E\u793A\u601D\u8003\u6587\u672C",
17622
+ 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",
17564
17623
  pageUnavailable: "\u9875\u9762\u4E0D\u53EF\u7528",
17565
17624
  inDevelopment: "\u5F00\u53D1\u4E2D",
17566
17625
  notAvailable: "\u6682\u4E0D\u53EF\u7528",
@@ -17597,26 +17656,26 @@ ${error51.stderrTail}`] : []
17597
17656
  sessionImportRetryOpen: "\u91CD\u8BD5\u6253\u5F00",
17598
17657
  sessionImportRetrying: "\u6B63\u5728\u6253\u5F00\u2026\u2026",
17599
17658
  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",
17600
- accountsDescription: "\u9009\u62E9\u65B0\u5EFA Codex \u4EFB\u52A1\u7684\u9ED8\u8BA4\u8D26\u53F7\uFF0C\u5E76\u67E5\u770B\u5404\u8D26\u53F7\u989D\u5EA6\u3002",
17601
- 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",
17602
- accountConnected: "\u5DF2\u8FDE\u63A5\u8D26\u53F7",
17603
- accountDefaultBadge: "\u9ED8\u8BA4",
17604
- accountAdd: "\u6DFB\u52A0\u8D26\u53F7",
17659
+ accountsDescription: "\u67E5\u770B\u5404 Agent \u7684\u8D26\u53F7\u4E0E\u989D\u5EA6\uFF0C\u7BA1\u7406 Codex \u9ED8\u8BA4\u8D26\u53F7\u3002",
17660
+ accountConnected: "\u8D26\u53F7",
17661
+ accountDefaultBadge: "Codex \u9ED8\u8BA4",
17662
+ accountAdd: "\u6DFB\u52A0 Codex \u8D26\u53F7",
17605
17663
  accountColumnAccount: "\u8D26\u53F7",
17606
- accountColumnUsage: "\u989D\u5EA6",
17607
- accountColumnActions: "\u64CD\u4F5C",
17608
- accountSearch: "\u641C\u7D22\u8D26\u53F7\u2026",
17609
- accountEmpty: "\u8FD8\u6CA1\u6709\u8D26\u53F7\uFF0C\u6DFB\u52A0\u4E00\u4E2A\u8D26\u53F7\u5373\u53EF\u5F00\u59CB\u3002",
17664
+ accountColumnActions: "\u7BA1\u7406",
17665
+ accountSearch: "\u641C\u7D22\u8D26\u53F7\u6216 Agent\u2026",
17666
+ 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",
17610
17667
  accountNoMatches: "\u6CA1\u6709\u5339\u914D\u7684\u8D26\u53F7\u3002",
17611
- accountLoginHelp: "\u767B\u5F55\u524D\u987B\u77E5",
17612
- harnessAccountsTitle: "\u5176\u4ED6\u5DF2\u8BC6\u522B\u8D26\u53F7",
17668
+ accountNativeManaged: "\u539F\u751F\u7BA1\u7406",
17669
+ 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",
17670
+ accountMore: "Codex \u8D26\u53F7\u64CD\u4F5C",
17671
+ accountDetailsClose: "\u5173\u95ED\u8D26\u53F7\u8BE6\u60C5",
17672
+ accountDefaultHint: "\u4EC5\u8BBE\u4E3A\u65B0 Codex \u4EFB\u52A1\u7684\u9ED8\u8BA4\u8D26\u53F7",
17613
17673
  accountCreditsRemaining: "\u5269\u4F59",
17614
17674
  accountCreditsLoading: "\u6B63\u5728\u8BFB\u53D6\u989D\u5EA6\u2026",
17615
17675
  accountCreditsEmpty: "\u6682\u65E0\u989D\u5EA6\u6570\u636E",
17616
17676
  accountCreditsFailed: "\u989D\u5EA6\u8BFB\u53D6\u5931\u8D25",
17617
17677
  accountCreditsRetry: "\u91CD\u8BD5",
17618
17678
  accountCreditsRefresh: "\u5237\u65B0\u989D\u5EA6",
17619
- accountResetCreditsUnknown: "\u6682\u65E0\u91CD\u7F6E\u5361\u6570\u636E",
17620
17679
  accountCreateFailed: "\u6DFB\u52A0\u8D26\u53F7\u5931\u8D25\u3002",
17621
17680
  accountDelete: "\u5220\u9664",
17622
17681
  accountDeleteConfirm: "\u5220\u9664\u6B64\u8D26\u53F7\u53CA\u5176\u672C\u5730\u6570\u636E\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002",
@@ -17626,7 +17685,6 @@ ${error51.stderrTail}`] : []
17626
17685
  accountUse: "\u8BBE\u4E3A\u9ED8\u8BA4",
17627
17686
  accountSignIn: "\u767B\u5F55",
17628
17687
  accountSigningIn: "\u6B63\u5728\u542F\u52A8\u8BBE\u5907\u767B\u5F55...",
17629
- 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",
17630
17688
  accountVerificationDescription: "\u6253\u5F00\u9A8C\u8BC1\u9875\u9762\u5E76\u8F93\u5165\u4EE5\u4E0B\u4E00\u6B21\u6027\u4EE3\u7801\uFF1A",
17631
17689
  accountCopyCode: "\u590D\u5236\u4EE3\u7801",
17632
17690
  accountCopied: "\u5DF2\u590D\u5236",
@@ -17635,7 +17693,10 @@ ${error51.stderrTail}`] : []
17635
17693
  accountLoginFailed: "\u767B\u5F55\u5931\u8D25\u3002",
17636
17694
  accountLoadFailed: "\u65E0\u6CD5\u52A0\u8F7D Codex \u8D26\u53F7\u3002",
17637
17695
  accountCreditsUsed: "\u5DF2\u7528",
17638
- accountCreditsReset: "\u91CD\u7F6E",
17696
+ accountCreditsResetAt: "\u989D\u5EA6\u91CD\u7F6E\u65F6\u95F4\uFF1A{time}",
17697
+ accountCreditsResetIn: "\u8DDD\u91CD\u7F6E\u8FD8\u6709 {time}",
17698
+ accountCreditsResetPending: "\u5F85\u5237\u65B0",
17699
+ accountCreditsResetPendingHint: "\u91CD\u7F6E\u65F6\u95F4\u5DF2\u5230\uFF0C\u8BF7\u5237\u65B0\u4EE5\u786E\u8BA4\u5B9E\u9645\u989D\u5EA6\u3002",
17639
17700
  accountCreditsPeriodWeekly: "\u5468\u989D\u5EA6",
17640
17701
  accountCreditsPeriodMonthly: "\u6708\u989D\u5EA6",
17641
17702
  accountCreditsPeriodFiveHour: "5 \u5C0F\u65F6",
@@ -17751,6 +17812,7 @@ ${error51.stderrTail}`] : []
17751
17812
  aboutRepository: "\u5F00\u6E90\u4ED3\u5E93",
17752
17813
  pageLabels: Object.freeze({
17753
17814
  connections: "\u8FDE\u63A5",
17815
+ appearance: "\u5916\u89C2",
17754
17816
  accounts: "\u8D26\u53F7",
17755
17817
  "session-import": "\u4F1A\u8BDD\u5BFC\u5165",
17756
17818
  updates: "\u66F4\u65B0",
@@ -17803,7 +17865,9 @@ ${error51.stderrTail}`] : []
17803
17865
  grok: "https://grok.com/",
17804
17866
  omp: "https://github.com/can1357/oh-my-pi",
17805
17867
  antigravity: "https://antigravity.google/product/antigravity-cli",
17806
- "kiro-cli": "https://kiro.dev/docs/cli/"
17868
+ "kiro-cli": "https://kiro.dev/docs/cli/",
17869
+ codebuddy: "https://www.codebuddy.ai/docs/zh/cli/overview",
17870
+ "cursor-cli": "https://cursor.com/docs/cli/installation"
17807
17871
  };
17808
17872
  var CONTROL_ATTRIBUTE = "data-codexhost-agent-control";
17809
17873
  var AGENT_MENU_WIDTH = 224;
@@ -19090,7 +19154,14 @@ ${error51.stderrTail}`] : []
19090
19154
  ["Workspace write", "\u5DE5\u4F5C\u533A\u5199\u5165"],
19091
19155
  ["Full access (dangerous)", "\u5B8C\u5168\u8BBF\u95EE\uFF08\u5371\u9669\uFF09"],
19092
19156
  ["Configured permissions", "\u4F7F\u7528\u5DF2\u914D\u7F6E\u6743\u9650"],
19093
- ["Skip permissions", "\u8DF3\u8FC7\u6743\u9650\u68C0\u67E5"]
19157
+ ["Skip permissions", "\u8DF3\u8FC7\u6743\u9650\u68C0\u67E5"],
19158
+ ["Always Ask", "\u59CB\u7EC8\u8BE2\u95EE"],
19159
+ ["Accept Edits", "\u63A5\u53D7\u7F16\u8F91"],
19160
+ ["Plan", "\u89C4\u5212\u6A21\u5F0F"],
19161
+ ["Don't Ask", "\u4E0D\u8BE2\u95EE"],
19162
+ ["Bypass Permissions", "\u7ED5\u8FC7\u6743\u9650"],
19163
+ ["Full Access", "\u5B8C\u5168\u8BBF\u95EE"],
19164
+ ["Delegate", "\u7531\u7236\u4F1A\u8BDD\u7BA1\u7406"]
19094
19165
  ]);
19095
19166
  var CHINESE_PERMISSION_MODE_DESCRIPTIONS = /* @__PURE__ */ new Map([
19096
19167
  [
@@ -19127,7 +19198,36 @@ ${error51.stderrTail}`] : []
19127
19198
  "Use Antigravity CLI permission rules; headless prompts are denied safely.",
19128
19199
  "\u4F7F\u7528 Antigravity CLI \u6743\u9650\u89C4\u5219\uFF1B\u65E0\u754C\u9762\u8FD0\u884C\u65F6\u5B89\u5168\u62D2\u7EDD\u9700\u8981\u4EA4\u4E92\u786E\u8BA4\u7684\u8BF7\u6C42\u3002"
19129
19200
  ],
19130
- ["Auto-approve every Antigravity CLI tool action.", "\u81EA\u52A8\u6279\u51C6\u6240\u6709 Antigravity CLI \u5DE5\u5177\u64CD\u4F5C\u3002"]
19201
+ ["Auto-approve every Antigravity CLI tool action.", "\u81EA\u52A8\u6279\u51C6\u6240\u6709 Antigravity CLI \u5DE5\u5177\u64CD\u4F5C\u3002"],
19202
+ ["Prompts for permission on first use of each tool", "\u9996\u6B21\u4F7F\u7528\u6BCF\u79CD\u5DE5\u5177\u65F6\u8BF7\u6C42\u6743\u9650\u3002"],
19203
+ [
19204
+ "Automatically accepts file edit permissions for the session",
19205
+ "\u81EA\u52A8\u63A5\u53D7\u672C\u4F1A\u8BDD\u4E2D\u7684\u6587\u4EF6\u7F16\u8F91\u6743\u9650\u3002"
19206
+ ],
19207
+ [
19208
+ "Agent can analyze but not modify files or execute commands",
19209
+ "Agent \u53EF\u4EE5\u5206\u6790\uFF0C\u4F46\u4E0D\u80FD\u4FEE\u6539\u6587\u4EF6\u6216\u6267\u884C\u547D\u4EE4\u3002"
19210
+ ],
19211
+ [
19212
+ "An AI classifier reviews actions that would normally prompt: safe ones are auto-approved, risky ones are denied. If the classifier is unavailable, the action falls back to a prompt (or is denied when prompts cannot be shown)",
19213
+ "\u7531 AI \u5206\u7C7B\u5668\u8BC4\u4F30\u539F\u672C\u9700\u8981\u8BE2\u95EE\u7684\u64CD\u4F5C\uFF1A\u5B89\u5168\u64CD\u4F5C\u81EA\u52A8\u6279\u51C6\uFF0C\u98CE\u9669\u64CD\u4F5C\u62D2\u7EDD\u3002\u5206\u7C7B\u5668\u4E0D\u53EF\u7528\u65F6\u6539\u4E3A\u8BE2\u95EE\uFF1B\u65E0\u6CD5\u663E\u793A\u8BE2\u95EE\u65F6\u62D2\u7EDD\u3002"
19214
+ ],
19215
+ [
19216
+ "Does not show permission prompts; pre-approved and safe read-only actions run, everything else that would prompt is denied",
19217
+ "\u4E0D\u663E\u793A\u6743\u9650\u8BE2\u95EE\uFF1B\u5DF2\u83B7\u6279\u51C6\u548C\u5B89\u5168\u7684\u53EA\u8BFB\u64CD\u4F5C\u53EF\u4EE5\u6267\u884C\uFF0C\u5176\u4F59\u539F\u672C\u9700\u8981\u8BE2\u95EE\u7684\u64CD\u4F5C\u4F1A\u88AB\u62D2\u7EDD\u3002"
19218
+ ],
19219
+ ["Skips all permission prompts", "\u8DF3\u8FC7\u5E38\u89C4\u6743\u9650\u8BE2\u95EE\u3002"],
19220
+ [
19221
+ "Skips ALL permission checks including dangerous commands for all agents",
19222
+ "\u4E3A\u6240\u6709 Agent \u8DF3\u8FC7\u5168\u90E8\u6743\u9650\u68C0\u67E5\uFF0C\u5305\u62EC\u5371\u9669\u547D\u4EE4\u3002"
19223
+ ],
19224
+ ["Permissions managed by parent session", "\u7531\u7236\u4F1A\u8BDD\u7BA1\u7406\u6743\u9650\u3002"],
19225
+ [
19226
+ "Native agent mode with Cursor tool approvals",
19227
+ "\u6267\u884C\u4EFB\u52A1\uFF0C\u53EF\u4FEE\u6539\u6587\u4EF6\u548C\u8FD0\u884C\u547D\u4EE4\uFF1B\u9700\u8981\u5BA1\u6279\u7684\u64CD\u4F5C\u4ECD\u4F1A\u8BF7\u6C42\u786E\u8BA4\u3002"
19228
+ ],
19229
+ ["Native read-only planning mode", "\u53EA\u8BFB\u5206\u6790\u4EE3\u7801\u5E76\u5236\u5B9A\u5B9E\u65BD\u8BA1\u5212\uFF0C\u4E0D\u4FEE\u6539\u9879\u76EE\u6587\u4EF6\u3002"],
19230
+ ["Native read-only question mode", "\u53EA\u8BFB\u67E5\u770B\u4EE3\u7801\u5E76\u56DE\u7B54\u95EE\u9898\uFF0C\u4E0D\u4FEE\u6539\u9879\u76EE\u6587\u4EF6\u3002"]
19131
19231
  ]);
19132
19232
  function rendererHarnessMessages(locale) {
19133
19233
  return locale === "zh-CN" ? CHINESE_HARNESS_MESSAGES : ENGLISH_HARNESS_MESSAGES;
@@ -19899,7 +19999,7 @@ ${error51.stderrTail}`] : []
19899
19999
  if (periodType === "seven_day") return messages.sevenDay;
19900
20000
  return messages.account;
19901
20001
  }
19902
- function productLabel(product, locale) {
20002
+ function productLabel(product, locale = "en") {
19903
20003
  if (product === "GrokBuild") return "Build";
19904
20004
  if (product === "GrokChat") return "Chat";
19905
20005
  if (product === "GrokImagine") return "Imagine";
@@ -19907,12 +20007,22 @@ ${error51.stderrTail}`] : []
19907
20007
  const messages = rendererCreditsMessages(locale);
19908
20008
  if (product === "5-hour window") return messages.fiveHour;
19909
20009
  if (product === "7-day window") return messages.sevenDay;
20010
+ if (product === "Weekly window") return messages.weekly;
19910
20011
  if (product.endsWith(" \xB7 5-hour window")) {
19911
20012
  return `${product.slice(0, -"5-hour window".length)}${messages.fiveHour}`;
19912
20013
  }
19913
20014
  if (product.endsWith(" \xB7 7-day window")) {
19914
20015
  return `${product.slice(0, -"7-day window".length)}${messages.sevenDay}`;
19915
20016
  }
20017
+ if (product.endsWith(" \xB7 Weekly window")) {
20018
+ return `${product.slice(0, -"Weekly window".length)}${messages.weekly}`;
20019
+ }
20020
+ if (product.endsWith(" \xB7 5-hour")) {
20021
+ return `${product.slice(0, -"5-hour".length)}${messages.fiveHour}`;
20022
+ }
20023
+ if (product.endsWith(" \xB7 7-day")) {
20024
+ return `${product.slice(0, -"7-day".length)}${messages.sevenDay}`;
20025
+ }
19916
20026
  return product;
19917
20027
  }
19918
20028
  function toneColor(tone) {
@@ -19954,7 +20064,7 @@ ${error51.stderrTail}`] : []
19954
20064
  top.style.marginBottom = "5px";
19955
20065
  const left = document.createElement("div");
19956
20066
  const label = document.createElement("div");
19957
- label.textContent = creditsPeriodLabel(credits.periodType, locale);
20067
+ label.textContent = credits.label ? productLabel(credits.label, locale) : creditsPeriodLabel(credits.periodType, locale);
19958
20068
  label.style.fontSize = "12.5px";
19959
20069
  label.style.fontWeight = "600";
19960
20070
  left.append(label);
@@ -20198,7 +20308,8 @@ ${error51.stderrTail}`] : []
20198
20308
  }
20199
20309
  const remaining = remainingPercent(accountCredits.usedPercent);
20200
20310
  const percent = formatRendererCreditsPercent(remaining);
20201
- const title = `${creditsPeriodLabel(accountCredits.periodType)} ${percent}`;
20311
+ const periodLabel = accountCredits.label ? productLabel(accountCredits.label, locale) : creditsPeriodLabel(accountCredits.periodType, locale);
20312
+ const title = `${periodLabel} ${percent}`;
20202
20313
  const tone = rendererCreditsTone(accountCredits.usedPercent);
20203
20314
  const ringSlot = control.trigger.querySelector("[data-codexhost-credits-ring]");
20204
20315
  const label = control.trigger.querySelector("[data-codexhost-credits-label]");
@@ -21035,6 +21146,51 @@ ${error51.stderrTail}`] : []
21035
21146
  control.picker.dispose();
21036
21147
  }
21037
21148
 
21149
+ // src/renderer-transcript-dom.ts
21150
+ var TRANSCRIPT_TEXT_BODY_SELECTOR = '[data-testid="exec-shell-body"]';
21151
+ var REASONING_SOFT_WRAP_STORAGE_KEY = "codexhost.reasoning-soft-wrap.v1";
21152
+ var REASONING_SOFT_WRAP_CHANGE_EVENT = "codexhost:reasoning-soft-wrap-changed";
21153
+ function readReasoningTranscriptSoftWrap(ownerWindow) {
21154
+ return ownerWindow.localStorage.getItem(REASONING_SOFT_WRAP_STORAGE_KEY) === "true";
21155
+ }
21156
+ function setReasoningTranscriptSoftWrap(ownerWindow, enabled) {
21157
+ ownerWindow.localStorage.setItem(REASONING_SOFT_WRAP_STORAGE_KEY, String(enabled));
21158
+ ownerWindow.dispatchEvent(new Event(REASONING_SOFT_WRAP_CHANGE_EVENT));
21159
+ }
21160
+ function installReasoningTranscriptSoftWrap(ownerDocument) {
21161
+ const ownerWindow = ownerDocument.defaultView;
21162
+ if (!ownerWindow) return () => {
21163
+ };
21164
+ const style = ownerDocument.createElement("style");
21165
+ style.setAttribute("data-codexhost-reasoning-soft-wrap", "true");
21166
+ const body = `${TRANSCRIPT_TEXT_BODY_SELECTOR}:has([aria-label="$ ${REASONING_TRANSCRIPT_COMMAND}"])`;
21167
+ style.textContent = `
21168
+ ${body} .whitespace-pre {
21169
+ white-space: pre-wrap;
21170
+ overflow-wrap: anywhere;
21171
+ }
21172
+ ${body} .whitespace-pre > .w-max {
21173
+ width: 100%;
21174
+ min-width: 0;
21175
+ }
21176
+ `;
21177
+ ownerDocument.head.append(style);
21178
+ const refresh = () => {
21179
+ style.disabled = !readReasoningTranscriptSoftWrap(ownerWindow);
21180
+ };
21181
+ const onStorage = (event) => {
21182
+ if (event.key === REASONING_SOFT_WRAP_STORAGE_KEY || event.key === null) refresh();
21183
+ };
21184
+ refresh();
21185
+ ownerWindow.addEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, refresh);
21186
+ ownerWindow.addEventListener("storage", onStorage);
21187
+ return () => {
21188
+ ownerWindow.removeEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, refresh);
21189
+ ownerWindow.removeEventListener("storage", onStorage);
21190
+ style.remove();
21191
+ };
21192
+ }
21193
+
21038
21194
  // src/renderer-codex-account-state.ts
21039
21195
  function resolveCodexAccountSelection(accounts, overrideAccountId) {
21040
21196
  const activeAccountId = accounts.find((account) => account.active)?.accountId ?? null;
@@ -21162,6 +21318,8 @@ ${error51.stderrTail}`] : []
21162
21318
  if (ownership.harnessId === "omp") return "omp";
21163
21319
  if (ownership.harnessId === "antigravity") return "antigravity";
21164
21320
  if (ownership.harnessId === "kiro-cli") return "kiro-cli";
21321
+ if (ownership.harnessId === "codebuddy") return "codebuddy";
21322
+ if (ownership.harnessId === "cursor-cli") return "cursor-cli";
21165
21323
  return null;
21166
21324
  }
21167
21325
  var BrowserSidebarAgentIconRow = class {
@@ -21842,6 +22000,39 @@ ${error51.stderrTail}`] : []
21842
22000
  };
21843
22001
  }
21844
22002
 
22003
+ // src/renderer-external-queue.ts
22004
+ function isRecord5(value) {
22005
+ return value !== null && typeof value === "object" && !Array.isArray(value);
22006
+ }
22007
+ function installRendererExternalQueue(target) {
22008
+ if (!isRecord5(target) || typeof target.getTurnCoordinator !== "function" || typeof target.getConversation !== "function") {
22009
+ return null;
22010
+ }
22011
+ const coordinator = target.getTurnCoordinator();
22012
+ const queue = isRecord5(coordinator) ? coordinator.serverQueue : null;
22013
+ if (!isRecord5(queue) || typeof queue.isEnabled !== "function") return null;
22014
+ const descriptor = Object.getOwnPropertyDescriptor(queue, "isEnabled");
22015
+ if (!descriptor?.writable) return null;
22016
+ const original = queue.isEnabled;
22017
+ const getConversation = target.getConversation;
22018
+ const isEnabled = (...args) => {
22019
+ const threadId = args[0];
22020
+ if (typeof threadId === "string") {
22021
+ const conversation = getConversation.call(target, threadId);
22022
+ if (isRecord5(conversation) && conversation.id === threadId && // Reserved transport marker from externalThreadValue, retained by
22023
+ // Desktop in both newly created and hydrated conversation metadata.
22024
+ conversation.modelProvider === "codexhost") {
22025
+ return false;
22026
+ }
22027
+ }
22028
+ return original.apply(queue, args);
22029
+ };
22030
+ queue.isEnabled = isEnabled;
22031
+ return () => {
22032
+ if (queue.isEnabled === isEnabled) Object.defineProperty(queue, "isEnabled", descriptor);
22033
+ };
22034
+ }
22035
+
21845
22036
  // src/renderer-session-import-client.ts
21846
22037
  var RendererSessionImportUnavailableError = class extends Error {
21847
22038
  constructor() {
@@ -21914,15 +22105,15 @@ ${error51.stderrTail}`] : []
21914
22105
  var CODEX_ACCOUNT_LOGIN_CANCEL_METHOD = "codexhost/account/login/cancel";
21915
22106
  var CODEX_ACCOUNT_LOGIN_COMPLETED_METHOD = "codexhost/account/login/completed";
21916
22107
  var CODEX_ACCOUNT_RESET_CREDIT_CONSUME_METHOD = "codexhost/account/rate-limit-reset/consume";
21917
- function isRecord5(value) {
22108
+ function isRecord6(value) {
21918
22109
  return typeof value === "object" && value !== null && !Array.isArray(value);
21919
22110
  }
21920
22111
  function notifiedThreadId(notification) {
21921
- if (!isRecord5(notification) || notification.method !== THREAD_TOKEN_USAGE_UPDATED_METHOD && notification.method !== THREAD_USAGE_UPDATED_METHOD) {
22112
+ if (!isRecord6(notification) || notification.method !== THREAD_TOKEN_USAGE_UPDATED_METHOD && notification.method !== THREAD_USAGE_UPDATED_METHOD) {
21922
22113
  return null;
21923
22114
  }
21924
22115
  const params = notification.params;
21925
- if (!isRecord5(params)) return null;
22116
+ if (!isRecord6(params)) return null;
21926
22117
  const parsed = hostThreadIdSchema.safeParse(params.threadId);
21927
22118
  return parsed.success ? parsed.data : null;
21928
22119
  }
@@ -22043,8 +22234,8 @@ ${error51.stderrTail}`] : []
22043
22234
  threadId: params.threadId,
22044
22235
  includeTurns: false
22045
22236
  });
22046
- const thread = isRecord5(native) ? native.thread : null;
22047
- if (!isRecord5(thread) || thread.id !== params.threadId || typeof thread.modelProvider !== "string" || !thread.modelProvider || thread.modelProvider === "codexhost" || typeof thread.cliVersion !== "string" || !thread.cliVersion || thread.cliVersion === "codexhost") {
22237
+ const thread = isRecord6(native) ? native.thread : null;
22238
+ if (!isRecord6(thread) || thread.id !== params.threadId || typeof thread.modelProvider !== "string" || !thread.modelProvider || thread.modelProvider === "codexhost" || typeof thread.cliVersion !== "string" || !thread.cliVersion || thread.cliVersion === "codexhost") {
22048
22239
  throw new Error("Native Thread response cannot establish Codex ownership");
22049
22240
  }
22050
22241
  return { owner: "codex", locked: true };
@@ -22184,7 +22375,7 @@ ${error51.stderrTail}`] : []
22184
22375
  return notifications.addNotificationCallback(
22185
22376
  CODEX_ACCOUNT_LOGIN_COMPLETED_METHOD,
22186
22377
  (notification) => {
22187
- if (!isRecord5(notification) || notification.method !== CODEX_ACCOUNT_LOGIN_COMPLETED_METHOD) {
22378
+ if (!isRecord6(notification) || notification.method !== CODEX_ACCOUNT_LOGIN_COMPLETED_METHOD) {
22188
22379
  return;
22189
22380
  }
22190
22381
  const result = codexAccountLoginCompletedSchema.safeParse(notification.params);
@@ -22232,9 +22423,11 @@ ${error51.stderrTail}`] : []
22232
22423
  if (agent === "omp") return OMP_TRANSPORT_MODEL_ID;
22233
22424
  if (agent === "antigravity") return ANTIGRAVITY_TRANSPORT_MODEL_ID;
22234
22425
  if (agent === "kiro-cli") return encodeHarnessPluginRoute({ harnessId: KIRO_CLI_HARNESS_ID });
22426
+ if (agent === "codebuddy" || agent === "cursor-cli")
22427
+ return encodeHarnessPluginRoute({ harnessId: harnessIdSchema.parse(agent) });
22235
22428
  return null;
22236
22429
  }
22237
- function isRecord6(value) {
22430
+ function isRecord7(value) {
22238
22431
  return typeof value === "object" && value !== null && !Array.isArray(value);
22239
22432
  }
22240
22433
  function piTransportModelId(model, thinkingOptionId) {
@@ -22475,7 +22668,7 @@ ${error51.stderrTail}`] : []
22475
22668
  return hostThreadIdSchema.parse(target[1]);
22476
22669
  }
22477
22670
  function isCurrentRequestBridge(value) {
22478
- return isRecord6(value) && typeof value.hostId === "string" && value.hostId.length > 0 && typeof value.sendRequest === "function" && typeof value.prewarmThreadStart === "function" && typeof value.enqueueRequest === "function";
22671
+ return isRecord7(value) && typeof value.hostId === "string" && value.hostId.length > 0 && typeof value.sendRequest === "function" && typeof value.prewarmThreadStart === "function" && typeof value.enqueueRequest === "function";
22479
22672
  }
22480
22673
  function findActivePrewarmTargets(root) {
22481
22674
  const editor = root.querySelector(
@@ -22503,7 +22696,7 @@ ${error51.stderrTail}`] : []
22503
22696
  let hook = fiber.memoizedState;
22504
22697
  for (let hookIndex = 0; hook && hookIndex < 100; hookIndex += 1) {
22505
22698
  const hookState = hook.memoizedState;
22506
- if (isRecord6(hookState)) {
22699
+ if (isRecord7(hookState)) {
22507
22700
  const requestClient = hookState.requestClient;
22508
22701
  const bridge = isCurrentRequestBridge(requestClient) ? requestClient : isCurrentRequestBridge(hookState) ? hookState : null;
22509
22702
  if (bridge) {
@@ -22537,7 +22730,7 @@ ${error51.stderrTail}`] : []
22537
22730
  let fiber = findComposerFiber(composer);
22538
22731
  for (let depth = 0; fiber && depth < 120; depth += 1) {
22539
22732
  const props = fiber.memoizedProps;
22540
- if (isRecord6(props) && "conversationId" in props && props.conversationId != null) {
22733
+ if (isRecord7(props) && "conversationId" in props && props.conversationId != null) {
22541
22734
  const candidate = hostThreadIdSchema.safeParse(props.conversationId);
22542
22735
  if (!candidate.success || threadId !== void 0 && threadId !== candidate.data) {
22543
22736
  return null;
@@ -22550,12 +22743,12 @@ ${error51.stderrTail}`] : []
22550
22743
  return threadId;
22551
22744
  }
22552
22745
  function isCurrentDraftWrapper(value) {
22553
- if (!Array.isArray(value) || value.length !== 7 || value[3] !== value[5] || value[3] !== value[6] || !isRecord6(value[3]) || typeof value[3].get !== "function" || typeof value[2] !== "string" && value[2] !== null) {
22746
+ if (!Array.isArray(value) || value.length !== 7 || value[3] !== value[5] || value[3] !== value[6] || !isRecord7(value[3]) || typeof value[3].get !== "function" || typeof value[2] !== "string" && value[2] !== null) {
22554
22747
  return false;
22555
22748
  }
22556
22749
  try {
22557
22750
  const draft = value[3].get();
22558
- return isRecord6(draft) && "modelSettings" in draft && "isManuallyChanged" in draft;
22751
+ return isRecord7(draft) && "modelSettings" in draft && "isManuallyChanged" in draft;
22559
22752
  } catch {
22560
22753
  return false;
22561
22754
  }
@@ -22575,8 +22768,8 @@ ${error51.stderrTail}`] : []
22575
22768
  let fiber = findComposerFiber(composer);
22576
22769
  for (let depth = 0; fiber && depth < 120; depth += 1) {
22577
22770
  const updateQueue = fiber.updateQueue;
22578
- const memoCache = isRecord6(updateQueue) ? updateQueue.memoCache : null;
22579
- const data = isRecord6(memoCache) && Array.isArray(memoCache.data) ? memoCache.data : [];
22771
+ const memoCache = isRecord7(updateQueue) ? updateQueue.memoCache : null;
22772
+ const data = isRecord7(memoCache) && Array.isArray(memoCache.data) ? memoCache.data : [];
22580
22773
  for (const value of data) {
22581
22774
  if (isCurrentDraftWrapper(value) && typeof value[2] === "string" && value[2].startsWith("client-new-thread:")) {
22582
22775
  draftIds.add(value[2]);
@@ -22604,7 +22797,7 @@ ${error51.stderrTail}`] : []
22604
22797
  return ["default", draftIds.values().next().value];
22605
22798
  }
22606
22799
  function isDraftPrewarmPolicyReady(value) {
22607
- return isRecord6(value) && value.state === "ready" && typeof value.hostId === "string" && value.hostId.length > 0 && typeof value.select === "function" && typeof value.clear === "function";
22800
+ return isRecord7(value) && value.state === "ready" && typeof value.hostId === "string" && value.hostId.length > 0 && typeof value.select === "function" && typeof value.clear === "function";
22608
22801
  }
22609
22802
  function prewarmTargetHostId(target) {
22610
22803
  const bridge = target.requestClient ?? target;
@@ -22612,7 +22805,7 @@ ${error51.stderrTail}`] : []
22612
22805
  return typeof hostId === "string" && hostId.length > 0 ? hostId : null;
22613
22806
  }
22614
22807
  function isRendererRequestTarget(value) {
22615
- if (!isRecord6(value) || typeof value.sendRequest !== "function") return false;
22808
+ if (!isRecord7(value) || typeof value.sendRequest !== "function") return false;
22616
22809
  return isCurrentRequestBridge(value.requestClient ?? value);
22617
22810
  }
22618
22811
  function hasPolicyRequestTarget(policy) {
@@ -22674,10 +22867,10 @@ ${error51.stderrTail}`] : []
22674
22867
  }
22675
22868
  }
22676
22869
  function modelSelectionForAgent(officialSelection, reasoningEffort, agent, model, thinkingOptionId, permissionModeId) {
22677
- 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({
22678
- harnessId: KIRO_CLI_HARNESS_ID,
22870
+ 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" || agent === "codebuddy" || agent === "cursor-cli" ? encodeHarnessPluginRoute({
22871
+ harnessId: harnessIdSchema.parse(agent),
22679
22872
  ...model ? { model } : {},
22680
- ...thinkingOptionId ? { thinkingOptionId } : {},
22873
+ ...thinkingOptionId && agent !== "cursor-cli" ? { thinkingOptionId } : {},
22681
22874
  ...permissionModeId ? { permissionModeId } : {}
22682
22875
  }) : transportModelIdForAgent(agent);
22683
22876
  return transportModelId ? { model: transportModelId, reasoningEffort } : officialSelection;
@@ -22703,7 +22896,7 @@ ${error51.stderrTail}`] : []
22703
22896
  () => findActivePrewarmTargets(document)
22704
22897
  );
22705
22898
  const clientsByTarget = /* @__PURE__ */ new WeakMap();
22706
- const steeringCleanups = /* @__PURE__ */ new Set();
22899
+ const turnControlCleanups = /* @__PURE__ */ new Set();
22707
22900
  const modelClientForTargets = (targets, policy = null) => {
22708
22901
  const target = targets[0];
22709
22902
  if (targets.length !== 1 || !target) return null;
@@ -22713,8 +22906,10 @@ ${error51.stderrTail}`] : []
22713
22906
  const client = createRendererModelClient([target]);
22714
22907
  if (client) {
22715
22908
  if (!cached2) {
22716
- const cleanup = installRendererExternalSteering(target);
22717
- if (cleanup) steeringCleanups.add(cleanup);
22909
+ const queueCleanup = installRendererExternalQueue(target);
22910
+ if (queueCleanup) turnControlCleanups.add(queueCleanup);
22911
+ const steeringCleanup = installRendererExternalSteering(target);
22912
+ if (steeringCleanup) turnControlCleanups.add(steeringCleanup);
22718
22913
  }
22719
22914
  clientsByTarget.set(target, { client, policy, requestClient: target.requestClient });
22720
22915
  }
@@ -22933,7 +23128,7 @@ ${error51.stderrTail}`] : []
22933
23128
  () => activeRoutingPolicy?.select(null),
22934
23129
  () => syncActiveRoute(null),
22935
23130
  () => forkControl.dispose(),
22936
- ...steeringCleanups,
23131
+ ...turnControlCleanups,
22937
23132
  () => usageSubscription.dispose()
22938
23133
  ];
22939
23134
  for (const cleanup of cleanups) {
@@ -22983,11 +23178,11 @@ ${error51.stderrTail}`] : []
22983
23178
  return null;
22984
23179
  }
22985
23180
  }
22986
- function isRecord7(value) {
23181
+ function isRecord8(value) {
22987
23182
  return typeof value === "object" && value !== null && !Array.isArray(value);
22988
23183
  }
22989
23184
  function parseExternalConfiguration(value) {
22990
- if (!isRecord7(value)) return void 0;
23185
+ if (!isRecord8(value)) return void 0;
22991
23186
  const model = harnessModelRefSchema.safeParse(value.model);
22992
23187
  if (!model.success) return void 0;
22993
23188
  const thinkingOptionId = harnessThinkingOptionIdSchema.safeParse(value.thinkingOptionId);
@@ -23004,9 +23199,9 @@ ${error51.stderrTail}`] : []
23004
23199
  const raw = storage.getItem(RENDERER_NEW_THREAD_PREFERENCE_KEY);
23005
23200
  if (!raw) return void 0;
23006
23201
  const parsed = JSON.parse(raw);
23007
- if (!isRecord7(parsed) || parsed.version !== 1) return void 0;
23202
+ if (!isRecord8(parsed) || parsed.version !== 1) return void 0;
23008
23203
  if (!KNOWN_RENDERER_AGENTS.some((agent) => agent === parsed.lastAgent)) return void 0;
23009
- const externalByAgent = isRecord7(parsed.externalByAgent) ? parsed.externalByAgent : {};
23204
+ const externalByAgent = isRecord8(parsed.externalByAgent) ? parsed.externalByAgent : {};
23010
23205
  const parsedExternal = Object.fromEntries(
23011
23206
  KNOWN_RENDERER_AGENTS.filter(
23012
23207
  (agent) => agent !== "codex"
@@ -23082,7 +23277,7 @@ ${error51.stderrTail}`] : []
23082
23277
  var GET_LOCALE_OVERRIDE_URL = "vscode://codex/get-setting";
23083
23278
  var GET_LOCALE_INFO_URL = "vscode://codex/locale-info";
23084
23279
  var DEFAULT_LOCALE_REQUEST_TIMEOUT_MS = 750;
23085
- function isRecord8(value) {
23280
+ function isRecord9(value) {
23086
23281
  return typeof value === "object" && value !== null && !Array.isArray(value);
23087
23282
  }
23088
23283
  function canonicalLocale(value) {
@@ -23104,7 +23299,7 @@ ${error51.stderrTail}`] : []
23104
23299
  return new DOMException("The operation was aborted", "AbortError");
23105
23300
  }
23106
23301
  function parseLocaleOverride(value) {
23107
- if (!isRecord8(value) || !("value" in value)) {
23302
+ if (!isRecord9(value) || !("value" in value)) {
23108
23303
  throw new Error("Codex locale override response is malformed");
23109
23304
  }
23110
23305
  if (value.value === null) return { value: null };
@@ -23119,7 +23314,7 @@ ${error51.stderrTail}`] : []
23119
23314
  return locale;
23120
23315
  }
23121
23316
  function parseLocaleInfo(value) {
23122
- if (!isRecord8(value)) throw new Error("Codex locale info response is malformed");
23317
+ if (!isRecord9(value)) throw new Error("Codex locale info response is malformed");
23123
23318
  return {
23124
23319
  ideLocale: optionalLocale(value.ideLocale, "IDE locale"),
23125
23320
  systemLocale: optionalLocale(value.systemLocale, "system locale")
@@ -23148,7 +23343,7 @@ ${error51.stderrTail}`] : []
23148
23343
  const onAbort = () => settle(() => reject(abortError2()));
23149
23344
  const onMessage = (event) => {
23150
23345
  const message2 = event.data;
23151
- if (!isRecord8(message2) || message2.type !== "fetch-response") return;
23346
+ if (!isRecord9(message2) || message2.type !== "fetch-response") return;
23152
23347
  if (message2.requestId !== requestId) return;
23153
23348
  if (message2.responseType !== "success" || typeof message2.status !== "number" || message2.status < 200 || message2.status >= 300 || typeof message2.bodyJsonString !== "string") {
23154
23349
  settle(() => reject(new Error("Codex locale request failed")));
@@ -23871,6 +24066,50 @@ ${error51.stderrTail}`] : []
23871
24066
  });
23872
24067
  }
23873
24068
 
24069
+ // src/settings/appearance-page.ts
24070
+ function createAppearanceSettingsPage(messages) {
24071
+ return Object.freeze({
24072
+ id: "appearance",
24073
+ label: messages.pageLabels.appearance,
24074
+ icon: "settings",
24075
+ mount(context) {
24076
+ const document2 = context.content.ownerDocument;
24077
+ const ownerWindow = document2.defaultView;
24078
+ if (!ownerWindow) return;
24079
+ const heading = document2.createElement("div");
24080
+ heading.className = "settings-section-label";
24081
+ heading.textContent = messages.pageLabels.appearance;
24082
+ const description = document2.createElement("p");
24083
+ description.className = "settings-page-description";
24084
+ description.textContent = messages.appearanceDescription;
24085
+ const row = document2.createElement("label");
24086
+ row.className = "settings-preference-row";
24087
+ const copy = document2.createElement("span");
24088
+ copy.className = "settings-preference-row__copy";
24089
+ const title = document2.createElement("strong");
24090
+ title.textContent = messages.reasoningSoftWrapTitle;
24091
+ const detail = document2.createElement("span");
24092
+ detail.textContent = messages.reasoningSoftWrapDescription;
24093
+ copy.append(title, detail);
24094
+ const checkbox = document2.createElement("input");
24095
+ checkbox.type = "checkbox";
24096
+ checkbox.className = "settings-preference-checkbox";
24097
+ checkbox.checked = readReasoningTranscriptSoftWrap(ownerWindow);
24098
+ checkbox.setAttribute("aria-label", messages.reasoningSoftWrapTitle);
24099
+ checkbox.addEventListener("change", () => {
24100
+ setReasoningTranscriptSoftWrap(ownerWindow, checkbox.checked);
24101
+ });
24102
+ const sync = () => {
24103
+ checkbox.checked = readReasoningTranscriptSoftWrap(ownerWindow);
24104
+ };
24105
+ ownerWindow.addEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, sync);
24106
+ row.append(copy, checkbox);
24107
+ context.content.append(heading, description, row);
24108
+ return () => ownerWindow.removeEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, sync);
24109
+ }
24110
+ });
24111
+ }
24112
+
23874
24113
  // src/settings/release-notes.ts
23875
24114
  var HEADING_PATTERN = /^(#{1,6})[ \t]+(.+?)\s*$/u;
23876
24115
  var BLOCKQUOTE_PATTERN = /^>[ \t]?(.*?)\s*$/u;
@@ -24046,6 +24285,140 @@ ${error51.stderrTail}`] : []
24046
24285
  }
24047
24286
  }
24048
24287
 
24288
+ // src/settings/accounts-details.ts
24289
+ function createAccountDetails(document2, messages, input) {
24290
+ const root = document2.createElement("div");
24291
+ root.className = "settings-account-details";
24292
+ const trigger = document2.createElement("button");
24293
+ trigger.type = "button";
24294
+ trigger.className = "settings-icon-button";
24295
+ trigger.title = input.triggerLabel ?? input.label;
24296
+ trigger.disabled = input.disabled ?? false;
24297
+ trigger.dataset.accountFocus = input.focusKey;
24298
+ trigger.setAttribute("aria-label", trigger.title);
24299
+ trigger.setAttribute("aria-haspopup", "dialog");
24300
+ trigger.append(createRendererSettingsIcon(input.icon, 16));
24301
+ const dialog = document2.createElement("dialog");
24302
+ dialog.className = "settings-account-dialog";
24303
+ dialog.id = `settings-account-${input.focusKey}-dialog`;
24304
+ dialog.setAttribute("aria-label", input.label);
24305
+ trigger.setAttribute("aria-controls", dialog.id);
24306
+ const heading = document2.createElement("h2");
24307
+ heading.textContent = input.label;
24308
+ const description = document2.createElement("p");
24309
+ description.textContent = input.description;
24310
+ description.id = `${dialog.id}-description`;
24311
+ dialog.setAttribute("aria-describedby", description.id);
24312
+ const close = document2.createElement("button");
24313
+ close.type = "button";
24314
+ close.className = "settings-icon-button settings-account-dialog__close";
24315
+ close.dataset.accountFocus = `${input.focusKey}:close`;
24316
+ close.setAttribute("aria-label", messages.accountDetailsClose);
24317
+ close.append(createRendererSettingsIcon("close", 16));
24318
+ close.addEventListener("click", () => dialog.close());
24319
+ dialog.addEventListener("close", () => {
24320
+ if (trigger.isConnected && !trigger.disabled) trigger.focus({ preventScroll: true });
24321
+ });
24322
+ dialog.addEventListener(
24323
+ "click",
24324
+ (event) => {
24325
+ if (input.actions.some((action) => action.contains(event.target))) {
24326
+ trigger.focus({ preventScroll: true });
24327
+ dialog.close();
24328
+ }
24329
+ },
24330
+ { capture: true }
24331
+ );
24332
+ const actions = document2.createElement("div");
24333
+ actions.className = "settings-account-dialog__actions";
24334
+ actions.append(...input.actions);
24335
+ dialog.append(close, heading, description, actions);
24336
+ trigger.addEventListener("click", () => dialog.showModal());
24337
+ root.append(trigger, dialog);
24338
+ return root;
24339
+ }
24340
+
24341
+ // src/settings/accounts-reset-time.ts
24342
+ function formatAccountResetCountdown(value, messages, now = Date.now()) {
24343
+ const timestamp = Date.parse(value);
24344
+ if (!Number.isFinite(timestamp)) return null;
24345
+ const minutes = Math.max(0, Math.ceil((timestamp - now) / 6e4));
24346
+ if (minutes === 0) {
24347
+ return {
24348
+ text: messages.accountCreditsResetPending,
24349
+ description: messages.accountCreditsResetPendingHint
24350
+ };
24351
+ }
24352
+ const chinese = messages.locale === "zh-CN";
24353
+ const parts = [
24354
+ { value: Math.floor(minutes / 1440), unit: "d", label: chinese ? "\u5929" : " days" },
24355
+ { value: Math.floor(minutes % 1440 / 60), unit: "h", label: chinese ? "\u5C0F\u65F6" : " hours" },
24356
+ { value: minutes % 60, unit: "m", label: chinese ? "\u5206\u949F" : " minutes" }
24357
+ ].filter((part, index) => part.value > 0 && (minutes < 1440 || index < 2));
24358
+ return {
24359
+ text: parts.map((part) => `${part.value}${part.unit}`).join(""),
24360
+ description: messages.accountCreditsResetIn.replace(
24361
+ "{time}",
24362
+ parts.map(
24363
+ (part) => `${part.value}${!chinese && part.value === 1 ? part.label.slice(0, -1) : part.label}`
24364
+ ).join(chinese ? "" : " ")
24365
+ )
24366
+ };
24367
+ }
24368
+ function updateCountdown(element, messages) {
24369
+ const value = formatAccountResetCountdown(element.dataset.resetsAt ?? "", messages);
24370
+ if (!value) return;
24371
+ element.textContent = value.text;
24372
+ element.title = value.description;
24373
+ element.setAttribute("aria-label", value.description);
24374
+ }
24375
+ function renderAccountResetTime(document2, value, messages) {
24376
+ const date5 = new Date(value);
24377
+ if (!Number.isFinite(date5.getTime())) return null;
24378
+ const countdown = document2.createElement("span");
24379
+ countdown.className = "settings-account-usage__countdown";
24380
+ countdown.dataset.resetsAt = date5.toISOString();
24381
+ updateCountdown(countdown, messages);
24382
+ const timestamp = document2.createElement("time");
24383
+ timestamp.className = "settings-account-usage__sub";
24384
+ timestamp.dateTime = date5.toISOString();
24385
+ const pad = (number4) => String(number4).padStart(2, "0");
24386
+ timestamp.textContent = `${pad(date5.getMonth() + 1)}/${pad(date5.getDate())} ${pad(date5.getHours())}:${pad(date5.getMinutes())}`;
24387
+ timestamp.title = messages.accountCreditsResetAt.replace(
24388
+ "{time}",
24389
+ date5.toLocaleString(messages.locale, {
24390
+ year: "numeric",
24391
+ month: "long",
24392
+ day: "numeric",
24393
+ hour: "2-digit",
24394
+ minute: "2-digit",
24395
+ hour12: false,
24396
+ timeZoneName: "short"
24397
+ })
24398
+ );
24399
+ timestamp.setAttribute("aria-label", timestamp.title);
24400
+ return { countdown, timestamp };
24401
+ }
24402
+ function mountAccountResetCountdowns(list, messages, signal) {
24403
+ const window2 = list.ownerDocument.defaultView;
24404
+ if (!window2 || signal.aborted) return () => void 0;
24405
+ const refresh = () => {
24406
+ if (signal.aborted) return;
24407
+ for (const element of list.querySelectorAll("[data-resets-at]")) {
24408
+ updateCountdown(element, messages);
24409
+ }
24410
+ };
24411
+ const timer = window2.setInterval(refresh, 6e4);
24412
+ window2.addEventListener("focus", refresh);
24413
+ const stop = () => {
24414
+ window2.clearInterval(timer);
24415
+ window2.removeEventListener("focus", refresh);
24416
+ signal.removeEventListener("abort", stop);
24417
+ };
24418
+ signal.addEventListener("abort", stop, { once: true });
24419
+ return stop;
24420
+ }
24421
+
24049
24422
  // src/settings/accounts-usage.ts
24050
24423
  function creditsPeriodLabel2(periodType, messages) {
24051
24424
  if (periodType === "weekly") return messages.accountCreditsPeriodWeekly;
@@ -24080,17 +24453,80 @@ ${error51.stderrTail}`] : []
24080
24453
  function resetCreditDetailLine(index, expiresAt, messages, now = /* @__PURE__ */ new Date()) {
24081
24454
  return messages.accountResetCreditsCardExpiry.replace("{index}", String(index)).replace("{time}", formatAccountCreditsReset(expiresAt, messages.locale, now));
24082
24455
  }
24456
+ function accountUsageColumnLabel(period, display, messages) {
24457
+ const mode = display === "remaining" ? messages.accountCreditsRemaining : messages.accountCreditsUsed;
24458
+ return `${creditsPeriodLabel2(period, messages)}${messages.locale === "zh-CN" ? "" : " "}${mode}`;
24459
+ }
24460
+ function splitUsageWindows(credits, messages) {
24461
+ const columns = {};
24462
+ const additional = [];
24463
+ const primary = {
24464
+ label: credits.label ?? creditsPeriodLabel2(credits.periodType, messages),
24465
+ usedPercent: credits.usedPercent,
24466
+ resetsAt: credits.resetsAt
24467
+ };
24468
+ if (!credits.label && credits.periodType === "five_hour") columns.five_hour = primary;
24469
+ else if (!credits.label && ["seven_day", "weekly"].includes(credits.periodType))
24470
+ columns.seven_day = { ...primary, label: messages.accountCreditsPeriodSevenDay };
24471
+ else additional.push(primary);
24472
+ for (const product of credits.productUsage ?? []) {
24473
+ const window2 = {
24474
+ label: creditsProductLabel(product.product, messages),
24475
+ usedPercent: product.usagePercent,
24476
+ resetsAt: product.resetsAt
24477
+ };
24478
+ const period = product.product === "7-day window" ? "seven_day" : product.product === "5-hour window" ? "five_hour" : null;
24479
+ if (period && !columns[period])
24480
+ columns[period] = { ...window2, label: creditsPeriodLabel2(period, messages) };
24481
+ else additional.push(window2);
24482
+ }
24483
+ return { columns, additional };
24484
+ }
24485
+ function renderUsageWindow(document2, window2, messages, display) {
24486
+ const meter = document2.createElement("div");
24487
+ meter.className = "settings-account-usage__meter";
24488
+ const label = document2.createElement("span");
24489
+ label.className = "settings-account-usage__title";
24490
+ label.textContent = window2.label;
24491
+ label.title = window2.label;
24492
+ const value = display === "remaining" ? 100 - window2.usedPercent : window2.usedPercent;
24493
+ const valueLabel = display === "remaining" ? messages.accountCreditsRemaining : messages.accountCreditsUsed;
24494
+ const tone = rendererCreditsTone(window2.usedPercent);
24495
+ const percent = document2.createElement("div");
24496
+ percent.className = `settings-account-usage__percent settings-account-usage__percent--${tone}`;
24497
+ const number4 = document2.createElement("span");
24498
+ number4.textContent = formatRendererCreditsPercent(value);
24499
+ const reset = window2.resetsAt ? renderAccountResetTime(document2, window2.resetsAt, messages) : null;
24500
+ if (reset) percent.append(reset.countdown);
24501
+ percent.append(number4);
24502
+ const bar = document2.createElement("div");
24503
+ bar.className = `settings-account-usage__bar settings-account-usage__bar--${tone}`;
24504
+ bar.setAttribute("role", "meter");
24505
+ bar.setAttribute("aria-label", `${window2.label} \xB7 ${valueLabel}`);
24506
+ bar.setAttribute("aria-valuemin", "0");
24507
+ bar.setAttribute("aria-valuemax", "100");
24508
+ bar.setAttribute("aria-valuenow", String(value));
24509
+ const fill = document2.createElement("span");
24510
+ fill.style.width = `${Math.min(100, Math.max(0, value))}%`;
24511
+ bar.append(fill);
24512
+ meter.append(label, percent, bar);
24513
+ if (reset) meter.append(reset.timestamp);
24514
+ return meter;
24515
+ }
24083
24516
  function renderAccountUsage(document2, state, messages, display, onRetry) {
24084
- if (!state) return null;
24085
- const usage = document2.createElement("div");
24086
- usage.className = "settings-account-usage";
24087
- if (state.status !== "ready") {
24517
+ if (state?.status !== "ready") {
24518
+ const cell = document2.createElement("td");
24519
+ cell.colSpan = 2;
24520
+ cell.className = "settings-account-usage-cell settings-account-usage-cell--message";
24521
+ const usage = document2.createElement("div");
24522
+ usage.className = "settings-account-usage";
24088
24523
  const message = document2.createElement("span");
24089
24524
  message.className = "settings-account-usage__message";
24090
- message.textContent = state.status === "loading" ? messages.accountCreditsLoading : state.status === "error" ? messages.accountCreditsFailed : messages.accountCreditsEmpty;
24525
+ message.textContent = !state ? "\u2014" : state.status === "loading" ? messages.accountCreditsLoading : state.status === "error" ? messages.accountCreditsFailed : messages.accountCreditsEmpty;
24526
+ if (!state) message.title = messages.accountCreditsEmpty;
24091
24527
  usage.append(message);
24092
- if (state.status === "loading") usage.setAttribute("aria-busy", "true");
24093
- if (state.status === "error") {
24528
+ if (state?.status === "loading") usage.setAttribute("aria-busy", "true");
24529
+ if (state?.status === "error") {
24094
24530
  const retry = document2.createElement("button");
24095
24531
  retry.type = "button";
24096
24532
  retry.className = "settings-command-button settings-command-button--secondary";
@@ -24098,59 +24534,35 @@ ${error51.stderrTail}`] : []
24098
24534
  retry.addEventListener("click", onRetry);
24099
24535
  usage.append(retry);
24100
24536
  }
24101
- return usage;
24537
+ cell.append(usage);
24538
+ return { cells: [cell], additional: null };
24102
24539
  }
24103
- const credits = state.credits;
24104
- const windows = [
24105
- {
24106
- label: credits.label ?? creditsPeriodLabel2(credits.periodType, messages),
24107
- usedPercent: credits.usedPercent,
24108
- resetsAt: credits.resetsAt
24109
- },
24110
- ...(credits.productUsage ?? []).map((product) => ({
24111
- label: creditsProductLabel(product.product, messages),
24112
- usedPercent: product.usagePercent,
24113
- resetsAt: product.resetsAt
24114
- }))
24115
- ];
24116
- for (const window2 of windows) {
24117
- const meter = document2.createElement("div");
24118
- meter.className = "settings-account-usage__meter";
24119
- const label = document2.createElement("span");
24120
- label.className = "settings-account-usage__title";
24121
- label.textContent = window2.label;
24122
- label.title = window2.label;
24123
- const value = display === "remaining" ? 100 - window2.usedPercent : window2.usedPercent;
24124
- const valueLabel = display === "remaining" ? messages.accountCreditsRemaining : messages.accountCreditsUsed;
24125
- const tone = rendererCreditsTone(window2.usedPercent);
24126
- const bar = document2.createElement("div");
24127
- bar.className = `settings-account-usage__bar settings-account-usage__bar--${tone}`;
24128
- bar.setAttribute("role", "meter");
24129
- bar.setAttribute("aria-label", `${window2.label} \xB7 ${valueLabel}`);
24130
- bar.setAttribute("aria-valuemin", "0");
24131
- bar.setAttribute("aria-valuemax", "100");
24132
- bar.setAttribute("aria-valuenow", String(value));
24133
- const fill = document2.createElement("span");
24134
- fill.style.width = `${Math.min(100, Math.max(0, value))}%`;
24135
- bar.append(fill);
24136
- const percent = document2.createElement("span");
24137
- percent.className = `settings-account-usage__percent settings-account-usage__percent--${tone}`;
24138
- const prefix = document2.createElement("span");
24139
- prefix.textContent = valueLabel;
24140
- prefix.className = "settings-account-usage__value-label";
24141
- const number4 = document2.createElement("span");
24142
- number4.textContent = formatRendererCreditsPercent(value);
24143
- percent.append(prefix, number4);
24144
- meter.append(label, bar, percent);
24145
- if (window2.resetsAt) {
24146
- const reset = document2.createElement("span");
24147
- reset.className = "settings-account-usage__sub";
24148
- reset.textContent = `${formatAccountCreditsReset(window2.resetsAt, messages.locale)} ${messages.accountCreditsReset}`;
24149
- meter.append(reset);
24150
- }
24151
- usage.append(meter);
24152
- }
24153
- return usage;
24540
+ const { columns, additional } = splitUsageWindows(state.credits, messages);
24541
+ const cells = ["five_hour", "seven_day"].map((period) => {
24542
+ const cell = document2.createElement("td");
24543
+ cell.className = "settings-account-usage-cell";
24544
+ const window2 = columns[period];
24545
+ if (window2) cell.append(renderUsageWindow(document2, window2, messages, display));
24546
+ else {
24547
+ const missing = document2.createElement("div");
24548
+ missing.className = "settings-account-usage__missing";
24549
+ const label = document2.createElement("span");
24550
+ label.className = "settings-account-usage__title";
24551
+ label.textContent = creditsPeriodLabel2(period, messages);
24552
+ const dash = document2.createElement("span");
24553
+ dash.textContent = "\u2014";
24554
+ dash.setAttribute("aria-hidden", "true");
24555
+ missing.append(label, dash);
24556
+ cell.append(missing);
24557
+ }
24558
+ return cell;
24559
+ });
24560
+ if (!additional.length) return { cells, additional: null };
24561
+ const extra = document2.createElement("div");
24562
+ extra.className = "settings-account-extra-usage";
24563
+ for (const window2 of additional)
24564
+ extra.append(renderUsageWindow(document2, window2, messages, display));
24565
+ return { cells, additional: extra };
24154
24566
  }
24155
24567
  function renderAccountResetCredits(document2, credits, messages, options) {
24156
24568
  const resetCredits = credits.resetCredits;
@@ -24162,8 +24574,11 @@ ${error51.stderrTail}`] : []
24162
24574
  summary.title = messages.accountResetCreditsDetails;
24163
24575
  const count = document2.createElement("span");
24164
24576
  count.textContent = messages.locale === "zh-CN" ? `${resetCredits.availableCount} \u5F20` : String(resetCredits.availableCount);
24577
+ const label = document2.createElement("span");
24578
+ label.textContent = messages.accountResetCredits;
24165
24579
  summary.append(
24166
24580
  createRendererSettingsIcon("ticket", 16),
24581
+ label,
24167
24582
  count,
24168
24583
  createRendererSettingsIcon("chevron-right", 14)
24169
24584
  );
@@ -24233,6 +24648,8 @@ ${error51.stderrTail}`] : []
24233
24648
  return () => {
24234
24649
  const target = key ? list.querySelector(`[data-account-focus="${CSS.escape(key)}"]`) : null;
24235
24650
  if (target && !target.matches(":disabled")) {
24651
+ const dialog = target.closest("dialog");
24652
+ if (dialog && !dialog.open) dialog.showModal();
24236
24653
  target.focus({ preventScroll: true });
24237
24654
  return;
24238
24655
  }
@@ -24248,87 +24665,100 @@ ${error51.stderrTail}`] : []
24248
24665
  table.setAttribute("aria-label", messages.pageLabels.accounts);
24249
24666
  const head = document2.createElement("thead");
24250
24667
  const row = document2.createElement("tr");
24251
- for (const label of [
24252
- messages.accountColumnAccount,
24253
- messages.accountColumnUsage,
24254
- messages.accountResetCredits,
24255
- messages.accountColumnActions
24256
- ]) {
24668
+ const headers = Array.from({ length: 4 }, () => {
24257
24669
  const cell = document2.createElement("th");
24258
24670
  cell.scope = "col";
24259
- cell.textContent = label;
24260
24671
  row.append(cell);
24261
- }
24672
+ return cell;
24673
+ });
24674
+ const updateDisplay = (display) => {
24675
+ const labels = [
24676
+ messages.accountColumnAccount,
24677
+ accountUsageColumnLabel("five_hour", display, messages),
24678
+ accountUsageColumnLabel("seven_day", display, messages),
24679
+ messages.accountColumnActions
24680
+ ];
24681
+ headers.forEach((cell, index) => {
24682
+ cell.textContent = labels[index] ?? "";
24683
+ });
24684
+ };
24685
+ updateDisplay("remaining");
24262
24686
  head.append(row);
24263
24687
  const body = document2.createElement("tbody");
24264
24688
  table.append(head, body);
24265
- return { table, body };
24689
+ return { table, body, updateDisplay };
24266
24690
  }
24267
- function renderAccountRows(document2, account, messages, input) {
24268
- const row = document2.createElement("tr");
24269
- row.className = "settings-account-row";
24270
- row.dataset.accountId = account.accountId;
24271
- row.dataset.accountFocus = `${account.accountId}:row`;
24272
- row.tabIndex = -1;
24273
- const name = codexAccountDisplayName(account);
24274
- row.setAttribute("aria-label", name.full);
24275
- const personCell = document2.createElement("td");
24691
+ function createAccountPerson(document2, messages, input) {
24276
24692
  const person = document2.createElement("div");
24277
24693
  person.className = "settings-account-row__person";
24278
- const mark = document2.createElement("div");
24279
- mark.className = "settings-account-row__mark";
24280
- mark.setAttribute("aria-hidden", "true");
24281
- mark.append(createRendererSettingsIcon("terminal", 17));
24282
24694
  const identity = document2.createElement("div");
24283
24695
  identity.className = "settings-account-row__identity";
24284
- const title = document2.createElement("div");
24285
- title.className = "settings-account-title";
24286
- const local = document2.createElement("strong");
24287
- local.className = "settings-account-email";
24288
- local.textContent = name.local;
24289
- local.title = name.full;
24290
- title.append(local);
24291
- if (account.active) {
24292
- const badge = document2.createElement("span");
24293
- badge.className = "settings-account-active";
24294
- badge.textContent = messages.accountDefaultBadge;
24295
- title.append(badge);
24296
- }
24297
- identity.append(title);
24696
+ const title = document2.createElement("strong");
24697
+ title.className = "settings-account-email";
24698
+ title.textContent = input.name;
24699
+ title.title = input.name;
24700
+ title.translate = false;
24298
24701
  const metadata = document2.createElement("div");
24299
24702
  metadata.className = "settings-account-metadata";
24300
- if (name.domain) {
24301
- const domain2 = document2.createElement("span");
24302
- domain2.className = "settings-account-domain";
24303
- domain2.textContent = `@${name.domain}`;
24304
- metadata.append(domain2);
24305
- }
24306
- const planLabel = accountPlanLabel(account.planType);
24307
- if (planLabel) {
24308
- if (name.domain) {
24703
+ const agent = document2.createElement("span");
24704
+ agent.textContent = input.agent;
24705
+ agent.translate = false;
24706
+ if (input.name !== input.agent) metadata.append(agent);
24707
+ if (input.plan) {
24708
+ if (metadata.childElementCount) {
24309
24709
  const separator = document2.createElement("span");
24310
- separator.className = "settings-account-plan-separator";
24311
24710
  separator.textContent = "\xB7";
24312
24711
  separator.setAttribute("aria-hidden", "true");
24313
24712
  metadata.append(separator);
24314
24713
  }
24315
24714
  const plan = document2.createElement("span");
24316
- plan.className = account.planType === "pro" || account.planType === "prolite" ? "settings-account-plan settings-account-plan--highlighted" : "settings-account-plan";
24317
- plan.textContent = planLabel;
24715
+ plan.className = input.highlighted ? "settings-account-plan settings-account-plan--highlighted" : "settings-account-plan";
24716
+ plan.textContent = input.plan;
24717
+ plan.translate = false;
24318
24718
  metadata.append(plan);
24319
24719
  }
24320
- if (metadata.childElementCount > 0) identity.append(metadata);
24321
- person.append(mark, identity);
24322
- personCell.append(person);
24323
- const usageCell = document2.createElement("td");
24720
+ if (input.active) {
24721
+ const badge = document2.createElement("span");
24722
+ badge.className = "settings-account-active";
24723
+ badge.textContent = messages.accountDefaultBadge;
24724
+ badge.title = messages.accountDefaultHint;
24725
+ metadata.append(badge);
24726
+ }
24727
+ identity.append(title);
24728
+ if (metadata.childElementCount) identity.append(metadata);
24729
+ person.append(input.mark, identity);
24730
+ return person;
24731
+ }
24732
+ function renderAccountRows(document2, account, messages, input) {
24733
+ const row = document2.createElement("tr");
24734
+ row.className = "settings-account-row";
24735
+ row.dataset.accountId = account.accountId;
24736
+ row.dataset.accountFocus = `${account.accountId}:row`;
24737
+ row.tabIndex = -1;
24738
+ const name = codexAccountDisplayName(account);
24739
+ row.setAttribute("aria-label", name.full);
24740
+ const personCell = document2.createElement("td");
24741
+ personCell.className = "settings-account-person-cell";
24742
+ const mark = document2.createElement("div");
24743
+ mark.className = "settings-account-row__mark";
24744
+ mark.setAttribute("aria-hidden", "true");
24745
+ mark.append(createRendererSettingsIcon("terminal", 17));
24746
+ personCell.append(
24747
+ createAccountPerson(document2, messages, {
24748
+ name: name.full,
24749
+ agent: "Codex",
24750
+ plan: accountPlanLabel(account.planType),
24751
+ highlighted: account.planType === "pro" || account.planType === "prolite",
24752
+ active: account.active,
24753
+ mark
24754
+ })
24755
+ );
24324
24756
  const usage = renderAccountUsage(document2, input.usage, messages, input.display, input.onRetry);
24325
- if (usage) usageCell.append(usage);
24326
- const resetCell = document2.createElement("td");
24327
- const resetLabel2 = document2.createElement("span");
24328
- resetLabel2.className = "settings-account-mobile-label";
24329
- resetLabel2.textContent = messages.accountResetCredits;
24330
- resetCell.append(resetLabel2);
24757
+ if (usage.additional) personCell.append(usage.additional);
24331
24758
  const actionsCell = document2.createElement("td");
24759
+ actionsCell.className = "settings-account-management-cell";
24760
+ const management = document2.createElement("div");
24761
+ management.className = "settings-account-management";
24332
24762
  const actions = document2.createElement("div");
24333
24763
  actions.className = "settings-account-actions";
24334
24764
  if (!account.active) {
@@ -24336,6 +24766,7 @@ ${error51.stderrTail}`] : []
24336
24766
  activate.type = "button";
24337
24767
  activate.className = "settings-account-action";
24338
24768
  activate.textContent = messages.accountUse;
24769
+ activate.title = messages.accountDefaultHint;
24339
24770
  activate.dataset.accountFocus = `${account.accountId}:activate`;
24340
24771
  activate.disabled = input.actionsDisabled;
24341
24772
  activate.addEventListener("click", input.onActivate);
@@ -24351,30 +24782,45 @@ ${error51.stderrTail}`] : []
24351
24782
  signIn.addEventListener("click", input.onSignIn);
24352
24783
  actions.append(signIn);
24353
24784
  }
24785
+ const more = [];
24786
+ if (account.email && input.usage) {
24787
+ const refresh = document2.createElement("button");
24788
+ refresh.type = "button";
24789
+ refresh.className = "settings-account-action";
24790
+ refresh.textContent = messages.accountCreditsRefresh;
24791
+ refresh.dataset.accountFocus = `${account.accountId}:refresh`;
24792
+ refresh.disabled = input.actionsDisabled || input.usage.status === "loading";
24793
+ refresh.addEventListener("click", input.onRetry);
24794
+ more.push(refresh);
24795
+ }
24354
24796
  if (!account.isDefault) {
24355
24797
  const remove = document2.createElement("button");
24356
24798
  remove.type = "button";
24357
- remove.className = "settings-icon-button settings-account-delete";
24358
- remove.title = messages.accountDelete;
24799
+ remove.className = "settings-account-action settings-account-delete";
24800
+ remove.textContent = messages.accountDelete;
24359
24801
  remove.dataset.accountFocus = `${account.accountId}:delete`;
24360
24802
  remove.setAttribute("aria-label", `${messages.accountDelete}: ${name.full}`);
24361
24803
  remove.disabled = input.actionsDisabled;
24362
- remove.append(createRendererSettingsIcon("trash", 16));
24363
24804
  remove.addEventListener("click", input.onDelete);
24364
- actions.append(remove);
24365
- }
24366
- actionsCell.append(actions);
24367
- row.append(personCell, usageCell, resetCell, actionsCell);
24805
+ more.push(remove);
24806
+ }
24807
+ if (more.length)
24808
+ actions.append(
24809
+ createAccountDetails(document2, messages, {
24810
+ label: messages.accountMore,
24811
+ triggerLabel: `${name.full} \xB7 ${messages.accountMore}`,
24812
+ description: name.full,
24813
+ focusKey: `${account.accountId}:more`,
24814
+ icon: "ellipsis",
24815
+ disabled: input.actionsDisabled,
24816
+ actions: more
24817
+ })
24818
+ );
24819
+ management.append(actions);
24820
+ actionsCell.append(management);
24821
+ row.append(personCell, ...usage.cells, actionsCell);
24368
24822
  const reset = input.usage?.status === "ready" ? renderAccountResetCredits(document2, input.usage.credits, messages, input) : null;
24369
- if (!reset) {
24370
- const unknown2 = document2.createElement("span");
24371
- unknown2.className = "settings-account-unknown";
24372
- unknown2.textContent = "\u2014";
24373
- unknown2.title = messages.accountResetCreditsUnknown;
24374
- unknown2.setAttribute("aria-label", messages.accountResetCreditsUnknown);
24375
- resetCell.append(unknown2);
24376
- return [row];
24377
- }
24823
+ if (!reset) return [row];
24378
24824
  const detailsRow = document2.createElement("tr");
24379
24825
  detailsRow.className = "settings-account-details-row";
24380
24826
  detailsRow.id = `settings-account-reset-${++resetDetailsSequence}`;
@@ -24391,120 +24837,84 @@ ${error51.stderrTail}`] : []
24391
24837
  reset.summary.setAttribute("aria-expanded", String(!detailsRow.hidden));
24392
24838
  input.onResetExpanded(!detailsRow.hidden);
24393
24839
  });
24394
- resetCell.append(reset.summary);
24840
+ management.append(reset.summary);
24395
24841
  return [row, detailsRow];
24396
24842
  }
24843
+ function renderHarnessAccountRow(document2, account, messages, display) {
24844
+ const row = document2.createElement("tr");
24845
+ row.className = "settings-account-row";
24846
+ row.dataset.harnessId = account.harnessId;
24847
+ row.tabIndex = -1;
24848
+ const name = account.email ?? account.label ?? account.harnessName;
24849
+ row.setAttribute("aria-label", name);
24850
+ const personCell = document2.createElement("td");
24851
+ personCell.className = "settings-account-person-cell";
24852
+ const logo = document2.createElement("div");
24853
+ logo.className = "settings-harness-account__logo";
24854
+ logo.setAttribute("aria-hidden", "true");
24855
+ const agent = KNOWN_RENDERER_AGENTS.find((agent2) => agent2 === account.harnessId);
24856
+ if (agent) logo.append(createRendererAgentIcon(agent, 26, document2));
24857
+ personCell.append(
24858
+ createAccountPerson(document2, messages, {
24859
+ name,
24860
+ agent: account.harnessName,
24861
+ plan: account.plan ?? null,
24862
+ mark: logo
24863
+ })
24864
+ );
24865
+ const usage = renderAccountUsage(
24866
+ document2,
24867
+ { status: "ready", credits: account.credits },
24868
+ messages,
24869
+ display,
24870
+ () => void 0
24871
+ );
24872
+ if (usage.additional) personCell.append(usage.additional);
24873
+ const managementCell = document2.createElement("td");
24874
+ managementCell.className = "settings-account-management-cell";
24875
+ const management = document2.createElement("div");
24876
+ management.className = "settings-account-native";
24877
+ const label = document2.createElement("span");
24878
+ label.textContent = messages.accountNativeManaged;
24879
+ const info = createAccountDetails(document2, messages, {
24880
+ label: `${account.harnessName} \xB7 ${messages.accountNativeManaged}`,
24881
+ description: messages.accountNativeManagementHint.replace("{harness}", account.harnessName),
24882
+ focusKey: `harness:${account.harnessId}:info`,
24883
+ icon: "info",
24884
+ actions: []
24885
+ });
24886
+ management.append(label, info);
24887
+ managementCell.append(management);
24888
+ row.append(personCell, ...usage.cells, managementCell);
24889
+ return row;
24890
+ }
24397
24891
 
24398
24892
  // src/settings/harness-accounts.ts
24399
- function mountHarnessAccounts(context, messages, getClient, onChange) {
24400
- const document2 = context.content.ownerDocument;
24401
- const section = document2.createElement("section");
24402
- section.className = "settings-harness-accounts";
24403
- section.hidden = true;
24404
- const heading = document2.createElement("h2");
24405
- heading.className = "settings-harness-accounts__title";
24406
- heading.textContent = messages.harnessAccountsTitle;
24407
- const list = document2.createElement("div");
24408
- list.className = "settings-account-list";
24409
- section.append(heading, list);
24410
- context.content.append(section);
24893
+ function createHarnessAccounts(signal, getClient, onChange) {
24411
24894
  let accounts = [];
24412
24895
  let refreshing = false;
24413
- let query = "";
24414
- let display = "remaining";
24415
- const render = () => {
24416
- section.hidden = accounts.length === 0;
24417
- list.replaceChildren();
24418
- const visible = accounts.filter(
24419
- (account) => `${account.harnessName} ${account.email ?? ""} ${account.label ?? ""} ${account.plan ?? ""}`.toLocaleLowerCase().includes(query)
24420
- );
24421
- for (const account of visible) {
24422
- const row = document2.createElement("article");
24423
- row.className = "settings-harness-account";
24424
- row.dataset.harnessId = account.harnessId;
24425
- const identity = document2.createElement("div");
24426
- identity.className = "settings-harness-account__identity";
24427
- const name = document2.createElement("strong");
24428
- name.className = "settings-account-email";
24429
- const accountName = account.email ?? account.label;
24430
- name.textContent = accountName ?? account.harnessName;
24431
- name.title = name.textContent;
24432
- identity.append(name);
24433
- const metadata = document2.createElement("div");
24434
- metadata.className = "settings-account-metadata";
24435
- if (accountName) {
24436
- const harness = document2.createElement("span");
24437
- harness.textContent = account.harnessName;
24438
- metadata.append(harness);
24439
- }
24440
- if (account.plan) {
24441
- if (accountName) {
24442
- const separator = document2.createElement("span");
24443
- separator.textContent = "\xB7";
24444
- separator.setAttribute("aria-hidden", "true");
24445
- metadata.append(separator);
24446
- }
24447
- const plan = document2.createElement("span");
24448
- plan.className = "settings-account-plan";
24449
- plan.textContent = account.plan;
24450
- metadata.append(plan);
24451
- }
24452
- if (metadata.childElementCount) identity.append(metadata);
24453
- const usage = renderAccountUsage(
24454
- document2,
24455
- { status: "ready", credits: account.credits },
24456
- messages,
24457
- display,
24458
- () => void 0
24459
- );
24460
- const person = document2.createElement("div");
24461
- person.className = "settings-account-row__person";
24462
- const agent = KNOWN_RENDERER_AGENTS.find((agent2) => agent2 === account.harnessId);
24463
- if (agent) {
24464
- const logo = document2.createElement("div");
24465
- logo.className = "settings-harness-account__logo";
24466
- logo.setAttribute("aria-hidden", "true");
24467
- logo.append(createRendererAgentIcon(agent, 28, document2));
24468
- person.append(logo);
24469
- }
24470
- person.append(identity);
24471
- row.append(person);
24472
- if (usage) row.append(usage);
24473
- list.append(row);
24474
- }
24475
- if (accounts.length && !visible.length) {
24476
- const empty = document2.createElement("p");
24477
- empty.className = "settings-account-empty";
24478
- empty.textContent = messages.accountNoMatches;
24479
- list.append(empty);
24480
- }
24481
- };
24482
24896
  return {
24897
+ get accounts() {
24898
+ return accounts;
24899
+ },
24483
24900
  get refreshing() {
24484
24901
  return refreshing;
24485
24902
  },
24486
- update(nextQuery, nextDisplay) {
24487
- query = nextQuery;
24488
- display = nextDisplay;
24489
- render();
24490
- },
24491
24903
  async refresh() {
24492
- if (refreshing || context.signal.aborted) return;
24904
+ if (refreshing || signal.aborted) return;
24493
24905
  const client = getClient();
24494
24906
  if (!client?.listHarnessAccounts) return;
24495
24907
  refreshing = true;
24496
24908
  onChange();
24497
24909
  try {
24498
24910
  const result = await client.listHarnessAccounts();
24499
- if (!context.signal.aborted) accounts = result.accounts;
24911
+ if (!signal.aborted)
24912
+ accounts = [...result.accounts].sort((a, b) => a.harnessId.localeCompare(b.harnessId));
24500
24913
  } catch {
24501
- if (!context.signal.aborted) accounts = [];
24914
+ if (!signal.aborted) accounts = [];
24502
24915
  } finally {
24503
24916
  refreshing = false;
24504
- if (!context.signal.aborted) {
24505
- render();
24506
- onChange();
24507
- }
24917
+ if (!signal.aborted) onChange();
24508
24918
  }
24509
24919
  }
24510
24920
  };
@@ -24524,16 +24934,13 @@ ${error51.stderrTail}`] : []
24524
24934
  const header = document2.createElement("div");
24525
24935
  header.className = "settings-account-header";
24526
24936
  const copy = document2.createElement("div");
24527
- const eyebrow = document2.createElement("p");
24528
- eyebrow.className = "settings-account-eyebrow";
24529
- eyebrow.textContent = "ACCOUNT MANAGEMENT";
24530
24937
  const heading = document2.createElement("h1");
24531
24938
  heading.className = "settings-section-label";
24532
24939
  heading.textContent = messages.pageLabels.accounts;
24533
24940
  const description = document2.createElement("p");
24534
24941
  description.className = "settings-page-description";
24535
24942
  description.textContent = messages.accountsDescription;
24536
- copy.append(eyebrow, heading, description);
24943
+ copy.append(heading, description);
24537
24944
  const add = document2.createElement("button");
24538
24945
  add.type = "button";
24539
24946
  add.className = "settings-command-button";
@@ -24542,29 +24949,6 @@ ${error51.stderrTail}`] : []
24542
24949
  const status = document2.createElement("p");
24543
24950
  status.className = "settings-account-status";
24544
24951
  status.setAttribute("aria-live", "polite");
24545
- const helpRow = document2.createElement("div");
24546
- helpRow.className = "settings-account-help-row";
24547
- const taskHint = document2.createElement("p");
24548
- taskHint.className = "settings-account-task-hint";
24549
- const taskHintText = document2.createElement("span");
24550
- taskHintText.textContent = messages.accountTaskHint;
24551
- taskHint.append(createRendererSettingsIcon("info", 16), taskHintText);
24552
- const help = document2.createElement("button");
24553
- help.type = "button";
24554
- help.className = "settings-account-help-button";
24555
- help.append(createRendererSettingsIcon("help", 16), messages.accountLoginHelp);
24556
- help.setAttribute("aria-expanded", "false");
24557
- help.setAttribute("aria-controls", "settings-account-login-help");
24558
- const deviceCodeNote = document2.createElement("p");
24559
- deviceCodeNote.id = "settings-account-login-help";
24560
- deviceCodeNote.className = "settings-account-device-code-note";
24561
- deviceCodeNote.textContent = messages.accountDeviceCodePrerequisite;
24562
- deviceCodeNote.hidden = true;
24563
- help.addEventListener("click", () => {
24564
- deviceCodeNote.hidden = !deviceCodeNote.hidden;
24565
- help.setAttribute("aria-expanded", String(!deviceCodeNote.hidden));
24566
- });
24567
- helpRow.append(taskHint, help);
24568
24952
  const toolbar = document2.createElement("div");
24569
24953
  toolbar.className = "settings-account-toolbar";
24570
24954
  const connected = document2.createElement("div");
@@ -24612,9 +24996,10 @@ ${error51.stderrTail}`] : []
24612
24996
  toolbar.append(connected, searchWrapper, displayControls, refreshUsage);
24613
24997
  const list = document2.createElement("div");
24614
24998
  list.className = "settings-account-list";
24615
- const { table, body } = createAccountsTable(document2, messages);
24999
+ const { table, body, updateDisplay } = createAccountsTable(document2, messages);
24616
25000
  list.append(table);
24617
- context.content.append(header, helpRow, deviceCodeNote, status, toolbar, list);
25001
+ context.content.append(header, status, toolbar, list);
25002
+ const stopCountdowns = mountAccountResetCountdowns(list, messages, context.signal);
24618
25003
  let accounts = [];
24619
25004
  let accountCreating = false;
24620
25005
  let accountActivating = false;
@@ -24664,18 +25049,21 @@ ${error51.stderrTail}`] : []
24664
25049
  const restoreFocus = accountListFocusRestorer(list, search);
24665
25050
  body.replaceChildren();
24666
25051
  status.textContent = loginMessage ?? "";
24667
- connectedCount.textContent = String(accounts.filter((account) => account.email).length);
25052
+ connectedCount.textContent = String(accounts.length + harnessAccounts.accounts.length);
25053
+ updateDisplay(usageDisplay);
24668
25054
  search.disabled = login !== null || loginStartingAccountId !== null;
24669
25055
  for (const [display, button] of displayButtons) {
24670
25056
  button.setAttribute("aria-pressed", String(display === usageDisplay));
24671
25057
  }
24672
25058
  refreshUsage.disabled = (!getClient()?.inspectCodexAccountUsage || !accounts.some((account) => account.email)) && !getClient()?.listHarnessAccounts || harnessAccounts?.refreshing === true || [...usageByAccountId.values()].some((usage) => usage.status === "loading") || accountBusy();
24673
25059
  const query = search.value.trim().toLocaleLowerCase();
24674
- harnessAccounts?.update(query, usageDisplay);
24675
25060
  const visibleAccounts = accounts.filter(
24676
- (account) => `${account.email ?? ""} ${account.label}`.toLocaleLowerCase().includes(query)
25061
+ (account) => `Codex ${account.email ?? ""} ${account.label} ${accountPlanLabel(account.planType) ?? ""}`.toLocaleLowerCase().includes(query)
24677
25062
  );
24678
- if (visibleAccounts.length === 0) {
25063
+ const visibleHarnessAccounts = harnessAccounts.accounts.filter(
25064
+ (account) => `${account.harnessName} ${account.email ?? ""} ${account.label ?? ""} ${account.plan ?? ""}`.toLocaleLowerCase().includes(query)
25065
+ );
25066
+ if (visibleAccounts.length + visibleHarnessAccounts.length === 0) {
24679
25067
  const emptyRow = document2.createElement("tr");
24680
25068
  const emptyCell = document2.createElement("td");
24681
25069
  emptyCell.colSpan = 4;
@@ -24760,6 +25148,9 @@ ${error51.stderrTail}`] : []
24760
25148
  body.append(verificationRow);
24761
25149
  }
24762
25150
  }
25151
+ for (const account of visibleHarnessAccounts) {
25152
+ body.append(renderHarnessAccountRow(document2, account, messages, usageDisplay));
25153
+ }
24763
25154
  restoreFocus();
24764
25155
  };
24765
25156
  const client = () => {
@@ -24990,10 +25381,11 @@ ${error51.stderrTail}`] : []
24990
25381
  });
24991
25382
  } catch {
24992
25383
  }
24993
- const harnessAccounts = mountHarnessAccounts(context, messages, getClient, render);
25384
+ const harnessAccounts = createHarnessAccounts(context.signal, getClient, render);
24994
25385
  void harnessAccounts.refresh();
24995
25386
  load();
24996
25387
  return () => {
25388
+ stopCountdowns();
24997
25389
  clearLoginRefresh();
24998
25390
  unsubscribe?.();
24999
25391
  };
@@ -25485,6 +25877,7 @@ ${error51.stderrTail}`] : []
25485
25877
  createConnectionsSettingsPage(messages, getDiagnostics),
25486
25878
  createAccountsSettingsPage(messages, getAccountClient),
25487
25879
  createSessionImportSettingsPage(messages, getSessionImportClient, openImportedThread),
25880
+ createAppearanceSettingsPage(messages),
25488
25881
  updatesPage(messages, getUpdateClient),
25489
25882
  aboutPage(messages)
25490
25883
  ]);
@@ -25503,10 +25896,10 @@ ${error51.stderrTail}`] : []
25503
25896
  }
25504
25897
 
25505
25898
  // src/settings/shell.css
25506
- 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';
25899
+ 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';
25507
25900
 
25508
25901
  // src/settings/accounts.css
25509
- 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';
25902
+ 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';
25510
25903
 
25511
25904
  // src/settings/shell.ts
25512
25905
  var SETTINGS_SHELL_ATTRIBUTE = "data-codexhost-settings-shell";
@@ -26138,7 +26531,9 @@ ${accounts_default}`;
26138
26531
  grok: harnessIdSchema.parse("grok"),
26139
26532
  omp: harnessIdSchema.parse("omp"),
26140
26533
  antigravity: harnessIdSchema.parse("antigravity"),
26141
- "kiro-cli": harnessIdSchema.parse("kiro-cli")
26534
+ "kiro-cli": harnessIdSchema.parse("kiro-cli"),
26535
+ codebuddy: harnessIdSchema.parse("codebuddy"),
26536
+ "cursor-cli": harnessIdSchema.parse("cursor-cli")
26142
26537
  };
26143
26538
  var externalAgents = [
26144
26539
  "pi",
@@ -26148,7 +26543,9 @@ ${accounts_default}`;
26148
26543
  "grok",
26149
26544
  "omp",
26150
26545
  "antigravity",
26151
- "kiro-cli"
26546
+ "kiro-cli",
26547
+ "codebuddy",
26548
+ "cursor-cli"
26152
26549
  ];
26153
26550
  function isRetryableHarnessAvailability(availability, error51) {
26154
26551
  return availability !== void 0 && availability !== "ready" && availability !== "notInstalled" && error51?.retryable === true;
@@ -26318,16 +26715,16 @@ ${accounts_default}`;
26318
26715
  ...permissionModeId ? { permissionModeId } : {}
26319
26716
  };
26320
26717
  }
26321
- if (inspection.harnessId === "kiro-cli") {
26718
+ if (inspection.harnessId === "kiro-cli" || inspection.harnessId === "codebuddy" || inspection.harnessId === "cursor-cli") {
26322
26719
  const route = decodeHarnessPluginRoute(inspection.transportModelId);
26323
- if (!route || route.harnessId !== "kiro-cli") {
26324
- throw new Error("Kiro CLI Thread reported an incompatible transport Model");
26720
+ if (!route || route.harnessId !== inspection.harnessId) {
26721
+ throw new Error("Plugin Thread reported an incompatible transport Model");
26325
26722
  }
26326
26723
  const model = inspection.effectiveModel ?? route.model;
26327
- const thinkingOptionId = inspection.availableThinkingOptions !== void 0 ? selectableThinkingOptionId(inspection) : inspection.effectiveThinkingOptionId ?? route.thinkingOptionId;
26724
+ const thinkingOptionId = inspection.harnessId === "cursor-cli" ? void 0 : inspection.availableThinkingOptions !== void 0 ? selectableThinkingOptionId(inspection) : inspection.effectiveThinkingOptionId ?? route.thinkingOptionId;
26328
26725
  const permissionModeId = inspection.effectivePermissionModeId ?? route.permissionModeId;
26329
26726
  return {
26330
- agent: "kiro-cli",
26727
+ agent: inspection.harnessId,
26331
26728
  ...model ? { model } : {},
26332
26729
  ...thinkingOptionId ? { thinkingOptionId } : {},
26333
26730
  ...permissionModeId ? { permissionModeId } : {}
@@ -26406,6 +26803,7 @@ ${accounts_default}`;
26406
26803
  const mountedByComposer = /* @__PURE__ */ new Map();
26407
26804
  const pendingReplacements = /* @__PURE__ */ new Map();
26408
26805
  let disposed = false;
26806
+ const disposeReasoningSoftWrap = installReasoningTranscriptSoftWrap(document);
26409
26807
  let scanScheduled = false;
26410
26808
  let refreshTargetsOnNextScan = false;
26411
26809
  let adapterDispose = null;
@@ -26476,7 +26874,9 @@ ${accounts_default}`;
26476
26874
  grok: void 0,
26477
26875
  omp: void 0,
26478
26876
  antigravity: void 0,
26479
- "kiro-cli": void 0
26877
+ "kiro-cli": void 0,
26878
+ codebuddy: void 0,
26879
+ "cursor-cli": void 0
26480
26880
  },
26481
26881
  webUi: Object.fromEntries(
26482
26882
  externalAgents.map((agent) => [agent, false])
@@ -28225,6 +28625,7 @@ ${accounts_default}`;
28225
28625
  applyAdapterAgent = null;
28226
28626
  modelControl = null;
28227
28627
  mutationObserver.disconnect();
28628
+ disposeReasoningSoftWrap();
28228
28629
  sidebarAgentIcons.dispose();
28229
28630
  settingsLifecycle.dispose();
28230
28631
  document.removeEventListener("beforeinput", onBeforeInput, true);
@@ -28307,6 +28708,7 @@ lucide/dist/esm/icons/circle-off.mjs:
28307
28708
  lucide/dist/esm/icons/copy.mjs:
28308
28709
  lucide/dist/esm/icons/download.mjs:
28309
28710
  lucide/dist/esm/icons/external-link.mjs:
28711
+ lucide/dist/esm/icons/ellipsis.mjs:
28310
28712
  lucide/dist/esm/icons/folder-input.mjs:
28311
28713
  lucide/dist/esm/icons/grip-vertical.mjs:
28312
28714
  lucide/dist/esm/icons/info.mjs: