jupyterlab-codex-sidebar 0.1.6 → 0.1.7

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.
Binary file
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jupyterlab-codex-sidebar",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "author": "ILHO AHN",
5
5
  "description": "Codex sidebar for JupyterLab",
6
6
  "license": "BSD-3-Clause",
@@ -64,7 +64,7 @@
64
64
  "outputDir": "jupyterlab_codex/labextension",
65
65
  "webpackConfig": "webpack.config.js",
66
66
  "_build": {
67
- "load": "static/remoteEntry.6ef5e7167763a316c000.js",
67
+ "load": "static/remoteEntry.34af8a0df422b4d029c3.js",
68
68
  "extension": "./extension"
69
69
  }
70
70
  }
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunkjupyterlab_codex_sidebar=self.webpackChunkjupyterlab_codex_sidebar||[]).push([[737],{6737(e,n,t){t.r(n),t.d(n,{default:()=>bt});var o=t(5285),r=t(2931),i=t(4848),a=t(3345),s=t.n(a),c=t(1125),d=t(4526);function l(e){if(!Array.isArray(e))return[];const n=new Set,t=[];for(const o of e){if(!o||"object"!=typeof o)continue;const e=o.model,r=o.displayName,i=o.reasoningEfforts??o.supportedReasoningEfforts,a=o.defaultReasoningEffort;if("string"!=typeof e)continue;const s=e.trim();if(!s||n.has(s))continue;n.add(s);const c="string"==typeof r&&r.trim()?r.trim():s,d="string"==typeof a&&a.trim()?a.trim():"",l=Array.isArray(i)?i.reduce((e,n)=>{const t=p(n);return!t||e.includes(t)||e.push(t),e},[]):[];t.push({model:s,displayName:c,...l.length>0?{reasoningEfforts:l}:{},...d?{defaultReasoningEffort:d}:{}})}return t}function p(e){if("string"==typeof e)return e.trim();if(e&&"object"==typeof e&&"reasoningEffort"in e){const n=e.reasoningEffort;return"string"==typeof n?n.trim():""}return""}function u(e,n){return e.length<=n?e:n<=3?e.slice(0,n):`${e.slice(0,n-3)}...`}function x(e,n={}){if(!e||"object"!=typeof e)return;const t=e,o="string"==typeof t.locationLabel?t.locationLabel.trim():"",r=n.normalize??(e=>e.trim()),i=n.maxChars??500,a="string"==typeof t.previewText?u(r(t.previewText),i):"";return o&&a?{locationLabel:o,previewText:a}:void 0}function f(e){if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e){const n=e.trim();if(!n)return null;const t=Number(n);return Number.isFinite(t)?t:null}return null}function m(e){if(!e||"object"!=typeof e)return null;const n=e,t=f(n.usedPercent),o=f(n.windowMinutes),r=f(n.resetsAt);return{usedPercent:t,windowMinutes:null===o?null:Math.round(o),resetsAt:null===r?null:Math.round(r)}}function g(e){if(!e||"object"!=typeof e)return null;const n=e,t=f(n.windowTokens),o=f(n.usedTokens),r=f(n.leftTokens),i=f(n.usedPercent),a=null===t?null:Math.round(t),s=null===o?null:Math.round(o),c=null===r?null:Math.round(r);return null==a&&null==s&&null==c&&null==i?null:{windowTokens:a,usedTokens:s,leftTokens:c,usedPercent:i}}function h(e){if(!e||"object"!=typeof e)return{};const n=e;return Object.prototype.hasOwnProperty.call(n,"selectionPreview")||Object.prototype.hasOwnProperty.call(n,"cellOutputPreview")?{selectionPreview:n.selectionPreview,cellOutputPreview:n.cellOutputPreview}:Object.prototype.hasOwnProperty.call(n,"locationLabel")&&Object.prototype.hasOwnProperty.call(n,"previewText")?{selectionPreview:n}:{}}const b=/^(?:session started|session start|new thread started)/i,v=/^(?:session start:|new thread started:)/i,C=/^(?:session|new thread|new session|thread|conversation|セッション|スレッド|チャット|会話|会議|会话|对话|대화|세션|새로운\s*세션|새\s*세션|스레드|새로운\s*스레드|새\s*스레드|sesión|conversación|conversacion|hilo|nueva sesión|nuevo hilo)/i,j=/(?:start(?:ed|ing)?|started|start|resume|resumed|resolving|initialize(?:d|s)?|initializing|restarted|reopen|restart|시작|시작됨|시작되었습니다|起動|开始|已开始|已啟動|開始|開始しました|开始しました|已啟動しました|始ま|始動|会话开始|会議開始|会話開始|会話を開始|iniciada|iniciado|iniciar|inicio|inicio de|comenzó|comenzada|开始しました|始動|開始され|始まった)/i;function y(e){return e.replace(/\s+/g," ").trim()}const w=new Set(["client","client-new","force-new","mapping","mapping-on-missing","mapping-on-mismatch","new","new-on-mismatch"]);function k(e){return"string"==typeof e&&w.has(e.trim().toLowerCase())}function S(e){const n=e.trim(),{rest:t,value:o}=function(e){const n=e.trim();if(!n.endsWith(")"))return{rest:n,value:null};const t=n.lastIndexOf("(");if(t<0)return{rest:n,value:null};const o=n.slice(t+1,-1).trim();return o?{rest:n.slice(0,t).trimEnd(),value:o}:{rest:n,value:null}}(n);if(b.test(t)||v.test(t))return"Session started"+((r=o)?` (${r})`:"");var r;const i=y(t);return C.test(i)&&j.test(i)&&function(e){const n=e.slice(0,72);return C.test(n)}(i)&&i.length<=120?`${i}${o?` (${o})`:""}`:null}function M(e,n){if(k(n))return!0;if(null!==S(e))return!0;const t=y(e.trimStart());return v.test(t)||/^(?:new thread started|session started|session start)/i.test(t)||C.test(t)&&j.test(t)}function N(e,n){return{kind:"text",id:crypto.randomUUID(),role:"system",text:e.normalizeSystemText("system","Session started"),sessionResolution:n}}function P(e,n,t){const o="boolean"==typeof t?.pairedOk?t.pairedOk:null,r="string"==typeof t?.pairedPath?t.pairedPath:"",i="string"==typeof t?.pairedOsPath?t.pairedOsPath:"",a="string"==typeof t?.pairedMessage?t.pairedMessage:"",s=e.coerceNotebookMode(t?.notebookMode);(null!==o||r||i||a||null!==s)&&e.setSessionPairing(n,{pairedOk:o,pairedPath:r,pairedOsPath:i,pairedMessage:a,notebookMode:s})}function B(e,n){if(e.length<=n)return e;if(n<=3)return e.slice(0,n);const t=Math.max(0,Math.floor(.6*(n-3))),o=Math.max(0,n-t-3);return`${e.slice(0,t)}...${e.slice(e.length-o)}`}function A(e,n=220){if(null==e)return"";if("string"==typeof e)return B(e,n);if("number"==typeof e||"boolean"==typeof e)return String(e);try{return B(JSON.stringify(e),n)}catch{return""}}function R(e,n=6e3){try{const t=JSON.stringify(e,null,2);return t.length<=n?t:`${t.slice(0,Math.max(0,n-40))}\n... (truncated)`}catch{return""}}function _(e){const n=(e||"").trim();return n?n.split(/[_-]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):""}var O=t(2707),$=t(854),I=t(8095),E=t(3730),L=t(8690),T=t(3018),z=t(5531),U=t(4868),F=t(7723),D=t(8401),W=t(9730),K=t(2012),H=t(9394);const J=u,V=500;function q(e){return e&&e.context?e.context:null}function Y(e){const n="string"==typeof e?.context?.path?e.context.path.trim():"";if(!n)return"";const t=n.toLowerCase();return t.endsWith(".ipynb")||t.endsWith(".py")?n:""}function Z(e,n){const t=e.shell.currentWidget;return Y(t)?t:n&&!n.isDisposed&&Y(n)?n:null}function G(e,n,t=null){const o=(n||"").trim();if(!o)return null;const r=e.shell.currentWidget;if(Y(r)===o)return r;if(t&&!t.isDisposed&&Y(t)===o)return t;const i=e.shell.widgets("main");if(i&&"function"==typeof i.next)for(;;){const e=i.next();if(!e)break;if(Y(e)===o)return e}return null}function X(e){return(e||"").replace(/\r\n/g,"\n").replace(/\r/g,"\n").trim()}function Q(e){return Boolean(e&&e.content&&"activeCell"in e.content)}function ee(e){return!!e&&(e.scrollHeight>e.clientHeight+1||e.scrollWidth>e.clientWidth+1)}function ne(e){return Boolean(e&&e instanceof HTMLElement)}function te(e,n){return e.matches(n)?e:e.querySelector(n)}function oe(e){const n=e?.content?.node,t=e?.node,o=[n,t].filter(ne);if(0===o.length)return null;const r=[".jp-WindowedPanel-outer",".jp-Notebook .jp-WindowedPanel-outer",".jp-NotebookPanel-notebook .jp-WindowedPanel-outer",".jp-FileEditor .cm-scroller",".jp-FileEditor .jp-CodeMirrorEditor",".cm-scroller",".jp-FileEditor"];for(const e of o)for(const n of r){const t=te(e,n);if(ee(t))return t}for(const e of o)if(ee(e))return e;return null}function re(e,n){if(!e||"function"!=typeof e.getSelection||"function"!=typeof e.getOffsetAt)return null;const t=e.getSelection();if(!t||!t.start||!t.end)return null;const o=Number(e.getOffsetAt(t.start)),r=Number(e.getOffsetAt(t.end));if(!Number.isFinite(o)||!Number.isFinite(r))return null;const i=Math.max(0,Math.min(o,r)),a=Math.max(0,Math.max(o,r));if(a<=i||!n)return null;const s=n.slice(i,a);if(!s)return null;const c=Number(t.start.line),d=Number(t.end.line);return{text:s,startLine:Number.isFinite(c)&&Number.isFinite(d)?Math.max(1,Math.min(c,d)+1):null}}function ie(e,n){const t=re(e,n);return t?.text||""}function ae(e){if(!Q(e))return null;const n=e.content,t=n?.activeCell;if(!t)return null;try{const e="function"==typeof t.model?.sharedModel?.getSource?t.model.sharedModel.getSource():"",o=re(t.editor,"string"==typeof e?e:"");if(!o?.text)return null;const r=Number(n?.activeCellIndex);return{kind:"cell",number:Number.isFinite(r)?Math.max(1,Math.floor(r)+1):1,text:o.text}}catch{return null}}function se(e){if(!e||Q(e))return"";try{const n=e.content?.editor;if(!n)return"";const t="function"==typeof n.model?.sharedModel?.getSource?n.model.sharedModel.getSource():"";return ie(n,"string"==typeof t?t:"")}catch{return""}}function ce(e){if(!e||Q(e))return null;try{const n=e.content?.editor;if(!n)return null;const t="function"==typeof n.model?.sharedModel?.getSource?n.model.sharedModel.getSource():"",o=re(n,"string"==typeof t?t:"");return o?.text?{kind:"line",number:o.startLine??1,text:o.text}:null}catch{return null}}function de(e,n){if(Q(e)||"ipynb"===n||"jupytext_py"===n){const n=Number(e?.content?.activeCellIndex);return Number.isFinite(n)?`Cell ${Math.max(1,Math.floor(n)+1)}`:"Cell"}try{const n=e&&!Q(e)?e.content?.editor:null;if(n&&"function"==typeof n.getCursorPosition){const e=n.getCursorPosition(),t=Number(e?.line);if(Number.isFinite(t))return`Line ${Math.max(1,Math.floor(t)+1)}`}}catch{}return"plain_py"===n?"Line":"Selection"}const le="... (truncated)";function pe(e){return e.replace(/\u001b\[[0-?]*[ -/]*[@-~]/g,"")}function ue(e){return"string"==typeof e?e:Array.isArray(e)?e.filter(e=>"string"==typeof e).join(""):""}function xe(e){if(!e||"object"!=typeof e)return"";const n="string"==typeof e.output_type?e.output_type:"";if(!n)return"";if("stream"===n){const n=ue(e.text);if(!n)return"";const t="string"==typeof e.name?e.name:"",o=pe(n).replace(/\s+$/,"");return o?"stderr"===t?`[stderr]\n${o}`:o:""}if("error"===n){const n=pe((Array.isArray(e.traceback)?e.traceback.filter(e=>"string"==typeof e):[]).join("\n")).replace(/\s+$/,"");return n||["string"==typeof e.ename?e.ename:"","string"==typeof e.evalue?e.evalue:""].filter(Boolean).join(": ").trim()}if("execute_result"===n||"display_data"===n||"update_display_data"===n){const t=e.data&&"object"==typeof e.data?e.data:null;if(!t)return"";const o=ue(t["text/plain"]);if(o){const t=pe(o).replace(/\s+$/,"");return t?"execute_result"===n&&"number"==typeof e.execution_count?`Out[${e.execution_count}]:\n${t}`:t:""}const r=Object.keys(t).filter(e=>e&&"text/plain"!==e);return r.length>0?`[non-text output omitted: ${r.slice(0,6).join(", ")}${r.length>6?", ...":""}]`:""}return""}function fe(e){return Boolean(e&&"object"==typeof e&&"error"===e.output_type)}function me(e,n){return function(e,n){return e.split("\n").map(e=>function(e,n,t){if(e.length<=n)return e;if(n<=31)return e.slice(0,n);const o=n-31,r=Math.ceil(o/2),i=Math.floor(o/2);return`${e.slice(0,r)}${t}${e.slice(e.length-i)}`}(e,n," ... [long line truncated] ... ")).join("\n")}(e,n?2e3:8e3)}$.A.registerLanguage("bash",I.A),$.A.registerLanguage("css",E.A),$.A.registerLanguage("diff",L.A),$.A.registerLanguage("javascript",T.A),$.A.registerLanguage("json",z.A),$.A.registerLanguage("markdown",U.A),$.A.registerLanguage("python",F.A),$.A.registerLanguage("sql",D.A),$.A.registerLanguage("typescript",W.A),$.A.registerLanguage("xml",K.A),$.A.registerLanguage("yaml",H.A);let ge=null,he=null;async function be(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 ve(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\"/g,"&quot;").replace(/'/g,"&#39;")}function Ce(e,n){const t=ve(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&&$.A.getLanguage(t))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&&$.A.getLanguage(n)?$.A.highlight(e,{language:n,ignoreIllegals:!0}).value:$.A.highlightAuto(e).value}}catch{o=t}try{return O.default.sanitize(o,{USE_PROFILES:{html:!0}})}catch{return ve(o)}}function je(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 ye=(0,a.memo)(function(e){const[n,t]=(0,a.useState)(!1),o=(0,a.useMemo)(()=>Ce(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}})})]})});ye.displayName="CodeBlock";const we=(0,a.memo)(function(e){const[,n]=(0,a.useState)(0);(0,a.useEffect)(()=>{let e=!1;return async function(){return ge||(he||(he=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 ge=r,r}).catch(e=>{throw he=null,e})),he)}().then(()=>{e||n(e=>e+1)}).catch(()=>{}),()=>{e=!0}},[]);const o=function(e){const n=[];let t=e;for(;t.length>0;){const e=t.indexOf("```");if(-1===e){n.push({kind:"text",text:t});break}e>0&&n.push({kind:"text",text:t.slice(0,e)});const o=t.slice(e+3),r=o.indexOf("```");if(-1===r){n.push({kind:"text",text:t.slice(e)});break}const i=o.slice(0,r);t=o.slice(r+3);let a="",s=i;const c=i.indexOf("\n");if(-1!==c){const e=i.slice(0,c).trim();e.length>0&&e.length<=20&&/^[A-Za-z0-9+#_.-]+$/.test(e)&&(a=e,s=i.slice(c+1))}n.push({kind:"code",lang:a,code:s.replace(/\n$/,"")})}return n.filter(e=>"text"!==e.kind||e.text.length>0)}(e.text);return(0,i.jsx)("div",{className:"jp-CodexChat-text",children:o.map((n,t)=>{if("code"===n.kind)return(0,i.jsx)(ye,{lang:n.lang,code:n.code,canCopy:Boolean(e.canCopyCode)},t);const o=function(e){if(!e)return"";const n=ge;if(!n)return ve(e).replace(/\n/g,"<br />");let t="";try{t=n.parse(e)}catch{return ve(e).replace(/\n/g,"<br />")}try{return O.default.sanitize(t,{USE_PROFILES:{html:!0}})}catch{return ve(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 ke(e){const n=(t=e.code,J(X(t),500));var t;const o=(0,a.useMemo)(()=>Ce(n,""),[n]);return(0,i.jsx)("pre",{className:"jp-CodexCodeBlock jp-CodexChat-selectionCode",children:(0,i.jsx)("code",{className:"hljs",dangerouslySetInnerHTML:{__html:o}})})}function Se(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 Me(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 Ne(e,n,t){return Math.min(t,Math.max(n,e))}function Pe(e){return"number"==typeof e&&Number.isFinite(e)?Math.round(Ne(100-e,0,100)):null}function Be(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 Ae(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 Re(e,n){if("number"!=typeof e||!Number.isFinite(e))return"Unknown";const t=1e3*e-n;return t<=0?"Overdue":Be(t)}function _e(e){return"number"==typeof e&&Number.isFinite(e)?e.toLocaleString():"--"}function Oe(){return"undefined"==typeof window||void 0===window.Notification?"unsupported":window.Notification.permission}function $e(e){if("undefined"==typeof window)return null;try{return window.localStorage.getItem(e)}catch{return null}}function Ie(e,n){if("undefined"!=typeof window)try{window.localStorage.setItem(e,n)}catch{}}function Ee(e){if("undefined"!=typeof window)try{window.localStorage.removeItem(e)}catch{}}we.displayName="MessageText";const Le="jupyterlab-codex:session-threads",Te="jupyterlab-codex:session-threads:event",ze="jupyterlab-codex:delete-all-pending";function Ue(e){if(!e)return{path:""};const n=e.indexOf("\0");return n<0?{path:e}:{path:e.slice(0,n)}}function Fe(){const e=$e(Le);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 De(){const e=Fe(),n=new Set;for(const t of Object.keys(e)){const{path:e}=Ue(t);e&&n.add(e)}return n.size}function We(e,n){const t=e.trim(),o=n||"";if(!o)return"";const r=Fe(),i=r[o];if(i)return i;if(!t)return"";for(const[e,n]of Object.entries(r))if(n&&Ue(e).path===t)return n;return""}function Ke(){Ie(ze,"1")}function He(){Ee(ze)}function Je(){return"1"===$e(ze)}function Ve(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 qe(e){return(e||"").trim()||""}function Ye(e){return qe(e||"")}function Ze(e){return Ye(e)}function Ge(e,n){const t=(n||"").trim();return t?`thread:${t}`:`session:${(e||"").trim()}`}function Xe(e,n){const t=n.notebookMode,o=X(n.text||"");return[e,t,(n.locationLabel||"").trim(),o].join("␟")}function Qe(e,n){return!(!e||!n)&&e===n}function en(e){return Number.isFinite(e)?Math.max(0,Math.floor(e)):0}function nn(e,n){return n<=0?"":e.length<=n?e:e.slice(0,n)}var tn=t(7628);function on(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...e,children:(0,i.jsx)("path",{d:"M12 5v14M5 12h14",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"})})}function rn(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...e,children:(0,i.jsx)("path",{d:"M12 19V5m0 0l-7 7m7-7l7 7",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function an(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...e,children:(0,i.jsx)("path",{d:"M12 5v14m0 0l-7-7m7 7l7-7",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function sn(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 cn(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 dn(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 ln(e){const{active:n=!0,...t}=e;return(0,i.jsxs)("svg",{viewBox:"0 -960 960 960",fill:"none","aria-hidden":"true",focusable:"false",...t,children:[(0,i.jsx)("path",{d:"m384-336 56-57-87-87 87-87-56-57-144 144 144 144Zm192 0 144-144-144-144-56 57 87 87-87 87 56 57ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Z",fill:"currentColor",opacity:n?.92:.74}),!n&&(0,i.jsx)("path",{d:"M250-250 710-710",stroke:"currentColor",strokeWidth:"88",strokeLinecap:"round",opacity:"0.9"})]})}function pn(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 un(e){const{activeBars:n,isConfig:t=!1,...o}=e;return t&&n<=0?(0,i.jsx)(pn,{...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 xn(e){const{level:n,...t}=e,o="number"==typeof n&&Number.isFinite(n)?Math.min(1,Math.max(0,n)):null,r=null==o?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 fn(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 mn(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",...e,children:(0,i.jsx)("path",{d:"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 gn(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 hn(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 bn(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 vn(e){const{open:n,anchorRef:t,popoverRef:o,className:r,role:a="dialog",align:c="left",ariaLabel:d,constrainHeightToViewport:l=!1,viewportMargin:p,onMouseEnter:u,onMouseLeave:x,children:f}=e,[m,g]=s().useState(()=>({left:0,top:0,visibility:"hidden"}));return s().useLayoutEffect(()=>{if(!n)return;const e=()=>{const e=t.current,n=o.current;if(!e||!n)return;const r=Math.max(0,Math.floor(p??8)),i=window.visualViewport?.width??window.innerWidth,a=window.visualViewport?.height??window.innerHeight,s=window.visualViewport?.offsetLeft??0,d=window.visualViewport?.offsetTop??0,u=e.closest(".jp-CodexChat-message");let x=0;if(u&&u instanceof HTMLElement){const e=window.getComputedStyle(u),n=Number.parseFloat(e.marginTop)||0,t=Number.parseFloat(e.marginBottom)||0;x=Math.max(0,Math.max(n,t))}const f=r+Math.round(x),m=e.getBoundingClientRect(),h=n.getBoundingClientRect(),b=Math.max(80,Math.floor(a-2*f)),v=l?Math.min(h.height,b):h.height;let C="right"===c?m.right-h.width:m.left;C=Cn(C,s+r,Math.max(s+r,s+i-h.width-r));let j=m.top-10-v;const y=m.bottom+10,w=d+f,k=d+a;j<w&&y+v+f<=k&&(j=y),j=Cn(j,w,Math.max(w,k-v-f)),g({left:Math.round(C),top:Math.round(j),...l?{maxHeight:`${b}px`,overflowY:"auto",overflowX:"auto"}:{},visibility:"visible"})},r=window.requestAnimationFrame(e),i=()=>e(),a=()=>e();return window.addEventListener("resize",i),window.addEventListener("scroll",a,!0),()=>{window.cancelAnimationFrame(r),window.removeEventListener("resize",i),window.removeEventListener("scroll",a,!0)}},[n,t,o,c,l,p]),n?(0,tn.createPortal)((0,i.jsx)("div",{ref:o,className:"jp-CodexMenu jp-CodexMenuPortal"+(r?` ${r}`:""),role:a,"aria-label":d,style:m,onMouseEnter:u,onMouseLeave:x,children:f}),document.body):null}function Cn(e,n,t){return Math.min(t,Math.max(n,e))}class jn extends o.ReactWidget{constructor(e,n){super(),this._app=e,this._notebooks=n,this.addClass("jp-CodexPanel")}render(){return(0,i.jsx)(ot,{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 yn(e){const n=e.messages[0];return n&&"text"===n.kind&&"system"===n.role&&M(n.text)&&(n.sessionResolution="client"),e}const wn=[],kn="medium",Sn=[{label:"Default permission",value:"workspace-write"},{label:"Full access",value:"danger-full-access"},{label:"Read only",value:"read-only"}];function Mn(){const e=$e(An)??"";return e&&"__config__"!==e&&"__custom__"!==e?e:"__config__"}function Nn(){return function(){try{const e=$e(_n)??"";if("__config__"===e)return"__config__";return e.trim()||"__config__"}catch{return"__config__"}}()}function Pn(){return function(){const e=$e(On)??"";return Vn(e)?e:Sn[0].value}()}const Bn="jupyterlab-codex:auto-save-before-send",An="jupyterlab-codex:model",Rn="jupyterlab-codex:command-path",_n="jupyterlab-codex:reasoning-effort",On="jupyterlab-codex:sandbox-mode",$n="jupyterlab-codex:settings-open",In="jupyterlab-codex:notify-on-done",En="jupyterlab-codex:notify-on-done-min-seconds",Ln="jupyterlab-codex:include-active-cell",Tn="jupyterlab-codex:include-active-cell-output",zn="jupyterlab-codex:selection-previews";function Un(e,n){const t=n.find(n=>n.value===e);return t?t.label:Se(e,32)}function Fn(e){return"string"==typeof e?e.trim().toLowerCase():""}function Dn(e){return"string"==typeof e?e.trim():""}function Wn(e){return"string"==typeof e?Dn(e):e&&"object"==typeof e&&"reasoningEffort"in e?Dn(e.reasoningEffort):""}function Kn(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 Hn(e){const n=e.find(e=>Fn(e.value)===kn);return n?n.value:e[0]?.value??kn}function Jn(e,n){const t=n.find(n=>n.value===e);if(t)return t.label;return Dn(e)||"Reasoning"}function Vn(e){return Sn.some(n=>n.value===e)}function qn(e){return"ipynb"===e||"jupytext_py"===e||"plain_py"===e||"unsupported"===e?e:null}function Yn(e){const n=(e||"").trim().toLowerCase();return n.endsWith(".ipynb")?"ipynb":n.endsWith(".py")?"plain_py":"unsupported"}function Zn(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.floor(4294967296*Math.random()).toString(16)}`}function Gn(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 Xn(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 Qn(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 et(e,n,t){return yn(Ve(e,n,t,{readStoredThreadId:We,readDefaultModelOption:Mn,readDefaultReasoningEffortOption:Nn,readDefaultSandboxModeOption:Pn,normalizeSystemText:tt}))}function nt(e,n,t){const o=function(e,n,t,o){return Ve(e,`Session started (${(new Date).toLocaleTimeString()})`,{threadId:t,reuseStoredThread:!1,sessionKey:n},o)}(e,n,t,{readStoredThreadId:We,readDefaultModelOption:Mn,readDefaultReasoningEffortOption:Nn,readDefaultSandboxModeOption:Pn,normalizeSystemText:tt});return yn(o)}function tt(e,n){return"system"!==e?n:S(n)??n}function ot(e){const[n,t]=(0,a.useState)(new Map),r=(0,a.useRef)(new Map),[s,p]=(0,a.useState)(""),x=(0,a.useRef)(""),[f,m]=(0,a.useState)(""),g=(0,a.useRef)(""),[b,v]=(0,a.useState)({model:null,reasoningEffort:null}),[C,j]=(0,a.useState)(()=>wn),[y,w]=(0,a.useState)(()=>Mn()),[S,O]=(0,a.useState)(()=>Nn()),[$,I]=(0,a.useState)(()=>Pn()),[E,L]=(0,a.useState)(()=>$e(Rn)??""),[T,z]=(0,a.useState)(()=>"false"!==($e(Bn)??"true")),[U,F]=(0,a.useState)(()=>"false"!==($e(Ln)??"true")),[D,W]=(0,a.useState)(()=>"false"!==($e(Tn)??"true")),[K,H]=(0,a.useState)(!1),[ee,ne]=(0,a.useState)(()=>"true"===($e(In)??"true")),[te,re]=(0,a.useState)(()=>function(){const e=$e(En);if(null==e)return 30;const n=Number(e);return Number.isFinite(n)?Math.max(0,Math.trunc(n)):0}()),[pe,ue]=(0,a.useState)(()=>"true"===($e($n)??"false")),[ge,he]=(0,a.useState)(""),[ve,Ce]=(0,a.useState)([]),ye=(0,a.useRef)([]),ze=(0,a.useRef)(""),Fe=(0,a.useRef)(new Map),{socketRef:We,socketConnected:Ve,isReconnecting:tn,reconnect:pn}=function(e={}){const n=(0,a.useRef)(e);n.current=e;const t=(0,a.useRef)(null),o=(0,a.useRef)(null),[r,i]=(0,a.useState)(!1),[s,l]=(0,a.useState)(!1),[p,u]=(0,a.useState)(0);(0,a.useEffect)(()=>{l(!0);const e=c.ServerConnection.makeSettings(),r=d.URLExt.join(e.wsUrl,"codex","ws");let a,s=!1,p=!1;try{a=new WebSocket(r)}catch{return i(!1),void l(!1)}t.current=a;const x=()=>{s||p||(p=!0,l(!0),o.current=window.setTimeout(()=>{o.current=null,u(e=>e+1)},800))};return a.onopen=()=>{i(!0),l(!1),n.current.onOpen?.()},a.onclose=()=>{i(!1),n.current.onClose?.(),x()},a.onerror=()=>{i(!1),n.current.onError?.(),x()},a.onmessage=e=>{n.current.onMessage?.(e.data)},()=>{s=!0,null!==o.current&&(window.clearTimeout(o.current),o.current=null),a.onopen=null,a.onclose=null,a.onerror=null,a.onmessage=null,a.close(),t.current=null}},[p]);const x=(0,a.useCallback)(()=>{s||u(e=>e+1)},[s]);return{socketRef:t,socketConnected:r,isReconnecting:s,reconnect:x}}({onOpen:function(){Zo(),Je()&&Io();const n=Z(e.app,St.current);n&&(St.current=n);const t=x.current||Y(n);if(!t)return;const o=Ze(t);Oo(No(t,o),t,o)},onClose:function(){Zo(),Ct.current=new Map,pt(!1),Yt.current=""},onMessage:function(e){const n=Mt.current;n.push(e),n.length>1200&&n.splice(0,n.length-1200),Yo()}}),[Cn,jn]=(0,a.useState)(!0),[yn,kn]=(0,a.useState)(!1),[Dn,ot]=(0,a.useState)(!1),[rt,it]=(0,a.useState)(!1),[at,st]=(0,a.useState)(!1),[ct,dt]=(0,a.useState)(!1),[lt,pt]=(0,a.useState)(!1),[ut,xt]=(0,a.useState)(!1),[ft,mt]=(0,a.useState)(null),gt=(0,a.useRef)(function(){const e=$e(zn);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=Xn(e);n&&r.push(n)}r.length<=0||t.set(n,r.slice(-10))}return t}catch{return new Map}}()),ht=(0,a.useRef)(new Map),[bt,vt]=(0,a.useState)(null),Ct=(0,a.useRef)(new Map),jt=(0,a.useRef)(new Map),yt=(0,a.useRef)(Zn()),wt=(0,a.useRef)(0),kt=(0,a.useRef)(new Set),St=(0,a.useRef)(null),Mt=(0,a.useRef)([]),Nt=(0,a.useRef)(null),Pt=(0,a.useRef)(null),Bt=(0,a.useRef)(new Map),At=(0,a.useRef)(ee),Rt=(0,a.useRef)(te),_t=(0,a.useRef)(null),Ot=(0,a.useRef)(null),$t=(0,a.useRef)(null),It=(0,a.useRef)(null),Et=(0,a.useRef)(null),Lt=(0,a.useRef)(null),Tt=(0,a.useRef)(null),zt=(0,a.useRef)(null),Ut=(0,a.useRef)(null),Ft=(0,a.useRef)(null),Dt=(0,a.useRef)(null),Wt=(0,a.useRef)(null),Kt=(0,a.useRef)(null),Ht=(0,a.useRef)(null),Jt=(0,a.useRef)(null),Vt=(0,a.useRef)(null),qt=(0,a.useRef)(null),Yt=(0,a.useRef)(""),Zt=(0,a.useRef)(null),Gt=(0,a.useRef)(null),Xt=(0,a.useRef)(null),Qt=(0,a.useRef)(null),eo=(0,a.useRef)(null),no=(0,a.useRef)(null),to=(0,a.useRef)(null),[oo,ro]=(0,a.useState)(!1),io=(0,a.useRef)(null),ao=(0,a.useMemo)(()=>De(),[n]),so="__config__"===y?"":y,co=b.model,lo=b.reasoningEffort,po="__config__"===y?co||"":y,uo=(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=Wn(e),t=Fn(n);t&&!a.has(t)&&a.set(t,{value:t,label:n||t})}return Array.from(a.values())}(b.availableModels,po),[b.availableModels,po]);function xo(e){const n=g.current||"";n&&function(e,n){if(!e)return;const t=new Map(Fe.current);n?t.set(e,n):t.delete(e),Fe.current=t}(n,e)}function fo(){if(!g.current)return he(""),void(ze.current="");xo(""),he(""),ze.current=""}function mo(){mt(null),eo.current=null}function go(){null!==Xt.current&&(window.clearTimeout(Xt.current),Xt.current=null)}function ho(){null!==Qt.current&&(window.clearTimeout(Qt.current),Qt.current=null)}function bo(){go(),xt(!!sr)}function vo(){go(),Xt.current=window.setTimeout(()=>{xt(!1),Xt.current=null},90)}function Co(){ho(),dt(!!ei)}function jo(){ho(),Qt.current=window.setTimeout(()=>{dt(!1),Qt.current=null},90)}function yo(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));gt.current=n,function(e){const n={},t=Array.from(e.entries()).slice(-80);for(const[e,o]of t){if(!e||!Array.isArray(o)||o.length<=0)continue;const t=o.filter(e=>e&&"string"==typeof e.contentHash&&e.contentHash).slice(-10).map(e=>e.preview?{contentHash:e.contentHash,preview:e.preview}:{contentHash:e.contentHash});t.length>0&&(n[e]=t)}Ie(zn,JSON.stringify(n))}(n)}function wo(e,n){const t=(e||"").trim(),o=(n||"").trim();if(!t||!o||t===o)return;const r=gt.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)),yo(a)}function ko(e){r.current=e,t(e)}function So(e){return e.length<=100?e:e.slice(e.length-100)}function Mo(e){t(n=>{const t=e(n);return r.current=t,t})}function No(e,n){const t=e||"",o=n||Ze(t),i=r.current.get(o);if(i)return i;const a={...et(t,"Session started",{sessionKey:o}),selectedModelOption:y,selectedReasoningEffort:S,selectedSandboxMode:$},s=new Map(r.current);return s.set(o,a),jt.current.set(t,o),ko(s),a}function Po(e,n){const t=e||g.current||"";t&&Mo(e=>{const o=new Map(e),r=o.get(t)??et("","Session started",{sessionKey:t}),i=n.selectedModelOption??r.selectedModelOption,a=n.selectedReasoningEffort??r.selectedReasoningEffort,s=n.selectedSandboxMode??r.selectedSandboxMode,c=n.effectiveSandboxMode??r.effectiveSandboxMode;return i===r.selectedModelOption&&a===r.selectedReasoningEffort&&s===r.selectedSandboxMode&&c===r.effectiveSandboxMode?e:(o.set(t,{...r,selectedModelOption:i,selectedReasoningEffort:a,selectedSandboxMode:s,effectiveSandboxMode:c}),o)})}function Bo(e){w(e),Po(g.current||"",{selectedModelOption:e})}function Ao(e){O(e),Po(g.current||"",{selectedReasoningEffort:e})}function Ro(e){const n=We.current;if(!n||n.readyState!==WebSocket.OPEN)return!1;try{n.send(e)}catch{return!1}return!0}function _o(e,n,t,o){if(!At.current)return;if("granted"!==Oe()||"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*Rt.current;if(a>0&&(null===i||i<a))return;const s=Se(Ue(e).path||n||x.current||"current notebook",120),c=null===i?"":` (${function(e){const n=Math.round(Math.max(0,e)/1e3),t=Math.floor(n/60);return 0===t?`${n}s`:`${t}m ${n%60}s`}(i)} elapsed)`,d=t?`Run cancelled in ${s}${c}`:null===o||0===o?`Run completed in ${s}${c}`:`Run failed (exit ${o}) in ${s}${c}`;try{const n=new window.Notification("Codex run finished",{body:d,tag:e?`codex-done-${e}`:void 0});window.setTimeout(()=>n.close(),12e3)}catch{}}function Oo(e,n,t,o){if(!We.current||We.current.readyState!==WebSocket.OPEN)return;const r=E.trim();Ro(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 $o(e,n){if(!e)return;const t=function(e){if("string"!=typeof e)return null;const n=e.trim().toLowerCase().replace(/_/g,"-");return Vn(n)?n:null}(n);t&&Po(e,{effectiveSandboxMode:t})}function Io(){return!(!We.current||We.current.readyState!==WebSocket.OPEN)&&!!Ro(JSON.stringify({type:"delete_all_sessions"}))}function Eo(e,n,t){if(!e)return;const o=e.trim(),r="running"===n,i="ready"===n;let a=!1;const s=Date.now();Mo(c=>{const d=new Map(c),l=d.get(o)??et("","Session started",{sessionKey:o}),p=d.get(o)??l;let u=p.messages,x=p.runStartedAt,f=p.activeRunId;const m="running"===p.runState,g=Boolean(f&&f.trim());if(r&&!t&&m&&g)return c;if(i&&m&&g&&(!t||t!==f))return c;if(r&&(m||(x=s),t&&(f=t)),i&&m){const e=x;if("number"==typeof e&&Number.isFinite(e)){const n=Math.max(0,s-e);u=[...u,{kind:"run-divider",id:crypto.randomUUID(),elapsedMs:n}]}x=null,f=null,a=!0}else i&&(f=null);const h=p.runState===n?p.progress:"",b=p.runState===n?p.progressKind:"";return d.set(e,{...p,messages:So(u),runState:n,activeRunId:f,runStartedAt:x,progress:h,progressKind:b}),d}),r&&Yt.current===o?pt(!0):i&&a&&Yt.current===o&&(Yt.current="",pt(!1))}function Lo(e,n,t=""){const o=e||g.current||"";if(!o)return;const r=n?Se(n,260):"",i=r?t:"";Mo(e=>{const n=new Map(e),t=n.get(o)??et("","Session started",{sessionKey:o});return t.progress===r&&t.progressKind===i?e:(n.set(o,{...t,progress:r,progressKind:i}),n)})}function To(e,n){const t=e||g.current||"";t&&Mo(e=>{const o=new Map(e),r=o.get(t)??et("","Session started",{sessionKey:t}),i={id:crypto.randomUUID(),ts:Date.now(),...n},a=e=>{const n=(e||"").trim();return n?n.split("\n")[0].trim():""},s=(e,n)=>{const t=(e=>{const n=(e||"").trim();return n?n.replace(/\s+(started|completed)\s*$/i,"").trim():""})(e);return`${t}::${(n||"").trim().split("\n")[0].trim()}`},c=r.messages;if("reasoning"===i.category){const n=c[c.length-1];if(n&&"activity"===n.kind){const t=n.item;if(t.category===i.category&&t.phase===i.phase&&t.title===i.title&&t.detail===i.detail)return e}}if("command"===i.category&&"completed"===i.phase){const e=a(i.detail);if(e)for(let n=c.length-1;n>=0;n-=1){const s=c[n];if("activity"!==s.kind)continue;const d=s.item;if("command"!==d.category||"started"!==d.phase)continue;if(a(d.detail)!==e)continue;const l={...d,phase:"completed",title:i.title,detail:i.detail,raw:i.raw},p=[...c.slice(0,n),{...s,item:l},...c.slice(n+1)];return o.set(t,{...r,messages:So(p)}),o}}if("completed"===i.phase){const e=s(i.title,i.detail);if(e)for(let n=c.length-1;n>=0;n-=1){const a=c[n];if("activity"!==a.kind)continue;const d=a.item;if("started"!==d.phase)continue;if(s(d.title,d.detail)!==e)continue;const l={...d,phase:"completed",title:i.title,detail:i.detail,raw:i.raw},p=[...c.slice(0,n),{...a,item:l},...c.slice(n+1)];return o.set(t,{...r,messages:So(p)}),o}}const d=[...c,{kind:"activity",id:i.id,item:i}];return o.set(t,{...r,messages:So(d)}),o})}function zo(e,n){const t=e||g.current||"";t&&Mo(e=>{const o=new Map(e),r=o.get(t)??et("","Session started",{sessionKey:t});return o.set(t,{...r,...n,notebookMode:n.notebookMode??r.notebookMode}),o})}function Uo(e,n){const t="resume"===(o=n)||"fallback"===o?o:null;var o;if(!t)return;const r=e||g.current||"";r&&Mo(e=>{const n=new Map(e),o=n.get(r)??et("","Session started",{sessionKey:r});return o.conversationMode===t?e:(n.set(r,{...o,conversationMode:t}),n)})}function Fo(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)||qe(i)}if(s){const e=t.get(s);if(e)return e}return r}({message:e,runToSessionKey:Ct.current,activeSessionKeyByPath:jt.current,currentSessionKey:g.current||""})}function Do(e,n,t){if(!t)return;const o=e||g.current||"";if(!o)return;const r=tt(n,t);Mo(e=>{const t=new Map(e),i=t.get(o)??et("","Session started",{sessionKey:o}),a=[...i.messages,{kind:"text",id:crypto.randomUUID(),role:n,text:r}];return t.set(o,{...i,messages:So(a)}),t})}function Wo(){Ot.current?.scrollIntoView({block:"end"})}function Ko(e){const n=Ct.current,t=new Map(n);for(const[o,r]of n)r===e&&t.delete(o);Ct.current=t}async function Ho(n){const{path:t}=Ue(n);if(!t)return;const o=Y(Z(e.app,St.current));if("running"===r.current.get(n)?.runState&&o!==t)return void kt.current.add(n);const i=G(e.app,t,St.current);if(!i)return void kt.current.add(n);const a=q(i);if(!a||"function"!=typeof a.revert)return void kt.current.add(n);if(St.current=i,a.model.dirty)return kt.current.add(n),void Do(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),Do(n,"system","Document refreshed due to file changes."),kt.current.delete(n)}catch(e){Do(n,"system",`Failed to refresh document: ${String(e)}`),kt.current.add(n)}}function Jo(e){try{!function(e,n){const t=function(e){if("string"!=typeof e&&(null===e||"object"!=typeof e))return null;const n="string"==typeof e?function(e){try{return JSON.parse(e)}catch{return null}}(e):e;if(null===n||"object"!=typeof n)return null;const t=n,o="string"==typeof t.type?t.type:"";if(!o)return null;switch(o){case"cli_defaults":const e={type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0};return Object.prototype.hasOwnProperty.call(t,"model")&&(e.model="string"==typeof t.model||null===t.model?t.model:null),Object.prototype.hasOwnProperty.call(t,"reasoningEffort")&&(e.reasoningEffort="string"==typeof t.reasoningEffort||null===t.reasoningEffort?t.reasoningEffort:null),Object.prototype.hasOwnProperty.call(t,"availableModels")&&(e.availableModels=l(Array.isArray(t.availableModels)?t.availableModels:[])),e;case"rate_limits":return{type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0,snapshot:t.snapshot??null};case"delete_all_sessions":return"boolean"==typeof t.ok&&Number.isFinite(Number(t.deletedCount))&&Number.isFinite(Number(t.failedCount))&&"string"==typeof t.message?{type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0,ok:t.ok,deletedCount:Number(t.deletedCount),failedCount:Number(t.failedCount),message:t.message}:null;case"status":return{type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0,state:"running"===t.state?"running":"ready",runId:"string"==typeof t.runId?t.runId:void 0,sessionId:"string"==typeof t.sessionId?t.sessionId:void 0,sessionContextKey:"string"==typeof t.sessionContextKey?t.sessionContextKey:void 0,notebookPath:"string"==typeof t.notebookPath?t.notebookPath:void 0,runMode:"fallback"===t.runMode?"fallback":"resume"===t.runMode?"resume":void 0,pairedOk:"boolean"==typeof t.pairedOk?t.pairedOk:void 0,pairedPath:"string"==typeof t.pairedPath?t.pairedPath:void 0,pairedOsPath:"string"==typeof t.pairedOsPath?t.pairedOsPath:void 0,pairedMessage:"string"==typeof t.pairedMessage?t.pairedMessage:void 0,notebookMode:"string"==typeof t.notebookMode?t.notebookMode:void 0,sessionResolution:"string"==typeof t.sessionResolution?t.sessionResolution:void 0,sessionResolutionNotice:"string"==typeof t.sessionResolutionNotice?t.sessionResolutionNotice:void 0,history:Array.isArray(t.history)?t.history:void 0,effectiveSandbox:"string"==typeof t.effectiveSandbox?t.effectiveSandbox:void 0};case"output":return"string"!=typeof t.runId||"string"!=typeof t.sessionId||"string"!=typeof t.notebookPath||"string"!=typeof t.text?null:{type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0,runId:t.runId,sessionId:t.sessionId,sessionContextKey:"string"==typeof t.sessionContextKey?t.sessionContextKey:void 0,notebookPath:t.notebookPath,role:"string"==typeof t.role?t.role:"assistant",text:t.text};case"event":return"string"!=typeof t.runId||"string"!=typeof t.sessionId||"string"!=typeof t.notebookPath?null:{type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0,runId:t.runId,sessionId:t.sessionId,sessionContextKey:"string"==typeof t.sessionContextKey?t.sessionContextKey:void 0,notebookPath:t.notebookPath,payload:t.payload};case"done":if("string"!=typeof t.runId||"string"!=typeof t.sessionId||"string"!=typeof t.notebookPath)return null;let n=null;if(null===t.exitCode)n=null;else if("number"==typeof t.exitCode&&Number.isFinite(t.exitCode))n=t.exitCode;else if("string"==typeof t.exitCode){const e=Number(t.exitCode.trim());n=Number.isFinite(e)?e:null}return{type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0,runId:t.runId,sessionId:t.sessionId,sessionContextKey:"string"==typeof t.sessionContextKey?t.sessionContextKey:void 0,notebookPath:t.notebookPath,exitCode:n,cancelled:"boolean"==typeof t.cancelled&&t.cancelled,fileChanged:"boolean"==typeof t.fileChanged&&t.fileChanged,runMode:"fallback"===t.runMode?"fallback":"resume"===t.runMode?"resume":void 0,pairedOk:"boolean"==typeof t.pairedOk?t.pairedOk:void 0,pairedPath:"string"==typeof t.pairedPath?t.pairedPath:void 0,pairedOsPath:"string"==typeof t.pairedOsPath?t.pairedOsPath:void 0,pairedMessage:"string"==typeof t.pairedMessage?t.pairedMessage:void 0,notebookMode:"string"==typeof t.notebookMode?t.notebookMode:void 0};case"error":return"string"!=typeof t.message?null:{type:o,protocolVersion:"string"==typeof t.protocolVersion?t.protocolVersion:void 0,runId:"string"==typeof t.runId?t.runId:void 0,sessionId:"string"==typeof t.sessionId?t.sessionId:void 0,sessionContextKey:"string"==typeof t.sessionContextKey?t.sessionContextKey:void 0,notebookPath:"string"==typeof t.notebookPath?t.notebookPath:void 0,message:t.message,runMode:"fallback"===t.runMode?"fallback":"resume"===t.runMode?"resume":void 0,suggestedCommandPath:"string"==typeof t.suggestedCommandPath?t.suggestedCommandPath:void 0,pairedOk:"boolean"==typeof t.pairedOk?t.pairedOk:void 0,pairedPath:"string"==typeof t.pairedPath?t.pairedPath:void 0,pairedOsPath:"string"==typeof t.pairedOsPath?t.pairedOsPath:void 0,pairedMessage:"string"==typeof t.pairedMessage?t.pairedMessage:void 0,notebookMode:"string"==typeof t.notebookMode?t.notebookMode:void 0}}return null}(e);if(null===t)return void n.appendMessage(n.getCurrentSessionKey()||"","system",`Invalid message: ${String(e)}`);const o=t,r="string"==typeof o.runId?o.runId:"",i=n.resolveMessageSessionKey(t);if("cli_defaults"===t.type){const e=Object.prototype.hasOwnProperty.call(t,"model"),o=Object.prototype.hasOwnProperty.call(t,"reasoningEffort"),r=Object.prototype.hasOwnProperty.call(t,"availableModels"),i=e&&"string"==typeof t.model&&t.model.trim()?t.model.trim():null,a=o?n.coerceReasoningEffort("string"==typeof t.reasoningEffort?t.reasoningEffort:""):null,s=r?n.coerceModelCatalog(t.availableModels):void 0;return void n.setCliDefaults(n=>({model:e?i:n.model,reasoningEffort:o?a:n.reasoningEffort,availableModels:r?s:n.availableModels}))}if("rate_limits"!==t.type){if("delete_all_sessions"===t.type){const e=!0===t.ok;e&&n.clearDeleteAllPending();const o=Number.isFinite(Number(t.deletedCount))?Number(t.deletedCount):0,r=Number.isFinite(Number(t.failedCount))?Number(t.failedCount):0,i=1===o?"Deleted 1 conversation":`Deleted ${o} conversations`,a=n.getCurrentSessionKey(),s=e?`${i} from the server.`:`${i} from the server. Failed to delete ${r} conversations. ${"string"==typeof t.message?t.message:"Server error"}. Retry after reconnect.`;return a&&n.appendMessage(a,"system",s),void(e||n.hasDeleteAllPending()||n.markDeleteAllPending())}if("status"!==t.type&&"error"!==t.type&&"done"!==t.type||!function(e,n,t,o,r={}){if("status"===e.type){t&&(n.syncEffectiveSandboxFromStatus(t,e.effectiveSandbox),n.setSessionConversationMode(t,e.runMode));const r="string"==typeof e.sessionResolutionNotice?e.sessionResolutionNotice.trim():"";return t&&r&&!o&&n.appendMessage(t,"system",r),function(e,n,t){const o="string"==typeof t.sessionId&&t.sessionId.trim()?t.sessionId.trim():"",r=e.coerceSessionHistory(t.history);n&&(o||r.length>0)&&e.updateSessions(i=>{const a=new Map(i).get(n)??e.createSession("","Session started",{sessionKey:n}),s=o||a.threadId;let c=a.messages;if(!a.messages.some(e=>"text"===e.kind&&("user"===e.role||"assistant"===e.role))&&r.length>0){const n=a.messages.find(e=>"text"===e.kind&&"system"===e.role),o=n&&e.isSessionStartNotice(n.text||"",t.sessionResolution),i=k(t.sessionResolution)?N(e,t.sessionResolution):o?n:n??N(e,t.sessionResolution),d=e.getStoredSelectionPreviews().get(s)??[];let l=0;c=[i,...r.map(n=>{const t=e.normalizeSystemText(n.role,n.content);let o,r;if("user"===n.role&&(o=n.selectionPreview,r=n.cellOutputPreview,!o&&!r)){const t=e.hashSelectionPreviewContent(n.content);for(;l<d.length;){const e=d[l];if(l+=1,!e||e.contentHash!==t)continue;const n=h(e.preview);o=n.selectionPreview,r=n.cellOutputPreview;break}}return{kind:"text",id:crypto.randomUUID(),role:n.role,text:t,selectionPreview:o,cellOutputPreview:r}})]}return s===a.threadId&&c===a.messages?i:new Map(i).set(n,{...a,threadId:s,messages:c})})}(n,t,e),t&&P(n,t,e),"running"===e.state&&t?(n.setSessionRunState(t,"running",o||null),n.setSessionProgress(t,"","")):"ready"===e.state&&t&&o&&(n.setSessionRunState(t,"ready",o),n.setSessionProgress(t,"",""),n.runToSessionKeyRef.current.delete(o)),!0}if("error"===e.type){t&&n.setSessionConversationMode(t,e.runMode);const r="string"==typeof e.suggestedCommandPath?e.suggestedCommandPath.trim():"";return r&&!n.getCommandPath()&&(n.setCommandPath(r),n.appendMessage(t,"system",`Suggested command path has been saved to settings: ${r}`)),n.appendMessage(t,"system",e.message||"Unknown error"),t&&P(n,t,e),t&&(n.setSessionRunState(t,"ready",o||null),n.setSessionProgress(t,"","")),o&&n.runToSessionKeyRef.current.delete(o),!0}if("done"===e.type){t&&n.setSessionConversationMode(t,e.runMode),t&&P(n,t,e);const i="number"==typeof e.exitCode?e.exitCode:null,a=Boolean(e.cancelled);if(Boolean(e.fileChanged)&&t&&n.refreshNotebook(t),!a&&null!==i&&0!==i){const e="string"==typeof r.error&&r.error.trim()||"string"==typeof r.message&&r.message.trim()||"",o=e?u(e,600):"",a=o?`Codex run failed (exit ${i}): ${o}`:`Codex run failed (exit ${i}). Check the logs above for the underlying error.`;n.appendMessage(t,"system",a)}return n.notifyRunDone(t,"string"==typeof e.notebookPath?e.notebookPath:"string"==typeof e.path?e.path:"",a,i),t&&(n.setSessionRunState(t,"ready",o||null),n.setSessionProgress(t,"","")),o&&n.runToSessionKeyRef.current.delete(o),!0}return!1}(t,n,i,r,o)){if("output"===t.type){const e="user"===t.role||"assistant"===t.role||"system"===t.role?t.role:"assistant";return void n.appendMessage(i,e,t.text||"")}if("event"===t.type){const e=t.payload;if(function(e){if(!e||"object"!=typeof e)return!1;const n="string"==typeof e.type&&e.type||"string"==typeof e.event&&e.event||"";return"thread.started"===n||"turn.started"===n||"turn.completed"===n}(e))return;const o=function(e){if(!e||"object"!=typeof e)return{progress:"Event",progressKind:"",activity:{category:"event",phase:"",title:"Event",detail:"",raw:R(e)}};const n="string"==typeof e.type&&e.type||"string"==typeof e.event&&e.event||"event",t=R(e);if(("item.completed"===n||"item.started"===n)&&e.item&&"object"==typeof e.item){const o=e.item,r="string"==typeof o.type?o.type:"",i="string"==typeof o.tool_name&&o.tool_name||"string"==typeof o.tool&&o.tool||"string"==typeof o.name&&o.name||"",a="string"==typeof o.path&&o.path||"string"==typeof o.filename&&o.filename||"",s="item.started"===n?"started":"item.completed"===n?"completed":"";let c="event",d="";"reasoning"===r?(c="reasoning",d="reasoning"):"command_execution"===r?c="command":"file_change"===r?c="file":i&&(c="tool");let l="",p="";if("command_execution"===r){const e=o.command??o.cmd??o.shell_command??o.argv??o.args??o.commandLine??o.command_line;let n="";n="string"==typeof e?e:Array.isArray(e)&&e.length>0&&e.every(e=>"string"==typeof e)?e.join(" "):A(e);const t="number"==typeof o.exit_code?o.exit_code:"number"==typeof o.exitCode?o.exitCode:null;l="started"===s?"Running command":"completed"===s?"Command finished":"Command",p=n||"",null!=t&&(p=p?`${p}\n(exit ${t})`:`(exit ${t})`)}else if("file_change"===r){const e=function(e){if(!e||"object"!=typeof e)return[];const n=new Set,t=[],o=e=>{if("string"!=typeof e)return;const o=e.trim();o&&!n.has(o)&&(n.add(o),t.push(o))},r=["path","filename","filePath","file_path","targetPath","target_path","newPath","new_path","oldPath","old_path","sourcePath","source_path","destinationPath","destination_path"];for(const n of r)o(e[n]);const i=["file","target","source","destination"];for(const n of i){const t=e[n];t&&"object"==typeof t&&(o(t.path),o(t.filename),o(t.filePath),o(t.file_path))}const a=["paths","files","changes","edits"];for(const n of a){const t=e[n];if(Array.isArray(t))for(const e of t)"string"!=typeof e?e&&"object"==typeof e&&(o(e.path),o(e.filename),o(e.filePath),o(e.file_path),o(e.targetPath),o(e.target_path),o(e.newPath),o(e.new_path),o(e.oldPath),o(e.old_path)):o(e)}if(0===t.length){const n=[e];let t=0;for(;n.length>0&&t<300;){const e=n.shift();if(t+=1,e&&"object"==typeof e)if(Array.isArray(e))for(const t of e)n.push(t);else for(const[t,r]of Object.entries(e)){const e=t.trim().toLowerCase();"string"==typeof r&&("filename"===e||e.endsWith("path")||e.endsWith("_path")||e.endsWith("filepath")||e.endsWith("file_path"))&&o(r),r&&"object"==typeof r&&n.push(r)}}}return t}(o),n=function(e){const n=(e||"").trim();if(!n)return"";const t=n.replace(/\\/g,"/"),o=t.split("/").filter(Boolean);return o[o.length-1]||t}(e[0]||a||""),t="started"===s?"Update file":"completed"===s?"File updated":"File change";l=n?`${t}: ${n}`:t,p=e.length>0?e.join("\n"):a||""}else if("reasoning"===r)l="started"===s?"Reasoning":"completed"===s?"Reasoning step":"Reasoning",p=i?`(${i})`:"";else{const e=_(r)||_(n)||"Event";l="started"===s?`${e} started`:"completed"===s?`${e} completed`:e;const t=[];i&&t.push(`tool: ${i}`),a&&t.push(`path: ${a}`),p=t.join("\n")}l||(l=_(r)||"Event"),p=B(p,1400);const u=[];if(l&&u.push(l),p){const e=p.replace(/\s+/g," ").trim();u.push(B(e,200))}return{progress:u.join(": ")||_(n)||"Event",progressKind:d,activity:{category:c,phase:s,title:l,detail:p,raw:t}}}const o="string"==typeof e.name&&e.name||"string"==typeof e.label&&e.label||"string"==typeof e.tool_name&&e.tool_name||"string"==typeof e.tool&&e.tool||"";if(o&&o!==n)return{progress:`${_(n)||n}: ${B(o,120)}`,progressKind:"",activity:{category:"event",phase:"",title:_(n)||n,detail:o,raw:t}};const r=A(e.command);if(r)return{progress:`${_(n)||n}: ${r}`,progressKind:"",activity:{category:"event",phase:"",title:_(n)||n,detail:r,raw:t}};const i=A(e.path);return i?{progress:`${_(n)||n}: ${i}`,progressKind:"",activity:{category:"event",phase:"",title:_(n)||n,detail:i,raw:t}}:{progress:_(n)||n,progressKind:"",activity:{category:"event",phase:"",title:_(n)||n,detail:"",raw:t}}}(e);"reasoning"!==o.activity.category&&n.appendActivityItem(i,o.activity),n.setSessionProgress(i,o.progress,o.progressKind)}}}else n.setRateLimits(n.coerceRateLimitsSnapshot(t.snapshot))}(e,{appendMessage:Do,clearDeleteAllPending:He,coerceModelCatalog:l,coerceReasoningEffort:Fn,coerceRateLimitsSnapshot:Me,coerceSessionHistory:Qn,coerceNotebookMode:qn,createSession:et,deleteAllSessionsOnServer:Io,getCommandPath:()=>E,getCurrentSessionKey:()=>g.current,getStoredSelectionPreviews:()=>gt.current,hashSelectionPreviewContent:Gn,hasDeleteAllPending:Je,isSessionStartNotice:M,markDeleteAllPending:Ke,normalizeSystemText:tt,notifyRunDone:_o,refreshNotebook:Ho,resolveMessageSessionKey:Fo,runToSessionKeyRef:Ct,setCliDefaults:v,setCommandPath:L,setRateLimits:vt,setSessionConversationMode:Uo,setSessionPairing:zo,setSessionProgress:Lo,setSessionRunState:Eo,getSessionThreadId:e=>{const n=(e||"").trim();if(!n)return"";const t=r.current.get(n);return(t?.threadId||"").trim()},appendActivityItem:To,syncEffectiveSandboxFromStatus:$o,updateSessions:e=>Mo(n=>e(n))})}catch(n){const t=g.current||"";t&&Do(t,"system",`Internal UI error while processing a server message: ${String(n)}`),console.error("[Codex] onSocketMessage failed",n,e)}}function Vo(){const e=Pt.current;null!==e&&(window.cancelAnimationFrame(e),Pt.current=null);const n=Nt.current;null!==n&&(window.clearTimeout(n),Nt.current=null)}function qo(){Vo();const e=Mt.current;if(0===e.length)return;const n=e.splice(0,8);for(const e of n)Jo(e);e.length>0&&Yo()}function Yo(){null===Nt.current&&null===Pt.current&&("function"!=typeof window.requestAnimationFrame?Nt.current=window.setTimeout(qo,16):Pt.current=window.requestAnimationFrame(()=>{Pt.current=null,qo()}))}function Zo(){Mt.current=[],Vo()}function Go(e){const n=e??io.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 Xo(){for(const e of ye.current)URL.revokeObjectURL(e.previewUrl);ye.current=[],Ce([])}async function Qo(n){const t=We.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 Do(i,"system","WebSocket is not connected."),!1;const a=i?r.current.get(i):null;if(!1===a?.pairedOk)return Do(i,"system",a.pairedMessage||`Jupytext paired file not found. Expected: ${a.pairedOsPath||a.pairedPath||"<notebook>.py"}`),!1;const s="string"==typeof n?.forcedText?n.forcedText:null,c=(s??ze.current).trim(),d=null==s&&ye.current.length>0;if(!c&&!d)return!1;const l=i?r.current.get(i):null;if("running"===l?.runState&&!0!==n?.skipRunStateCheck)return!1;const p=G(e.app,o,St.current);p&&(St.current=p);const u=Y(p),f=p?q(p):null;if(T&&f&&"function"==typeof f.save&&u===o&&f.model.dirty)try{await f.save()}catch(e){return Do(i,"system",`Auto-save failed: ${String(e)}`),!1}const m=l?.notebookMode??Yn(o),h=No(o,i),b=function(e,n){return"plain_py"===n?ce(e)??ae(e):ae(e)??ce(e)}(p,m),v=b?.text||"";let C=!1,j="";if(U)if("plain_py"===m){const e=v||function(e){if(!Q(e))return"";const n=e.content.activeCell;if(!n)return"";try{const e="function"==typeof n.model?.sharedModel?.getSource?n.model.sharedModel.getSource():"";return ie(n.editor,"string"==typeof e?e:"")}catch{return""}}(p)||se(p);e&&(C=!0,j=e)}else C=!0,j=v||function(e){if(!Q(e))return"";const n=e.content.activeCell;if(!n)return"";const t="function"==typeof n.model?.sharedModel?.getSource?n.model.sharedModel.getSource():"";return"string"==typeof t?t:""}(p)||se(p);const w=U&&D&&("ipynb"===m||"jupytext_py"===m),k=w?function(e){if(!Q(e))return"";const n=e.content.activeCell;if(!n)return"";try{const e=n.model,t="string"==typeof e?.type?e.type:"";if(t&&"code"!==t)return"";const o="function"==typeof e?.toJSON?e.toJSON():null;return function(e){if(!Array.isArray(e)||0===e.length)return"";let n=0,t=!1,o=!1;const r=[];for(const i of e){if(n>=24){t=!0;break}const e=fe(i),a=me(xe(i),e);a&&(n+=1,e&&(o=!0),r.push(a))}let i=r.join("\n\n").replace(/\s+$/,"");return i?(t&&(i=`${i}\n\n${le}`),i=function(e,n,t){if(e.length<=n)return e;if(n<=15)return t?e.slice(e.length-n):e.slice(0,n);const o=n-15-2;return t?`${le}\n\n${e.slice(e.length-o)}`:`${e.slice(0,o)}\n\n${le}`}(i,o?8e3:2e4,o),i=i.replace(/\s+$/,""),i):""}(o&&Array.isArray(o.outputs)?o.outputs:[])}catch{return""}}(p):"",M=function(e,n){const t="string"==typeof e?e:"",o="string"==typeof n?n:"",r=en(4e3),i=en(2e4),a=nn(function(e,n){if(n<=0)return"";const t=Math.min(n,2e3);return e.split("\n").map(e=>function(e,n,t){if(e.length<=n)return e;if(n<=31)return e.slice(0,n);const o=n-31,r=Math.ceil(o/2),i=Math.floor(o/2);return`${e.slice(0,r)}${t}${e.slice(e.length-i)}`}(e,t," ... [long line truncated] ... ")).join("\n")}(t,r),r),s=nn(o,i);return{selection:a,cellOutput:s,selectionTruncated:a!==t,cellOutputTruncated:s!==o}}(C?j:"",w?k:""),N=C?M.selection:"",P=w?M.cellOutput:"",B=Boolean(N),A=Boolean(P),R=B?function(e,n,t,o){const r=X(o);if(r)return e?{locationLabel:"cell"===e.kind?`Cell ${e.number}`:`Line ${e.number}`,previewText:J(r,V)}:function(e,n,t){const o=X(t);if(o)return{locationLabel:de(e,n),previewText:J(o,V)}}(n,t,r)}(b,p,m,N):void 0,_=A?function(e,n,t,o){const r=X(o);if(r)return{locationLabel:`${"cell"===e?.kind?`Cell ${e.number}`:de(n,t)} Output`,previewText:J(r,V)}}(b,p,m,P):void 0,O=U&&B,I=U&&A,L=Ge(i,h.threadId),z=Bt.current.get(L),F=O?function(e){return Xe("selection",e)}({notebookMode:m,text:j,locationLabel:R?.locationLabel}):"",W=I?function(e){return Xe("output",e)}({notebookMode:m,text:k,locationLabel:_?.locationLabel}):"",K=O&&Qe(z?.selectionSignature,F),H=I&&Qe(z?.cellOutputSignature,W),Z=B&&!K,ee=A&&!H,ne=function(e){return{selectionTruncated:e.includeSelection&&e.selectionTruncated,cellOutputTruncated:e.includeCellOutput&&e.cellOutputTruncated}}({includeSelection:Z,includeCellOutput:ee,selectionTruncated:M.selectionTruncated,cellOutputTruncated:M.cellOutputTruncated}),te=K?void 0:R,oe=H?void 0:_,re=te||oe?{...te?{selectionPreview:te}:{},...oe?{cellOutputPreview:oe}:{}}:void 0,pe=l?.selectedModelOption??y,ue=l?.selectedReasoningEffort??S,ge=l?.selectedSandboxMode??$,he="__config__"===pe?(co||"").trim():pe.trim(),ve="__config__"===ue?Fn(lo||"")||Hn(uo):ue;if(!he)return Do(i,"system","Model is not resolved yet. Wait for model defaults to load, or pick a model explicitly."),!1;if(!ve)return Do(i,"system","Reasoning level is not resolved yet. Wait for defaults to load, or pick a reasoning level explicitly."),!1;const Ce=c||(d?"Please analyze the attached image(s).":""),je=d?await async function(e){if(0===e.length)return[];try{const n=[];for(const t of e)n.push({name:t.file.name||"image",dataUrl:await be(t.file)});return n}catch(e){return Do(g.current||"","system",`Failed to prepare image attachment: ${String(e)}`),null}}(ye.current):null;if(d&&!je)return!1;let we;if(je&&je.length>0&&(we=je),!Ro(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:Ce,notebookPath:o,commandPath:E.trim(),model:he,reasoningEffort:ve,sandbox:ge,...Z?{selection:N}:{},...ee?{cellOutput:P}:{},...ne.selectionTruncated?{selectionTruncated:!0}:{},...ne.cellOutputTruncated?{cellOutputTruncated:!0}:{},...we?{images:we}:{},...te?{uiSelectionPreview:te}:{},...oe?{uiCellOutputPreview:oe}:{}}))))return Do(i,"system","Failed to send message to Codex: WebSocket is unavailable."),!1;if(O||I){const e={...z??{}};O&&F&&(e.selectionSignature=F),I&&W&&(e.cellOutputSignature=W),e.selectionSignature||e.cellOutputSignature?Bt.current.set(L,e):Bt.current.delete(L)}!function(e,n,t){const o=(e||"").trim();if(!o)return;const r=Gn(n||"");if(!r)return;const i=new Map(gt.current),a=i.get(o)??[],s={contentHash:r,preview:t??null};i.delete(o),i.set(o,[...a,s].slice(-10)),yo(i)}(h.threadId,Ce,re);const ke=we?we.length:0,Se="read-only"===ge,Me=function(e,n){if(!e&&!n)return null;const t=String(en(4e3)),o=String(en(2e4));return e&&n?`Attached input and output were truncated before sending (input: ${t} chars, output: ${o} chars). The full input can be checked directly from the source file/cell.`:e?`Attached input was truncated before sending to stay within ${t} characters. The full input can be checked directly from the source file/cell.`:`Attached output was truncated before sending to stay within ${o} characters.`}(ne.selectionTruncated,ne.cellOutputTruncated);return"plain_py"!==m&&"jupytext_py"!==m||(Yt.current=i,pt(!0)),Mo(e=>{const n=new Map(e),t=n.get(i)??et("","Session started",{sessionKey:i}),o=Se?[{kind:"text",id:crypto.randomUUID(),role:"system",text:tt("system","Code changes are not available with the current permission (Read only).")}]:[],r=Me?[{kind:"text",id:crypto.randomUUID(),role:"system",text:tt("system",Me)}]:[],a=[...t.messages,...o,{kind:"text",id:crypto.randomUUID(),role:"user",text:Ce,attachments:ke>0?{images:ke}:void 0,selectionPreview:te,cellOutputPreview:oe},...r];return n.set(i,{...t,messages:So(a),runState:"running",activeRunId:null,runStartedAt:Date.now(),progress:"",progressKind:""}),n}),null==s&&(fo(),Xo()),!0}(0,a.useEffect)(()=>{const e=l(b.availableModels).map(e=>({label:e.displayName,value:e.model}));j(e)},[b.availableModels]),(0,a.useEffect)(()=>{"__config__"!==S&&uo.length>0&&!uo.some(e=>e.value===S)&&Ao("__config__")},[S,uo]),(0,a.useEffect)(()=>{"__config__"===S&&(Fn(lo||"")||Ao(Hn(uo)))},[S,lo,uo]),(0,a.useEffect)(()=>{"__config__"!==y&&(C.some(e=>e.value===y)||Bo("__config__"))},[y,C]),(0,a.useEffect)(()=>{if("__config__"!==y)return;if((co||"").trim())return;const e=C[0]?.value;e&&Bo(e)},[y,co,C]),(0,a.useEffect)(()=>{ze.current=ge},[ge]),(0,a.useEffect)(()=>{r.current=n,g.current=f},[n]),(0,a.useEffect)(()=>{g.current=f,function(e){const n={};for(const[t,o]of e)t&&o?.threadId&&(n[t]=o.threadId);try{Ie(Le,JSON.stringify(n))}catch{}}(n)},[n,f]),(0,a.useEffect)(()=>{const e=f||"";if(!e)return;const t=n.get(e);t&&(w(e=>e===t.selectedModelOption?e:t.selectedModelOption),O(e=>e===t.selectedReasoningEffort?e:t.selectedReasoningEffort),I(e=>e===t.selectedSandboxMode?e:t.selectedSandboxMode))},[f,n]),(0,a.useEffect)(()=>{ye.current=ve},[ve]),(0,a.useEffect)(()=>()=>{for(const e of ye.current)URL.revokeObjectURL(e.previewUrl)},[]),(0,a.useEffect)(()=>{Ie(An,so)},[so]),(0,a.useEffect)(()=>{Ie(Bn,T?"true":"false")},[T]),(0,a.useEffect)(()=>{Ie(Ln,U?"true":"false")},[U]),(0,a.useEffect)(()=>{U&&!D&&null===$e(Tn)&&W(!0)},[U,D]),(0,a.useEffect)(()=>{Ie(Tn,D?"true":"false")},[D]),(0,a.useEffect)(()=>{!function(e){Ie(Rn,e)}(E)},[E]),(0,a.useEffect)(()=>{Ie(_n,S)},[S]),(0,a.useEffect)(()=>{Ie(On,$)},[$]),(0,a.useEffect)(()=>{Ie($n,pe?"true":"false")},[pe]),(0,a.useEffect)(()=>{At.current=ee,Ie(In,ee?"true":"false")},[ee]),(0,a.useEffect)(()=>{const e=Number.isFinite(te)?Math.max(0,Math.floor(te)):0;var n;Rt.current=e,n=e,Ie(En,String(Math.max(0,Math.trunc(n))))},[te]),(0,a.useEffect)(()=>{if(!(yn||Dn||rt||at||ct))return;const e=e=>{const n=e.target;if(!n)return;const t=$t.current?.contains(n)??!1,o=It.current?.contains(n)??!1,r=Et.current?.contains(n)??!1,i=Lt.current?.contains(n)??!1,a=Tt.current?.contains(n)??!1,s=Ut.current?.contains(n)??!1,c=Dt.current?.contains(n)??!1,d=Kt.current?.contains(n)??!1,l=Jt.current?.contains(n)??!1,p=qt.current?.contains(n)??!1;t||o||r||i||a||s||c||d||l||p||(kn(!1),ot(!1),it(!1),st(!1),dt(!1))},n=e=>{"Escape"===e.key&&(e.preventDefault(),kn(!1),ot(!1),it(!1),st(!1),dt(!1))};return window.addEventListener("pointerdown",e,!0),window.addEventListener("keydown",n),()=>{window.removeEventListener("pointerdown",e,!0),window.removeEventListener("keydown",n)}},[yn,Dn,rt,at,ct]),(0,a.useEffect)(()=>{if(!ft)return;const e=e=>{const n=e.target;if(!n)return;const t=eo.current?.contains(n)??!1,o=no.current?.contains(n)??!1;t||o||(mt(null),eo.current=null)},n=e=>{"Escape"===e.key&&(e.preventDefault(),mt(null),eo.current=null)};return window.addEventListener("pointerdown",e,!0),window.addEventListener("keydown",n),()=>{window.removeEventListener("pointerdown",e,!0),window.removeEventListener("keydown",n)}},[ft]),(0,a.useEffect)(()=>{const n=()=>{const n=Z(e.app,St.current);n&&(St.current=n);const t=Q(n);H(e=>e===t?e:t);const o=Y(n),r=Ye(o),i=g.current;if(r&&r===i)return;if(i&&xo(ze.current),x.current=o,p(o),m(r),g.current=r,!r)return void fo();if(function(e){const n=e&&Fe.current.get(e)||"";ze.current=n,he(n)}(r),Xo(),jn(!0),!o)return;const a=No(o,r);jt.current.set(o,r),Oo(a,o,r),kt.current.has(r)&&Ho(r)};n();const t=e.app.shell.currentChanged;return t&&t.connect(n),e.notebooks.currentChanged.connect(n),()=>{t&&t.disconnect(n),e.notebooks.currentChanged.disconnect(n)}},[e.app,e.notebooks]),(0,a.useEffect)(()=>{const e=e=>{if(e.key!==Te||!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===yt.current)return;const t=n.notebookPath,o=n.sessionKey,i=n.threadId;if(!t||!o||!i)return;const a=Ye(t);if(!a||a!==o)return;const s=nt(t,o,i),c=x.current,d=r.current.get(o);if(!d||d.threadId!==i){if(d?.threadId){const e=Ge(o,d.threadId);Bt.current.delete(e)}Mo(e=>{const n=new Map(e);return n.set(o,s),n}),jt.current.set(t,o),Ko(o),c===t&&g.current!==o&&m(o),c===t&&(fo(),Xo()),Oo(s,t,o)}};return window.addEventListener("storage",e),()=>{window.removeEventListener("storage",e)}},[]),(0,a.useEffect)(()=>()=>{Zo()},[]),(0,a.useEffect)(()=>{if(!Cn)return;const e=window.requestAnimationFrame(()=>Wo());return()=>window.cancelAnimationFrame(e)},[Cn,n,s,Ve]),(0,a.useEffect)(()=>{const e=window.requestAnimationFrame(()=>Go());return()=>window.cancelAnimationFrame(e)},[ge]),(0,a.useEffect)(()=>{const e=()=>Go();return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);const er=f?n.get(f):null,nr=er?.messages??[],tr=er?.progressKind??"",or=Ve?er?.runState??"ready":"disconnected";(0,a.useEffect)(()=>{mo()},[f]),(0,a.useEffect)(()=>{ft&&(nr.some(e=>"text"===e.kind&&e.id===ft.messageId)||mo())},[nr,ft]),(0,a.useEffect)(()=>{const e=ht.current;for(const[t,o]of n){const n=(o?.threadId||"").trim(),r=(e.get(t)||"").trim();r&&n&&r!==n&&wo(r,n)}const t=new Map;for(const[e,o]of n){const n=(o?.threadId||"").trim();e&&n&&t.set(e,n)}ht.current=t},[n]);const rr=s?s.split("/").pop()||"Untitled":"No notebook",ir=er?.notebookMode??Yn(s),ar=function(e){const n=e.isNotebookEditor&&("ipynb"===e.notebookMode||"jupytext_py"===e.notebookMode),t=e.includeActiveCell&&n,o=t&&e.includeActiveCellOutput;return{showBadge:n&&e.currentNotebookPath.length>0&&!1!==e.pairedOk,contentEnabled:t,outputEnabled:o}}({includeActiveCell:U,includeActiveCellOutput:D,notebookMode:ir,isNotebookEditor:K,currentNotebookPath:s,pairedOk:er?.pairedOk}),sr=(ar.outputEnabled,ar.showBadge),cr=ar.contentEnabled,dr=ar.outputEnabled;(0,a.useEffect)(()=>{sr||(xt(!1),go())},[sr]),(0,a.useEffect)(()=>()=>{go()},[]),(0,a.useEffect)(()=>()=>{ho()},[]);const lr=ge.trim(),pr="disconnected"!==or&&s.length>0&&!1!==er?.pairedOk,ur="running"===or?"stop":"send",xr=er?.selectedModelOption??y,fr=er?.selectedReasoningEffort??S,mr=er?.selectedSandboxMode??$,gr=co?Un(co,C):"Auto",hr="__config__"===xr?gr:Un(xr,C),br=lo?Jn(lo,uo):"Auto",vr="__config__"===fr?br:Jn(fr,uo),Cr=Sn.find(e=>e.value===mr)?.label??"Permission",jr=Oe(),yr="unsupported"===jr,wr="unsupported"===jr?"Browser notifications are not available in this environment.":"denied"===jr?"Notifications are blocked for this site. Allow them in browser settings.":"default"===jr?"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"}`}.`,kr=Array.from(n.entries()).some(([e,n])=>{if("running"!==n.runState)return!1;const t=n.notebookMode??Yn(Ue(e).path);return"plain_py"===t||"jupytext_py"===t}),Sr=Boolean(Yt.current),Mr="running"===or&&Boolean(er?.activeRunId),Nr=pr&&(Boolean(lr)||ve.length>0),Pr="send"===ur?!Nr||("plain_py"===ir||"jupytext_py"===ir)&&(kr||Sr)&&"send"===ur:"stop"===ur&&!Mr,Br=Date.now(),Ar=function(e){if(!e)return null;const n=Date.parse(e);return Number.isFinite(n)?n:null}(bt?.updatedAt??null),Rr=null==Ar?null:Br-Ar,_r=null==Rr||Rr>6e5,Or=Pe(bt?.primary?.usedPercent??null),$r=Pe(bt?.secondary?.usedPercent??null),Ir=null==Ar&&null==Or&&null==$r,Er=Re(bt?.primary?.resetsAt??null,Br),Lr=Re(bt?.secondary?.resetsAt??null,Br),Tr="Overdue"===Er||"Overdue"===Lr||null!=Rr&&Rr>36e5,zr=null==Or?null:Or/100,Ur=null==Rr?"Unknown":`${Be(Rr)} ago`,Fr=bt?.primary?.windowMinutes??null,Dr=bt?.secondary?.windowMinutes??null,Wr=null==Fr?"":`Window: ${Math.round(Fr/60)}h`,Kr=null==Dr?"":`Window: ${Math.round(Dr/1440)}d`,Hr=bt?.contextWindow?.windowTokens??null,Jr=bt?.contextWindow?.usedTokens??null,Vr=bt?.contextWindow?.leftTokens??null,qr=bt?.contextWindow?.usedPercent??null,Yr="number"==typeof qr&&Number.isFinite(qr)?Ne(qr/100,0,1):null,Zr=_e(Jr),Gr=_e(Vr),Xr=_e(Hr),Qr="number"==typeof qr&&Number.isFinite(qr)?`${Math.round(Ne(qr,0,100))}%`:"Unknown",ei=null!=bt?.contextWindow;return(0,a.useEffect)(()=>{ei||(dt(!1),ho())},[ei]),(0,a.useLayoutEffect)(()=>{const e=to.current;if(!e)return void ro(!1);const n=()=>{const n=e.scrollWidth-e.clientWidth>1;ro(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)(je,{status:or}),(0,i.jsx)("span",{className:"jp-CodexChat-notebookWrap","data-full-name":oo?rr:void 0,children:(0,i.jsx)("span",{className:"jp-CodexChat-notebook",ref:to,title:oo?rr:void 0,children:rr})})]}),(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={...nt(e,n,Zn()),selectedModelOption:y,selectedReasoningEffort:S,selectedSandboxMode:$};if(t?.threadId){const e=Ge(n,t.threadId);Bt.current.delete(e)}Mo(e=>{const t=new Map(e);return t.set(n,i),t}),Ko(n),fo(),Xo(),Oo(i,e,n,{forceNewThread:!0}),function(e,n,t){var o;!function(e){try{Ie(Te,JSON.stringify(e))}catch{}}({kind:"new-thread",sessionKey:(o={sessionKey:e,notebookPath:n,threadId:t,source:yt.current,createEventId:Zn}).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"===or,"aria-label":"New thread",title:"New thread",children:(0,i.jsx)(on,{width:16,height:16})}),(0,i.jsx)("div",{className:"jp-CodexMenuWrap",ref:Et,children:(0,i.jsx)("button",{type:"button",className:`jp-CodexHeaderBtn jp-CodexHeaderBtn-icon jp-CodexUsageBtn${rt?" is-active is-open":""}${_r?" is-stale":""}${Tr?" is-overdue":""}`,ref:Wt,onClick:()=>(it(e=>{const n=!e;return n&&function(e=!1){const n=We.current;if(!n||n.readyState!==WebSocket.OPEN)return;const t=Date.now();!e&&t-wt.current<15e3||(wt.current=t,Ro(JSON.stringify({type:"refresh_rate_limits"})))}(),n}),kn(!1),ot(!1),st(!1),void dt(!1)),"aria-label":null==Or?"Codex usage":`Codex usage: ${Or}% left`,"aria-haspopup":"dialog","aria-expanded":rt,title:null==Or?"Codex usage: unknown":`Codex usage: ${Or}% left (resets in ${Er})`,children:(0,i.jsx)(xn,{level:zr,width:16,height:16})})}),(0,i.jsxs)(vn,{open:rt,anchorRef:Wt,popoverRef:Kt,className:"jp-CodexUsagePopover",ariaLabel:"Codex usage",role:"dialog",align:"right",children:[(Tr||_r)&&(0,i.jsxs)("div",{className:"jp-CodexUsageNotice"+(Tr?" is-overdue":_r?" is-stale":""),children:[(0,i.jsx)("div",{className:"jp-CodexUsageNoticeTitle",children:Ir?"Usage unavailable":Tr?"Overdue usage snapshot":"Stale usage snapshot"}),(0,i.jsx)("div",{className:"jp-CodexUsageNoticeBody",children:Ir?"Run Codex once to fetch usage limits.":"Run Codex again to refresh these numbers."})]}),(0,i.jsxs)("div",{className:"jp-CodexUsageSection",children:[(0,i.jsxs)("div",{className:"jp-CodexUsageSectionTop",children:[(0,i.jsx)("div",{className:"jp-CodexUsageSectionTitle",children:"Session"}),(0,i.jsxs)("div",{className:"jp-CodexUsageSectionReset",children:["Resets in ",Er]})]}),(0,i.jsx)("div",{className:"jp-CodexUsageBar",children:(0,i.jsx)("div",{className:"jp-CodexUsageBarFill"+(_r?" is-stale":""),style:{width:`${Or??0}%`}})}),(0,i.jsxs)("div",{className:"jp-CodexUsageMeta",children:[(0,i.jsx)("div",{className:"jp-CodexUsageMetaLeft",children:null==Or?"--% left":`${Or}% left`}),(0,i.jsx)("div",{className:"jp-CodexUsageMetaRight",children:Wr})]})]}),(0,i.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 ",Lr]})]}),(0,i.jsx)("div",{className:"jp-CodexUsageBar",children:(0,i.jsx)("div",{className:"jp-CodexUsageBarFill"+(_r?" is-stale":""),style:{width:`${$r??0}%`}})}),(0,i.jsxs)("div",{className:"jp-CodexUsageMeta",children:[(0,i.jsx)("div",{className:"jp-CodexUsageMetaLeft",children:null==$r?"--% left":`${$r}% left`}),(0,i.jsx)("div",{className:"jp-CodexUsageMetaRight",children:Kr})]})]}),(0,i.jsxs)("div",{className:"jp-CodexUsageFooter",children:["Last updated: ",Ur]})]}),(0,i.jsx)("button",{type:"button",onClick:()=>{ue(e=>!e),kn(!1),ot(!1),it(!1),st(!1),dt(!1)},className:"jp-CodexHeaderBtn jp-CodexHeaderBtn-icon"+(pe?" is-active":""),"aria-label":"Settings","aria-expanded":pe,title:"Settings",children:(0,i.jsx)(dn,{width:16,height:16})})]})]}),!1===er?.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:er.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:_t,onScroll:function(){const e=_t.current;if(!e)return;const n=e.scrollHeight-(e.scrollTop+e.clientHeight)<80;jn(n)},children:["disconnected"===or&&!tn&&(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:()=>pn(),disabled:tn,"aria-label":tn?"Codex reconnecting":"Reconnect to Codex",title:tn?"Attempting to reconnect...":"Reconnect to Codex",children:tn?"Connecting...":"Reconnect"})]}),0===nr.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."})]}),nr.map(e=>{if("text"===e.kind){const n="system"===e.role&&M(e.text,e.sessionResolution)?" is-success":"",t=e.attachments?.images??0,o=e.selectionPreview,r=e.cellOutputPreview,a="user"===e.role&&Boolean(o?.locationLabel&&o?.previewText),s="user"===e.role&&Boolean(r?.locationLabel&&r?.previewText),c=a||s,d=c&&ft?.messageId===e.id,l=`jp-CodexChat-message jp-CodexChat-${e.role}${n}${c?" has-selection-preview":""}${d?" is-selection-open":""}`;return(0,i.jsxs)("div",{className:l,children:[(0,i.jsx)("div",{className:"jp-CodexChat-role",children:e.role}),(0,i.jsx)(we,{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)(cn,{width:14,height:14}),(0,i.jsx)("span",{className:"jp-CodexChat-attachmentCount",children:t})]})}),c&&(0,i.jsx)("button",{type:"button",className:"jp-CodexChat-selectionToggle"+(d?" is-open":""),onClick:n=>function(e,n,t){e&&(ft?.messageId!==e?(eo.current=t.currentTarget,mt({messageId:e,preview:n})):mo())}(e.id,{...o?{selectionPreview:o}:{},...r?{cellOutputPreview:r}:{}},n),"aria-label":d?"Hide message context":"Show message context",children:(0,i.jsx)(on,{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 ",Ae(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)(hn,{width:14,height:14}):"completed"===n.phase?(0,i.jsx)(gn,{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"===or&&(0,i.jsx)("div",{className:"jp-CodexChat-loading"+("reasoning"===tr?" is-reasoning":""),"aria-label":"reasoning"===tr?"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:Ot})]})}),(0,i.jsx)(vn,{open:Boolean(ft),anchorRef:eo,popoverRef:no,className:"jp-CodexChat-selectionPopover",ariaLabel:"Message context",constrainHeightToViewport:!0,viewportMargin:20,role:"dialog",align:"right",children:ft&&(0,i.jsxs)("div",{className:"jp-CodexChat-selectionCard",role:"note","aria-label":"Message context",children:[ft.preview.selectionPreview&&(0,i.jsxs)("div",{className:"jp-CodexChat-contextSection",children:[(0,i.jsx)("div",{className:"jp-CodexChat-selectionMeta",children:ft.preview.selectionPreview.locationLabel}),(0,i.jsx)(ke,{code:ft.preview.selectionPreview.previewText})]}),ft.preview.cellOutputPreview&&(0,i.jsxs)("div",{className:"jp-CodexChat-contextSection",children:[(0,i.jsx)("div",{className:"jp-CodexChat-selectionMeta",children:ft.preview.cellOutputPreview.locationLabel}),(0,i.jsx)(ke,{code:ft.preview.cellOutputPreview.previewText})]})]})}),(0,i.jsx)(vn,{open:ut&&sr,anchorRef:Zt,popoverRef:Gt,className:"jp-CodexCellAttachmentPopoverMenu",ariaLabel:"Cell attachment details",role:"dialog",align:"left",onMouseEnter:bo,onMouseLeave:vo,children:(0,i.jsxs)("div",{className:"jp-CodexCellAttachmentPopoverCard",role:"note","aria-label":"Cell attachment details",children:[(0,i.jsx)("div",{className:"jp-CodexCellAttachmentPopoverTitle",children:"Attach On Next Send"}),(0,i.jsxs)("div",{className:"jp-CodexCellAttachmentPopoverRow",children:[(0,i.jsx)("span",{children:"Current cell content"}),(0,i.jsx)("span",{className:"jp-CodexCellAttachmentDot "+(cr?"is-on":"is-off"),"aria-label":cr?"Attached":"Not attached",title:cr?"Attached":"Not attached"})]}),(0,i.jsxs)("div",{className:"jp-CodexCellAttachmentPopoverRow",children:[(0,i.jsx)("span",{children:"Current cell output"}),(0,i.jsx)("span",{className:"jp-CodexCellAttachmentDot "+(dr?"is-on":"is-off"),"aria-label":dr?"Attached":"Not attached",title:dr?"Attached":"Not attached"})]})]})}),(0,i.jsxs)("div",{className:"jp-CodexChat-input",children:[(0,i.jsx)("div",{className:"jp-CodexJumpBar"+(Cn?"":" is-visible"),children:(0,i.jsx)("button",{type:"button",className:"jp-CodexJumpToLatestBtn",onClick:Wo,"aria-label":"Jump to latest","aria-hidden":Cn,tabIndex:Cn?-1:0,title:"Jump to latest",children:(0,i.jsx)(an,{width:20,height:20})})}),(0,i.jsxs)("div",{className:"jp-CodexComposer",children:[(0,i.jsx)("div",{className:"jp-CodexCellAttachmentWrap jp-CodexComposer-cellAttachmentWrap"+(sr?" is-visible":""),ref:Zt,"aria-hidden":!sr,onMouseEnter:bo,onMouseLeave:vo,onFocusCapture:bo,onBlurCapture:function(e){const n=e.relatedTarget,t=!!n&&(Zt.current?.contains(n)??!1),o=!!n&&(Gt.current?.contains(n)??!1);t||o||vo()},children:(0,i.jsx)("div",{role:"group","aria-label":"Active-cell attachment",children:(0,i.jsxs)("button",{type:"button",className:"jp-CodexComposer-cellAttachment"+(cr?"":" is-off"),onClick:()=>F(e=>!e),"aria-pressed":cr,"aria-label":cr?"Disable active-cell attachment":"Enable active-cell attachment",title:cr?"Disable active-cell attachment":"Enable active-cell attachment",disabled:!sr,tabIndex:sr?0:-1,children:[(0,i.jsx)(ln,{active:cr,width:15,height:15}),(0,i.jsx)("span",{className:"jp-CodexComposer-cellAttachmentLabel",children:"Cell Attatch"})]})})}),(0,i.jsx)("textarea",{ref:io,value:ge,onChange:e=>{var n;xo(n=e.currentTarget.value),he(n),ze.current=n,window.requestAnimationFrame(()=>Go(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=ye.current.length;if(o>=4)return void Do(g.current||"","system","Too many images attached (max 4).");const r=4-o,i=[];let a=0,s=0,c=ye.current.reduce((e,n)=>e+n.file.size,0);for(const e of t.slice(0,r))e.size>4194304?a+=1:c+e.size>6291456?s+=1:(i.push({id:crypto.randomUUID(),file:e,previewUrl:URL.createObjectURL(e)}),c+=e.size);a>0&&Do(g.current||"","system",`Skipped ${a} image(s): each must be <= ${Math.round(4)}MB.`),s>0&&Do(g.current||"","system",`Skipped ${s} image(s): total attachments must be <= ${Math.round(6)}MB.`),0!==i.length&&Ce(e=>{const n=[...e,...i];return ye.current=n,n})},placeholder:!1===er?.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"!==or?Nr&&(e.preventDefault(),Qo()):e.preventDefault())}}),ve.length>0&&(0,i.jsx)("div",{className:"jp-CodexComposer-attachments",role:"group","aria-label":"Attachments",children:ve.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 Ce(e=>{const t=e.find(e=>e.id===n);t&&URL.revokeObjectURL(t.previewUrl);const o=e.filter(e=>e.id!==n);return ye.current=o,o});var n},"aria-label":"Remove image",title:"Remove image",children:(0,i.jsx)(bn,{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:$t,children:(0,i.jsx)("button",{type:"button",ref:zt,className:"jp-CodexModelBtn "+(yn?"is-open":""),onClick:()=>{kn(e=>!e),ot(!1),it(!1),st(!1),dt(!1)},disabled:"running"===or,"aria-label":`Model: ${hr}`,"aria-haspopup":"menu","aria-expanded":yn,title:`Model: ${hr}`,children:(0,i.jsx)("span",{className:"jp-CodexModelBtn-label",children:hr})})}),(0,i.jsxs)(vn,{open:yn,anchorRef:zt,popoverRef:Ut,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__"===xr&&co&&C.some(e=>e.value===co)?co:xr,t=n===e.value;return(0,i.jsxs)("button",{type:"button",className:"jp-CodexMenuItem "+(t?"is-active":""),onClick:()=>{Bo(e.value),kn(!1)},children:[(0,i.jsx)("span",{className:"jp-CodexMenuItemLabel",children:e.label}),t&&(0,i.jsx)(gn,{className:"jp-CodexMenuCheck",width:16,height:16})]},e.value)})]}),(0,i.jsx)("div",{className:"jp-CodexMenuWrap",ref:It,children:(0,i.jsx)("button",{type:"button",ref:Ft,className:"jp-CodexIconBtn "+(Dn?"is-open":""),onClick:()=>{ot(e=>!e),kn(!1),it(!1),st(!1),dt(!1)},disabled:"running"===or,"aria-label":`Reasoning: ${vr}`,"aria-haspopup":"menu","aria-expanded":Dn,title:`Reasoning: ${vr}`,children:(0,i.jsx)(un,{isConfig:"__config__"===fr&&!lo,activeBars:Kn("__config__"===fr&&lo?lo:fr,uo),width:17,height:17})})}),(0,i.jsxs)(vn,{open:Dn,anchorRef:Ft,popoverRef:Dt,role:"menu",ariaLabel:"Reasoning",align:"left",children:[0===uo.length&&(0,i.jsx)("div",{className:"jp-CodexMenuItem",children:"No reasoning options"}),uo.map(e=>{const n=("__config__"===fr&&lo?lo:fr)===e.value;return(0,i.jsxs)("button",{type:"button",className:"jp-CodexMenuItem "+(n?"is-active":""),onClick:()=>{Ao(e.value),ot(!1)},children:[(0,i.jsx)("span",{className:"jp-CodexMenuItemLabel",children:e.label}),n&&(0,i.jsx)(gn,{className:"jp-CodexMenuCheck",width:16,height:16})]},e.value)})]}),(0,i.jsx)("div",{className:"jp-CodexMenuWrap",ref:Lt,children:(0,i.jsx)("button",{type:"button",className:`jp-CodexIconBtn jp-CodexPermissionBtn${at?" is-open":""}${"danger-full-access"===mr?" is-danger":""}${"read-only"===mr?" is-warning":""}`,ref:Ht,onClick:()=>{st(e=>!e),kn(!1),ot(!1),it(!1),dt(!1)},disabled:"running"===or,"aria-label":`Permission: ${Cr}`,"aria-haspopup":"menu","aria-expanded":at,title:`Permission: ${Cr}`,children:(0,i.jsx)(mn,{width:17,height:17})})}),(0,i.jsx)(vn,{open:at,anchorRef:Ht,popoverRef:Jt,role:"menu",ariaLabel:"Permissions",align:"right",children:Sn.map(e=>(0,i.jsxs)("button",{type:"button",className:"jp-CodexMenuItem "+(mr===e.value?"is-active":""),onClick:()=>{var n;n=e.value,I(n),Po(g.current||"",{selectedSandboxMode:n}),st(!1)},children:[(0,i.jsx)("span",{className:"jp-CodexMenuItemLabel",children:e.label}),mr===e.value&&(0,i.jsx)(gn,{className:"jp-CodexMenuCheck",width:16,height:16})]},e.value))}),ei&&(0,i.jsxs)("div",{className:"jp-CodexContextWrap",ref:Tt,onMouseEnter:Co,onMouseLeave:jo,onFocusCapture:Co,onBlurCapture:function(e){const n=e.relatedTarget,t=!!n&&(Tt.current?.contains(n)??!1),o=!!n&&(qt.current?.contains(n)??!1);t||o||jo()},children:[(0,i.jsx)("button",{type:"button",className:"jp-CodexIconBtn jp-CodexContextBtn"+(_r?" is-stale":""),ref:Vt,"aria-label":null==Jr||null==Vr?"Context window usage unavailable":`Context window: used ${Zr} tokens, left ${Gr} tokens`,title:null==Jr||null==Vr?"Context window usage unavailable":`Used ${Zr} / left ${Gr}`,children:(0,i.jsx)(fn,{level:Yr,width:20,height:20})}),(0,i.jsxs)(vn,{open:ct,anchorRef:Vt,popoverRef:qt,className:"jp-CodexContextPopover",role:"tooltip",ariaLabel:"Context window",align:"right",onMouseEnter:Co,onMouseLeave:jo,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:Zr})]}),(0,i.jsxs)("div",{className:"jp-CodexContextPopoverRow",children:[(0,i.jsx)("span",{children:"Left"}),(0,i.jsx)("strong",{children:Gr})]}),(0,i.jsx)("div",{className:"jp-CodexContextPopoverMeta",children:null==Hr?"Window size unavailable":`Window: ${Xr} tokens (${Qr} used)`})]})]})]}),(0,i.jsx)("div",{className:"jp-CodexComposer-toolbarRight",children:(0,i.jsx)("button",{type:"button",className:"jp-CodexSendBtn"+("stop"===ur?" is-stop":""),onClick:()=>{"stop"!==ur?Qo():function(){const e=g.current||"";if(!e)return;const n=e?r.current.get(e):null,t=n?.activeRunId??null;We.current&&We.current.readyState===WebSocket.OPEN?t?(Lo(e,"Cancelling..."),Ro(JSON.stringify(function(e){return{type:"cancel",runId:e}}(t)))):Do(e,"system","Cancel not available yet (waiting for run id)."):Do(e,"system","Cancel failed: WebSocket is not connected.")}()},disabled:Pr,"aria-label":"stop"===ur?"Stop run":"Send",title:"stop"===ur?er?.activeRunId?`runId: ${er.activeRunId}`:"Waiting for run id...":"disconnected"===or?"Connecting...":"Send",children:"stop"===ur?(0,i.jsx)(sn,{width:18,height:18}):(0,i.jsx)(rn,{width:18,height:18})})})]})]})]}),pe&&(0,i.jsxs)("div",{className:"jp-CodexSettingsOverlay",role:"dialog","aria-modal":"true","aria-label":"Settings",children:[(0,i.jsx)("button",{type:"button",className:"jp-CodexSettingsBackdrop",onClick:()=>ue(!1),"aria-label":"Dismiss settings",title:"Dismiss settings"}),(0,i.jsxs)("div",{className:"jp-CodexSettingsPanel",onClick:e=>e.stopPropagation(),children:[(0,i.jsxs)("div",{className:"jp-CodexSettingsPanel-top",children:[(0,i.jsx)("div",{className:"jp-CodexSettingsPanel-title",children:"Settings"}),(0,i.jsx)("button",{type:"button",className:"jp-CodexHeaderBtn jp-CodexHeaderBtn-icon",onClick:()=>ue(!1),"aria-label":"Close settings",title:"Close",children:(0,i.jsx)(bn,{width:16,height:16})})]}),(0,i.jsxs)("div",{className:"jp-CodexSettingsPanel-sections",children:[(0,i.jsxs)("section",{className:"jp-CodexSettingsSection","aria-label":"General settings",children:[(0,i.jsx)("div",{className:"jp-CodexSettingsSection-title",children:"General"}),(0,i.jsxs)("label",{className:"jp-CodexSettingsField",children:[(0,i.jsx)("span",{className:"jp-CodexSettingsField-label",children:"Codex command path"}),(0,i.jsx)("input",{type:"text",className:"jp-CodexChat-model-input",placeholder:"codex",value:E,disabled:"running"===or,onChange:e=>L(e.currentTarget.value.trimStart()),title:"Leave empty to use PATH lookup."}),(0,i.jsx)("span",{className:"jp-CodexSettingsField-help",children:"Leave empty to use PATH lookup."})]})]}),(0,i.jsxs)("section",{className:"jp-CodexSettingsSection","aria-label":"Message options",children:[(0,i.jsx)("div",{className:"jp-CodexSettingsSection-title",children:"Message Options"}),(0,i.jsxs)("div",{className:"jp-CodexSettingsOptions",children:[(0,i.jsxs)("label",{className:"jp-CodexChat-toggle",children:[(0,i.jsx)("input",{type:"checkbox",checked:T,onChange:e=>z(e.currentTarget.checked),disabled:"running"===or}),"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"===or}),"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"===or||!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=Oe(),t=g.current||"";if("unsupported"===n)return Do(t,"system","Browser notifications are not supported in this environment."),void ne(!1);if("granted"!==n){if("denied"===n)return Do(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&&Do(t,"system","Browser notification permission was denied. Allow notifications in browser settings to enable this option."),ne(!1)}catch{Do(t,"system","Failed to request browser notification permission."),ne(!1)}}else ne(!0)}(e.currentTarget.checked)},disabled:"running"===or||yr}),"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:yr}),(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:wr})]})]}),(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: ",ao]})}),(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=De();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&&Ko(t),Ke(),!Io()&&t&&Do(t,"system","Delete request could not be sent now. It will be retried when you reconnect."),Ct.current=new Map,jt.current=new Map,Bt.current=new Map,Ee(Le),gt.current=new Map,Ee(zn),ko(new Map),fo(),Xo()}()},disabled:"running"===or||0===ao&&0===n.size,title:"running"===or?"Cannot delete while a run is in progress.":"Delete all saved conversations",children:"Delete all"})})]})]})]})]})]})}var rt=t(5072),it=t.n(rt),at=t(7825),st=t.n(at),ct=t(7659),dt=t.n(ct),lt=t(5056),pt=t.n(lt),ut=t(540),xt=t.n(ut),ft=t(1113),mt=t.n(ft),gt=t(2646),ht={};ht.styleTagTransform=mt(),ht.setAttributes=pt(),ht.insert=dt().bind(null,"head"),ht.domAPI=st(),ht.insertStyleElement=xt(),it()(gt.A,ht),gt.A&&gt.A.locals&&gt.A.locals;const bt={id:"jupyterlab-codex:plugin",autoStart:!0,requires:[o.ICommandPalette,r.INotebookTracker],activate:(e,n,t)=>{const o=new jn(e,t);o.id="jupyterlab-codex-sidebar",o.title.caption="Codex",o.title.label="Codex",e.shell.add(o,"right"),n.addItem({command:"jupyterlab-codex:activate",category:"Codex"}),e.commands.addCommand("jupyterlab-codex:activate",{label:"Focus Codex Sidebar",execute:()=>{e.shell.activateById(o.id)}})}}},2646(e,n,t){t.d(n,{A:()=>x});var o=t(1601),r=t.n(o),i=t(6314),a=t.n(i),s=t(2479),c=t(4417),d=t.n(c),l=new URL(t(3915),t.b),p=a()(r());p.i(s.A);var u=d()(l);p.push([e.id,`.jp-CodexPanel {\n height: 100%;\n display: flex;\n flex-direction: column;\n container-type: inline-size;\n\n --cdx-bg: var(--jp-layout-color1, #ffffff);\n --cdx-surface: var(--jp-layout-color0, #ffffff);\n --cdx-surface-2: var(--jp-layout-color2, #f3f4f6);\n --cdx-border: var(--jp-border-color2, rgba(148, 163, 184, 0.35));\n --cdx-text: var(--jp-ui-font-color0, #0f172a);\n --cdx-muted: var(--jp-ui-font-color2, #64748b);\n --cdx-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",\n "Courier New", monospace;\n\n --cdx-accent: var(--jupyterlab-codex-accent, #6E80FF);\n --cdx-good: var(--jp-success-color1, #22c55e);\n --cdx-warn: var(--jp-warn-color1, #f97316);\n --cdx-bad: var(--jp-error-color1, #ef4444);\n --cdx-code-text: var(--cdx-text);\n --cdx-code-comment: #6b7280;\n --cdx-code-keyword: #7c3aed;\n --cdx-code-string: #0f766e;\n --cdx-code-number: #b45309;\n --cdx-code-function: #0f766e;\n --cdx-code-variable: #1d4ed8;\n --cdx-code-operator: #334155;\n --cdx-code-title: #0f172a;\n\n --cdx-radius: 14px;\n --cdx-radius-sm: 10px;\n\n font-family: var(\n --jp-ui-font-family,\n system-ui,\n -apple-system,\n Segoe UI,\n Roboto,\n Helvetica,\n Arial,\n sans-serif\n );\n color: var(--cdx-text);\n background: var(--cdx-bg);\n}\n\n.jp-mod-theme-light .jp-CodexPanel {\n --cdx-code-text: #0f172a;\n --cdx-code-comment: #6b7280;\n --cdx-code-keyword: #7c3aed;\n --cdx-code-string: #0f766e;\n --cdx-code-number: #b45309;\n --cdx-code-function: #0f766e;\n --cdx-code-variable: #1d4ed8;\n --cdx-code-operator: #334155;\n --cdx-code-title: #0f172a;\n}\n\n.jp-mod-theme-dark .jp-CodexPanel {\n --cdx-code-text: #e2e8f0;\n --cdx-code-comment: #94a3b8;\n --cdx-code-keyword: #c084fc;\n --cdx-code-string: #5eead4;\n --cdx-code-number: #fbbf24;\n --cdx-code-function: #4ade80;\n --cdx-code-variable: #93c5fd;\n --cdx-code-operator: #cbd5e1;\n --cdx-code-title: #f8fafc;\n}\n\n.jp-CodexChat {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n\n /* Space reserved for the input's top fade overlay so the last message isn't washed out. */\n --cdx-chat-bottom-fade: 28px;\n}\n\n.jp-CodexChat-header {\n position: sticky;\n top: 0;\n z-index: 2;\n padding: 10px 10px 8px;\n border-bottom: none;\n background: var(--cdx-bg);\n container-type: inline-size;\n}\n\n.jp-CodexChat-header::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n bottom: -24px;\n height: 24px;\n background: linear-gradient(\n to bottom,\n var(--cdx-bg),\n color-mix(in srgb, var(--cdx-bg) 0%, transparent)\n );\n pointer-events: none;\n}\n\n.jp-CodexChat-header-top {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.jp-CodexChat-header-left {\n min-width: 0;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.jp-CodexChat-header-actions {\n justify-self: end;\n display: flex;\n align-items: center;\n gap: 0;\n}\n\n@container (max-width: 420px) {\n .jp-CodexHeaderBtn-label {\n display: none;\n }\n}\n\n@container (max-width: 380px) {\n .jp-CodexChat-header {\n padding: 8px 8px 8px;\n }\n\n .jp-CodexChat-header-top {\n gap: 8px;\n }\n\n .jp-CodexChat-header-actions {\n gap: 0;\n }\n\n .jp-CodexChat-notebook {\n min-width: 0;\n }\n}\n\n.jp-CodexChat-subtitle {\n margin-top: 8px;\n padding: 6px 10px;\n border-radius: 12px;\n border: 1px solid var(--cdx-border);\n background: var(--cdx-surface);\n font-family: var(--cdx-mono);\n font-size: 12px;\n color: var(--cdx-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.jp-CodexPairingNotice {\n margin-top: 8px;\n padding: 10px 10px;\n border-radius: 12px;\n border: 1px solid color-mix(in srgb, var(--cdx-warn) 40%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-warn) 10%, var(--cdx-surface));\n}\n\n.jp-CodexPairingNotice-title {\n font-size: 12px;\n font-weight: 750;\n color: color-mix(in srgb, var(--cdx-warn) 70%, var(--cdx-text));\n}\n\n.jp-CodexPairingNotice-body {\n margin-top: 4px;\n font-size: 12px;\n color: color-mix(in srgb, var(--cdx-warn) 55%, var(--cdx-text));\n white-space: pre-wrap;\n}\n\n.jp-CodexChat-notebook {\n flex: 0 1 auto;\n min-width: 0;\n height: auto;\n display: inline-flex;\n align-items: center;\n padding: 0;\n border-radius: 0;\n border: none;\n background: transparent;\n font-size: 13px;\n font-weight: 650;\n color: var(--cdx-text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.jp-CodexChat-notebookWrap {\n position: relative;\n flex: 0 1 auto;\n min-width: 0;\n display: inline-flex;\n}\n\n.jp-CodexChat-notebookWrap::after {\n content: attr(data-full-name);\n position: absolute;\n left: 0;\n top: calc(100% + 6px);\n z-index: 35;\n display: none;\n max-width: min(480px, calc(100vw - 40px));\n padding: 6px 8px;\n border-radius: 8px;\n border: 1px solid var(--cdx-border);\n background: var(--cdx-surface);\n color: var(--cdx-text);\n font-size: 12px;\n font-weight: 550;\n line-height: 1.3;\n white-space: normal;\n overflow-wrap: anywhere;\n box-shadow: 0 8px 24px rgba(2, 6, 23, 0.16);\n pointer-events: none;\n}\n\n.jp-CodexChat-notebookWrap[data-full-name]:not([data-full-name='']):hover::after,\n.jp-CodexChat-notebookWrap[data-full-name]:not([data-full-name='']):focus-within::after {\n display: block;\n}\n\n.jp-CodexHeaderBtn {\n appearance: none;\n height: 32px;\n padding: 0 10px;\n border-radius: 10px;\n border: 1px solid transparent;\n background: transparent;\n color: var(--cdx-muted);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n cursor: pointer;\n font-size: 12px;\n font-weight: 650;\n transition: background 120ms ease, border-color 120ms ease, color 120ms ease;\n}\n\n.jp-CodexHeaderBtn svg {\n opacity: 0.9;\n}\n\n.jp-CodexHeaderBtn:hover:not(:disabled) {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n color: var(--cdx-text);\n}\n\n.jp-CodexHeaderBtn:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n}\n\n.jp-CodexHeaderBtn-icon {\n width: 32px;\n padding: 0;\n}\n\n.jp-CodexHeaderBtn-icon.is-active {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n color: var(--cdx-text);\n}\n\n.jp-CodexHeaderBtn-danger {\n color: color-mix(in srgb, var(--cdx-bad) 78%, var(--cdx-muted));\n}\n\n.jp-CodexHeaderBtn-danger:hover:not(:disabled) {\n background: color-mix(in srgb, var(--cdx-bad) 8%, var(--cdx-surface));\n border-color: color-mix(in srgb, var(--cdx-bad) 35%, var(--cdx-border));\n color: color-mix(in srgb, var(--cdx-bad) 85%, var(--cdx-text));\n}\n\n.jp-CodexSettingsOverlay {\n position: absolute;\n inset: 0;\n z-index: 40;\n display: flex;\n justify-content: center;\n align-items: flex-start;\n padding: 54px 10px 10px;\n}\n\n.jp-CodexSettingsBackdrop {\n position: absolute;\n inset: 0;\n appearance: none;\n margin: 0;\n padding: 0;\n border: 0;\n background: color-mix(in srgb, var(--cdx-bg) 58%, transparent);\n -webkit-backdrop-filter: blur(5px);\n backdrop-filter: blur(5px);\n cursor: pointer;\n}\n\n.jp-CodexSettingsPanel {\n position: relative;\n z-index: 1;\n width: min(100%, 680px);\n max-height: calc(100% - 54px);\n overflow: auto;\n border-radius: var(--cdx-radius);\n border: 1px solid var(--cdx-border);\n background: var(--cdx-surface);\n padding: 14px;\n}\n\n.jp-CodexSettingsPanel-top {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n}\n\n.jp-CodexSettingsPanel-sections {\n margin-top: 12px;\n padding-top: 14px;\n border-top: 1px solid var(--cdx-border);\n display: grid;\n gap: 18px;\n}\n\n.jp-CodexSettingsSection {\n display: grid;\n gap: 10px;\n}\n\n.jp-CodexSettingsSection-title {\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--cdx-muted);\n}\n\n.jp-CodexSettingsSection-title-danger {\n color: color-mix(in srgb, var(--cdx-bad) 72%, var(--cdx-muted));\n}\n\n.jp-CodexSettingsField {\n display: grid;\n gap: 6px;\n}\n\n.jp-CodexSettingsField-label {\n font-size: 12px;\n color: var(--cdx-text);\n}\n\n.jp-CodexSettingsField .jp-CodexChat-model-input {\n width: 100%;\n max-width: 100%;\n min-width: 0;\n display: block;\n box-sizing: border-box;\n}\n\n.jp-CodexSettingsField-help {\n font-size: 11px;\n color: var(--cdx-muted);\n}\n\n.jp-CodexSettingsOptions {\n display: grid;\n gap: 8px;\n}\n\n.jp-CodexSettingsPanel .jp-CodexChat-toggle {\n width: 100%;\n justify-content: flex-start;\n border: 1px solid transparent;\n background: transparent;\n padding: 4px 0;\n border-radius: 8px;\n}\n\n.jp-CodexSettingsPanel .jp-CodexChat-toggle:hover {\n background: transparent;\n border-color: transparent;\n color: inherit;\n}\n\n.jp-CodexSettingsPanel-stats {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n}\n\n.jp-CodexSettingsPanel-stat {\n font-size: 12px;\n color: var(--cdx-muted);\n}\n\n.jp-CodexSettingsDanger {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 10px;\n}\n\n.jp-CodexSettingsSection-danger {\n padding-top: 14px;\n border-top: 1px solid color-mix(in srgb, var(--cdx-bad) 18%, var(--cdx-border));\n}\n\n.jp-CodexSettingsPanel-title {\n font-size: 12px;\n font-weight: 700;\n color: var(--cdx-muted);\n}\n\n.jp-CodexChat-settings {\n margin-top: 8px;\n}\n\n.jp-CodexChat-settingsSummary {\n cursor: pointer;\n user-select: none;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n border-radius: 12px;\n border: 1px solid var(--cdx-border);\n background: var(--cdx-surface-2);\n color: var(--cdx-text);\n font-size: 12px;\n font-weight: 650;\n}\n\n.jp-CodexChat-settingsSummary::-webkit-details-marker {\n display: none;\n}\n\n.jp-CodexChat-controls {\n margin-top: 10px;\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.jp-CodexChat-model {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--cdx-muted);\n}\n\n.jp-CodexChat-model select,\n.jp-CodexChat-model-input {\n border: 1px solid var(--cdx-border);\n border-radius: 10px;\n background: var(--cdx-surface);\n color: var(--cdx-text);\n font-size: 12px;\n padding: 6px 10px;\n outline: none;\n}\n\n.jp-CodexChat-model select:focus,\n.jp-CodexChat-model-input:focus {\n border-color: color-mix(in srgb, var(--cdx-accent) 65%, var(--cdx-border));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cdx-accent) 22%, transparent);\n}\n\n.jp-CodexChat-model-input {\n width: 170px;\n}\n\n.jp-CodexChat-toggle {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--cdx-muted);\n padding: 6px 10px;\n border-radius: 12px;\n border: 1px solid var(--cdx-border);\n background: var(--cdx-surface-2);\n}\n\n.jp-CodexChat-toggle input[type="checkbox"] {\n accent-color: var(--cdx-accent);\n}\n\n.jp-CodexStatusPill {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n padding: 0;\n border-radius: 999px;\n border: none;\n background: transparent;\n}\n\n.jp-CodexStatusPill-dot {\n position: relative;\n width: 8px;\n height: 8px;\n border-radius: 999px;\n background: var(--cdx-muted);\n box-shadow: none;\n}\n\n.jp-CodexStatusPill-ready {\n color: color-mix(in srgb, var(--cdx-good) 70%, var(--cdx-text));\n}\n\n.jp-CodexStatusPill-ready .jp-CodexStatusPill-dot {\n background: var(--cdx-good);\n box-shadow: none;\n}\n\n.jp-CodexStatusPill-running {\n color: color-mix(in srgb, var(--cdx-warn) 75%, var(--cdx-text));\n}\n\n.jp-CodexStatusPill-running .jp-CodexStatusPill-dot {\n background: var(--cdx-warn);\n animation: cdx-status-dot 900ms ease-in-out infinite;\n}\n\n.jp-CodexStatusPill-running .jp-CodexStatusPill-dot::after {\n content: '';\n position: absolute;\n inset: -6px;\n border-radius: 999px;\n border: 2px solid color-mix(in srgb, var(--cdx-warn) 70%, transparent);\n opacity: 0;\n transform: scale(0.6);\n animation: cdx-status-ring 900ms ease-out infinite;\n pointer-events: none;\n}\n\n.jp-CodexStatusPill-disconnected {\n color: color-mix(in srgb, var(--cdx-bad) 75%, var(--cdx-text));\n}\n\n.jp-CodexStatusPill-disconnected .jp-CodexStatusPill-dot {\n background: var(--cdx-bad);\n box-shadow: none;\n}\n\n.jp-CodexChat-body {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.jp-CodexChat-activity {\n align-self: stretch;\n border: none;\n background: transparent;\n padding: 0;\n}\n\n.jp-CodexActivitySummary {\n display: flex;\n gap: 6px;\n align-items: flex-start;\n font-family: var(--cdx-mono);\n font-size: 12px;\n line-height: 1.15;\n color: var(--cdx-text);\n padding: 0;\n border-radius: 0;\n background: transparent;\n cursor: pointer;\n user-select: none;\n outline: none;\n}\n\n.jp-CodexActivitySummary::-webkit-details-marker {\n display: none;\n}\n\n.jp-CodexActivitySummary::marker {\n content: '';\n}\n\n.jp-CodexActivitySummaryStatic {\n cursor: default;\n user-select: text;\n}\n\n.jp-CodexChat-activity.is-expandable .jp-CodexActivitySummary:hover {\n background: transparent;\n}\n\n.jp-CodexChat-activity.is-expandable .jp-CodexActivitySummary {\n padding: 2px 0;\n border-radius: 0;\n opacity: 0.72;\n transition: opacity 120ms ease;\n}\n\n.jp-CodexChat-activity.is-expandable .jp-CodexActivitySummary:active {\n opacity: 0.92;\n}\n\n.jp-CodexChat-activity.is-expandable .jp-CodexActivitySummary:hover,\n.jp-CodexChat-activity.is-expandable[open] .jp-CodexActivitySummary {\n opacity: 1;\n}\n\n.jp-CodexActivityLineIcon {\n flex: 0 0 auto;\n width: 14px;\n height: 14px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: color-mix(in srgb, var(--cdx-muted) 80%, var(--cdx-text));\n}\n\n.jp-CodexActivityDot {\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--cdx-accent) 70%, var(--cdx-border));\n}\n\n.jp-CodexActivityLineIcon svg {\n display: block;\n}\n\n.jp-CodexActivityDot.is-idle {\n background: color-mix(in srgb, var(--cdx-muted) 55%, var(--cdx-border));\n}\n\n.jp-CodexActivityLineText {\n min-width: 0;\n word-break: break-word;\n}\n\n.jp-CodexActivityLineTitle {\n font-weight: 400;\n color: var(--cdx-muted);\n}\n\n.jp-CodexActivityLineDetail {\n color: var(--cdx-muted);\n white-space: pre-wrap;\n}\n\n.jp-CodexActivityBody {\n padding: 4px 0 0 20px;\n}\n\n.jp-CodexActivityCode {\n margin: 0;\n padding: 6px 8px;\n border-radius: calc(var(--cdx-radius) - 2px);\n background: color-mix(in srgb, var(--cdx-surface) 88%, var(--cdx-surface-2));\n border: 1px solid color-mix(in srgb, var(--cdx-border) 60%, transparent);\n font-family: var(--jp-code-font-family, var(--cdx-mono)) !important;\n font-size: 10px !important;\n line-height: 1.2 !important;\n white-space: pre-wrap;\n overflow-x: auto;\n}\n\n.jp-CodexActivityCode code {\n font-family: var(--jp-code-font-family, var(--cdx-mono)) !important;\n font-size: inherit !important;\n line-height: inherit !important;\n}\n\n.jp-CodexChat-messages {\n flex: 1;\n min-height: 0;\n overflow: auto;\n /* Extra bottom padding keeps the last message out from under the input's fade overlay. */\n padding: 12px 12px calc(12px + var(--cdx-chat-bottom-fade) + env(safe-area-inset-bottom, 0px));\n display: flex;\n flex-direction: column;\n /* Use a tight baseline gap; expand only for full chat bubbles below. */\n gap: 6px;\n overscroll-behavior: contain;\n scrollbar-gutter: stable both-edges;\n scroll-padding-bottom: calc(12px + var(--cdx-chat-bottom-fade) + env(safe-area-inset-bottom, 0px));\n}\n\n.jp-CodexRunDivider {\n display: flex;\n align-items: center;\n gap: 12px;\n margin: 6px 2px 2px;\n color: var(--cdx-muted);\n font-size: 11px;\n line-height: 1.2;\n user-select: none;\n animation: cdx-fade-up 160ms ease-out both;\n}\n\n.jp-CodexRunDivider::before,\n.jp-CodexRunDivider::after {\n content: '';\n flex: 1 1 auto;\n height: 1px;\n background: color-mix(in srgb, var(--cdx-border) 80%, transparent);\n}\n\n.jp-CodexRunDividerLabel {\n white-space: nowrap;\n color: color-mix(in srgb, var(--cdx-muted) 88%, var(--cdx-text));\n}\n\n.jp-CodexChat-user,\n.jp-CodexChat-assistant {\n /* Restore a roomier rhythm for the main chat bubbles without affecting activity lines. */\n margin-top: 6px;\n}\n\n.jp-CodexChat-message {\n position: relative;\n box-sizing: border-box;\n min-width: 0;\n padding: 10px 12px;\n border-radius: var(--cdx-radius);\n border: 1px solid color-mix(in srgb, var(--cdx-border) 70%, transparent);\n background: var(--cdx-surface);\n box-shadow: none;\n max-width: 100%;\n animation: cdx-fade-up 160ms ease-out both;\n}\n\n.jp-CodexChat-message.jp-CodexChat-activity {\n border: 0;\n background: transparent;\n padding: 0;\n border-radius: 0;\n box-shadow: none;\n}\n\n.jp-CodexChat-user {\n align-self: flex-end;\n background: color-mix(in srgb, var(--cdx-accent) 8%, var(--cdx-surface));\n border: 0;\n /* Indent user bubbles from the left so they remain visually distinct even when wide. */\n margin-left: clamp(24px, 8vw, 96px);\n}\n\n.jp-CodexChat-assistant {\n align-self: flex-start;\n border: 0;\n background: transparent;\n padding-left: 0;\n padding-right: 0;\n}\n\n/* If assistant output is a single fenced code block, remove outer bubble fill/padding. */\n.jp-CodexChat-assistant:has(> .jp-CodexChat-text > .jp-CodexCodeBlockWrap:only-child) {\n background: transparent;\n padding-top: 0;\n padding-bottom: 0;\n}\n\n.jp-CodexChat-assistant:has(> .jp-CodexChat-text > .jp-CodexCodeBlockWrap:only-child)\n > .jp-CodexChat-text\n > .jp-CodexCodeBlockWrap {\n margin-top: 0;\n}\n\n.jp-CodexChat-system {\n align-self: center;\n box-shadow: none;\n border: 0;\n border-color: transparent;\n background: transparent;\n color: var(--cdx-muted);\n text-align: center;\n padding: 2px 0;\n border-radius: 0;\n}\n\n.jp-CodexChat-reconnectNotice {\n align-self: stretch;\n border: 1px solid color-mix(in srgb, var(--cdx-warn) 35%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-warn) 10%, var(--cdx-surface));\n color: color-mix(in srgb, var(--cdx-warn) 62%, var(--cdx-text));\n text-align: left;\n padding: 10px 12px;\n border-radius: var(--cdx-radius-sm);\n}\n\n.jp-CodexChat-system .jp-CodexChat-text {\n /* System notices should read like status text, not a "message bubble". */\n font-size: 12px;\n line-height: 1.4;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n}\n\n.jp-CodexChat-reconnectNotice .jp-CodexChat-text {\n justify-content: flex-start;\n}\n\n.jp-CodexChat-system .jp-CodexChat-text::before {\n content: '';\n width: 14px;\n height: 14px;\n flex: 0 0 14px;\n background-repeat: no-repeat;\n background-size: 14px 14px;\n /* Inline SVG (data URI) so we don't depend on theme icon packs. */\n background-image: url(${u});\n}\n\n.jp-CodexChat-system.is-success .jp-CodexChat-text::before {\n content: none;\n display: none;\n background-image: none;\n}\n\n.jp-CodexChat-system.is-success .jp-CodexChat-text {\n gap: 0;\n}\n\n.jp-CodexReconnectBtn {\n appearance: none;\n margin-top: 8px;\n padding: 6px 10px;\n border: 1px solid color-mix(in srgb, var(--cdx-warn) 45%, var(--cdx-border));\n border-radius: 8px;\n background: var(--cdx-surface);\n color: color-mix(in srgb, var(--cdx-warn) 78%, var(--cdx-text));\n font-size: 12px;\n font-weight: 700;\n line-height: 1.3;\n text-decoration: none;\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease, color 120ms ease;\n}\n\n.jp-CodexReconnectBtn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--cdx-warn) 10%, var(--cdx-surface));\n border-color: color-mix(in srgb, var(--cdx-warn) 60%, var(--cdx-border));\n color: color-mix(in srgb, var(--cdx-warn) 88%, var(--cdx-text));\n}\n\n.jp-CodexReconnectBtn:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n}\n\n.jp-CodexChat-role {\n display: none;\n font-family: var(--cdx-mono);\n font-size: 11px;\n letter-spacing: 0.02em;\n color: var(--cdx-muted);\n margin-bottom: 6px;\n}\n\n.jp-CodexChat {\n --jp-code-font-size: 13px;\n}\n\n.jp-CodexChat-text {\n font-size: var(--jp-code-font-size);\n line-height: 1.55;\n color: inherit;\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n\n.jp-CodexChat-text code,\n.jp-CodexChat-text pre,\n.jp-CodexChat-text pre code {\n font-size: var(--jp-code-font-size);\n}\n\n.jp-CodexChat-attachments {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 8px;\n}\n\n.jp-CodexChat-selectionToggle {\n appearance: none;\n -webkit-appearance: none;\n box-sizing: border-box;\n position: absolute;\n right: calc(var(--cdx-selection-btn-size, 2em) * -0.14);\n bottom: calc(var(--cdx-selection-btn-size, 2em) * -0.36);\n z-index: 1;\n width: var(--cdx-selection-btn-size, 2em) !important;\n height: var(--cdx-selection-btn-size, 2em) !important;\n min-width: var(--cdx-selection-btn-size, 2em) !important;\n min-height: var(--cdx-selection-btn-size, 2em) !important;\n max-width: var(--cdx-selection-btn-size, 2em) !important;\n max-height: var(--cdx-selection-btn-size, 2em) !important;\n border-radius: 50% !important;\n overflow: hidden;\n border: 2px solid color-mix(in srgb, var(--cdx-surface) 94%, #ffffff);\n background: #101010;\n color: #ffffff;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n line-height: 0;\n font-size: calc(var(--cdx-selection-btn-size, 2em) * 0.48);\n cursor: pointer;\n box-shadow: 0 8px 22px rgba(10, 10, 10, 0.3);\n opacity: 1;\n transition: background 120ms ease, border-color 120ms ease, color 120ms ease, transform 120ms ease,\n opacity 120ms ease;\n}\n\n.jp-CodexChat-selectionToggle svg {\n display: block;\n transition: transform 120ms ease;\n}\n\n.jp-CodexChat-selectionToggle:hover {\n background: #1a1a1a;\n border-color: color-mix(in srgb, #ffffff 94%, var(--cdx-border));\n transform: translateY(-1px);\n}\n\n.jp-CodexChat-selectionToggle.is-open {\n background: #000000;\n border-color: #ffffff;\n}\n\n.jp-CodexChat-selectionToggle.is-open svg {\n transform: rotate(45deg);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .jp-CodexChat-user.has-selection-preview .jp-CodexChat-selectionToggle {\n opacity: 0;\n pointer-events: none;\n transform: translateY(2px) scale(0.94);\n }\n\n .jp-CodexChat-user.has-selection-preview:hover .jp-CodexChat-selectionToggle,\n .jp-CodexChat-user.has-selection-preview:focus-within .jp-CodexChat-selectionToggle,\n .jp-CodexChat-user.has-selection-preview.is-selection-open .jp-CodexChat-selectionToggle {\n opacity: 1;\n pointer-events: auto;\n transform: translateY(0) scale(1);\n }\n\n .jp-CodexChat-user.has-selection-preview .jp-CodexChat-selectionToggle:hover {\n transform: translateY(-1px) scale(1);\n }\n}\n\n.jp-CodexChat-selectionCard {\n margin-top: 0;\n width: auto;\n padding: 9px 11px;\n border-radius: 12px;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 72%, transparent);\n background: color-mix(in srgb, var(--cdx-surface-2) 82%, transparent);\n}\n\n.jp-CodexChat-contextSection + .jp-CodexChat-contextSection {\n margin-top: 10px;\n padding-top: 10px;\n border-top: 1px solid color-mix(in srgb, var(--cdx-border) 66%, transparent);\n}\n\n.jp-CodexChat-selectionMeta {\n font-family: var(--cdx-mono);\n font-size: 11px;\n line-height: 1.35;\n color: var(--cdx-muted);\n}\n\n.jp-CodexChat-selectionText {\n margin-top: 4px;\n font-family: var(--cdx-mono);\n font-size: 12px;\n line-height: 1.45;\n color: var(--cdx-text);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n\n.jp-CodexChat-selectionCode {\n margin-top: 6px;\n border-radius: 10px;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 78%, transparent);\n background: color-mix(in srgb, var(--cdx-surface) 86%, var(--cdx-surface-2));\n padding: 8px 10px;\n overflow: auto;\n}\n\n.jp-CodexChat-selectionCode code.hljs {\n white-space: pre;\n}\n\n.jp-CodexChat-message.has-selection-preview {\n overflow: visible;\n}\n\n.jp-CodexChat-user.has-selection-preview {\n --cdx-selection-btn-size: clamp(1.85em, 2.08em, 2.28em);\n margin-bottom: calc(var(--cdx-selection-btn-size) * 0.45);\n}\n\n.jp-CodexChat-attachmentPill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n border-radius: 999px;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 70%, transparent);\n background: color-mix(in srgb, var(--cdx-surface-2) 80%, transparent);\n color: var(--cdx-muted);\n font-family: var(--cdx-mono);\n font-size: 11px;\n line-height: 1;\n}\n\n.jp-CodexChat-attachmentCount {\n color: var(--cdx-text);\n}\n\n.jp-CodexMarkdown {\n white-space: normal;\n}\n\n.jp-CodexMarkdown > :first-child {\n margin-top: 0;\n}\n\n.jp-CodexMarkdown > :last-child {\n margin-bottom: 0;\n}\n\n.jp-CodexMarkdown p {\n margin: 0 0 10px;\n}\n\n.jp-CodexMarkdown ul,\n.jp-CodexMarkdown ol {\n margin: 8px 0 8px 18px;\n padding: 0;\n}\n\n.jp-CodexMarkdown li {\n margin: 4px 0;\n}\n\n.jp-CodexMarkdown a {\n color: var(--cdx-accent);\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n\n.jp-CodexMarkdown code {\n font-family: var(--cdx-mono);\n font-size: 8px;\n color: var(--cdx-code-text);\n padding: 2px 5px;\n margin-left: 2px;\n margin-right: 2px;\n border-radius: 8px;\n border: 0;\n background: color-mix(in srgb, var(--cdx-surface-2) 78%, transparent);\n line-height: 1.45;\n -webkit-box-decoration-break: clone;\n box-decoration-break: clone;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n\n.jp-CodexChat .jp-CodexMarkdown code {\n font-family: var(--cdx-mono) !important;\n font-size: 12px !important;\n}\n\n.jp-CodexMarkdown pre {\n margin: 10px 0 0;\n padding: 10px;\n border-radius: var(--cdx-radius-sm);\n border: 1px solid var(--cdx-border);\n background: color-mix(in srgb, var(--cdx-surface-2) 88%, transparent);\n overflow: auto;\n font-family: var(--cdx-mono);\n font-size: 12px;\n line-height: 1.5;\n}\n\n.jp-CodexMarkdown pre code {\n font-size: inherit;\n line-height: inherit;\n padding: 0;\n border: 0;\n background: transparent;\n white-space: pre;\n}\n\n.jp-CodexMarkdown blockquote {\n margin: 10px 0;\n padding-left: 10px;\n border-left: 3px solid var(--cdx-border);\n color: var(--cdx-muted);\n}\n\n.jp-CodexMarkdown hr {\n border: 0;\n border-top: 1px solid var(--cdx-border);\n margin: 12px 0;\n}\n\n.jp-CodexCodeBlockWrap {\n margin: 10px 0 0;\n border-radius: var(--cdx-radius-sm);\n border: 1px solid var(--cdx-border);\n background: color-mix(in srgb, var(--cdx-surface-2) 88%, transparent);\n overflow: hidden;\n}\n\n.jp-CodexCodeBlockBar {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 10px;\n border-bottom: 1px solid var(--cdx-border);\n background: color-mix(in srgb, var(--cdx-surface) 75%, transparent);\n}\n\n.jp-CodexCodeBlockMeta {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: center;\n}\n\n.jp-CodexCodeBlockLang {\n font-family: var(--cdx-mono);\n font-size: 11px;\n color: var(--cdx-muted);\n}\n\n.jp-CodexCodeBlock {\n margin: 0;\n padding: 10px;\n overflow: auto;\n font-family: var(--cdx-mono);\n font-size: 12px;\n line-height: 1.5;\n color: var(--cdx-code-text);\n}\n\n.jp-CodexCodeBlock code.hljs {\n display: block;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n color: var(--cdx-code-text);\n font-family: inherit;\n white-space: pre;\n}\n\n.jp-CodexCodeBlock .hljs-comment,\n.jp-CodexCodeBlock .hljs-quote {\n color: var(--cdx-code-comment);\n font-style: italic;\n}\n\n.jp-CodexCodeBlock .hljs-keyword,\n.jp-CodexCodeBlock .hljs-selector-tag,\n.jp-CodexCodeBlock .hljs-literal,\n.jp-CodexCodeBlock .hljs-operator {\n color: var(--cdx-code-keyword);\n}\n\n.jp-CodexCodeBlock .hljs-string,\n.jp-CodexCodeBlock .hljs-symbol,\n.jp-CodexCodeBlock .hljs-regexp,\n.jp-CodexCodeBlock .hljs-template-tag,\n.jp-CodexCodeBlock .hljs-template-variable {\n color: var(--cdx-code-string);\n}\n\n.jp-CodexCodeBlock .hljs-number,\n.jp-CodexCodeBlock .hljs-literal {\n color: var(--cdx-code-number);\n}\n\n.jp-CodexCodeBlock .hljs-title,\n.jp-CodexCodeBlock .hljs-title.class_,\n.jp-CodexCodeBlock .hljs-title.class_.inherited__,\n.jp-CodexCodeBlock .hljs-section {\n color: var(--cdx-code-title);\n}\n\n.jp-CodexCodeBlock .hljs-function .hljs-title,\n.jp-CodexCodeBlock .hljs-title.function_,\n.jp-CodexCodeBlock .hljs-built_in,\n.jp-CodexCodeBlock .hljs-builtin-name {\n color: var(--cdx-code-function);\n}\n\n.jp-CodexCodeBlock .hljs-variable,\n.jp-CodexCodeBlock .hljs-attr,\n.jp-CodexCodeBlock .hljs-attribute,\n.jp-CodexCodeBlock .hljs-params {\n color: var(--cdx-code-variable);\n}\n\n.jp-CodexCodeBlock .hljs-meta,\n.jp-CodexCodeBlock .hljs-punctuation {\n color: var(--cdx-code-operator);\n}\n\n/* Fallback for highlight.js token classes we do not theme explicitly. */\n.jp-CodexCodeBlock .hljs-subst,\n.jp-CodexCodeBlock .hljs-type,\n.jp-CodexCodeBlock .hljs-name,\n.jp-CodexCodeBlock .hljs-class,\n.jp-CodexCodeBlock .hljs-tag,\n.jp-CodexCodeBlock .hljs-link {\n color: var(--cdx-code-text);\n}\n\n.jp-CodexCodeBlockCopyBtn {\n opacity: 0;\n pointer-events: none;\n transition: opacity 140ms ease;\n}\n\n.jp-CodexCodeBlockWrap:hover .jp-CodexCodeBlockCopyBtn,\n.jp-CodexCodeBlockWrap:focus-within .jp-CodexCodeBlockCopyBtn {\n opacity: 1;\n pointer-events: auto;\n}\n\n.jp-CodexChat-input {\n position: relative;\n z-index: 1;\n border-top: none;\n padding: 10px;\n background: var(--cdx-bg);\n}\n\n.jp-CodexChat-input::before {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n top: calc(-1 * var(--cdx-chat-bottom-fade));\n height: var(--cdx-chat-bottom-fade);\n background: linear-gradient(\n to bottom,\n color-mix(in srgb, var(--cdx-bg) 0%, transparent),\n var(--cdx-bg)\n );\n pointer-events: none;\n}\n\n.jp-CodexComposer {\n /* Keep composer controls a touch smaller than the header toolbar. */\n --cdx-composer-btn-size: 30px;\n --cdx-composer-btn-radius: 9px;\n --cdx-composer-btn-pad-x: 9px;\n\n border: 1px solid var(--cdx-border);\n border-radius: 16px;\n padding: 10px;\n background: var(--cdx-surface);\n box-shadow: none;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.jp-CodexComposer:focus-within {\n border-color: color-mix(in srgb, var(--cdx-accent) 65%, var(--cdx-border));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cdx-accent) 22%, transparent);\n}\n\n.jp-CodexComposer textarea {\n width: 100%;\n box-sizing: border-box;\n resize: none;\n min-height: calc(1.45em + 8px);\n max-height: calc(1.45em * 3 + 8px);\n border: 0;\n border-radius: 14px;\n padding: 4px 10px;\n font-size: 13px;\n line-height: 1.45;\n background: transparent;\n color: var(--cdx-text);\n outline: none;\n overflow-y: hidden;\n}\n\n.jp-CodexComposer textarea::placeholder {\n color: color-mix(in srgb, var(--cdx-muted) 70%, transparent);\n}\n\n.jp-CodexComposer textarea:disabled {\n opacity: 0.7;\n}\n\n.jp-CodexComposer-cellAttachmentWrap {\n display: flex;\n align-items: center;\n max-height: 0;\n margin-bottom: 0;\n opacity: 0;\n transform: translateY(-4px) scale(0.98);\n transform-origin: left center;\n overflow: hidden;\n pointer-events: none;\n transition: max-height 170ms ease, margin-bottom 170ms ease, opacity 170ms ease, transform 170ms ease;\n}\n\n.jp-CodexComposer-cellAttachmentWrap.is-visible {\n max-height: 32px;\n margin-bottom: 6px;\n opacity: 1;\n transform: translateY(0) scale(1);\n pointer-events: auto;\n}\n\n.jp-CodexComposer-cellAttachment {\n appearance: none;\n -webkit-appearance: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n width: fit-content;\n max-width: 100%;\n min-height: 24px;\n padding: 0 7px 0 6px;\n border-radius: 9999px !important;\n border: 1px solid transparent;\n overflow: hidden;\n background: color-mix(in srgb, var(--cdx-accent) 9%, var(--cdx-surface));\n color: color-mix(in srgb, var(--cdx-accent) 80%, var(--cdx-text));\n font-size: 11px;\n font-weight: 400;\n line-height: 1;\n cursor: pointer;\n transition: background 120ms ease, color 120ms ease, border-color 120ms ease;\n animation: cdx-cell-attachment-in 220ms cubic-bezier(0.2, 0.8, 0.2, 1);\n}\n\n.jp-CodexComposer-cellAttachment:not(.is-off) {\n border-color: color-mix(in srgb, var(--cdx-accent) 42%, var(--cdx-border));\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--cdx-accent) 16%, transparent);\n}\n\n.jp-CodexComposer-cellAttachment.is-off {\n background: color-mix(in srgb, var(--cdx-border) 28%, var(--cdx-surface));\n color: color-mix(in srgb, var(--cdx-text) 72%, var(--cdx-muted));\n}\n\n.jp-CodexComposer-cellAttachment:hover,\n.jp-CodexComposer-cellAttachment:focus-within {\n background: color-mix(in srgb, var(--cdx-accent) 80%, var(--cdx-text));\n color: var(--cdx-surface);\n}\n\n.jp-CodexComposer-cellAttachmentLabel {\n min-width: 0;\n white-space: nowrap;\n}\n\n@keyframes cdx-cell-attachment-in {\n 0% {\n opacity: 0;\n transform: translateY(-4px) scale(0.96);\n }\n 100% {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n.jp-CodexComposer-attachments {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 0 4px;\n}\n\n.jp-CodexComposer-queued {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n margin: 0 2px 4px;\n padding: 4px 8px;\n border: 1px solid color-mix(in srgb, var(--cdx-accent) 30%, var(--cdx-border));\n border-radius: 10px;\n background: color-mix(in srgb, var(--cdx-accent) 10%, var(--cdx-surface));\n color: color-mix(in srgb, var(--cdx-accent) 82%, var(--cdx-text));\n font-size: 11px;\n}\n\n.jp-CodexComposer-queuedLabel {\n flex: 0 0 auto;\n font-weight: 700;\n letter-spacing: 0.01em;\n}\n\n.jp-CodexComposer-queuedText {\n flex: 1 1 auto;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.jp-CodexComposer-queuedRemove {\n appearance: none;\n width: 16px;\n height: 16px;\n padding: 0;\n border-radius: 999px;\n border: 1px solid color-mix(in srgb, var(--cdx-accent) 35%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-surface) 84%, transparent);\n color: inherit;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease;\n}\n\n.jp-CodexComposer-queuedRemove:hover:not(:disabled) {\n background: var(--cdx-surface);\n border-color: color-mix(in srgb, var(--cdx-accent) 55%, var(--cdx-border));\n}\n\n.jp-CodexComposer-attachment {\n position: relative;\n width: 64px;\n height: 64px;\n border-radius: 14px;\n border: 1px solid var(--cdx-border);\n background: var(--cdx-surface-2);\n overflow: hidden;\n}\n\n.jp-CodexComposer-attachment img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n\n.jp-CodexComposer-attachmentRemove {\n appearance: none;\n position: absolute;\n top: 6px;\n right: 6px;\n width: 26px;\n height: 26px;\n border-radius: 10px;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 85%, transparent);\n background: color-mix(in srgb, var(--cdx-surface) 70%, transparent);\n color: var(--cdx-text);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease;\n}\n\n.jp-CodexComposer-attachmentRemove:hover:not(:disabled) {\n background: var(--cdx-surface);\n border-color: color-mix(in srgb, var(--cdx-accent) 25%, var(--cdx-border));\n}\n\n.jp-CodexComposer-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding-top: 0;\n}\n\n.jp-CodexComposer-toolbarLeft {\n display: flex;\n align-items: center;\n gap: 2px;\n flex-wrap: wrap;\n min-width: 0;\n flex: 1;\n}\n\n.jp-CodexComposer-toolbarRight {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-shrink: 0;\n}\n\n.jp-CodexContextWrap {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.jp-CodexContextBtn {\n color: color-mix(in srgb, var(--cdx-muted) 90%, var(--cdx-text));\n}\n\n.jp-CodexContextBtn.is-stale:not(:disabled) {\n opacity: 0.72;\n}\n\n.jp-CodexContextPopover {\n min-width: 176px;\n width: fit-content;\n z-index: 35;\n max-width: min(280px, calc(100vw - 24px));\n border-radius: 12px;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 85%, transparent);\n background: color-mix(in srgb, var(--cdx-surface) 94%, transparent);\n box-shadow: 0 14px 30px rgba(2, 6, 23, 0.2);\n backdrop-filter: blur(10px);\n padding: 8px 9px;\n display: grid;\n gap: 6px;\n}\n\n.jp-CodexContextPopoverTitle {\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.01em;\n color: var(--cdx-text);\n}\n\n.jp-CodexContextPopoverRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n font-size: 11px;\n color: var(--cdx-muted);\n}\n\n.jp-CodexContextPopoverRow strong {\n color: var(--cdx-text);\n font-family: var(--cdx-mono);\n font-size: 11px;\n font-weight: 600;\n}\n\n.jp-CodexContextPopoverMeta {\n padding-top: 2px;\n border-top: 1px solid color-mix(in srgb, var(--cdx-border) 80%, transparent);\n font-size: 10px;\n color: color-mix(in srgb, var(--cdx-muted) 90%, var(--cdx-text));\n}\n\n.jp-CodexComposer-hint {\n font-size: 11px;\n color: var(--cdx-muted);\n white-space: nowrap;\n}\n\n@container (max-width: 420px) {\n .jp-CodexComposer-hint {\n display: none;\n }\n}\n\n@media (max-width: 520px) {\n .jp-CodexComposer-hint {\n display: none;\n }\n}\n\n.jp-CodexIconBtn {\n appearance: none;\n width: var(--cdx-composer-btn-size, 30px);\n height: var(--cdx-composer-btn-size, 30px);\n border-radius: var(--cdx-composer-btn-radius, 9px);\n border: 1px solid transparent;\n background: transparent;\n color: var(--cdx-muted);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease, color 120ms ease;\n}\n\n.jp-CodexIconBtn:hover:not(:disabled) {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n color: var(--cdx-text);\n}\n\n.jp-CodexIconBtn:active:not(:disabled) {\n background: var(--cdx-surface-2);\n}\n\n.jp-CodexIconBtn:focus-visible {\n outline: none;\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n color: var(--cdx-text);\n box-shadow: none;\n}\n\n.jp-CodexIconBtn:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n}\n\n.jp-CodexIconBtn.is-active {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n color: var(--cdx-text);\n}\n\n.jp-CodexIconBtn.is-open {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n color: var(--cdx-text);\n}\n\n.jp-CodexMenuWrap {\n position: relative;\n display: inline-flex;\n align-items: center;\n overflow: visible;\n}\n\n.jp-CodexModelWrap {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n.jp-CodexModelBtn {\n appearance: none;\n height: var(--cdx-composer-btn-size, 30px);\n width: auto;\n max-width: 240px;\n min-width: 0;\n padding: 0 var(--cdx-composer-btn-pad-x, 9px);\n border-radius: var(--cdx-composer-btn-radius, 9px);\n border: 1px solid transparent;\n background: transparent;\n color: var(--cdx-text);\n display: inline-flex;\n align-items: center;\n justify-content: flex-start;\n cursor: pointer;\n font-size: 12px;\n font-weight: 400;\n transition: background 120ms ease, border-color 120ms ease, color 120ms ease;\n}\n\n.jp-CodexModelBtn:hover:not(:disabled) {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n}\n\n.jp-CodexModelBtn:active:not(:disabled) {\n background: var(--cdx-surface-2);\n}\n\n.jp-CodexModelBtn:focus-visible {\n outline: none;\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n box-shadow: none;\n}\n\n.jp-CodexModelBtn:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n}\n\n.jp-CodexModelBtn.is-open {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n}\n\n.jp-CodexModelBtn-label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.jp-CodexMenuWrap-right {\n justify-content: flex-end;\n}\n\n.jp-CodexMenu {\n position: absolute;\n left: 0;\n bottom: calc(100% + 10px);\n z-index: 20;\n min-width: 240px;\n max-width: min(320px, calc(100vw - 24px));\n transform-origin: bottom left;\n border-radius: 14px;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 85%, transparent);\n background: color-mix(in srgb, var(--cdx-surface) 92%, transparent);\n box-shadow: 0 14px 36px rgba(2, 6, 23, 0.16);\n padding: 6px;\n backdrop-filter: blur(10px);\n animation: cdx-menu-in 120ms ease-out both;\n}\n\n@supports (width: 1cqw) {\n .jp-CodexMenu {\n max-width: min(320px, calc(100cqw - 24px));\n }\n}\n\n.jp-CodexMenu--right {\n left: auto;\n right: 0;\n transform-origin: bottom right;\n}\n\n.jp-CodexMenuItem {\n appearance: none;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding: 9px 10px;\n border-radius: 12px;\n border: 1px solid transparent;\n background: transparent;\n color: var(--cdx-text);\n cursor: pointer;\n text-align: left;\n font-size: 12px;\n font-weight: 400;\n transition: background 120ms ease, border-color 120ms ease, color 120ms ease;\n}\n\n.jp-CodexMenuItem:hover {\n background: var(--cdx-surface-2);\n border-color: color-mix(in srgb, var(--cdx-border) 85%, transparent);\n}\n\n.jp-CodexMenuItem:focus-visible {\n outline: none;\n border-color: color-mix(in srgb, var(--cdx-accent) 45%, var(--cdx-border));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cdx-accent) 18%, transparent);\n}\n\n.jp-CodexMenuItem.is-active {\n background: color-mix(in srgb, var(--cdx-accent) 10%, var(--cdx-surface));\n border-color: color-mix(in srgb, var(--cdx-accent) 28%, var(--cdx-border));\n}\n\n.jp-CodexMenuItemLabel {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.jp-CodexMenuCheck {\n flex: 0 0 auto;\n color: color-mix(in srgb, var(--cdx-accent) 80%, var(--cdx-text));\n}\n\n.jp-CodexMenuDivider {\n height: 1px;\n margin: 6px;\n background: color-mix(in srgb, var(--cdx-border) 85%, transparent);\n}\n\n.jp-CodexMenuCustom {\n padding: 6px;\n display: grid;\n gap: 6px;\n}\n\n.jp-CodexMenuCustomLabel {\n font-size: 11px;\n font-weight: 700;\n color: var(--cdx-muted);\n}\n\n.jp-CodexMenuInput {\n width: 100%;\n border: 1px solid var(--cdx-border);\n border-radius: 12px;\n background: var(--cdx-surface);\n color: var(--cdx-text);\n font-size: 12px;\n padding: 9px 10px;\n outline: none;\n}\n\n.jp-CodexMenuInput:focus {\n border-color: color-mix(in srgb, var(--cdx-accent) 65%, var(--cdx-border));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cdx-accent) 18%, transparent);\n}\n\n.jp-CodexMenuPortal {\n position: fixed;\n bottom: auto;\n right: auto;\n z-index: 10000;\n max-width: min(360px, calc(100vw - 24px));\n\n /* Portal menus live outside \`.jp-CodexPanel\`, so they must re-declare these CSS vars. */\n --cdx-bg: var(--jp-layout-color1, #ffffff);\n --cdx-surface: var(--jp-layout-color0, #ffffff);\n --cdx-surface-2: var(--jp-layout-color2, #f3f4f6);\n --cdx-border: var(--jp-border-color2, rgba(148, 163, 184, 0.35));\n --cdx-text: var(--jp-ui-font-color0, #0f172a);\n --cdx-muted: var(--jp-ui-font-color2, #64748b);\n --cdx-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",\n "Courier New", monospace;\n\n --cdx-accent: var(--jupyterlab-codex-accent, #6E80FF);\n --cdx-good: var(--jp-success-color1, #22c55e);\n --cdx-warn: var(--jp-warn-color1, #f97316);\n --cdx-bad: var(--jp-error-color1, #ef4444);\n --cdx-code-text: var(--cdx-text);\n --cdx-code-comment: #6b7280;\n --cdx-code-keyword: #7c3aed;\n --cdx-code-string: #0f766e;\n --cdx-code-number: #b45309;\n --cdx-code-function: #0f766e;\n --cdx-code-variable: #1d4ed8;\n --cdx-code-operator: #334155;\n --cdx-code-title: #0f172a;\n\n --cdx-radius: 14px;\n --cdx-radius-sm: 10px;\n\n font-family: var(\n --jp-ui-font-family,\n system-ui,\n -apple-system,\n Segoe UI,\n Roboto,\n Helvetica,\n Arial,\n sans-serif\n );\n color: var(--cdx-text);\n}\n\n.jp-mod-theme-light .jp-CodexMenuPortal {\n --cdx-code-text: #0f172a;\n --cdx-code-comment: #6b7280;\n --cdx-code-keyword: #7c3aed;\n --cdx-code-string: #0f766e;\n --cdx-code-number: #b45309;\n --cdx-code-function: #0f766e;\n --cdx-code-variable: #1d4ed8;\n --cdx-code-operator: #334155;\n --cdx-code-title: #0f172a;\n}\n\n.jp-mod-theme-dark .jp-CodexMenuPortal {\n --cdx-code-text: #e2e8f0;\n --cdx-code-comment: #94a3b8;\n --cdx-code-keyword: #c084fc;\n --cdx-code-string: #5eead4;\n --cdx-code-number: #fbbf24;\n --cdx-code-function: #4ade80;\n --cdx-code-variable: #93c5fd;\n --cdx-code-operator: #cbd5e1;\n --cdx-code-title: #f8fafc;\n}\n\n.jp-CodexMenu.jp-CodexChat-selectionPopover {\n min-width: min(18ch, calc(100vw - 24px)) !important;\n width: fit-content !important;\n max-width: min(600px, calc(100vw - 24px)) !important;\n max-height: calc(100vh - 48px) !important;\n max-height: calc(100dvh - 48px) !important;\n padding: 8px !important;\n overflow: auto !important;\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n}\n\n.jp-CodexMenu.jp-CodexCellAttachmentPopoverMenu {\n min-width: 220px;\n width: fit-content;\n max-width: min(320px, calc(100vw - 24px));\n padding: 8px;\n box-shadow: 0 12px 26px rgba(2, 6, 23, 0.16);\n}\n\n.jp-CodexMenu.jp-CodexContextPopover {\n min-width: 176px;\n width: fit-content;\n max-width: min(280px, calc(100vw - 24px));\n border-radius: 12px;\n background: color-mix(in srgb, var(--cdx-surface) 94%, transparent);\n box-shadow: 0 14px 30px rgba(2, 6, 23, 0.2);\n padding: 8px 9px;\n}\n\n.jp-CodexCellAttachmentPopoverCard {\n display: grid;\n gap: 6px;\n padding: 2px;\n}\n\n.jp-CodexCellAttachmentPopoverTitle {\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.01em;\n color: var(--cdx-text);\n}\n\n.jp-CodexCellAttachmentPopoverRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n font-size: 11px;\n color: var(--cdx-muted);\n}\n\n.jp-CodexCellAttachmentPopoverRow strong {\n color: var(--cdx-text);\n font-family: var(--cdx-mono);\n font-size: 11px;\n font-weight: 700;\n}\n\n.jp-CodexCellAttachmentDot {\n width: 9px;\n height: 9px;\n border-radius: 999px;\n display: inline-block;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 80%, transparent);\n}\n\n.jp-CodexCellAttachmentDot.is-on {\n background: color-mix(in srgb, var(--cdx-good) 88%, var(--cdx-text));\n border-color: color-mix(in srgb, var(--cdx-good) 48%, var(--cdx-border));\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--cdx-good) 18%, transparent);\n}\n\n.jp-CodexCellAttachmentDot.is-off {\n background: color-mix(in srgb, var(--cdx-muted) 42%, var(--cdx-surface));\n border-color: color-mix(in srgb, var(--cdx-border) 88%, transparent);\n}\n\n.jp-CodexUsageBtn {\n position: relative;\n}\n\n.jp-CodexPermissionBtn.is-danger:not(:disabled) {\n border-color: transparent;\n background: transparent;\n color: color-mix(in srgb, var(--cdx-bad) 70%, var(--cdx-text));\n}\n\n.jp-CodexPermissionBtn.is-danger:hover:not(:disabled),\n.jp-CodexPermissionBtn.is-danger.is-open:not(:disabled) {\n border-color: color-mix(in srgb, var(--cdx-bad) 55%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-bad) 10%, var(--cdx-surface));\n color: color-mix(in srgb, var(--cdx-bad) 85%, var(--cdx-text));\n}\n\n.jp-CodexPermissionBtn.is-warning:not(:disabled) {\n border-color: transparent;\n background: transparent;\n color: color-mix(in srgb, #f5b301 72%, var(--cdx-text));\n}\n\n.jp-CodexPermissionBtn.is-warning:hover:not(:disabled),\n.jp-CodexPermissionBtn.is-warning.is-open:not(:disabled) {\n border-color: color-mix(in srgb, #f5b301 55%, var(--cdx-border));\n background: color-mix(in srgb, #f5b301 14%, var(--cdx-surface));\n color: color-mix(in srgb, #f5b301 84%, var(--cdx-text));\n}\n\n.jp-CodexUsageBtn.is-stale:not(:disabled),\n.jp-CodexUsageBtn.is-stale:hover:not(:disabled),\n.jp-CodexUsageBtn.is-stale.is-open:not(:disabled) {\n opacity: 0.72;\n color: color-mix(in srgb, var(--cdx-muted) 85%, var(--cdx-border));\n}\n\n.jp-CodexUsageBtn.is-overdue:not(:disabled),\n.jp-CodexUsageBtn.is-overdue:hover:not(:disabled),\n.jp-CodexUsageBtn.is-overdue.is-open:not(:disabled) {\n border-color: color-mix(in srgb, var(--cdx-warn) 40%, var(--cdx-border));\n}\n\n.jp-CodexUsagePopover {\n min-width: 0;\n width: min(300px, calc(100vw - 24px));\n max-width: min(320px, calc(100vw - 24px));\n padding: 8px;\n}\n\n.jp-CodexUsageNotice {\n margin: 2px;\n padding: 8px 10px;\n border-radius: 12px;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 85%, transparent);\n background: color-mix(in srgb, var(--cdx-surface-2) 85%, transparent);\n color: var(--cdx-muted);\n font-size: 11px;\n line-height: 1.25;\n}\n\n.jp-CodexUsageNotice.is-stale {\n border-color: color-mix(in srgb, var(--cdx-warn) 25%, var(--cdx-border));\n}\n\n.jp-CodexUsageNotice.is-overdue {\n border-color: color-mix(in srgb, var(--cdx-warn) 55%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-warn) 10%, var(--cdx-surface));\n color: color-mix(in srgb, var(--cdx-warn) 75%, var(--cdx-text));\n}\n\n.jp-CodexUsageNoticeTitle {\n font-weight: 800;\n color: var(--cdx-text);\n}\n\n.jp-CodexUsageNotice.is-overdue .jp-CodexUsageNoticeTitle {\n color: color-mix(in srgb, var(--cdx-warn) 85%, var(--cdx-text));\n}\n\n.jp-CodexUsageNoticeBody {\n margin-top: 2px;\n}\n\n.jp-CodexUsageSection {\n padding: 6px;\n display: grid;\n gap: 6px;\n}\n\n.jp-CodexUsageSectionTop {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 10px;\n}\n\n.jp-CodexUsageSectionTitle {\n font-size: 12px;\n font-weight: 750;\n color: var(--cdx-text);\n}\n\n.jp-CodexUsageSectionReset {\n font-size: 11px;\n color: var(--cdx-muted);\n white-space: nowrap;\n}\n\n.jp-CodexUsageBar {\n height: 8px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--cdx-border) 80%, transparent);\n overflow: hidden;\n}\n\n.jp-CodexUsageBarFill {\n height: 100%;\n width: 0%;\n border-radius: 999px;\n background: color-mix(in srgb, var(--cdx-accent) 70%, var(--cdx-good));\n transition: width 160ms ease;\n}\n\n.jp-CodexUsageBarFill.is-stale {\n background: color-mix(in srgb, var(--cdx-muted) 65%, var(--cdx-border));\n}\n\n.jp-CodexUsageMeta {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n color: var(--cdx-muted);\n font-size: 11px;\n}\n\n.jp-CodexUsageMetaLeft {\n font-weight: 750;\n}\n\n.jp-CodexUsageMetaRight {\n opacity: 0.9;\n white-space: nowrap;\n}\n\n.jp-CodexUsageFooter {\n padding: 4px 10px 2px;\n font-size: 11px;\n color: var(--cdx-muted);\n}\n\n.jp-CodexComposerSelectWrap {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.jp-CodexComposerSelectWrap::after {\n content: '';\n position: absolute;\n right: 10px;\n width: 7px;\n height: 7px;\n border-right: 2px solid var(--cdx-muted);\n border-bottom: 2px solid var(--cdx-muted);\n transform: rotate(45deg);\n pointer-events: none;\n}\n\n.jp-CodexComposerSelect {\n appearance: none;\n border: 1px solid var(--cdx-border);\n border-radius: 10px;\n background: var(--cdx-surface-2);\n color: var(--cdx-text);\n font-size: 12px;\n font-weight: 650;\n padding: 7px 26px 7px 10px;\n outline: none;\n max-width: 220px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.jp-CodexComposerSelect:hover {\n background: var(--cdx-surface);\n}\n\n.jp-CodexComposerSelect:focus {\n border-color: color-mix(in srgb, var(--cdx-accent) 65%, var(--cdx-border));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cdx-accent) 22%, transparent);\n background: var(--cdx-surface);\n}\n\n.jp-CodexComposerModelInput {\n border: 1px solid var(--cdx-border);\n border-radius: 999px;\n background: var(--cdx-surface);\n color: var(--cdx-text);\n font-size: 12px;\n padding: 7px 10px;\n width: 190px;\n max-width: 100%;\n outline: none;\n}\n\n.jp-CodexComposerModelInput:focus {\n border-color: color-mix(in srgb, var(--cdx-accent) 65%, var(--cdx-border));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cdx-accent) 22%, transparent);\n}\n\n.jp-CodexSendBtn {\n appearance: none;\n padding: 0;\n width: var(--cdx-composer-btn-size, 30px);\n height: var(--cdx-composer-btn-size, 30px);\n min-width: var(--cdx-composer-btn-size, 30px);\n min-height: var(--cdx-composer-btn-size, 30px);\n max-width: var(--cdx-composer-btn-size, 30px);\n max-height: var(--cdx-composer-btn-size, 30px);\n flex: 0 0 var(--cdx-composer-btn-size, 30px);\n border-radius: 9999px !important;\n overflow: hidden;\n border: 1px solid var(--cdx-border);\n background: var(--cdx-surface-2);\n color: var(--cdx-muted);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease, box-shadow 120ms ease, color 120ms ease;\n}\n\n.jp-CodexSendBtn:not(:disabled) {\n border-color: color-mix(in srgb, #000000 80%, var(--cdx-border));\n background: #000000;\n color: #ffffff;\n}\n\n.jp-CodexSendBtn.is-queue:not(:disabled) {\n border-color: color-mix(in srgb, var(--cdx-accent) 70%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-accent) 92%, #0f172a);\n color: #ffffff;\n}\n\n.jp-CodexSendBtn:hover:not(:disabled) {\n border-color: color-mix(in srgb, #000000 92%, var(--cdx-border));\n background: color-mix(in srgb, #000000 92%, #222222);\n}\n\n.jp-CodexSendBtn.is-queue:hover:not(:disabled) {\n border-color: color-mix(in srgb, var(--cdx-accent) 86%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-accent) 96%, #0f172a);\n}\n\n.jp-CodexSendBtn:active:not(:disabled) {\n background: color-mix(in srgb, #000000 88%, #222222);\n}\n\n.jp-CodexSendBtn.is-queue:active:not(:disabled) {\n background: color-mix(in srgb, var(--cdx-accent) 88%, #0f172a);\n}\n\n.jp-CodexSendBtn:focus-visible {\n outline: none;\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cdx-accent) 22%, transparent);\n}\n\n.jp-CodexSendBtn:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.jp-CodexSendBtn.is-stop:not(:disabled) {\n border-color: color-mix(in srgb, #000000 80%, var(--cdx-border));\n background: #000000;\n color: #ffffff;\n}\n\n.jp-CodexSendBtn.is-stop:hover:not(:disabled) {\n border-color: color-mix(in srgb, #000000 92%, var(--cdx-border));\n background: color-mix(in srgb, #000000 92%, #222222);\n}\n\n.jp-CodexSendBtn.is-stop:active:not(:disabled) {\n background: color-mix(in srgb, #000000 88%, #222222);\n}\n\n.jp-CodexBtn {\n appearance: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--cdx-border);\n border-radius: 10px;\n padding: 6px 10px;\n min-height: 28px;\n background: var(--cdx-surface);\n color: var(--cdx-text);\n font-size: 12px;\n font-weight: 650;\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease, box-shadow 120ms ease, color 120ms ease;\n}\n\n.jp-CodexBtn:hover:not(:disabled) {\n background: var(--cdx-surface-2);\n border-color: color-mix(in srgb, var(--cdx-accent) 20%, var(--cdx-border));\n}\n\n.jp-CodexBtn:active:not(:disabled) {\n background: var(--cdx-surface);\n}\n\n.jp-CodexBtn:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n box-shadow: none;\n}\n\n.jp-CodexBtn-xs {\n padding: 6px 10px;\n font-size: 11px;\n min-height: 26px;\n}\n\n.jp-CodexBtn-ghost {\n background: transparent;\n border-color: transparent;\n}\n\n.jp-CodexBtn-ghost:hover:not(:disabled) {\n background: var(--cdx-surface-2);\n border-color: var(--cdx-border);\n}\n\n.jp-CodexBtn-primary {\n border-color: color-mix(in srgb, var(--cdx-accent) 80%, var(--cdx-border));\n background: var(--cdx-accent);\n color: #ffffff;\n}\n\n.jp-CodexBtn-primary:hover {\n border-color: color-mix(in srgb, var(--cdx-accent) 92%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-accent) 92%, #000000);\n}\n\n.jp-CodexBtn-danger {\n border-color: color-mix(in srgb, var(--cdx-bad) 55%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-bad) 10%, var(--cdx-surface));\n}\n\n.jp-CodexBtn-danger:hover {\n border-color: color-mix(in srgb, var(--cdx-bad) 70%, var(--cdx-border));\n background: color-mix(in srgb, var(--cdx-bad) 14%, var(--cdx-surface));\n}\n\n.jp-CodexJumpBar {\n position: absolute;\n left: 0;\n right: 0;\n top: -52px;\n display: flex;\n justify-content: center;\n pointer-events: none;\n z-index: 2;\n opacity: 0;\n transform: translateY(6px);\n visibility: hidden;\n transition:\n opacity 140ms ease,\n transform 180ms cubic-bezier(0.2, 0.9, 0.2, 1),\n visibility 0s linear 180ms;\n}\n\n.jp-CodexJumpBar.is-visible {\n opacity: 1;\n transform: translateY(0);\n visibility: visible;\n transition:\n opacity 160ms ease,\n transform 200ms cubic-bezier(0.2, 0.9, 0.2, 1),\n visibility 0s linear 0s;\n}\n\n.jp-CodexJumpBar > * {\n pointer-events: auto;\n}\n\n.jp-CodexJumpBar:not(.is-visible) > * {\n pointer-events: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .jp-CodexJumpBar {\n transition: none;\n transform: none;\n }\n}\n\n.jp-CodexJumpBar .jp-CodexJumpToLatestBtn {\n appearance: none;\n -webkit-appearance: none;\n box-sizing: border-box;\n width: 32px !important;\n height: 32px !important;\n min-width: 32px !important;\n min-height: 32px !important;\n max-width: 32px !important;\n max-height: 32px !important;\n border-radius: 50% !important;\n overflow: hidden;\n border: 1px solid color-mix(in srgb, var(--cdx-border) 55%, transparent) !important;\n background: var(--cdx-surface) !important;\n color: color-mix(in srgb, var(--cdx-fg) 92%, var(--cdx-muted));\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0 !important;\n cursor: pointer;\n line-height: 0;\n transition: transform 120ms ease, background 120ms ease, border-color 120ms ease;\n}\n\n.jp-CodexJumpBar .jp-CodexJumpToLatestBtn svg {\n display: block;\n}\n\n.jp-CodexJumpBar .jp-CodexJumpToLatestBtn:hover {\n background: color-mix(in srgb, var(--cdx-surface) 88%, #ffffff);\n border-color: color-mix(in srgb, var(--cdx-border) 75%, transparent);\n transform: translateY(-1px);\n}\n\n.jp-CodexJumpBar .jp-CodexJumpToLatestBtn:active {\n transform: translateY(0);\n}\n\n.jp-CodexJumpBar .jp-CodexJumpToLatestBtn:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--cdx-accent) 55%, transparent);\n outline-offset: 3px;\n}\n\n.jp-CodexChat-loading {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n color: var(--cdx-muted);\n align-self: flex-start;\n border-radius: var(--cdx-radius);\n border: 1px solid color-mix(in srgb, var(--cdx-border) 70%, transparent);\n background: var(--cdx-surface);\n max-width: 100%;\n}\n\n.jp-CodexChat-loading.is-reasoning {\n background: color-mix(in srgb, var(--cdx-accent) 6%, var(--cdx-surface-2));\n border-style: dashed;\n border-color: color-mix(in srgb, var(--cdx-accent) 24%, var(--cdx-border));\n color: color-mix(in srgb, var(--cdx-accent) 30%, var(--cdx-muted));\n}\n\n.jp-CodexChat-loading.is-reasoning .jp-CodexChat-loading-dots span {\n background: color-mix(in srgb, var(--cdx-accent) 55%, var(--cdx-muted));\n}\n\n.jp-CodexChat-loading.is-reasoning .jp-CodexChat-loadingText {\n color: color-mix(in srgb, var(--cdx-accent) 35%, var(--cdx-muted));\n}\n\n.jp-CodexChat-loading-dots {\n display: flex;\n gap: 8px;\n}\n\n.jp-CodexChat-loading-dots span {\n width: 8px;\n height: 8px;\n border-radius: 999px;\n background: var(--cdx-accent);\n animation: cdx-bounce 1.4s infinite ease-in-out both;\n}\n\n.jp-CodexChat-loading-dots span:nth-child(1) {\n animation-delay: -0.32s;\n}\n\n.jp-CodexChat-loading-dots span:nth-child(2) {\n animation-delay: -0.16s;\n}\n\n@keyframes cdx-bounce {\n 0%,\n 80%,\n 100% {\n transform: scale(0);\n opacity: 0.55;\n }\n 40% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes cdx-fade-up {\n from {\n opacity: 0;\n transform: translateY(6px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes cdx-pulse {\n 0%,\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(1.08);\n opacity: 0.8;\n }\n}\n\n@keyframes cdx-status-dot {\n 0%,\n 100% {\n transform: scale(1);\n filter: brightness(1);\n }\n 50% {\n transform: scale(1.22);\n filter: brightness(1.15);\n }\n}\n\n@keyframes cdx-status-ring {\n 0% {\n opacity: 0;\n transform: scale(0.55);\n }\n 20% {\n opacity: 0.75;\n }\n 100% {\n opacity: 0;\n transform: scale(1.15);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .jp-CodexStatusPill-running .jp-CodexStatusPill-dot,\n .jp-CodexStatusPill-running .jp-CodexStatusPill-dot::after {\n animation: none;\n }\n}\n\n@keyframes cdx-menu-in {\n from {\n opacity: 0;\n transform: translateY(6px) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n`,""]);const x=p},3915(e){e.exports="data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cpath%20fill%3D%27%23f5b301%27%20d%3D%27M1%2021h22L12%202%201%2021z%27/%3E%3Cpath%20fill%3D%27%235a4b00%27%20d%3D%27M13%2016h-2v-6h2v6zm0%204h-2v-2h2v2z%27/%3E%3C/svg%3E"}}]);
@@ -1 +1 @@
1
- var _JUPYTERLAB;(()=>{"use strict";var e,r,t,a,n,o,i,u,l,d,s,f,c,p,h,b,v,m,g,y,w,j,k,x={1387(e,r,t){var a={"./index":()=>Promise.all([t.e(525),t.e(737)]).then(()=>()=>t(6737)),"./extension":()=>Promise.all([t.e(525),t.e(737)]).then(()=>()=>t(6737))},n=(e,r)=>(t.R=r,r=t.o(a,e)?a[e]():Promise.resolve().then(()=>{throw new Error('Module "'+e+'" does not exist in container.')}),t.R=void 0,r),o=(e,r)=>{if(t.S){var a="default",n=t.S[a];if(n&&n!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[a]=e,t.I(a,r)}};t.d(r,{get:()=>n,init:()=>o})}},S={};function P(e){var r=S[e];if(void 0!==r)return r.exports;var t=S[e]={id:e,exports:{}};return x[e](t,t.exports,P),t.exports}P.m=x,P.c=S,P.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return P.d(r,{a:r}),r},P.d=(e,r)=>{for(var t in r)P.o(r,t)&&!P.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},P.f={},P.e=e=>Promise.all(Object.keys(P.f).reduce((r,t)=>(P.f[t](e,r),r),[])),P.u=e=>e+"."+{124:"ac0734653995d3fe00f2",364:"15acf07c0b6852a40fd9",489:"ef138a7e916c5b465543",525:"224526d045c727069de6",737:"e7de3ad9dd6ded798340",997:"213b5a946a1c8e2b1bba"}[e]+".js?v="+{124:"ac0734653995d3fe00f2",364:"15acf07c0b6852a40fd9",489:"ef138a7e916c5b465543",525:"224526d045c727069de6",737:"e7de3ad9dd6ded798340",997:"213b5a946a1c8e2b1bba"}[e],P.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),P.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="jupyterlab-codex-sidebar:",P.l=(t,a,n,o)=>{if(e[t])e[t].push(a);else{var i,u;if(void 0!==n)for(var l=document.getElementsByTagName("script"),d=0;d<l.length;d++){var s=l[d];if(s.getAttribute("src")==t||s.getAttribute("data-webpack")==r+n){i=s;break}}i||(u=!0,(i=document.createElement("script")).charset="utf-8",P.nc&&i.setAttribute("nonce",P.nc),i.setAttribute("data-webpack",r+n),i.src=t),e[t]=[a];var f=(r,a)=>{i.onerror=i.onload=null,clearTimeout(c);var n=e[t];if(delete e[t],i.parentNode&&i.parentNode.removeChild(i),n&&n.forEach(e=>e(a)),r)return r(a)},c=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),u&&document.head.appendChild(i)}},P.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{P.S={};var e={},r={};P.I=(t,a)=>{a||(a=[]);var n=r[t];if(n||(n=r[t]={}),!(a.indexOf(n)>=0)){if(a.push(n),e[t])return e[t];P.o(P.S,t)||(P.S[t]={});var o=P.S[t],i="jupyterlab-codex-sidebar",u=(e,r,t,a)=>{var n=o[e]=o[e]||{},u=n[r];(!u||!u.loaded&&(!a!=!u.eager?a:i>u.from))&&(n[r]={get:t,from:i,eager:!!a})},l=[];return"default"===t&&(u("dompurify","3.3.1",()=>P.e(997).then(()=>()=>P(4997))),u("jupyterlab-codex-sidebar","0.1.6",()=>Promise.all([P.e(525),P.e(737)]).then(()=>()=>P(6737))),u("katex","0.16.28",()=>P.e(489).then(()=>()=>P(5489))),u("marked-katex-extension","5.1.7",()=>P.e(124).then(()=>()=>P(8124))),u("marked","16.4.2",()=>P.e(364).then(()=>()=>P(4364)))),e[t]=l.length?Promise.all(l).then(()=>e[t]=1):1}}})(),(()=>{var e;P.g.importScripts&&(e=P.g.location+"");var r=P.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var a=t.length-1;a>-1&&(!e||!/^http(s?):/.test(e));)e=t[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),P.p=e})(),t=e=>{var r=e=>e.split(".").map(e=>+e==e?+e:e),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),a=t[1]?r(t[1]):[];return t[2]&&(a.length++,a.push.apply(a,r(t[2]))),t[3]&&(a.push([]),a.push.apply(a,r(t[3]))),a},a=(e,r)=>{e=t(e),r=t(r);for(var a=0;;){if(a>=e.length)return a<r.length&&"u"!=(typeof r[a])[0];var n=e[a],o=(typeof n)[0];if(a>=r.length)return"u"==o;var i=r[a],u=(typeof i)[0];if(o!=u)return"o"==o&&"n"==u||"s"==u||"u"==o;if("o"!=o&&"u"!=o&&n!=i)return n<i;a++}},n=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var a=1,o=1;o<e.length;o++)a--,t+="u"==(typeof(u=e[o]))[0]?"-":(a>0?".":"")+(a=2,u);return t}var i=[];for(o=1;o<e.length;o++){var u=e[o];i.push(0===u?"not("+l()+")":1===u?"("+l()+" || "+l()+")":2===u?i.pop()+" "+i.pop():n(u))}return l();function l(){return i.pop().replace(/^\((.+)\)$/,"$1")}},o=(e,r)=>{if(0 in e){r=t(r);var a=e[0],n=a<0;n&&(a=-a-1);for(var i=0,u=1,l=!0;;u++,i++){var d,s,f=u<e.length?(typeof e[u])[0]:"";if(i>=r.length||"o"==(s=(typeof(d=r[i]))[0]))return!l||("u"==f?u>a&&!n:""==f!=n);if("u"==s){if(!l||"u"!=f)return!1}else if(l)if(f==s)if(u<=a){if(d!=e[u])return!1}else{if(n?d>e[u]:d<e[u])return!1;d!=e[u]&&(l=!1)}else if("s"!=f&&"n"!=f){if(n||u<=a)return!1;l=!1,u--}else{if(u<=a||s<f!=n)return!1;l=!1}else"s"!=f&&"n"!=f&&(l=!1,u--)}}var c=[],p=c.pop.bind(c);for(i=1;i<e.length;i++){var h=e[i];c.push(1==h?p()|p():2==h?p()&p():h?o(h,r):!p())}return!!p()},i=(e,r)=>e&&P.o(e,r),u=e=>(e.loaded=1,e.get()),l=e=>Object.keys(e).reduce((r,t)=>(e[t].eager&&(r[t]=e[t]),r),{}),d=(e,r,t,n)=>{var i=n?l(e[r]):e[r];return(r=Object.keys(i).reduce((e,r)=>!o(t,r)||e&&!a(e,r)?e:r,0))&&i[r]},s=(e,r,t)=>{var n=t?l(e[r]):e[r];return Object.keys(n).reduce((e,r)=>!e||!n[e].loaded&&a(e,r)?r:e,0)},f=(e,r,t,a)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+n(a)+")",c=(e,r,t,a,o)=>{var i=e[t];return"No satisfying version ("+n(a)+")"+(o?" for eager consumption":"")+" of shared module "+t+" found in shared scope "+r+".\nAvailable versions: "+Object.keys(i).map(e=>e+" from "+i[e].from).join(", ")},p=e=>{throw new Error(e)},h=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},v=(e,r,t)=>t?t():((e,r)=>p("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),m=(b=e=>function(r,t,a,n,o){var i=P.I(r);return i&&i.then&&!a?i.then(e.bind(e,r,P.S[r],t,!1,n,o)):e(r,P.S[r],t,a,n,o)})((e,r,t,a,n,o)=>{if(!i(r,t))return v(e,t,o);var l=d(r,t,n,a);return l?u(l):o?o():void p(c(r,e,t,n,a))}),g=b((e,r,t,a,n,l)=>{if(!i(r,t))return v(e,t,l);var d=s(r,t,a);return o(n,d)||h(f(r,t,d,n)),u(r[t][d])}),y={},w={1125:()=>g("default","@jupyterlab/services",!1,[1,7,5,3]),2707:()=>m("default","dompurify",!1,[1,3,3,1],()=>P.e(997).then(()=>()=>P(4997))),2931:()=>g("default","@jupyterlab/notebook",!1,[1,4,5,3]),3345:()=>g("default","react",!1,[1,18,2,0]),4526:()=>g("default","@jupyterlab/coreutils",!1,[1,6,5,3]),5285:()=>g("default","@jupyterlab/apputils",!1,[1,4,6,3]),7628:()=>g("default","react-dom",!1,[1,18,2,0]),4502:()=>m("default","katex",!1,[,[-1,0,17],[0,0,16],2],()=>P.e(489).then(()=>()=>P(5489))),4281:()=>m("default","marked",!1,[1,16,4,2],()=>P.e(364).then(()=>()=>P(4364))),405:()=>m("default","marked-katex-extension",!1,[1,5,1,7],()=>P.e(124).then(()=>()=>P(8124)))},j={124:[4502],281:[4281],405:[405],737:[1125,2707,2931,3345,4526,5285,7628]},k={},P.f.consumes=(e,r)=>{P.o(j,e)&&j[e].forEach(e=>{if(P.o(y,e))return r.push(y[e]);if(!k[e]){var t=r=>{y[e]=0,P.m[e]=t=>{delete P.c[e],t.exports=r()}};k[e]=!0;var a=r=>{delete y[e],P.m[e]=t=>{throw delete P.c[e],r}};try{var n=w[e]();n.then?r.push(y[e]=n.then(t).catch(a)):t(n)}catch(e){a(e)}}})},(()=>{P.b="undefined"!=typeof document&&document.baseURI||self.location.href;var e={646:0};P.f.j=(r,t)=>{var a=P.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(281|405)$/.test(r))e[r]=0;else{var n=new Promise((t,n)=>a=e[r]=[t,n]);t.push(a[2]=n);var o=P.p+P.u(r),i=new Error;P.l(o,t=>{if(P.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+n+": "+o+")",i.name="ChunkLoadError",i.type=n,i.request=o,a[1](i)}},"chunk-"+r,r)}};var r=(r,t)=>{var a,n,[o,i,u]=t,l=0;if(o.some(r=>0!==e[r])){for(a in i)P.o(i,a)&&(P.m[a]=i[a]);u&&u(P)}for(r&&r(t);l<o.length;l++)n=o[l],P.o(e,n)&&e[n]&&e[n][0](),e[n]=0},t=self.webpackChunkjupyterlab_codex_sidebar=self.webpackChunkjupyterlab_codex_sidebar||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),P.nc=void 0;var E=P(1387);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB)["jupyterlab-codex-sidebar"]=E})();
1
+ var _JUPYTERLAB;(()=>{"use strict";var e,r,t,a,n,o,i,u,l,d,s,f,c,p,h,b,v,m,g,y,w,j,k,x={1387(e,r,t){var a={"./index":()=>Promise.all([t.e(525),t.e(737)]).then(()=>()=>t(6737)),"./extension":()=>Promise.all([t.e(525),t.e(737)]).then(()=>()=>t(6737))},n=(e,r)=>(t.R=r,r=t.o(a,e)?a[e]():Promise.resolve().then(()=>{throw new Error('Module "'+e+'" does not exist in container.')}),t.R=void 0,r),o=(e,r)=>{if(t.S){var a="default",n=t.S[a];if(n&&n!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[a]=e,t.I(a,r)}};t.d(r,{get:()=>n,init:()=>o})}},S={};function P(e){var r=S[e];if(void 0!==r)return r.exports;var t=S[e]={id:e,exports:{}};return x[e](t,t.exports,P),t.exports}P.m=x,P.c=S,P.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return P.d(r,{a:r}),r},P.d=(e,r)=>{for(var t in r)P.o(r,t)&&!P.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},P.f={},P.e=e=>Promise.all(Object.keys(P.f).reduce((r,t)=>(P.f[t](e,r),r),[])),P.u=e=>e+"."+{124:"ac0734653995d3fe00f2",364:"15acf07c0b6852a40fd9",489:"ef138a7e916c5b465543",525:"224526d045c727069de6",737:"58bcf09100c9bc7bd90d",997:"213b5a946a1c8e2b1bba"}[e]+".js?v="+{124:"ac0734653995d3fe00f2",364:"15acf07c0b6852a40fd9",489:"ef138a7e916c5b465543",525:"224526d045c727069de6",737:"58bcf09100c9bc7bd90d",997:"213b5a946a1c8e2b1bba"}[e],P.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),P.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="jupyterlab-codex-sidebar:",P.l=(t,a,n,o)=>{if(e[t])e[t].push(a);else{var i,u;if(void 0!==n)for(var l=document.getElementsByTagName("script"),d=0;d<l.length;d++){var s=l[d];if(s.getAttribute("src")==t||s.getAttribute("data-webpack")==r+n){i=s;break}}i||(u=!0,(i=document.createElement("script")).charset="utf-8",P.nc&&i.setAttribute("nonce",P.nc),i.setAttribute("data-webpack",r+n),i.src=t),e[t]=[a];var f=(r,a)=>{i.onerror=i.onload=null,clearTimeout(c);var n=e[t];if(delete e[t],i.parentNode&&i.parentNode.removeChild(i),n&&n.forEach(e=>e(a)),r)return r(a)},c=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),u&&document.head.appendChild(i)}},P.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{P.S={};var e={},r={};P.I=(t,a)=>{a||(a=[]);var n=r[t];if(n||(n=r[t]={}),!(a.indexOf(n)>=0)){if(a.push(n),e[t])return e[t];P.o(P.S,t)||(P.S[t]={});var o=P.S[t],i="jupyterlab-codex-sidebar",u=(e,r,t,a)=>{var n=o[e]=o[e]||{},u=n[r];(!u||!u.loaded&&(!a!=!u.eager?a:i>u.from))&&(n[r]={get:t,from:i,eager:!!a})},l=[];return"default"===t&&(u("dompurify","3.3.1",()=>P.e(997).then(()=>()=>P(4997))),u("jupyterlab-codex-sidebar","0.1.7",()=>Promise.all([P.e(525),P.e(737)]).then(()=>()=>P(6737))),u("katex","0.16.28",()=>P.e(489).then(()=>()=>P(5489))),u("marked-katex-extension","5.1.7",()=>P.e(124).then(()=>()=>P(8124))),u("marked","16.4.2",()=>P.e(364).then(()=>()=>P(4364)))),e[t]=l.length?Promise.all(l).then(()=>e[t]=1):1}}})(),(()=>{var e;P.g.importScripts&&(e=P.g.location+"");var r=P.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var a=t.length-1;a>-1&&(!e||!/^http(s?):/.test(e));)e=t[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),P.p=e})(),t=e=>{var r=e=>e.split(".").map(e=>+e==e?+e:e),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),a=t[1]?r(t[1]):[];return t[2]&&(a.length++,a.push.apply(a,r(t[2]))),t[3]&&(a.push([]),a.push.apply(a,r(t[3]))),a},a=(e,r)=>{e=t(e),r=t(r);for(var a=0;;){if(a>=e.length)return a<r.length&&"u"!=(typeof r[a])[0];var n=e[a],o=(typeof n)[0];if(a>=r.length)return"u"==o;var i=r[a],u=(typeof i)[0];if(o!=u)return"o"==o&&"n"==u||"s"==u||"u"==o;if("o"!=o&&"u"!=o&&n!=i)return n<i;a++}},n=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var a=1,o=1;o<e.length;o++)a--,t+="u"==(typeof(u=e[o]))[0]?"-":(a>0?".":"")+(a=2,u);return t}var i=[];for(o=1;o<e.length;o++){var u=e[o];i.push(0===u?"not("+l()+")":1===u?"("+l()+" || "+l()+")":2===u?i.pop()+" "+i.pop():n(u))}return l();function l(){return i.pop().replace(/^\((.+)\)$/,"$1")}},o=(e,r)=>{if(0 in e){r=t(r);var a=e[0],n=a<0;n&&(a=-a-1);for(var i=0,u=1,l=!0;;u++,i++){var d,s,f=u<e.length?(typeof e[u])[0]:"";if(i>=r.length||"o"==(s=(typeof(d=r[i]))[0]))return!l||("u"==f?u>a&&!n:""==f!=n);if("u"==s){if(!l||"u"!=f)return!1}else if(l)if(f==s)if(u<=a){if(d!=e[u])return!1}else{if(n?d>e[u]:d<e[u])return!1;d!=e[u]&&(l=!1)}else if("s"!=f&&"n"!=f){if(n||u<=a)return!1;l=!1,u--}else{if(u<=a||s<f!=n)return!1;l=!1}else"s"!=f&&"n"!=f&&(l=!1,u--)}}var c=[],p=c.pop.bind(c);for(i=1;i<e.length;i++){var h=e[i];c.push(1==h?p()|p():2==h?p()&p():h?o(h,r):!p())}return!!p()},i=(e,r)=>e&&P.o(e,r),u=e=>(e.loaded=1,e.get()),l=e=>Object.keys(e).reduce((r,t)=>(e[t].eager&&(r[t]=e[t]),r),{}),d=(e,r,t,n)=>{var i=n?l(e[r]):e[r];return(r=Object.keys(i).reduce((e,r)=>!o(t,r)||e&&!a(e,r)?e:r,0))&&i[r]},s=(e,r,t)=>{var n=t?l(e[r]):e[r];return Object.keys(n).reduce((e,r)=>!e||!n[e].loaded&&a(e,r)?r:e,0)},f=(e,r,t,a)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+n(a)+")",c=(e,r,t,a,o)=>{var i=e[t];return"No satisfying version ("+n(a)+")"+(o?" for eager consumption":"")+" of shared module "+t+" found in shared scope "+r+".\nAvailable versions: "+Object.keys(i).map(e=>e+" from "+i[e].from).join(", ")},p=e=>{throw new Error(e)},h=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},v=(e,r,t)=>t?t():((e,r)=>p("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),m=(b=e=>function(r,t,a,n,o){var i=P.I(r);return i&&i.then&&!a?i.then(e.bind(e,r,P.S[r],t,!1,n,o)):e(r,P.S[r],t,a,n,o)})((e,r,t,a,n,o)=>{if(!i(r,t))return v(e,t,o);var l=d(r,t,n,a);return l?u(l):o?o():void p(c(r,e,t,n,a))}),g=b((e,r,t,a,n,l)=>{if(!i(r,t))return v(e,t,l);var d=s(r,t,a);return o(n,d)||h(f(r,t,d,n)),u(r[t][d])}),y={},w={1125:()=>g("default","@jupyterlab/services",!1,[1,7,5,3]),2707:()=>m("default","dompurify",!1,[1,3,3,1],()=>P.e(997).then(()=>()=>P(4997))),2931:()=>g("default","@jupyterlab/notebook",!1,[1,4,5,3]),3345:()=>g("default","react",!1,[1,18,2,0]),4526:()=>g("default","@jupyterlab/coreutils",!1,[1,6,5,3]),5285:()=>g("default","@jupyterlab/apputils",!1,[1,4,6,3]),7628:()=>g("default","react-dom",!1,[1,18,2,0]),4502:()=>m("default","katex",!1,[,[-1,0,17],[0,0,16],2],()=>P.e(489).then(()=>()=>P(5489))),4281:()=>m("default","marked",!1,[1,16,4,2],()=>P.e(364).then(()=>()=>P(4364))),405:()=>m("default","marked-katex-extension",!1,[1,5,1,7],()=>P.e(124).then(()=>()=>P(8124)))},j={124:[4502],281:[4281],405:[405],737:[1125,2707,2931,3345,4526,5285,7628]},k={},P.f.consumes=(e,r)=>{P.o(j,e)&&j[e].forEach(e=>{if(P.o(y,e))return r.push(y[e]);if(!k[e]){var t=r=>{y[e]=0,P.m[e]=t=>{delete P.c[e],t.exports=r()}};k[e]=!0;var a=r=>{delete y[e],P.m[e]=t=>{throw delete P.c[e],r}};try{var n=w[e]();n.then?r.push(y[e]=n.then(t).catch(a)):t(n)}catch(e){a(e)}}})},(()=>{P.b="undefined"!=typeof document&&document.baseURI||self.location.href;var e={646:0};P.f.j=(r,t)=>{var a=P.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(281|405)$/.test(r))e[r]=0;else{var n=new Promise((t,n)=>a=e[r]=[t,n]);t.push(a[2]=n);var o=P.p+P.u(r),i=new Error;P.l(o,t=>{if(P.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+n+": "+o+")",i.name="ChunkLoadError",i.type=n,i.request=o,a[1](i)}},"chunk-"+r,r)}};var r=(r,t)=>{var a,n,[o,i,u]=t,l=0;if(o.some(r=>0!==e[r])){for(a in i)P.o(i,a)&&(P.m[a]=i[a]);u&&u(P)}for(r&&r(t);l<o.length;l++)n=o[l],P.o(e,n)&&e[n]&&e[n][0](),e[n]=0},t=self.webpackChunkjupyterlab_codex_sidebar=self.webpackChunkjupyterlab_codex_sidebar||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),P.nc=void 0;var E=P(1387);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB)["jupyterlab-codex-sidebar"]=E})();
@@ -1,3 +1,5 @@
1
+ const ACTIVE_CELL_SELECTION_MAX_LINE_CHARS = 2000;
2
+ const ACTIVE_CELL_LONG_LINE_MARKER = ' ... [long line truncated] ... ';
1
3
  function clampNonNegativeInteger(value) {
2
4
  if (!Number.isFinite(value)) {
3
5
  return 0;
@@ -13,18 +15,40 @@ function sliceByCharLimit(value, limit) {
13
15
  }
14
16
  return value.slice(0, limit);
15
17
  }
18
+ function truncateMiddle(text, maxChars, marker) {
19
+ if (text.length <= maxChars) {
20
+ return text;
21
+ }
22
+ if (maxChars <= marker.length) {
23
+ return text.slice(0, maxChars);
24
+ }
25
+ const remaining = maxChars - marker.length;
26
+ const headLength = Math.ceil(remaining / 2);
27
+ const tailLength = Math.floor(remaining / 2);
28
+ return `${text.slice(0, headLength)}${marker}${text.slice(text.length - tailLength)}`;
29
+ }
30
+ function truncateLongSelectionLines(value, totalLimit) {
31
+ if (totalLimit <= 0) {
32
+ return '';
33
+ }
34
+ const lineLimit = Math.min(totalLimit, ACTIVE_CELL_SELECTION_MAX_LINE_CHARS);
35
+ return value
36
+ .split('\n')
37
+ .map(line => truncateMiddle(line, lineLimit, ACTIVE_CELL_LONG_LINE_MARKER))
38
+ .join('\n');
39
+ }
16
40
  export function limitActiveCellAttachmentPayload(selection, cellOutput, maxSelectionChars, maxCellOutputChars) {
17
41
  const sourceSelection = typeof selection === 'string' ? selection : '';
18
42
  const sourceCellOutput = typeof cellOutput === 'string' ? cellOutput : '';
19
43
  const selectionLimit = clampNonNegativeInteger(maxSelectionChars);
20
44
  const cellOutputLimit = clampNonNegativeInteger(maxCellOutputChars);
21
- const nextSelection = sliceByCharLimit(sourceSelection, selectionLimit);
45
+ const nextSelection = sliceByCharLimit(truncateLongSelectionLines(sourceSelection, selectionLimit), selectionLimit);
22
46
  const nextCellOutput = sliceByCharLimit(sourceCellOutput, cellOutputLimit);
23
47
  return {
24
48
  selection: nextSelection,
25
49
  cellOutput: nextCellOutput,
26
- selectionTruncated: nextSelection.length < sourceSelection.length,
27
- cellOutputTruncated: nextCellOutput.length < sourceCellOutput.length
50
+ selectionTruncated: nextSelection !== sourceSelection,
51
+ cellOutputTruncated: nextCellOutput !== sourceCellOutput
28
52
  };
29
53
  }
30
54
  export function buildAttachmentTruncationNotice(selectionTruncated, cellOutputTruncated, maxSelectionChars, maxCellOutputChars) {
@@ -1 +1 @@
1
- {"version":3,"file":"codexChatAttachmentLimit.js","sourceRoot":"","sources":["../src/codexChatAttachmentLimit.ts"],"names":[],"mappings":"AAYA,SAAS,uBAAuB,CAAC,KAAa;IAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC3B,OAAO,CAAC,CAAC;KACV;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa,EAAE,KAAa;IACpD,IAAI,KAAK,IAAI,CAAC,EAAE;QACd,OAAO,EAAE,CAAC;KACX;IACD,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,EAAE;QACzB,OAAO,KAAK,CAAC;KACd;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,SAAiB,EACjB,UAAkB,EAClB,iBAAyB,EACzB,kBAA0B;IAE1B,MAAM,eAAe,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,MAAM,gBAAgB,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,cAAc,GAAG,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;IACpE,MAAM,aAAa,GAAG,gBAAgB,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;IAC3E,OAAO;QACL,SAAS,EAAE,aAAa;QACxB,UAAU,EAAE,cAAc;QAC1B,kBAAkB,EAAE,aAAa,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM;QACjE,mBAAmB,EAAE,cAAc,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM;KACrE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,kBAA2B,EAC3B,mBAA4B,EAC5B,iBAAyB,EACzB,kBAA0B;IAE1B,IAAI,CAAC,kBAAkB,IAAI,CAAC,mBAAmB,EAAE;QAC/C,OAAO,IAAI,CAAC;KACb;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC1E,MAAM,eAAe,GAAG,MAAM,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC5E,IAAI,kBAAkB,IAAI,mBAAmB,EAAE;QAC7C,OAAO,mEAAmE,cAAc,mBAAmB,eAAe,4EAA4E,CAAC;KACxM;IACD,IAAI,kBAAkB,EAAE;QACtB,OAAO,8DAA8D,cAAc,gFAAgF,CAAC;KACrK;IACD,OAAO,+DAA+D,eAAe,cAAc,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,KAK/C;IACC,OAAO;QACL,kBAAkB,EAAE,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,kBAAkB;QACtE,mBAAmB,EAAE,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,mBAAmB;KAC1E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"codexChatAttachmentLimit.js","sourceRoot":"","sources":["../src/codexChatAttachmentLimit.ts"],"names":[],"mappings":"AAYA,MAAM,oCAAoC,GAAG,IAAI,CAAC;AAClD,MAAM,4BAA4B,GAAG,iCAAiC,CAAC;AAEvE,SAAS,uBAAuB,CAAC,KAAa;IAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC3B,OAAO,CAAC,CAAC;KACV;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa,EAAE,KAAa;IACpD,IAAI,KAAK,IAAI,CAAC,EAAE;QACd,OAAO,EAAE,CAAC;KACX;IACD,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,EAAE;QACzB,OAAO,KAAK,CAAC;KACd;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,QAAgB,EAAE,MAAc;IACpE,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ,EAAE;QAC3B,OAAO,IAAI,CAAC;KACb;IACD,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;KAChC;IACD,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAC7C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC;AACxF,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAa,EAAE,UAAkB;IACnE,IAAI,UAAU,IAAI,CAAC,EAAE;QACnB,OAAO,EAAE,CAAC;KACX;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,oCAAoC,CAAC,CAAC;IAC7E,OAAO,KAAK;SACT,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,4BAA4B,CAAC,CAAC;SAC1E,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,SAAiB,EACjB,UAAkB,EAClB,iBAAyB,EACzB,kBAA0B;IAE1B,MAAM,eAAe,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,MAAM,gBAAgB,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,cAAc,GAAG,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;IACpE,MAAM,aAAa,GAAG,gBAAgB,CAAC,0BAA0B,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC;IACpH,MAAM,cAAc,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;IAC3E,OAAO;QACL,SAAS,EAAE,aAAa;QACxB,UAAU,EAAE,cAAc;QAC1B,kBAAkB,EAAE,aAAa,KAAK,eAAe;QACrD,mBAAmB,EAAE,cAAc,KAAK,gBAAgB;KACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,kBAA2B,EAC3B,mBAA4B,EAC5B,iBAAyB,EACzB,kBAA0B;IAE1B,IAAI,CAAC,kBAAkB,IAAI,CAAC,mBAAmB,EAAE;QAC/C,OAAO,IAAI,CAAC;KACb;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC1E,MAAM,eAAe,GAAG,MAAM,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC5E,IAAI,kBAAkB,IAAI,mBAAmB,EAAE;QAC7C,OAAO,mEAAmE,cAAc,mBAAmB,eAAe,4EAA4E,CAAC;KACxM;IACD,IAAI,kBAAkB,EAAE;QACtB,OAAO,8DAA8D,cAAc,gFAAgF,CAAC;KACrK;IACD,OAAO,+DAA+D,eAAe,cAAc,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,KAK/C;IACC,OAAO;QACL,kBAAkB,EAAE,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,kBAAkB;QACtE,mBAAmB,EAAE,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,mBAAmB;KAC1E,CAAC;AACJ,CAAC"}
@@ -61,6 +61,7 @@ export declare function formatSelectionPreviewTextForDisplay(previewText: string
61
61
  export declare function toFallbackSelectionPreview(widget: DocumentWidgetLike | null, notebookMode: NotebookMode, text: string): SelectionPreview | undefined;
62
62
  export declare function toCellOutputPreview(context: SelectedContext | null, widget: DocumentWidgetLike | null, notebookMode: NotebookMode, outputText: string): SelectionPreview | undefined;
63
63
  export declare const ACTIVE_CELL_OUTPUT_MAX_CHARS = 20000;
64
+ export declare const ERROR_CELL_OUTPUT_MAX_CHARS = 8000;
64
65
  export declare const ACTIVE_CELL_OUTPUT_MAX_ITEMS = 24;
65
66
  export declare function stripAnsi(value: string): string;
66
67
  export declare function coerceText(value: unknown): string;