jupyterlab-codex-sidebar 0.1.4 → 0.1.6

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.
Files changed (153) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/.github/workflows/unit-tests.yml +27 -0
  3. package/.jupyterlab-playwright.log +0 -0
  4. package/README.md +83 -9
  5. package/docs/images/codex-sidebar-screenshot.png +0 -0
  6. package/jupyterlab_codex/handlers.py +938 -297
  7. package/jupyterlab_codex/labextension/package.json +13 -3
  8. package/jupyterlab_codex/labextension/static/525.224526d045c727069de6.js +2 -0
  9. package/jupyterlab_codex/labextension/static/737.e7de3ad9dd6ded798340.js +1 -0
  10. package/jupyterlab_codex/labextension/static/remoteEntry.6ef5e7167763a316c000.js +1 -0
  11. package/jupyterlab_codex/protocol.py +297 -0
  12. package/jupyterlab_codex/runner.py +58 -15
  13. package/jupyterlab_codex/sessions.py +582 -97
  14. package/lib/codexChat.d.ts +13 -0
  15. package/lib/codexChat.js +2506 -0
  16. package/lib/codexChat.js.map +1 -0
  17. package/lib/codexChatAttachmentDedup.d.ts +10 -0
  18. package/lib/codexChatAttachmentDedup.js +35 -0
  19. package/lib/codexChatAttachmentDedup.js.map +1 -0
  20. package/lib/codexChatAttachmentLimit.d.ts +18 -0
  21. package/lib/codexChatAttachmentLimit.js +50 -0
  22. package/lib/codexChatAttachmentLimit.js.map +1 -0
  23. package/lib/codexChatAttachmentState.d.ts +15 -0
  24. package/lib/codexChatAttachmentState.js +16 -0
  25. package/lib/codexChatAttachmentState.js.map +1 -0
  26. package/lib/codexChatDocumentUtils.d.ts +70 -0
  27. package/lib/codexChatDocumentUtils.js +506 -0
  28. package/lib/codexChatDocumentUtils.js.map +1 -0
  29. package/lib/codexChatFormatting.d.ts +11 -0
  30. package/lib/codexChatFormatting.js +83 -0
  31. package/lib/codexChatFormatting.js.map +1 -0
  32. package/lib/codexChatNotice.d.ts +3 -0
  33. package/lib/codexChatNotice.js +74 -0
  34. package/lib/codexChatNotice.js.map +1 -0
  35. package/lib/codexChatPersistence.d.ts +35 -0
  36. package/lib/codexChatPersistence.js +158 -0
  37. package/lib/codexChatPersistence.js.map +1 -0
  38. package/lib/codexChatPrimitives.d.ts +44 -0
  39. package/lib/codexChatPrimitives.js +156 -0
  40. package/lib/codexChatPrimitives.js.map +1 -0
  41. package/lib/codexChatRender.d.ts +24 -0
  42. package/lib/codexChatRender.js +293 -0
  43. package/lib/codexChatRender.js.map +1 -0
  44. package/lib/codexChatSessionFactory.d.ts +15 -0
  45. package/lib/codexChatSessionFactory.js +45 -0
  46. package/lib/codexChatSessionFactory.js.map +1 -0
  47. package/lib/codexChatSessionKey.d.ts +3 -0
  48. package/lib/codexChatSessionKey.js +14 -0
  49. package/lib/codexChatSessionKey.js.map +1 -0
  50. package/lib/codexChatStorage.d.ts +4 -0
  51. package/lib/codexChatStorage.js +37 -0
  52. package/lib/codexChatStorage.js.map +1 -0
  53. package/lib/codexSessionResolver.d.ts +12 -0
  54. package/lib/codexSessionResolver.js +38 -0
  55. package/lib/codexSessionResolver.js.map +1 -0
  56. package/lib/handlers/activitySummarizer.d.ts +15 -0
  57. package/lib/handlers/activitySummarizer.js +327 -0
  58. package/lib/handlers/activitySummarizer.js.map +1 -0
  59. package/lib/handlers/codexMessageTypes.d.ts +30 -0
  60. package/lib/handlers/codexMessageTypes.js +2 -0
  61. package/lib/handlers/codexMessageTypes.js.map +1 -0
  62. package/lib/handlers/codexMessageUtils.d.ts +46 -0
  63. package/lib/handlers/codexMessageUtils.js +144 -0
  64. package/lib/handlers/codexMessageUtils.js.map +1 -0
  65. package/lib/handlers/handleCodexSocketMessage.d.ts +107 -0
  66. package/lib/handlers/handleCodexSocketMessage.js +78 -0
  67. package/lib/handlers/handleCodexSocketMessage.js.map +1 -0
  68. package/lib/handlers/sessionSyncHandler.d.ts +34 -0
  69. package/lib/handlers/sessionSyncHandler.js +181 -0
  70. package/lib/handlers/sessionSyncHandler.js.map +1 -0
  71. package/lib/hooks/useCodexSocket.d.ts +15 -0
  72. package/lib/hooks/useCodexSocket.js +84 -0
  73. package/lib/hooks/useCodexSocket.js.map +1 -0
  74. package/lib/index.js +1 -1
  75. package/lib/index.js.map +1 -1
  76. package/lib/panel.d.ts +1 -11
  77. package/lib/panel.js +1 -2815
  78. package/lib/panel.js.map +1 -1
  79. package/lib/protocol.d.ts +235 -0
  80. package/lib/protocol.js +278 -0
  81. package/lib/protocol.js.map +1 -0
  82. package/package.json +13 -3
  83. package/playwright.config.cjs +27 -0
  84. package/playwright.unit.config.cjs +19 -0
  85. package/pyproject.toml +1 -1
  86. package/release.sh +52 -14
  87. package/scripts/run_playwright_e2e.sh +96 -0
  88. package/scripts/run_playwright_freeze_repro.sh +58 -0
  89. package/scripts/run_playwright_queue_repro.sh +60 -0
  90. package/scripts/run_playwright_repro.sh +55 -0
  91. package/src/codexChat.tsx +3914 -0
  92. package/src/codexChatAttachmentDedup.ts +47 -0
  93. package/src/codexChatAttachmentLimit.ts +81 -0
  94. package/src/codexChatAttachmentState.ts +37 -0
  95. package/src/codexChatDocumentUtils.ts +644 -0
  96. package/src/codexChatFormatting.ts +94 -0
  97. package/src/codexChatNotice.ts +95 -0
  98. package/src/codexChatPersistence.ts +191 -0
  99. package/src/codexChatPrimitives.tsx +446 -0
  100. package/src/codexChatRender.tsx +376 -0
  101. package/src/codexChatSessionFactory.ts +79 -0
  102. package/src/codexChatSessionKey.ts +16 -0
  103. package/src/codexChatStorage.ts +36 -0
  104. package/src/codexSessionResolver.ts +56 -0
  105. package/src/handlers/activitySummarizer.ts +369 -0
  106. package/src/handlers/codexMessageTypes.ts +34 -0
  107. package/src/handlers/codexMessageUtils.ts +217 -0
  108. package/src/handlers/handleCodexSocketMessage.ts +204 -0
  109. package/src/handlers/sessionSyncHandler.ts +308 -0
  110. package/src/hooks/useCodexSocket.ts +109 -0
  111. package/src/index.ts +1 -1
  112. package/src/panel.tsx +1 -4184
  113. package/src/protocol.ts +582 -0
  114. package/style/index.css +480 -11
  115. package/test-results/.last-run.json +4 -0
  116. package/test.py +0 -0
  117. package/tests/e2e/cell-output-error-tail.spec.js +156 -0
  118. package/tests/e2e/codex-ui-test-helpers.js +138 -0
  119. package/tests/e2e/fixtures/notebooks/error-output-tail.ipynb +58 -0
  120. package/tests/e2e/fixtures/notebooks/error-output-tail.py +19 -0
  121. package/tests/e2e/fixtures/notebooks/tab1.ipynb +322 -0
  122. package/tests/e2e/fixtures/notebooks/tab1.py +272 -0
  123. package/tests/e2e/fixtures/notebooks/tab2.ipynb +252 -0
  124. package/tests/e2e/fixtures/notebooks/tab2.py +231 -0
  125. package/tests/e2e/fixtures/notebooks/tab3.ipynb +403 -0
  126. package/tests/e2e/fixtures/notebooks/tab3.py +331 -0
  127. package/tests/e2e/fixtures/notebooks/tab4.py +339 -0
  128. package/tests/e2e/freeze-notebook-tabs-repro.spec.js +295 -0
  129. package/tests/e2e/mock-codex-cli-flood.py +127 -0
  130. package/tests/e2e/mock-codex-cli-prompt-echo.py +88 -0
  131. package/tests/e2e/mock-codex-cli.py +95 -0
  132. package/tests/e2e/queue-multitab-repro.spec.js +189 -0
  133. package/tests/test_handlers.py +116 -0
  134. package/tests/test_protocol.py +169 -0
  135. package/tests/test_session_store_limits.py +50 -0
  136. package/tests/unit/codexChatAttachmentDedup.spec.ts +56 -0
  137. package/tests/unit/codexChatAttachmentLimit.spec.ts +57 -0
  138. package/tests/unit/codexChatAttachmentState.spec.ts +71 -0
  139. package/tests/unit/codexChatDocumentUtils.spec.ts +63 -0
  140. package/tests/unit/codexChatLimit.spec.ts +18 -0
  141. package/tests/unit/codexChatNotice.spec.ts +45 -0
  142. package/tests/unit/codexChatPersistence.spec.ts +199 -0
  143. package/tests/unit/codexChatSessionFactory.spec.ts +94 -0
  144. package/tests/unit/codexChatSessionKey.spec.ts +18 -0
  145. package/tests/unit/codexMessageUtils.spec.ts +89 -0
  146. package/tests/unit/codexSessionResolver.spec.ts +92 -0
  147. package/tests/unit/handleCodexSocketMessage.spec.ts +476 -0
  148. package/tsconfig.tsbuildinfo +1 -1
  149. package/webpack.config.js +6 -0
  150. package/jupyterlab_codex/labextension/static/504.335f3447c84ba3d74517.js +0 -2
  151. package/jupyterlab_codex/labextension/static/972.8e856719e40acc1ef4cb.js +0 -1
  152. package/jupyterlab_codex/labextension/static/remoteEntry.a2982f776a1f0f515640.js +0 -1
  153. /package/jupyterlab_codex/labextension/static/{504.335f3447c84ba3d74517.js.LICENSE.txt → 525.224526d045c727069de6.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunkjupyterlab_codex_sidebar=self.webpackChunkjupyterlab_codex_sidebar||[]).push([[737],{6737(e,n,t){t.r(n),t.d(n,{default:()=>ht});var o=t(5285),r=t(2931),i=t(4848),a=t(3345),s=t.n(a),c=t(1125),d=t(4526);function l(e){if(!Array.isArray(e))return[];const n=new Set,t=[];for(const o of e){if(!o||"object"!=typeof o)continue;const e=o.model,r=o.displayName,i=o.reasoningEfforts??o.supportedReasoningEfforts,a=o.defaultReasoningEffort;if("string"!=typeof e)continue;const s=e.trim();if(!s||n.has(s))continue;n.add(s);const c="string"==typeof r&&r.trim()?r.trim():s,d="string"==typeof a&&a.trim()?a.trim():"",l=Array.isArray(i)?i.reduce((e,n)=>{const t=p(n);return!t||e.includes(t)||e.push(t),e},[]):[];t.push({model:s,displayName:c,...l.length>0?{reasoningEfforts:l}:{},...d?{defaultReasoningEffort:d}:{}})}return t}function p(e){if("string"==typeof e)return e.trim();if(e&&"object"==typeof e&&"reasoningEffort"in e){const n=e.reasoningEffort;return"string"==typeof n?n.trim():""}return""}function u(e,n){return e.length<=n?e:n<=3?e.slice(0,n):`${e.slice(0,n-3)}...`}function x(e,n={}){if(!e||"object"!=typeof e)return;const t=e,o="string"==typeof t.locationLabel?t.locationLabel.trim():"",r=n.normalize??(e=>e.trim()),i=n.maxChars??500,a="string"==typeof t.previewText?u(r(t.previewText),i):"";return o&&a?{locationLabel:o,previewText:a}:void 0}function f(e){if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e){const n=e.trim();if(!n)return null;const t=Number(n);return Number.isFinite(t)?t:null}return null}function m(e){if(!e||"object"!=typeof e)return null;const n=e,t=f(n.usedPercent),o=f(n.windowMinutes),r=f(n.resetsAt);return{usedPercent:t,windowMinutes:null===o?null:Math.round(o),resetsAt:null===r?null:Math.round(r)}}function g(e){if(!e||"object"!=typeof e)return null;const n=e,t=f(n.windowTokens),o=f(n.usedTokens),r=f(n.leftTokens),i=f(n.usedPercent),a=null===t?null:Math.round(t),s=null===o?null:Math.round(o),c=null===r?null:Math.round(r);return null==a&&null==s&&null==c&&null==i?null:{windowTokens:a,usedTokens:s,leftTokens:c,usedPercent:i}}function h(e){if(!e||"object"!=typeof e)return{};const n=e;return Object.prototype.hasOwnProperty.call(n,"selectionPreview")||Object.prototype.hasOwnProperty.call(n,"cellOutputPreview")?{selectionPreview:n.selectionPreview,cellOutputPreview:n.cellOutputPreview}:Object.prototype.hasOwnProperty.call(n,"locationLabel")&&Object.prototype.hasOwnProperty.call(n,"previewText")?{selectionPreview:n}:{}}const b=/^(?:session started|session start|new thread started)/i,v=/^(?:session start:|new thread started:)/i,C=/^(?:session|new thread|new session|thread|conversation|セッション|スレッド|チャット|会話|会議|会话|对话|대화|세션|새로운\s*세션|새\s*세션|스레드|새로운\s*스레드|새\s*스레드|sesión|conversación|conversacion|hilo|nueva sesión|nuevo hilo)/i,j=/(?:start(?:ed|ing)?|started|start|resume|resumed|resolving|initialize(?:d|s)?|initializing|restarted|reopen|restart|시작|시작됨|시작되었습니다|起動|开始|已开始|已啟動|開始|開始しました|开始しました|已啟動しました|始ま|始動|会话开始|会議開始|会話開始|会話を開始|iniciada|iniciado|iniciar|inicio|inicio de|comenzó|comenzada|开始しました|始動|開始され|始まった)/i;function y(e){return e.replace(/\s+/g," ").trim()}const w=new Set(["client","client-new","force-new","mapping","mapping-on-missing","mapping-on-mismatch","new","new-on-mismatch"]);function k(e){return"string"==typeof e&&w.has(e.trim().toLowerCase())}function S(e){const n=e.trim(),{rest:t,value:o}=function(e){const n=e.trim();if(!n.endsWith(")"))return{rest:n,value:null};const t=n.lastIndexOf("(");if(t<0)return{rest:n,value:null};const o=n.slice(t+1,-1).trim();return o?{rest:n.slice(0,t).trimEnd(),value:o}:{rest:n,value:null}}(n);if(b.test(t)||v.test(t))return"Session started"+((r=o)?` (${r})`:"");var r;const i=y(t);return C.test(i)&&j.test(i)&&function(e){const n=e.slice(0,72);return C.test(n)}(i)&&i.length<=120?`${i}${o?` (${o})`:""}`:null}function M(e,n){if(k(n))return!0;if(null!==S(e))return!0;const t=y(e.trimStart());return v.test(t)||/^(?:new thread started|session started|session start)/i.test(t)||C.test(t)&&j.test(t)}function N(e,n){return{kind:"text",id:crypto.randomUUID(),role:"system",text:e.normalizeSystemText("system","Session started"),sessionResolution:n}}function P(e,n,t){const o="boolean"==typeof t?.pairedOk?t.pairedOk:null,r="string"==typeof t?.pairedPath?t.pairedPath:"",i="string"==typeof t?.pairedOsPath?t.pairedOsPath:"",a="string"==typeof t?.pairedMessage?t.pairedMessage:"",s=e.coerceNotebookMode(t?.notebookMode);(null!==o||r||i||a||null!==s)&&e.setSessionPairing(n,{pairedOk:o,pairedPath:r,pairedOsPath:i,pairedMessage:a,notebookMode:s})}function B(e,n){if(e.length<=n)return e;if(n<=3)return e.slice(0,n);const t=Math.max(0,Math.floor(.6*(n-3))),o=Math.max(0,n-t-3);return`${e.slice(0,t)}...${e.slice(e.length-o)}`}function A(e,n=220){if(null==e)return"";if("string"==typeof e)return B(e,n);if("number"==typeof e||"boolean"==typeof e)return String(e);try{return B(JSON.stringify(e),n)}catch{return""}}function R(e,n=6e3){try{const t=JSON.stringify(e,null,2);return t.length<=n?t:`${t.slice(0,Math.max(0,n-40))}\n... (truncated)`}catch{return""}}function _(e){const n=(e||"").trim();return n?n.split(/[_-]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):""}var O=t(2707),I=t(854),$=t(8095),E=t(3730),L=t(8690),T=t(3018),z=t(5531),U=t(4868),F=t(7723),D=t(8401),W=t(9730),K=t(2012),H=t(9394);const J=u,V=500;function q(e){return e&&e.context?e.context:null}function Y(e){const n="string"==typeof e?.context?.path?e.context.path.trim():"";if(!n)return"";const t=n.toLowerCase();return t.endsWith(".ipynb")||t.endsWith(".py")?n:""}function Z(e,n){const t=e.shell.currentWidget;return Y(t)?t:n&&!n.isDisposed&&Y(n)?n:null}function G(e,n,t=null){const o=(n||"").trim();if(!o)return null;const r=e.shell.currentWidget;if(Y(r)===o)return r;if(t&&!t.isDisposed&&Y(t)===o)return t;const i=e.shell.widgets("main");if(i&&"function"==typeof i.next)for(;;){const e=i.next();if(!e)break;if(Y(e)===o)return e}return null}function X(e){return(e||"").replace(/\r\n/g,"\n").replace(/\r/g,"\n").trim()}function Q(e){return Boolean(e&&e.content&&"activeCell"in e.content)}function ee(e){return!!e&&(e.scrollHeight>e.clientHeight+1||e.scrollWidth>e.clientWidth+1)}function ne(e){return Boolean(e&&e instanceof HTMLElement)}function te(e,n){return e.matches(n)?e:e.querySelector(n)}function oe(e){const n=e?.content?.node,t=e?.node,o=[n,t].filter(ne);if(0===o.length)return null;const r=[".jp-WindowedPanel-outer",".jp-Notebook .jp-WindowedPanel-outer",".jp-NotebookPanel-notebook .jp-WindowedPanel-outer",".jp-FileEditor .cm-scroller",".jp-FileEditor .jp-CodeMirrorEditor",".cm-scroller",".jp-FileEditor"];for(const e of o)for(const n of r){const t=te(e,n);if(ee(t))return t}for(const e of o)if(ee(e))return e;return null}function re(e,n){if(!e||"function"!=typeof e.getSelection||"function"!=typeof e.getOffsetAt)return null;const t=e.getSelection();if(!t||!t.start||!t.end)return null;const o=Number(e.getOffsetAt(t.start)),r=Number(e.getOffsetAt(t.end));if(!Number.isFinite(o)||!Number.isFinite(r))return null;const i=Math.max(0,Math.min(o,r)),a=Math.max(0,Math.max(o,r));if(a<=i||!n)return null;const s=n.slice(i,a);if(!s)return null;const c=Number(t.start.line),d=Number(t.end.line);return{text:s,startLine:Number.isFinite(c)&&Number.isFinite(d)?Math.max(1,Math.min(c,d)+1):null}}function ie(e,n){const t=re(e,n);return t?.text||""}function ae(e){if(!Q(e))return null;const n=e.content,t=n?.activeCell;if(!t)return null;try{const e="function"==typeof t.model?.sharedModel?.getSource?t.model.sharedModel.getSource():"",o=re(t.editor,"string"==typeof e?e:"");if(!o?.text)return null;const r=Number(n?.activeCellIndex);return{kind:"cell",number:Number.isFinite(r)?Math.max(1,Math.floor(r)+1):1,text:o.text}}catch{return null}}function se(e){if(!e||Q(e))return"";try{const n=e.content?.editor;if(!n)return"";const t="function"==typeof n.model?.sharedModel?.getSource?n.model.sharedModel.getSource():"";return ie(n,"string"==typeof t?t:"")}catch{return""}}function ce(e){if(!e||Q(e))return null;try{const n=e.content?.editor;if(!n)return null;const t="function"==typeof n.model?.sharedModel?.getSource?n.model.sharedModel.getSource():"",o=re(n,"string"==typeof t?t:"");return o?.text?{kind:"line",number:o.startLine??1,text:o.text}:null}catch{return null}}function de(e,n){if(Q(e)||"ipynb"===n||"jupytext_py"===n){const n=Number(e?.content?.activeCellIndex);return Number.isFinite(n)?`Cell ${Math.max(1,Math.floor(n)+1)}`:"Cell"}try{const n=e&&!Q(e)?e.content?.editor:null;if(n&&"function"==typeof n.getCursorPosition){const e=n.getCursorPosition(),t=Number(e?.line);if(Number.isFinite(t))return`Line ${Math.max(1,Math.floor(t)+1)}`}}catch{}return"plain_py"===n?"Line":"Selection"}const le="... (truncated)";function pe(e){return e.replace(/\u001b\[[0-?]*[ -/]*[@-~]/g,"")}function ue(e){return"string"==typeof e?e:Array.isArray(e)?e.filter(e=>"string"==typeof e).join(""):""}function xe(e){if(!e||"object"!=typeof e)return"";const n="string"==typeof e.output_type?e.output_type:"";if(!n)return"";if("stream"===n){const n=ue(e.text);if(!n)return"";const t="string"==typeof e.name?e.name:"",o=pe(n).replace(/\s+$/,"");return o?"stderr"===t?`[stderr]\n${o}`:o:""}if("error"===n){const n=pe((Array.isArray(e.traceback)?e.traceback.filter(e=>"string"==typeof e):[]).join("\n")).replace(/\s+$/,"");return n||["string"==typeof e.ename?e.ename:"","string"==typeof e.evalue?e.evalue:""].filter(Boolean).join(": ").trim()}if("execute_result"===n||"display_data"===n||"update_display_data"===n){const t=e.data&&"object"==typeof e.data?e.data:null;if(!t)return"";const o=ue(t["text/plain"]);if(o){const t=pe(o).replace(/\s+$/,"");return t?"execute_result"===n&&"number"==typeof e.execution_count?`Out[${e.execution_count}]:\n${t}`:t:""}const r=Object.keys(t).filter(e=>e&&"text/plain"!==e);return r.length>0?`[non-text output omitted: ${r.slice(0,6).join(", ")}${r.length>6?", ...":""}]`:""}return""}function fe(e){return Boolean(e&&"object"==typeof e&&"error"===e.output_type)}I.A.registerLanguage("bash",$.A),I.A.registerLanguage("css",E.A),I.A.registerLanguage("diff",L.A),I.A.registerLanguage("javascript",T.A),I.A.registerLanguage("json",z.A),I.A.registerLanguage("markdown",U.A),I.A.registerLanguage("python",F.A),I.A.registerLanguage("sql",D.A),I.A.registerLanguage("typescript",W.A),I.A.registerLanguage("xml",K.A),I.A.registerLanguage("yaml",H.A);let me=null,ge=null;async function he(e){return await new Promise((n,t)=>{const o=new FileReader;o.onload=()=>n(String(o.result||"")),o.onerror=()=>t(o.error||new Error("Failed to read blob")),o.readAsDataURL(e)})}function be(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\"/g,"&quot;").replace(/'/g,"&#39;")}function ve(e,n){const t=be(e);let o=t;try{const t=function(e){const n=e.trim().toLowerCase();return n?{js:"javascript",jsx:"javascript",mjs:"javascript",cjs:"javascript",ts:"typescript",tsx:"typescript",py:"python",sh:"bash",shell:"bash",zsh:"bash",yml:"yaml","c++":"cpp","c#":"csharp","objective-c":"objectivec",objc:"objectivec"}[n]??n:""}(n);if(t&&I.A.getLanguage(t))o=I.A.highlight(e,{language:t,ignoreIllegals:!0}).value;else{const n=function(e){const n=e.trim();return n&&[/^\s*from\s+[A-Za-z0-9_.]+\s+import\s+/m,/^\s*import\s+[A-Za-z0-9_.]+/m,/^\s*def\s+[A-Za-z_][A-Za-z0-9_]*\s*\(/m,/^\s*class\s+[A-Za-z_][A-Za-z0-9_]*\s*(\(|:)/m,/\bNone\b|\bTrue\b|\bFalse\b/,/:\s*$/m].some(e=>e.test(n))?"python":""}(e);o=n&&I.A.getLanguage(n)?I.A.highlight(e,{language:n,ignoreIllegals:!0}).value:I.A.highlightAuto(e).value}}catch{o=t}try{return O.default.sanitize(o,{USE_PROFILES:{html:!0}})}catch{return be(o)}}function Ce(e){const n="disconnected"===e.status?"Disconnected":"running"===e.status?"Running":"Ready";return(0,i.jsx)("span",{className:`jp-CodexStatusPill jp-CodexStatusPill-${e.status}`,role:"img","aria-label":n,title:n,children:(0,i.jsx)("span",{className:"jp-CodexStatusPill-dot","aria-hidden":"true"})})}const je=(0,a.memo)(function(e){const[n,t]=(0,a.useState)(!1),o=(0,a.useMemo)(()=>ve(e.code,e.lang),[e.code,e.lang]);return(0,i.jsxs)("div",{className:"jp-CodexCodeBlockWrap",children:[(0,i.jsxs)("div",{className:"jp-CodexCodeBlockBar",children:[(0,i.jsx)("span",{className:"jp-CodexCodeBlockMeta",children:e.lang?(0,i.jsx)("span",{className:"jp-CodexCodeBlockLang",children:e.lang}):(0,i.jsx)("span",{})}),e.canCopy&&(0,i.jsx)("button",{className:"jp-CodexBtn jp-CodexBtn-ghost jp-CodexBtn-xs jp-CodexCodeBlockCopyBtn",onClick:()=>{!async function(){await async function(e){if(!e)return!1;try{return await navigator.clipboard.writeText(e),!0}catch{try{const n=document.createElement("textarea");n.value=e,n.setAttribute("readonly","true"),n.style.position="fixed",n.style.left="-9999px",document.body.appendChild(n),n.select();const t=document.execCommand("copy");return document.body.removeChild(n),t}catch{return!1}}}(e.code)&&(t(!0),window.setTimeout(()=>t(!1),900))}()},children:n?"Copied":"Copy"})]}),(0,i.jsx)("pre",{className:"jp-CodexCodeBlock",children:(0,i.jsx)("code",{className:"hljs",dangerouslySetInnerHTML:{__html:o}})})]})});je.displayName="CodeBlock";const ye=(0,a.memo)(function(e){const[,n]=(0,a.useState)(0);(0,a.useEffect)(()=>{let e=!1;return async function(){return me||(ge||(ge=Promise.all([t.e(281).then(t.bind(t,4281)),t.e(405).then(t.bind(t,405))]).then(([e,n])=>{const t=e.marked,o=n.default;t.use(o({throwOnError:!1}));const r={parse:e=>t.parse(function(e){return e.replace(/(^|[^\\])\\\[([\s\S]*?)\\\]/g,(e,n,t)=>`${n}\n$$\n${t}\n$$\n`).replace(/(^|[^\\])\\\((.+?)\\\)/g,(e,n,t)=>`${n}$${t}$`).replace(/(^|\n)[ \t]*\[\s*\n([\s\S]*?)\n[ \t]*\](?=\n|$)/g,(e,n,t)=>{const o=t.trim();return(r=o)&&(/\\[A-Za-z]+/.test(r)||/[_^{}]/.test(r))?`${n}\n$$\n${o}\n$$\n`:`${n}[\n${t}\n]`;var r})}(e),{gfm:!0,breaks:!0})};return me=r,r}).catch(e=>{throw ge=null,e})),ge)}().then(()=>{e||n(e=>e+1)}).catch(()=>{}),()=>{e=!0}},[]);const o=function(e){const n=[];let t=e;for(;t.length>0;){const e=t.indexOf("```");if(-1===e){n.push({kind:"text",text:t});break}e>0&&n.push({kind:"text",text:t.slice(0,e)});const o=t.slice(e+3),r=o.indexOf("```");if(-1===r){n.push({kind:"text",text:t.slice(e)});break}const i=o.slice(0,r);t=o.slice(r+3);let a="",s=i;const c=i.indexOf("\n");if(-1!==c){const e=i.slice(0,c).trim();e.length>0&&e.length<=20&&/^[A-Za-z0-9+#_.-]+$/.test(e)&&(a=e,s=i.slice(c+1))}n.push({kind:"code",lang:a,code:s.replace(/\n$/,"")})}return n.filter(e=>"text"!==e.kind||e.text.length>0)}(e.text);return(0,i.jsx)("div",{className:"jp-CodexChat-text",children:o.map((n,t)=>{if("code"===n.kind)return(0,i.jsx)(je,{lang:n.lang,code:n.code,canCopy:Boolean(e.canCopyCode)},t);const o=function(e){if(!e)return"";const n=me;if(!n)return be(e).replace(/\n/g,"<br />");let t="";try{t=n.parse(e)}catch{return be(e).replace(/\n/g,"<br />")}try{return O.default.sanitize(t,{USE_PROFILES:{html:!0}})}catch{return be(e).replace(/\n/g,"<br />")}}(n.text);return(0,i.jsx)("div",{className:"jp-CodexMarkdown",dangerouslySetInnerHTML:{__html:o}},t)})})},(e,n)=>e.text===n.text&&Boolean(e.canCopyCode)===Boolean(n.canCopyCode));function we(e){const n=(t=e.code,J(X(t),500));var t;const o=(0,a.useMemo)(()=>ve(n,""),[n]);return(0,i.jsx)("pre",{className:"jp-CodexCodeBlock jp-CodexChat-selectionCode",children:(0,i.jsx)("code",{className:"hljs",dangerouslySetInnerHTML:{__html:o}})})}function ke(e,n){if(e.length<=n)return e;if(n<=3)return e.slice(0,n);const t=Math.max(0,Math.floor(.6*(n-3))),o=Math.max(0,n-t-3);return`${e.slice(0,t)}...${e.slice(e.length-o)}`}function Se(e){return function(e){if(!e||"object"!=typeof e)return null;const n=e;return{updatedAt:"string"==typeof n.updatedAt&&n.updatedAt.trim()?n.updatedAt:null,primary:m(n.primary),secondary:m(n.secondary),contextWindow:g(n.contextWindow)}}(e)}function Me(e,n,t){return Math.min(t,Math.max(n,e))}function Ne(e){return"number"==typeof e&&Number.isFinite(e)?Math.round(Me(100-e,0,100)):null}function Pe(e){if(!Number.isFinite(e))return"0m";const n=Math.max(0,Math.floor(e/6e4)),t=Math.floor(n/1440),o=Math.floor(n%1440/60),r=n%60;return t>0?`${t}d ${o}h`:o>0?`${o}h ${r}m`:`${r}m`}function Be(e){if(!Number.isFinite(e))return"0s";const n=Math.max(0,Math.round(e/1e3)),t=Math.floor(n/60),o=n%60;return t>0?`${t}m ${o}s`:`${o}s`}function Ae(e,n){if("number"!=typeof e||!Number.isFinite(e))return"Unknown";const t=1e3*e-n;return t<=0?"Overdue":Pe(t)}function Re(e){return"number"==typeof e&&Number.isFinite(e)?e.toLocaleString():"--"}function _e(){return"undefined"==typeof window||void 0===window.Notification?"unsupported":window.Notification.permission}function Oe(e){if("undefined"==typeof window)return null;try{return window.localStorage.getItem(e)}catch{return null}}function Ie(e,n){if("undefined"!=typeof window)try{window.localStorage.setItem(e,n)}catch{}}function $e(e){if("undefined"!=typeof window)try{window.localStorage.removeItem(e)}catch{}}ye.displayName="MessageText";const Ee="jupyterlab-codex:session-threads",Le="jupyterlab-codex:session-threads:event",Te="jupyterlab-codex:delete-all-pending";function ze(e){if(!e)return{path:""};const n=e.indexOf("\0");return n<0?{path:e}:{path:e.slice(0,n)}}function Ue(){const e=Oe(Ee);if(!e)return{};try{const n=JSON.parse(e);if(!n||"object"!=typeof n)return{};const t={};for(const[e,o]of Object.entries(n)){if(!e||"string"!=typeof o)continue;const n=o.trim();n&&(t[e]=n)}return t}catch{return{}}}function Fe(){const e=Ue(),n=new Set;for(const t of Object.keys(e)){const{path:e}=ze(t);e&&n.add(e)}return n.size}function De(e,n){const t=e.trim(),o=n||"";if(!o)return"";const r=Ue(),i=r[o];if(i)return i;if(!t)return"";for(const[e,n]of Object.entries(r))if(n&&ze(e).path===t)return n;return""}function We(){Ie(Te,"1")}function Ke(){$e(Te)}function He(){return"1"===Oe(Te)}function Je(e,n,t,o){const r=()=>"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.floor(4294967296*Math.random()).toString(16)}`,i=o.normalizeSystemText("system",n||"Session started"),a=(t?.threadId||"").trim(),s=!1===t?.reuseStoredThread?"":o.readStoredThreadId(e,t?.sessionKey||"");return{threadId:a||s||r(),runState:"ready",activeRunId:null,runStartedAt:null,progress:"",progressKind:"",messages:[{kind:"text",id:r(),role:"system",text:i}],pairedOk:null,pairedPath:"",pairedOsPath:"",pairedMessage:"",notebookMode:null,selectedModelOption:o.readDefaultModelOption(),selectedReasoningEffort:o.readDefaultReasoningEffortOption(),selectedSandboxMode:o.readDefaultSandboxModeOption(),effectiveSandboxMode:null,conversationMode:"resume"}}function Ve(e){return(e||"").trim()||""}function qe(e){return Ve(e||"")}function Ye(e){return qe(e)}function Ze(e,n){const t=(n||"").trim();return t?`thread:${t}`:`session:${(e||"").trim()}`}function Ge(e,n){const t=n.notebookMode,o=X(n.text||"");return[e,t,(n.locationLabel||"").trim(),o].join("␟")}function Xe(e,n){return!(!e||!n)&&e===n}function Qe(e){return Number.isFinite(e)?Math.max(0,Math.floor(e)):0}function en(e,n){return n<=0?"":e.length<=n?e:e.slice(0,n)}var nn=t(7628);function tn(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...e,children:(0,i.jsx)("path",{d:"M12 5v14M5 12h14",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"})})}function on(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...e,children:(0,i.jsx)("path",{d:"M12 19V5m0 0l-7 7m7-7l7 7",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function rn(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...e,children:(0,i.jsx)("path",{d:"M12 5v14m0 0l-7-7m7 7l7-7",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function an(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...e,children:(0,i.jsx)("rect",{x:"7",y:"7",width:"10",height:"10",rx:"2.2",stroke:"currentColor",strokeWidth:"2"})})}function sn(e){return(0,i.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...e,children:[(0,i.jsx)("rect",{x:"3",y:"5",width:"18",height:"14",rx:"2.2",stroke:"currentColor",strokeWidth:"2"}),(0,i.jsx)("circle",{cx:"8.5",cy:"10",r:"1.5",fill:"currentColor"}),(0,i.jsx)("path",{d:"M21 16l-5.2-5.2a1 1 0 0 0-1.4 0L8.2 17 6 14.8a1 1 0 0 0-1.4 0L3 16.4",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]})}function cn(e){return(0,i.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...e,children:[(0,i.jsx)("path",{d:"M12 15.2a3.2 3.2 0 1 0 0-6.4 3.2 3.2 0 0 0 0 6.4Z",stroke:"currentColor",strokeWidth:"2"}),(0,i.jsx)("path",{d:"M19.4 12a7.5 7.5 0 0 0-.1-1l2-1.6-1.9-3.2-2.4 1a8 8 0 0 0-1.8-1l-.4-2.5H9.2l-.4 2.5a8 8 0 0 0-1.8 1l-2.4-1-1.9 3.2 2 1.6a7.5 7.5 0 0 0 0 2l-2 1.6 1.9 3.2 2.4-1a8 8 0 0 0 1.8 1l.4 2.5h5.6l.4-2.5a8 8 0 0 0 1.8-1l2.4 1 1.9-3.2-2-1.6c.1-.3.1-.7.1-1Z",stroke:"currentColor",strokeWidth:"2",strokeLinejoin:"round"})]})}function dn(e){const{active:n=!0,...t}=e;return(0,i.jsxs)("svg",{viewBox:"0 -960 960 960",fill:"none","aria-hidden":"true",focusable:"false",...t,children:[(0,i.jsx)("path",{d:"m384-336 56-57-87-87 87-87-56-57-144 144 144 144Zm192 0 144-144-144-144-56 57 87 87-87 87 56 57ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Z",fill:"currentColor",opacity:n?.92:.74}),!n&&(0,i.jsx)("path",{d:"M250-250 710-710",stroke:"currentColor",strokeWidth:"88",strokeLinecap:"round",opacity:"0.9"})]})}function ln(e){return(0,i.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...e,children:[(0,i.jsx)("path",{d:"M5 16a7 7 0 1 1 14 0",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"}),(0,i.jsx)("path",{d:"M12 13l3.5-3.5",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"}),(0,i.jsx)("path",{d:"M5 16h14",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"})]})}function pn(e){const{activeBars:n,isConfig:t=!1,...o}=e;return t&&n<=0?(0,i.jsx)(ln,{...o}):(0,i.jsx)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...o,children:[{x:6,top:14},{x:10,top:10},{x:14,top:6},{x:18,top:2}].map((e,t)=>(0,i.jsx)("path",{d:`M${e.x} 20V${e.top}`,stroke:"currentColor",strokeWidth:"2.6",strokeLinecap:"round",opacity:t<n?1:.25},t))})}function un(e){const{level:n,...t}=e,o="number"==typeof n&&Number.isFinite(n)?Math.min(1,Math.max(0,n)):null,r=null==o?0:Math.max(0,Math.round(14*o)),a=null==o;return(0,i.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...t,children:[(0,i.jsx)("rect",{x:"2",y:"7",width:"18",height:"10",rx:"2.5",stroke:"currentColor",strokeWidth:"2",strokeDasharray:a?"4 2":void 0}),(0,i.jsx)("rect",{x:"21",y:"10",width:"2",height:"4",rx:"1",fill:"currentColor",opacity:.85}),r>0&&(0,i.jsx)("rect",{x:"4",y:"9",width:r,height:"6",rx:"1.4",fill:"currentColor",opacity:.9})]})}function xn(e){const{level:n,...t}=e,o="number"==typeof n&&Number.isFinite(n)?Math.min(1,Math.max(0,n)):null,r=null==o?.35:Math.max(.05,o),a=Math.round(16*r);return(0,i.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...t,children:[(0,i.jsx)("rect",{x:4,y:4,width:16,height:16,rx:"3.4",stroke:"currentColor",strokeWidth:"2"}),(0,i.jsx)("rect",{x:6,y:6,width:a,height:12,rx:"1.4",fill:"currentColor",opacity:"0.85"})]})}function fn(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...e,children:(0,i.jsx)("path",{d:"M12 2.8 19 5.9v6.2c0 5-3 9.2-7 9.9-4-.7-7-4.9-7-9.9V5.9l7-3.1Z",stroke:"currentColor",strokeWidth:"2",strokeLinejoin:"round"})})}function mn(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...e,children:(0,i.jsx)("path",{d:"M20 6 9 17l-5-5",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function gn(e){return(0,i.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...e,children:[(0,i.jsx)("path",{d:"M8 3h6l5 5v10.5A2.5 2.5 0 0 1 16.5 21h-9A2.5 2.5 0 0 1 5 18.5v-13A2.5 2.5 0 0 1 7.5 3H8Z",stroke:"currentColor",strokeWidth:"2",strokeLinejoin:"round"}),(0,i.jsx)("path",{d:"M14 3v5h5",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]})}function hn(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...e,children:(0,i.jsx)("path",{d:"M18 6 6 18M6 6l12 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function bn(e){const{open:n,anchorRef:t,popoverRef:o,className:r,role:a="dialog",align:c="left",ariaLabel:d,constrainHeightToViewport:l=!1,viewportMargin:p,onMouseEnter:u,onMouseLeave:x,children:f}=e,[m,g]=s().useState(()=>({left:0,top:0,visibility:"hidden"}));return s().useLayoutEffect(()=>{if(!n)return;const e=()=>{const e=t.current,n=o.current;if(!e||!n)return;const r=Math.max(0,Math.floor(p??8)),i=window.visualViewport?.width??window.innerWidth,a=window.visualViewport?.height??window.innerHeight,s=window.visualViewport?.offsetLeft??0,d=window.visualViewport?.offsetTop??0,u=e.closest(".jp-CodexChat-message");let x=0;if(u&&u instanceof HTMLElement){const e=window.getComputedStyle(u),n=Number.parseFloat(e.marginTop)||0,t=Number.parseFloat(e.marginBottom)||0;x=Math.max(0,Math.max(n,t))}const f=r+Math.round(x),m=e.getBoundingClientRect(),h=n.getBoundingClientRect(),b=Math.max(80,Math.floor(a-2*f)),v=l?Math.min(h.height,b):h.height;let C="right"===c?m.right-h.width:m.left;C=vn(C,s+r,Math.max(s+r,s+i-h.width-r));let j=m.top-10-v;const y=m.bottom+10,w=d+f,k=d+a;j<w&&y+v+f<=k&&(j=y),j=vn(j,w,Math.max(w,k-v-f)),g({left:Math.round(C),top:Math.round(j),...l?{maxHeight:`${b}px`,overflowY:"auto",overflowX:"auto"}:{},visibility:"visible"})},r=window.requestAnimationFrame(e),i=()=>e(),a=()=>e();return window.addEventListener("resize",i),window.addEventListener("scroll",a,!0),()=>{window.cancelAnimationFrame(r),window.removeEventListener("resize",i),window.removeEventListener("scroll",a,!0)}},[n,t,o,c,l,p]),n?(0,nn.createPortal)((0,i.jsx)("div",{ref:o,className:"jp-CodexMenu jp-CodexMenuPortal"+(r?` ${r}`:""),role:a,"aria-label":d,style:m,onMouseEnter:u,onMouseLeave:x,children:f}),document.body):null}function vn(e,n,t){return Math.min(t,Math.max(n,e))}class Cn extends o.ReactWidget{constructor(e,n){super(),this._app=e,this._notebooks=n,this.addClass("jp-CodexPanel")}render(){return(0,i.jsx)(tt,{app:this._app,notebooks:this._notebooks})}onAfterAttach(e){super.onAfterAttach(e),this.focusComposer()}onActivateRequest(e){super.onActivateRequest(e),this.focusComposer()}focusComposer(){window.setTimeout(()=>{const e=this.node.querySelector(".jp-CodexComposer textarea");if(!e||e.disabled)return;e.focus({preventScroll:!0});const n=e.value.length;e.setSelectionRange(n,n)},0)}}function jn(e){const n=e.messages[0];return n&&"text"===n.kind&&"system"===n.role&&M(n.text)&&(n.sessionResolution="client"),e}const yn=[],wn="medium",kn=[{label:"Default permission",value:"workspace-write"},{label:"Full access",value:"danger-full-access"},{label:"Read only",value:"read-only"}];function Sn(){const e=Oe(Bn)??"";return e&&"__config__"!==e&&"__custom__"!==e?e:"__config__"}function Mn(){return function(){try{const e=Oe(Rn)??"";if("__config__"===e)return"__config__";return e.trim()||"__config__"}catch{return"__config__"}}()}function Nn(){return function(){const e=Oe(_n)??"";return Jn(e)?e:kn[0].value}()}const Pn="jupyterlab-codex:auto-save-before-send",Bn="jupyterlab-codex:model",An="jupyterlab-codex:command-path",Rn="jupyterlab-codex:reasoning-effort",_n="jupyterlab-codex:sandbox-mode",On="jupyterlab-codex:settings-open",In="jupyterlab-codex:notify-on-done",$n="jupyterlab-codex:notify-on-done-min-seconds",En="jupyterlab-codex:include-active-cell",Ln="jupyterlab-codex:include-active-cell-output",Tn="jupyterlab-codex:selection-previews";function zn(e,n){const t=n.find(n=>n.value===e);return t?t.label:ke(e,32)}function Un(e){return"string"==typeof e?e.trim().toLowerCase():""}function Fn(e){return"string"==typeof e?e.trim():""}function Dn(e){return"string"==typeof e?Fn(e):e&&"object"==typeof e&&"reasoningEffort"in e?Fn(e.reasoningEffort):""}function Wn(e,n){if(!e||"__config__"===e)return 0;if(n.length<=0)return 0;const t=n.findIndex(n=>n.value===e);return t<0?0:1===n.length?1:Math.max(1,Math.min(4,Math.floor(3*t/(n.length-1))+1))}function Kn(e){const n=e.find(e=>Un(e.value)===wn);return n?n.value:e[0]?.value??wn}function Hn(e,n){const t=n.find(n=>n.value===e);if(t)return t.label;return Fn(e)||"Reasoning"}function Jn(e){return kn.some(n=>n.value===e)}function Vn(e){return"ipynb"===e||"jupytext_py"===e||"plain_py"===e||"unsupported"===e?e:null}function qn(e){const n=(e||"").trim().toLowerCase();return n.endsWith(".ipynb")?"ipynb":n.endsWith(".py")?"plain_py":"unsupported"}function Yn(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.floor(4294967296*Math.random()).toString(16)}`}function Zn(e){const n=(e||"").replace(/\r\n/g,"\n");let t=2166136261;for(let e=0;e<n.length;e+=1)t^=n.charCodeAt(e),t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24);return(t>>>0).toString(16).padStart(8,"0")}function Gn(e){if(!e||"object"!=typeof e)return null;const n=e,t="string"==typeof n.contentHash?n.contentHash.trim():"";if(!t)return null;const o=n.preview;if(!o)return{contentHash:t,preview:null};const r=function(e){return function(e,n={}){if(!e||"object"!=typeof e)return;const t=e,o=x(t.selectionPreview,n),r=x(t.cellOutputPreview,n);if(o||r)return{...o?{selectionPreview:o}:{},...r?{cellOutputPreview:r}:{}};const i=x(t,n);return i?{selectionPreview:i}:void 0}(e,{normalize:X,maxChars:V})}(o);return r?{contentHash:t,preview:r}:{contentHash:t,preview:null}}function Xn(e){return function(e,n={}){if(!Array.isArray(e))return[];const t=[];for(const o of e){if(!o||"object"!=typeof o)continue;const e=o.role,r=o.content;if("user"!==e&&"assistant"!==e&&"system"!==e||"string"!=typeof r)continue;const i=x(o.selectionPreview,n),a=x(o.cellOutputPreview,n);t.push({role:e,content:r,selectionPreview:i,cellOutputPreview:a})}return t}(e,{normalize:X,maxChars:V})}function Qn(e,n,t){return jn(Je(e,n,t,{readStoredThreadId:De,readDefaultModelOption:Sn,readDefaultReasoningEffortOption:Mn,readDefaultSandboxModeOption:Nn,normalizeSystemText:nt}))}function et(e,n,t){const o=function(e,n,t,o){return Je(e,`Session started (${(new Date).toLocaleTimeString()})`,{threadId:t,reuseStoredThread:!1,sessionKey:n},o)}(e,n,t,{readStoredThreadId:De,readDefaultModelOption:Sn,readDefaultReasoningEffortOption:Mn,readDefaultSandboxModeOption:Nn,normalizeSystemText:nt});return jn(o)}function nt(e,n){return"system"!==e?n:S(n)??n}function tt(e){const[n,t]=(0,a.useState)(new Map),r=(0,a.useRef)(new Map),[s,p]=(0,a.useState)(""),x=(0,a.useRef)(""),[f,m]=(0,a.useState)(""),g=(0,a.useRef)(""),[b,v]=(0,a.useState)({model:null,reasoningEffort:null}),[C,j]=(0,a.useState)(()=>yn),[y,w]=(0,a.useState)(()=>Sn()),[S,O]=(0,a.useState)(()=>Mn()),[I,$]=(0,a.useState)(()=>Nn()),[E,L]=(0,a.useState)(()=>Oe(An)??""),[T,z]=(0,a.useState)(()=>"false"!==(Oe(Pn)??"true")),[U,F]=(0,a.useState)(()=>"false"!==(Oe(En)??"true")),[D,W]=(0,a.useState)(()=>"false"!==(Oe(Ln)??"true")),[K,H]=(0,a.useState)(!1),[ee,ne]=(0,a.useState)(()=>"true"===(Oe(In)??"true")),[te,re]=(0,a.useState)(()=>function(){const e=Oe($n);if(null==e)return 30;const n=Number(e);return Number.isFinite(n)?Math.max(0,Math.trunc(n)):0}()),[pe,ue]=(0,a.useState)(()=>"true"===(Oe(On)??"false")),[me,ge]=(0,a.useState)(""),[be,ve]=(0,a.useState)([]),je=(0,a.useRef)([]),Te=(0,a.useRef)(""),Ue=(0,a.useRef)(new Map),{socketRef:De,socketConnected:Je,isReconnecting:nn,reconnect:ln}=function(e={}){const n=(0,a.useRef)(e);n.current=e;const t=(0,a.useRef)(null),o=(0,a.useRef)(null),[r,i]=(0,a.useState)(!1),[s,l]=(0,a.useState)(!1),[p,u]=(0,a.useState)(0);(0,a.useEffect)(()=>{l(!0);const e=c.ServerConnection.makeSettings(),r=d.URLExt.join(e.wsUrl,"codex","ws");let a,s=!1,p=!1;try{a=new WebSocket(r)}catch{return i(!1),void l(!1)}t.current=a;const x=()=>{s||p||(p=!0,l(!0),o.current=window.setTimeout(()=>{o.current=null,u(e=>e+1)},800))};return a.onopen=()=>{i(!0),l(!1),n.current.onOpen?.()},a.onclose=()=>{i(!1),n.current.onClose?.(),x()},a.onerror=()=>{i(!1),n.current.onError?.(),x()},a.onmessage=e=>{n.current.onMessage?.(e.data)},()=>{s=!0,null!==o.current&&(window.clearTimeout(o.current),o.current=null),a.onopen=null,a.onclose=null,a.onerror=null,a.onmessage=null,a.close(),t.current=null}},[p]);const x=(0,a.useCallback)(()=>{s||u(e=>e+1)},[s]);return{socketRef:t,socketConnected:r,isReconnecting:s,reconnect:x}}({onOpen:function(){Yo(),He()&&Io();const n=Z(e.app,kt.current);n&&(kt.current=n);const t=x.current||Y(n);if(!t)return;const o=Ye(t);_o(Mo(t,o),t,o)},onClose:function(){Yo(),vt.current=new Map,lt(!1),qt.current=""},onMessage:function(e){const n=St.current;n.push(e),n.length>1200&&n.splice(0,n.length-1200),qo()}}),[vn,Cn]=(0,a.useState)(!0),[jn,wn]=(0,a.useState)(!1),[Fn,tt]=(0,a.useState)(!1),[ot,rt]=(0,a.useState)(!1),[it,at]=(0,a.useState)(!1),[st,ct]=(0,a.useState)(!1),[dt,lt]=(0,a.useState)(!1),[pt,ut]=(0,a.useState)(!1),[xt,ft]=(0,a.useState)(null),mt=(0,a.useRef)(function(){const e=Oe(Tn);if(!e)return new Map;try{const n=JSON.parse(e);if(!n||"object"!=typeof n)return new Map;const t=new Map;for(const[e,o]of Object.entries(n)){const n="string"==typeof e?e.trim():"";if(!n||!Array.isArray(o))continue;const r=[];for(const e of o){const n=Gn(e);n&&r.push(n)}r.length<=0||t.set(n,r.slice(-10))}return t}catch{return new Map}}()),gt=(0,a.useRef)(new Map),[ht,bt]=(0,a.useState)(null),vt=(0,a.useRef)(new Map),Ct=(0,a.useRef)(new Map),jt=(0,a.useRef)(Yn()),yt=(0,a.useRef)(0),wt=(0,a.useRef)(new Set),kt=(0,a.useRef)(null),St=(0,a.useRef)([]),Mt=(0,a.useRef)(null),Nt=(0,a.useRef)(null),Pt=(0,a.useRef)(new Map),Bt=(0,a.useRef)(ee),At=(0,a.useRef)(te),Rt=(0,a.useRef)(null),_t=(0,a.useRef)(null),Ot=(0,a.useRef)(null),It=(0,a.useRef)(null),$t=(0,a.useRef)(null),Et=(0,a.useRef)(null),Lt=(0,a.useRef)(null),Tt=(0,a.useRef)(null),zt=(0,a.useRef)(null),Ut=(0,a.useRef)(null),Ft=(0,a.useRef)(null),Dt=(0,a.useRef)(null),Wt=(0,a.useRef)(null),Kt=(0,a.useRef)(null),Ht=(0,a.useRef)(null),Jt=(0,a.useRef)(null),Vt=(0,a.useRef)(null),qt=(0,a.useRef)(""),Yt=(0,a.useRef)(null),Zt=(0,a.useRef)(null),Gt=(0,a.useRef)(null),Xt=(0,a.useRef)(null),Qt=(0,a.useRef)(null),eo=(0,a.useRef)(null),no=(0,a.useRef)(null),[to,oo]=(0,a.useState)(!1),ro=(0,a.useRef)(null),io=(0,a.useMemo)(()=>Fe(),[n]),ao="__config__"===y?"":y,so=b.model,co=b.reasoningEffort,lo="__config__"===y?so||"":y,po=(0,a.useMemo)(()=>function(e,n){const t=l(e),o=n.trim(),r=t.find(e=>e.model===o),i=r?.reasoningEfforts&&r.reasoningEfforts.length>0?r.reasoningEfforts:r?.defaultReasoningEffort?[r.defaultReasoningEffort]:t.flatMap(e=>e.reasoningEfforts??[]),a=new Map;for(const e of i){const n=Dn(e),t=Un(n);t&&!a.has(t)&&a.set(t,{value:t,label:n||t})}return Array.from(a.values())}(b.availableModels,lo),[b.availableModels,lo]);function uo(e){const n=g.current||"";n&&function(e,n){if(!e)return;const t=new Map(Ue.current);n?t.set(e,n):t.delete(e),Ue.current=t}(n,e)}function xo(){if(!g.current)return ge(""),void(Te.current="");uo(""),ge(""),Te.current=""}function fo(){ft(null),Qt.current=null}function mo(){null!==Gt.current&&(window.clearTimeout(Gt.current),Gt.current=null)}function go(){null!==Xt.current&&(window.clearTimeout(Xt.current),Xt.current=null)}function ho(){mo(),ut(!!ar)}function bo(){mo(),Gt.current=window.setTimeout(()=>{ut(!1),Gt.current=null},90)}function vo(){go(),ct(!!Qr)}function Co(){go(),Xt.current=window.setTimeout(()=>{ct(!1),Xt.current=null},90)}function jo(e){const n=new Map,t=Array.from(e.entries()).slice(-80);for(const[e,o]of t)!e||!Array.isArray(o)||o.length<=0||n.set(e,o.slice(-10));mt.current=n,function(e){const n={},t=Array.from(e.entries()).slice(-80);for(const[e,o]of t){if(!e||!Array.isArray(o)||o.length<=0)continue;const t=o.filter(e=>e&&"string"==typeof e.contentHash&&e.contentHash).slice(-10).map(e=>e.preview?{contentHash:e.contentHash,preview:e.preview}:{contentHash:e.contentHash});t.length>0&&(n[e]=t)}Ie(Tn,JSON.stringify(n))}(n)}function yo(e,n){const t=(e||"").trim(),o=(n||"").trim();if(!t||!o||t===o)return;const r=mt.current,i=r.get(t);if(!i||i.length<=0)return;const a=new Map(r),s=a.get(o)??[];a.delete(t),a.delete(o),a.set(o,[...s,...i].slice(-10)),jo(a)}function wo(e){r.current=e,t(e)}function ko(e){return e.length<=100?e:e.slice(e.length-100)}function So(e){t(n=>{const t=e(n);return r.current=t,t})}function Mo(e,n){const t=e||"",o=n||Ye(t),i=r.current.get(o);if(i)return i;const a={...Qn(t,"Session started",{sessionKey:o}),selectedModelOption:y,selectedReasoningEffort:S,selectedSandboxMode:I},s=new Map(r.current);return s.set(o,a),Ct.current.set(t,o),wo(s),a}function No(e,n){const t=e||g.current||"";t&&So(e=>{const o=new Map(e),r=o.get(t)??Qn("","Session started",{sessionKey:t}),i=n.selectedModelOption??r.selectedModelOption,a=n.selectedReasoningEffort??r.selectedReasoningEffort,s=n.selectedSandboxMode??r.selectedSandboxMode,c=n.effectiveSandboxMode??r.effectiveSandboxMode;return i===r.selectedModelOption&&a===r.selectedReasoningEffort&&s===r.selectedSandboxMode&&c===r.effectiveSandboxMode?e:(o.set(t,{...r,selectedModelOption:i,selectedReasoningEffort:a,selectedSandboxMode:s,effectiveSandboxMode:c}),o)})}function Po(e){w(e),No(g.current||"",{selectedModelOption:e})}function Bo(e){O(e),No(g.current||"",{selectedReasoningEffort:e})}function Ao(e){const n=De.current;if(!n||n.readyState!==WebSocket.OPEN)return!1;try{n.send(e)}catch{return!1}return!0}function Ro(e,n,t,o){if(!Bt.current)return;if("granted"!==_e()||"undefined"==typeof window||void 0===window.Notification)return;const i=function(e){if(!e)return null;const n=r.current.get(e);return n&&"number"==typeof n.runStartedAt&&Number.isFinite(n.runStartedAt)?Math.max(0,Date.now()-n.runStartedAt):null}(e),a=1e3*At.current;if(a>0&&(null===i||i<a))return;const s=ke(ze(e).path||n||x.current||"current notebook",120),c=null===i?"":` (${function(e){const n=Math.round(Math.max(0,e)/1e3),t=Math.floor(n/60);return 0===t?`${n}s`:`${t}m ${n%60}s`}(i)} elapsed)`,d=t?`Run cancelled in ${s}${c}`:null===o||0===o?`Run completed in ${s}${c}`:`Run failed (exit ${o}) in ${s}${c}`;try{const n=new window.Notification("Codex run finished",{body:d,tag:e?`codex-done-${e}`:void 0});window.setTimeout(()=>n.close(),12e3)}catch{}}function _o(e,n,t,o){if(!De.current||De.current.readyState!==WebSocket.OPEN)return;const r=E.trim();Ao(JSON.stringify(function(e){return{type:"start_session",sessionId:e.sessionId,sessionContextKey:e.sessionContextKey,notebookPath:e.notebookPath,forceNewThread:!0===e.forceNewThread,commandPath:e.commandPath?e.commandPath.trim():void 0}}({sessionId:e.threadId,sessionContextKey:t,notebookPath:n,forceNewThread:!0===o?.forceNewThread,commandPath:r||void 0})))}function Oo(e,n){if(!e)return;const t=function(e){if("string"!=typeof e)return null;const n=e.trim().toLowerCase().replace(/_/g,"-");return Jn(n)?n:null}(n);t&&No(e,{effectiveSandboxMode:t})}function Io(){return!(!De.current||De.current.readyState!==WebSocket.OPEN)&&!!Ao(JSON.stringify({type:"delete_all_sessions"}))}function $o(e,n,t){if(!e)return;const o=e.trim(),r="running"===n,i="ready"===n;let a=!1;const s=Date.now();So(c=>{const d=new Map(c),l=d.get(o)??Qn("","Session started",{sessionKey:o}),p=d.get(o)??l;let u=p.messages,x=p.runStartedAt,f=p.activeRunId;const m="running"===p.runState,g=Boolean(f&&f.trim());if(r&&!t&&m&&g)return c;if(i&&m&&g&&(!t||t!==f))return c;if(r&&(m||(x=s),t&&(f=t)),i&&m){const e=x;if("number"==typeof e&&Number.isFinite(e)){const n=Math.max(0,s-e);u=[...u,{kind:"run-divider",id:crypto.randomUUID(),elapsedMs:n}]}x=null,f=null,a=!0}else i&&(f=null);const h=p.runState===n?p.progress:"",b=p.runState===n?p.progressKind:"";return d.set(e,{...p,messages:ko(u),runState:n,activeRunId:f,runStartedAt:x,progress:h,progressKind:b}),d}),r&&qt.current===o?lt(!0):i&&a&&qt.current===o&&(qt.current="",lt(!1))}function Eo(e,n,t=""){const o=e||g.current||"";if(!o)return;const r=n?ke(n,260):"",i=r?t:"";So(e=>{const n=new Map(e),t=n.get(o)??Qn("","Session started",{sessionKey:o});return t.progress===r&&t.progressKind===i?e:(n.set(o,{...t,progress:r,progressKind:i}),n)})}function Lo(e,n){const t=e||g.current||"";t&&So(e=>{const o=new Map(e),r=o.get(t)??Qn("","Session started",{sessionKey:t}),i={id:crypto.randomUUID(),ts:Date.now(),...n},a=e=>{const n=(e||"").trim();return n?n.split("\n")[0].trim():""},s=(e,n)=>{const t=(e=>{const n=(e||"").trim();return n?n.replace(/\s+(started|completed)\s*$/i,"").trim():""})(e);return`${t}::${(n||"").trim().split("\n")[0].trim()}`},c=r.messages;if("reasoning"===i.category){const n=c[c.length-1];if(n&&"activity"===n.kind){const t=n.item;if(t.category===i.category&&t.phase===i.phase&&t.title===i.title&&t.detail===i.detail)return e}}if("command"===i.category&&"completed"===i.phase){const e=a(i.detail);if(e)for(let n=c.length-1;n>=0;n-=1){const s=c[n];if("activity"!==s.kind)continue;const d=s.item;if("command"!==d.category||"started"!==d.phase)continue;if(a(d.detail)!==e)continue;const l={...d,phase:"completed",title:i.title,detail:i.detail,raw:i.raw},p=[...c.slice(0,n),{...s,item:l},...c.slice(n+1)];return o.set(t,{...r,messages:ko(p)}),o}}if("completed"===i.phase){const e=s(i.title,i.detail);if(e)for(let n=c.length-1;n>=0;n-=1){const a=c[n];if("activity"!==a.kind)continue;const d=a.item;if("started"!==d.phase)continue;if(s(d.title,d.detail)!==e)continue;const l={...d,phase:"completed",title:i.title,detail:i.detail,raw:i.raw},p=[...c.slice(0,n),{...a,item:l},...c.slice(n+1)];return o.set(t,{...r,messages:ko(p)}),o}}const d=[...c,{kind:"activity",id:i.id,item:i}];return o.set(t,{...r,messages:ko(d)}),o})}function To(e,n){const t=e||g.current||"";t&&So(e=>{const o=new Map(e),r=o.get(t)??Qn("","Session started",{sessionKey:t});return o.set(t,{...r,...n,notebookMode:n.notebookMode??r.notebookMode}),o})}function zo(e,n){const t="resume"===(o=n)||"fallback"===o?o:null;var o;if(!t)return;const r=e||g.current||"";r&&So(e=>{const n=new Map(e),o=n.get(r)??Qn("","Session started",{sessionKey:r});return o.conversationMode===t?e:(n.set(r,{...o,conversationMode:t}),n)})}function Uo(e){return function(e){const{message:n,runToSessionKey:t,activeSessionKeyByPath:o,currentSessionKey:r}=e,i="string"==typeof n?.notebookPath?n.notebookPath:"",a="string"==typeof n?.sessionContextKey?n.sessionContextKey:"";if(a)return a;const s="string"==typeof n?.runId?n.runId:"";if(s){const e=t.get(s);if(e)return e}if(i){if(s){const e=o.get(i);if(e)return t.set(s,e),e}return o.get(i)||Ve(i)}if(s){const e=t.get(s);if(e)return e}return r}({message:e,runToSessionKey:vt.current,activeSessionKeyByPath:Ct.current,currentSessionKey:g.current||""})}function Fo(e,n,t){if(!t)return;const o=e||g.current||"";if(!o)return;const r=nt(n,t);So(e=>{const t=new Map(e),i=t.get(o)??Qn("","Session started",{sessionKey:o}),a=[...i.messages,{kind:"text",id:crypto.randomUUID(),role:n,text:r}];return t.set(o,{...i,messages:ko(a)}),t})}function Do(){_t.current?.scrollIntoView({block:"end"})}function Wo(e){const n=vt.current,t=new Map(n);for(const[o,r]of n)r===e&&t.delete(o);vt.current=t}async function Ko(n){const{path:t}=ze(n);if(!t)return;const o=Y(Z(e.app,kt.current));if("running"===r.current.get(n)?.runState&&o!==t)return void wt.current.add(n);const i=G(e.app,t,kt.current);if(!i)return void wt.current.add(n);const a=q(i);if(!a||"function"!=typeof a.revert)return void wt.current.add(n);if(kt.current=i,a.model.dirty)return wt.current.add(n),void Fo(n,"system","Codex updated files, but this document has unsaved changes. Reload manually when ready.");const s=function(e){const n=oe(e),t=Q(e)?e.content:null,o=Number(t?.activeCellIndex),r=Number.isFinite(o)?Math.max(0,Math.floor(o)):null;return{scrollTop:n?.scrollTop??0,scrollLeft:n?.scrollLeft??0,activeCellIndex:r}}(i);try{await a.revert(),function(e,n){if(Q(e)&&null!==n.activeCellIndex)try{const t=e.content,o=Number(t?.widgets?.length);if(Number.isFinite(o)&&o>0){const e=Math.floor(o)-1;t.activeCellIndex=Math.max(0,Math.min(n.activeCellIndex,e))}}catch{}const t=()=>{const t=oe(e);t&&(t.scrollTop=n.scrollTop,t.scrollLeft=n.scrollLeft)};t(),window.requestAnimationFrame(()=>{t(),window.requestAnimationFrame(t)}),window.setTimeout(t,120)}(i,s),Fo(n,"system","Document refreshed due to file changes."),wt.current.delete(n)}catch(e){Fo(n,"system",`Failed to refresh document: ${String(e)}`),wt.current.add(n)}}function Ho(e){try{!function(e,n){const t=function(e){if("string"!=typeof e&&(null===e||"object"!=typeof e))return null;const n="string"==typeof e?function(e){try{return JSON.parse(e)}catch{return null}}(e):e;if(null===n||"object"!=typeof n)return null;const t=n,o="string"==typeof t.type?t.type:"";if(!o)return null;switch(o){case"cli_defaults":const e={type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0};return Object.prototype.hasOwnProperty.call(t,"model")&&(e.model="string"==typeof t.model||null===t.model?t.model:null),Object.prototype.hasOwnProperty.call(t,"reasoningEffort")&&(e.reasoningEffort="string"==typeof t.reasoningEffort||null===t.reasoningEffort?t.reasoningEffort:null),Object.prototype.hasOwnProperty.call(t,"availableModels")&&(e.availableModels=l(Array.isArray(t.availableModels)?t.availableModels:[])),e;case"rate_limits":return{type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0,snapshot:t.snapshot??null};case"delete_all_sessions":return"boolean"==typeof t.ok&&Number.isFinite(Number(t.deletedCount))&&Number.isFinite(Number(t.failedCount))&&"string"==typeof t.message?{type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0,ok:t.ok,deletedCount:Number(t.deletedCount),failedCount:Number(t.failedCount),message:t.message}:null;case"status":return{type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0,state:"running"===t.state?"running":"ready",runId:"string"==typeof t.runId?t.runId:void 0,sessionId:"string"==typeof t.sessionId?t.sessionId:void 0,sessionContextKey:"string"==typeof t.sessionContextKey?t.sessionContextKey:void 0,notebookPath:"string"==typeof t.notebookPath?t.notebookPath:void 0,runMode:"fallback"===t.runMode?"fallback":"resume"===t.runMode?"resume":void 0,pairedOk:"boolean"==typeof t.pairedOk?t.pairedOk:void 0,pairedPath:"string"==typeof t.pairedPath?t.pairedPath:void 0,pairedOsPath:"string"==typeof t.pairedOsPath?t.pairedOsPath:void 0,pairedMessage:"string"==typeof t.pairedMessage?t.pairedMessage:void 0,notebookMode:"string"==typeof t.notebookMode?t.notebookMode:void 0,sessionResolution:"string"==typeof t.sessionResolution?t.sessionResolution:void 0,sessionResolutionNotice:"string"==typeof t.sessionResolutionNotice?t.sessionResolutionNotice:void 0,history:Array.isArray(t.history)?t.history:void 0,effectiveSandbox:"string"==typeof t.effectiveSandbox?t.effectiveSandbox:void 0};case"output":return"string"!=typeof t.runId||"string"!=typeof t.sessionId||"string"!=typeof t.notebookPath||"string"!=typeof t.text?null:{type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0,runId:t.runId,sessionId:t.sessionId,sessionContextKey:"string"==typeof t.sessionContextKey?t.sessionContextKey:void 0,notebookPath:t.notebookPath,role:"string"==typeof t.role?t.role:"assistant",text:t.text};case"event":return"string"!=typeof t.runId||"string"!=typeof t.sessionId||"string"!=typeof t.notebookPath?null:{type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0,runId:t.runId,sessionId:t.sessionId,sessionContextKey:"string"==typeof t.sessionContextKey?t.sessionContextKey:void 0,notebookPath:t.notebookPath,payload:t.payload};case"done":if("string"!=typeof t.runId||"string"!=typeof t.sessionId||"string"!=typeof t.notebookPath)return null;let n=null;if(null===t.exitCode)n=null;else if("number"==typeof t.exitCode&&Number.isFinite(t.exitCode))n=t.exitCode;else if("string"==typeof t.exitCode){const e=Number(t.exitCode.trim());n=Number.isFinite(e)?e:null}return{type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0,runId:t.runId,sessionId:t.sessionId,sessionContextKey:"string"==typeof t.sessionContextKey?t.sessionContextKey:void 0,notebookPath:t.notebookPath,exitCode:n,cancelled:"boolean"==typeof t.cancelled&&t.cancelled,fileChanged:"boolean"==typeof t.fileChanged&&t.fileChanged,runMode:"fallback"===t.runMode?"fallback":"resume"===t.runMode?"resume":void 0,pairedOk:"boolean"==typeof t.pairedOk?t.pairedOk:void 0,pairedPath:"string"==typeof t.pairedPath?t.pairedPath:void 0,pairedOsPath:"string"==typeof t.pairedOsPath?t.pairedOsPath:void 0,pairedMessage:"string"==typeof t.pairedMessage?t.pairedMessage:void 0,notebookMode:"string"==typeof t.notebookMode?t.notebookMode:void 0};case"error":return"string"!=typeof t.message?null:{type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0,runId:"string"==typeof t.runId?t.runId:void 0,sessionId:"string"==typeof t.sessionId?t.sessionId:void 0,sessionContextKey:"string"==typeof t.sessionContextKey?t.sessionContextKey:void 0,notebookPath:"string"==typeof t.notebookPath?t.notebookPath:void 0,message:t.message,runMode:"fallback"===t.runMode?"fallback":"resume"===t.runMode?"resume":void 0,suggestedCommandPath:"string"==typeof t.suggestedCommandPath?t.suggestedCommandPath:void 0,pairedOk:"boolean"==typeof t.pairedOk?t.pairedOk:void 0,pairedPath:"string"==typeof t.pairedPath?t.pairedPath:void 0,pairedOsPath:"string"==typeof t.pairedOsPath?t.pairedOsPath:void 0,pairedMessage:"string"==typeof t.pairedMessage?t.pairedMessage:void 0,notebookMode:"string"==typeof t.notebookMode?t.notebookMode:void 0}}return null}(e);if(null===t)return void n.appendMessage(n.getCurrentSessionKey()||"","system",`Invalid message: ${String(e)}`);const o=t,r="string"==typeof o.runId?o.runId:"",i=n.resolveMessageSessionKey(t);if("cli_defaults"===t.type){const e=Object.prototype.hasOwnProperty.call(t,"model"),o=Object.prototype.hasOwnProperty.call(t,"reasoningEffort"),r=Object.prototype.hasOwnProperty.call(t,"availableModels"),i=e&&"string"==typeof t.model&&t.model.trim()?t.model.trim():null,a=o?n.coerceReasoningEffort("string"==typeof t.reasoningEffort?t.reasoningEffort:""):null,s=r?n.coerceModelCatalog(t.availableModels):void 0;return void n.setCliDefaults(n=>({model:e?i:n.model,reasoningEffort:o?a:n.reasoningEffort,availableModels:r?s:n.availableModels}))}if("rate_limits"!==t.type){if("delete_all_sessions"===t.type){const e=!0===t.ok;e&&n.clearDeleteAllPending();const o=Number.isFinite(Number(t.deletedCount))?Number(t.deletedCount):0,r=Number.isFinite(Number(t.failedCount))?Number(t.failedCount):0,i=1===o?"Deleted 1 conversation":`Deleted ${o} conversations`,a=n.getCurrentSessionKey(),s=e?`${i} from the server.`:`${i} from the server. Failed to delete ${r} conversations. ${"string"==typeof t.message?t.message:"Server error"}. Retry after reconnect.`;return a&&n.appendMessage(a,"system",s),void(e||n.hasDeleteAllPending()||n.markDeleteAllPending())}if("status"!==t.type&&"error"!==t.type&&"done"!==t.type||!function(e,n,t,o,r={}){if("status"===e.type){t&&(n.syncEffectiveSandboxFromStatus(t,e.effectiveSandbox),n.setSessionConversationMode(t,e.runMode));const r="string"==typeof e.sessionResolutionNotice?e.sessionResolutionNotice.trim():"";return t&&r&&!o&&n.appendMessage(t,"system",r),function(e,n,t){const o="string"==typeof t.sessionId&&t.sessionId.trim()?t.sessionId.trim():"",r=e.coerceSessionHistory(t.history);n&&(o||r.length>0)&&e.updateSessions(i=>{const a=new Map(i).get(n)??e.createSession("","Session started",{sessionKey:n}),s=o||a.threadId;let c=a.messages;if(!a.messages.some(e=>"text"===e.kind&&("user"===e.role||"assistant"===e.role))&&r.length>0){const n=a.messages.find(e=>"text"===e.kind&&"system"===e.role),o=n&&e.isSessionStartNotice(n.text||"",t.sessionResolution),i=k(t.sessionResolution)?N(e,t.sessionResolution):o?n:n??N(e,t.sessionResolution),d=e.getStoredSelectionPreviews().get(s)??[];let l=0;c=[i,...r.map(n=>{const t=e.normalizeSystemText(n.role,n.content);let o,r;if("user"===n.role&&(o=n.selectionPreview,r=n.cellOutputPreview,!o&&!r)){const t=e.hashSelectionPreviewContent(n.content);for(;l<d.length;){const e=d[l];if(l+=1,!e||e.contentHash!==t)continue;const n=h(e.preview);o=n.selectionPreview,r=n.cellOutputPreview;break}}return{kind:"text",id:crypto.randomUUID(),role:n.role,text:t,selectionPreview:o,cellOutputPreview:r}})]}return s===a.threadId&&c===a.messages?i:new Map(i).set(n,{...a,threadId:s,messages:c})})}(n,t,e),t&&P(n,t,e),"running"===e.state&&t?(n.setSessionRunState(t,"running",o||null),n.setSessionProgress(t,"","")):"ready"===e.state&&t&&o&&(n.setSessionRunState(t,"ready",o),n.setSessionProgress(t,"",""),n.runToSessionKeyRef.current.delete(o)),!0}if("error"===e.type){t&&n.setSessionConversationMode(t,e.runMode);const r="string"==typeof e.suggestedCommandPath?e.suggestedCommandPath.trim():"";return r&&!n.getCommandPath()&&(n.setCommandPath(r),n.appendMessage(t,"system",`Suggested command path has been saved to settings: ${r}`)),n.appendMessage(t,"system",e.message||"Unknown error"),t&&P(n,t,e),t&&(n.setSessionRunState(t,"ready",o||null),n.setSessionProgress(t,"","")),o&&n.runToSessionKeyRef.current.delete(o),!0}if("done"===e.type){t&&n.setSessionConversationMode(t,e.runMode),t&&P(n,t,e);const i="number"==typeof e.exitCode?e.exitCode:null,a=Boolean(e.cancelled);if(Boolean(e.fileChanged)&&t&&n.refreshNotebook(t),!a&&null!==i&&0!==i){const e="string"==typeof r.error&&r.error.trim()||"string"==typeof r.message&&r.message.trim()||"",o=e?u(e,600):"",a=o?`Codex run failed (exit ${i}): ${o}`:`Codex run failed (exit ${i}). Check the logs above for the underlying error.`;n.appendMessage(t,"system",a)}return n.notifyRunDone(t,"string"==typeof e.notebookPath?e.notebookPath:"string"==typeof e.path?e.path:"",a,i),t&&(n.setSessionRunState(t,"ready",o||null),n.setSessionProgress(t,"","")),o&&n.runToSessionKeyRef.current.delete(o),!0}return!1}(t,n,i,r,o)){if("output"===t.type){const e="user"===t.role||"assistant"===t.role||"system"===t.role?t.role:"assistant";return void n.appendMessage(i,e,t.text||"")}if("event"===t.type){const e=t.payload;if(function(e){if(!e||"object"!=typeof e)return!1;const n="string"==typeof e.type&&e.type||"string"==typeof e.event&&e.event||"";return"thread.started"===n||"turn.started"===n||"turn.completed"===n}(e))return;const o=function(e){if(!e||"object"!=typeof e)return{progress:"Event",progressKind:"",activity:{category:"event",phase:"",title:"Event",detail:"",raw:R(e)}};const n="string"==typeof e.type&&e.type||"string"==typeof e.event&&e.event||"event",t=R(e);if(("item.completed"===n||"item.started"===n)&&e.item&&"object"==typeof e.item){const o=e.item,r="string"==typeof o.type?o.type:"",i="string"==typeof o.tool_name&&o.tool_name||"string"==typeof o.tool&&o.tool||"string"==typeof o.name&&o.name||"",a="string"==typeof o.path&&o.path||"string"==typeof o.filename&&o.filename||"",s="item.started"===n?"started":"item.completed"===n?"completed":"";let c="event",d="";"reasoning"===r?(c="reasoning",d="reasoning"):"command_execution"===r?c="command":"file_change"===r?c="file":i&&(c="tool");let l="",p="";if("command_execution"===r){const e=o.command??o.cmd??o.shell_command??o.argv??o.args??o.commandLine??o.command_line;let n="";n="string"==typeof e?e:Array.isArray(e)&&e.length>0&&e.every(e=>"string"==typeof e)?e.join(" "):A(e);const t="number"==typeof o.exit_code?o.exit_code:"number"==typeof o.exitCode?o.exitCode:null;l="started"===s?"Running command":"completed"===s?"Command finished":"Command",p=n||"",null!=t&&(p=p?`${p}\n(exit ${t})`:`(exit ${t})`)}else if("file_change"===r){const e=function(e){if(!e||"object"!=typeof e)return[];const n=new Set,t=[],o=e=>{if("string"!=typeof e)return;const o=e.trim();o&&!n.has(o)&&(n.add(o),t.push(o))},r=["path","filename","filePath","file_path","targetPath","target_path","newPath","new_path","oldPath","old_path","sourcePath","source_path","destinationPath","destination_path"];for(const n of r)o(e[n]);const i=["file","target","source","destination"];for(const n of i){const t=e[n];t&&"object"==typeof t&&(o(t.path),o(t.filename),o(t.filePath),o(t.file_path))}const a=["paths","files","changes","edits"];for(const n of a){const t=e[n];if(Array.isArray(t))for(const e of t)"string"!=typeof e?e&&"object"==typeof e&&(o(e.path),o(e.filename),o(e.filePath),o(e.file_path),o(e.targetPath),o(e.target_path),o(e.newPath),o(e.new_path),o(e.oldPath),o(e.old_path)):o(e)}if(0===t.length){const n=[e];let t=0;for(;n.length>0&&t<300;){const e=n.shift();if(t+=1,e&&"object"==typeof e)if(Array.isArray(e))for(const t of e)n.push(t);else for(const[t,r]of Object.entries(e)){const e=t.trim().toLowerCase();"string"==typeof r&&("filename"===e||e.endsWith("path")||e.endsWith("_path")||e.endsWith("filepath")||e.endsWith("file_path"))&&o(r),r&&"object"==typeof r&&n.push(r)}}}return t}(o),n=function(e){const n=(e||"").trim();if(!n)return"";const t=n.replace(/\\/g,"/"),o=t.split("/").filter(Boolean);return o[o.length-1]||t}(e[0]||a||""),t="started"===s?"Update file":"completed"===s?"File updated":"File change";l=n?`${t}: ${n}`:t,p=e.length>0?e.join("\n"):a||""}else if("reasoning"===r)l="started"===s?"Reasoning":"completed"===s?"Reasoning step":"Reasoning",p=i?`(${i})`:"";else{const e=_(r)||_(n)||"Event";l="started"===s?`${e} started`:"completed"===s?`${e} completed`:e;const t=[];i&&t.push(`tool: ${i}`),a&&t.push(`path: ${a}`),p=t.join("\n")}l||(l=_(r)||"Event"),p=B(p,1400);const u=[];if(l&&u.push(l),p){const e=p.replace(/\s+/g," ").trim();u.push(B(e,200))}return{progress:u.join(": ")||_(n)||"Event",progressKind:d,activity:{category:c,phase:s,title:l,detail:p,raw:t}}}const o="string"==typeof e.name&&e.name||"string"==typeof e.label&&e.label||"string"==typeof e.tool_name&&e.tool_name||"string"==typeof e.tool&&e.tool||"";if(o&&o!==n)return{progress:`${_(n)||n}: ${B(o,120)}`,progressKind:"",activity:{category:"event",phase:"",title:_(n)||n,detail:o,raw:t}};const r=A(e.command);if(r)return{progress:`${_(n)||n}: ${r}`,progressKind:"",activity:{category:"event",phase:"",title:_(n)||n,detail:r,raw:t}};const i=A(e.path);return i?{progress:`${_(n)||n}: ${i}`,progressKind:"",activity:{category:"event",phase:"",title:_(n)||n,detail:i,raw:t}}:{progress:_(n)||n,progressKind:"",activity:{category:"event",phase:"",title:_(n)||n,detail:"",raw:t}}}(e);"reasoning"!==o.activity.category&&n.appendActivityItem(i,o.activity),n.setSessionProgress(i,o.progress,o.progressKind)}}}else n.setRateLimits(n.coerceRateLimitsSnapshot(t.snapshot))}(e,{appendMessage:Fo,clearDeleteAllPending:Ke,coerceModelCatalog:l,coerceReasoningEffort:Un,coerceRateLimitsSnapshot:Se,coerceSessionHistory:Xn,coerceNotebookMode:Vn,createSession:Qn,deleteAllSessionsOnServer:Io,getCommandPath:()=>E,getCurrentSessionKey:()=>g.current,getStoredSelectionPreviews:()=>mt.current,hashSelectionPreviewContent:Zn,hasDeleteAllPending:He,isSessionStartNotice:M,markDeleteAllPending:We,normalizeSystemText:nt,notifyRunDone:Ro,refreshNotebook:Ko,resolveMessageSessionKey:Uo,runToSessionKeyRef:vt,setCliDefaults:v,setCommandPath:L,setRateLimits:bt,setSessionConversationMode:zo,setSessionPairing:To,setSessionProgress:Eo,setSessionRunState:$o,getSessionThreadId:e=>{const n=(e||"").trim();if(!n)return"";const t=r.current.get(n);return(t?.threadId||"").trim()},appendActivityItem:Lo,syncEffectiveSandboxFromStatus:Oo,updateSessions:e=>So(n=>e(n))})}catch(n){const t=g.current||"";t&&Fo(t,"system",`Internal UI error while processing a server message: ${String(n)}`),console.error("[Codex] onSocketMessage failed",n,e)}}function Jo(){const e=Nt.current;null!==e&&(window.cancelAnimationFrame(e),Nt.current=null);const n=Mt.current;null!==n&&(window.clearTimeout(n),Mt.current=null)}function Vo(){Jo();const e=St.current;if(0===e.length)return;const n=e.splice(0,8);for(const e of n)Ho(e);e.length>0&&qo()}function qo(){null===Mt.current&&null===Nt.current&&("function"!=typeof window.requestAnimationFrame?Mt.current=window.setTimeout(Vo,16):Nt.current=window.requestAnimationFrame(()=>{Nt.current=null,Vo()}))}function Yo(){St.current=[],Jo()}function Zo(e){const n=e??ro.current;if(!n)return;n.style.height="auto";const t=window.getComputedStyle(n);let o=Number.parseFloat(t.minHeight||""),r=Number.parseFloat(t.maxHeight||"");if(!Number.isFinite(o)||o<=0){const e=Number.parseFloat(t.fontSize||"13");let n=Number.parseFloat(t.lineHeight||"");Number.isFinite(n)||(n=1.35*e),o=n}if(!Number.isFinite(r)||r<=0){const e=Number.parseFloat(t.fontSize||"13");let n=Number.parseFloat(t.lineHeight||"");Number.isFinite(n)||(n=1.35*e),r=3*n}const i=n.scrollHeight,a=0===n.value.length?o:i,s=Math.ceil(Math.min(Math.max(a,o),r));n.style.height=`${s}px`,n.style.overflowY=i>r+1?"auto":"hidden"}function Go(){for(const e of je.current)URL.revokeObjectURL(e.previewUrl);je.current=[],ve([])}async function Xo(n){const t=De.current,o=(n?.forcedNotebookPath??x.current)||"",i=(n?.forcedSessionKey??g.current)||"";if(!o)return!1;if(!i)return!1;if(!t||t.readyState!==WebSocket.OPEN)return Fo(i,"system","WebSocket is not connected."),!1;const a=i?r.current.get(i):null;if(!1===a?.pairedOk)return Fo(i,"system",a.pairedMessage||`Jupytext paired file not found. Expected: ${a.pairedOsPath||a.pairedPath||"<notebook>.py"}`),!1;const s="string"==typeof n?.forcedText?n.forcedText:null,c=(s??Te.current).trim(),d=null==s&&je.current.length>0;if(!c&&!d)return!1;const l=i?r.current.get(i):null;if("running"===l?.runState&&!0!==n?.skipRunStateCheck)return!1;const p=G(e.app,o,kt.current);p&&(kt.current=p);const u=Y(p),f=p?q(p):null;if(T&&f&&"function"==typeof f.save&&u===o&&f.model.dirty)try{await f.save()}catch(e){return Fo(i,"system",`Auto-save failed: ${String(e)}`),!1}const m=l?.notebookMode??qn(o),h=Mo(o,i),b=function(e,n){return"plain_py"===n?ce(e)??ae(e):ae(e)??ce(e)}(p,m),v=b?.text||"";let C=!1,j="";if(U)if("plain_py"===m){const e=v||function(e){if(!Q(e))return"";const n=e.content.activeCell;if(!n)return"";try{const e="function"==typeof n.model?.sharedModel?.getSource?n.model.sharedModel.getSource():"";return ie(n.editor,"string"==typeof e?e:"")}catch{return""}}(p)||se(p);e&&(C=!0,j=e)}else C=!0,j=v||function(e){if(!Q(e))return"";const n=e.content.activeCell;if(!n)return"";const t="function"==typeof n.model?.sharedModel?.getSource?n.model.sharedModel.getSource():"";return"string"==typeof t?t:""}(p)||se(p);const w=U&&D&&("ipynb"===m||"jupytext_py"===m),k=w?function(e){if(!Q(e))return"";const n=e.content.activeCell;if(!n)return"";try{const e=n.model,t="string"==typeof e?.type?e.type:"";if(t&&"code"!==t)return"";const o="function"==typeof e?.toJSON?e.toJSON():null;return function(e){if(!Array.isArray(e)||0===e.length)return"";let n=0,t=!1,o=!1;const r=[];for(const i of e){if(n>=24){t=!0;break}const e=xe(i);e&&(n+=1,fe(i)&&(o=!0),r.push(e))}let i=r.join("\n\n").replace(/\s+$/,"");return i?(t&&(i=`${i}\n\n${le}`),a=i,s=2e4,c=o,i=a.length<=s?a:c?`${le}\n\n${a.slice(a.length-19983)}`:`${a.slice(0,19983)}\n\n${le}`,i=i.replace(/\s+$/,""),i):"";var a,s,c}(o&&Array.isArray(o.outputs)?o.outputs:[])}catch{return""}}(p):"",M=function(e,n){const t="string"==typeof e?e:"",o="string"==typeof n?n:"",r=Qe(4e3),i=Qe(2e4),a=en(t,r),s=en(o,i);return{selection:a,cellOutput:s,selectionTruncated:a.length<t.length,cellOutputTruncated:s.length<o.length}}(C?j:"",w?k:""),N=C?M.selection:"",P=w?M.cellOutput:"",B=Boolean(N),A=Boolean(P),R=B?function(e,n,t,o){const r=X(o);if(r)return e?{locationLabel:"cell"===e.kind?`Cell ${e.number}`:`Line ${e.number}`,previewText:J(r,V)}:function(e,n,t){const o=X(t);if(o)return{locationLabel:de(e,n),previewText:J(o,V)}}(n,t,r)}(b,p,m,N):void 0,_=A?function(e,n,t,o){const r=X(o);if(r)return{locationLabel:`${"cell"===e?.kind?`Cell ${e.number}`:de(n,t)} Output`,previewText:J(r,V)}}(b,p,m,P):void 0,O=U&&B,$=U&&A,L=Ze(i,h.threadId),z=Pt.current.get(L),F=O?function(e){return Ge("selection",e)}({notebookMode:m,text:j,locationLabel:R?.locationLabel}):"",W=$?function(e){return Ge("output",e)}({notebookMode:m,text:k,locationLabel:_?.locationLabel}):"",K=O&&Xe(z?.selectionSignature,F),H=$&&Xe(z?.cellOutputSignature,W),Z=B&&!K,ee=A&&!H,ne=function(e){return{selectionTruncated:e.includeSelection&&e.selectionTruncated,cellOutputTruncated:e.includeCellOutput&&e.cellOutputTruncated}}({includeSelection:Z,includeCellOutput:ee,selectionTruncated:M.selectionTruncated,cellOutputTruncated:M.cellOutputTruncated}),te=K?void 0:R,oe=H?void 0:_,re=te||oe?{...te?{selectionPreview:te}:{},...oe?{cellOutputPreview:oe}:{}}:void 0,pe=l?.selectedModelOption??y,ue=l?.selectedReasoningEffort??S,me=l?.selectedSandboxMode??I,ge="__config__"===pe?(so||"").trim():pe.trim(),be="__config__"===ue?Un(co||"")||Kn(po):ue;if(!ge)return Fo(i,"system","Model is not resolved yet. Wait for model defaults to load, or pick a model explicitly."),!1;if(!be)return Fo(i,"system","Reasoning level is not resolved yet. Wait for defaults to load, or pick a reasoning level explicitly."),!1;const ve=c||(d?"Please analyze the attached image(s).":""),Ce=d?await async function(e){if(0===e.length)return[];try{const n=[];for(const t of e)n.push({name:t.file.name||"image",dataUrl:await he(t.file)});return n}catch(e){return Fo(g.current||"","system",`Failed to prepare image attachment: ${String(e)}`),null}}(je.current):null;if(d&&!Ce)return!1;let ye;if(Ce&&Ce.length>0&&(ye=Ce),!Ao(JSON.stringify(function(e){return{type:"send",sessionId:e.sessionId,sessionContextKey:e.sessionContextKey,notebookPath:e.notebookPath,...e.commandPath?{commandPath:e.commandPath}:{},content:e.content,model:e.model,reasoningEffort:e.reasoningEffort,sandbox:e.sandbox,...e.selection?{selection:e.selection}:{},...e.cellOutput?{cellOutput:e.cellOutput}:{},...e.images?{images:e.images}:{},...e.uiSelectionPreview?{uiSelectionPreview:e.uiSelectionPreview}:{},...e.uiCellOutputPreview?{uiCellOutputPreview:e.uiCellOutputPreview}:{},...e.selectionTruncated?{selectionTruncated:!0}:{},...e.cellOutputTruncated?{cellOutputTruncated:!0}:{}}}({sessionId:h.threadId,sessionContextKey:i,content:ve,notebookPath:o,commandPath:E.trim(),model:ge,reasoningEffort:be,sandbox:me,...Z?{selection:N}:{},...ee?{cellOutput:P}:{},...ne.selectionTruncated?{selectionTruncated:!0}:{},...ne.cellOutputTruncated?{cellOutputTruncated:!0}:{},...ye?{images:ye}:{},...te?{uiSelectionPreview:te}:{},...oe?{uiCellOutputPreview:oe}:{}}))))return Fo(i,"system","Failed to send message to Codex: WebSocket is unavailable."),!1;if(O||$){const e={...z??{}};O&&F&&(e.selectionSignature=F),$&&W&&(e.cellOutputSignature=W),e.selectionSignature||e.cellOutputSignature?Pt.current.set(L,e):Pt.current.delete(L)}!function(e,n,t){const o=(e||"").trim();if(!o)return;const r=Zn(n||"");if(!r)return;const i=new Map(mt.current),a=i.get(o)??[],s={contentHash:r,preview:t??null};i.delete(o),i.set(o,[...a,s].slice(-10)),jo(i)}(h.threadId,ve,re);const we=ye?ye.length:0,ke="read-only"===me,Se=function(e,n){if(!e&&!n)return null;const t=String(Qe(4e3)),o=String(Qe(2e4));return e&&n?`Attached input and output were truncated before sending (input: ${t} chars, output: ${o} chars). The full input can be checked directly from the source file/cell.`:e?`Attached input was truncated before sending to stay within ${t} characters. The full input can be checked directly from the source file/cell.`:`Attached output was truncated before sending to stay within ${o} characters.`}(ne.selectionTruncated,ne.cellOutputTruncated);return"plain_py"!==m&&"jupytext_py"!==m||(qt.current=i,lt(!0)),So(e=>{const n=new Map(e),t=n.get(i)??Qn("","Session started",{sessionKey:i}),o=ke?[{kind:"text",id:crypto.randomUUID(),role:"system",text:nt("system","Code changes are not available with the current permission (Read only).")}]:[],r=Se?[{kind:"text",id:crypto.randomUUID(),role:"system",text:nt("system",Se)}]:[],a=[...t.messages,...o,{kind:"text",id:crypto.randomUUID(),role:"user",text:ve,attachments:we>0?{images:we}:void 0,selectionPreview:te,cellOutputPreview:oe},...r];return n.set(i,{...t,messages:ko(a),runState:"running",activeRunId:null,runStartedAt:Date.now(),progress:"",progressKind:""}),n}),null==s&&(xo(),Go()),!0}(0,a.useEffect)(()=>{const e=l(b.availableModels).map(e=>({label:e.displayName,value:e.model}));j(e)},[b.availableModels]),(0,a.useEffect)(()=>{"__config__"!==S&&po.length>0&&!po.some(e=>e.value===S)&&Bo("__config__")},[S,po]),(0,a.useEffect)(()=>{"__config__"===S&&(Un(co||"")||Bo(Kn(po)))},[S,co,po]),(0,a.useEffect)(()=>{"__config__"!==y&&(C.some(e=>e.value===y)||Po("__config__"))},[y,C]),(0,a.useEffect)(()=>{if("__config__"!==y)return;if((so||"").trim())return;const e=C[0]?.value;e&&Po(e)},[y,so,C]),(0,a.useEffect)(()=>{Te.current=me},[me]),(0,a.useEffect)(()=>{r.current=n,g.current=f},[n]),(0,a.useEffect)(()=>{g.current=f,function(e){const n={};for(const[t,o]of e)t&&o?.threadId&&(n[t]=o.threadId);try{Ie(Ee,JSON.stringify(n))}catch{}}(n)},[n,f]),(0,a.useEffect)(()=>{const e=f||"";if(!e)return;const t=n.get(e);t&&(w(e=>e===t.selectedModelOption?e:t.selectedModelOption),O(e=>e===t.selectedReasoningEffort?e:t.selectedReasoningEffort),$(e=>e===t.selectedSandboxMode?e:t.selectedSandboxMode))},[f,n]),(0,a.useEffect)(()=>{je.current=be},[be]),(0,a.useEffect)(()=>()=>{for(const e of je.current)URL.revokeObjectURL(e.previewUrl)},[]),(0,a.useEffect)(()=>{Ie(Bn,ao)},[ao]),(0,a.useEffect)(()=>{Ie(Pn,T?"true":"false")},[T]),(0,a.useEffect)(()=>{Ie(En,U?"true":"false")},[U]),(0,a.useEffect)(()=>{U&&!D&&null===Oe(Ln)&&W(!0)},[U,D]),(0,a.useEffect)(()=>{Ie(Ln,D?"true":"false")},[D]),(0,a.useEffect)(()=>{!function(e){Ie(An,e)}(E)},[E]),(0,a.useEffect)(()=>{Ie(Rn,S)},[S]),(0,a.useEffect)(()=>{Ie(_n,I)},[I]),(0,a.useEffect)(()=>{Ie(On,pe?"true":"false")},[pe]),(0,a.useEffect)(()=>{Bt.current=ee,Ie(In,ee?"true":"false")},[ee]),(0,a.useEffect)(()=>{const e=Number.isFinite(te)?Math.max(0,Math.floor(te)):0;var n;At.current=e,n=e,Ie($n,String(Math.max(0,Math.trunc(n))))},[te]),(0,a.useEffect)(()=>{if(!(jn||Fn||ot||it||st))return;const e=e=>{const n=e.target;if(!n)return;const t=Ot.current?.contains(n)??!1,o=It.current?.contains(n)??!1,r=$t.current?.contains(n)??!1,i=Et.current?.contains(n)??!1,a=Lt.current?.contains(n)??!1,s=zt.current?.contains(n)??!1,c=Ft.current?.contains(n)??!1,d=Wt.current?.contains(n)??!1,l=Ht.current?.contains(n)??!1,p=Vt.current?.contains(n)??!1;t||o||r||i||a||s||c||d||l||p||(wn(!1),tt(!1),rt(!1),at(!1),ct(!1))},n=e=>{"Escape"===e.key&&(e.preventDefault(),wn(!1),tt(!1),rt(!1),at(!1),ct(!1))};return window.addEventListener("pointerdown",e,!0),window.addEventListener("keydown",n),()=>{window.removeEventListener("pointerdown",e,!0),window.removeEventListener("keydown",n)}},[jn,Fn,ot,it,st]),(0,a.useEffect)(()=>{if(!xt)return;const e=e=>{const n=e.target;if(!n)return;const t=Qt.current?.contains(n)??!1,o=eo.current?.contains(n)??!1;t||o||(ft(null),Qt.current=null)},n=e=>{"Escape"===e.key&&(e.preventDefault(),ft(null),Qt.current=null)};return window.addEventListener("pointerdown",e,!0),window.addEventListener("keydown",n),()=>{window.removeEventListener("pointerdown",e,!0),window.removeEventListener("keydown",n)}},[xt]),(0,a.useEffect)(()=>{const n=()=>{const n=Z(e.app,kt.current);n&&(kt.current=n);const t=Q(n);H(e=>e===t?e:t);const o=Y(n),r=qe(o),i=g.current;if(r&&r===i)return;if(i&&uo(Te.current),x.current=o,p(o),m(r),g.current=r,!r)return void xo();if(function(e){const n=e&&Ue.current.get(e)||"";Te.current=n,ge(n)}(r),Go(),Cn(!0),!o)return;const a=Mo(o,r);Ct.current.set(o,r),_o(a,o,r),wt.current.has(r)&&Ko(r)};n();const t=e.app.shell.currentChanged;return t&&t.connect(n),e.notebooks.currentChanged.connect(n),()=>{t&&t.disconnect(n),e.notebooks.currentChanged.disconnect(n)}},[e.app,e.notebooks]),(0,a.useEffect)(()=>{const e=e=>{if(e.key!==Le||!e.newValue)return;const n=function(e){if(!e)return null;let n;try{n=JSON.parse(e)}catch{return null}if(!n||"object"!=typeof n)return null;const t=n,o="string"==typeof t.sessionKey?t.sessionKey.trim():"",r="string"==typeof t.notebookPath?t.notebookPath.trim():"",i="string"==typeof t.threadId?t.threadId.trim():"",a="string"==typeof t.source?t.source.trim():"",s="string"==typeof t.id?t.id.trim():"";return o&&r&&i&&s&&"new-thread"===t.kind?{kind:"new-thread",sessionKey:o,notebookPath:r,threadId:i,source:a,id:s,issuedAt:"number"==typeof t.issuedAt&&Number.isFinite(t.issuedAt)?t.issuedAt:Date.now()}:null}(e.newValue);if(!n)return;if(n.source===jt.current)return;const t=n.notebookPath,o=n.sessionKey,i=n.threadId;if(!t||!o||!i)return;const a=qe(t);if(!a||a!==o)return;const s=et(t,o,i),c=x.current,d=r.current.get(o);if(!d||d.threadId!==i){if(d?.threadId){const e=Ze(o,d.threadId);Pt.current.delete(e)}So(e=>{const n=new Map(e);return n.set(o,s),n}),Ct.current.set(t,o),Wo(o),c===t&&g.current!==o&&m(o),c===t&&(xo(),Go()),_o(s,t,o)}};return window.addEventListener("storage",e),()=>{window.removeEventListener("storage",e)}},[]),(0,a.useEffect)(()=>()=>{Yo()},[]),(0,a.useEffect)(()=>{if(!vn)return;const e=window.requestAnimationFrame(()=>Do());return()=>window.cancelAnimationFrame(e)},[vn,n,s,Je]),(0,a.useEffect)(()=>{const e=window.requestAnimationFrame(()=>Zo());return()=>window.cancelAnimationFrame(e)},[me]),(0,a.useEffect)(()=>{const e=()=>Zo();return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);const Qo=f?n.get(f):null,er=Qo?.messages??[],nr=Qo?.progressKind??"",tr=Je?Qo?.runState??"ready":"disconnected";(0,a.useEffect)(()=>{fo()},[f]),(0,a.useEffect)(()=>{xt&&(er.some(e=>"text"===e.kind&&e.id===xt.messageId)||fo())},[er,xt]),(0,a.useEffect)(()=>{const e=gt.current;for(const[t,o]of n){const n=(o?.threadId||"").trim(),r=(e.get(t)||"").trim();r&&n&&r!==n&&yo(r,n)}const t=new Map;for(const[e,o]of n){const n=(o?.threadId||"").trim();e&&n&&t.set(e,n)}gt.current=t},[n]);const or=s?s.split("/").pop()||"Untitled":"No notebook",rr=Qo?.notebookMode??qn(s),ir=function(e){const n=e.isNotebookEditor&&("ipynb"===e.notebookMode||"jupytext_py"===e.notebookMode),t=e.includeActiveCell&&n,o=t&&e.includeActiveCellOutput;return{showBadge:n&&e.currentNotebookPath.length>0&&!1!==e.pairedOk,contentEnabled:t,outputEnabled:o}}({includeActiveCell:U,includeActiveCellOutput:D,notebookMode:rr,isNotebookEditor:K,currentNotebookPath:s,pairedOk:Qo?.pairedOk}),ar=(ir.outputEnabled,ir.showBadge),sr=ir.contentEnabled,cr=ir.outputEnabled;(0,a.useEffect)(()=>{ar||(ut(!1),mo())},[ar]),(0,a.useEffect)(()=>()=>{mo()},[]),(0,a.useEffect)(()=>()=>{go()},[]);const dr=me.trim(),lr="disconnected"!==tr&&s.length>0&&!1!==Qo?.pairedOk,pr="running"===tr?"stop":"send",ur=Qo?.selectedModelOption??y,xr=Qo?.selectedReasoningEffort??S,fr=Qo?.selectedSandboxMode??I,mr=so?zn(so,C):"Auto",gr="__config__"===ur?mr:zn(ur,C),hr=co?Hn(co,po):"Auto",br="__config__"===xr?hr:Hn(xr,po),vr=kn.find(e=>e.value===fr)?.label??"Permission",Cr=_e(),jr="unsupported"===Cr,yr="unsupported"===Cr?"Browser notifications are not available in this environment.":"denied"===Cr?"Notifications are blocked for this site. Allow them in browser settings.":"default"===Cr?"Permission will be requested when enabling this option.":`Shows a browser notification for ${0===te?"All completed runs":`Runs taking at least ${te} second${1===te?"":"s"}`}.`,wr=Array.from(n.entries()).some(([e,n])=>{if("running"!==n.runState)return!1;const t=n.notebookMode??qn(ze(e).path);return"plain_py"===t||"jupytext_py"===t}),kr=Boolean(qt.current),Sr="running"===tr&&Boolean(Qo?.activeRunId),Mr=lr&&(Boolean(dr)||be.length>0),Nr="send"===pr?!Mr||("plain_py"===rr||"jupytext_py"===rr)&&(wr||kr)&&"send"===pr:"stop"===pr&&!Sr,Pr=Date.now(),Br=function(e){if(!e)return null;const n=Date.parse(e);return Number.isFinite(n)?n:null}(ht?.updatedAt??null),Ar=null==Br?null:Pr-Br,Rr=null==Ar||Ar>6e5,_r=Ne(ht?.primary?.usedPercent??null),Or=Ne(ht?.secondary?.usedPercent??null),Ir=null==Br&&null==_r&&null==Or,$r=Ae(ht?.primary?.resetsAt??null,Pr),Er=Ae(ht?.secondary?.resetsAt??null,Pr),Lr="Overdue"===$r||"Overdue"===Er||null!=Ar&&Ar>36e5,Tr=null==_r?null:_r/100,zr=null==Ar?"Unknown":`${Pe(Ar)} ago`,Ur=ht?.primary?.windowMinutes??null,Fr=ht?.secondary?.windowMinutes??null,Dr=null==Ur?"":`Window: ${Math.round(Ur/60)}h`,Wr=null==Fr?"":`Window: ${Math.round(Fr/1440)}d`,Kr=ht?.contextWindow?.windowTokens??null,Hr=ht?.contextWindow?.usedTokens??null,Jr=ht?.contextWindow?.leftTokens??null,Vr=ht?.contextWindow?.usedPercent??null,qr="number"==typeof Vr&&Number.isFinite(Vr)?Me(Vr/100,0,1):null,Yr=Re(Hr),Zr=Re(Jr),Gr=Re(Kr),Xr="number"==typeof Vr&&Number.isFinite(Vr)?`${Math.round(Me(Vr,0,100))}%`:"Unknown",Qr=null!=ht?.contextWindow;return(0,a.useEffect)(()=>{Qr||(ct(!1),go())},[Qr]),(0,a.useLayoutEffect)(()=>{const e=no.current;if(!e)return void oo(!1);const n=()=>{const n=e.scrollWidth-e.clientWidth>1;oo(e=>e===n?e:n)};if(n(),"undefined"==typeof ResizeObserver)return window.addEventListener("resize",n),()=>{window.removeEventListener("resize",n)};const t=new ResizeObserver(()=>{n()});return t.observe(e),e.parentElement&&t.observe(e.parentElement),window.addEventListener("resize",n),()=>{t.disconnect(),window.removeEventListener("resize",n)}},[s]),(0,i.jsxs)("div",{className:"jp-CodexChat",children:[(0,i.jsxs)("div",{className:"jp-CodexChat-header",children:[(0,i.jsxs)("div",{className:"jp-CodexChat-header-top",children:[(0,i.jsxs)("div",{className:"jp-CodexChat-header-left",children:[(0,i.jsx)(Ce,{status:tr}),(0,i.jsx)("span",{className:"jp-CodexChat-notebookWrap","data-full-name":to?or:void 0,children:(0,i.jsx)("span",{className:"jp-CodexChat-notebook",ref:no,title:to?or:void 0,children:or})})]}),(0,i.jsxs)("div",{className:"jp-CodexChat-header-actions",children:[(0,i.jsx)("button",{type:"button",onClick:()=>{!async function(){const e=x.current||"",n=g.current||"";if(!e)return;if(!n)return;const t=r.current.get(n);if(t?.messages.some(e=>"text"===e.kind&&("user"===e.role||"assistant"===e.role))&&!(await(0,o.showDialog)({title:"Start a new thread?",body:"Starting a new thread will reset the current conversation, and you will not be able to view the previous conversation in this panel.\nContinue?",buttons:[o.Dialog.cancelButton(),o.Dialog.okButton({label:"New thread"})]})).button.accept)return;const i={...et(e,n,Yn()),selectedModelOption:y,selectedReasoningEffort:S,selectedSandboxMode:I};if(t?.threadId){const e=Ze(n,t.threadId);Pt.current.delete(e)}So(e=>{const t=new Map(e);return t.set(n,i),t}),Wo(n),xo(),Go(),_o(i,e,n,{forceNewThread:!0}),function(e,n,t){var o;!function(e){try{Ie(Le,JSON.stringify(e))}catch{}}({kind:"new-thread",sessionKey:(o={sessionKey:e,notebookPath:n,threadId:t,source:jt.current,createEventId:Yn}).sessionKey.trim(),notebookPath:o.notebookPath.trim(),threadId:o.threadId.trim(),source:o.source.trim(),id:o.createEventId(),issuedAt:Date.now()})}(n,e,i.threadId)}()},className:"jp-CodexHeaderBtn",disabled:!s||"running"===tr,"aria-label":"New thread",title:"New thread",children:(0,i.jsx)(tn,{width:16,height:16})}),(0,i.jsx)("div",{className:"jp-CodexMenuWrap",ref:$t,children:(0,i.jsx)("button",{type:"button",className:`jp-CodexHeaderBtn jp-CodexHeaderBtn-icon jp-CodexUsageBtn${ot?" is-active is-open":""}${Rr?" is-stale":""}${Lr?" is-overdue":""}`,ref:Dt,onClick:()=>(rt(e=>{const n=!e;return n&&function(e=!1){const n=De.current;if(!n||n.readyState!==WebSocket.OPEN)return;const t=Date.now();!e&&t-yt.current<15e3||(yt.current=t,Ao(JSON.stringify({type:"refresh_rate_limits"})))}(),n}),wn(!1),tt(!1),at(!1),void ct(!1)),"aria-label":null==_r?"Codex usage":`Codex usage: ${_r}% left`,"aria-haspopup":"dialog","aria-expanded":ot,title:null==_r?"Codex usage: unknown":`Codex usage: ${_r}% left (resets in ${$r})`,children:(0,i.jsx)(un,{level:Tr,width:16,height:16})})}),(0,i.jsxs)(bn,{open:ot,anchorRef:Dt,popoverRef:Wt,className:"jp-CodexUsagePopover",ariaLabel:"Codex usage",role:"dialog",align:"right",children:[(Lr||Rr)&&(0,i.jsxs)("div",{className:"jp-CodexUsageNotice"+(Lr?" is-overdue":Rr?" is-stale":""),children:[(0,i.jsx)("div",{className:"jp-CodexUsageNoticeTitle",children:Ir?"Usage unavailable":Lr?"Overdue usage snapshot":"Stale usage snapshot"}),(0,i.jsx)("div",{className:"jp-CodexUsageNoticeBody",children:Ir?"Run Codex once to fetch usage limits.":"Run Codex again to refresh these numbers."})]}),(0,i.jsxs)("div",{className:"jp-CodexUsageSection",children:[(0,i.jsxs)("div",{className:"jp-CodexUsageSectionTop",children:[(0,i.jsx)("div",{className:"jp-CodexUsageSectionTitle",children:"Session"}),(0,i.jsxs)("div",{className:"jp-CodexUsageSectionReset",children:["Resets in ",$r]})]}),(0,i.jsx)("div",{className:"jp-CodexUsageBar",children:(0,i.jsx)("div",{className:"jp-CodexUsageBarFill"+(Rr?" is-stale":""),style:{width:`${_r??0}%`}})}),(0,i.jsxs)("div",{className:"jp-CodexUsageMeta",children:[(0,i.jsx)("div",{className:"jp-CodexUsageMetaLeft",children:null==_r?"--% left":`${_r}% left`}),(0,i.jsx)("div",{className:"jp-CodexUsageMetaRight",children:Dr})]})]}),(0,i.jsx)("div",{className:"jp-CodexMenuDivider",role:"separator"}),(0,i.jsxs)("div",{className:"jp-CodexUsageSection",children:[(0,i.jsxs)("div",{className:"jp-CodexUsageSectionTop",children:[(0,i.jsx)("div",{className:"jp-CodexUsageSectionTitle",children:"Weekly"}),(0,i.jsxs)("div",{className:"jp-CodexUsageSectionReset",children:["Resets in ",Er]})]}),(0,i.jsx)("div",{className:"jp-CodexUsageBar",children:(0,i.jsx)("div",{className:"jp-CodexUsageBarFill"+(Rr?" is-stale":""),style:{width:`${Or??0}%`}})}),(0,i.jsxs)("div",{className:"jp-CodexUsageMeta",children:[(0,i.jsx)("div",{className:"jp-CodexUsageMetaLeft",children:null==Or?"--% left":`${Or}% left`}),(0,i.jsx)("div",{className:"jp-CodexUsageMetaRight",children:Wr})]})]}),(0,i.jsxs)("div",{className:"jp-CodexUsageFooter",children:["Last updated: ",zr]})]}),(0,i.jsx)("button",{type:"button",onClick:()=>{ue(e=>!e),wn(!1),tt(!1),rt(!1),at(!1),ct(!1)},className:"jp-CodexHeaderBtn jp-CodexHeaderBtn-icon"+(pe?" is-active":""),"aria-label":"Settings","aria-expanded":pe,title:"Settings",children:(0,i.jsx)(cn,{width:16,height:16})})]})]}),!1===Qo?.pairedOk&&(0,i.jsxs)("div",{className:"jp-CodexPairingNotice",role:"status","aria-live":"polite",children:[(0,i.jsx)("div",{className:"jp-CodexPairingNotice-title",children:"Jupytext pairing required"}),(0,i.jsx)("div",{className:"jp-CodexPairingNotice-body",children:Qo.pairedMessage||"This notebook must be paired (.ipynb ↔ .py) via Jupytext to enable running."})]})]}),(0,i.jsx)("div",{className:"jp-CodexChat-body",children:(0,i.jsxs)("div",{className:"jp-CodexChat-messages",ref:Rt,onScroll:function(){const e=Rt.current;if(!e)return;const n=e.scrollHeight-(e.scrollTop+e.clientHeight)<80;Cn(n)},children:["disconnected"===tr&&!nn&&(0,i.jsxs)("div",{className:"jp-CodexChat-message jp-CodexChat-system jp-CodexChat-reconnectNotice",children:[(0,i.jsx)("div",{className:"jp-CodexChat-role",children:"system"}),(0,i.jsx)("div",{className:"jp-CodexChat-text",children:"Codex connection was lost. Reconnect to continue."}),(0,i.jsx)("button",{type:"button",className:"jp-CodexReconnectBtn",onClick:()=>ln(),disabled:nn,"aria-label":nn?"Codex reconnecting":"Reconnect to Codex",title:nn?"Attempting to reconnect...":"Reconnect to Codex",children:nn?"Connecting...":"Reconnect"})]}),0===er.length&&(0,i.jsxs)("div",{className:"jp-CodexChat-message jp-CodexChat-system",children:[(0,i.jsx)("div",{className:"jp-CodexChat-role",children:"system"}),(0,i.jsx)("div",{className:"jp-CodexChat-text",children:"Select a notebook, then start a conversation."})]}),er.map(e=>{if("text"===e.kind){const n="system"===e.role&&M(e.text,e.sessionResolution)?" is-success":"",t=e.attachments?.images??0,o=e.selectionPreview,r=e.cellOutputPreview,a="user"===e.role&&Boolean(o?.locationLabel&&o?.previewText),s="user"===e.role&&Boolean(r?.locationLabel&&r?.previewText),c=a||s,d=c&&xt?.messageId===e.id,l=`jp-CodexChat-message jp-CodexChat-${e.role}${n}${c?" has-selection-preview":""}${d?" is-selection-open":""}`;return(0,i.jsxs)("div",{className:l,children:[(0,i.jsx)("div",{className:"jp-CodexChat-role",children:e.role}),(0,i.jsx)(ye,{text:e.text,canCopyCode:"assistant"===e.role}),t>0&&(0,i.jsx)("div",{className:"jp-CodexChat-attachments","aria-label":`${t} image attachment(s)`,title:`${t} image attachment(s)`,children:(0,i.jsxs)("span",{className:"jp-CodexChat-attachmentPill",children:[(0,i.jsx)(sn,{width:14,height:14}),(0,i.jsx)("span",{className:"jp-CodexChat-attachmentCount",children:t})]})}),c&&(0,i.jsx)("button",{type:"button",className:"jp-CodexChat-selectionToggle"+(d?" is-open":""),onClick:n=>function(e,n,t){e&&(xt?.messageId!==e?(Qt.current=t.currentTarget,ft({messageId:e,preview:n})):fo())}(e.id,{...o?{selectionPreview:o}:{},...r?{cellOutputPreview:r}:{}},n),"aria-label":d?"Hide message context":"Show message context",children:(0,i.jsx)(tn,{width:"1em",height:"1em"})})]},e.id)}if("run-divider"===e.kind)return(0,i.jsx)("div",{className:"jp-CodexRunDivider",role:"separator","aria-label":"Run duration",children:(0,i.jsxs)("span",{className:"jp-CodexRunDividerLabel",children:["Worked for ",Be(e.elapsedMs)]})},e.id);const n=e.item,t=(n.detail||"").trim(),o=Boolean(t),r=`jp-CodexChat-message jp-CodexChat-activity${o?" is-expandable":""} is-${n.category}${n.phase?` is-${n.phase}`:""}`,a="file"===n.category?(0,i.jsx)(gn,{width:14,height:14}):"completed"===n.phase?(0,i.jsx)(mn,{width:14,height:14}):"started"===n.phase?(0,i.jsx)("span",{className:"jp-CodexActivityDot"}):(0,i.jsx)("span",{className:"jp-CodexActivityDot is-idle"}),s=(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("span",{className:"jp-CodexActivityLineIcon","aria-hidden":"true",children:a}),(0,i.jsx)("span",{className:"jp-CodexActivityLineText",children:(0,i.jsx)("span",{className:"jp-CodexActivityLineTitle",children:n.title})})]});return o?(0,i.jsxs)("details",{className:r,role:"status","aria-live":"polite",children:[(0,i.jsx)("summary",{className:"jp-CodexActivitySummary",children:s}),(0,i.jsx)("div",{className:"jp-CodexActivityBody",children:(0,i.jsx)("pre",{className:"jp-CodexActivityCode",children:(0,i.jsx)("code",{children:t})})})]},e.id):(0,i.jsx)("div",{className:r,role:"status","aria-live":"polite",children:(0,i.jsx)("div",{className:"jp-CodexActivitySummary jp-CodexActivitySummaryStatic",children:s})},e.id)}),"running"===tr&&(0,i.jsx)("div",{className:"jp-CodexChat-loading"+("reasoning"===nr?" is-reasoning":""),"aria-label":"reasoning"===nr?"Reasoning":"Running",children:(0,i.jsxs)("div",{className:"jp-CodexChat-loading-dots",children:[(0,i.jsx)("span",{}),(0,i.jsx)("span",{}),(0,i.jsx)("span",{})]})}),(0,i.jsx)("div",{ref:_t})]})}),(0,i.jsx)(bn,{open:Boolean(xt),anchorRef:Qt,popoverRef:eo,className:"jp-CodexChat-selectionPopover",ariaLabel:"Message context",constrainHeightToViewport:!0,viewportMargin:20,role:"dialog",align:"right",children:xt&&(0,i.jsxs)("div",{className:"jp-CodexChat-selectionCard",role:"note","aria-label":"Message context",children:[xt.preview.selectionPreview&&(0,i.jsxs)("div",{className:"jp-CodexChat-contextSection",children:[(0,i.jsx)("div",{className:"jp-CodexChat-selectionMeta",children:xt.preview.selectionPreview.locationLabel}),(0,i.jsx)(we,{code:xt.preview.selectionPreview.previewText})]}),xt.preview.cellOutputPreview&&(0,i.jsxs)("div",{className:"jp-CodexChat-contextSection",children:[(0,i.jsx)("div",{className:"jp-CodexChat-selectionMeta",children:xt.preview.cellOutputPreview.locationLabel}),(0,i.jsx)(we,{code:xt.preview.cellOutputPreview.previewText})]})]})}),(0,i.jsx)(bn,{open:pt&&ar,anchorRef:Yt,popoverRef:Zt,className:"jp-CodexCellAttachmentPopoverMenu",ariaLabel:"Cell attachment details",role:"dialog",align:"left",onMouseEnter:ho,onMouseLeave:bo,children:(0,i.jsxs)("div",{className:"jp-CodexCellAttachmentPopoverCard",role:"note","aria-label":"Cell attachment details",children:[(0,i.jsx)("div",{className:"jp-CodexCellAttachmentPopoverTitle",children:"Attach On Next Send"}),(0,i.jsxs)("div",{className:"jp-CodexCellAttachmentPopoverRow",children:[(0,i.jsx)("span",{children:"Current cell content"}),(0,i.jsx)("span",{className:"jp-CodexCellAttachmentDot "+(sr?"is-on":"is-off"),"aria-label":sr?"Attached":"Not attached",title:sr?"Attached":"Not attached"})]}),(0,i.jsxs)("div",{className:"jp-CodexCellAttachmentPopoverRow",children:[(0,i.jsx)("span",{children:"Current cell output"}),(0,i.jsx)("span",{className:"jp-CodexCellAttachmentDot "+(cr?"is-on":"is-off"),"aria-label":cr?"Attached":"Not attached",title:cr?"Attached":"Not attached"})]})]})}),(0,i.jsxs)("div",{className:"jp-CodexChat-input",children:[(0,i.jsx)("div",{className:"jp-CodexJumpBar"+(vn?"":" is-visible"),children:(0,i.jsx)("button",{type:"button",className:"jp-CodexJumpToLatestBtn",onClick:Do,"aria-label":"Jump to latest","aria-hidden":vn,tabIndex:vn?-1:0,title:"Jump to latest",children:(0,i.jsx)(rn,{width:20,height:20})})}),(0,i.jsxs)("div",{className:"jp-CodexComposer",children:[(0,i.jsx)("div",{className:"jp-CodexCellAttachmentWrap jp-CodexComposer-cellAttachmentWrap"+(ar?" is-visible":""),ref:Yt,"aria-hidden":!ar,onMouseEnter:ho,onMouseLeave:bo,onFocusCapture:ho,onBlurCapture:function(e){const n=e.relatedTarget,t=!!n&&(Yt.current?.contains(n)??!1),o=!!n&&(Zt.current?.contains(n)??!1);t||o||bo()},children:(0,i.jsx)("div",{role:"group","aria-label":"Active-cell attachment",children:(0,i.jsxs)("button",{type:"button",className:"jp-CodexComposer-cellAttachment"+(sr?"":" is-off"),onClick:()=>F(e=>!e),"aria-pressed":sr,"aria-label":sr?"Disable active-cell attachment":"Enable active-cell attachment",title:sr?"Disable active-cell attachment":"Enable active-cell attachment",disabled:!ar,tabIndex:ar?0:-1,children:[(0,i.jsx)(dn,{active:sr,width:15,height:15}),(0,i.jsx)("span",{className:"jp-CodexComposer-cellAttachmentLabel",children:"Cell Attatch"})]})})}),(0,i.jsx)("textarea",{ref:ro,value:me,onChange:e=>{var n;uo(n=e.currentTarget.value),ge(n),Te.current=n,window.requestAnimationFrame(()=>Zo(e.currentTarget))},onPaste:function(e){const n=e.clipboardData?.items;if(!n||0===n.length)return;const t=[];for(let e=0;e<n.length;e+=1){const o=n[e];if(!o||"file"!==o.kind||!o.type.startsWith("image/"))continue;const r=o.getAsFile();r&&t.push(r)}if(0===t.length)return;const o=je.current.length;if(o>=4)return void Fo(g.current||"","system","Too many images attached (max 4).");const r=4-o,i=[];let a=0,s=0,c=je.current.reduce((e,n)=>e+n.file.size,0);for(const e of t.slice(0,r))e.size>4194304?a+=1:c+e.size>6291456?s+=1:(i.push({id:crypto.randomUUID(),file:e,previewUrl:URL.createObjectURL(e)}),c+=e.size);a>0&&Fo(g.current||"","system",`Skipped ${a} image(s): each must be <= ${Math.round(4)}MB.`),s>0&&Fo(g.current||"","system",`Skipped ${s} image(s): total attachments must be <= ${Math.round(6)}MB.`),0!==i.length&&ve(e=>{const n=[...e,...i];return je.current=n,n})},placeholder:!1===Qo?.pairedOk?"Disabled: missing Jupytext paired file (.py)":s?"Ask Codex...":"Select a notebook first",rows:1,onKeyDown:e=>{const n=e.nativeEvent;n.isComposing||229===n.keyCode||"Enter"!==e.key||e.shiftKey||("running"!==tr?Mr&&(e.preventDefault(),Xo()):e.preventDefault())}}),be.length>0&&(0,i.jsx)("div",{className:"jp-CodexComposer-attachments",role:"group","aria-label":"Attachments",children:be.map(e=>(0,i.jsxs)("div",{className:"jp-CodexComposer-attachment",children:[(0,i.jsx)("img",{src:e.previewUrl,alt:e.file.name||"Pasted image"}),(0,i.jsx)("button",{type:"button",className:"jp-CodexComposer-attachmentRemove",onClick:()=>{return n=e.id,void ve(e=>{const t=e.find(e=>e.id===n);t&&URL.revokeObjectURL(t.previewUrl);const o=e.filter(e=>e.id!==n);return je.current=o,o});var n},"aria-label":"Remove image",title:"Remove image",children:(0,i.jsx)(hn,{width:14,height:14})})]},e.id))}),(0,i.jsxs)("div",{className:"jp-CodexComposer-toolbar",children:[(0,i.jsxs)("div",{className:"jp-CodexComposer-toolbarLeft",children:[(0,i.jsx)("div",{className:"jp-CodexMenuWrap jp-CodexModelWrap",ref:Ot,children:(0,i.jsx)("button",{type:"button",ref:Tt,className:"jp-CodexModelBtn "+(jn?"is-open":""),onClick:()=>{wn(e=>!e),tt(!1),rt(!1),at(!1),ct(!1)},disabled:"running"===tr,"aria-label":`Model: ${gr}`,"aria-haspopup":"menu","aria-expanded":jn,title:`Model: ${gr}`,children:(0,i.jsx)("span",{className:"jp-CodexModelBtn-label",children:gr})})}),(0,i.jsxs)(bn,{open:jn,anchorRef:Tt,popoverRef:zt,role:"menu",ariaLabel:"Model",align:"left",children:[0===C.length&&(0,i.jsx)("div",{className:"jp-CodexMenuItem",children:"No models available"}),C.map(e=>{const n="__config__"===ur&&so&&C.some(e=>e.value===so)?so:ur,t=n===e.value;return(0,i.jsxs)("button",{type:"button",className:"jp-CodexMenuItem "+(t?"is-active":""),onClick:()=>{Po(e.value),wn(!1)},children:[(0,i.jsx)("span",{className:"jp-CodexMenuItemLabel",children:e.label}),t&&(0,i.jsx)(mn,{className:"jp-CodexMenuCheck",width:16,height:16})]},e.value)})]}),(0,i.jsx)("div",{className:"jp-CodexMenuWrap",ref:It,children:(0,i.jsx)("button",{type:"button",ref:Ut,className:"jp-CodexIconBtn "+(Fn?"is-open":""),onClick:()=>{tt(e=>!e),wn(!1),rt(!1),at(!1),ct(!1)},disabled:"running"===tr,"aria-label":`Reasoning: ${br}`,"aria-haspopup":"menu","aria-expanded":Fn,title:`Reasoning: ${br}`,children:(0,i.jsx)(pn,{isConfig:"__config__"===xr&&!co,activeBars:Wn("__config__"===xr&&co?co:xr,po),width:17,height:17})})}),(0,i.jsxs)(bn,{open:Fn,anchorRef:Ut,popoverRef:Ft,role:"menu",ariaLabel:"Reasoning",align:"left",children:[0===po.length&&(0,i.jsx)("div",{className:"jp-CodexMenuItem",children:"No reasoning options"}),po.map(e=>{const n=("__config__"===xr&&co?co:xr)===e.value;return(0,i.jsxs)("button",{type:"button",className:"jp-CodexMenuItem "+(n?"is-active":""),onClick:()=>{Bo(e.value),tt(!1)},children:[(0,i.jsx)("span",{className:"jp-CodexMenuItemLabel",children:e.label}),n&&(0,i.jsx)(mn,{className:"jp-CodexMenuCheck",width:16,height:16})]},e.value)})]}),(0,i.jsx)("div",{className:"jp-CodexMenuWrap",ref:Et,children:(0,i.jsx)("button",{type:"button",className:`jp-CodexIconBtn jp-CodexPermissionBtn${it?" is-open":""}${"danger-full-access"===fr?" is-danger":""}${"read-only"===fr?" is-warning":""}`,ref:Kt,onClick:()=>{at(e=>!e),wn(!1),tt(!1),rt(!1),ct(!1)},disabled:"running"===tr,"aria-label":`Permission: ${vr}`,"aria-haspopup":"menu","aria-expanded":it,title:`Permission: ${vr}`,children:(0,i.jsx)(fn,{width:17,height:17})})}),(0,i.jsx)(bn,{open:it,anchorRef:Kt,popoverRef:Ht,role:"menu",ariaLabel:"Permissions",align:"right",children:kn.map(e=>(0,i.jsxs)("button",{type:"button",className:"jp-CodexMenuItem "+(fr===e.value?"is-active":""),onClick:()=>{var n;n=e.value,$(n),No(g.current||"",{selectedSandboxMode:n}),at(!1)},children:[(0,i.jsx)("span",{className:"jp-CodexMenuItemLabel",children:e.label}),fr===e.value&&(0,i.jsx)(mn,{className:"jp-CodexMenuCheck",width:16,height:16})]},e.value))}),Qr&&(0,i.jsxs)("div",{className:"jp-CodexContextWrap",ref:Lt,onMouseEnter:vo,onMouseLeave:Co,onFocusCapture:vo,onBlurCapture:function(e){const n=e.relatedTarget,t=!!n&&(Lt.current?.contains(n)??!1),o=!!n&&(Vt.current?.contains(n)??!1);t||o||Co()},children:[(0,i.jsx)("button",{type:"button",className:"jp-CodexIconBtn jp-CodexContextBtn"+(Rr?" is-stale":""),ref:Jt,"aria-label":null==Hr||null==Jr?"Context window usage unavailable":`Context window: used ${Yr} tokens, left ${Zr} tokens`,title:null==Hr||null==Jr?"Context window usage unavailable":`Used ${Yr} / left ${Zr}`,children:(0,i.jsx)(xn,{level:qr,width:20,height:20})}),(0,i.jsxs)(bn,{open:st,anchorRef:Jt,popoverRef:Vt,className:"jp-CodexContextPopover",role:"tooltip",ariaLabel:"Context window",align:"right",onMouseEnter:vo,onMouseLeave:Co,children:[(0,i.jsx)("div",{className:"jp-CodexContextPopoverTitle",children:"Context window"}),(0,i.jsxs)("div",{className:"jp-CodexContextPopoverRow",children:[(0,i.jsx)("span",{children:"Used"}),(0,i.jsx)("strong",{children:Yr})]}),(0,i.jsxs)("div",{className:"jp-CodexContextPopoverRow",children:[(0,i.jsx)("span",{children:"Left"}),(0,i.jsx)("strong",{children:Zr})]}),(0,i.jsx)("div",{className:"jp-CodexContextPopoverMeta",children:null==Kr?"Window size unavailable":`Window: ${Gr} tokens (${Xr} used)`})]})]})]}),(0,i.jsx)("div",{className:"jp-CodexComposer-toolbarRight",children:(0,i.jsx)("button",{type:"button",className:"jp-CodexSendBtn"+("stop"===pr?" is-stop":""),onClick:()=>{"stop"!==pr?Xo():function(){const e=g.current||"";if(!e)return;const n=e?r.current.get(e):null,t=n?.activeRunId??null;De.current&&De.current.readyState===WebSocket.OPEN?t?(Eo(e,"Cancelling..."),Ao(JSON.stringify(function(e){return{type:"cancel",runId:e}}(t)))):Fo(e,"system","Cancel not available yet (waiting for run id)."):Fo(e,"system","Cancel failed: WebSocket is not connected.")}()},disabled:Nr,"aria-label":"stop"===pr?"Stop run":"Send",title:"stop"===pr?Qo?.activeRunId?`runId: ${Qo.activeRunId}`:"Waiting for run id...":"disconnected"===tr?"Connecting...":"Send",children:"stop"===pr?(0,i.jsx)(an,{width:18,height:18}):(0,i.jsx)(on,{width:18,height:18})})})]})]})]}),pe&&(0,i.jsxs)("div",{className:"jp-CodexSettingsOverlay",role:"dialog","aria-modal":"true","aria-label":"Settings",children:[(0,i.jsx)("button",{type:"button",className:"jp-CodexSettingsBackdrop",onClick:()=>ue(!1),"aria-label":"Dismiss settings",title:"Dismiss settings"}),(0,i.jsxs)("div",{className:"jp-CodexSettingsPanel",onClick:e=>e.stopPropagation(),children:[(0,i.jsxs)("div",{className:"jp-CodexSettingsPanel-top",children:[(0,i.jsx)("div",{className:"jp-CodexSettingsPanel-title",children:"Settings"}),(0,i.jsx)("button",{type:"button",className:"jp-CodexHeaderBtn jp-CodexHeaderBtn-icon",onClick:()=>ue(!1),"aria-label":"Close settings",title:"Close",children:(0,i.jsx)(hn,{width:16,height:16})})]}),(0,i.jsxs)("div",{className:"jp-CodexSettingsPanel-sections",children:[(0,i.jsxs)("section",{className:"jp-CodexSettingsSection","aria-label":"General settings",children:[(0,i.jsx)("div",{className:"jp-CodexSettingsSection-title",children:"General"}),(0,i.jsxs)("label",{className:"jp-CodexSettingsField",children:[(0,i.jsx)("span",{className:"jp-CodexSettingsField-label",children:"Codex command path"}),(0,i.jsx)("input",{type:"text",className:"jp-CodexChat-model-input",placeholder:"codex",value:E,disabled:"running"===tr,onChange:e=>L(e.currentTarget.value.trimStart()),title:"Leave empty to use PATH lookup."}),(0,i.jsx)("span",{className:"jp-CodexSettingsField-help",children:"Leave empty to use PATH lookup."})]})]}),(0,i.jsxs)("section",{className:"jp-CodexSettingsSection","aria-label":"Message options",children:[(0,i.jsx)("div",{className:"jp-CodexSettingsSection-title",children:"Message Options"}),(0,i.jsxs)("div",{className:"jp-CodexSettingsOptions",children:[(0,i.jsxs)("label",{className:"jp-CodexChat-toggle",children:[(0,i.jsx)("input",{type:"checkbox",checked:T,onChange:e=>z(e.currentTarget.checked),disabled:"running"===tr}),"Auto-save before send"]}),(0,i.jsxs)("label",{className:"jp-CodexChat-toggle",children:[(0,i.jsx)("input",{type:"checkbox",checked:U,onChange:e=>F(e.currentTarget.checked),disabled:"running"===tr}),"Include active cell"]}),(0,i.jsxs)("label",{className:"jp-CodexChat-toggle",children:[(0,i.jsx)("input",{type:"checkbox",checked:D,onChange:e=>W(e.currentTarget.checked),disabled:"running"===tr||!U}),"Include active cell output"]})]})]}),(0,i.jsxs)("section",{className:"jp-CodexSettingsSection","aria-label":"Notification options",children:[(0,i.jsx)("div",{className:"jp-CodexSettingsSection-title",children:"NOTIFICATION"}),(0,i.jsxs)("div",{className:"jp-CodexSettingsOptions",children:[(0,i.jsxs)("label",{className:"jp-CodexChat-toggle",children:[(0,i.jsx)("input",{type:"checkbox",checked:ee,onChange:e=>{!async function(e){if(!e)return void ne(!1);const n=_e(),t=g.current||"";if("unsupported"===n)return Fo(t,"system","Browser notifications are not supported in this environment."),void ne(!1);if("granted"!==n){if("denied"===n)return Fo(t,"system","Browser notifications are blocked for this site. Allow notifications in browser settings to enable this option."),void ne(!1);try{const e=await window.Notification.requestPermission();if("granted"===e)return void ne(!0);"denied"===e&&Fo(t,"system","Browser notification permission was denied. Allow notifications in browser settings to enable this option."),ne(!1)}catch{Fo(t,"system","Failed to request browser notification permission."),ne(!1)}}else ne(!0)}(e.currentTarget.checked)},disabled:"running"===tr||jr}),"Notify when run finishes"]}),(0,i.jsxs)("label",{className:"jp-CodexSettingsField",children:[(0,i.jsx)("span",{className:"jp-CodexSettingsField-label",children:"Minimum runtime (seconds)"}),(0,i.jsx)("input",{type:"number",min:"0",step:"1",className:"jp-CodexChat-model-input",value:te,onChange:e=>re(Number.isFinite(Number(e.currentTarget.value))?Math.max(0,Math.floor(Number(e.currentTarget.value))):0),disabled:jr}),(0,i.jsx)("span",{className:"jp-CodexSettingsField-help",children:"0 means notify for every finished run. Enter only when you want delayed notifications."})]}),(0,i.jsx)("span",{className:"jp-CodexSettingsField-help",children:yr})]})]}),(0,i.jsxs)("section",{className:"jp-CodexSettingsSection jp-CodexSettingsSection-danger","aria-label":"Danger zone",children:[(0,i.jsx)("div",{className:"jp-CodexSettingsSection-title jp-CodexSettingsSection-title-danger",children:"Danger Zone"}),(0,i.jsx)("div",{className:"jp-CodexSettingsPanel-stats",children:(0,i.jsxs)("span",{className:"jp-CodexSettingsPanel-stat",children:["Saved conversations: ",io]})}),(0,i.jsx)("div",{className:"jp-CodexSettingsDanger",children:(0,i.jsx)("button",{type:"button",className:"jp-CodexBtn jp-CodexBtn-xs jp-CodexBtn-danger",onClick:()=>{!async function(){const e=Fe();if(!e&&0===n.size)return;if(!(await(0,o.showDialog)({title:"Delete all conversations",body:`This will delete ${e} saved conversation(s) and all in-memory messages in this panel.`,buttons:[o.Dialog.cancelButton(),o.Dialog.okButton({label:"Delete"})]})).button.accept)return;const t=g.current||"";t&&Wo(t),We(),!Io()&&t&&Fo(t,"system","Delete request could not be sent now. It will be retried when you reconnect."),vt.current=new Map,Ct.current=new Map,Pt.current=new Map,$e(Ee),mt.current=new Map,$e(Tn),wo(new Map),xo(),Go()}()},disabled:"running"===tr||0===io&&0===n.size,title:"running"===tr?"Cannot delete while a run is in progress.":"Delete all saved conversations",children:"Delete all"})})]})]})]})]})]})}var ot=t(5072),rt=t.n(ot),it=t(7825),at=t.n(it),st=t(7659),ct=t.n(st),dt=t(5056),lt=t.n(dt),pt=t(540),ut=t.n(pt),xt=t(1113),ft=t.n(xt),mt=t(2646),gt={};gt.styleTagTransform=ft(),gt.setAttributes=lt(),gt.insert=ct().bind(null,"head"),gt.domAPI=at(),gt.insertStyleElement=ut(),rt()(mt.A,gt),mt.A&&mt.A.locals&&mt.A.locals;const ht={id:"jupyterlab-codex:plugin",autoStart:!0,requires:[o.ICommandPalette,r.INotebookTracker],activate:(e,n,t)=>{const o=new Cn(e,t);o.id="jupyterlab-codex-sidebar",o.title.caption="Codex",o.title.label="Codex",e.shell.add(o,"right"),n.addItem({command:"jupyterlab-codex:activate",category:"Codex"}),e.commands.addCommand("jupyterlab-codex:activate",{label:"Focus Codex Sidebar",execute:()=>{e.shell.activateById(o.id)}})}}},2646(e,n,t){t.d(n,{A:()=>x});var o=t(1601),r=t.n(o),i=t(6314),a=t.n(i),s=t(2479),c=t(4417),d=t.n(c),l=new URL(t(3915),t.b),p=a()(r());p.i(s.A);var u=d()(l);p.push([e.id,`.jp-CodexPanel {\n height: 100%;\n display: flex;\n flex-direction: column;\n container-type: inline-size;\n\n --cdx-bg: var(--jp-layout-color1, #ffffff);\n --cdx-surface: var(--jp-layout-color0, #ffffff);\n --cdx-surface-2: var(--jp-layout-color2, #f3f4f6);\n --cdx-border: var(--jp-border-color2, rgba(148, 163, 184, 0.35));\n --cdx-text: var(--jp-ui-font-color0, #0f172a);\n --cdx-muted: var(--jp-ui-font-color2, #64748b);\n --cdx-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",\n "Courier New", monospace;\n\n --cdx-accent: var(--jupyterlab-codex-accent, #6E80FF);\n --cdx-good: var(--jp-success-color1, #22c55e);\n --cdx-warn: var(--jp-warn-color1, #f97316);\n --cdx-bad: var(--jp-error-color1, #ef4444);\n --cdx-code-text: var(--cdx-text);\n --cdx-code-comment: #6b7280;\n --cdx-code-keyword: #7c3aed;\n --cdx-code-string: #0f766e;\n --cdx-code-number: #b45309;\n --cdx-code-function: #0f766e;\n --cdx-code-variable: #1d4ed8;\n --cdx-code-operator: #334155;\n --cdx-code-title: #0f172a;\n\n --cdx-radius: 14px;\n --cdx-radius-sm: 10px;\n\n font-family: var(\n --jp-ui-font-family,\n system-ui,\n -apple-system,\n Segoe UI,\n Roboto,\n Helvetica,\n Arial,\n sans-serif\n );\n color: var(--cdx-text);\n background: var(--cdx-bg);\n}\n\n.jp-mod-theme-light .jp-CodexPanel {\n --cdx-code-text: #0f172a;\n --cdx-code-comment: #6b7280;\n --cdx-code-keyword: #7c3aed;\n --cdx-code-string: #0f766e;\n --cdx-code-number: #b45309;\n --cdx-code-function: #0f766e;\n --cdx-code-variable: #1d4ed8;\n --cdx-code-operator: #334155;\n --cdx-code-title: #0f172a;\n}\n\n.jp-mod-theme-dark .jp-CodexPanel {\n --cdx-code-text: #e2e8f0;\n --cdx-code-comment: #94a3b8;\n --cdx-code-keyword: #c084fc;\n --cdx-code-string: #5eead4;\n --cdx-code-number: #fbbf24;\n --cdx-code-function: #4ade80;\n --cdx-code-variable: #93c5fd;\n --cdx-code-operator: #cbd5e1;\n --cdx-code-title: #f8fafc;\n}\n\n.jp-CodexChat {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n\n /* Space reserved for the input's top fade overlay so the last message isn't washed out. */\n --cdx-chat-bottom-fade: 28px;\n}\n\n.jp-CodexChat-header {\n position: sticky;\n top: 0;\n z-index: 2;\n padding: 10px 10px 8px;\n border-bottom: none;\n background: var(--cdx-bg);\n container-type: inline-size;\n}\n\n.jp-CodexChat-header::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n bottom: -24px;\n height: 24px;\n background: linear-gradient(\n to bottom,\n var(--cdx-bg),\n color-mix(in srgb, var(--cdx-bg) 0%, transparent)\n );\n pointer-events: none;\n}\n\n.jp-CodexChat-header-top {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.jp-CodexChat-header-left {\n min-width: 0;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.jp-CodexChat-header-actions {\n justify-self: end;\n display: flex;\n align-items: center;\n gap: 0;\n}\n\n@container (max-width: 420px) {\n .jp-CodexHeaderBtn-label {\n display: none;\n }\n}\n\n@container (max-width: 380px) {\n .jp-CodexChat-header {\n padding: 8px 8px 8px;\n }\n\n .jp-CodexChat-header-top {\n gap: 8px;\n }\n\n .jp-CodexChat-header-actions {\n gap: 0;\n }\n\n .jp-CodexChat-notebook {\n min-width: 0;\n }\n}\n\n.jp-CodexChat-subtitle {\n margin-top: 8px;\n padding: 6px 10px;\n border-radius: 12px;\n border: 1px solid var(--cdx-border);\n background: var(--cdx-surface);\n font-family: var(--cdx-mono);\n font-size: 12px;\n color: var(--cdx-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.jp-CodexPairingNotice {\n margin-top: 8px;\n padding: 10px 10px;\n border-radius: 12px;\n border: 1px solid color-mix(in srgb, var(--cdx-warn) 40%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-warn) 10%, var(--cdx-surface));\n}\n\n.jp-CodexPairingNotice-title {\n font-size: 12px;\n font-weight: 750;\n color: color-mix(in srgb, var(--cdx-warn) 70%, var(--cdx-text));\n}\n\n.jp-CodexPairingNotice-body {\n margin-top: 4px;\n font-size: 12px;\n color: color-mix(in srgb, var(--cdx-warn) 55%, var(--cdx-text));\n white-space: pre-wrap;\n}\n\n.jp-CodexChat-notebook {\n flex: 0 1 auto;\n min-width: 0;\n height: auto;\n display: inline-flex;\n align-items: center;\n padding: 0;\n border-radius: 0;\n border: none;\n background: transparent;\n font-size: 13px;\n font-weight: 650;\n color: var(--cdx-text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.jp-CodexChat-notebookWrap {\n position: relative;\n flex: 0 1 auto;\n min-width: 0;\n display: inline-flex;\n}\n\n.jp-CodexChat-notebookWrap::after {\n content: attr(data-full-name);\n position: absolute;\n left: 0;\n top: calc(100% + 6px);\n z-index: 35;\n display: none;\n max-width: min(480px, calc(100vw - 40px));\n padding: 6px 8px;\n border-radius: 8px;\n border: 1px solid var(--cdx-border);\n background: var(--cdx-surface);\n color: var(--cdx-text);\n font-size: 12px;\n font-weight: 550;\n line-height: 1.3;\n white-space: normal;\n overflow-wrap: anywhere;\n box-shadow: 0 8px 24px rgba(2, 6, 23, 0.16);\n pointer-events: none;\n}\n\n.jp-CodexChat-notebookWrap[data-full-name]:not([data-full-name='']):hover::after,\n.jp-CodexChat-notebookWrap[data-full-name]:not([data-full-name='']):focus-within::after {\n display: block;\n}\n\n.jp-CodexHeaderBtn {\n appearance: none;\n height: 32px;\n padding: 0 10px;\n border-radius: 10px;\n border: 1px solid transparent;\n background: transparent;\n color: var(--cdx-muted);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n cursor: pointer;\n font-size: 12px;\n font-weight: 650;\n transition: background 120ms ease, border-color 120ms ease, color 120ms ease;\n}\n\n.jp-CodexHeaderBtn svg {\n opacity: 0.9;\n}\n\n.jp-CodexHeaderBtn:hover:not(:disabled) {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n color: var(--cdx-text);\n}\n\n.jp-CodexHeaderBtn:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n}\n\n.jp-CodexHeaderBtn-icon {\n width: 32px;\n padding: 0;\n}\n\n.jp-CodexHeaderBtn-icon.is-active {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n color: var(--cdx-text);\n}\n\n.jp-CodexHeaderBtn-danger {\n color: color-mix(in srgb, var(--cdx-bad) 78%, var(--cdx-muted));\n}\n\n.jp-CodexHeaderBtn-danger:hover:not(:disabled) {\n background: color-mix(in srgb, var(--cdx-bad) 8%, var(--cdx-surface));\n border-color: color-mix(in srgb, var(--cdx-bad) 35%, var(--cdx-border));\n color: color-mix(in srgb, var(--cdx-bad) 85%, var(--cdx-text));\n}\n\n.jp-CodexSettingsOverlay {\n position: absolute;\n inset: 0;\n z-index: 40;\n display: flex;\n justify-content: center;\n align-items: flex-start;\n padding: 54px 10px 10px;\n}\n\n.jp-CodexSettingsBackdrop {\n position: absolute;\n inset: 0;\n appearance: none;\n margin: 0;\n padding: 0;\n border: 0;\n background: color-mix(in srgb, var(--cdx-bg) 58%, transparent);\n -webkit-backdrop-filter: blur(5px);\n backdrop-filter: blur(5px);\n cursor: pointer;\n}\n\n.jp-CodexSettingsPanel {\n position: relative;\n z-index: 1;\n width: min(100%, 680px);\n max-height: calc(100% - 54px);\n overflow: auto;\n border-radius: var(--cdx-radius);\n border: 1px solid var(--cdx-border);\n background: var(--cdx-surface);\n padding: 14px;\n}\n\n.jp-CodexSettingsPanel-top {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n}\n\n.jp-CodexSettingsPanel-sections {\n margin-top: 12px;\n padding-top: 14px;\n border-top: 1px solid var(--cdx-border);\n display: grid;\n gap: 18px;\n}\n\n.jp-CodexSettingsSection {\n display: grid;\n gap: 10px;\n}\n\n.jp-CodexSettingsSection-title {\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--cdx-muted);\n}\n\n.jp-CodexSettingsSection-title-danger {\n color: color-mix(in srgb, var(--cdx-bad) 72%, var(--cdx-muted));\n}\n\n.jp-CodexSettingsField {\n display: grid;\n gap: 6px;\n}\n\n.jp-CodexSettingsField-label {\n font-size: 12px;\n color: var(--cdx-text);\n}\n\n.jp-CodexSettingsField .jp-CodexChat-model-input {\n width: 100%;\n max-width: 100%;\n min-width: 0;\n display: block;\n box-sizing: border-box;\n}\n\n.jp-CodexSettingsField-help {\n font-size: 11px;\n color: var(--cdx-muted);\n}\n\n.jp-CodexSettingsOptions {\n display: grid;\n gap: 8px;\n}\n\n.jp-CodexSettingsPanel .jp-CodexChat-toggle {\n width: 100%;\n justify-content: flex-start;\n border: 1px solid transparent;\n background: transparent;\n padding: 4px 0;\n border-radius: 8px;\n}\n\n.jp-CodexSettingsPanel .jp-CodexChat-toggle:hover {\n background: transparent;\n border-color: transparent;\n color: inherit;\n}\n\n.jp-CodexSettingsPanel-stats {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n}\n\n.jp-CodexSettingsPanel-stat {\n font-size: 12px;\n color: var(--cdx-muted);\n}\n\n.jp-CodexSettingsDanger {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 10px;\n}\n\n.jp-CodexSettingsSection-danger {\n padding-top: 14px;\n border-top: 1px solid color-mix(in srgb, var(--cdx-bad) 18%, var(--cdx-border));\n}\n\n.jp-CodexSettingsPanel-title {\n font-size: 12px;\n font-weight: 700;\n color: var(--cdx-muted);\n}\n\n.jp-CodexChat-settings {\n margin-top: 8px;\n}\n\n.jp-CodexChat-settingsSummary {\n cursor: pointer;\n user-select: none;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n border-radius: 12px;\n border: 1px solid var(--cdx-border);\n background: var(--cdx-surface-2);\n color: var(--cdx-text);\n font-size: 12px;\n font-weight: 650;\n}\n\n.jp-CodexChat-settingsSummary::-webkit-details-marker {\n display: none;\n}\n\n.jp-CodexChat-controls {\n margin-top: 10px;\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.jp-CodexChat-model {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--cdx-muted);\n}\n\n.jp-CodexChat-model select,\n.jp-CodexChat-model-input {\n border: 1px solid var(--cdx-border);\n border-radius: 10px;\n background: var(--cdx-surface);\n color: var(--cdx-text);\n font-size: 12px;\n padding: 6px 10px;\n outline: none;\n}\n\n.jp-CodexChat-model select:focus,\n.jp-CodexChat-model-input:focus {\n border-color: color-mix(in srgb, var(--cdx-accent) 65%, var(--cdx-border));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cdx-accent) 22%, transparent);\n}\n\n.jp-CodexChat-model-input {\n width: 170px;\n}\n\n.jp-CodexChat-toggle {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--cdx-muted);\n padding: 6px 10px;\n border-radius: 12px;\n border: 1px solid var(--cdx-border);\n background: var(--cdx-surface-2);\n}\n\n.jp-CodexChat-toggle input[type="checkbox"] {\n accent-color: var(--cdx-accent);\n}\n\n.jp-CodexStatusPill {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n padding: 0;\n border-radius: 999px;\n border: none;\n background: transparent;\n}\n\n.jp-CodexStatusPill-dot {\n position: relative;\n width: 8px;\n height: 8px;\n border-radius: 999px;\n background: var(--cdx-muted);\n box-shadow: none;\n}\n\n.jp-CodexStatusPill-ready {\n color: color-mix(in srgb, var(--cdx-good) 70%, var(--cdx-text));\n}\n\n.jp-CodexStatusPill-ready .jp-CodexStatusPill-dot {\n background: var(--cdx-good);\n box-shadow: none;\n}\n\n.jp-CodexStatusPill-running {\n color: color-mix(in srgb, var(--cdx-warn) 75%, var(--cdx-text));\n}\n\n.jp-CodexStatusPill-running .jp-CodexStatusPill-dot {\n background: var(--cdx-warn);\n animation: cdx-status-dot 900ms ease-in-out infinite;\n}\n\n.jp-CodexStatusPill-running .jp-CodexStatusPill-dot::after {\n content: '';\n position: absolute;\n inset: -6px;\n border-radius: 999px;\n border: 2px solid color-mix(in srgb, var(--cdx-warn) 70%, transparent);\n opacity: 0;\n transform: scale(0.6);\n animation: cdx-status-ring 900ms ease-out infinite;\n pointer-events: none;\n}\n\n.jp-CodexStatusPill-disconnected {\n color: color-mix(in srgb, var(--cdx-bad) 75%, var(--cdx-text));\n}\n\n.jp-CodexStatusPill-disconnected .jp-CodexStatusPill-dot {\n background: var(--cdx-bad);\n box-shadow: none;\n}\n\n.jp-CodexChat-body {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.jp-CodexChat-activity {\n align-self: stretch;\n border: none;\n background: transparent;\n padding: 0;\n}\n\n.jp-CodexActivitySummary {\n display: flex;\n gap: 6px;\n align-items: flex-start;\n font-family: var(--cdx-mono);\n font-size: 12px;\n line-height: 1.15;\n color: var(--cdx-text);\n padding: 0;\n border-radius: 0;\n background: transparent;\n cursor: pointer;\n user-select: none;\n outline: none;\n}\n\n.jp-CodexActivitySummary::-webkit-details-marker {\n display: none;\n}\n\n.jp-CodexActivitySummary::marker {\n content: '';\n}\n\n.jp-CodexActivitySummaryStatic {\n cursor: default;\n user-select: text;\n}\n\n.jp-CodexChat-activity.is-expandable .jp-CodexActivitySummary:hover {\n background: transparent;\n}\n\n.jp-CodexChat-activity.is-expandable .jp-CodexActivitySummary {\n padding: 2px 0;\n border-radius: 0;\n opacity: 0.72;\n transition: opacity 120ms ease;\n}\n\n.jp-CodexChat-activity.is-expandable .jp-CodexActivitySummary:active {\n opacity: 0.92;\n}\n\n.jp-CodexChat-activity.is-expandable .jp-CodexActivitySummary:hover,\n.jp-CodexChat-activity.is-expandable[open] .jp-CodexActivitySummary {\n opacity: 1;\n}\n\n.jp-CodexActivityLineIcon {\n flex: 0 0 auto;\n width: 14px;\n height: 14px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: color-mix(in srgb, var(--cdx-muted) 80%, var(--cdx-text));\n}\n\n.jp-CodexActivityDot {\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--cdx-accent) 70%, var(--cdx-border));\n}\n\n.jp-CodexActivityLineIcon svg {\n display: block;\n}\n\n.jp-CodexActivityDot.is-idle {\n background: color-mix(in srgb, var(--cdx-muted) 55%, var(--cdx-border));\n}\n\n.jp-CodexActivityLineText {\n min-width: 0;\n word-break: break-word;\n}\n\n.jp-CodexActivityLineTitle {\n font-weight: 400;\n color: var(--cdx-muted);\n}\n\n.jp-CodexActivityLineDetail {\n color: var(--cdx-muted);\n white-space: pre-wrap;\n}\n\n.jp-CodexActivityBody {\n padding: 4px 0 0 20px;\n}\n\n.jp-CodexActivityCode {\n margin: 0;\n padding: 6px 8px;\n border-radius: calc(var(--cdx-radius) - 2px);\n background: color-mix(in srgb, var(--cdx-surface) 88%, var(--cdx-surface-2));\n border: 1px solid color-mix(in srgb, var(--cdx-border) 60%, transparent);\n font-family: var(--jp-code-font-family, var(--cdx-mono)) !important;\n font-size: 10px !important;\n line-height: 1.2 !important;\n white-space: pre-wrap;\n overflow-x: auto;\n}\n\n.jp-CodexActivityCode code {\n font-family: var(--jp-code-font-family, var(--cdx-mono)) !important;\n font-size: inherit !important;\n line-height: inherit !important;\n}\n\n.jp-CodexChat-messages {\n flex: 1;\n min-height: 0;\n overflow: auto;\n /* Extra bottom padding keeps the last message out from under the input's fade overlay. */\n padding: 12px 12px calc(12px + var(--cdx-chat-bottom-fade) + env(safe-area-inset-bottom, 0px));\n display: flex;\n flex-direction: column;\n /* Use a tight baseline gap; expand only for full chat bubbles below. */\n gap: 6px;\n overscroll-behavior: contain;\n scrollbar-gutter: stable both-edges;\n scroll-padding-bottom: calc(12px + var(--cdx-chat-bottom-fade) + env(safe-area-inset-bottom, 0px));\n}\n\n.jp-CodexRunDivider {\n display: flex;\n align-items: center;\n gap: 12px;\n margin: 6px 2px 2px;\n color: var(--cdx-muted);\n font-size: 11px;\n line-height: 1.2;\n user-select: none;\n animation: cdx-fade-up 160ms ease-out both;\n}\n\n.jp-CodexRunDivider::before,\n.jp-CodexRunDivider::after {\n content: '';\n flex: 1 1 auto;\n height: 1px;\n background: color-mix(in srgb, var(--cdx-border) 80%, transparent);\n}\n\n.jp-CodexRunDividerLabel {\n white-space: nowrap;\n color: color-mix(in srgb, var(--cdx-muted) 88%, var(--cdx-text));\n}\n\n.jp-CodexChat-user,\n.jp-CodexChat-assistant {\n /* Restore a roomier rhythm for the main chat bubbles without affecting activity lines. */\n margin-top: 6px;\n}\n\n.jp-CodexChat-message {\n position: relative;\n box-sizing: border-box;\n min-width: 0;\n padding: 10px 12px;\n border-radius: var(--cdx-radius);\n border: 1px solid color-mix(in srgb, var(--cdx-border) 70%, transparent);\n background: var(--cdx-surface);\n box-shadow: none;\n max-width: 100%;\n animation: cdx-fade-up 160ms ease-out both;\n}\n\n.jp-CodexChat-message.jp-CodexChat-activity {\n border: 0;\n background: transparent;\n padding: 0;\n border-radius: 0;\n box-shadow: none;\n}\n\n.jp-CodexChat-user {\n align-self: flex-end;\n background: color-mix(in srgb, var(--cdx-accent) 8%, var(--cdx-surface));\n border: 0;\n /* Indent user bubbles from the left so they remain visually distinct even when wide. */\n margin-left: clamp(24px, 8vw, 96px);\n}\n\n.jp-CodexChat-assistant {\n align-self: flex-start;\n border: 0;\n background: transparent;\n padding-left: 0;\n padding-right: 0;\n}\n\n/* If assistant output is a single fenced code block, remove outer bubble fill/padding. */\n.jp-CodexChat-assistant:has(> .jp-CodexChat-text > .jp-CodexCodeBlockWrap:only-child) {\n background: transparent;\n padding-top: 0;\n padding-bottom: 0;\n}\n\n.jp-CodexChat-assistant:has(> .jp-CodexChat-text > .jp-CodexCodeBlockWrap:only-child)\n > .jp-CodexChat-text\n > .jp-CodexCodeBlockWrap {\n margin-top: 0;\n}\n\n.jp-CodexChat-system {\n align-self: center;\n box-shadow: none;\n border: 0;\n border-color: transparent;\n background: transparent;\n color: var(--cdx-muted);\n text-align: center;\n padding: 2px 0;\n border-radius: 0;\n}\n\n.jp-CodexChat-reconnectNotice {\n align-self: stretch;\n border: 1px solid color-mix(in srgb, var(--cdx-warn) 35%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-warn) 10%, var(--cdx-surface));\n color: color-mix(in srgb, var(--cdx-warn) 62%, var(--cdx-text));\n text-align: left;\n padding: 10px 12px;\n border-radius: var(--cdx-radius-sm);\n}\n\n.jp-CodexChat-system .jp-CodexChat-text {\n /* System notices should read like status text, not a "message bubble". */\n font-size: 12px;\n line-height: 1.4;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n}\n\n.jp-CodexChat-reconnectNotice .jp-CodexChat-text {\n justify-content: flex-start;\n}\n\n.jp-CodexChat-system .jp-CodexChat-text::before {\n content: '';\n width: 14px;\n height: 14px;\n flex: 0 0 14px;\n background-repeat: no-repeat;\n background-size: 14px 14px;\n /* Inline SVG (data URI) so we don't depend on theme icon packs. */\n background-image: url(${u});\n}\n\n.jp-CodexChat-system.is-success .jp-CodexChat-text::before {\n content: none;\n display: none;\n background-image: none;\n}\n\n.jp-CodexChat-system.is-success .jp-CodexChat-text {\n gap: 0;\n}\n\n.jp-CodexReconnectBtn {\n appearance: none;\n margin-top: 8px;\n padding: 6px 10px;\n border: 1px solid color-mix(in srgb, var(--cdx-warn) 45%, var(--cdx-border));\n border-radius: 8px;\n background: var(--cdx-surface);\n color: color-mix(in srgb, var(--cdx-warn) 78%, var(--cdx-text));\n font-size: 12px;\n font-weight: 700;\n line-height: 1.3;\n text-decoration: none;\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease, color 120ms ease;\n}\n\n.jp-CodexReconnectBtn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--cdx-warn) 10%, var(--cdx-surface));\n border-color: color-mix(in srgb, var(--cdx-warn) 60%, var(--cdx-border));\n color: color-mix(in srgb, var(--cdx-warn) 88%, var(--cdx-text));\n}\n\n.jp-CodexReconnectBtn:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n}\n\n.jp-CodexChat-role {\n display: none;\n font-family: var(--cdx-mono);\n font-size: 11px;\n letter-spacing: 0.02em;\n color: var(--cdx-muted);\n margin-bottom: 6px;\n}\n\n.jp-CodexChat {\n --jp-code-font-size: 13px;\n}\n\n.jp-CodexChat-text {\n font-size: var(--jp-code-font-size);\n line-height: 1.55;\n color: inherit;\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n\n.jp-CodexChat-text code,\n.jp-CodexChat-text pre,\n.jp-CodexChat-text pre code {\n font-size: var(--jp-code-font-size);\n}\n\n.jp-CodexChat-attachments {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 8px;\n}\n\n.jp-CodexChat-selectionToggle {\n appearance: none;\n -webkit-appearance: none;\n box-sizing: border-box;\n position: absolute;\n right: calc(var(--cdx-selection-btn-size, 2em) * -0.14);\n bottom: calc(var(--cdx-selection-btn-size, 2em) * -0.36);\n z-index: 1;\n width: var(--cdx-selection-btn-size, 2em) !important;\n height: var(--cdx-selection-btn-size, 2em) !important;\n min-width: var(--cdx-selection-btn-size, 2em) !important;\n min-height: var(--cdx-selection-btn-size, 2em) !important;\n max-width: var(--cdx-selection-btn-size, 2em) !important;\n max-height: var(--cdx-selection-btn-size, 2em) !important;\n border-radius: 50% !important;\n overflow: hidden;\n border: 2px solid color-mix(in srgb, var(--cdx-surface) 94%, #ffffff);\n background: #101010;\n color: #ffffff;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n line-height: 0;\n font-size: calc(var(--cdx-selection-btn-size, 2em) * 0.48);\n cursor: pointer;\n box-shadow: 0 8px 22px rgba(10, 10, 10, 0.3);\n opacity: 1;\n transition: background 120ms ease, border-color 120ms ease, color 120ms ease, transform 120ms ease,\n opacity 120ms ease;\n}\n\n.jp-CodexChat-selectionToggle svg {\n display: block;\n transition: transform 120ms ease;\n}\n\n.jp-CodexChat-selectionToggle:hover {\n background: #1a1a1a;\n border-color: color-mix(in srgb, #ffffff 94%, var(--cdx-border));\n transform: translateY(-1px);\n}\n\n.jp-CodexChat-selectionToggle.is-open {\n background: #000000;\n border-color: #ffffff;\n}\n\n.jp-CodexChat-selectionToggle.is-open svg {\n transform: rotate(45deg);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .jp-CodexChat-user.has-selection-preview .jp-CodexChat-selectionToggle {\n opacity: 0;\n pointer-events: none;\n transform: translateY(2px) scale(0.94);\n }\n\n .jp-CodexChat-user.has-selection-preview:hover .jp-CodexChat-selectionToggle,\n .jp-CodexChat-user.has-selection-preview:focus-within .jp-CodexChat-selectionToggle,\n .jp-CodexChat-user.has-selection-preview.is-selection-open .jp-CodexChat-selectionToggle {\n opacity: 1;\n pointer-events: auto;\n transform: translateY(0) scale(1);\n }\n\n .jp-CodexChat-user.has-selection-preview .jp-CodexChat-selectionToggle:hover {\n transform: translateY(-1px) scale(1);\n }\n}\n\n.jp-CodexChat-selectionCard {\n margin-top: 0;\n width: auto;\n padding: 9px 11px;\n border-radius: 12px;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 72%, transparent);\n background: color-mix(in srgb, var(--cdx-surface-2) 82%, transparent);\n}\n\n.jp-CodexChat-contextSection + .jp-CodexChat-contextSection {\n margin-top: 10px;\n padding-top: 10px;\n border-top: 1px solid color-mix(in srgb, var(--cdx-border) 66%, transparent);\n}\n\n.jp-CodexChat-selectionMeta {\n font-family: var(--cdx-mono);\n font-size: 11px;\n line-height: 1.35;\n color: var(--cdx-muted);\n}\n\n.jp-CodexChat-selectionText {\n margin-top: 4px;\n font-family: var(--cdx-mono);\n font-size: 12px;\n line-height: 1.45;\n color: var(--cdx-text);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n\n.jp-CodexChat-selectionCode {\n margin-top: 6px;\n border-radius: 10px;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 78%, transparent);\n background: color-mix(in srgb, var(--cdx-surface) 86%, var(--cdx-surface-2));\n padding: 8px 10px;\n overflow: auto;\n}\n\n.jp-CodexChat-selectionCode code.hljs {\n white-space: pre;\n}\n\n.jp-CodexChat-message.has-selection-preview {\n overflow: visible;\n}\n\n.jp-CodexChat-user.has-selection-preview {\n --cdx-selection-btn-size: clamp(1.85em, 2.08em, 2.28em);\n margin-bottom: calc(var(--cdx-selection-btn-size) * 0.45);\n}\n\n.jp-CodexChat-attachmentPill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n border-radius: 999px;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 70%, transparent);\n background: color-mix(in srgb, var(--cdx-surface-2) 80%, transparent);\n color: var(--cdx-muted);\n font-family: var(--cdx-mono);\n font-size: 11px;\n line-height: 1;\n}\n\n.jp-CodexChat-attachmentCount {\n color: var(--cdx-text);\n}\n\n.jp-CodexMarkdown {\n white-space: normal;\n}\n\n.jp-CodexMarkdown > :first-child {\n margin-top: 0;\n}\n\n.jp-CodexMarkdown > :last-child {\n margin-bottom: 0;\n}\n\n.jp-CodexMarkdown p {\n margin: 0 0 10px;\n}\n\n.jp-CodexMarkdown ul,\n.jp-CodexMarkdown ol {\n margin: 8px 0 8px 18px;\n padding: 0;\n}\n\n.jp-CodexMarkdown li {\n margin: 4px 0;\n}\n\n.jp-CodexMarkdown a {\n color: var(--cdx-accent);\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n\n.jp-CodexMarkdown code {\n font-family: var(--cdx-mono);\n font-size: 8px;\n color: var(--cdx-code-text);\n padding: 2px 5px;\n margin-left: 2px;\n margin-right: 2px;\n border-radius: 8px;\n border: 0;\n background: color-mix(in srgb, var(--cdx-surface-2) 78%, transparent);\n line-height: 1.45;\n -webkit-box-decoration-break: clone;\n box-decoration-break: clone;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n\n.jp-CodexChat .jp-CodexMarkdown code {\n font-family: var(--cdx-mono) !important;\n font-size: 12px !important;\n}\n\n.jp-CodexMarkdown pre {\n margin: 10px 0 0;\n padding: 10px;\n border-radius: var(--cdx-radius-sm);\n border: 1px solid var(--cdx-border);\n background: color-mix(in srgb, var(--cdx-surface-2) 88%, transparent);\n overflow: auto;\n font-family: var(--cdx-mono);\n font-size: 12px;\n line-height: 1.5;\n}\n\n.jp-CodexMarkdown pre code {\n font-size: inherit;\n line-height: inherit;\n padding: 0;\n border: 0;\n background: transparent;\n white-space: pre;\n}\n\n.jp-CodexMarkdown blockquote {\n margin: 10px 0;\n padding-left: 10px;\n border-left: 3px solid var(--cdx-border);\n color: var(--cdx-muted);\n}\n\n.jp-CodexMarkdown hr {\n border: 0;\n border-top: 1px solid var(--cdx-border);\n margin: 12px 0;\n}\n\n.jp-CodexCodeBlockWrap {\n margin: 10px 0 0;\n border-radius: var(--cdx-radius-sm);\n border: 1px solid var(--cdx-border);\n background: color-mix(in srgb, var(--cdx-surface-2) 88%, transparent);\n overflow: hidden;\n}\n\n.jp-CodexCodeBlockBar {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 10px;\n border-bottom: 1px solid var(--cdx-border);\n background: color-mix(in srgb, var(--cdx-surface) 75%, transparent);\n}\n\n.jp-CodexCodeBlockMeta {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: center;\n}\n\n.jp-CodexCodeBlockLang {\n font-family: var(--cdx-mono);\n font-size: 11px;\n color: var(--cdx-muted);\n}\n\n.jp-CodexCodeBlock {\n margin: 0;\n padding: 10px;\n overflow: auto;\n font-family: var(--cdx-mono);\n font-size: 12px;\n line-height: 1.5;\n color: var(--cdx-code-text);\n}\n\n.jp-CodexCodeBlock code.hljs {\n display: block;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n color: var(--cdx-code-text);\n font-family: inherit;\n white-space: pre;\n}\n\n.jp-CodexCodeBlock .hljs-comment,\n.jp-CodexCodeBlock .hljs-quote {\n color: var(--cdx-code-comment);\n font-style: italic;\n}\n\n.jp-CodexCodeBlock .hljs-keyword,\n.jp-CodexCodeBlock .hljs-selector-tag,\n.jp-CodexCodeBlock .hljs-literal,\n.jp-CodexCodeBlock .hljs-operator {\n color: var(--cdx-code-keyword);\n}\n\n.jp-CodexCodeBlock .hljs-string,\n.jp-CodexCodeBlock .hljs-symbol,\n.jp-CodexCodeBlock .hljs-regexp,\n.jp-CodexCodeBlock .hljs-template-tag,\n.jp-CodexCodeBlock .hljs-template-variable {\n color: var(--cdx-code-string);\n}\n\n.jp-CodexCodeBlock .hljs-number,\n.jp-CodexCodeBlock .hljs-literal {\n color: var(--cdx-code-number);\n}\n\n.jp-CodexCodeBlock .hljs-title,\n.jp-CodexCodeBlock .hljs-title.class_,\n.jp-CodexCodeBlock .hljs-title.class_.inherited__,\n.jp-CodexCodeBlock .hljs-section {\n color: var(--cdx-code-title);\n}\n\n.jp-CodexCodeBlock .hljs-function .hljs-title,\n.jp-CodexCodeBlock .hljs-title.function_,\n.jp-CodexCodeBlock .hljs-built_in,\n.jp-CodexCodeBlock .hljs-builtin-name {\n color: var(--cdx-code-function);\n}\n\n.jp-CodexCodeBlock .hljs-variable,\n.jp-CodexCodeBlock .hljs-attr,\n.jp-CodexCodeBlock .hljs-attribute,\n.jp-CodexCodeBlock .hljs-params {\n color: var(--cdx-code-variable);\n}\n\n.jp-CodexCodeBlock .hljs-meta,\n.jp-CodexCodeBlock .hljs-punctuation {\n color: var(--cdx-code-operator);\n}\n\n/* Fallback for highlight.js token classes we do not theme explicitly. */\n.jp-CodexCodeBlock .hljs-subst,\n.jp-CodexCodeBlock .hljs-type,\n.jp-CodexCodeBlock .hljs-name,\n.jp-CodexCodeBlock .hljs-class,\n.jp-CodexCodeBlock .hljs-tag,\n.jp-CodexCodeBlock .hljs-link {\n color: var(--cdx-code-text);\n}\n\n.jp-CodexCodeBlockCopyBtn {\n opacity: 0;\n pointer-events: none;\n transition: opacity 140ms ease;\n}\n\n.jp-CodexCodeBlockWrap:hover .jp-CodexCodeBlockCopyBtn,\n.jp-CodexCodeBlockWrap:focus-within .jp-CodexCodeBlockCopyBtn {\n opacity: 1;\n pointer-events: auto;\n}\n\n.jp-CodexChat-input {\n position: relative;\n z-index: 1;\n border-top: none;\n padding: 10px;\n background: var(--cdx-bg);\n}\n\n.jp-CodexChat-input::before {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n top: calc(-1 * var(--cdx-chat-bottom-fade));\n height: var(--cdx-chat-bottom-fade);\n background: linear-gradient(\n to bottom,\n color-mix(in srgb, var(--cdx-bg) 0%, transparent),\n var(--cdx-bg)\n );\n pointer-events: none;\n}\n\n.jp-CodexComposer {\n /* Keep composer controls a touch smaller than the header toolbar. */\n --cdx-composer-btn-size: 30px;\n --cdx-composer-btn-radius: 9px;\n --cdx-composer-btn-pad-x: 9px;\n\n border: 1px solid var(--cdx-border);\n border-radius: 16px;\n padding: 10px;\n background: var(--cdx-surface);\n box-shadow: none;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.jp-CodexComposer:focus-within {\n border-color: color-mix(in srgb, var(--cdx-accent) 65%, var(--cdx-border));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cdx-accent) 22%, transparent);\n}\n\n.jp-CodexComposer textarea {\n width: 100%;\n box-sizing: border-box;\n resize: none;\n min-height: calc(1.45em + 8px);\n max-height: calc(1.45em * 3 + 8px);\n border: 0;\n border-radius: 14px;\n padding: 4px 10px;\n font-size: 13px;\n line-height: 1.45;\n background: transparent;\n color: var(--cdx-text);\n outline: none;\n overflow-y: hidden;\n}\n\n.jp-CodexComposer textarea::placeholder {\n color: color-mix(in srgb, var(--cdx-muted) 70%, transparent);\n}\n\n.jp-CodexComposer textarea:disabled {\n opacity: 0.7;\n}\n\n.jp-CodexComposer-cellAttachmentWrap {\n display: flex;\n align-items: center;\n max-height: 0;\n margin-bottom: 0;\n opacity: 0;\n transform: translateY(-4px) scale(0.98);\n transform-origin: left center;\n overflow: hidden;\n pointer-events: none;\n transition: max-height 170ms ease, margin-bottom 170ms ease, opacity 170ms ease, transform 170ms ease;\n}\n\n.jp-CodexComposer-cellAttachmentWrap.is-visible {\n max-height: 32px;\n margin-bottom: 6px;\n opacity: 1;\n transform: translateY(0) scale(1);\n pointer-events: auto;\n}\n\n.jp-CodexComposer-cellAttachment {\n appearance: none;\n -webkit-appearance: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n width: fit-content;\n max-width: 100%;\n min-height: 24px;\n padding: 0 7px 0 6px;\n border-radius: 9999px !important;\n border: 1px solid transparent;\n overflow: hidden;\n background: color-mix(in srgb, var(--cdx-accent) 9%, var(--cdx-surface));\n color: color-mix(in srgb, var(--cdx-accent) 80%, var(--cdx-text));\n font-size: 11px;\n font-weight: 400;\n line-height: 1;\n cursor: pointer;\n transition: background 120ms ease, color 120ms ease, border-color 120ms ease;\n animation: cdx-cell-attachment-in 220ms cubic-bezier(0.2, 0.8, 0.2, 1);\n}\n\n.jp-CodexComposer-cellAttachment:not(.is-off) {\n border-color: color-mix(in srgb, var(--cdx-accent) 42%, var(--cdx-border));\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--cdx-accent) 16%, transparent);\n}\n\n.jp-CodexComposer-cellAttachment.is-off {\n background: color-mix(in srgb, var(--cdx-border) 28%, var(--cdx-surface));\n color: color-mix(in srgb, var(--cdx-text) 72%, var(--cdx-muted));\n}\n\n.jp-CodexComposer-cellAttachment:hover,\n.jp-CodexComposer-cellAttachment:focus-within {\n background: color-mix(in srgb, var(--cdx-accent) 80%, var(--cdx-text));\n color: var(--cdx-surface);\n}\n\n.jp-CodexComposer-cellAttachmentLabel {\n min-width: 0;\n white-space: nowrap;\n}\n\n@keyframes cdx-cell-attachment-in {\n 0% {\n opacity: 0;\n transform: translateY(-4px) scale(0.96);\n }\n 100% {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n.jp-CodexComposer-attachments {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 0 4px;\n}\n\n.jp-CodexComposer-queued {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n margin: 0 2px 4px;\n padding: 4px 8px;\n border: 1px solid color-mix(in srgb, var(--cdx-accent) 30%, var(--cdx-border));\n border-radius: 10px;\n background: color-mix(in srgb, var(--cdx-accent) 10%, var(--cdx-surface));\n color: color-mix(in srgb, var(--cdx-accent) 82%, var(--cdx-text));\n font-size: 11px;\n}\n\n.jp-CodexComposer-queuedLabel {\n flex: 0 0 auto;\n font-weight: 700;\n letter-spacing: 0.01em;\n}\n\n.jp-CodexComposer-queuedText {\n flex: 1 1 auto;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.jp-CodexComposer-queuedRemove {\n appearance: none;\n width: 16px;\n height: 16px;\n padding: 0;\n border-radius: 999px;\n border: 1px solid color-mix(in srgb, var(--cdx-accent) 35%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-surface) 84%, transparent);\n color: inherit;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease;\n}\n\n.jp-CodexComposer-queuedRemove:hover:not(:disabled) {\n background: var(--cdx-surface);\n border-color: color-mix(in srgb, var(--cdx-accent) 55%, var(--cdx-border));\n}\n\n.jp-CodexComposer-attachment {\n position: relative;\n width: 64px;\n height: 64px;\n border-radius: 14px;\n border: 1px solid var(--cdx-border);\n background: var(--cdx-surface-2);\n overflow: hidden;\n}\n\n.jp-CodexComposer-attachment img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n\n.jp-CodexComposer-attachmentRemove {\n appearance: none;\n position: absolute;\n top: 6px;\n right: 6px;\n width: 26px;\n height: 26px;\n border-radius: 10px;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 85%, transparent);\n background: color-mix(in srgb, var(--cdx-surface) 70%, transparent);\n color: var(--cdx-text);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease;\n}\n\n.jp-CodexComposer-attachmentRemove:hover:not(:disabled) {\n background: var(--cdx-surface);\n border-color: color-mix(in srgb, var(--cdx-accent) 25%, var(--cdx-border));\n}\n\n.jp-CodexComposer-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding-top: 0;\n}\n\n.jp-CodexComposer-toolbarLeft {\n display: flex;\n align-items: center;\n gap: 2px;\n flex-wrap: wrap;\n min-width: 0;\n flex: 1;\n}\n\n.jp-CodexComposer-toolbarRight {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-shrink: 0;\n}\n\n.jp-CodexContextWrap {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.jp-CodexContextBtn {\n color: color-mix(in srgb, var(--cdx-muted) 90%, var(--cdx-text));\n}\n\n.jp-CodexContextBtn.is-stale:not(:disabled) {\n opacity: 0.72;\n}\n\n.jp-CodexContextPopover {\n min-width: 176px;\n width: fit-content;\n z-index: 35;\n max-width: min(280px, calc(100vw - 24px));\n border-radius: 12px;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 85%, transparent);\n background: color-mix(in srgb, var(--cdx-surface) 94%, transparent);\n box-shadow: 0 14px 30px rgba(2, 6, 23, 0.2);\n backdrop-filter: blur(10px);\n padding: 8px 9px;\n display: grid;\n gap: 6px;\n}\n\n.jp-CodexContextPopoverTitle {\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.01em;\n color: var(--cdx-text);\n}\n\n.jp-CodexContextPopoverRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n font-size: 11px;\n color: var(--cdx-muted);\n}\n\n.jp-CodexContextPopoverRow strong {\n color: var(--cdx-text);\n font-family: var(--cdx-mono);\n font-size: 11px;\n font-weight: 600;\n}\n\n.jp-CodexContextPopoverMeta {\n padding-top: 2px;\n border-top: 1px solid color-mix(in srgb, var(--cdx-border) 80%, transparent);\n font-size: 10px;\n color: color-mix(in srgb, var(--cdx-muted) 90%, var(--cdx-text));\n}\n\n.jp-CodexComposer-hint {\n font-size: 11px;\n color: var(--cdx-muted);\n white-space: nowrap;\n}\n\n@container (max-width: 420px) {\n .jp-CodexComposer-hint {\n display: none;\n }\n}\n\n@media (max-width: 520px) {\n .jp-CodexComposer-hint {\n display: none;\n }\n}\n\n.jp-CodexIconBtn {\n appearance: none;\n width: var(--cdx-composer-btn-size, 30px);\n height: var(--cdx-composer-btn-size, 30px);\n border-radius: var(--cdx-composer-btn-radius, 9px);\n border: 1px solid transparent;\n background: transparent;\n color: var(--cdx-muted);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease, color 120ms ease;\n}\n\n.jp-CodexIconBtn:hover:not(:disabled) {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n color: var(--cdx-text);\n}\n\n.jp-CodexIconBtn:active:not(:disabled) {\n background: var(--cdx-surface-2);\n}\n\n.jp-CodexIconBtn:focus-visible {\n outline: none;\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n color: var(--cdx-text);\n box-shadow: none;\n}\n\n.jp-CodexIconBtn:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n}\n\n.jp-CodexIconBtn.is-active {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n color: var(--cdx-text);\n}\n\n.jp-CodexIconBtn.is-open {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n color: var(--cdx-text);\n}\n\n.jp-CodexMenuWrap {\n position: relative;\n display: inline-flex;\n align-items: center;\n overflow: visible;\n}\n\n.jp-CodexModelWrap {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n.jp-CodexModelBtn {\n appearance: none;\n height: var(--cdx-composer-btn-size, 30px);\n width: auto;\n max-width: 240px;\n min-width: 0;\n padding: 0 var(--cdx-composer-btn-pad-x, 9px);\n border-radius: var(--cdx-composer-btn-radius, 9px);\n border: 1px solid transparent;\n background: transparent;\n color: var(--cdx-text);\n display: inline-flex;\n align-items: center;\n justify-content: flex-start;\n cursor: pointer;\n font-size: 12px;\n font-weight: 400;\n transition: background 120ms ease, border-color 120ms ease, color 120ms ease;\n}\n\n.jp-CodexModelBtn:hover:not(:disabled) {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n}\n\n.jp-CodexModelBtn:active:not(:disabled) {\n background: var(--cdx-surface-2);\n}\n\n.jp-CodexModelBtn:focus-visible {\n outline: none;\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n box-shadow: none;\n}\n\n.jp-CodexModelBtn:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n}\n\n.jp-CodexModelBtn.is-open {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n}\n\n.jp-CodexModelBtn-label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.jp-CodexMenuWrap-right {\n justify-content: flex-end;\n}\n\n.jp-CodexMenu {\n position: absolute;\n left: 0;\n bottom: calc(100% + 10px);\n z-index: 20;\n min-width: 240px;\n max-width: min(320px, calc(100vw - 24px));\n transform-origin: bottom left;\n border-radius: 14px;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 85%, transparent);\n background: color-mix(in srgb, var(--cdx-surface) 92%, transparent);\n box-shadow: 0 14px 36px rgba(2, 6, 23, 0.16);\n padding: 6px;\n backdrop-filter: blur(10px);\n animation: cdx-menu-in 120ms ease-out both;\n}\n\n@supports (width: 1cqw) {\n .jp-CodexMenu {\n max-width: min(320px, calc(100cqw - 24px));\n }\n}\n\n.jp-CodexMenu--right {\n left: auto;\n right: 0;\n transform-origin: bottom right;\n}\n\n.jp-CodexMenuItem {\n appearance: none;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding: 9px 10px;\n border-radius: 12px;\n border: 1px solid transparent;\n background: transparent;\n color: var(--cdx-text);\n cursor: pointer;\n text-align: left;\n font-size: 12px;\n font-weight: 400;\n transition: background 120ms ease, border-color 120ms ease, color 120ms ease;\n}\n\n.jp-CodexMenuItem:hover {\n background: var(--cdx-surface-2);\n border-color: color-mix(in srgb, var(--cdx-border) 85%, transparent);\n}\n\n.jp-CodexMenuItem:focus-visible {\n outline: none;\n border-color: color-mix(in srgb, var(--cdx-accent) 45%, var(--cdx-border));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cdx-accent) 18%, transparent);\n}\n\n.jp-CodexMenuItem.is-active {\n background: color-mix(in srgb, var(--cdx-accent) 10%, var(--cdx-surface));\n border-color: color-mix(in srgb, var(--cdx-accent) 28%, var(--cdx-border));\n}\n\n.jp-CodexMenuItemLabel {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.jp-CodexMenuCheck {\n flex: 0 0 auto;\n color: color-mix(in srgb, var(--cdx-accent) 80%, var(--cdx-text));\n}\n\n.jp-CodexMenuDivider {\n height: 1px;\n margin: 6px;\n background: color-mix(in srgb, var(--cdx-border) 85%, transparent);\n}\n\n.jp-CodexMenuCustom {\n padding: 6px;\n display: grid;\n gap: 6px;\n}\n\n.jp-CodexMenuCustomLabel {\n font-size: 11px;\n font-weight: 700;\n color: var(--cdx-muted);\n}\n\n.jp-CodexMenuInput {\n width: 100%;\n border: 1px solid var(--cdx-border);\n border-radius: 12px;\n background: var(--cdx-surface);\n color: var(--cdx-text);\n font-size: 12px;\n padding: 9px 10px;\n outline: none;\n}\n\n.jp-CodexMenuInput:focus {\n border-color: color-mix(in srgb, var(--cdx-accent) 65%, var(--cdx-border));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cdx-accent) 18%, transparent);\n}\n\n.jp-CodexMenuPortal {\n position: fixed;\n bottom: auto;\n right: auto;\n z-index: 10000;\n max-width: min(360px, calc(100vw - 24px));\n\n /* Portal menus live outside \`.jp-CodexPanel\`, so they must re-declare these CSS vars. */\n --cdx-bg: var(--jp-layout-color1, #ffffff);\n --cdx-surface: var(--jp-layout-color0, #ffffff);\n --cdx-surface-2: var(--jp-layout-color2, #f3f4f6);\n --cdx-border: var(--jp-border-color2, rgba(148, 163, 184, 0.35));\n --cdx-text: var(--jp-ui-font-color0, #0f172a);\n --cdx-muted: var(--jp-ui-font-color2, #64748b);\n --cdx-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",\n "Courier New", monospace;\n\n --cdx-accent: var(--jupyterlab-codex-accent, #6E80FF);\n --cdx-good: var(--jp-success-color1, #22c55e);\n --cdx-warn: var(--jp-warn-color1, #f97316);\n --cdx-bad: var(--jp-error-color1, #ef4444);\n --cdx-code-text: var(--cdx-text);\n --cdx-code-comment: #6b7280;\n --cdx-code-keyword: #7c3aed;\n --cdx-code-string: #0f766e;\n --cdx-code-number: #b45309;\n --cdx-code-function: #0f766e;\n --cdx-code-variable: #1d4ed8;\n --cdx-code-operator: #334155;\n --cdx-code-title: #0f172a;\n\n --cdx-radius: 14px;\n --cdx-radius-sm: 10px;\n\n font-family: var(\n --jp-ui-font-family,\n system-ui,\n -apple-system,\n Segoe UI,\n Roboto,\n Helvetica,\n Arial,\n sans-serif\n );\n color: var(--cdx-text);\n}\n\n.jp-mod-theme-light .jp-CodexMenuPortal {\n --cdx-code-text: #0f172a;\n --cdx-code-comment: #6b7280;\n --cdx-code-keyword: #7c3aed;\n --cdx-code-string: #0f766e;\n --cdx-code-number: #b45309;\n --cdx-code-function: #0f766e;\n --cdx-code-variable: #1d4ed8;\n --cdx-code-operator: #334155;\n --cdx-code-title: #0f172a;\n}\n\n.jp-mod-theme-dark .jp-CodexMenuPortal {\n --cdx-code-text: #e2e8f0;\n --cdx-code-comment: #94a3b8;\n --cdx-code-keyword: #c084fc;\n --cdx-code-string: #5eead4;\n --cdx-code-number: #fbbf24;\n --cdx-code-function: #4ade80;\n --cdx-code-variable: #93c5fd;\n --cdx-code-operator: #cbd5e1;\n --cdx-code-title: #f8fafc;\n}\n\n.jp-CodexMenu.jp-CodexChat-selectionPopover {\n min-width: min(18ch, calc(100vw - 24px)) !important;\n width: fit-content !important;\n max-width: min(600px, calc(100vw - 24px)) !important;\n max-height: calc(100vh - 48px) !important;\n max-height: calc(100dvh - 48px) !important;\n padding: 8px !important;\n overflow: auto !important;\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n}\n\n.jp-CodexMenu.jp-CodexCellAttachmentPopoverMenu {\n min-width: 220px;\n width: fit-content;\n max-width: min(320px, calc(100vw - 24px));\n padding: 8px;\n box-shadow: 0 12px 26px rgba(2, 6, 23, 0.16);\n}\n\n.jp-CodexMenu.jp-CodexContextPopover {\n min-width: 176px;\n width: fit-content;\n max-width: min(280px, calc(100vw - 24px));\n border-radius: 12px;\n background: color-mix(in srgb, var(--cdx-surface) 94%, transparent);\n box-shadow: 0 14px 30px rgba(2, 6, 23, 0.2);\n padding: 8px 9px;\n}\n\n.jp-CodexCellAttachmentPopoverCard {\n display: grid;\n gap: 6px;\n padding: 2px;\n}\n\n.jp-CodexCellAttachmentPopoverTitle {\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.01em;\n color: var(--cdx-text);\n}\n\n.jp-CodexCellAttachmentPopoverRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n font-size: 11px;\n color: var(--cdx-muted);\n}\n\n.jp-CodexCellAttachmentPopoverRow strong {\n color: var(--cdx-text);\n font-family: var(--cdx-mono);\n font-size: 11px;\n font-weight: 700;\n}\n\n.jp-CodexCellAttachmentDot {\n width: 9px;\n height: 9px;\n border-radius: 999px;\n display: inline-block;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 80%, transparent);\n}\n\n.jp-CodexCellAttachmentDot.is-on {\n background: color-mix(in srgb, var(--cdx-good) 88%, var(--cdx-text));\n border-color: color-mix(in srgb, var(--cdx-good) 48%, var(--cdx-border));\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--cdx-good) 18%, transparent);\n}\n\n.jp-CodexCellAttachmentDot.is-off {\n background: color-mix(in srgb, var(--cdx-muted) 42%, var(--cdx-surface));\n border-color: color-mix(in srgb, var(--cdx-border) 88%, transparent);\n}\n\n.jp-CodexUsageBtn {\n position: relative;\n}\n\n.jp-CodexPermissionBtn.is-danger:not(:disabled) {\n border-color: transparent;\n background: transparent;\n color: color-mix(in srgb, var(--cdx-bad) 70%, var(--cdx-text));\n}\n\n.jp-CodexPermissionBtn.is-danger:hover:not(:disabled),\n.jp-CodexPermissionBtn.is-danger.is-open:not(:disabled) {\n border-color: color-mix(in srgb, var(--cdx-bad) 55%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-bad) 10%, var(--cdx-surface));\n color: color-mix(in srgb, var(--cdx-bad) 85%, var(--cdx-text));\n}\n\n.jp-CodexPermissionBtn.is-warning:not(:disabled) {\n border-color: transparent;\n background: transparent;\n color: color-mix(in srgb, #f5b301 72%, var(--cdx-text));\n}\n\n.jp-CodexPermissionBtn.is-warning:hover:not(:disabled),\n.jp-CodexPermissionBtn.is-warning.is-open:not(:disabled) {\n border-color: color-mix(in srgb, #f5b301 55%, var(--cdx-border));\n background: color-mix(in srgb, #f5b301 14%, var(--cdx-surface));\n color: color-mix(in srgb, #f5b301 84%, var(--cdx-text));\n}\n\n.jp-CodexUsageBtn.is-stale:not(:disabled),\n.jp-CodexUsageBtn.is-stale:hover:not(:disabled),\n.jp-CodexUsageBtn.is-stale.is-open:not(:disabled) {\n opacity: 0.72;\n color: color-mix(in srgb, var(--cdx-muted) 85%, var(--cdx-border));\n}\n\n.jp-CodexUsageBtn.is-overdue:not(:disabled),\n.jp-CodexUsageBtn.is-overdue:hover:not(:disabled),\n.jp-CodexUsageBtn.is-overdue.is-open:not(:disabled) {\n border-color: color-mix(in srgb, var(--cdx-warn) 40%, var(--cdx-border));\n}\n\n.jp-CodexUsagePopover {\n min-width: 0;\n width: min(300px, calc(100vw - 24px));\n max-width: min(320px, calc(100vw - 24px));\n padding: 8px;\n}\n\n.jp-CodexUsageNotice {\n margin: 2px;\n padding: 8px 10px;\n border-radius: 12px;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 85%, transparent);\n background: color-mix(in srgb, var(--cdx-surface-2) 85%, transparent);\n color: var(--cdx-muted);\n font-size: 11px;\n line-height: 1.25;\n}\n\n.jp-CodexUsageNotice.is-stale {\n border-color: color-mix(in srgb, var(--cdx-warn) 25%, var(--cdx-border));\n}\n\n.jp-CodexUsageNotice.is-overdue {\n border-color: color-mix(in srgb, var(--cdx-warn) 55%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-warn) 10%, var(--cdx-surface));\n color: color-mix(in srgb, var(--cdx-warn) 75%, var(--cdx-text));\n}\n\n.jp-CodexUsageNoticeTitle {\n font-weight: 800;\n color: var(--cdx-text);\n}\n\n.jp-CodexUsageNotice.is-overdue .jp-CodexUsageNoticeTitle {\n color: color-mix(in srgb, var(--cdx-warn) 85%, var(--cdx-text));\n}\n\n.jp-CodexUsageNoticeBody {\n margin-top: 2px;\n}\n\n.jp-CodexUsageSection {\n padding: 6px;\n display: grid;\n gap: 6px;\n}\n\n.jp-CodexUsageSectionTop {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 10px;\n}\n\n.jp-CodexUsageSectionTitle {\n font-size: 12px;\n font-weight: 750;\n color: var(--cdx-text);\n}\n\n.jp-CodexUsageSectionReset {\n font-size: 11px;\n color: var(--cdx-muted);\n white-space: nowrap;\n}\n\n.jp-CodexUsageBar {\n height: 8px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--cdx-border) 80%, transparent);\n overflow: hidden;\n}\n\n.jp-CodexUsageBarFill {\n height: 100%;\n width: 0%;\n border-radius: 999px;\n background: color-mix(in srgb, var(--cdx-accent) 70%, var(--cdx-good));\n transition: width 160ms ease;\n}\n\n.jp-CodexUsageBarFill.is-stale {\n background: color-mix(in srgb, var(--cdx-muted) 65%, var(--cdx-border));\n}\n\n.jp-CodexUsageMeta {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n color: var(--cdx-muted);\n font-size: 11px;\n}\n\n.jp-CodexUsageMetaLeft {\n font-weight: 750;\n}\n\n.jp-CodexUsageMetaRight {\n opacity: 0.9;\n white-space: nowrap;\n}\n\n.jp-CodexUsageFooter {\n padding: 4px 10px 2px;\n font-size: 11px;\n color: var(--cdx-muted);\n}\n\n.jp-CodexComposerSelectWrap {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.jp-CodexComposerSelectWrap::after {\n content: '';\n position: absolute;\n right: 10px;\n width: 7px;\n height: 7px;\n border-right: 2px solid var(--cdx-muted);\n border-bottom: 2px solid var(--cdx-muted);\n transform: rotate(45deg);\n pointer-events: none;\n}\n\n.jp-CodexComposerSelect {\n appearance: none;\n border: 1px solid var(--cdx-border);\n border-radius: 10px;\n background: var(--cdx-surface-2);\n color: var(--cdx-text);\n font-size: 12px;\n font-weight: 650;\n padding: 7px 26px 7px 10px;\n outline: none;\n max-width: 220px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.jp-CodexComposerSelect:hover {\n background: var(--cdx-surface);\n}\n\n.jp-CodexComposerSelect:focus {\n border-color: color-mix(in srgb, var(--cdx-accent) 65%, var(--cdx-border));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cdx-accent) 22%, transparent);\n background: var(--cdx-surface);\n}\n\n.jp-CodexComposerModelInput {\n border: 1px solid var(--cdx-border);\n border-radius: 999px;\n background: var(--cdx-surface);\n color: var(--cdx-text);\n font-size: 12px;\n padding: 7px 10px;\n width: 190px;\n max-width: 100%;\n outline: none;\n}\n\n.jp-CodexComposerModelInput:focus {\n border-color: color-mix(in srgb, var(--cdx-accent) 65%, var(--cdx-border));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cdx-accent) 22%, transparent);\n}\n\n.jp-CodexSendBtn {\n appearance: none;\n padding: 0;\n width: var(--cdx-composer-btn-size, 30px);\n height: var(--cdx-composer-btn-size, 30px);\n min-width: var(--cdx-composer-btn-size, 30px);\n min-height: var(--cdx-composer-btn-size, 30px);\n max-width: var(--cdx-composer-btn-size, 30px);\n max-height: var(--cdx-composer-btn-size, 30px);\n flex: 0 0 var(--cdx-composer-btn-size, 30px);\n border-radius: 9999px !important;\n overflow: hidden;\n border: 1px solid var(--cdx-border);\n background: var(--cdx-surface-2);\n color: var(--cdx-muted);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease, box-shadow 120ms ease, color 120ms ease;\n}\n\n.jp-CodexSendBtn:not(:disabled) {\n border-color: color-mix(in srgb, #000000 80%, var(--cdx-border));\n background: #000000;\n color: #ffffff;\n}\n\n.jp-CodexSendBtn.is-queue:not(:disabled) {\n border-color: color-mix(in srgb, var(--cdx-accent) 70%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-accent) 92%, #0f172a);\n color: #ffffff;\n}\n\n.jp-CodexSendBtn:hover:not(:disabled) {\n border-color: color-mix(in srgb, #000000 92%, var(--cdx-border));\n background: color-mix(in srgb, #000000 92%, #222222);\n}\n\n.jp-CodexSendBtn.is-queue:hover:not(:disabled) {\n border-color: color-mix(in srgb, var(--cdx-accent) 86%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-accent) 96%, #0f172a);\n}\n\n.jp-CodexSendBtn:active:not(:disabled) {\n background: color-mix(in srgb, #000000 88%, #222222);\n}\n\n.jp-CodexSendBtn.is-queue:active:not(:disabled) {\n background: color-mix(in srgb, var(--cdx-accent) 88%, #0f172a);\n}\n\n.jp-CodexSendBtn:focus-visible {\n outline: none;\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cdx-accent) 22%, transparent);\n}\n\n.jp-CodexSendBtn:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.jp-CodexSendBtn.is-stop:not(:disabled) {\n border-color: color-mix(in srgb, #000000 80%, var(--cdx-border));\n background: #000000;\n color: #ffffff;\n}\n\n.jp-CodexSendBtn.is-stop:hover:not(:disabled) {\n border-color: color-mix(in srgb, #000000 92%, var(--cdx-border));\n background: color-mix(in srgb, #000000 92%, #222222);\n}\n\n.jp-CodexSendBtn.is-stop:active:not(:disabled) {\n background: color-mix(in srgb, #000000 88%, #222222);\n}\n\n.jp-CodexBtn {\n appearance: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--cdx-border);\n border-radius: 10px;\n padding: 6px 10px;\n min-height: 28px;\n background: var(--cdx-surface);\n color: var(--cdx-text);\n font-size: 12px;\n font-weight: 650;\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease, box-shadow 120ms ease, color 120ms ease;\n}\n\n.jp-CodexBtn:hover:not(:disabled) {\n background: var(--cdx-surface-2);\n border-color: color-mix(in srgb, var(--cdx-accent) 20%, var(--cdx-border));\n}\n\n.jp-CodexBtn:active:not(:disabled) {\n background: var(--cdx-surface);\n}\n\n.jp-CodexBtn:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n box-shadow: none;\n}\n\n.jp-CodexBtn-xs {\n padding: 6px 10px;\n font-size: 11px;\n min-height: 26px;\n}\n\n.jp-CodexBtn-ghost {\n background: transparent;\n border-color: transparent;\n}\n\n.jp-CodexBtn-ghost:hover:not(:disabled) {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n}\n\n.jp-CodexBtn-primary {\n border-color: color-mix(in srgb, var(--cdx-accent) 80%, var(--cdx-border));\n background: var(--cdx-accent);\n color: #ffffff;\n}\n\n.jp-CodexBtn-primary:hover {\n border-color: color-mix(in srgb, var(--cdx-accent) 92%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-accent) 92%, #000000);\n}\n\n.jp-CodexBtn-danger {\n border-color: color-mix(in srgb, var(--cdx-bad) 55%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-bad) 10%, var(--cdx-surface));\n}\n\n.jp-CodexBtn-danger:hover {\n border-color: color-mix(in srgb, var(--cdx-bad) 70%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-bad) 14%, var(--cdx-surface));\n}\n\n.jp-CodexJumpBar {\n position: absolute;\n left: 0;\n right: 0;\n top: -52px;\n display: flex;\n justify-content: center;\n pointer-events: none;\n z-index: 2;\n opacity: 0;\n transform: translateY(6px);\n visibility: hidden;\n transition:\n opacity 140ms ease,\n transform 180ms cubic-bezier(0.2, 0.9, 0.2, 1),\n visibility 0s linear 180ms;\n}\n\n.jp-CodexJumpBar.is-visible {\n opacity: 1;\n transform: translateY(0);\n visibility: visible;\n transition:\n opacity 160ms ease,\n transform 200ms cubic-bezier(0.2, 0.9, 0.2, 1),\n visibility 0s linear 0s;\n}\n\n.jp-CodexJumpBar > * {\n pointer-events: auto;\n}\n\n.jp-CodexJumpBar:not(.is-visible) > * {\n pointer-events: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .jp-CodexJumpBar {\n transition: none;\n transform: none;\n }\n}\n\n.jp-CodexJumpBar .jp-CodexJumpToLatestBtn {\n appearance: none;\n -webkit-appearance: none;\n box-sizing: border-box;\n width: 32px !important;\n height: 32px !important;\n min-width: 32px !important;\n min-height: 32px !important;\n max-width: 32px !important;\n max-height: 32px !important;\n border-radius: 50% !important;\n overflow: hidden;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 55%, transparent) !important;\n background: var(--cdx-surface) !important;\n color: color-mix(in srgb, var(--cdx-fg) 92%, var(--cdx-muted));\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0 !important;\n cursor: pointer;\n line-height: 0;\n transition: transform 120ms ease, background 120ms ease, border-color 120ms ease;\n}\n\n.jp-CodexJumpBar .jp-CodexJumpToLatestBtn svg {\n display: block;\n}\n\n.jp-CodexJumpBar .jp-CodexJumpToLatestBtn:hover {\n background: color-mix(in srgb, var(--cdx-surface) 88%, #ffffff);\n border-color: color-mix(in srgb, var(--cdx-border) 75%, transparent);\n transform: translateY(-1px);\n}\n\n.jp-CodexJumpBar .jp-CodexJumpToLatestBtn:active {\n transform: translateY(0);\n}\n\n.jp-CodexJumpBar .jp-CodexJumpToLatestBtn:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--cdx-accent) 55%, transparent);\n outline-offset: 3px;\n}\n\n.jp-CodexChat-loading {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n color: var(--cdx-muted);\n align-self: flex-start;\n border-radius: var(--cdx-radius);\n border: 1px solid color-mix(in srgb, var(--cdx-border) 70%, transparent);\n background: var(--cdx-surface);\n max-width: 100%;\n}\n\n.jp-CodexChat-loading.is-reasoning {\n background: color-mix(in srgb, var(--cdx-accent) 6%, var(--cdx-surface-2));\n border-style: dashed;\n border-color: color-mix(in srgb, var(--cdx-accent) 24%, var(--cdx-border));\n color: color-mix(in srgb, var(--cdx-accent) 30%, var(--cdx-muted));\n}\n\n.jp-CodexChat-loading.is-reasoning .jp-CodexChat-loading-dots span {\n background: color-mix(in srgb, var(--cdx-accent) 55%, var(--cdx-muted));\n}\n\n.jp-CodexChat-loading.is-reasoning .jp-CodexChat-loadingText {\n color: color-mix(in srgb, var(--cdx-accent) 35%, var(--cdx-muted));\n}\n\n.jp-CodexChat-loading-dots {\n display: flex;\n gap: 8px;\n}\n\n.jp-CodexChat-loading-dots span {\n width: 8px;\n height: 8px;\n border-radius: 999px;\n background: var(--cdx-accent);\n animation: cdx-bounce 1.4s infinite ease-in-out both;\n}\n\n.jp-CodexChat-loading-dots span:nth-child(1) {\n animation-delay: -0.32s;\n}\n\n.jp-CodexChat-loading-dots span:nth-child(2) {\n animation-delay: -0.16s;\n}\n\n@keyframes cdx-bounce {\n 0%,\n 80%,\n 100% {\n transform: scale(0);\n opacity: 0.55;\n }\n 40% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes cdx-fade-up {\n from {\n opacity: 0;\n transform: translateY(6px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes cdx-pulse {\n 0%,\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(1.08);\n opacity: 0.8;\n }\n}\n\n@keyframes cdx-status-dot {\n 0%,\n 100% {\n transform: scale(1);\n filter: brightness(1);\n }\n 50% {\n transform: scale(1.22);\n filter: brightness(1.15);\n }\n}\n\n@keyframes cdx-status-ring {\n 0% {\n opacity: 0;\n transform: scale(0.55);\n }\n 20% {\n opacity: 0.75;\n }\n 100% {\n opacity: 0;\n transform: scale(1.15);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .jp-CodexStatusPill-running .jp-CodexStatusPill-dot,\n .jp-CodexStatusPill-running .jp-CodexStatusPill-dot::after {\n animation: none;\n }\n}\n\n@keyframes cdx-menu-in {\n from {\n opacity: 0;\n transform: translateY(6px) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n`,""]);const x=p},3915(e){e.exports="data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cpath%20fill%3D%27%23f5b301%27%20d%3D%27M1%2021h22L12%202%201%2021z%27/%3E%3Cpath%20fill%3D%27%235a4b00%27%20d%3D%27M13%2016h-2v-6h2v6zm0%204h-2v-2h2v2z%27/%3E%3C/svg%3E"}}]);
@@ -0,0 +1 @@
1
+ var _JUPYTERLAB;(()=>{"use strict";var e,r,t,a,n,o,i,u,l,d,s,f,c,p,h,b,v,m,g,y,w,j,k,x={1387(e,r,t){var a={"./index":()=>Promise.all([t.e(525),t.e(737)]).then(()=>()=>t(6737)),"./extension":()=>Promise.all([t.e(525),t.e(737)]).then(()=>()=>t(6737))},n=(e,r)=>(t.R=r,r=t.o(a,e)?a[e]():Promise.resolve().then(()=>{throw new Error('Module "'+e+'" does not exist in container.')}),t.R=void 0,r),o=(e,r)=>{if(t.S){var a="default",n=t.S[a];if(n&&n!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[a]=e,t.I(a,r)}};t.d(r,{get:()=>n,init:()=>o})}},S={};function P(e){var r=S[e];if(void 0!==r)return r.exports;var t=S[e]={id:e,exports:{}};return x[e](t,t.exports,P),t.exports}P.m=x,P.c=S,P.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return P.d(r,{a:r}),r},P.d=(e,r)=>{for(var t in r)P.o(r,t)&&!P.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},P.f={},P.e=e=>Promise.all(Object.keys(P.f).reduce((r,t)=>(P.f[t](e,r),r),[])),P.u=e=>e+"."+{124:"ac0734653995d3fe00f2",364:"15acf07c0b6852a40fd9",489:"ef138a7e916c5b465543",525:"224526d045c727069de6",737:"e7de3ad9dd6ded798340",997:"213b5a946a1c8e2b1bba"}[e]+".js?v="+{124:"ac0734653995d3fe00f2",364:"15acf07c0b6852a40fd9",489:"ef138a7e916c5b465543",525:"224526d045c727069de6",737:"e7de3ad9dd6ded798340",997:"213b5a946a1c8e2b1bba"}[e],P.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),P.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="jupyterlab-codex-sidebar:",P.l=(t,a,n,o)=>{if(e[t])e[t].push(a);else{var i,u;if(void 0!==n)for(var l=document.getElementsByTagName("script"),d=0;d<l.length;d++){var s=l[d];if(s.getAttribute("src")==t||s.getAttribute("data-webpack")==r+n){i=s;break}}i||(u=!0,(i=document.createElement("script")).charset="utf-8",P.nc&&i.setAttribute("nonce",P.nc),i.setAttribute("data-webpack",r+n),i.src=t),e[t]=[a];var f=(r,a)=>{i.onerror=i.onload=null,clearTimeout(c);var n=e[t];if(delete e[t],i.parentNode&&i.parentNode.removeChild(i),n&&n.forEach(e=>e(a)),r)return r(a)},c=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),u&&document.head.appendChild(i)}},P.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{P.S={};var e={},r={};P.I=(t,a)=>{a||(a=[]);var n=r[t];if(n||(n=r[t]={}),!(a.indexOf(n)>=0)){if(a.push(n),e[t])return e[t];P.o(P.S,t)||(P.S[t]={});var o=P.S[t],i="jupyterlab-codex-sidebar",u=(e,r,t,a)=>{var n=o[e]=o[e]||{},u=n[r];(!u||!u.loaded&&(!a!=!u.eager?a:i>u.from))&&(n[r]={get:t,from:i,eager:!!a})},l=[];return"default"===t&&(u("dompurify","3.3.1",()=>P.e(997).then(()=>()=>P(4997))),u("jupyterlab-codex-sidebar","0.1.6",()=>Promise.all([P.e(525),P.e(737)]).then(()=>()=>P(6737))),u("katex","0.16.28",()=>P.e(489).then(()=>()=>P(5489))),u("marked-katex-extension","5.1.7",()=>P.e(124).then(()=>()=>P(8124))),u("marked","16.4.2",()=>P.e(364).then(()=>()=>P(4364)))),e[t]=l.length?Promise.all(l).then(()=>e[t]=1):1}}})(),(()=>{var e;P.g.importScripts&&(e=P.g.location+"");var r=P.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var a=t.length-1;a>-1&&(!e||!/^http(s?):/.test(e));)e=t[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),P.p=e})(),t=e=>{var r=e=>e.split(".").map(e=>+e==e?+e:e),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),a=t[1]?r(t[1]):[];return t[2]&&(a.length++,a.push.apply(a,r(t[2]))),t[3]&&(a.push([]),a.push.apply(a,r(t[3]))),a},a=(e,r)=>{e=t(e),r=t(r);for(var a=0;;){if(a>=e.length)return a<r.length&&"u"!=(typeof r[a])[0];var n=e[a],o=(typeof n)[0];if(a>=r.length)return"u"==o;var i=r[a],u=(typeof i)[0];if(o!=u)return"o"==o&&"n"==u||"s"==u||"u"==o;if("o"!=o&&"u"!=o&&n!=i)return n<i;a++}},n=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var a=1,o=1;o<e.length;o++)a--,t+="u"==(typeof(u=e[o]))[0]?"-":(a>0?".":"")+(a=2,u);return t}var i=[];for(o=1;o<e.length;o++){var u=e[o];i.push(0===u?"not("+l()+")":1===u?"("+l()+" || "+l()+")":2===u?i.pop()+" "+i.pop():n(u))}return l();function l(){return i.pop().replace(/^\((.+)\)$/,"$1")}},o=(e,r)=>{if(0 in e){r=t(r);var a=e[0],n=a<0;n&&(a=-a-1);for(var i=0,u=1,l=!0;;u++,i++){var d,s,f=u<e.length?(typeof e[u])[0]:"";if(i>=r.length||"o"==(s=(typeof(d=r[i]))[0]))return!l||("u"==f?u>a&&!n:""==f!=n);if("u"==s){if(!l||"u"!=f)return!1}else if(l)if(f==s)if(u<=a){if(d!=e[u])return!1}else{if(n?d>e[u]:d<e[u])return!1;d!=e[u]&&(l=!1)}else if("s"!=f&&"n"!=f){if(n||u<=a)return!1;l=!1,u--}else{if(u<=a||s<f!=n)return!1;l=!1}else"s"!=f&&"n"!=f&&(l=!1,u--)}}var c=[],p=c.pop.bind(c);for(i=1;i<e.length;i++){var h=e[i];c.push(1==h?p()|p():2==h?p()&p():h?o(h,r):!p())}return!!p()},i=(e,r)=>e&&P.o(e,r),u=e=>(e.loaded=1,e.get()),l=e=>Object.keys(e).reduce((r,t)=>(e[t].eager&&(r[t]=e[t]),r),{}),d=(e,r,t,n)=>{var i=n?l(e[r]):e[r];return(r=Object.keys(i).reduce((e,r)=>!o(t,r)||e&&!a(e,r)?e:r,0))&&i[r]},s=(e,r,t)=>{var n=t?l(e[r]):e[r];return Object.keys(n).reduce((e,r)=>!e||!n[e].loaded&&a(e,r)?r:e,0)},f=(e,r,t,a)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+n(a)+")",c=(e,r,t,a,o)=>{var i=e[t];return"No satisfying version ("+n(a)+")"+(o?" for eager consumption":"")+" of shared module "+t+" found in shared scope "+r+".\nAvailable versions: "+Object.keys(i).map(e=>e+" from "+i[e].from).join(", ")},p=e=>{throw new Error(e)},h=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},v=(e,r,t)=>t?t():((e,r)=>p("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),m=(b=e=>function(r,t,a,n,o){var i=P.I(r);return i&&i.then&&!a?i.then(e.bind(e,r,P.S[r],t,!1,n,o)):e(r,P.S[r],t,a,n,o)})((e,r,t,a,n,o)=>{if(!i(r,t))return v(e,t,o);var l=d(r,t,n,a);return l?u(l):o?o():void p(c(r,e,t,n,a))}),g=b((e,r,t,a,n,l)=>{if(!i(r,t))return v(e,t,l);var d=s(r,t,a);return o(n,d)||h(f(r,t,d,n)),u(r[t][d])}),y={},w={1125:()=>g("default","@jupyterlab/services",!1,[1,7,5,3]),2707:()=>m("default","dompurify",!1,[1,3,3,1],()=>P.e(997).then(()=>()=>P(4997))),2931:()=>g("default","@jupyterlab/notebook",!1,[1,4,5,3]),3345:()=>g("default","react",!1,[1,18,2,0]),4526:()=>g("default","@jupyterlab/coreutils",!1,[1,6,5,3]),5285:()=>g("default","@jupyterlab/apputils",!1,[1,4,6,3]),7628:()=>g("default","react-dom",!1,[1,18,2,0]),4502:()=>m("default","katex",!1,[,[-1,0,17],[0,0,16],2],()=>P.e(489).then(()=>()=>P(5489))),4281:()=>m("default","marked",!1,[1,16,4,2],()=>P.e(364).then(()=>()=>P(4364))),405:()=>m("default","marked-katex-extension",!1,[1,5,1,7],()=>P.e(124).then(()=>()=>P(8124)))},j={124:[4502],281:[4281],405:[405],737:[1125,2707,2931,3345,4526,5285,7628]},k={},P.f.consumes=(e,r)=>{P.o(j,e)&&j[e].forEach(e=>{if(P.o(y,e))return r.push(y[e]);if(!k[e]){var t=r=>{y[e]=0,P.m[e]=t=>{delete P.c[e],t.exports=r()}};k[e]=!0;var a=r=>{delete y[e],P.m[e]=t=>{throw delete P.c[e],r}};try{var n=w[e]();n.then?r.push(y[e]=n.then(t).catch(a)):t(n)}catch(e){a(e)}}})},(()=>{P.b="undefined"!=typeof document&&document.baseURI||self.location.href;var e={646:0};P.f.j=(r,t)=>{var a=P.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(281|405)$/.test(r))e[r]=0;else{var n=new Promise((t,n)=>a=e[r]=[t,n]);t.push(a[2]=n);var o=P.p+P.u(r),i=new Error;P.l(o,t=>{if(P.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+n+": "+o+")",i.name="ChunkLoadError",i.type=n,i.request=o,a[1](i)}},"chunk-"+r,r)}};var r=(r,t)=>{var a,n,[o,i,u]=t,l=0;if(o.some(r=>0!==e[r])){for(a in i)P.o(i,a)&&(P.m[a]=i[a]);u&&u(P)}for(r&&r(t);l<o.length;l++)n=o[l],P.o(e,n)&&e[n]&&e[n][0](),e[n]=0},t=self.webpackChunkjupyterlab_codex_sidebar=self.webpackChunkjupyterlab_codex_sidebar||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),P.nc=void 0;var E=P(1387);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB)["jupyterlab-codex-sidebar"]=E})();