jupyterlab-codex-sidebar 0.1.3 → 0.1.5

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 (139) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/.github/workflows/unit-tests.yml +27 -0
  3. package/AGENTS.md +42 -0
  4. package/README.md +67 -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/855.d20f6158cd81bb4c9056.js +1 -0
  10. package/jupyterlab_codex/labextension/static/{remoteEntry.b2fdc03a1c4582e79156.js → remoteEntry.c1e865f207776f7f24ff.js} +1 -1
  11. package/jupyterlab_codex/protocol.py +297 -0
  12. package/jupyterlab_codex/runner.py +137 -31
  13. package/jupyterlab_codex/sessions.py +582 -97
  14. package/lib/codexChat.d.ts +13 -0
  15. package/lib/codexChat.js +2410 -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 +8 -0
  21. package/lib/codexChatAttachmentLimit.js +61 -0
  22. package/lib/codexChatAttachmentLimit.js.map +1 -0
  23. package/lib/codexChatDocumentUtils.d.ts +68 -0
  24. package/lib/codexChatDocumentUtils.js +480 -0
  25. package/lib/codexChatDocumentUtils.js.map +1 -0
  26. package/lib/codexChatFormatting.d.ts +11 -0
  27. package/lib/codexChatFormatting.js +83 -0
  28. package/lib/codexChatFormatting.js.map +1 -0
  29. package/lib/codexChatNotice.d.ts +3 -0
  30. package/lib/codexChatNotice.js +74 -0
  31. package/lib/codexChatNotice.js.map +1 -0
  32. package/lib/codexChatPersistence.d.ts +35 -0
  33. package/lib/codexChatPersistence.js +158 -0
  34. package/lib/codexChatPersistence.js.map +1 -0
  35. package/lib/codexChatPrimitives.d.ts +41 -0
  36. package/lib/codexChatPrimitives.js +152 -0
  37. package/lib/codexChatPrimitives.js.map +1 -0
  38. package/lib/codexChatRender.d.ts +24 -0
  39. package/lib/codexChatRender.js +293 -0
  40. package/lib/codexChatRender.js.map +1 -0
  41. package/lib/codexChatSessionFactory.d.ts +15 -0
  42. package/lib/codexChatSessionFactory.js +45 -0
  43. package/lib/codexChatSessionFactory.js.map +1 -0
  44. package/lib/codexChatSessionKey.d.ts +3 -0
  45. package/lib/codexChatSessionKey.js +14 -0
  46. package/lib/codexChatSessionKey.js.map +1 -0
  47. package/lib/codexChatStorage.d.ts +4 -0
  48. package/lib/codexChatStorage.js +37 -0
  49. package/lib/codexChatStorage.js.map +1 -0
  50. package/lib/codexSessionResolver.d.ts +12 -0
  51. package/lib/codexSessionResolver.js +38 -0
  52. package/lib/codexSessionResolver.js.map +1 -0
  53. package/lib/handlers/activitySummarizer.d.ts +15 -0
  54. package/lib/handlers/activitySummarizer.js +327 -0
  55. package/lib/handlers/activitySummarizer.js.map +1 -0
  56. package/lib/handlers/codexMessageTypes.d.ts +30 -0
  57. package/lib/handlers/codexMessageTypes.js +2 -0
  58. package/lib/handlers/codexMessageTypes.js.map +1 -0
  59. package/lib/handlers/codexMessageUtils.d.ts +46 -0
  60. package/lib/handlers/codexMessageUtils.js +144 -0
  61. package/lib/handlers/codexMessageUtils.js.map +1 -0
  62. package/lib/handlers/handleCodexSocketMessage.d.ts +107 -0
  63. package/lib/handlers/handleCodexSocketMessage.js +78 -0
  64. package/lib/handlers/handleCodexSocketMessage.js.map +1 -0
  65. package/lib/handlers/sessionSyncHandler.d.ts +34 -0
  66. package/lib/handlers/sessionSyncHandler.js +181 -0
  67. package/lib/handlers/sessionSyncHandler.js.map +1 -0
  68. package/lib/hooks/useCodexSocket.d.ts +15 -0
  69. package/lib/hooks/useCodexSocket.js +84 -0
  70. package/lib/hooks/useCodexSocket.js.map +1 -0
  71. package/lib/index.js +1 -1
  72. package/lib/index.js.map +1 -1
  73. package/lib/panel.d.ts +1 -11
  74. package/lib/panel.js +1 -2768
  75. package/lib/panel.js.map +1 -1
  76. package/lib/protocol.d.ts +235 -0
  77. package/lib/protocol.js +278 -0
  78. package/lib/protocol.js.map +1 -0
  79. package/package.json +13 -3
  80. package/playwright.config.cjs +24 -0
  81. package/playwright.unit.config.cjs +19 -0
  82. package/pyproject.toml +1 -1
  83. package/release.sh +243 -0
  84. package/scripts/run_playwright_e2e.sh +96 -0
  85. package/scripts/run_playwright_freeze_repro.sh +58 -0
  86. package/scripts/run_playwright_queue_repro.sh +60 -0
  87. package/scripts/run_playwright_repro.sh +55 -0
  88. package/src/codexChat.tsx +3755 -0
  89. package/src/codexChatAttachmentDedup.ts +47 -0
  90. package/src/codexChatAttachmentLimit.ts +82 -0
  91. package/src/codexChatDocumentUtils.ts +612 -0
  92. package/src/codexChatFormatting.ts +94 -0
  93. package/src/codexChatNotice.ts +95 -0
  94. package/src/codexChatPersistence.ts +191 -0
  95. package/src/codexChatPrimitives.tsx +422 -0
  96. package/src/codexChatRender.tsx +376 -0
  97. package/src/codexChatSessionFactory.ts +79 -0
  98. package/src/codexChatSessionKey.ts +16 -0
  99. package/src/codexChatStorage.ts +36 -0
  100. package/src/codexSessionResolver.ts +56 -0
  101. package/src/handlers/activitySummarizer.ts +369 -0
  102. package/src/handlers/codexMessageTypes.ts +34 -0
  103. package/src/handlers/codexMessageUtils.ts +217 -0
  104. package/src/handlers/handleCodexSocketMessage.ts +204 -0
  105. package/src/handlers/sessionSyncHandler.ts +308 -0
  106. package/src/hooks/useCodexSocket.ts +109 -0
  107. package/src/index.ts +1 -1
  108. package/src/panel.tsx +1 -4131
  109. package/src/protocol.ts +582 -0
  110. package/style/index.css +424 -11
  111. package/tests/e2e/fixtures/notebooks/tab1.ipynb +322 -0
  112. package/tests/e2e/fixtures/notebooks/tab1.py +272 -0
  113. package/tests/e2e/fixtures/notebooks/tab2.ipynb +252 -0
  114. package/tests/e2e/fixtures/notebooks/tab2.py +231 -0
  115. package/tests/e2e/fixtures/notebooks/tab3.ipynb +403 -0
  116. package/tests/e2e/fixtures/notebooks/tab3.py +331 -0
  117. package/tests/e2e/fixtures/notebooks/tab4.py +339 -0
  118. package/tests/e2e/freeze-notebook-tabs-repro.spec.js +295 -0
  119. package/tests/e2e/mock-codex-cli-flood.py +127 -0
  120. package/tests/e2e/mock-codex-cli.py +95 -0
  121. package/tests/e2e/queue-multitab-repro.spec.js +189 -0
  122. package/tests/test_handlers.py +116 -0
  123. package/tests/test_protocol.py +169 -0
  124. package/tests/test_session_store_limits.py +50 -0
  125. package/tests/unit/codexChatAttachmentDedup.spec.ts +56 -0
  126. package/tests/unit/codexChatAttachmentLimit.spec.ts +42 -0
  127. package/tests/unit/codexChatLimit.spec.ts +18 -0
  128. package/tests/unit/codexChatNotice.spec.ts +45 -0
  129. package/tests/unit/codexChatPersistence.spec.ts +199 -0
  130. package/tests/unit/codexChatSessionFactory.spec.ts +94 -0
  131. package/tests/unit/codexChatSessionKey.spec.ts +18 -0
  132. package/tests/unit/codexMessageUtils.spec.ts +89 -0
  133. package/tests/unit/codexSessionResolver.spec.ts +92 -0
  134. package/tests/unit/handleCodexSocketMessage.spec.ts +476 -0
  135. package/tsconfig.tsbuildinfo +1 -1
  136. package/webpack.config.js +6 -0
  137. package/jupyterlab_codex/labextension/static/504.335f3447c84ba3d74517.js +0 -2
  138. package/jupyterlab_codex/labextension/static/972.d43137b7438a053eeb72.js +0 -1
  139. /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([[855],{9855(e,n,t){t.r(n),t.d(n,{default:()=>ft});var o=t(5285),r=t(2931),i=t(4848),a=t(3345),s=t.n(a),d=t(1125),c=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 d="string"==typeof r&&r.trim()?r.trim():s,c="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:d,...l.length>0?{reasoningEfforts:l}:{},...c?{defaultReasoningEffort:c}:{}})}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),d=null===r?null:Math.round(r);return null==a&&null==s&&null==d&&null==i?null:{windowTokens:a,usedTokens:s,leftTokens:d,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,y=/(?: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 j(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=j(t);return C.test(i)&&y.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=j(e.trimStart());return v.test(t)||/^(?:new thread started|session started|session start)/i.test(t)||C.test(t)&&y.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 R(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 A(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 I=t(2707),O=t(854),$=t(8095),L=t(3730),E=t(8690),z=t(3018),T=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 d=Number(t.start.line),c=Number(t.end.line);return{text:s,startLine:Number.isFinite(d)&&Number.isFinite(c)?Math.max(1,Math.min(d,c)+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 de(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 ce(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"}function le(e){return e.replace(/\u001b\[[0-?]*[ -/]*[@-~]/g,"")}function pe(e){return"string"==typeof e?e:Array.isArray(e)?e.filter(e=>"string"==typeof e).join(""):""}function ue(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=pe(e.text);if(!n)return"";const t="string"==typeof e.name?e.name:"",o=le(n).replace(/\s+$/,"");return o?"stderr"===t?`[stderr]\n${o}`:o:""}if("error"===n){const n=le((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=pe(t["text/plain"]);if(o){const t=le(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""}O.A.registerLanguage("bash",$.A),O.A.registerLanguage("css",L.A),O.A.registerLanguage("diff",E.A),O.A.registerLanguage("javascript",z.A),O.A.registerLanguage("json",T.A),O.A.registerLanguage("markdown",U.A),O.A.registerLanguage("python",F.A),O.A.registerLanguage("sql",D.A),O.A.registerLanguage("typescript",W.A),O.A.registerLanguage("xml",K.A),O.A.registerLanguage("yaml",H.A);let xe=null,fe=null;async function me(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 ge(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\"/g,"&quot;").replace(/'/g,"&#39;")}function he(e,n){const t=ge(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&&O.A.getLanguage(t))o=O.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&&O.A.getLanguage(n)?O.A.highlight(e,{language:n,ignoreIllegals:!0}).value:O.A.highlightAuto(e).value}}catch{o=t}try{return I.default.sanitize(o,{USE_PROFILES:{html:!0}})}catch{return ge(o)}}function be(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 ve=(0,a.memo)(function(e){const[n,t]=(0,a.useState)(!1),o=(0,a.useMemo)(()=>he(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}})})]})});ve.displayName="CodeBlock";const Ce=(0,a.memo)(function(e){const[,n]=(0,a.useState)(0);(0,a.useEffect)(()=>{let e=!1;return async function(){return xe||(fe||(fe=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 xe=r,r}).catch(e=>{throw fe=null,e})),fe)}().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 d=i.indexOf("\n");if(-1!==d){const e=i.slice(0,d).trim();e.length>0&&e.length<=20&&/^[A-Za-z0-9+#_.-]+$/.test(e)&&(a=e,s=i.slice(d+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)(ve,{lang:n.lang,code:n.code,canCopy:Boolean(e.canCopyCode)},t);const o=function(e){if(!e)return"";const n=xe;if(!n)return ge(e).replace(/\n/g,"<br />");let t="";try{t=n.parse(e)}catch{return ge(e).replace(/\n/g,"<br />")}try{return I.default.sanitize(t,{USE_PROFILES:{html:!0}})}catch{return ge(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 ye(e){const n=(t=e.code,J(X(t),500));var t;const o=(0,a.useMemo)(()=>he(n,""),[n]);return(0,i.jsx)("pre",{className:"jp-CodexCodeBlock jp-CodexChat-selectionCode",children:(0,i.jsx)("code",{className:"hljs",dangerouslySetInnerHTML:{__html:o}})})}function je(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 we(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 ke(e,n,t){return Math.min(t,Math.max(n,e))}function Se(e){return"number"==typeof e&&Number.isFinite(e)?Math.round(ke(100-e,0,100)):null}function Me(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 Ne(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 Pe(e,n){if("number"!=typeof e||!Number.isFinite(e))return"Unknown";const t=1e3*e-n;return t<=0?"Overdue":Me(t)}function Be(e){return"number"==typeof e&&Number.isFinite(e)?e.toLocaleString():"--"}function Re(){return"undefined"==typeof window||void 0===window.Notification?"unsupported":window.Notification.permission}function Ae(e){if("undefined"==typeof window)return null;try{return window.localStorage.getItem(e)}catch{return null}}function _e(e,n){if("undefined"!=typeof window)try{window.localStorage.setItem(e,n)}catch{}}function Ie(e){if("undefined"!=typeof window)try{window.localStorage.removeItem(e)}catch{}}Ce.displayName="MessageText";const Oe="jupyterlab-codex:session-threads",$e="jupyterlab-codex:session-threads:event",Le="jupyterlab-codex:delete-all-pending";function Ee(e){if(!e)return{path:""};const n=e.indexOf("\0");return n<0?{path:e}:{path:e.slice(0,n)}}function ze(){const e=Ae(Oe);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 Te(){const e=ze(),n=new Set;for(const t of Object.keys(e)){const{path:e}=Ee(t);e&&n.add(e)}return n.size}function Ue(e,n){const t=e.trim(),o=n||"";if(!o)return"";const r=ze(),i=r[o];if(i)return i;if(!t)return"";for(const[e,n]of Object.entries(r))if(n&&Ee(e).path===t)return n;return""}function Fe(){_e(Le,"1")}function De(){Ie(Le)}function We(){return"1"===Ae(Le)}function Ke(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 He(e){return(e||"").trim()||""}function Je(e){return He(e||"")}function Ve(e){return Je(e)}function qe(e,n){const t=(n||"").trim();return t?`thread:${t}`:`session:${(e||"").trim()}`}function Ye(e,n){const t=n.notebookMode,o=X(n.text||"");return[e,t,(n.locationLabel||"").trim(),o].join("␟")}function Ze(e,n){return!(!e||!n)&&e===n}function Ge(e){return Number.isFinite(e)?Math.max(0,Math.floor(e)):0}function Xe(e,n){return n<=0?"":e.length<=n?e:e.slice(0,n)}var Qe=t(7628);function en(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 nn(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 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 5v14m0 0l-7-7m7 7l7-7",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"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)("rect",{x:"7",y:"7",width:"10",height:"10",rx:"2.2",stroke:"currentColor",strokeWidth:"2"})})}function rn(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 an(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 sn(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 dn(e){const{activeBars:n,isConfig:t=!1,...o}=e;return t&&n<=0?(0,i.jsx)(sn,{...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 cn(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 ln(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 pn(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 un(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 xn(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 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:"M18 6 6 18M6 6l12 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function mn(e){const{open:n,anchorRef:t,popoverRef:o,className:r,role:a="dialog",align:d="left",ariaLabel:c,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,c=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"===d?m.right-h.width:m.left;C=gn(C,s+r,Math.max(s+r,s+i-h.width-r));let y=m.top-10-v;const j=m.bottom+10,w=c+f,k=c+a;y<w&&j+v+f<=k&&(y=j),y=gn(y,w,Math.max(w,k-v-f)),g({left:Math.round(C),top:Math.round(y),...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,d,l,p]),n?(0,Qe.createPortal)((0,i.jsx)("div",{ref:o,className:"jp-CodexMenu jp-CodexMenuPortal"+(r?` ${r}`:""),role:a,"aria-label":c,style:m,onMouseEnter:u,onMouseLeave:x,children:f}),document.body):null}function gn(e,n,t){return Math.min(t,Math.max(n,e))}class hn extends o.ReactWidget{constructor(e,n){super(),this._app=e,this._notebooks=n,this.addClass("jp-CodexPanel")}render(){return(0,i.jsx)(Qn,{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 bn(e){const n=e.messages[0];return n&&"text"===n.kind&&"system"===n.role&&M(n.text)&&(n.sessionResolution="client"),e}const vn=[],Cn="medium",yn=[{label:"Default permission",value:"workspace-write"},{label:"Full access",value:"danger-full-access"},{label:"Read only",value:"read-only"}];function jn(){const e=Ae(Mn)??"";return e&&"__config__"!==e&&"__custom__"!==e?e:"__config__"}function wn(){return function(){try{const e=Ae(Pn)??"";if("__config__"===e)return"__config__";return e.trim()||"__config__"}catch{return"__config__"}}()}function kn(){return function(){const e=Ae(Bn)??"";return Wn(e)?e:yn[0].value}()}const Sn="jupyterlab-codex:auto-save-before-send",Mn="jupyterlab-codex:model",Nn="jupyterlab-codex:command-path",Pn="jupyterlab-codex:reasoning-effort",Bn="jupyterlab-codex:sandbox-mode",Rn="jupyterlab-codex:settings-open",An="jupyterlab-codex:notify-on-done",_n="jupyterlab-codex:notify-on-done-min-seconds",In="jupyterlab-codex:include-active-cell",On="jupyterlab-codex:include-active-cell-output",$n="jupyterlab-codex:selection-previews";function Ln(e,n){const t=n.find(n=>n.value===e);return t?t.label:je(e,32)}function En(e){return"string"==typeof e?e.trim().toLowerCase():""}function zn(e){return"string"==typeof e?e.trim():""}function Tn(e){return"string"==typeof e?zn(e):e&&"object"==typeof e&&"reasoningEffort"in e?zn(e.reasoningEffort):""}function Un(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 Fn(e){const n=e.find(e=>En(e.value)===Cn);return n?n.value:e[0]?.value??Cn}function Dn(e,n){const t=n.find(n=>n.value===e);if(t)return t.label;return zn(e)||"Reasoning"}function Wn(e){return yn.some(n=>n.value===e)}function Kn(e){return"ipynb"===e||"jupytext_py"===e||"plain_py"===e||"unsupported"===e?e:null}function Hn(e){const n=(e||"").trim().toLowerCase();return n.endsWith(".ipynb")?"ipynb":n.endsWith(".py")?"plain_py":"unsupported"}function Jn(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.floor(4294967296*Math.random()).toString(16)}`}function Vn(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 qn(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 Yn(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 Zn(e,n,t){return bn(Ke(e,n,t,{readStoredThreadId:Ue,readDefaultModelOption:jn,readDefaultReasoningEffortOption:wn,readDefaultSandboxModeOption:kn,normalizeSystemText:Xn}))}function Gn(e,n,t){const o=function(e,n,t,o){return Ke(e,`Session started (${(new Date).toLocaleTimeString()})`,{threadId:t,reuseStoredThread:!1,sessionKey:n},o)}(e,n,t,{readStoredThreadId:Ue,readDefaultModelOption:jn,readDefaultReasoningEffortOption:wn,readDefaultSandboxModeOption:kn,normalizeSystemText:Xn});return bn(o)}function Xn(e,n){return"system"!==e?n:S(n)??n}function Qn(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,y]=(0,a.useState)(()=>vn),[j,w]=(0,a.useState)(()=>jn()),[S,I]=(0,a.useState)(()=>wn()),[O,$]=(0,a.useState)(()=>kn()),[L,E]=(0,a.useState)(()=>Ae(Nn)??""),[z,T]=(0,a.useState)(()=>"false"!==(Ae(Sn)??"true")),[U,F]=(0,a.useState)(()=>"false"!==(Ae(In)??"true")),[D,W]=(0,a.useState)(()=>"false"!==(Ae(On)??"true")),[K,H]=(0,a.useState)(!1),[ee,ne]=(0,a.useState)(()=>"true"===(Ae(An)??"true")),[te,re]=(0,a.useState)(()=>function(){const e=Ae(_n);if(null==e)return 30;const n=Number(e);return Number.isFinite(n)?Math.max(0,Math.trunc(n)):0}()),[le,pe]=(0,a.useState)(()=>"true"===(Ae(Rn)??"false")),[xe,fe]=(0,a.useState)(""),[ge,he]=(0,a.useState)([]),ve=(0,a.useRef)([]),Le=(0,a.useRef)(""),ze=(0,a.useRef)(new Map),{socketRef:Ue,socketConnected:Ke,isReconnecting:Qe,reconnect:sn}=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=d.ServerConnection.makeSettings(),r=c.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(){Bo(),We()&&fo();const n=Z(e.app,ht.current);n&&(ht.current=n);const t=x.current||Y(n);if(!t)return;const o=Ve(t);uo(io(t,o),t,o)},onClose:function(){Bo(),ut.current=new Map,it(!1),zt.current=""},onMessage:function(e){const n=bt.current;n.push(e),n.length>1200&&n.splice(0,n.length-1200),Po()}}),[gn,hn]=(0,a.useState)(!0),[bn,Cn]=(0,a.useState)(!1),[zn,Qn]=(0,a.useState)(!1),[et,nt]=(0,a.useState)(!1),[tt,ot]=(0,a.useState)(!1),[rt,it]=(0,a.useState)(!1),[at,st]=(0,a.useState)(null),dt=(0,a.useRef)(function(){const e=Ae($n);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=qn(e);n&&r.push(n)}r.length<=0||t.set(n,r.slice(-10))}return t}catch{return new Map}}()),ct=(0,a.useRef)(new Map),[lt,pt]=(0,a.useState)(null),ut=(0,a.useRef)(new Map),xt=(0,a.useRef)(new Map),ft=(0,a.useRef)(Jn()),mt=(0,a.useRef)(0),gt=(0,a.useRef)(new Set),ht=(0,a.useRef)(null),bt=(0,a.useRef)([]),vt=(0,a.useRef)(null),Ct=(0,a.useRef)(null),yt=(0,a.useRef)(new Map),jt=(0,a.useRef)(ee),wt=(0,a.useRef)(te),kt=(0,a.useRef)(null),St=(0,a.useRef)(null),Mt=(0,a.useRef)(null),Nt=(0,a.useRef)(null),Pt=(0,a.useRef)(null),Bt=(0,a.useRef)(null),Rt=(0,a.useRef)(null),At=(0,a.useRef)(null),_t=(0,a.useRef)(null),It=(0,a.useRef)(null),Ot=(0,a.useRef)(null),$t=(0,a.useRef)(null),Lt=(0,a.useRef)(null),Et=(0,a.useRef)(null),zt=(0,a.useRef)(""),Tt=(0,a.useRef)(null),Ut=(0,a.useRef)(null),Ft=(0,a.useRef)(null),[Dt,Wt]=(0,a.useState)(!1),Kt=(0,a.useRef)(null),Ht=(0,a.useMemo)(()=>Te(),[n]),Jt="__config__"===j?"":j,Vt=b.model,qt=b.reasoningEffort,Yt="__config__"===j?Vt||"":j,Zt=(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=Tn(e),t=En(n);t&&!a.has(t)&&a.set(t,{value:t,label:n||t})}return Array.from(a.values())}(b.availableModels,Yt),[b.availableModels,Yt]);function Gt(e){const n=g.current||"";n&&function(e,n){if(!e)return;const t=new Map(ze.current);n?t.set(e,n):t.delete(e),ze.current=t}(n,e)}function Xt(){if(!g.current)return fe(""),void(Le.current="");Gt(""),fe(""),Le.current=""}function Qt(){st(null),Tt.current=null}function eo(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));dt.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)}_e($n,JSON.stringify(n))}(n)}function no(e,n){const t=(e||"").trim(),o=(n||"").trim();if(!t||!o||t===o)return;const r=dt.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)),eo(a)}function to(e){r.current=e,t(e)}function oo(e){return e.length<=100?e:e.slice(e.length-100)}function ro(e){t(n=>{const t=e(n);return r.current=t,t})}function io(e,n){const t=e||"",o=n||Ve(t),i=r.current.get(o);if(i)return i;const a={...Zn(t,"Session started",{sessionKey:o}),selectedModelOption:j,selectedReasoningEffort:S,selectedSandboxMode:O},s=new Map(r.current);return s.set(o,a),xt.current.set(t,o),to(s),a}function ao(e,n){const t=e||g.current||"";t&&ro(e=>{const o=new Map(e),r=o.get(t)??Zn("","Session started",{sessionKey:t}),i=n.selectedModelOption??r.selectedModelOption,a=n.selectedReasoningEffort??r.selectedReasoningEffort,s=n.selectedSandboxMode??r.selectedSandboxMode,d=n.effectiveSandboxMode??r.effectiveSandboxMode;return i===r.selectedModelOption&&a===r.selectedReasoningEffort&&s===r.selectedSandboxMode&&d===r.effectiveSandboxMode?e:(o.set(t,{...r,selectedModelOption:i,selectedReasoningEffort:a,selectedSandboxMode:s,effectiveSandboxMode:d}),o)})}function so(e){w(e),ao(g.current||"",{selectedModelOption:e})}function co(e){I(e),ao(g.current||"",{selectedReasoningEffort:e})}function lo(e){const n=Ue.current;if(!n||n.readyState!==WebSocket.OPEN)return!1;try{n.send(e)}catch{return!1}return!0}function po(e,n,t,o){if(!jt.current)return;if("granted"!==Re()||"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*wt.current;if(a>0&&(null===i||i<a))return;const s=je(Ee(e).path||n||x.current||"current notebook",120),d=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)`,c=t?`Run cancelled in ${s}${d}`:null===o||0===o?`Run completed in ${s}${d}`:`Run failed (exit ${o}) in ${s}${d}`;try{const n=new window.Notification("Codex run finished",{body:c,tag:e?`codex-done-${e}`:void 0});window.setTimeout(()=>n.close(),12e3)}catch{}}function uo(e,n,t,o){if(!Ue.current||Ue.current.readyState!==WebSocket.OPEN)return;const r=L.trim();lo(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 xo(e,n){if(!e)return;const t=function(e){if("string"!=typeof e)return null;const n=e.trim().toLowerCase().replace(/_/g,"-");return Wn(n)?n:null}(n);t&&ao(e,{effectiveSandboxMode:t})}function fo(){return!(!Ue.current||Ue.current.readyState!==WebSocket.OPEN)&&!!lo(JSON.stringify({type:"delete_all_sessions"}))}function mo(e,n,t){if(!e)return;const o=e.trim(),r="running"===n,i="ready"===n;let a=!1;const s=Date.now();ro(d=>{const c=new Map(d),l=c.get(o)??Zn("","Session started",{sessionKey:o}),p=c.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 d;if(i&&m&&g&&(!t||t!==f))return d;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 c.set(e,{...p,messages:oo(u),runState:n,activeRunId:f,runStartedAt:x,progress:h,progressKind:b}),c}),r&&zt.current===o?it(!0):i&&a&&zt.current===o&&(zt.current="",it(!1))}function go(e,n,t=""){const o=e||g.current||"";if(!o)return;const r=n?je(n,260):"",i=r?t:"";ro(e=>{const n=new Map(e),t=n.get(o)??Zn("","Session started",{sessionKey:o});return t.progress===r&&t.progressKind===i?e:(n.set(o,{...t,progress:r,progressKind:i}),n)})}function ho(e,n){const t=e||g.current||"";t&&ro(e=>{const o=new Map(e),r=o.get(t)??Zn("","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()}`},d=r.messages;if("reasoning"===i.category){const n=d[d.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=d.length-1;n>=0;n-=1){const s=d[n];if("activity"!==s.kind)continue;const c=s.item;if("command"!==c.category||"started"!==c.phase)continue;if(a(c.detail)!==e)continue;const l={...c,phase:"completed",title:i.title,detail:i.detail,raw:i.raw},p=[...d.slice(0,n),{...s,item:l},...d.slice(n+1)];return o.set(t,{...r,messages:oo(p)}),o}}if("completed"===i.phase){const e=s(i.title,i.detail);if(e)for(let n=d.length-1;n>=0;n-=1){const a=d[n];if("activity"!==a.kind)continue;const c=a.item;if("started"!==c.phase)continue;if(s(c.title,c.detail)!==e)continue;const l={...c,phase:"completed",title:i.title,detail:i.detail,raw:i.raw},p=[...d.slice(0,n),{...a,item:l},...d.slice(n+1)];return o.set(t,{...r,messages:oo(p)}),o}}const c=[...d,{kind:"activity",id:i.id,item:i}];return o.set(t,{...r,messages:oo(c)}),o})}function bo(e,n){const t=e||g.current||"";t&&ro(e=>{const o=new Map(e),r=o.get(t)??Zn("","Session started",{sessionKey:t});return o.set(t,{...r,...n,notebookMode:n.notebookMode??r.notebookMode}),o})}function vo(e,n){const t="resume"===(o=n)||"fallback"===o?o:null;var o;if(!t)return;const r=e||g.current||"";r&&ro(e=>{const n=new Map(e),o=n.get(r)??Zn("","Session started",{sessionKey:r});return o.conversationMode===t?e:(n.set(r,{...o,conversationMode:t}),n)})}function Co(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)||He(i)}if(s){const e=t.get(s);if(e)return e}return r}({message:e,runToSessionKey:ut.current,activeSessionKeyByPath:xt.current,currentSessionKey:g.current||""})}function yo(e,n,t){if(!t)return;const o=e||g.current||"";if(!o)return;const r=Xn(n,t);ro(e=>{const t=new Map(e),i=t.get(o)??Zn("","Session started",{sessionKey:o}),a=[...i.messages,{kind:"text",id:crypto.randomUUID(),role:n,text:r}];return t.set(o,{...i,messages:oo(a)}),t})}function jo(){St.current?.scrollIntoView({block:"end"})}function wo(e){const n=ut.current,t=new Map(n);for(const[o,r]of n)r===e&&t.delete(o);ut.current=t}async function ko(n){const{path:t}=Ee(n);if(!t)return;const o=Y(Z(e.app,ht.current));if("running"===r.current.get(n)?.runState&&o!==t)return void gt.current.add(n);const i=G(e.app,t,ht.current);if(!i)return void gt.current.add(n);const a=q(i);if(!a||"function"!=typeof a.revert)return void gt.current.add(n);if(ht.current=i,a.model.dirty)return gt.current.add(n),void yo(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),yo(n,"system","Document refreshed due to file changes."),gt.current.delete(n)}catch(e){yo(n,"system",`Failed to refresh document: ${String(e)}`),gt.current.add(n)}}function So(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 d=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),c=e.getStoredSelectionPreviews().get(s)??[];let l=0;d=[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<c.length;){const e=c[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&&d===a.messages?i:new Map(i).set(n,{...a,threadId:s,messages:d})})}(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:A(e)}};const n="string"==typeof e.type&&e.type||"string"==typeof e.event&&e.event||"event",t=A(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 d="event",c="";"reasoning"===r?(d="reasoning",c="reasoning"):"command_execution"===r?d="command":"file_change"===r?d="file":i&&(d="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(" "):R(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:c,activity:{category:d,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=R(e.command);if(r)return{progress:`${_(n)||n}: ${r}`,progressKind:"",activity:{category:"event",phase:"",title:_(n)||n,detail:r,raw:t}};const i=R(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:yo,clearDeleteAllPending:De,coerceModelCatalog:l,coerceReasoningEffort:En,coerceRateLimitsSnapshot:we,coerceSessionHistory:Yn,coerceNotebookMode:Kn,createSession:Zn,deleteAllSessionsOnServer:fo,getCommandPath:()=>L,getCurrentSessionKey:()=>g.current,getStoredSelectionPreviews:()=>dt.current,hashSelectionPreviewContent:Vn,hasDeleteAllPending:We,isSessionStartNotice:M,markDeleteAllPending:Fe,normalizeSystemText:Xn,notifyRunDone:po,refreshNotebook:ko,resolveMessageSessionKey:Co,runToSessionKeyRef:ut,setCliDefaults:v,setCommandPath:E,setRateLimits:pt,setSessionConversationMode:vo,setSessionPairing:bo,setSessionProgress:go,setSessionRunState:mo,getSessionThreadId:e=>{const n=(e||"").trim();if(!n)return"";const t=r.current.get(n);return(t?.threadId||"").trim()},appendActivityItem:ho,syncEffectiveSandboxFromStatus:xo,updateSessions:e=>ro(n=>e(n))})}catch(n){const t=g.current||"";t&&yo(t,"system",`Internal UI error while processing a server message: ${String(n)}`),console.error("[Codex] onSocketMessage failed",n,e)}}function Mo(){const e=Ct.current;null!==e&&(window.cancelAnimationFrame(e),Ct.current=null);const n=vt.current;null!==n&&(window.clearTimeout(n),vt.current=null)}function No(){Mo();const e=bt.current;if(0===e.length)return;const n=e.splice(0,8);for(const e of n)So(e);e.length>0&&Po()}function Po(){null===vt.current&&null===Ct.current&&("function"!=typeof window.requestAnimationFrame?vt.current=window.setTimeout(No,16):Ct.current=window.requestAnimationFrame(()=>{Ct.current=null,No()}))}function Bo(){bt.current=[],Mo()}function Ro(e){const n=e??Kt.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 Ao(){for(const e of ve.current)URL.revokeObjectURL(e.previewUrl);ve.current=[],he([])}async function _o(n){const t=Ue.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 yo(i,"system","WebSocket is not connected."),!1;const a=i?r.current.get(i):null;if(!1===a?.pairedOk)return yo(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,d=(s??Le.current).trim(),c=null==s&&ve.current.length>0;if(!d&&!c)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,ht.current);p&&(ht.current=p);const u=Y(p),f=p?q(p):null;if(z&&f&&"function"==typeof f.save&&u===o&&f.model.dirty)try{await f.save()}catch(e){return yo(i,"system",`Auto-save failed: ${String(e)}`),!1}const m=l?.notebookMode??Hn(o),h=io(o,i),b=function(e,n){return"plain_py"===n?de(e)??ae(e):ae(e)??de(e)}(p,m),v=b?.text||"";let C=!1,y="";const w=U&&!K;if(w)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,y=e)}else C=!0,y=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 k=w&&D&&"ipynb"===m,M=k?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="",t=0,o=!1;for(const r of e){if(t>=24){o=!0;break}const e=ue(r);if(!e)continue;t+=1;const i=n?"\n\n":"",a=6e3-n.length-i.length;if(a<=0){o=!0;break}const s=e.length>a?e.slice(0,a):e;if(n+=i+s,s.length!==e.length){o=!0;break}}return n=n.replace(/\s+$/,""),n?(o&&(n+="\n\n... (truncated)"),n):""}(o&&Array.isArray(o.outputs)?o.outputs:[])}catch{return""}}(p):"",N=function(e,n){const t="string"==typeof e?e:"",o="string"==typeof n?n:"",r=Ge(4e3);if(r<=0)return{selection:"",cellOutput:"",selectionTruncated:t.length>0,cellOutputTruncated:o.length>0};if(t.length+o.length<=r)return{selection:t,cellOutput:o,selectionTruncated:!1,cellOutputTruncated:!1};const i=Xe(o,r),a=Xe(t,Math.max(0,r-i.length));return{selection:a,cellOutput:i,selectionTruncated:a.length<t.length,cellOutputTruncated:i.length<o.length}}(C?y:"",k?M:""),P=C?N.selection:"",B=k?N.cellOutput:"",R=Boolean(P),A=Boolean(B),_=R?function(e,n,t){const o=X(t);if(o)return{locationLabel:ce(e,n),previewText:J(o,V)}}(p,m,P):void 0,I=A?function(e,n,t,o){const r=X(o);if(r)return{locationLabel:`${"cell"===e?.kind?`Cell ${e.number}`:ce(n,t)} Output`,previewText:J(r,V)}}(b,p,m,B):void 0,$=w&&R,E=w&&A,T=qe(i,h.threadId),F=yt.current.get(T),W=$?function(e){return Ye("selection",e)}({notebookMode:m,text:y,locationLabel:_?.locationLabel}):"",H=E?function(e){return Ye("output",e)}({notebookMode:m,text:M,locationLabel:I?.locationLabel}):"",Z=$&&Ze(F?.selectionSignature,W),ee=E&&Ze(F?.cellOutputSignature,H),ne=R&&!Z,te=A&&!ee,oe=Z?void 0:_,re=ee?void 0:I,le=oe||re?{...oe?{selectionPreview:oe}:{},...re?{cellOutputPreview:re}:{}}:void 0,pe=l?.selectedModelOption??j,xe=l?.selectedReasoningEffort??S,fe=l?.selectedSandboxMode??O,ge="__config__"===pe?(Vt||"").trim():pe.trim(),he="__config__"===xe?En(qt||"")||Fn(Zt):xe;if(!ge)return yo(i,"system","Model is not resolved yet. Wait for model defaults to load, or pick a model explicitly."),!1;if(!he)return yo(i,"system","Reasoning level is not resolved yet. Wait for defaults to load, or pick a reasoning level explicitly."),!1;const be=d||(c?"Please analyze the attached image(s).":""),Ce=c?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 me(t.file)});return n}catch(e){return yo(g.current||"","system",`Failed to prepare image attachment: ${String(e)}`),null}}(ve.current):null;if(c&&!Ce)return!1;let ye;if(Ce&&Ce.length>0&&(ye=Ce),!lo(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:be,notebookPath:o,commandPath:L.trim(),model:ge,reasoningEffort:he,sandbox:fe,...ne?{selection:P}:{},...te?{cellOutput:B}:{},...N.selectionTruncated?{selectionTruncated:!0}:{},...N.cellOutputTruncated?{cellOutputTruncated:!0}:{},...ye?{images:ye}:{},...oe?{uiSelectionPreview:oe}:{},...re?{uiCellOutputPreview:re}:{}}))))return yo(i,"system","Failed to send message to Codex: WebSocket is unavailable."),!1;if($||E){const e={...F??{}};$&&W&&(e.selectionSignature=W),E&&H&&(e.cellOutputSignature=H),e.selectionSignature||e.cellOutputSignature?yt.current.set(T,e):yt.current.delete(T)}!function(e,n,t){const o=(e||"").trim();if(!o)return;const r=Vn(n||"");if(!r)return;const i=new Map(dt.current),a=i.get(o)??[],s={contentHash:r,preview:t??null};i.delete(o),i.set(o,[...a,s].slice(-10)),eo(i)}(h.threadId,be,le);const je=ye?ye.length:0,we="read-only"===fe,ke=function(e,n){if(!e&&!n)return null;const t=String(Ge(4e3));return e&&n?`Attached input and output were truncated to stay within ${t} total characters before sending. The full input can be checked directly from the source file/cell.`:e?`Attached input was truncated to stay within ${t} total characters before sending. The full input can be checked directly from the source file/cell.`:`Attached output was truncated to stay within ${t} total characters before sending.`}(N.selectionTruncated,N.cellOutputTruncated);return"plain_py"!==m&&"jupytext_py"!==m||(zt.current=i,it(!0)),ro(e=>{const n=new Map(e),t=n.get(i)??Zn("","Session started",{sessionKey:i}),o=we?[{kind:"text",id:crypto.randomUUID(),role:"system",text:Xn("system","Code changes are not available with the current permission (Read only).")}]:[],r=ke?[{kind:"text",id:crypto.randomUUID(),role:"system",text:Xn("system",ke)}]:[],a=[...t.messages,...o,{kind:"text",id:crypto.randomUUID(),role:"user",text:be,attachments:je>0?{images:je}:void 0,selectionPreview:oe,cellOutputPreview:re},...r];return n.set(i,{...t,messages:oo(a),runState:"running",activeRunId:null,runStartedAt:Date.now(),progress:"",progressKind:""}),n}),null==s&&(Xt(),Ao()),!0}(0,a.useEffect)(()=>{const e=l(b.availableModels).map(e=>({label:e.displayName,value:e.model}));y(e)},[b.availableModels]),(0,a.useEffect)(()=>{"__config__"!==S&&Zt.length>0&&!Zt.some(e=>e.value===S)&&co("__config__")},[S,Zt]),(0,a.useEffect)(()=>{"__config__"===S&&(En(qt||"")||co(Fn(Zt)))},[S,qt,Zt]),(0,a.useEffect)(()=>{"__config__"!==j&&(C.some(e=>e.value===j)||so("__config__"))},[j,C]),(0,a.useEffect)(()=>{if("__config__"!==j)return;if((Vt||"").trim())return;const e=C[0]?.value;e&&so(e)},[j,Vt,C]),(0,a.useEffect)(()=>{Le.current=xe},[xe]),(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{_e(Oe,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),I(e=>e===t.selectedReasoningEffort?e:t.selectedReasoningEffort),$(e=>e===t.selectedSandboxMode?e:t.selectedSandboxMode))},[f,n]),(0,a.useEffect)(()=>{ve.current=ge},[ge]),(0,a.useEffect)(()=>()=>{for(const e of ve.current)URL.revokeObjectURL(e.previewUrl)},[]),(0,a.useEffect)(()=>{_e(Mn,Jt)},[Jt]),(0,a.useEffect)(()=>{_e(Sn,z?"true":"false")},[z]),(0,a.useEffect)(()=>{_e(In,U?"true":"false")},[U]),(0,a.useEffect)(()=>{U&&!D&&null===Ae(On)&&W(!0)},[U,D]),(0,a.useEffect)(()=>{_e(On,D?"true":"false")},[D]),(0,a.useEffect)(()=>{!U&&K&&H(!1)},[U,K]),(0,a.useEffect)(()=>{!function(e){_e(Nn,e)}(L)},[L]),(0,a.useEffect)(()=>{_e(Pn,S)},[S]),(0,a.useEffect)(()=>{_e(Bn,O)},[O]),(0,a.useEffect)(()=>{_e(Rn,le?"true":"false")},[le]),(0,a.useEffect)(()=>{jt.current=ee,_e(An,ee?"true":"false")},[ee]),(0,a.useEffect)(()=>{const e=Number.isFinite(te)?Math.max(0,Math.floor(te)):0;var n;wt.current=e,n=e,_e(_n,String(Math.max(0,Math.trunc(n))))},[te]),(0,a.useEffect)(()=>{if(!(bn||zn||et||tt))return;const e=e=>{const n=e.target;if(!n)return;const t=Mt.current?.contains(n)??!1,o=Nt.current?.contains(n)??!1,r=Pt.current?.contains(n)??!1,i=Bt.current?.contains(n)??!1,a=At.current?.contains(n)??!1,s=It.current?.contains(n)??!1,d=$t.current?.contains(n)??!1,c=Et.current?.contains(n)??!1;t||o||r||i||a||s||d||c||(Cn(!1),Qn(!1),nt(!1),ot(!1))},n=e=>{"Escape"===e.key&&(e.preventDefault(),Cn(!1),Qn(!1),nt(!1),ot(!1))};return window.addEventListener("pointerdown",e,!0),window.addEventListener("keydown",n),()=>{window.removeEventListener("pointerdown",e,!0),window.removeEventListener("keydown",n)}},[bn,zn,et,tt]),(0,a.useEffect)(()=>{if(!at)return;const e=e=>{const n=e.target;if(!n)return;const t=Tt.current?.contains(n)??!1,o=Ut.current?.contains(n)??!1;t||o||(st(null),Tt.current=null)},n=e=>{"Escape"===e.key&&(e.preventDefault(),st(null),Tt.current=null)};return window.addEventListener("pointerdown",e,!0),window.addEventListener("keydown",n),()=>{window.removeEventListener("pointerdown",e,!0),window.removeEventListener("keydown",n)}},[at]),(0,a.useEffect)(()=>{const n=()=>{const n=Z(e.app,ht.current);n&&(ht.current=n);const t=Y(n),o=Je(t),r=g.current;if(o&&o===r)return;if(r&&Gt(Le.current),x.current=t,p(t),m(o),g.current=o,!o)return void Xt();if(function(e){const n=e&&ze.current.get(e)||"";Le.current=n,fe(n)}(o),Ao(),hn(!0),!t)return;const i=io(t,o);xt.current.set(t,o),uo(i,t,o),gt.current.has(o)&&ko(o)};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 n=(n,t)=>{if(!U||!K)return;const o=Y(e.notebooks.currentWidget);o&&o===x.current&&H(!1)};return e.notebooks.activeCellChanged.connect(n),()=>{e.notebooks.activeCellChanged.disconnect(n)}},[e.notebooks,U,K]),(0,a.useEffect)(()=>{const e=e=>{if(e.key!==$e||!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===ft.current)return;const t=n.notebookPath,o=n.sessionKey,i=n.threadId;if(!t||!o||!i)return;const a=Je(t);if(!a||a!==o)return;const s=Gn(t,o,i),d=x.current,c=r.current.get(o);if(!c||c.threadId!==i){if(c?.threadId){const e=qe(o,c.threadId);yt.current.delete(e)}ro(e=>{const n=new Map(e);return n.set(o,s),n}),xt.current.set(t,o),wo(o),d===t&&g.current!==o&&m(o),d===t&&(Xt(),Ao()),uo(s,t,o)}};return window.addEventListener("storage",e),()=>{window.removeEventListener("storage",e)}},[]),(0,a.useEffect)(()=>()=>{Bo()},[]),(0,a.useEffect)(()=>{if(!gn)return;const e=window.requestAnimationFrame(()=>jo());return()=>window.cancelAnimationFrame(e)},[gn,n,s,Ke]),(0,a.useEffect)(()=>{const e=window.requestAnimationFrame(()=>Ro());return()=>window.cancelAnimationFrame(e)},[xe]),(0,a.useEffect)(()=>{const e=()=>Ro();return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);const Io=f?n.get(f):null,Oo=Io?.messages??[],$o=Io?.progressKind??"",Lo=Ke?Io?.runState??"ready":"disconnected";(0,a.useEffect)(()=>{Qt()},[f]),(0,a.useEffect)(()=>{at&&(Oo.some(e=>"text"===e.kind&&e.id===at.messageId)||Qt())},[Oo,at]),(0,a.useEffect)(()=>{const e=ct.current;for(const[t,o]of n){const n=(o?.threadId||"").trim(),r=(e.get(t)||"").trim();r&&n&&r!==n&&no(r,n)}const t=new Map;for(const[e,o]of n){const n=(o?.threadId||"").trim();e&&n&&t.set(e,n)}ct.current=t},[n]);const Eo=s?s.split("/").pop()||"Untitled":"No notebook",zo=U&&!K,To=Io?.notebookMode??Hn(s),Uo=zo&&D&&"ipynb"===To,Fo=zo&&"plain_py"!==To&&s.length>0&&!1!==Io?.pairedOk,Do=xe.trim(),Wo="disconnected"!==Lo&&s.length>0&&!1!==Io?.pairedOk,Ko="running"===Lo?"stop":"send",Ho=Io?.selectedModelOption??j,Jo=Io?.selectedReasoningEffort??S,Vo=Io?.selectedSandboxMode??O,qo=Vt?Ln(Vt,C):"Auto",Yo="__config__"===Ho?qo:Ln(Ho,C),Zo=qt?Dn(qt,Zt):"Auto",Go="__config__"===Jo?Zo:Dn(Jo,Zt),Xo=yn.find(e=>e.value===Vo)?.label??"Permission",Qo=Re(),er="unsupported"===Qo,nr="unsupported"===Qo?"Browser notifications are not available in this environment.":"denied"===Qo?"Notifications are blocked for this site. Allow them in browser settings.":"default"===Qo?"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"}`}.`,tr=Array.from(n.entries()).some(([e,n])=>{if("running"!==n.runState)return!1;const t=n.notebookMode??Hn(Ee(e).path);return"plain_py"===t||"jupytext_py"===t}),or=Boolean(zt.current),rr="running"===Lo&&Boolean(Io?.activeRunId),ir=Wo&&(Boolean(Do)||ge.length>0),ar="send"===Ko?!ir||("plain_py"===To||"jupytext_py"===To)&&(tr||or)&&"send"===Ko:"stop"===Ko&&!rr,sr=Date.now(),dr=function(e){if(!e)return null;const n=Date.parse(e);return Number.isFinite(n)?n:null}(lt?.updatedAt??null),cr=null==dr?null:sr-dr,lr=null==cr||cr>6e5,pr=Se(lt?.primary?.usedPercent??null),ur=Se(lt?.secondary?.usedPercent??null),xr=null==dr&&null==pr&&null==ur,fr=Pe(lt?.primary?.resetsAt??null,sr),mr=Pe(lt?.secondary?.resetsAt??null,sr),gr="Overdue"===fr||"Overdue"===mr||null!=cr&&cr>36e5,hr=null==pr?null:pr/100,br=null==cr?"Unknown":`${Me(cr)} ago`,vr=lt?.primary?.windowMinutes??null,Cr=lt?.secondary?.windowMinutes??null,yr=null==vr?"":`Window: ${Math.round(vr/60)}h`,jr=null==Cr?"":`Window: ${Math.round(Cr/1440)}d`,wr=lt?.contextWindow?.windowTokens??null,kr=lt?.contextWindow?.usedTokens??null,Sr=lt?.contextWindow?.leftTokens??null,Mr=lt?.contextWindow?.usedPercent??null,Nr="number"==typeof Mr&&Number.isFinite(Mr)?ke(Mr/100,0,1):null,Pr=Be(kr),Br=Be(Sr),Rr=Be(wr),Ar="number"==typeof Mr&&Number.isFinite(Mr)?`${Math.round(ke(Mr,0,100))}%`:"Unknown",_r=null!=lt?.contextWindow;return(0,a.useLayoutEffect)(()=>{const e=Ft.current;if(!e)return void Wt(!1);const n=()=>{const n=e.scrollWidth-e.clientWidth>1;Wt(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)(be,{status:Lo}),(0,i.jsx)("span",{className:"jp-CodexChat-notebookWrap","data-full-name":Dt?Eo:void 0,children:(0,i.jsx)("span",{className:"jp-CodexChat-notebook",ref:Ft,title:Dt?Eo:void 0,children:Eo})})]}),(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={...Gn(e,n,Jn()),selectedModelOption:j,selectedReasoningEffort:S,selectedSandboxMode:O};if(t?.threadId){const e=qe(n,t.threadId);yt.current.delete(e)}ro(e=>{const t=new Map(e);return t.set(n,i),t}),wo(n),Xt(),Ao(),uo(i,e,n,{forceNewThread:!0}),function(e,n,t){var o;!function(e){try{_e($e,JSON.stringify(e))}catch{}}({kind:"new-thread",sessionKey:(o={sessionKey:e,notebookPath:n,threadId:t,source:ft.current,createEventId:Jn}).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"===Lo,"aria-label":"New thread",title:"New thread",children:(0,i.jsx)(en,{width:16,height:16})}),(0,i.jsx)("div",{className:"jp-CodexMenuWrap",ref:Pt,children:(0,i.jsx)("button",{type:"button",className:`jp-CodexHeaderBtn jp-CodexHeaderBtn-icon jp-CodexUsageBtn${et?" is-active is-open":""}${lr?" is-stale":""}${gr?" is-overdue":""}`,ref:Ot,onClick:()=>(nt(e=>{const n=!e;return n&&function(e=!1){const n=Ue.current;if(!n||n.readyState!==WebSocket.OPEN)return;const t=Date.now();!e&&t-mt.current<15e3||(mt.current=t,lo(JSON.stringify({type:"refresh_rate_limits"})))}(),n}),Cn(!1),Qn(!1),void ot(!1)),"aria-label":null==pr?"Codex usage":`Codex usage: ${pr}% left`,"aria-haspopup":"dialog","aria-expanded":et,title:null==pr?"Codex usage: unknown":`Codex usage: ${pr}% left (resets in ${fr})`,children:(0,i.jsx)(cn,{level:hr,width:16,height:16})})}),(0,i.jsxs)(mn,{open:et,anchorRef:Ot,popoverRef:$t,className:"jp-CodexUsagePopover",ariaLabel:"Codex usage",role:"dialog",align:"right",children:[(gr||lr)&&(0,i.jsxs)("div",{className:"jp-CodexUsageNotice"+(gr?" is-overdue":lr?" is-stale":""),children:[(0,i.jsx)("div",{className:"jp-CodexUsageNoticeTitle",children:xr?"Usage unavailable":gr?"Overdue usage snapshot":"Stale usage snapshot"}),(0,i.jsx)("div",{className:"jp-CodexUsageNoticeBody",children:xr?"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 ",fr]})]}),(0,i.jsx)("div",{className:"jp-CodexUsageBar",children:(0,i.jsx)("div",{className:"jp-CodexUsageBarFill"+(lr?" is-stale":""),style:{width:`${pr??0}%`}})}),(0,i.jsxs)("div",{className:"jp-CodexUsageMeta",children:[(0,i.jsx)("div",{className:"jp-CodexUsageMetaLeft",children:null==pr?"--% left":`${pr}% left`}),(0,i.jsx)("div",{className:"jp-CodexUsageMetaRight",children:yr})]})]}),(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 ",mr]})]}),(0,i.jsx)("div",{className:"jp-CodexUsageBar",children:(0,i.jsx)("div",{className:"jp-CodexUsageBarFill"+(lr?" is-stale":""),style:{width:`${ur??0}%`}})}),(0,i.jsxs)("div",{className:"jp-CodexUsageMeta",children:[(0,i.jsx)("div",{className:"jp-CodexUsageMetaLeft",children:null==ur?"--% left":`${ur}% left`}),(0,i.jsx)("div",{className:"jp-CodexUsageMetaRight",children:jr})]})]}),(0,i.jsxs)("div",{className:"jp-CodexUsageFooter",children:["Last updated: ",br]})]}),(0,i.jsx)("button",{type:"button",onClick:()=>{pe(e=>!e),Cn(!1),Qn(!1),nt(!1),ot(!1)},className:"jp-CodexHeaderBtn jp-CodexHeaderBtn-icon"+(le?" is-active":""),"aria-label":"Settings","aria-expanded":le,title:"Settings",children:(0,i.jsx)(an,{width:16,height:16})})]})]}),!1===Io?.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:Io.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:kt,onScroll:function(){const e=kt.current;if(!e)return;const n=e.scrollHeight-(e.scrollTop+e.clientHeight)<80;hn(n)},children:["disconnected"===Lo&&!Qe&&(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:()=>sn(),disabled:Qe,"aria-label":Qe?"Codex reconnecting":"Reconnect to Codex",title:Qe?"Attempting to reconnect...":"Reconnect to Codex",children:Qe?"Connecting...":"Reconnect"})]}),0===Oo.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."})]}),Oo.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),d=a||s,c=d&&at?.messageId===e.id,l=`jp-CodexChat-message jp-CodexChat-${e.role}${n}${d?" has-selection-preview":""}${c?" 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)(Ce,{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)(rn,{width:14,height:14}),(0,i.jsx)("span",{className:"jp-CodexChat-attachmentCount",children:t})]})}),d&&(0,i.jsx)("button",{type:"button",className:"jp-CodexChat-selectionToggle"+(c?" is-open":""),onClick:n=>function(e,n,t){e&&(at?.messageId!==e?(Tt.current=t.currentTarget,st({messageId:e,preview:n})):Qt())}(e.id,{...o?{selectionPreview:o}:{},...r?{cellOutputPreview:r}:{}},n),"aria-label":c?"Hide message context":"Show message context",children:(0,i.jsx)(en,{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 ",Ne(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)(xn,{width:14,height:14}):"completed"===n.phase?(0,i.jsx)(un,{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"===Lo&&(0,i.jsx)("div",{className:"jp-CodexChat-loading"+("reasoning"===$o?" is-reasoning":""),"aria-label":"reasoning"===$o?"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:St})]})}),(0,i.jsx)(mn,{open:Boolean(at),anchorRef:Tt,popoverRef:Ut,className:"jp-CodexChat-selectionPopover",ariaLabel:"Message context",constrainHeightToViewport:!0,viewportMargin:20,role:"dialog",align:"right",children:at&&(0,i.jsxs)("div",{className:"jp-CodexChat-selectionCard",role:"note","aria-label":"Message context",children:[at.preview.selectionPreview&&(0,i.jsxs)("div",{className:"jp-CodexChat-contextSection",children:[(0,i.jsx)("div",{className:"jp-CodexChat-selectionMeta",children:at.preview.selectionPreview.locationLabel}),(0,i.jsx)(ye,{code:at.preview.selectionPreview.previewText})]}),at.preview.cellOutputPreview&&(0,i.jsxs)("div",{className:"jp-CodexChat-contextSection",children:[(0,i.jsx)("div",{className:"jp-CodexChat-selectionMeta",children:at.preview.cellOutputPreview.locationLabel}),(0,i.jsx)(ye,{code:at.preview.cellOutputPreview.previewText})]})]})}),(0,i.jsxs)("div",{className:"jp-CodexChat-input",children:[(0,i.jsx)("div",{className:"jp-CodexJumpBar"+(gn?"":" is-visible"),children:(0,i.jsx)("button",{type:"button",className:"jp-CodexJumpToLatestBtn",onClick:jo,"aria-label":"Jump to latest","aria-hidden":gn,tabIndex:gn?-1:0,title:"Jump to latest",children:(0,i.jsx)(tn,{width:20,height:20})})}),(0,i.jsxs)("div",{className:"jp-CodexComposer",children:[(0,i.jsx)("div",{className:"jp-CodexComposer-cellAttachmentWrap"+(Fo?" is-visible":""),"aria-hidden":!Fo,children:(0,i.jsxs)("div",{className:"jp-CodexComposer-cellAttachment",role:"group","aria-label":"Pending active-cell attachment",title:Uo?"Active cell and output will be attached on next send.":"Active cell will be attached on next send.",children:[(0,i.jsx)("span",{className:"jp-CodexComposer-cellAttachmentLabel",children:"Cell Attached"}),(0,i.jsx)("button",{type:"button",className:"jp-CodexComposer-cellAttachmentRemove",onClick:()=>H(!0),"aria-label":"Do not attach cell on next send",title:"Do not attach cell on next send",disabled:!Fo,tabIndex:Fo?0:-1,children:(0,i.jsx)(fn,{width:10,height:10})})]})}),(0,i.jsx)("textarea",{ref:Kt,value:xe,onChange:e=>{var n;Gt(n=e.currentTarget.value),fe(n),Le.current=n,window.requestAnimationFrame(()=>Ro(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=ve.current.length;if(o>=4)return void yo(g.current||"","system","Too many images attached (max 4).");const r=4-o,i=[];let a=0,s=0,d=ve.current.reduce((e,n)=>e+n.file.size,0);for(const e of t.slice(0,r))e.size>4194304?a+=1:d+e.size>6291456?s+=1:(i.push({id:crypto.randomUUID(),file:e,previewUrl:URL.createObjectURL(e)}),d+=e.size);a>0&&yo(g.current||"","system",`Skipped ${a} image(s): each must be <= ${Math.round(4)}MB.`),s>0&&yo(g.current||"","system",`Skipped ${s} image(s): total attachments must be <= ${Math.round(6)}MB.`),0!==i.length&&he(e=>{const n=[...e,...i];return ve.current=n,n})},placeholder:!1===Io?.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"!==Lo?ir&&(e.preventDefault(),_o()):e.preventDefault())}}),ge.length>0&&(0,i.jsx)("div",{className:"jp-CodexComposer-attachments",role:"group","aria-label":"Attachments",children:ge.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 he(e=>{const t=e.find(e=>e.id===n);t&&URL.revokeObjectURL(t.previewUrl);const o=e.filter(e=>e.id!==n);return ve.current=o,o});var n},"aria-label":"Remove image",title:"Remove image",children:(0,i.jsx)(fn,{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:Mt,children:(0,i.jsx)("button",{type:"button",ref:Rt,className:"jp-CodexModelBtn "+(bn?"is-open":""),onClick:()=>{Cn(e=>!e),Qn(!1),nt(!1),ot(!1)},disabled:"running"===Lo,"aria-label":`Model: ${Yo}`,"aria-haspopup":"menu","aria-expanded":bn,title:`Model: ${Yo}`,children:(0,i.jsx)("span",{className:"jp-CodexModelBtn-label",children:Yo})})}),(0,i.jsxs)(mn,{open:bn,anchorRef:Rt,popoverRef:At,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__"===Ho&&Vt&&C.some(e=>e.value===Vt)?Vt:Ho,t=n===e.value;return(0,i.jsxs)("button",{type:"button",className:"jp-CodexMenuItem "+(t?"is-active":""),onClick:()=>{so(e.value),Cn(!1)},children:[(0,i.jsx)("span",{className:"jp-CodexMenuItemLabel",children:e.label}),t&&(0,i.jsx)(un,{className:"jp-CodexMenuCheck",width:16,height:16})]},e.value)})]}),(0,i.jsx)("div",{className:"jp-CodexMenuWrap",ref:Nt,children:(0,i.jsx)("button",{type:"button",ref:_t,className:"jp-CodexIconBtn "+(zn?"is-open":""),onClick:()=>{Qn(e=>!e),Cn(!1),nt(!1),ot(!1)},disabled:"running"===Lo,"aria-label":`Reasoning: ${Go}`,"aria-haspopup":"menu","aria-expanded":zn,title:`Reasoning: ${Go}`,children:(0,i.jsx)(dn,{isConfig:"__config__"===Jo&&!qt,activeBars:Un("__config__"===Jo&&qt?qt:Jo,Zt),width:17,height:17})})}),(0,i.jsxs)(mn,{open:zn,anchorRef:_t,popoverRef:It,role:"menu",ariaLabel:"Reasoning",align:"left",children:[0===Zt.length&&(0,i.jsx)("div",{className:"jp-CodexMenuItem",children:"No reasoning options"}),Zt.map(e=>{const n=("__config__"===Jo&&qt?qt:Jo)===e.value;return(0,i.jsxs)("button",{type:"button",className:"jp-CodexMenuItem "+(n?"is-active":""),onClick:()=>{co(e.value),Qn(!1)},children:[(0,i.jsx)("span",{className:"jp-CodexMenuItemLabel",children:e.label}),n&&(0,i.jsx)(un,{className:"jp-CodexMenuCheck",width:16,height:16})]},e.value)})]}),(0,i.jsx)("div",{className:"jp-CodexMenuWrap",ref:Bt,children:(0,i.jsx)("button",{type:"button",className:`jp-CodexIconBtn jp-CodexPermissionBtn${tt?" is-open":""}${"danger-full-access"===Vo?" is-danger":""}${"read-only"===Vo?" is-warning":""}`,ref:Lt,onClick:()=>{ot(e=>!e),Cn(!1),Qn(!1),nt(!1)},disabled:"running"===Lo,"aria-label":`Permission: ${Xo}`,"aria-haspopup":"menu","aria-expanded":tt,title:`Permission: ${Xo}`,children:(0,i.jsx)(pn,{width:17,height:17})})}),(0,i.jsx)(mn,{open:tt,anchorRef:Lt,popoverRef:Et,role:"menu",ariaLabel:"Permissions",align:"right",children:yn.map(e=>(0,i.jsxs)("button",{type:"button",className:"jp-CodexMenuItem "+(Vo===e.value?"is-active":""),onClick:()=>{var n;n=e.value,$(n),ao(g.current||"",{selectedSandboxMode:n}),ot(!1)},children:[(0,i.jsx)("span",{className:"jp-CodexMenuItemLabel",children:e.label}),Vo===e.value&&(0,i.jsx)(un,{className:"jp-CodexMenuCheck",width:16,height:16})]},e.value))}),_r&&(0,i.jsxs)("div",{className:"jp-CodexContextWrap",children:[(0,i.jsx)("button",{type:"button",className:"jp-CodexIconBtn jp-CodexContextBtn"+(lr?" is-stale":""),"aria-label":null==kr||null==Sr?"Context window usage unavailable":`Context window: used ${Pr} tokens, left ${Br} tokens`,title:null==kr||null==Sr?"Context window usage unavailable":`Used ${Pr} / left ${Br}`,children:(0,i.jsx)(ln,{level:Nr,width:20,height:20})}),(0,i.jsxs)("div",{className:"jp-CodexContextPopover",role:"tooltip",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:Pr})]}),(0,i.jsxs)("div",{className:"jp-CodexContextPopoverRow",children:[(0,i.jsx)("span",{children:"Left"}),(0,i.jsx)("strong",{children:Br})]}),(0,i.jsx)("div",{className:"jp-CodexContextPopoverMeta",children:null==wr?"Window size unavailable":`Window: ${Rr} tokens (${Ar} used)`})]})]})]}),(0,i.jsx)("div",{className:"jp-CodexComposer-toolbarRight",children:(0,i.jsx)("button",{type:"button",className:"jp-CodexSendBtn"+("stop"===Ko?" is-stop":""),onClick:()=>{"stop"!==Ko?_o():function(){const e=g.current||"";if(!e)return;const n=e?r.current.get(e):null,t=n?.activeRunId??null;Ue.current&&Ue.current.readyState===WebSocket.OPEN?t?(go(e,"Cancelling..."),lo(JSON.stringify(function(e){return{type:"cancel",runId:e}}(t)))):yo(e,"system","Cancel not available yet (waiting for run id)."):yo(e,"system","Cancel failed: WebSocket is not connected.")}()},disabled:ar,"aria-label":"stop"===Ko?"Stop run":"Send",title:"stop"===Ko?Io?.activeRunId?`runId: ${Io.activeRunId}`:"Waiting for run id...":"disconnected"===Lo?"Connecting...":"Send",children:"stop"===Ko?(0,i.jsx)(on,{width:18,height:18}):(0,i.jsx)(nn,{width:18,height:18})})})]})]})]}),le&&(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:()=>pe(!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:()=>pe(!1),"aria-label":"Close settings",title:"Close",children:(0,i.jsx)(fn,{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:L,disabled:"running"===Lo,onChange:e=>E(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:z,onChange:e=>T(e.currentTarget.checked),disabled:"running"===Lo}),"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"===Lo}),"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"===Lo||!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=Re(),t=g.current||"";if("unsupported"===n)return yo(t,"system","Browser notifications are not supported in this environment."),void ne(!1);if("granted"!==n){if("denied"===n)return yo(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&&yo(t,"system","Browser notification permission was denied. Allow notifications in browser settings to enable this option."),ne(!1)}catch{yo(t,"system","Failed to request browser notification permission."),ne(!1)}}else ne(!0)}(e.currentTarget.checked)},disabled:"running"===Lo||er}),"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:er}),(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:nr})]})]}),(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: ",Ht]})}),(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=Te();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),Fe(),!fo()&&t&&yo(t,"system","Delete request could not be sent now. It will be retried when you reconnect."),ut.current=new Map,xt.current=new Map,yt.current=new Map,Ie(Oe),dt.current=new Map,Ie($n),to(new Map),Xt(),Ao()}()},disabled:"running"===Lo||0===Ht&&0===n.size,title:"running"===Lo?"Cannot delete while a run is in progress.":"Delete all saved conversations",children:"Delete all"})})]})]})]})]})]})}var et=t(5072),nt=t.n(et),tt=t(7825),ot=t.n(tt),rt=t(7659),it=t.n(rt),at=t(5056),st=t.n(at),dt=t(540),ct=t.n(dt),lt=t(1113),pt=t.n(lt),ut=t(2646),xt={};xt.styleTagTransform=pt(),xt.setAttributes=st(),xt.insert=it().bind(null,"head"),xt.domAPI=ot(),xt.insertStyleElement=ct(),nt()(ut.A,xt),ut.A&&ut.A.locals&&ut.A.locals;const ft={id:"jupyterlab-codex:plugin",autoStart:!0,requires:[o.ICommandPalette,r.INotebookTracker],activate:(e,n,t)=>{const o=new hn(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),d=t(4417),c=t.n(d),l=new URL(t(3915),t.b),p=a()(r());p.i(s.A);var u=c()(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: 28px;\n margin-bottom: 6px;\n opacity: 1;\n transform: translateY(0) scale(1);\n pointer-events: auto;\n}\n\n.jp-CodexComposer-cellAttachment {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n width: fit-content;\n max-width: 100%;\n padding: 4px 8px;\n border-radius: 999px;\n border: none;\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: 650;\n line-height: 1;\n animation: cdx-cell-attachment-in 220ms cubic-bezier(0.2, 0.8, 0.2, 1);\n}\n\n.jp-CodexComposer-cellAttachmentLabel {\n min-width: 0;\n white-space: nowrap;\n}\n\n.jp-CodexComposer-cellAttachmentRemove {\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) 30%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-surface) 82%, 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-cellAttachmentRemove: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@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 position: absolute;\n right: 0;\n bottom: calc(100% + 10px);\n z-index: 35;\n min-width: 176px;\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 opacity: 0;\n transform: translateY(4px);\n pointer-events: none;\n transition: opacity 120ms ease, transform 120ms ease;\n}\n\n.jp-CodexContextWrap:hover .jp-CodexContextPopover,\n.jp-CodexContextWrap:focus-within .jp-CodexContextPopover {\n opacity: 1;\n transform: translateY(0);\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-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"}}]);
@@ -1 +1 @@
1
- var _JUPYTERLAB;(()=>{"use strict";var e,r,t,a,n,o,i,u,f,l,d,s,c,p,h,b,v,m,g,y,w,j,k,x={4379(e,r,t){var a={"./index":()=>Promise.all([t.e(504),t.e(972)]).then(()=>()=>t(8972)),"./extension":()=>Promise.all([t.e(504),t.e(972)]).then(()=>()=>t(8972))},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",504:"335f3447c84ba3d74517",972:"d43137b7438a053eeb72",997:"213b5a946a1c8e2b1bba"}[e]+".js?v="+{124:"ac0734653995d3fe00f2",364:"15acf07c0b6852a40fd9",489:"ef138a7e916c5b465543",504:"335f3447c84ba3d74517",972:"d43137b7438a053eeb72",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 f=document.getElementsByTagName("script"),l=0;l<f.length;l++){var d=f[l];if(d.getAttribute("src")==t||d.getAttribute("data-webpack")==r+n){i=d;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 s=(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(s.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=s.bind(null,i.onerror),i.onload=s.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})},f=[];return"default"===t&&(u("dompurify","3.3.1",()=>P.e(997).then(()=>()=>P(4997))),u("jupyterlab-codex-sidebar","0.1.3",()=>Promise.all([P.e(504),P.e(972)]).then(()=>()=>P(8972))),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]=f.length?Promise.all(f).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("+f()+")":1===u?"("+f()+" || "+f()+")":2===u?i.pop()+" "+i.pop():n(u))}return f();function f(){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,f=!0;;u++,i++){var l,d,s=u<e.length?(typeof e[u])[0]:"";if(i>=r.length||"o"==(d=(typeof(l=r[i]))[0]))return!f||("u"==s?u>a&&!n:""==s!=n);if("u"==d){if(!f||"u"!=s)return!1}else if(f)if(s==d)if(u<=a){if(l!=e[u])return!1}else{if(n?l>e[u]:l<e[u])return!1;l!=e[u]&&(f=!1)}else if("s"!=s&&"n"!=s){if(n||u<=a)return!1;f=!1,u--}else{if(u<=a||d<s!=n)return!1;f=!1}else"s"!=s&&"n"!=s&&(f=!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()),f=e=>Object.keys(e).reduce((r,t)=>(e[t].eager&&(r[t]=e[t]),r),{}),l=(e,r,t,n)=>{var i=n?f(e[r]):e[r];return(r=Object.keys(i).reduce((e,r)=>!o(t,r)||e&&!a(e,r)?e:r,0))&&i[r]},d=(e,r,t)=>{var n=t?f(e[r]):e[r];return Object.keys(n).reduce((e,r)=>!e||!n[e].loaded&&a(e,r)?r:e,0)},s=(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 f=l(r,t,n,a);return f?u(f):o?o():void p(c(r,e,t,n,a))}),g=b((e,r,t,a,n,f)=>{if(!i(r,t))return v(e,t,f);var l=d(r,t,a);return o(n,l)||h(s(r,t,l,n)),u(r[t][l])}),y={},w={405:()=>m("default","marked-katex-extension",!1,[1,5,1,7],()=>P.e(124).then(()=>()=>P(8124))),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]),4281:()=>m("default","marked",!1,[1,16,4,2],()=>P.e(364).then(()=>()=>P(4364))),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)))},j={124:[4502],972:[405,1125,2707,2931,3345,4281,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{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,f=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);f<o.length;f++)n=o[f],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(4379);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB)["jupyterlab-codex-sidebar"]=E})();
1
+ var _JUPYTERLAB;(()=>{"use strict";var e,r,t,a,n,o,i,u,d,l,f,s,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(855)]).then(()=>()=>t(9855)),"./extension":()=>Promise.all([t.e(525),t.e(855)]).then(()=>()=>t(9855))},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",855:"d20f6158cd81bb4c9056",997:"213b5a946a1c8e2b1bba"}[e]+".js?v="+{124:"ac0734653995d3fe00f2",364:"15acf07c0b6852a40fd9",489:"ef138a7e916c5b465543",525:"224526d045c727069de6",855:"d20f6158cd81bb4c9056",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 d=document.getElementsByTagName("script"),l=0;l<d.length;l++){var f=d[l];if(f.getAttribute("src")==t||f.getAttribute("data-webpack")==r+n){i=f;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 s=(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(s.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=s.bind(null,i.onerror),i.onload=s.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})},d=[];return"default"===t&&(u("dompurify","3.3.1",()=>P.e(997).then(()=>()=>P(4997))),u("jupyterlab-codex-sidebar","0.1.5",()=>Promise.all([P.e(525),P.e(855)]).then(()=>()=>P(9855))),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]=d.length?Promise.all(d).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("+d()+")":1===u?"("+d()+" || "+d()+")":2===u?i.pop()+" "+i.pop():n(u))}return d();function d(){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,d=!0;;u++,i++){var l,f,s=u<e.length?(typeof e[u])[0]:"";if(i>=r.length||"o"==(f=(typeof(l=r[i]))[0]))return!d||("u"==s?u>a&&!n:""==s!=n);if("u"==f){if(!d||"u"!=s)return!1}else if(d)if(s==f)if(u<=a){if(l!=e[u])return!1}else{if(n?l>e[u]:l<e[u])return!1;l!=e[u]&&(d=!1)}else if("s"!=s&&"n"!=s){if(n||u<=a)return!1;d=!1,u--}else{if(u<=a||f<s!=n)return!1;d=!1}else"s"!=s&&"n"!=s&&(d=!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()),d=e=>Object.keys(e).reduce((r,t)=>(e[t].eager&&(r[t]=e[t]),r),{}),l=(e,r,t,n)=>{var i=n?d(e[r]):e[r];return(r=Object.keys(i).reduce((e,r)=>!o(t,r)||e&&!a(e,r)?e:r,0))&&i[r]},f=(e,r,t)=>{var n=t?d(e[r]):e[r];return Object.keys(n).reduce((e,r)=>!e||!n[e].loaded&&a(e,r)?r:e,0)},s=(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 d=l(r,t,n,a);return d?u(d):o?o():void p(c(r,e,t,n,a))}),g=b((e,r,t,a,n,d)=>{if(!i(r,t))return v(e,t,d);var l=f(r,t,a);return o(n,l)||h(s(r,t,l,n)),u(r[t][l])}),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],855:[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,d=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);d<o.length;d++)n=o[d],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})();