sage-agent-internal 0.2.0rc0__py3-none-any.whl → 0.2.2__py3-none-any.whl
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.
- sage_agent_internal/_version.py +1 -1
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/package.json +2 -2
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/schemas/sage-agent-internal/package.json.orig +1 -1
- sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/363.0520d99597afee9498e3.js +1 -0
- sage_agent_internal-0.2.0rc0.data/data/share/jupyter/labextensions/sage-agent-internal/static/833.1509794f6b586558f96c.js → sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/833.1882e0f009ded580ada1.js +1 -1
- sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/remoteEntry.43bde913ee2adc92e342.js +1 -0
- sage_agent_internal-0.2.2.dist-info/METADATA +209 -0
- sage_agent_internal-0.2.2.dist-info/RECORD +33 -0
- sage_agent_internal-0.2.0rc0.data/data/share/jupyter/labextensions/sage-agent-internal/static/363.d6c25400a011b62fbae6.js +0 -1
- sage_agent_internal-0.2.0rc0.data/data/share/jupyter/labextensions/sage-agent-internal/static/remoteEntry.728a8d85dbc05441667a.js +0 -1
- sage_agent_internal-0.2.0rc0.dist-info/METADATA +0 -154
- sage_agent_internal-0.2.0rc0.dist-info/RECORD +0 -33
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/install.json +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/schemas/sage-agent-internal/plugin.json +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/122.3c2c200586e65203b674.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/220.d384edfd5bbcfda33a2a.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/262.3fc4ad88e6f8c273d4ad.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/353.2c285601a208c3735929.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/364.c2fb82c6f484097228c6.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/439.3cb9ac7022c8a6074647.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/481.96b91d018df31d54d173.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/553.b7906877d98a62265533.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/553.b7906877d98a62265533.js.LICENSE.txt +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/635.8c395c854aa2b140b668.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/713.103cb5ae248be385b08a.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/742.b204789055ded4e07883.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/747.b8e9485ebcbb3066eb4b.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/821.b58f29814f5900f1f6f8.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/845.cc2bc80fbfea6d20a396.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/888.09382cc93a2ad3932b31.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/973.38ee5148a3908e41c2dd.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/973.38ee5148a3908e41c2dd.js.LICENSE.txt +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/style.js +0 -0
- {sage_agent_internal-0.2.0rc0.data → sage_agent_internal-0.2.2.data}/data/share/jupyter/labextensions/sage-agent-internal/static/third-party-licenses.json +0 -0
- {sage_agent_internal-0.2.0rc0.dist-info → sage_agent_internal-0.2.2.dist-info}/WHEEL +0 -0
- {sage_agent_internal-0.2.0rc0.dist-info → sage_agent_internal-0.2.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
var _JUPYTERLAB;(()=>{"use strict";var e,r,t,a,n,o,f,i,l,d,u,c,s,p,h,b,m,g,v,y,j,w,P,k,S,O={484:(e,r,t)=>{var a={"./index":()=>Promise.all([t.e(353),t.e(747),t.e(122),t.e(973),t.e(760),t.e(345),t.e(379),t.e(839),t.e(833)]).then(()=>()=>t(4387)),"./extension":()=>Promise.all([t.e(353),t.e(747),t.e(122),t.e(973),t.e(760),t.e(345),t.e(379),t.e(839),t.e(833)]).then(()=>()=>t(4387)),"./style":()=>t.e(363).then(()=>()=>t(8363))},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})}},x={};function _(e){var r=x[e];if(void 0!==r)return r.exports;var t=x[e]={id:e,exports:{}};return O[e].call(t.exports,t,t.exports,_),t.exports}_.m=O,_.c=x,_.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return _.d(r,{a:r}),r},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,_.t=function(t,a){if(1&a&&(t=this(t)),8&a)return t;if("object"==typeof t&&t){if(4&a&&t.__esModule)return t;if(16&a&&"function"==typeof t.then)return t}var n=Object.create(null);_.r(n);var o={};e=e||[null,r({}),r([]),r(r)];for(var f=2&a&&t;("object"==typeof f||"function"==typeof f)&&!~e.indexOf(f);f=r(f))Object.getOwnPropertyNames(f).forEach(e=>o[e]=()=>t[e]);return o.default=()=>t,_.d(n,o),n},_.d=(e,r)=>{for(var t in r)_.o(r,t)&&!_.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},_.f={},_.e=e=>Promise.all(Object.keys(_.f).reduce((r,t)=>(_.f[t](e,r),r),[])),_.u=e=>e+"."+{122:"3c2c200586e65203b674",220:"d384edfd5bbcfda33a2a",262:"3fc4ad88e6f8c273d4ad",353:"2c285601a208c3735929",363:"0520d99597afee9498e3",364:"c2fb82c6f484097228c6",439:"3cb9ac7022c8a6074647",481:"96b91d018df31d54d173",553:"b7906877d98a62265533",635:"8c395c854aa2b140b668",713:"103cb5ae248be385b08a",742:"b204789055ded4e07883",747:"b8e9485ebcbb3066eb4b",821:"b58f29814f5900f1f6f8",833:"1882e0f009ded580ada1",845:"cc2bc80fbfea6d20a396",888:"09382cc93a2ad3932b31",973:"38ee5148a3908e41c2dd"}[e]+".js?v="+{122:"3c2c200586e65203b674",220:"d384edfd5bbcfda33a2a",262:"3fc4ad88e6f8c273d4ad",353:"2c285601a208c3735929",363:"0520d99597afee9498e3",364:"c2fb82c6f484097228c6",439:"3cb9ac7022c8a6074647",481:"96b91d018df31d54d173",553:"b7906877d98a62265533",635:"8c395c854aa2b140b668",713:"103cb5ae248be385b08a",742:"b204789055ded4e07883",747:"b8e9485ebcbb3066eb4b",821:"b58f29814f5900f1f6f8",833:"1882e0f009ded580ada1",845:"cc2bc80fbfea6d20a396",888:"09382cc93a2ad3932b31",973:"38ee5148a3908e41c2dd"}[e],_.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),_.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t={},a="sage-agent-internal:",_.l=(e,r,n,o)=>{if(t[e])t[e].push(r);else{var f,i;if(void 0!==n)for(var l=document.getElementsByTagName("script"),d=0;d<l.length;d++){var u=l[d];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==a+n){f=u;break}}f||(i=!0,(f=document.createElement("script")).charset="utf-8",f.timeout=120,_.nc&&f.setAttribute("nonce",_.nc),f.setAttribute("data-webpack",a+n),f.src=e),t[e]=[r];var c=(r,a)=>{f.onerror=f.onload=null,clearTimeout(s);var n=t[e];if(delete t[e],f.parentNode&&f.parentNode.removeChild(f),n&&n.forEach(e=>e(a)),r)return r(a)},s=setTimeout(c.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=c.bind(null,f.onerror),f.onload=c.bind(null,f.onload),i&&document.head.appendChild(f)}},_.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{_.S={};var e={},r={};_.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];_.o(_.S,t)||(_.S[t]={});var o=_.S[t],f="sage-agent-internal",i=(e,r,t,a)=>{var n=o[e]=o[e]||{},i=n[r];(!i||!i.loaded&&(!a!=!i.eager?a:f>i.from))&&(n[r]={get:t,from:f,eager:!!a})},l=[];return"default"===t&&(i("@anthropic-ai/sdk","0.54.0",()=>_.e(742).then(()=>()=>_(2742))),i("best-effort-json-parser","1.2.1",()=>_.e(439).then(()=>()=>_(7820))),i("codemirror-merge-alpinex","6.10.4",()=>Promise.all([_.e(353),_.e(635),_.e(760),_.e(839)]).then(()=>()=>_(7635))),i("codemirror","6.0.2",()=>Promise.all([_.e(353),_.e(821),_.e(747),_.e(760)]).then(()=>()=>_(8821))),i("diff2html","3.4.52",()=>Promise.all([_.e(122),_.e(379)]).then(()=>()=>_(2122))),i("diff","7.0.0",()=>_.e(713).then(()=>()=>_(5713))),i("diff","0",()=>_.e(481).then(()=>()=>_(7481))),i("marked","15.0.12",()=>_.e(364).then(()=>()=>_(4364))),i("partial-json","0.1.7",()=>_.e(220).then(()=>()=>_(9220))),i("react-bootstrap","2.10.10",()=>Promise.all([_.e(553),_.e(345),_.e(628)]).then(()=>()=>_(4553))),i("rxjs","7.8.2",()=>_.e(888).then(()=>()=>_(2888))),i("sage-agent-internal","0.2.2",()=>Promise.all([_.e(353),_.e(747),_.e(122),_.e(973),_.e(760),_.e(345),_.e(379),_.e(839),_.e(833)]).then(()=>()=>_(4387))),i("uuid","11.1.0",()=>_.e(262).then(()=>()=>_(8262)))),e[t]=l.length?Promise.all(l).then(()=>e[t]=1):1}}})(),(()=>{var e;_.g.importScripts&&(e=_.g.location+"");var r=_.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=e})(),n=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},o=(e,r)=>{e=n(e),r=n(r);for(var t=0;;){if(t>=e.length)return t<r.length&&"u"!=(typeof r[t])[0];var a=e[t],o=(typeof a)[0];if(t>=r.length)return"u"==o;var f=r[t],i=(typeof f)[0];if(o!=i)return"o"==o&&"n"==i||"s"==i||"u"==o;if("o"!=o&&"u"!=o&&a!=f)return a<f;t++}},f=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,n=1;n<e.length;n++)a--,t+="u"==(typeof(i=e[n]))[0]?"-":(a>0?".":"")+(a=2,i);return t}var o=[];for(n=1;n<e.length;n++){var i=e[n];o.push(0===i?"not("+l()+")":1===i?"("+l()+" || "+l()+")":2===i?o.pop()+" "+o.pop():f(i))}return l();function l(){return o.pop().replace(/^\((.+)\)$/,"$1")}},i=(e,r)=>{if(0 in e){r=n(r);var t=e[0],a=t<0;a&&(t=-t-1);for(var o=0,f=1,l=!0;;f++,o++){var d,u,c=f<e.length?(typeof e[f])[0]:"";if(o>=r.length||"o"==(u=(typeof(d=r[o]))[0]))return!l||("u"==c?f>t&&!a:""==c!=a);if("u"==u){if(!l||"u"!=c)return!1}else if(l)if(c==u)if(f<=t){if(d!=e[f])return!1}else{if(a?d>e[f]:d<e[f])return!1;d!=e[f]&&(l=!1)}else if("s"!=c&&"n"!=c){if(a||f<=t)return!1;l=!1,f--}else{if(f<=t||u<c!=a)return!1;l=!1}else"s"!=c&&"n"!=c&&(l=!1,f--)}}var s=[],p=s.pop.bind(s);for(o=1;o<e.length;o++){var h=e[o];s.push(1==h?p()|p():2==h?p()&p():h?i(h,r):!p())}return!!p()},l=(e,r)=>e&&_.o(e,r),d=e=>(e.loaded=1,e.get()),u=e=>Object.keys(e).reduce((r,t)=>(e[t].eager&&(r[t]=e[t]),r),{}),c=(e,r,t,a)=>{var n=a?u(e[r]):e[r];return(r=Object.keys(n).reduce((e,r)=>!i(t,r)||e&&!o(e,r)?e:r,0))&&n[r]},s=(e,r,t)=>{var a=t?u(e[r]):e[r];return Object.keys(a).reduce((e,r)=>!e||!a[e].loaded&&o(e,r)?r:e,0)},p=(e,r,t,a)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+f(a)+")",h=(e,r,t,a,n)=>{var o=e[t];return"No satisfying version ("+f(a)+")"+(n?" for eager consumption":"")+" of shared module "+t+" found in shared scope "+r+".\nAvailable versions: "+Object.keys(o).map(e=>e+" from "+o[e].from).join(", ")},b=e=>{throw new Error(e)},m=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},v=(e,r,t)=>t?t():((e,r)=>b("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),y=(g=e=>function(r,t,a,n,o){var f=_.I(r);return f&&f.then&&!a?f.then(e.bind(e,r,_.S[r],t,!1,n,o)):e(r,_.S[r],t,a,n,o)})((e,r,t,a,n,o)=>{if(!l(r,t))return v(e,t,o);var f=c(r,t,n,a);return f?d(f):o?o():void b(h(r,e,t,n,a))}),j=g((e,r,t,a,n,o)=>{if(!l(r,t))return v(e,t,o);var f=s(r,t,a);return i(n,f)||m(p(r,t,f,n)),d(r[t][f])}),w={},P={195:()=>j("default","@codemirror/state",!1,[1,6,2,0]),2084:()=>j("default","@codemirror/language",!1,[1,6,0,0]),3708:()=>j("default","@lezer/common",!1,[1,1,0,0]),5024:()=>j("default","@codemirror/view",!1,[1,6,9,6]),3345:()=>j("default","react",!1,[1,18,2,0]),3379:()=>y("default","diff",!1,[1,7,0,0],()=>_.e(713).then(()=>()=>_(5713))),1839:()=>j("default","@lezer/highlight",!1,[1,1,0,0]),113:()=>y("default","diff",!1,[1,8,0,1],()=>_.e(481).then(()=>()=>_(7481))),135:()=>y("default","@anthropic-ai/sdk",!1,[2,0,54,0],()=>_.e(742).then(()=>()=>_(2742))),389:()=>j("default","@jupyterlab/statedb",!1,[1,4,4,6]),1336:()=>y("default","diff2html",!1,[1,3,4,51],()=>()=>_(2122)),2311:()=>y("default","react-bootstrap",!1,[1,2,10,10],()=>Promise.all([_.e(553),_.e(628)]).then(()=>()=>_(4553))),3139:()=>y("default","codemirror-merge-alpinex",!1,[1,6,10,4],()=>_.e(635).then(()=>()=>_(7635))),3550:()=>y("default","marked",!1,[1,15,0,11],()=>_.e(364).then(()=>()=>_(4364))),4602:()=>j("default","@lumino/signaling",!1,[1,2,0,0]),4744:()=>y("default","uuid",!1,[1,11,1,0],()=>_.e(262).then(()=>()=>_(8262))),5256:()=>j("default","@lumino/widgets",!1,[1,2,3,1,,"alpha",0]),5280:()=>j("default","@jupyterlab/extensionmanager",!1,[1,4,4,6]),6750:()=>y("default","rxjs",!1,[1,7,8,2],()=>_.e(888).then(()=>()=>_(2888))),7332:()=>y("default","codemirror",!1,[1,6,0,2],()=>_.e(821).then(()=>()=>_(8821))),7570:()=>y("default","partial-json",!1,[2,0,1,7],()=>_.e(220).then(()=>()=>_(9220))),8118:()=>j("default","@jupyterlab/codemirror",!1,[1,4,4,6]),8276:()=>y("default","best-effort-json-parser",!1,[1,1,1,3],()=>_.e(439).then(()=>()=>_(7820))),8361:()=>j("default","@jupyterlab/settingregistry",!1,[1,4,4,6]),8531:()=>j("default","@jupyterlab/notebook",!1,[1,4,4,6]),9159:()=>j("default","@jupyterlab/ui-components",!1,[1,4,4,6]),9715:()=>j("default","@jupyterlab/apputils",!1,[1,4,5,6]),7628:()=>j("default","react-dom",!1,[1,18,2,0])},k={345:[3345],379:[3379],628:[7628],760:[195,2084,3708,5024],833:[113,135,389,1336,2311,3139,3550,4602,4744,5256,5280,6750,7332,7570,8118,8276,8361,8531,9159,9715],839:[1839]},S={},_.f.consumes=(e,r)=>{_.o(k,e)&&k[e].forEach(e=>{if(_.o(w,e))return r.push(w[e]);if(!S[e]){var t=r=>{w[e]=0,_.m[e]=t=>{delete _.c[e],t.exports=r()}};S[e]=!0;var a=r=>{delete w[e],_.m[e]=t=>{throw delete _.c[e],r}};try{var n=P[e]();n.then?r.push(w[e]=n.then(t).catch(a)):t(n)}catch(e){a(e)}}})},(()=>{_.b=document.baseURI||self.location.href;var e={431:0};_.f.j=(r,t)=>{var a=_.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(345|379|628|760|839)$/.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+_.u(r),f=new Error;_.l(o,t=>{if(_.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;f.message="Loading chunk "+r+" failed.\n("+n+": "+o+")",f.name="ChunkLoadError",f.type=n,f.request=o,a[1](f)}},"chunk-"+r,r)}};var r=(r,t)=>{var a,n,[o,f,i]=t,l=0;if(o.some(r=>0!==e[r])){for(a in f)_.o(f,a)&&(_.m[a]=f[a]);i&&i(_)}for(r&&r(t);l<o.length;l++)n=o[l],_.o(e,n)&&e[n]&&e[n][0](),e[n]=0},t=self.webpackChunksage_agent_internal=self.webpackChunksage_agent_internal||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),_.nc=void 0;var E=_(484);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB)["sage-agent-internal"]=E})();
|
@@ -0,0 +1,209 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: sage_agent_internal
|
3
|
+
Version: 0.2.2
|
4
|
+
Summary: Sage Agent - Your Jupyter Notebook Assistant
|
5
|
+
Project-URL: Homepage, https://github.com/AlpineX-Labs/jupyter-sage-agent-internal
|
6
|
+
Project-URL: Bug Tracker, https://github.com/AlpineX-Labs/jupyter-sage-agent-internal/issues
|
7
|
+
Project-URL: Repository, https://github.com/AlpineX-Labs/jupyter-sage-agent-internal.git
|
8
|
+
Author-email: Daniel Schaffield <danielschaffield@gmail.com>
|
9
|
+
License: BSD 3-Clause License
|
10
|
+
|
11
|
+
Copyright (c) 2025, Daniel Schaffield
|
12
|
+
All rights reserved.
|
13
|
+
|
14
|
+
Redistribution and use in source and binary forms, with or without
|
15
|
+
modification, are permitted provided that the following conditions are met:
|
16
|
+
|
17
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
18
|
+
list of conditions and the following disclaimer.
|
19
|
+
|
20
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
21
|
+
this list of conditions and the following disclaimer in the documentation
|
22
|
+
and/or other materials provided with the distribution.
|
23
|
+
|
24
|
+
3. Neither the name of the copyright holder nor the names of its
|
25
|
+
contributors may be used to endorse or promote products derived from
|
26
|
+
this software without specific prior written permission.
|
27
|
+
|
28
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
29
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
30
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
31
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
32
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
33
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
34
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
35
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
36
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
37
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
38
|
+
License-File: LICENSE
|
39
|
+
Keywords: jupyter,jupyterlab,jupyterlab-extension
|
40
|
+
Classifier: Framework :: Jupyter
|
41
|
+
Classifier: Framework :: Jupyter :: JupyterLab
|
42
|
+
Classifier: Framework :: Jupyter :: JupyterLab :: 4
|
43
|
+
Classifier: Framework :: Jupyter :: JupyterLab :: Extensions
|
44
|
+
Classifier: Framework :: Jupyter :: JupyterLab :: Extensions :: Prebuilt
|
45
|
+
Classifier: License :: OSI Approved :: BSD License
|
46
|
+
Classifier: Programming Language :: Python
|
47
|
+
Classifier: Programming Language :: Python :: 3
|
48
|
+
Classifier: Programming Language :: Python :: 3.6
|
49
|
+
Classifier: Programming Language :: Python :: 3.9
|
50
|
+
Classifier: Programming Language :: Python :: 3.10
|
51
|
+
Classifier: Programming Language :: Python :: 3.11
|
52
|
+
Classifier: Programming Language :: Python :: 3.12
|
53
|
+
Classifier: Programming Language :: Python :: 3.13
|
54
|
+
Requires-Python: >=3.6
|
55
|
+
Description-Content-Type: text/markdown
|
56
|
+
|
57
|
+
# **Sage Agent — The AI-Powered Assistant for Jupyter Notebooks**
|
58
|
+
|
59
|
+

|
60
|
+
|
61
|
+
---
|
62
|
+
|
63
|
+
## **What is Sage Agent?**
|
64
|
+
|
65
|
+
**Sage is an AI-native notebook assistant that supercharges your existing Jupyter workflows.**
|
66
|
+
|
67
|
+
Built by leading AI and quant researchers from YC, Harvard, MIT, and Goldman Sachs, Sage brings real-time, context-aware assistance directly into JupyterLab.
|
68
|
+
|
69
|
+
Use natural language to clean data, write analysis code, debug errors, explore dataframes, and build models—faster and with fewer mistakes.
|
70
|
+
|
71
|
+
**No hallucinated code. No context switching. Just faster insights.**
|
72
|
+
|
73
|
+
---
|
74
|
+
|
75
|
+
## **Why Use Sage Agent in Jupyter?**
|
76
|
+
|
77
|
+
Whether you’re a quant, data scientist, or analyst living in notebooks, Sage helps you:
|
78
|
+
|
79
|
+
✅ Clean and transform messy data in seconds
|
80
|
+
|
81
|
+
✅ Visualize trends, rollups, and anomalies from a prompt
|
82
|
+
|
83
|
+
✅ Connect your custom databases in one click and easily explore from notebooks
|
84
|
+
|
85
|
+
✅ Generate *runnable* Python or SQL that fits your current cell + variable context
|
86
|
+
|
87
|
+
✅ Auto-detect schema changes and debug downstream errors
|
88
|
+
|
89
|
+
✅ Stay private: run entirely *local-first* or in your own secure VPC
|
90
|
+
|
91
|
+
✅ Extend JupyterLab without changing how you work
|
92
|
+
|
93
|
+
---
|
94
|
+
|
95
|
+
## **Perfect For:**
|
96
|
+
|
97
|
+
- Data scientists cleaning huge CSVs
|
98
|
+
- Quant researchers testing ML pipelines
|
99
|
+
- Product and analytics teams tired of building dashboards and flaky notebooks
|
100
|
+
- Anyone tired of LLM tools that break their code
|
101
|
+
|
102
|
+
---
|
103
|
+
|
104
|
+
## **Installation**
|
105
|
+
|
106
|
+
### **📦 Requirements**
|
107
|
+
|
108
|
+
- JupyterLab >= 4.0.0
|
109
|
+
- NodeJS (for development)
|
110
|
+
|
111
|
+
### **🧠 Install Sage Agent:**
|
112
|
+
|
113
|
+
```
|
114
|
+
pip install jupyterlab sage_agent_internal
|
115
|
+
```
|
116
|
+
|
117
|
+
### **❌ Uninstall:**
|
118
|
+
|
119
|
+
```
|
120
|
+
pip uninstall sage_agent_internal
|
121
|
+
```
|
122
|
+
|
123
|
+
---
|
124
|
+
|
125
|
+
## **How to Get Started**
|
126
|
+
|
127
|
+
To unlock full functionality, you’ll need Sage API credentials.
|
128
|
+
|
129
|
+
👉 [**Request your API key**](https://sagebook.ai/#contact) or email us at [contact@sagebook.ai](mailto:contact@sagebook.ai)
|
130
|
+
|
131
|
+
---
|
132
|
+
|
133
|
+
## **Why Sage**
|
134
|
+
|
135
|
+
- ✅ Context-aware code gen: understands variables, dataframes, imports, and prior cells
|
136
|
+
- ✅ AI that *fixes* schema issues and silent join bugs
|
137
|
+
- ✅ Inline review + diffs before you run any code
|
138
|
+
- ✅ Visualizations via natural language (matplotlib, plotly, seaborn supported)
|
139
|
+
- ✅ BYO LLM: Anthropic, OpenAI, vLLM, Ollama, or HF endpoints
|
140
|
+
- ✅ Built to run in air-gapped / enterprise environments
|
141
|
+
|
142
|
+
---
|
143
|
+
|
144
|
+
## **Local Development Instructions**
|
145
|
+
|
146
|
+
To contribute or develop locally:
|
147
|
+
|
148
|
+
```
|
149
|
+
# Clone the repo and enter the directory
|
150
|
+
git clone https://github.com/sagebook/sage_agent_internal.git
|
151
|
+
cd sage_agent_internal
|
152
|
+
|
153
|
+
# Install in editable mode
|
154
|
+
pip install -e "."
|
155
|
+
|
156
|
+
# Link extension to JupyterLab
|
157
|
+
jupyter labextension develop . --overwrite
|
158
|
+
|
159
|
+
# Rebuild on changes
|
160
|
+
jlpm build
|
161
|
+
```
|
162
|
+
|
163
|
+
For auto-rebuild while editing:
|
164
|
+
|
165
|
+
```
|
166
|
+
# Watch source
|
167
|
+
jlpm watch
|
168
|
+
|
169
|
+
# Run JupyterLab in parallel
|
170
|
+
jupyter lab
|
171
|
+
```
|
172
|
+
|
173
|
+
---
|
174
|
+
|
175
|
+
## **Uninstall in Dev Mode**
|
176
|
+
|
177
|
+
```
|
178
|
+
pip uninstall sage_agent_internal
|
179
|
+
# Then manually remove labextension symlink from JupyterLab extensions dir.
|
180
|
+
```
|
181
|
+
|
182
|
+
---
|
183
|
+
|
184
|
+
## **Want to See Sage in Action?**
|
185
|
+
|
186
|
+
🎥 Try the demo notebook or explore at [https://sagebook.ai](https://sagebook.ai/)
|
187
|
+
|
188
|
+
---
|
189
|
+
|
190
|
+
**Built for teams working with sensitive data:**
|
191
|
+
|
192
|
+
- Zero data retention by default
|
193
|
+
- Optional BYO keys for Claude, OpenAI, or local models
|
194
|
+
- Notebook-specific controls for what the model can “see”
|
195
|
+
- Fine-grained telemetry settings
|
196
|
+
|
197
|
+
---
|
198
|
+
|
199
|
+
## **Contact**
|
200
|
+
|
201
|
+
Questions? Ideas?
|
202
|
+
|
203
|
+
Email: [fahim@sagebook.ai](mailto:fahim@sagebook.ai)
|
204
|
+
|
205
|
+
Website: [https://sagebook.ai](https://sagebook.ai/)
|
206
|
+
|
207
|
+
---
|
208
|
+
|
209
|
+
AI Jupyter Notebook, JupyterLab Extension, Jupyter Assistant, Data Science Assistant, Jupyter LLM, AI code generation, dataframe cleaning, Jupyter AI, Sagebook, Sage Agent, AI for dataframes, Jupyter SQL assistant, notebook extension
|
@@ -0,0 +1,33 @@
|
|
1
|
+
sage_agent_internal/__init__.py,sha256=z-Pn063QfYmwK-9kH5_BN9Z2uSk5u3sQXNllD6al8b8,596
|
2
|
+
sage_agent_internal/_version.py,sha256=l76BxtxMMS4ZlmaydbuRDEH38H3W6gHEk8IO2zVcask,171
|
3
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/package.json,sha256=NsugrJdhehNjXYIPCYcxJFGOhBzb5_0OLhnGxY5vuzA,7003
|
4
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/schemas/sage-agent-internal/package.json.orig,sha256=vcEeI6wEQ4LqaLA9ykQB6CTSwPz9yHWfArPO8rllY_0,6861
|
5
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/schemas/sage-agent-internal/plugin.json,sha256=7VfTvZ601zqObvsaQ8Zk9y_2VKE1oGLsammktVQIMgw,2817
|
6
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/122.3c2c200586e65203b674.js,sha256=PCwgBYbmUgO2dFng8LGMNSz0jGMKBQUC-UpqtMw7PN4,38168
|
7
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/220.d384edfd5bbcfda33a2a.js,sha256=04Tt_Vu8_aM6KqXmXrmFguzAklVgzab_4lxR1FvWdrA,3897
|
8
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/262.3fc4ad88e6f8c273d4ad.js,sha256=P8StiOb4wnPUrQsuTC7cno93JZUBlbjaaOukMxyuils,10170
|
9
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/353.2c285601a208c3735929.js,sha256=LChWAaIIw3NZKWZYW2i8X271Zmq1t482JMUUvBkdJmI,23008
|
10
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/363.0520d99597afee9498e3.js,sha256=BSDZlZev7pSY40OC7HkuWaRJQ6VR0BDx2mjNbhNNbac,141115
|
11
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/364.c2fb82c6f484097228c6.js,sha256=wvuCxvSECXIoxh0upDST76jJQjk-xjTXh0RzHg0STck,39400
|
12
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/439.3cb9ac7022c8a6074647.js,sha256=PLmscCLIpgdGRynyTjUTpmaTPZjs-3WuXQYkaL956ec,3000
|
13
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/481.96b91d018df31d54d173.js,sha256=lrkdAY3zHVTRc2lhypYtybDdF-wPCBuYlZiH3qt6n-Q,17250
|
14
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/553.b7906877d98a62265533.js,sha256=qRzBmMWB0OQT7Mu4hWcdn8JooyRxgxUhikuT2FgEGcs,119497
|
15
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/553.b7906877d98a62265533.js.LICENSE.txt,sha256=LGdwyBXWbtsopwVyjsXCIwoc-zj70yxAOCOR7b1bAc4,371
|
16
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/635.8c395c854aa2b140b668.js,sha256=jDlchUqisUC2aMQgfgTjrfHtyC2yR0Za684u1QZvatU,33633
|
17
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/713.103cb5ae248be385b08a.js,sha256=EDy1riSL44WwiiWrz4BZPXevm5dYFFmI9Xi_ZqH1LrU,23323
|
18
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/742.b204789055ded4e07883.js,sha256=sgR4kFXe1OB4g3RDa1tEIwNajGuhUvar1IVGaatP0wU,57578
|
19
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/747.b8e9485ebcbb3066eb4b.js,sha256=uOlIXry7MGbrS_n1SdkE0IDLeuZ2TdTwQIHO0wreEIk,35290
|
20
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/821.b58f29814f5900f1f6f8.js,sha256=tY8pgU9ZAPH2-PGJ0ZiAPXYUVpqItMlmhnvVAHWnYuc,33541
|
21
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/833.1882e0f009ded580ada1.js,sha256=GILg8Ane1YCtoROKTN3OJBO_rMVIWkSk4zsafoeKf0w,536818
|
22
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/845.cc2bc80fbfea6d20a396.js,sha256=zCvID7_qbSCjll7h_vZTM3rSZWN2f0IBM2tACfo9DhI,1169960
|
23
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/888.09382cc93a2ad3932b31.js,sha256=CTgsyToq05MrMWa4zvhJAkUdWJg8Ws3sV3--zUvrX4w,65937
|
24
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/973.38ee5148a3908e41c2dd.js,sha256=LlcD8xFL25gGhx7e9wTJ7X7ooNfspP0LJv6pgs90rvg,1464213
|
25
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/973.38ee5148a3908e41c2dd.js.LICENSE.txt,sha256=e5rXKlIVk9PRn8cQPr8kfCfz1Paakt2urafpaM7lFGg,95
|
26
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/remoteEntry.43bde913ee2adc92e342.js,sha256=Q73pE-4q3JLjQlX25td5FOihF-zJLyfuy25Onv5KQW8,11675
|
27
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/style.js,sha256=mixPzdTcSgfmCSXY72yxDmr75rcb-UVPnByKhOqaECs,162
|
28
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/static/third-party-licenses.json,sha256=TT9WlH0aFMuVvUXl_-IbI8-2e9IqTmwfk4xabDoU_r8,94352
|
29
|
+
sage_agent_internal-0.2.2.data/data/share/jupyter/labextensions/sage-agent-internal/install.json,sha256=tOq3PpNHsSu4w3uXumqHHPGh-IwkX1tgcRgq9u6HmCA,199
|
30
|
+
sage_agent_internal-0.2.2.dist-info/METADATA,sha256=qsUMbaCaH8m03lIYO7DHMSQy0rxk4xBjBOwnz3K1rHs,6790
|
31
|
+
sage_agent_internal-0.2.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
32
|
+
sage_agent_internal-0.2.2.dist-info/licenses/LICENSE,sha256=zsSUFnbKwCesfRSafkOcXkQGrMFo6zQ8LHlOt-MYHDY,1525
|
33
|
+
sage_agent_internal-0.2.2.dist-info/RECORD,,
|
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";(self.webpackChunksage_agent_internal=self.webpackChunksage_agent_internal||[]).push([[363],{540:n=>{n.exports=function(n){var o=document.createElement("style");return n.setAttributes(o,n.attributes),n.insert(o,n.options),o}},844:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,".sage-ai-unified-diff-active.has-merge-chunks .jp-Toolbar {\n display: none !important;\n }\n\n.ͼ2.cm-merge-b .cm-changedText {\n background: none !important;\n}\n.code-mirror-empty-original-content .cm-deletedLine:first-of-type,\n.code-mirror-empty-original-content .cm-deletedChunk:first-of-type > .cm-deletedLine {\n display: none !important;\n}\n\n.cm-collapsedLines {\n background: transparent !important;\n}\n\n.cm-deletedChunk {\n background-color: #e5534b1a !important;\n}\n\n.cm-changedLine {\n background-color: #46954a26 !important;\n}",""]);const s=r},1113:n=>{n.exports=function(n,o){if(o.styleSheet)o.styleSheet.cssText=n;else{for(;o.firstChild;)o.removeChild(o.firstChild);o.appendChild(document.createTextNode(n))}}},1346:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,"/* Styles for cell edit mode overlay */\n.sage-ai-diff-edit-mode-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.05);\n z-index: 10;\n cursor: not-allowed;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sage-ai-diff-edit-mode-banner {\n position: absolute;\n top: 0;\n left: 20px;\n background-color: #fc5151;\n color: white;\n padding: 4px 8px;\n font-size: 12px;\n font-weight: bold;\n border-radius: 0 0 0 4px;\n z-index: 11;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n display: none !important;\n}\n\n.sage-ai-diff-edit-mode-instructions {\n position: absolute;\n top: 10px;\n left: 50%;\n transform: translateX(-50%);\n background-color: var(--jp-brand-color1);\n color: var(--jp-ui-font-color1);\n padding: 6px 12px;\n font-size: 11px;\n border-radius: 4px;\n z-index: 11;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n text-align: center;\n max-width: 80%;\n}\n\n/* Make sure the cell has relative positioning for absolute positioning to work */\n.jp-Cell.jp-mod-selected.sage-ai-diff-edit-mode {\n position: relative;\n}\n\n/* Make the diff content more readable */\n.diff-view {\n padding: 10px;\n border-radius: 4px;\n background-color: var(--jp-layout-color0);\n}\n",""]);const s=r},1601:n=>{n.exports=function(n){return n[1]}},2331:(n,o,e)=>{e.d(o,{A:()=>g});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i),s=e(4417),l=e.n(s),p=new URL(e(5655),e.b),d=r()(t()),c=l()(p);d.push([n.id,`/* Snippet Creation Widget Styles */\n.sage-ai-snippet-creation-widget {\n min-width: 280px !important;\n font-family: var(--jp-ui-font-family);\n font-size: var(--jp-ui-font-size1);\n color: var(--jp-ui-font-color1);\n background: var(--jp-layout-color1);\n height: 100%;\n width: 100% !important;\n display: flex;\n flex-direction: column;\n}\n\n/* Hide widget when menu is closed */\n.sage-ai-snippet-creation-widget.hidden {\n display: none !important;\n}\n\n.sage-ai-snippet-creation-panel {\n width: 100% !important;\n padding: 16px;\n height: 100%;\n background: var(--jp-layout-color0);\n display: flex;\n flex-direction: column;\n}\n\n/* Header Styles */\n.sage-ai-snippet-panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n\n /* padding-bottom: 8px; */\n}\n\n.sage-ai-snippet-header-div {\n border-bottom: 1px solid var(--jp-border-color2);\n padding-bottom: 12px;\n margin-bottom: 12px;\n}\n\n.sage-ai-snippet-panel-header h3 {\n margin: 0;\n font-size: var(--jp-ui-font-size2);\n font-weight: 600;\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-snippet-create-btn {\n background: var(--jp-brand-color1);\n color: white;\n border: none;\n border-radius: 4px;\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.sage-ai-snippet-create-btn:hover {\n background: var(--jp-brand-color0);\n}\n\n/* Form Styles */\n.sage-ai-snippet-form {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.sage-ai-snippet-form-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.sage-ai-snippet-form-group label {\n font-weight: 500;\n color: var(--jp-ui-font-color1);\n font-size: var(--jp-ui-font-size0);\n}\n\n.sage-ai-snippet-form-group input,\n.sage-ai-snippet-form-group textarea {\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n padding: 8px;\n font-family: var(--jp-ui-font-family);\n font-size: var(--jp-ui-font-size1);\n background: var(--jp-layout-color1);\n color: var(--jp-ui-font-color0);\n transition: border-color 0.2s;\n}\n\n.sage-ai-snippet-form-group input:focus,\n.sage-ai-snippet-form-group textarea:focus {\n outline: none;\n border-color: var(--jp-brand-color1);\n}\n\n.sage-ai-snippet-form-group textarea {\n resize: vertical;\n min-height: 120px;\n font-family: var(--jp-code-font-family);\n}\n\n.sage-ai-snippet-form-actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n margin-top: 8px;\n}\n\n.sage-ai-snippet-save-btn,\n.sage-ai-snippet-cancel-btn {\n padding: 8px 16px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: var(--jp-ui-font-size1);\n transition: background-color 0.2s;\n}\n\n.sage-ai-snippet-save-btn {\n background: var(--jp-brand-color1);\n color: white;\n}\n\n.sage-ai-snippet-save-btn:hover:not(:disabled) {\n background: var(--jp-brand-color0);\n}\n\n.sage-ai-snippet-save-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.sage-ai-snippet-cancel-btn {\n background: var(--jp-layout-color2);\n color: var(--jp-ui-font-color1);\n border: 1px solid var(--jp-border-color2);\n}\n\n.sage-ai-snippet-cancel-btn:hover {\n background: var(--jp-layout-color3);\n}\n\n/* Viewer Styles */\n.sage-ai-snippet-viewer {\n display: flex;\n flex-direction: column;\n gap: 12px;\n flex: 1; /* Expand to fill available space */\n height: 100%; /* Take full height of parent */\n min-height: 0; /* Allow proper flex shrinking */\n}\n\n.sage-ai-snippet-viewer-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-bottom: 1px solid var(--jp-border-color2);\n padding-bottom: 8px;\n}\n\n.sage-ai-snippet-viewer-header h4 {\n margin: 0;\n font-size: var(--jp-ui-font-size2);\n font-weight: 600;\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-snippet-close-btn {\n background: none;\n border: none;\n font-size: 18px;\n cursor: pointer;\n color: var(--jp-ui-font-color2);\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n}\n\n.sage-ai-snippet-close-btn:hover {\n background: var(--jp-layout-color2);\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-snippet-viewer-description {\n color: var(--jp-ui-font-color2);\n font-style: italic;\n line-height: 1.4;\n}\n\n.sage-ai-snippet-viewer-content {\n background: var(--jp-layout-color2);\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n padding: 12px;\n max-height: 300px;\n overflow-y: auto;\n}\n\n.sage-ai-snippet-viewer-content pre {\n margin: 0;\n font-family: var(--jp-code-font-family);\n font-size: var(--jp-code-font-size);\n color: var(--jp-content-font-color0);\n white-space: pre-wrap;\n word-wrap: break-word;\n}\n\n.sage-ai-snippet-viewer-actions {\n display: flex;\n gap: 8px;\n justify-content: flex-start;\n flex-wrap: wrap;\n position: relative;\n}\n\n/* Full action buttons for wider screens */\n.sage-ai-snippet-actions-full {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n/* Compact dropdown for smaller screens */\n.sage-ai-snippet-actions-compact {\n position: relative;\n display: none; /* Hidden by default */\n}\n\n/* Media query for responsive behavior */\n@media (width <= 400px) {\n .sage-ai-snippet-actions-full {\n display: none;\n }\n\n .sage-ai-snippet-actions-compact {\n display: block;\n }\n}\n\n/* Dropdown button styling */\n.sage-ai-snippet-actions-dropdown-btn {\n background: var(--jp-layout-color2);\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 16px;\n color: var(--jp-ui-font-color1);\n transition: background-color 0.2s;\n}\n\n.sage-ai-snippet-actions-dropdown-btn:hover {\n background: var(--jp-layout-color3);\n}\n\n/* Dropdown menu */\n.sage-ai-snippet-actions-dropdown {\n position: absolute;\n top: 100%;\n right: 0;\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n box-shadow: 0 2px 8px rgb(0 0 0 / 15%);\n z-index: 1000;\n min-width: 120px;\n margin-top: 4px;\n}\n\n/* Dropdown items */\n.sage-ai-snippet-dropdown-item {\n display: block;\n width: 100%;\n padding: 8px 12px;\n background: none;\n border: none;\n text-align: left;\n cursor: pointer;\n font-size: var(--jp-ui-font-size0);\n color: var(--jp-ui-font-color1);\n transition: background-color 0.2s;\n}\n\n.sage-ai-snippet-dropdown-item:hover {\n background: var(--jp-layout-color2);\n}\n\n.sage-ai-snippet-dropdown-item:first-child {\n border-radius: 4px 4px 0 0;\n}\n\n.sage-ai-snippet-dropdown-item:last-child {\n border-radius: 0 0 4px 4px;\n}\n\n/* Dark theme support for dropdown */\n[data-jp-theme-light='false'] .sage-ai-snippet-actions-dropdown {\n background: var(--jp-layout-color0);\n border-color: var(--jp-border-color0);\n box-shadow: 0 2px 8px rgb(0 0 0 / 40%);\n}\n\n[data-jp-theme-light='false'] .sage-ai-snippet-actions-dropdown-btn {\n background: var(--jp-layout-color1);\n border-color: var(--jp-border-color1);\n}\n\n[data-jp-theme-light='false'] .sage-ai-snippet-actions-dropdown-btn:hover {\n background: var(--jp-layout-color2);\n}\n\n.sage-ai-snippet-enable-btn,\n.sage-ai-snippet-edit-btn {\n padding: 2px;\n border: none;\n cursor: pointer;\n font-size: var(--jp-ui-font-size0);\n transition: background-color 0.2s;\n}\n\n.sage-ai-snippet-enable-btn {\n background: var(--jp-success-color1);\n color: white;\n}\n\n.sage-ai-snippet-enable-btn:hover {\n background: var(--jp-success-color0);\n}\n\n.sage-ai-snippet-edit-btn {\n background: none !important;\n color: white;\n}\n\n/* List Styles */\n.sage-ai-snippet-list {\n display: flex;\n flex-direction: column;\n height: 100%;\n flex: 1;\n min-height: 0; /* Important for flex shrinking */\n}\n\n.sage-ai-snippet-list-container {\n flex: 1;\n overflow-y: auto;\n min-height: 0; /* Important for flex shrinking */\n}\n\n.sage-ai-snippet-empty {\n text-align: center;\n color: var(--jp-ui-font-color2);\n padding: 32px 16px;\n}\n\n.sage-ai-snippet-empty p {\n margin: 8px 0;\n}\n\n.sage-ai-snippet-items {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding-bottom: 8px; /* Add some padding at the bottom */\n}\n\n.sage-ai-snippet-item-container {\n display: flex;\n flex-direction: column;\n}\n\n.sage-ai-snippet-item {\n /* border: 1px solid var(--jp-border-color2); */\n border-radius: 6px;\n padding: 6px;\n cursor: pointer;\n transition: all 0.2s;\n\n /* background: var(--jp-layout-color1); */\n}\n\n.sage-ai-snippet-item:hover {\n background: var(--jp-layout-color2);\n border-color: var(--jp-brand-color1);\n}\n\n[data-jp-theme-light='false'] .sage-ai-snippet-item:hover {\n background: rgb(56 56 56 / 30%) !important;\n}\n\n.sage-ai-snippet-item.selected {\n border-color: var(--jp-brand-color1);\n background: var(--jp-layout-color2);\n}\n\n.sage-ai-snippet-item-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 13px;\n font-style: normal;\n font-weight: 500;\n line-height: 155%;\n}\n\n[data-jp-theme-light='false'] .sage-ai-snippet-item-header {\n color: #e7e7e7;\n}\n\n.sage-ai-snippet-title-container {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n}\n\n.sage-ai-snippet-item-header h5 {\n margin: 0;\n font-size: 13px;\n font-weight: 500 !important;\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-snippet-checkmark {\n color: var(--jp-brand-color1);\n flex-shrink: 0;\n}\n\n.sage-ai-snippet-item-actions {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.sage-ai-snippet-menu-btn {\n background: none;\n border: none;\n font-size: 16px;\n cursor: pointer;\n color: var(--jp-ui-font-color2);\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 3px;\n opacity: 0;\n transition: all 0.2s;\n}\n\n.sage-ai-snippet-item:hover .sage-ai-snippet-menu-btn {\n opacity: 1;\n}\n\n.sage-ai-snippet-menu-btn:hover {\n background: var(--jp-layout-color3);\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-snippet-context-menu {\n position: absolute;\n top: 100%;\n right: 0;\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n box-shadow: 0 4px 12px rgb(0 0 0 / 15%);\n z-index: 1000;\n min-width: 120px;\n padding: 4px 0;\n}\n\n.sage-ai-snippet-menu-item {\n display: block;\n width: 100%;\n padding: 8px 12px;\n border: none;\n background: none;\n text-align: left;\n cursor: pointer;\n font-size: var(--jp-ui-font-size0);\n color: var(--jp-ui-font-color0);\n transition: background-color 0.2s;\n}\n\n.sage-ai-snippet-menu-item:hover {\n background: var(--jp-layout-color2);\n}\n\n.sage-ai-snippet-menu-item.delete:hover {\n background: var(--jp-error-color1);\n color: white;\n}\n\n.sage-ai-snippet-delete-btn {\n background: none;\n border: none;\n font-size: 16px;\n cursor: pointer;\n color: var(--jp-ui-font-color2);\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 3px;\n opacity: 0;\n transition: all 0.2s;\n}\n\n.sage-ai-snippet-item:hover .sage-ai-snippet-delete-btn {\n opacity: 1;\n}\n\n.sage-ai-snippet-delete-btn:hover {\n background: var(--jp-error-color1);\n color: white;\n}\n\n.sage-ai-snippet-item-description {\n margin: 0 0 8px;\n color: var(--jp-ui-font-color2);\n font-size: var(--jp-ui-font-size0);\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.sage-ai-snippet-item-meta {\n font-size: var(--jp-ui-font-size00);\n color: var(--jp-ui-font-color3);\n}\n\n/* Inline Viewer Styles */\n.sage-ai-snippet-viewer-inline {\n margin-top: 16px;\n /*padding: 16px;*/\n background: var(--jp-layout-color0);\n border-top: 1px solid var(--jp-border-color1);\n flex-shrink: 0; /* Don't shrink the viewer */\n max-height: 40vh; /* Limit maximum height */\n display: flex;\n flex-direction: column;\n overflow: hidden; /* Remove scrolling from the entire viewer */\n}\n\n.sage-ai-snippet-description {\n color: var(--jp-ui-font-color3);\n font-size: 13px;\n font-style: normal;\n font-weight: 500;\n line-height: 155%; /* 20.15px */\n}\n\n/* First Row: Toolbar with Preview label and action buttons */\n.sage-ai-snippet-viewer-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-top: 16px;\n /*border-bottom: 1px solid var(--jp-border-color2);*/\n flex-shrink: 0; /* Don't shrink the toolbar */\n}\n\n.sage-ai-snippet-preview-label {\n font-weight: 600;\n color: var(--jp-ui-font-color0);\n font-size: 13px;\n}\n\n.sage-ai-snippet-viewer-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.sage-ai-snippet-edit-btn {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--jp-ui-font-color2);\n\n /* width: 28px; */\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.sage-ai-snippet-edit-btn:hover {\n background: var(--jp-layout-color2);\n color: var(--jp-brand-color1);\n}\n\n.sage-ai-snippet-close-btn {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--jp-ui-font-color2);\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.sage-ai-snippet-close-btn:hover {\n background: var(--jp-layout-color2);\n color: var(--jp-ui-font-color0);\n}\n\n/* Second Row: Title display */\n.sage-ai-snippet-viewer-title-row {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n flex-shrink: 0; /* Don't shrink the title row */\n}\n\n.sage-ai-snippet-title-label {\n font-weight: 600;\n color: var(--jp-ui-font-color1);\n font-size: 13px;\n}\n\n.sage-ai-snippet-title-text {\n color: var(--jp-ui-font-color0);\n font-size: 13px;\n flex: 1;\n}\n\n/* Third Row: Code block (simplified) */\n.sage-ai-snippet-code-block {\n margin: 0;\n border: 1px solid var(--jp-border-color2);\n border-radius: 6px;\n overflow: hidden;\n background: var(--jp-layout-color2);\n flex: 1; /* Take up remaining space */\n display: flex;\n flex-direction: column;\n min-height: 0; /* Allow flexbox to shrink */\n}\n\n.sage-ai-snippet-insert-btn {\n background: none;\n display: flex;\n flex-direction: row;\n align-items: center;\n color: var(--jp-brand-color0);\n border-radius: 4px;\n gap: 8px;\n padding: 2px;\n border: none !important;\n cursor: pointer;\n transition: background-color 0.2s;\n text-align: center;\n font-size: 13px;\n font-style: normal;\n font-weight: 600;\n line-height: 155%; /* 20.15px */\n}\n\n.insert-icon-container {\n width: 20px;\n height: 20px;\n}\n\n.sage-ai-snippet-insert-btn:hover {\n background: none;\n}\n\n/* Remove state styling for insert button */\n.sage-ai-snippet-insert-btn.sage-ai-snippet-remove-state {\n color: var(--jp-error-color1) !important;\n background: none !important;\n}\n\n.sage-ai-snippet-insert-btn.sage-ai-snippet-remove-state\n .insert-icon-container {\n fill: var(--jp-error-color1) !important;\n transform: rotate(180deg);\n}\n\n.sage-ai-snippet-insert-btn.sage-ai-snippet-remove-state\n .insert-icon-container {\n div {\n svg {\n g {\n path {\n fill: var(--jp-error-color1) !important;\n }\n }\n }\n }\n}\n\n.sage-ai-snippet-insert-btn.sage-ai-snippet-remove-state:hover {\n background: var(--jp-error-color3);\n}\n\n.sage-ai-snippet-code-content {\n margin: 0;\n padding: 12px;\n font-family: var(--jp-code-font-family);\n font-size: var(--jp-code-font-size);\n color: var(--jp-content-font-color0);\n background: var(--jp-layout-color2);\n overflow: auto auto; /* Make only the content scrollable */\n white-space: pre;\n line-height: 1.4;\n flex: 1; /* Take up remaining space in the code block */\n min-height: 0; /* Allow flexbox to shrink */\n}\n\n.sage-ai-snippet-code-content code {\n background: none;\n padding: 0;\n font-family: inherit;\n font-size: inherit;\n color: inherit;\n}\n\n.sage-ai-snippet-viewer-meta {\n display: flex;\n gap: 16px;\n margin-top: 12px;\n padding-top: 8px;\n border-top: 1px solid var(--jp-border-color2);\n font-size: var(--jp-ui-font-size00);\n color: var(--jp-ui-font-color3);\n flex-shrink: 0; /* Don't shrink the meta section */\n}\n\n/* Custom Icon Styles */\n.sage-ai-snippet-icon {\n background-image: url(${c});\n background-repeat: no-repeat;\n background-position: center;\n background-size: 16px 16px;\n}\n\n/* Dark theme adjustments */\n[data-jp-theme-light='false'] .sage-ai-snippet-creation-widget {\n color: var(--jp-ui-font-color1);\n}\n\n[data-jp-theme-light='false'] .sage-ai-snippet-viewer-content {\n background: var(--jp-layout-color0);\n}\n\n/* Dark mode styling for create button */\n[data-jp-theme-light='false'] .sage-ai-snippet-create-btn {\n border-radius: 8px;\n border: 0.5px solid var(--Border-Border, #383838);\n background: var(--Button-bg-default, #1a1a1a);\n color: white;\n}\n\n[data-jp-theme-light='false'] .sage-ai-snippet-create-btn:hover {\n background: var(--Button-bg-hover, #2a2a2a);\n border-color: var(--Border-Border-hover, #4a4a4a);\n}\n\n/* Make SVG icons white in dark mode */\n[data-jp-theme-light='true'] .sage-ai-snippet-create-btn svg {\n filter: invert(1);\n}\n\n/* Modal Styles */\n.sage-ai-custom-snippet-modal .modal-content {\n border-radius: 12px;\n border: 1px solid var(--Border-Border, #383838);\n background: var(--BG-main, #111);\n box-shadow: 0 8px 17.1px 0 rgb(208 208 208 / 9%);\n}\n\n/* Ensure modal header and body text are readable */\n.sage-ai-custom-snippet-modal .modal-header,\n.sage-ai-custom-snippet-modal .modal-body,\n.sage-ai-custom-snippet-modal .modal-footer {\n background: transparent;\n border-color: var(--Border-Border, #383838);\n color: var(--jp-ui-font-color0);\n}\n\n/* Style the close button to match the dark theme */\n.sage-ai-custom-snippet-modal .btn-close {\n filter: invert(1);\n}\n\n.sage-ai-snippet-form-modal {\n max-width: 600px;\n width: 90%;\n max-height: 80vh;\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n.sage-ai-snippet-form-modal-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n border-bottom: 1px solid var(--jp-border-color2);\n padding-bottom: 12px;\n}\n\n.sage-ai-snippet-form-modal-header .sage-ai-dialog-title {\n margin: 0;\n font-size: 1.2em;\n font-weight: 600;\n color: var(--jp-ui-font-color1);\n}\n\n.sage-ai-snippet-form-modal .sage-ai-snippet-close-btn {\n background: none;\n border: none;\n font-size: 20px;\n cursor: pointer;\n color: var(--jp-ui-font-color2);\n padding: 4px 8px;\n border-radius: 4px;\n line-height: 1;\n}\n\n.sage-ai-snippet-form-modal .sage-ai-snippet-close-btn:hover {\n background: var(--jp-layout-color2);\n color: var(--jp-ui-font-color1);\n}\n\n/* Modal form inherits existing form styles */\n.sage-ai-snippet-form-modal .sage-ai-snippet-form {\n margin: 0;\n}\n\n.sage-ai-snippet-form-modal .sage-ai-snippet-form-group textarea {\n min-height: 200px;\n resize: vertical;\n}\n\n/* Modal overlay effect */\n.sage-ai-modal {\n backdrop-filter: blur(2px);\n}\n\n/* Responsive adjustments */\n@media (width <= 320px) {\n .sage-ai-snippet-creation-panel {\n padding: 12px;\n }\n\n .sage-ai-snippet-form-actions {\n flex-direction: column;\n }\n\n .sage-ai-snippet-viewer-actions {\n flex-direction: column;\n }\n\n .sage-ai-snippet-form-modal {\n width: 95%;\n max-height: 90vh;\n }\n}\n`,""]);const g=d},3114:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,"/* Wrapper for fixed positioning with flexbox */\n.sage-ai-state-display-container {\n position: fixed !important;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n z-index: 1;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n}\n\n.sage-ai-llm-state-widget {\n order: 2;\n pointer-events: auto;\n margin: 0 17px;\n /* Remove transform since we're using flexbox layout */\n}\n\n.sage-ai-input-spacer {\n order: 3;\n flex-shrink: 0;\n}\n\n/* LLM State Display - positioned above the chat input */\n.sage-ai-llm-state-display {\n display: none; /* Hidden by default */\n align-items: center;\n justify-content: center;\n padding: 8px;\n padding-bottom: 18px;\n margin-bottom: 0;\n background-color: var(--jp-layout-color1);\n border-radius: 8px;\n font-size: 13px;\n color: var(--jp-ui-font-color1);\n box-shadow: 0 2px 4px rgb(0 0 0 / 5%);\n transition: all 0.2s ease-in-out;\n /*transform: translateY(-10px);*/\n border: 1px solid var(--jp-border-color2);\n position: relative;\n z-index: 0; /* Ensure it stays above other content */\n}\n\n.sage-ai-generating,\n.sage-ai-using-tool {\n justify-content: space-between !important;\n}\n\n.sage-ai-llm-state-content {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.sage-ai-waiting-for-user {\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background: transparent;\n border: 1px dashed #d3a500;\n}\n\n.sage-ai-llm-state-text {\n color: var(--jp-ui-font-color2);\n font-style: normal;\n font-weight: 500;\n font-size: var(--jp-ui-font-size1);\n}\n\n/* Ensure the blob loader works in this context */\n.sage-ai-llm-state-display .sage-ai-blob-loader {\n flex-shrink: 0;\n}\n\n/* Diff State Styles */\n.sage-ai-diff-state {\n display: flex !important;\n flex-direction: column;\n align-items: stretch !important;\n justify-content: flex-start !important;\n}\n\n.sage-ai-diff-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--jp-border-color2);\n}\n\n.sage-ai-diff-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--jp-ui-font-color1);\n}\n\n.sage-ai-diff-icon {\n font-size: 16px;\n}\n\n.sage-ai-diff-text {\n font-size: 14px;\n}\n\n.sage-ai-diff-bulk-actions {\n display: flex;\n gap: 6px;\n}\n\n.sage-ai-diff-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n overflow-y: auto;\n margin-top: 6px;\n}\n\n.sage-ai-diff-decision {\n margin-left: 4px;\n font-size: 9px;\n}\n\n.sage-ai-llm-state-stop-button {\n background-color: var(--jp-layout-color2);\n color: var(--jp-ui-font-color1);\n font-size: var(--jp-ui-font-size1);\n font-style: normal;\n font-weight: 500;\n line-height: 160%; /* 19.2px */\n padding: 2px 6px;\n box-shadow: none;\n border: none;\n cursor: pointer;\n}\n\n.sage-ai-llm-state-stop-button:hover {\n background-color: var(--jp-layout-color1);\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-diff-decision-approved {\n color: #28a745;\n}\n\n.sage-ai-diff-decision-rejected {\n color: #dc3545;\n}\n\n.sage-ai-diff-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 6px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 6px;\n font-size: 12px;\n transition: all 0.2s ease;\n position: relative;\n z-index: 0;\n}\n\n.sage-ai-diff-item::before {\n content: '';\n position: absolute;\n inset: 0; /* shorthand for top/right/bottom/left: 0 */\n background: var(--jp-layout-color1);\n opacity: 1; /* initial opacity */\n transition: opacity 0.25s ease;\n z-index: -1; /* behind the box's content */\n border-radius: 6px;\n}\n\n.sage-ai-diff-item:hover {\n cursor: pointer;\n}\n\n.sage-ai-diff-item:hover::before {\n opacity: 0.8; /* hover opacity */\n}\n\n.sage-ai-diff-info {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n\n.sage-ai-diff-operation {\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: bold;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n.sage-ai-diff-changes {\n display: flex;\n gap: 4px;\n font-size: 11px;\n font-weight: 600;\n align-items: center;\n}\n\n.fix_run_cell_size {\n height: 16px;\n}\n\n.sage-ai-diff-summary {\n width: fit-content;\n}\n\n.sage-ai-diff-added {\n color: #28a745;\n}\n\n.sage-ai-diff-removed {\n color: #dc3545;\n}\n\n.sage-ai-diff-actions {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n}\n\n.sage-ai-diff-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n font-weight: bold;\n transition: all 0.2s ease;\n background-color: var(--jp-layout-color2);\n color: var(--jp-ui-font-color2);\n}\n\n.sage-ai-diff-approve {\n color: #28a745;\n}\n\n.sage-ai-diff-approve:hover {\n background-color: #28a745;\n color: white;\n}\n\n.sage-ai-diff-reject {\n color: #dc3545;\n}\n\n.sage-ai-diff-reject:hover {\n color: white;\n}\n\n.sage-ai-diff-approve-all,\n.sage-ai-diff-reject-all {\n padding: 2px 6px;\n width: auto;\n height: auto;\n border-radius: 5px !important;\n font-size: var(--jp-ui-font-size1);\n font-weight: 500;\n line-height: 160%;\n}\n\n.sage-ai-diff-approve-all {\n color: var(--jp-ui-inverse-font-color0);\n background-color: var(--jp-inverse-layout-color2);\n}\n\n.sage-ai-diff-approve-all:hover {\n color: var(--jp-ui-inverse-font-color1);\n background-color: var(--jp-inverse-layout-color3);\n}\n\n.sage-ai-diff-reject-all {\n background-color: var(--jp-layout-color0);\n color: var(--jp-ui-font-color1);\n}\n\n.sage-ai-diff-reject-all:hover {\n color: var(--jp-ui-font-color0);\n background-color: var(--jp-layout-color1);\n}\n\n/* Generating state specific styles */\n.sage-ai-generating {\n display: flex !important;\n}\n\n/* Using tool state specific styles */\n.sage-ai-using-tool {\n display: flex !important;\n}\n\n.sage-ai-tool-loader {\n width: 16px;\n height: 16px;\n border: 2px solid var(--jp-border-color2);\n border-top: 2px solid var(--jp-brand-color1);\n border-radius: 50%;\n animation: spin 1s linear infinite;\n flex-shrink: 0;\n}\n\n.sage-ai-tool-icon-container {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sage-ai-tool-icon-container svg {\n width: 16px;\n height: 16px;\n fill: var(--jp-brand-color1);\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n/* Ensure the tool state has the same styling as generating */\n.sage-ai-using-tool .sage-ai-llm-state-text {\n color: var(--jp-ui-font-color2);\n font-style: italic;\n font-weight: 500;\n}\n\n/* Collapsible Diff Summary Bar */\n.sage-ai-diff-summary-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n transition: background-color 0.2s ease;\n user-select: none;\n}\n\n.sage-ai-diff-menu-icon {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n\n.sage-ai-diff-summary-info {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n}\n\n.sage-ai-diff-cell-count {\n font-weight: 600;\n color: var(--jp-ui-font-color1);\n font-size: var(--jp-ui-font-size1);\n}\n\n.sage-ai-diff-cell-count-info {\n display: flex;\n gap: 4px;\n margin: 0;\n}\n\n.sage-ai-diff-added-count {\n color: #28a745;\n border-radius: 4px;\n font-size: 11px;\n font-weight: bold;\n}\n\n.sage-ai-diff-removed-count {\n color: #dc3545;\n border-radius: 4px;\n font-size: 11px;\n font-weight: bold;\n}\n\n.sage-ai-diff-expand-icon {\n color: var(--jp-ui-font-color2);\n font-size: 12px;\n margin-left: auto;\n margin-right: 8px;\n transition: transform 0.2s ease;\n}\n\n.sage-ai-diff-summary-actions {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n/* Hide actions on hover for diff items when showActionsOnHover is true */\n.sage-ai-diff-item-hover-actions .sage-ai-diff-actions {\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.sage-ai-diff-item-hover-actions:hover .sage-ai-diff-actions {\n opacity: 1;\n}\n\n/* Button container for LLM state display */\n.sage-ai-llm-state-buttons {\n display: flex;\n gap: 6px;\n align-items: center;\n}\n\n/* Run/Reject buttons for notebook-run_cell tool */\n.sage-ai-llm-state-run-button,\n.sage-ai-llm-state-reject-button {\n padding: 4px 8px;\n border: none;\n border-radius: 8px !important;\n cursor: pointer;\n font-size: var(--jp-ui-font-size1);\n font-weight: 500;\n line-height: 160%;\n transition: all 0.2s ease;\n box-shadow: none;\n}\n\n.sage-ai-llm-state-run-button {\n background-color: var(--jp-inverse-layout-color0);\n color: var(--jp-ui-inverse-font-color0);\n}\n\n.sage-ai-llm-state-run-button:hover {\n background-color: var(--jp-inverse-layout-color2);\n color: var(--jp-ui-inverse-font-color1);\n}\n\n.sage-ai-llm-state-reject-button {\n background-color: var(--jp-layout-color0);\n color: var(--jp-ui-font-color1);\n}\n\n.sage-ai-llm-state-reject-button:hover {\n background-color: var(--jp-layout-color1);\n color: var(--jp-ui-font-color0);\n}\n",""]);const s=r},3342:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,'/* Diff Navigation Widget Styles */\n.sage-ai-diff-navigation-widget {\n position: absolute;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1000;\n pointer-events: auto;\n transition: bottom 0.2s ease;\n}\n\n.sage-ai-diff-navigation-widget:hover {\n bottom: 22px;\n}\n\n/* Ensure the notebook container has relative positioning for absolute child positioning */\n.jp-Notebook {\n position: relative;\n}\n\n.sage-ai-diff-navigation-floating-content {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 8px;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color1);\n border-radius: 8px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n font-family: var(--jp-ui-font-family);\n}\n\n/* Navigation Section */\n.sage-ai-diff-navigation-navigation-section {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.sage-ai-diff-navigation-nav-button {\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 8px;\n background-color: transparent;\n color: var(--jp-ui-font-color0);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: bold;\n transition: all 0.2s ease;\n font-family: var(--jp-ui-font-family);\n}\n\n.sage-ai-diff-navigation-nav-button:hover:not(:disabled) {\n background-color: var(--jp-layout-color2);\n}\n\n.sage-ai-diff-navigation-nav-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n color: var(--jp-ui-font-color3);\n}\n\n.sage-ai-diff-navigation-counter-display {\n font-size: var(--jp-ui-font-size1);\n font-weight: 500;\n color: var(--jp-ui-font-color0);\n min-width: 40px;\n text-align: center;\n font-family: var(--jp-ui-font-family);\n}\n\n/* Button Section */\n.sage-ai-diff-navigation-button-section {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.sage-ai-diff-navigation-action-button {\n padding: 4px 6px;\n border-radius: 6px !important;\n font-size: var(--jp-ui-font-size1);\n font-weight: 500;\n cursor: pointer;\n border: none;\n transition: all 0.2s ease;\n font-family: var(--jp-ui-font-family);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.sage-ai-diff-navigation-action-button span {\n white-space: nowrap;\n}\n\n/* Reject Button (Outlined) */\n.sage-ai-diff-navigation-reject-button {\n background-color: var(--jp-layout-color3);\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-diff-navigation-reject-button:hover {\n background-color: var(--jp-layout-color4);\n}\n\n/* Approve Button (Primary) */\n.sage-ai-diff-navigation-approve-button {\n background-color: var(--jp-layout-color3);\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-diff-navigation-approve-button:hover {\n background-color: var(--jp-layout-color4);\n}\n\n/* Accept & Run All Button (Enhanced Primary) */\n.sage-ai-diff-navigation-accept-run-button {\n background-color: var(--jp-inverse-layout-color2);\n color: var(--jp-ui-inverse-font-color0);\n}\n\n.sage-ai-diff-navigation-accept-run-button:hover {\n background-color: var(--jp-inverse-layout-color0);\n}\n\n/* Hidden state */\n.sage-ai-diff-navigation-widget.hidden {\n display: none;\n}\n\n/* Dark theme adjustments */\n[data-jp-theme-light="false"] .sage-ai-diff-navigation-floating-content {\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -1px rgba(0, 0, 0, 0.3);\n}\n\n/* Light theme specific overrides if needed */\n[data-jp-theme-light="true"] .sage-ai-diff-navigation-floating-content {\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n}\n\n/* Icon styling */\n.sage-ai-diff-navigation-nav-icon {\n opacity: 0.7;\n transition: opacity 0.2s ease;\n}\n\n.sage-ai-diff-navigation-action-icon {\n opacity: 0.8;\n transition: opacity 0.2s ease;\n}\n\n/* Make icons lighter on hover */\n.sage-ai-diff-navigation-nav-button:hover:not(:disabled) .sage-ai-diff-navigation-nav-icon {\n opacity: 1;\n}\n\n.sage-ai-diff-navigation-action-button:hover .sage-ai-diff-navigation-action-icon {\n opacity: 1;\n}\n\n/* Icon color adjustments for different button states */\n.sage-ai-diff-navigation-nav-button:disabled .sage-ai-diff-navigation-nav-icon {\n opacity: 0.3;\n}\n\n/* Specific button styling (if needed for customization) */\n.sage-ai-diff-navigation-prev-button {\n /* Previous button specific styles can be added here */\n}\n\n.sage-ai-diff-navigation-next-button {\n /* Next button specific styles can be added here */\n}\n',""]);const s=r},4246:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,".sage-ai-codebase-manager {\n padding: 16px;\n flex-shrink: 0; /* Prevent shrinking within settings container */\n}\n\n.sage-ai-section-title {\n margin-top: 0;\n margin-bottom: 8px;\n}\n\n.sage-ai-section-description {\n margin-top: 0;\n margin-bottom: 16px;\n color: var(--jp-ui-font-color2);\n}\n\n.sage-ai-add-repo-form {\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.sage-ai-form-group {\n margin-bottom: 12px;\n}\n\n.sage-ai-form-group label {\n display: block;\n margin-bottom: 4px;\n font-weight: 500;\n}\n\n.sage-ai-settings-title {\n margin-left: 16px;\n}\n\n.sage-ai-input, .sage-ai-textarea {\n width: 98%;\n padding: 8px;\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n background-color: var(--jp-layout-color0);\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-button {\n padding: 8px 16px;\n border-radius: 4px;\n cursor: pointer;\n font-weight: 500;\n border: none;\n}\n\n.sage-ai-primary-button {\n background-color: var(--jp-brand-color1);\n color: white;\n}\n\n.sage-ai-primary-button:hover {\n background-color: var(--jp-brand-color0);\n}\n\n.sage-ai-codebase-list {\n margin-top: 20px;\n max-height: 400px; /* Set maximum height */\n overflow-y: auto; /* Enable vertical scrolling */\n scroll-behavior: smooth; /* Add smooth scrolling */\n padding-right: 4px; /* Add some padding for the scrollbar */\n}\n\n/* Styling for webkit-based browsers' scrollbars */\n.sage-ai-codebase-list::-webkit-scrollbar {\n width: 8px;\n}\n\n.sage-ai-codebase-list::-webkit-scrollbar-track {\n background: var(--jp-layout-color0);\n border-radius: 4px;\n}\n\n.sage-ai-codebase-list::-webkit-scrollbar-thumb {\n background: var(--jp-border-color2);\n border-radius: 4px;\n}\n\n.sage-ai-codebase-list::-webkit-scrollbar-thumb:hover {\n background: var(--jp-border-color1);\n}\n\n.sage-ai-empty-state {\n padding: 20px;\n text-align: center;\n border: 1px dashed var(--jp-border-color1);\n color: var(--jp-ui-font-color2);\n border-radius: 4px;\n}\n\n.sage-ai-codebase-item {\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n padding: 16px;\n margin-bottom: 12px;\n background-color: var(--jp-layout-color1);\n}\n\n.sage-ai-codebase-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 8px;\n}\n\n.sage-ai-codebase-title {\n font-weight: bold;\n margin: 0;\n}\n\n.sage-ai-codebase-path {\n margin: 4px 0;\n color: var(--jp-ui-font-color2);\n word-break: break-all;\n}\n\n.sage-ai-codebase-instructions {\n margin: 8px 0;\n padding: 8px;\n background-color: var(--jp-layout-color0);\n border-left: 3px solid var(--jp-brand-color1);\n border-radius: 2px;\n}\n\n.sage-ai-codebase-actions {\n display: flex;\n gap: 8px;\n}\n\n.sage-ai-action-button {\n padding: 4px 8px;\n border-radius: 4px;\n cursor: pointer;\n border: 1px solid var(--jp-border-color1);\n background-color: var(--jp-layout-color2);\n color: var(--jp-ui-font-color0);\n font-size: 0.9em;\n}\n\n.sage-ai-action-button:hover {\n background-color: var(--jp-layout-color3);\n}\n\n.sage-ai-danger-button {\n color: var(--jp-error-color1);\n border-color: var(--jp-error-color1);\n}\n\n.sage-ai-danger-button:hover {\n background-color: rgba(var(--jp-error-color-rgb), 0.1);\n}\n\n.sage-ai-index-status {\n font-size: 0.9em;\n margin: 8px 0;\n padding: 4px 8px;\n background-color: var(--jp-layout-color2);\n border-radius: 4px;\n display: inline-block;\n}\n",""]);const s=r},4417:n=>{n.exports=function(n,o){return o||(o={}),n?(n=String(n.__esModule?n.default:n),/^['"].*['"]$/.test(n)&&(n=n.slice(1,-1)),o.hash&&(n+=o.hash),/["'() \t\n]|(%20)/.test(n)||o.needQuotes?'"'.concat(n.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):n):n}},5056:(n,o,e)=>{n.exports=function(n){var o=e.nc;o&&n.setAttribute("nonce",o)}},5072:n=>{var o=[];function e(n){for(var e=-1,a=0;a<o.length;a++)if(o[a].identifier===n){e=a;break}return e}function a(n,a){for(var i={},r=[],s=0;s<n.length;s++){var l=n[s],p=a.base?l[0]+a.base:l[0],d=i[p]||0,c="".concat(p," ").concat(d);i[p]=d+1;var g=e(c),f={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==g)o[g].references++,o[g].updater(f);else{var u=t(f,a);a.byIndex=s,o.splice(s,0,{identifier:c,updater:u,references:1})}r.push(c)}return r}function t(n,o){var e=o.domAPI(o);return e.update(n),function(o){if(o){if(o.css===n.css&&o.media===n.media&&o.sourceMap===n.sourceMap&&o.supports===n.supports&&o.layer===n.layer)return;e.update(n=o)}else e.remove()}}n.exports=function(n,t){var i=a(n=n||[],t=t||{});return function(n){n=n||[];for(var r=0;r<i.length;r++){var s=e(i[r]);o[s].references--}for(var l=a(n,t),p=0;p<i.length;p++){var d=e(i[p]);0===o[d].references&&(o[d].updater(),o.splice(d,1))}i=l}}},5248:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,"@import url(https://fonts.googleapis.com/css2?family=Geist:wght@100..900&display=swap);"]),r.push([n.id,"/* Import Geist font from Google Fonts */\n\n/* Override JupyterLab font variables to use Geist */\n:root {\n --jp-ui-font-family:\n 'Geist', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial,\n sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol' !important;\n --jp-content-font-family: 'Geist', 'Source Sans Pro', sans-serif !important;\n}\n\n/* Ensure Geist is applied to the plugin elements */\n.sage-ai-chatbox,\n.sage-ai-chat-input,\n.sage-ai-rich-chat-input,\n.sage-ai-rich-chat-input-wrapper,\n.sage-ai-message,\n.sage-ai-markdown-content,\n.sage-ai-tool-calls,\n.sage-ai-step-floating-box,\n.sage-ai-banner-header {\n font-family:\n 'Geist',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n Helvetica,\n Arial,\n sans-serif;\n}\n",""]);const s=r},5433:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,".sage-ai-mention-dropdown {\n position: absolute;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-inverse-border-color);\n border-radius: 8px;\n box-shadow: 0 2px 8px rgb(0 0 0 / 15%);\n z-index: 150000 !important;\n max-height: 200px;\n overflow: hidden;\n width: auto;\n display: none;\n flex-direction: column;\n min-width: 65%;\n}\n\n[data-jp-theme-light='false'] .sage-ai-mention-dropdown {\n background-color: var(--jp-layout-color1);\n}\n\n.sage-ai-mention-dropdown.visible {\n display: flex;\n}\n\n/* Search container with icon and input */\n.sage-ai-mention-search-container {\n display: flex;\n padding: 4px 8px;\n border-radius: 8px;\n align-items: center;\n gap: 8px;\n align-self: stretch;\n border: 0.8px solid var(--jp-border-color3);\n background-color: var(--jp-layout-color0);\n}\n\n.sage-ai-mention-search-icon {\n width: 16px;\n height: 16px;\n color: var(--jp-ui-font-color2);\n flex-shrink: 0;\n}\n\n.sage-ai-mention-search-input {\n flex: 1;\n outline: none;\n background: transparent;\n color: var(--jp-ui-font-color1);\n font-size: 12px;\n padding: 4px 0;\n border: none;\n}\n\n.sage-ai-mention-search-input::placeholder {\n color: var(--jp-ui-font-color2);\n}\n\n/* Category header container */\n.sage-ai-mention-header-container {\n display: flex;\n padding: 8px 10px;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n gap: 8px;\n align-self: stretch;\n flex-shrink: 0;\n}\n\n/* Content container - scrollable area */\n.sage-ai-mention-content {\n overflow-y: auto;\n overflow-x: hidden;\n flex: 1;\n}\n\n/* Category header with back caret */\n.sage-ai-mention-category-header {\n display: flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n padding: 0;\n width: 100%;\n}\n\n.sage-ai-mention-category-header:hover {\n opacity: 0.8;\n}\n\n.sage-ai-mention-back-icon {\n width: 14px;\n height: 15px;\n color: #e7e7e7;\n flex-shrink: 0;\n}\n\n.sage-ai-mention-category-title {\n overflow: hidden;\n color: var(--Text-text-primary, #e7e7e7);\n text-overflow: ellipsis;\n font-family: Geist;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n line-height: 160%; /* 19.2px */\n flex: 1;\n}\n\n.sage-ai-mention-item {\n padding: 8px 10px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 8px;\n\n /* border-bottom: 1px solid var(--jp-border-color2); */\n}\n\n.sage-ai-mention-item:last-child {\n border-bottom: none;\n}\n\n.sage-ai-mention-item:hover,\n.sage-ai-mention-item.active {\n background-color: var(--jp-layout-color2);\n}\n\n[data-jp-theme-light='false'] {\n .sage-ai-mention-content,\n .sage-ai-mention-dropdown {\n background: #111;\n }\n}\n\n.sage-ai-mention-item-icon {\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--jp-ui-font-color1);\n font-size: 14px;\n}\n\n.sage-ai-mention-item-text {\n font-size: 12px;\n color: var(--jp-ui-font-color1);\n flex: 1;\n}\n\n.sage-ai-mention-item-description {\n font-size: var(--jp-ui-font-size0);\n color: var(--jp-ui-font-color2);\n font-style: italic;\n}\n\n.sage-ai-mention-category-main {\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-mention-subcategory {\n padding: 6px 16px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n background-color: var(--jp-layout-color0);\n}\n\n.sage-ai-mention-subcategory:hover,\n.sage-ai-mention-subcategory.active {\n background-color: var(--jp-layout-color2);\n}\n\n.sage-ai-mention-empty {\n padding: 12px;\n font-style: italic;\n color: var(--jp-ui-font-color2);\n text-align: center;\n}\n\n/* Enhanced keyboard navigation styles */\n[data-jp-theme-light='false'] .sage-ai-mention-item.active,\n.sage-ai-mention-subcategory.active {\n background-color: rgb(56 56 56 / 30%) !important;\n\n /* color: var(--jp-ui-inverse-font-color1) !important; */\n\n /* border-left: 3px solid var(--jp-brand-color0); */\n}\n\n.sage-ai-mention-item.active .sage-ai-mention-item-icon,\n.sage-ai-mention-subcategory.active .sage-ai-mention-item-icon {\n color: var(--jp-ui-inverse-font-color1) !important;\n}\n\n.sage-ai-mention-item.active .sage-ai-mention-item-description,\n.sage-ai-mention-subcategory.active .sage-ai-mention-item-description {\n color: var(--jp-ui-font-color2) !important;\n}\n\n.sage-ai-mention-separator {\n padding: 4px 12px;\n font-size: 10px;\n font-weight: bold;\n color: var(--jp-ui-font-color2);\n background-color: var(--jp-layout-color2);\n border-top: 1px solid var(--jp-border-color1);\n border-bottom: 1px solid var(--jp-border-color1);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n",""]);const s=r},5544:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,"/* When LLM state display is hidden, move plan state display up */\n.sage-ai-chatbox:has(.sage-ai-llm-state-widget.hidden)\n .sage-ai-plan-state-widget {\n margin-bottom: 0 !important;\n}\n\n/* Wrapper for fixed positioning with flexbox */\n.sage-ai-state-display-container {\n position: fixed !important;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n z-index: 1;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n}\n\n/* Apply styles directly to widget nodes */\n.sage-ai-plan-state-widget {\n order: 1;\n pointer-events: auto;\n margin: 0 17px 4px;\n margin-bottom: -10px;\n}\n\n.sage-ai-llm-state-widget {\n order: 2;\n pointer-events: auto;\n margin: 0 17px;\n}\n\n.sage-ai-input-spacer {\n order: 3;\n flex-shrink: 0;\n}\n\n[data-jp-theme-light='false'] .sage-ai-plan-state-display {\n background-color: #1a1a1a;\n}\n\n[data-jp-theme-light='true'] .sage-ai-plan-state-display {\n background-color: #fff;\n}\n\n/* Plan State Display - positioned above the LLM state display */\n.sage-ai-plan-state-display {\n display: flex;\n flex-direction: column;\n padding: 8px 12px;\n padding-bottom: 14px;\n border-radius: 8px 8px 0 0;\n font-size: 13px;\n color: var(--jp-ui-font-color1);\n box-shadow: 0 2px 4px rgb(0 0 0 / 5%);\n transition: all 0.2s ease-in-out;\n border: 1px solid var(--jp-border-color2);\n}\n\n.sage-ai-plan-state-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.sage-ai-plan-state-content {\n display: flex;\n flex-direction: column;\n gap: 4px;\n width: 100%;\n}\n\n.sage-ai-plan-current-step {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.sage-ai-plan-current-text {\n color: var(--jp-ui-font-color1);\n font-size: 12px;\n font-weight: 400;\n}\n\n.sage-ai-plan-bottom-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n\n.sage-ai-plan-next-text {\n color: var(--jp-ui-font-color2);\n font-weight: 300;\n font-size: 10px;\n flex: 1; /* Take up available space */\n}\n\n.sage-ai-plan-source-toggle {\n align-self: center;\n background: none;\n border: none;\n color: var(--jp-ui-font-color2);\n cursor: pointer;\n font-size: var(--jp-ui-font-size0);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border-radius: 4px;\n transition:\n background-color 0.2s,\n color 0.2s;\n width: 24px;\n height: 24px;\n}\n\n.sage-ai-plan-source-toggle:hover {\n background-color: var(--jp-layout-color2);\n color: var(--jp-ui-font-color1);\n}\n\n.sage-ai-plan-source-content {\n margin-top: 8px;\n margin-bottom: 4px;\n padding: 12px;\n background-color: var(--jp-layout-color2);\n border-radius: 6px;\n overflow-y: auto;\n min-height: 100px;\n max-height: 25vh;\n transition: all 0.3s ease-in-out;\n transform-origin: bottom; /* Changed from top to bottom to expand upward */\n}\n\n.sage-ai-plan-source-content.collapsed {\n max-height: 0;\n min-height: 0;\n padding-top: 0;\n padding-bottom: 0;\n margin-top: 0;\n border: none;\n opacity: 0;\n transform: scaleY(0);\n}\n\n.sage-ai-plan-source-content.expanded {\n opacity: 1;\n transform: scaleY(1);\n}\n\n.sage-ai-plan-tasks-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n font-family: var(--jp-ui-font-family);\n font-size: 12px;\n line-height: 1.4;\n color: var(--jp-ui-font-color1);\n}\n\n.sage-ai-plan-title {\n font-weight: 600;\n font-size: 12px;\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-plan-task-item {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.sage-ai-task-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.sage-ai-task-executing {\n background: linear-gradient(\n 135deg,\n transparent,\n var(--jp-ui-font-color1),\n transparent\n );\n background-clip: text;\n color: transparent !important;\n background-size: 200% 100%;\n animation: shimmer 2.5s linear infinite;\n}\n\n@keyframes shimmer {\n 0% {\n background-position: 200% 0;\n }\n\n 100% {\n background-position: -200% 0;\n }\n}\n\n/* Keep the old markdown styles for backward compatibility */\n.sage-ai-plan-source-markdown {\n font-family: var(--jp-code-font-family);\n font-size: 11px;\n line-height: 1.4;\n color: var(--jp-ui-font-color1);\n}\n\n.sage-ai-plan-source-markdown h1,\n.sage-ai-plan-source-markdown h2,\n.sage-ai-plan-source-markdown h3,\n.sage-ai-plan-source-markdown h4,\n.sage-ai-plan-source-markdown h5,\n.sage-ai-plan-source-markdown h6 {\n margin: 8px 0 4px;\n font-weight: 600;\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-plan-source-markdown h1 {\n font-size: 14px;\n}\n\n.sage-ai-plan-source-markdown h2 {\n font-size: 13px;\n}\n\n.sage-ai-plan-source-markdown h3 {\n font-size: 12px;\n}\n\n.sage-ai-plan-source-markdown h4,\n.sage-ai-plan-source-markdown h5,\n.sage-ai-plan-source-markdown h6 {\n font-size: 11px;\n}\n\n.sage-ai-plan-source-markdown p {\n margin: 4px 0;\n}\n\n.sage-ai-plan-source-markdown ul,\n.sage-ai-plan-source-markdown ol {\n padding-left: 16px;\n margin: 4px 0;\n}\n\n.sage-ai-plan-source-markdown li {\n margin: 2px 0;\n}\n\n.sage-ai-plan-source-markdown code {\n background-color: var(--jp-layout-color1);\n padding: 1px 3px;\n border-radius: 2px;\n font-size: 10px;\n}\n\n.sage-ai-plan-source-markdown pre {\n background-color: var(--jp-layout-color1);\n border-radius: 4px;\n padding: 6px;\n margin: 4px 0;\n overflow-x: auto;\n}\n\n.sage-ai-plan-source-markdown pre code {\n background-color: transparent;\n padding: 0;\n font-size: 10px;\n}\n\n.sage-ai-plan-source-markdown blockquote {\n border-left: 3px solid var(--jp-border-color2);\n padding-left: 8px;\n margin: 4px 0;\n color: var(--jp-ui-font-color2);\n font-style: italic;\n}\n\n/* Ensure the blob loader works in this context */\n.sage-ai-plan-state-display .sage-ai-blob-loader {\n flex-shrink: 0;\n}\n\n/* Toggle icon animation */\n.sage-ai-plan-toggle-icon {\n font-size: 12px;\n transition: transform 0.2s ease;\n line-height: 1;\n}\n\n.sage-ai-plan-source-toggle[aria-expanded='false'] > svg {\n transform: rotate(180deg);\n}\n\n.sage-ai-plan-state-loader {\n width: 26px;\n height: 26px;\n display: inline-block;\n position: relative;\n}\n\n.sage-ai-plan-state-loader::after,\n.sage-ai-plan-state-loader::before {\n content: '';\n box-sizing: border-box;\n width: 26px;\n height: 26px;\n border-radius: 50%;\n border: 2px solid rgba(59, 130, 246, 1);\n position: absolute;\n left: 0;\n top: 0;\n opacity: 0;\n animation: sage-ai-plan-state-display-animloader 2s linear infinite;\n}\n\n.sage-ai-plan-state-loader::after {\n animation-delay: 1s;\n}\n\n@keyframes sage-ai-plan-state-display-animloader {\n 0% {\n transform: scale(0);\n opacity: 1;\n }\n\n 100% {\n border-color: #ccdffe;\n transform: scale(1);\n opacity: 0;\n }\n}\n",""]);const s=r},5655:n=>{n.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2IiBmaWxsPSJub25lIj4KICA8cGF0aCBkPSJNNS4xNzc3OCA4TDYuNDg4ODkgNi42ODg4OUM2LjY2NjY3IDYuNTExMTEgNi43NTU1NiA2LjMwMzcgNi43NTU1NiA2LjA2NjY3QzYuNzU1NTYgNS44Mjk2MyA2LjY2NjY3IDUuNjIyMjIgNi40ODg4OSA1LjQ0NDQ0QzYuMzExMTEgNS4yNjY2NyA2LjEgNS4xNzc3OCA1Ljg1NTU2IDUuMTc3NzhDNS42MTExMSA1LjE3Nzc4IDUuNCA1LjI2NjY3IDUuMjIyMjIgNS40NDQ0NEwzLjI4ODg5IDcuMzc3NzhDMy4yIDcuNDY2NjcgMy4xMzcwNCA3LjU2Mjk2IDMuMSA3LjY2NjY3QzMuMDYyOTYgNy43NzAzNyAzLjA0NDQ0IDcuODgxNDggMy4wNDQ0NCA4QzMuMDQ0NDQgOC4xMTg1MiAzLjA2Mjk2IDguMjI5NjMgMy4xIDguMzMzMzNDMy4xMzcwNCA4LjQzNzA0IDMuMiA4LjUzMzMzIDMuMjg4ODkgOC42MjIyMkw1LjIyMjIyIDEwLjU1NTZDNS40IDEwLjczMzMgNS42MTExMSAxMC44MjIyIDUuODU1NTYgMTAuODIyMkM2LjEgMTAuODIyMiA2LjMxMTExIDEwLjczMzMgNi40ODg4OSAxMC41NTU2QzYuNjY2NjcgMTAuMzc3OCA2Ljc1NTU2IDEwLjE3MDQgNi43NTU1NiA5LjkzMzMzQzYuNzU1NTYgOS42OTYzIDYuNjY2NjcgOS40ODg4OSA2LjQ4ODg5IDkuMzExMTFMNS4xNzc3OCA4Wk0xMC44MjIyIDhMOS41MTExMSA5LjMxMTExQzkuMzMzMzMgOS40ODg4OSA5LjI0NDQ0IDkuNjk2MyA5LjI0NDQ0IDkuOTMzMzNDOS4yNDQ0NCAxMC4xNzA0IDkuMzMzMzMgMTAuMzc3OCA5LjUxMTExIDEwLjU1NTZDOS42ODg4OSAxMC43MzMzIDkuOSAxMC44MjIyIDEwLjE0NDQgMTAuODIyMkMxMC4zODg5IDEwLjgyMjIgMTAuNiAxMC43MzMzIDEwLjc3NzggMTAuNTU1NkwxMi43MTExIDguNjIyMjJDMTIuOCA4LjUzMzMzIDEyLjg2MyA4LjQzNzA0IDEyLjkgOC4zMzMzM0MxMi45MzcgOC4yMjk2MyAxMi45NTU2IDguMTE4NTIgMTIuOTU1NiA4QzEyLjk1NTYgNy44ODE0OCAxMi45MzcgNy43NzAzNyAxMi45IDcuNjY2NjdDMTIuODYzIDcuNTYyOTYgMTIuOCA3LjQ2NjY3IDEyLjcxMTEgNy4zNzc3OEwxMC43Nzc4IDUuNDQ0NDRDMTI2ODg4OSA1LjM1NTU2IDEwLjU4ODkgNS4yODg4OSAxMC40Nzc4IDUuMjQ0NDRDMTAuMzY2NyA1LjIgMTAuMjU1NiA1LjE3Nzc4IDEwLjE0NDQgNS4xNzc3OEMxMC4wMzMzIDUuMTc3NzggOS45MjIyMiA1LjIgOS44MTExMSA1LjI0NDQ0QzkuNyA1LjI4ODg5IDkuNiA1LjM1NTU2IDkuNTExMTEgNS40NDQ0NEM5LjMzMzMzIDUuNjIyMjIgOS4yNDQ0NCA1LjgyOTYzIDkuMjQ0NDQgNi4wNjY2N0M5LjI0NDQ0IDYuMzAzNyA5LjMzMzMzIDYuNTExMTEgOS41MTExMSA2LjY4ODg5TDEwLjgyMjIgOFpNMS43Nzc3OCAxNkMxLjI4ODg5IDE2IDAuODcwMzcgMTUuODI1OSAwLjUyMjIyMiAxNS40Nzc4QzAuMTc0MDc0IDE1LjEyOTYgMCAxNC43MTExIDAgMTQuMjIyMlYxLjc3Nzc4QzAgMS4yODg4OSAwLjE3NDA3NCAwLjg3MDM3IDAuNTIyMjIyIDAuNTIyMjIyQzAuODcwMzcgMC4xNzQwNzQgMS4yODg4OSAwIDEuNzc3NzggMEgxNC4yMjIyQzE0LjcxMTEgMCAxNS4xMjk2IDAuMTc0MDc0IDE1LjQ3NzggMC41MjIyMjJDMTUuODI1OSAwLjg3MDM3IDE2IDEuMjg4ODkgMTYgMS43Nzc3OFYxNC4yMjIyQzE2IDE0LjcxMTEgMTUuODI1OSAxNS4xMjk2IDE1LjQ3NzggMTUuNDc3OEMxNS4xMjk2IDE1LjgyNTkgMTQuNzExMSAxNiAxNC4yMjIyIDE2SDEuNzc3NzhaIiBmaWxsPSIjN0E3QTdBIi8+Cjwvc3ZnPg=="},5943:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,"/* Left Side Banner Overlay */\n.sage-ai-banner-overlay {\n position: absolute;\n border-radius: 12px;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.3);\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n z-index: 9999;\n opacity: 0;\n transition: opacity 0.3s ease;\n display: none;\n}\n\n.sage-ai-banner-overlay.visible {\n opacity: 1;\n}\n\n/* Left Side Banner */\n.sage-ai-left-side-banner {\n position: absolute;\n border-radius: 12px;\n top: 0;\n left: -400px; /* Start off-screen */\n width: 65%;\n height: 100%;\n background-color: var(--jp-layout-color0);\n z-index: 10000;\n transition: left 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: none;\n overflow: hidden;\n}\n\n.sage-ai-left-side-banner.visible {\n left: 0;\n}\n\n/* Banner Header */\n.sage-ai-banner-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n background-color: var(--jp-layout-color0);\n}\n\n.sage-ai-banner-header h3 {\n margin: 0;\n color: var(--jp-ui-font-color0);\n font-size: 16px;\n font-weight: 600;\n}\n\n.sage-ai-banner-close {\n background: none;\n border: none;\n color: #949494;\n font-size: 24px;\n cursor: pointer;\n border-radius: 4px;\n line-height: 1;\n}\n\n/* Banner Content */\n.sage-ai-banner-content {\n height: calc(100vh - 80px);\n overflow-y: auto;\n padding: 0;\n}\n\n.sage-ai-banner-threads {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 0 12px;\n margin-bottom: 70px;\n}\n\n/* Thread Items */\n.sage-ai-banner-thread-item {\n padding: 12px 16px;\n cursor: pointer;\n border-radius: 12px;\n transition: background-color 0.2s ease;\n position: relative;\n}\n\n.sage-ai-banner-thread-item:hover {\n background-color: var(--jp-layout-color2);\n}\n\n.sage-ai-banner-thread-item.active {\n background-color: var(--jp-inverse-layout-color2);\n color: var(--jp-ui-inverse-font-color0);\n}\n\n.sage-ai-banner-thread-item.active .sage-ai-banner-thread-name {\n color: var(--jp-ui-inverse-font-color0);\n}\n\n.sage-ai-banner-thread-item.active .sage-ai-banner-thread-date {\n color: var(--jp-ui-inverse-font-color2);\n}\n\n.sage-ai-banner-thread-name {\n font-weight: 500;\n color: var(--jp-ui-font-color0);\n font-size: 13px;\n margin-bottom: 4px;\n line-height: 1.4;\n}\n\n.sage-ai-banner-thread-date {\n font-size: 12px;\n color: var(--jp-ui-font-color2);\n line-height: 1.3;\n}\n\n/* Empty State */\n.sage-ai-banner-empty {\n padding: 40px 20px;\n text-align: center;\n color: var(--jp-ui-font-color2);\n font-style: italic;\n font-size: 14px;\n}\n\n/* Scrollbar Styling */\n.sage-ai-banner-content::-webkit-scrollbar {\n width: 6px;\n}\n\n.sage-ai-banner-content::-webkit-scrollbar-track {\n background: var(--jp-layout-color0);\n}\n\n.sage-ai-banner-content::-webkit-scrollbar-thumb {\n background: var(--jp-border-color2);\n border-radius: 3px;\n}\n\n.sage-ai-banner-content::-webkit-scrollbar-thumb:hover {\n background: var(--jp-border-color1);\n}\n\n/* Animation for thread items */\n.sage-ai-banner-thread-item {\n animation: slideInFromLeft 0.3s ease forwards;\n opacity: 0;\n transform: translateX(-20px);\n}\n\n.sage-ai-banner-thread-item:nth-child(1) {\n animation-delay: 0.1s;\n}\n.sage-ai-banner-thread-item:nth-child(2) {\n animation-delay: 0.15s;\n}\n.sage-ai-banner-thread-item:nth-child(3) {\n animation-delay: 0.2s;\n}\n.sage-ai-banner-thread-item:nth-child(4) {\n animation-delay: 0.25s;\n}\n.sage-ai-banner-thread-item:nth-child(5) {\n animation-delay: 0.3s;\n}\n.sage-ai-banner-thread-item:nth-child(6) {\n animation-delay: 0.35s;\n}\n.sage-ai-banner-thread-item:nth-child(7) {\n animation-delay: 0.4s;\n}\n.sage-ai-banner-thread-item:nth-child(8) {\n animation-delay: 0.45s;\n}\n.sage-ai-banner-thread-item:nth-child(9) {\n animation-delay: 0.5s;\n}\n.sage-ai-banner-thread-item:nth-child(10) {\n animation-delay: 0.55s;\n}\n.sage-ai-banner-thread-item {\n animation-delay: 0.55s;\n}\n\n@keyframes slideInFromLeft {\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n .sage-ai-left-side-banner {\n width: 100vw;\n left: -100vw;\n }\n\n .sage-ai-banner-header {\n padding: 16px;\n }\n\n .sage-ai-banner-thread-item {\n padding: 12px 16px;\n }\n}\n",""]);const s=r},6314:n=>{n.exports=function(n){var o=[];return o.toString=function(){return this.map(function(o){var e="",a=void 0!==o[5];return o[4]&&(e+="@supports (".concat(o[4],") {")),o[2]&&(e+="@media ".concat(o[2]," {")),a&&(e+="@layer".concat(o[5].length>0?" ".concat(o[5]):""," {")),e+=n(o),a&&(e+="}"),o[2]&&(e+="}"),o[4]&&(e+="}"),e}).join("")},o.i=function(n,e,a,t,i){"string"==typeof n&&(n=[[null,n,void 0]]);var r={};if(a)for(var s=0;s<this.length;s++){var l=this[s][0];null!=l&&(r[l]=!0)}for(var p=0;p<n.length;p++){var d=[].concat(n[p]);a&&r[d[0]]||(void 0!==i&&(void 0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=i),e&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=e):d[2]=e),t&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=t):d[4]="".concat(t)),o.push(d))}},o}},6785:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,"/* Mode Selector Dropdown - Ultra Polished Design */\n\n/* Base mode selector styling with proper positioning */\n.sage-ai-mode-selector {\n position: absolute;\n bottom: 12px;\n left: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 3px 8px;\n background-color: var(--jp-layout-color0);\n border: 1px solid var(--jp-border-color1);\n border-radius: 8px;\n cursor: pointer;\n font-size: var(--jp-ui-font-size1);\n color: var(--jp-ui-font-color0);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n\n /* box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); */\n backdrop-filter: blur(8px);\n z-index: 10; /* Ensure it's above other input elements */\n}\n\n.sage-ai-mode-selector-arrow {\n display: flex;\n align-items: center;\n}\n\n.sage-ai-mode-selector:hover {\n border: 1px solid var(--jp-ui-font-color1);\n\n /* background: linear-gradient( */\n\n /* 135deg, */\n\n /* var(--jp-layout-color3) 0%, */\n\n /* var(--jp-layout-color4) 100% */\n\n /* ); */\n\n /* border-color: var(--jp-brand-color1); */\n\n /* box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); */\n\n /* transform: translateY(-1px); */\n}\n\n.sage-ai-mode-selector:active {\n transform: translateY(0);\n box-shadow: 0 2px 6px rgb(0 0 0 / 12%);\n}\n\n/* Mode display styling */\n.sage-ai-mode-display {\n display: flex;\n align-items: center;\n gap: 6px;\n flex: 1;\n}\n\n.sage-ai-mode-display .sage-ai-mode-option-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n}\n\n.sage-ai-mode-display .sage-ai-mode-option-icon svg {\n width: 16px;\n height: 16px;\n transition: fill 0.2s ease;\n}\n\n.sage-ai-mode-display .sage-ai-mode-option-text {\n font-weight: 500;\n font-size: 12px;\n letter-spacing: 0.02em;\n}\n\n/* Dropdown arrow styling */\n.sage-ai-mode-arrow {\n color: var(--jp-ui-font-color2);\n font-size: 10px;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n margin-left: auto;\n}\n\n.sage-ai-mode-selector:hover .sage-ai-mode-arrow {\n color: var(--jp-brand-color1);\n transform: translateY(-1px);\n}\n\n.sage-ai-mode-selector.open .sage-ai-mode-arrow {\n transform: rotate(180deg);\n color: var(--jp-brand-color1);\n}\n\n/* Dropdown container */\n.sage-ai-mode-dropdown {\n position: absolute;\n bottom: calc(100% + 8px); /* Position above the selector */\n left: 0;\n right: 0;\n min-width: 100%;\n background: var(--jp-layout-color1);\n border: .5px solid var(--jp-border-color1);\n border-radius: 12px;\n box-shadow:\n 0 10px 40px rgb(0 0 0 / 15%),\n 0 4px 12px rgb(0 0 0 / 10%),\n 0 0 0 1px rgb(255 255 255 / 5%);\n z-index: 2000;\n overflow: hidden;\n backdrop-filter: blur(20px);\n\n /* Animation properties */\n opacity: 0;\n visibility: hidden;\n transform: translateY(10px) scale(0.95);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.sage-ai-mode-dropdown.visible {\n opacity: 1;\n visibility: visible;\n transform: translateY(0) scale(1);\n width: fit-content !important;\n}\n\n.sage-ai-mode-dropdown.hidden {\n opacity: 0;\n visibility: hidden;\n transform: translateY(10px) scale(0.95);\n pointer-events: none;\n}\n\n/* Dropdown options container */\n.sage-ai-mode-dropdown-content {\n display: flex;\n flex-direction: column;\n padding: 6px;\n gap: 2px;\n}\n\n/* Individual mode options */\n.sage-ai-mode-option {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 6px 8px;\n border-radius: 8px;\n cursor: pointer;\n transition: background-color 0.2s ease;\n position: relative;\n overflow: hidden;\n background: transparent;\n border: 1px solid transparent;\n}\n\n/* Mode option icon */\n.sage-ai-mode-option-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 6px;\n\n /* background: var(--jp-layout-color2); */\n /*transition: all 0.4s ease;*/\n flex-shrink: 0;\n}\n\n.sage-ai-mode-option:hover {\n background: var(--jp-border-color1);\n}\n\n.sage-ai-mode-option-icon svg {\n width: 16px;\n height: 16px;\n transition: fill 0.2s ease;\n}\n\n/* Mode option text */\n.sage-ai-mode-option-text {\n font-weight: 500;\n font-size: 14px;\n color: var(--jp-ui-font-color0);\n transition: color 0.2s ease;\n letter-spacing: 0.02em;\n margin: 0;\n line-height: 1.3;\n}\n\n.sage-ai-mode-option:hover .sage-ai-mode-option-text {\n color: var(--jp-ui-font-color0);\n}\n\n/* Add mode descriptions */\n.sage-ai-mode-option-description {\n font-size: 10px;\n color: var(--jp-ui-font-color2);\n transition: color 0.2s ease;\n line-height: 160%;\n margin: 0 !important;\n}\n\n.sage-ai-mode-option:hover .sage-ai-mode-option-description {\n color: var(--jp-ui-font-color1);\n}\n\n/* Enhanced flex layout for dropdown content */\n.sage-ai-mode-dropdown {\n display: flex;\n flex-direction: column;\n}\n\n/* Staggered animation for options */\n.sage-ai-mode-option:nth-child(1) {\n transition-delay: 0.05s;\n}\n\n.sage-ai-mode-option:nth-child(2) {\n transition-delay: 0.1s;\n}\n\n.sage-ai-mode-option:nth-child(3) {\n transition-delay: 0.15s;\n}\n\n/* Loading animation when opening */\n@keyframes slideInUp {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes slideOutDown {\n from {\n opacity: 1;\n transform: translateY(0);\n }\n\n to {\n opacity: 0;\n transform: translateY(20px);\n }\n}\n\n/* Enhanced opening animation */\n.sage-ai-mode-dropdown.opening {\n animation: slideInUp 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n}\n\n.sage-ai-mode-dropdown.closing {\n animation: slideOutDown 0.2s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n}\n\n/* Subtle glow effect for active/focused state */\n.sage-ai-mode-selector:focus-visible {\n outline: none;\n box-shadow:\n 0 0 0 2px var(--jp-border-color1),\n 0 4px 12px rgb(0 0 0 / 15%);\n}\n\n/* Dark theme adjustments */\n[data-jp-theme-name='JupyterLab Dark'] .sage-ai-mode-dropdown {\n box-shadow:\n 0 10px 40px rgb(0 0 0 / 30%),\n 0 4px 12px rgb(0 0 0 / 20%),\n 0 0 0 1px rgb(255 255 255 / 10%);\n}\n\n.sage-ai-mode-option-title {\n font-size: 13px;\n font-style: normal;\n font-weight: 500;\n margin: 0 !important;\n line-height: 155%;\n}\n\n/* Responsive design for smaller screens */\n@media (max-width: 768px) {\n .sage-ai-mode-dropdown {\n bottom: calc(100% + 4px);\n }\n\n .sage-ai-mode-option {\n padding: 10px 14px;\n }\n\n .sage-ai-mode-option-text {\n font-size: 13px;\n }\n}\n",""]);const s=r},7342:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,'/* More Options Popover Styles */\n.sage-ai-more-options-widget {\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n z-index: 9999;\n}\n\n.sage-ai-more-options-popover {\n pointer-events: auto;\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color1);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n padding: 4px;\n min-width: 140px;\n /* animation: fadeInUp 0.2s ease-out; */\n}\n\n.sage-ai-more-options-popover:empty {\n display: none;\n}\n\n.sage-ai-more-options-content {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.sage-ai-more-options-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border: none;\n background: transparent;\n color: var(--jp-ui-font-color1);\n border-radius: 4px;\n cursor: pointer;\n font-size: 13px;\n font-family: var(--jp-ui-font-family);\n text-align: left;\n width: 100%;\n transition: background-color 0.15s ease;\n}\n\n.sage-ai-more-options-item:hover {\n background: var(--jp-layout-color2);\n}\n\n.sage-ai-more-options-item:active {\n background: var(--jp-layout-color3);\n}\n\n.sage-ai-more-options-item svg {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n}\n\n.sage-ai-more-options-item span {\n flex: 1;\n}\n\n.sage-ai-more-options-item-danger {\n color: var(--jp-error-color1);\n}\n\n/* Dark theme adjustments */\n[data-jp-theme-light="false"] .sage-ai-more-options-popover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);\n}\n',""]);const s=r},7439:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,'/* Inline Diff Approval for Chat interface */\n.sage-ai-inline-diff-approval,\n.sage-ai-diff-approval-dialog-embedded {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding: 4px 12px;\n}\n\n.sage-ai-inline-diff-header,\n.sage-ai-diff-approval-header {\n padding-bottom: 8px;\n display: flex;\n align-items: center;\n border-bottom: 1px solid var(--jp-border-color2);\n}\n\n.sage-ai-inline-diff-title,\n.sage-ai-diff-title {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--jp-ui-font-color0);\n display: flex;\n align-items: center;\n}\n\n.sage-ai-inline-diff-summary,\n.sage-ai-diff-summary {\n font-size: var(--jp-ui-font-size0);\n color: var(--jp-ui-font-color0);\n flex-grow: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.sage-ai-inline-diff-note {\n font-size: 12px;\n color: var(--jp-ui-font-color2);\n font-style: italic;\n margin-bottom: 12px;\n}\n\n.sage-ai-inline-diff-actions {\n display: flex;\n /* TODO: Remove the element from the DOM */\n display: none;\n justify-content: end;\n gap: 8px;\n margin-top: 4px;\n}\n\n.sage-ai-inline-diff-actions button {\n padding: 8px 14px;\n border-radius: 4px;\n font-size: 13px;\n border: none;\n cursor: pointer;\n transition:\n background-color 0.2s,\n transform 0.1s;\n}\n\n.sage-ai-inline-diff-actions button:hover {\n transform: translateY(-1px);\n}\n\n.sage-ai-inline-diff-actions button:active {\n transform: translateY(0px);\n}\n\n.sage-ai-inline-diff-count,\n.sage-ai-diff-count {\n display: inline-block;\n background-color: var(--jp-layout-color3);\n color: var(--jp-ui-font-color1);\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 12px;\n margin-left: 6px;\n min-width: 18px;\n text-align: center;\n}\n\n.sage-ai-confirm-button {\n padding: 4px 8px;\n background-color: var(--jp-inverse-layout-color0);\n color: var(--jp-ui-inverse-font-color0);\n transition: background-color 0.2s ease;\n border-radius: 8px !important;\n}\n\n.sage-ai-confirm-button:hover {\n background-color: var(--jp-inverse-layout-color2);\n}\n\n.sage-ai-reject-button {\n padding: 0px 8px;\n font-size: var(--jp-ui-font-size1);\n background-color: transparent;\n color: var(--jp-ui-font-color1);\n}\n\n/* Styles for embedded diff list and cells */\n.sage-ai-diff-approval-dialog-embedded .sage-ai-diff-list {\n margin: 8px 0;\n gap: 8px;\n display: flex;\n flex-direction: column;\n}\n\n.sage-ai-diff-cell-item {\n border-radius: 10px;\n border: 0.5px solid var(--jp-border-color2);\n background-color: transparent;\n display: flex;\n flex-direction: column;\n}\n\n.sage-ai-diff-content-collapse-icon {\n display: flex;\n cursor: pointer;\n transition: transform 0.2s;\n}\n\n.sage-ai-diff-content-collapse-icon:hover {\n transform: scale(1.1);\n}\n\n.sage-ai-diff-cell-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n}\n\n.sage-ai-diff-operation {\n display: flex;\n}\n\n.sage-ai-diff-content {\n position: relative;\n max-height: 150px;\n overflow-y: hidden;\n background-color: var(--jp-layout-color2);\n border-radius: 0 0 10px 10px;\n border-top: 0.5px solid var(--jp-border-color2);\n}\n\n.sage-ai-diff-content .d2h-file-wrapper {\n border-radius: 0 !important;\n}\n\n.sage-ai-diff-content.sage-ai-diff-expanded {\n max-height: none;\n overflow-y: visible;\n}\n\n/* Gradient overlay that stays at bottom when scrolling */\n.sage-ai-diff-gradient-overlay {\n display: flex;\n align-items: center;\n justify-content: center;\n position: sticky;\n bottom: 0;\n left: 0;\n right: 0;\n height: 20px;\n background: linear-gradient(to top, rgba(25, 25, 25, 1) 0%, transparent 100%);\n pointer-events: none;\n border-radius: 0 0 4px 4px;\n z-index: 5;\n}\n\n[data-jp-theme-light="true"] .sage-ai-diff-gradient-overlay {\n background: linear-gradient(to top, rgba(255, 255, 255, 1) 0%, transparent 100%);\n}\n\n.sage-ai-diff-cell-id-label {\n color: #1976d2;\n border-radius: 4px;\n font-size: 12px;\n padding: 2px 6px;\n cursor: pointer;\n flex: 1;\n}\n\n.sage-ai-diff-old-content,\n.sage-ai-diff-new-content {\n padding: 6px;\n font-family: monospace;\n font-size: 12px;\n white-space: pre-wrap;\n}\n\n.sage-ai-diff-old-content {\n border-bottom: 1px dashed var(--jp-border-color2);\n color: var(--jp-content-font-color2);\n text-decoration: line-through;\n}\n\n.sage-ai-diff-cell-actions {\n display: flex;\n justify-content: flex-end;\n margin-top: 6px;\n gap: 8px;\n}\n\n.sage-ai-diff-approval-dialog-embedded .cm-editor {\n border-radius: 0 0 10px 10px !important;\n background: var(--jp-layout-color1) !important;\n}\n\n.sage-ai-diff-hover-buttons {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* Diff action buttons - visible by default */\n.sage-ai-diff-approve-button,\n.sage-ai-diff-reject-button,\n.sage-ai-diff-run-button,\n.sage-ai-diff-reapply-button {\n background-color: transparent;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-weight: bold;\n display: flex;\n align-items: center;\n font-size: 12px;\n padding: 0;\n}\n\n.sage-ai-diff-approve-button:hover,\n.sage-ai-diff-reject-button:hover,\n.sage-ai-diff-run-button:hover,\n.sage-ai-diff-reapply-button:hover {\n transform: scale(1.1);\n transition: transform 0.2s;\n}\n\n/* Disabled button states */\n.sage-ai-diff-approve-button.disabled,\n.sage-ai-diff-reject-button.disabled,\n.sage-ai-diff-run-button.disabled,\n.sage-ai-diff-reapply-button.disabled {\n opacity: 0.6;\n cursor: default;\n pointer-events: none;\n}\n\n.sage-ai-diff-approve-button.disabled:hover,\n.sage-ai-diff-reject-button.disabled:hover,\n.sage-ai-diff-run-button.disabled:hover,\n.sage-ai-diff-reapply-button.disabled:hover {\n transform: none;\n}\n\n/* Button visibility states */\n.sage-ai-diff-approve-button.hidden,\n.sage-ai-diff-reject-button.hidden,\n.sage-ai-diff-run-button.hidden,\n.sage-ai-diff-reapply-button.hidden {\n display: none;\n}\n\n/* Spinner for buttons - visible by default */\n.sage-ai-diff-spinner {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: 2px solid #f3f3f3;\n border-top: 2px solid #3498db;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n.sage-ai-diff-spinner.hidden {\n display: none;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}',""]);const s=r},7476:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,"/* New Chat Display Widget Styles */\n.sage-ai-new-chat-display {\n flex: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 2rem;\n height: 100% !important;\n overflow: auto;\n}\n\n.sage-ai-new-chat-container {\n max-width: 400px;\n width: 100%;\n text-align: center;\n justify-self: center;\n}\n\n.sage-ai-new-chat-title-section {\n margin-bottom: 2rem;\n text-align: center !important;\n}\n\n.sage-ai-new-chat-title {\n font-size: 13px;\n font-weight: 400;\n color: var(--jp-ui-font-color2);\n font-size: 13px;\n font-weight: 600;\n color: var(--jp-ui-font-color2);\n margin: 0 0 0.5rem 0;\n text-align: center;\n}\n\n.sage-ai-new-chat-help {\n font-size: 15px;\n font-weight: 500;\n color: var(--jp-ui-font-color0);\n font-size: 16px;\n color: var(--jp-ui-font-color1);\n margin: 0;\n text-align: center;\n font-weight: 600;\n}\n\n.sage-ai-new-chat-prompts-section {\n text-align: left;\n}\n\n.sage-ai-new-chat-prompts-title {\n font-size: 0.9rem;\n font-weight: 500;\n color: var(--jp-ui-font-color2);\n margin: 0 0 1rem 0;\n}\n\n.sage-ai-new-chat-prompts-list {\n display: flex;\n flex-direction: column;\n justify-content: center;\n width: 100%;\n gap: 0.5rem;\n}\n\n.sage-ai-new-chat-prompt-button {\n background: var(--jp-layout-color2);\n border-radius: 12px !important;\n border: none;\n color: var(--jp-ui-font-color0);\n text-align: left;\n cursor: pointer;\n transition: all 0.2s ease;\n line-height: 1.4;\n padding: 4px 14px;\n justify-content: center;\n align-items: center;\n width: fit-content;\n font-size: 13px;\n align-self: center;\n}\n\n.sage-ai-new-chat-prompt-button:hover {\n background: var(--jp-layout-color3);\n border-color: var(--jp-brand-color1);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.sage-ai-new-chat-prompt-button:active {\n transform: translateY(0);\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);\n}\n\n.sage-ai-new-chat-prompt-button:focus {\n outline: none;\n border-color: var(--jp-brand-color1);\n box-shadow: 0 0 0 2px rgba(54, 124, 226, 0.2);\n}\n",""]);const s=r},7659:n=>{var o={};n.exports=function(n,e){var a=function(n){if(void 0===o[n]){var e=document.querySelector(n);if(window.HTMLIFrameElement&&e instanceof window.HTMLIFrameElement)try{e=e.contentDocument.head}catch(n){e=null}o[n]=e}return o[n]}(n);if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(e)}},7825:n=>{n.exports=function(n){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var o=n.insertStyleElement(n);return{update:function(e){!function(n,o,e){var a="";e.supports&&(a+="@supports (".concat(e.supports,") {")),e.media&&(a+="@media ".concat(e.media," {"));var t=void 0!==e.layer;t&&(a+="@layer".concat(e.layer.length>0?" ".concat(e.layer):""," {")),a+=e.css,t&&(a+="}"),e.media&&(a+="}"),e.supports&&(a+="}");var i=e.sourceMap;i&&"undefined"!=typeof btoa&&(a+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),o.styleTagTransform(a,n,o.options)}(o,n,e)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(o)}}}},7826:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,"/* Settings Widget Styles */\n\n/* Main settings widget container */\n.sage-ai-settings {\n height: 100%;\n max-height: 100vh;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.sage-ai-settings-container {\n height: 100%;\n max-height: 100vh;\n overflow-y: auto;\n overflow-x: hidden;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n padding: 0 !important;\n}\n\n/* Ensure codebase manager doesn't break the layout */\n.sage-ai-settings-container > div {\n flex-shrink: 0;\n}\n\n.sage-ai-settings-title {\n margin: 0 0 20px 0;\n color: var(--jp-ui-font-color0);\n flex-shrink: 0; /* Prevent shrinking */\n padding-left: 16px;\n padding-top: 40px;\n}\n\n/* Configuration sections */\n.sage-ai-config-section {\n margin-bottom: 20px;\n padding-left: 20px;\n flex-shrink: 0; /* Prevent shrinking */\n}\n\n.sage-ai-config-title {\n margin-bottom: 15px;\n color: var(--jp-ui-font-color0);\n flex-shrink: 0; /* Prevent shrinking */\n}\n\n/* Form fields */\n.sage-ai-field-container {\n margin-bottom: 15px;\n flex-shrink: 0; /* Prevent shrinking */\n}\n\n.sage-ai-field-label {\n display: block;\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n.sage-ai-field-input {\n width: 100%;\n max-width: 400px;\n padding: 8px;\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n font-size: 14px;\n background-color: var(--jp-layout-color0);\n color: var(--jp-ui-font-color0);\n box-sizing: border-box;\n}\n\n/* Database input with refresh button */\n.sage-ai-database-input-container {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.sage-ai-database-input {\n flex: 1;\n}\n\n.sage-ai-refresh-button {\n padding: 8px 12px;\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n background-color: var(--jp-layout-color1);\n color: var(--jp-ui-font-color0);\n cursor: pointer;\n font-size: 16px;\n transition: all 0.2s ease;\n min-width: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sage-ai-refresh-button:hover:not(:disabled) {\n background-color: var(--jp-layout-color2);\n border-color: var(--jp-brand-color1);\n}\n\n.sage-ai-refresh-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.sage-ai-refresh-button:active:not(:disabled) {\n transform: rotate(180deg);\n}\n\n/* Cache status */\n.sage-ai-cache-status {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 5px;\n font-size: 12px;\n color: var(--jp-ui-font-color2);\n}\n\n.sage-ai-cache-indicator {\n font-size: 14px;\n}\n\n.sage-ai-cache-indicator.cached {\n color: var(--jp-success-color1);\n}\n\n.sage-ai-cache-indicator.expired {\n color: var(--jp-warn-color1);\n}\n\n.sage-ai-cache-indicator.not-cached {\n color: var(--jp-ui-font-color3);\n}\n\n.sage-ai-cache-text {\n font-family: var(--jp-ui-font-family);\n}\n\n/* Token mode container */\n.sage-token-mode-container {\n margin-bottom: 20px;\n padding-left: 20px;\n flex-shrink: 0; /* Prevent shrinking */\n}\n\n.sage-token-mode-label {\n display: flex;\n align-items: center;\n cursor: pointer;\n}\n\n.sage-token-mode-checkbox {\n margin-right: 8px;\n}\n\n/* Enhanced Database Metadata Spinner */\n.sage-ai-db-metadata-spinner {\n position: relative;\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sage-ai-db-spinner-ring {\n position: absolute;\n width: 18px;\n height: 18px;\n border: 2px solid transparent;\n border-top: 2px solid var(--jp-brand-color1);\n border-right: 2px solid var(--jp-brand-color1);\n border-radius: 50%;\n animation: sage-ai-db-spinner-rotate 1.2s linear infinite;\n}\n\n.sage-ai-db-spinner-pulse {\n position: absolute;\n width: 8px;\n height: 8px;\n background: var(--jp-brand-color1);\n border-radius: 50%;\n animation: sage-ai-db-spinner-pulse 1.5s ease-in-out infinite;\n}\n\n@keyframes sage-ai-db-spinner-rotate {\n 0% {\n transform: rotate(0deg);\n border-top-color: var(--jp-brand-color1);\n border-right-color: transparent;\n }\n 25% {\n border-top-color: var(--jp-brand-color1);\n border-right-color: var(--jp-brand-color1);\n }\n 50% {\n transform: rotate(180deg);\n border-top-color: transparent;\n border-right-color: var(--jp-brand-color1);\n }\n 75% {\n border-top-color: var(--jp-brand-color1);\n border-right-color: var(--jp-brand-color1);\n }\n 100% {\n transform: rotate(360deg);\n border-top-color: var(--jp-brand-color1);\n border-right-color: transparent;\n }\n}\n\n@keyframes sage-ai-db-spinner-pulse {\n 0%, 100% {\n transform: scale(0.8);\n opacity: 0.5;\n }\n 50% {\n transform: scale(1.2);\n opacity: 1;\n }\n}\n",""]);const s=r},8363:(n,o,e)=>{var a=e(5072),t=e.n(a),i=e(7825),r=e.n(i),s=e(7659),l=e.n(s),p=e(5056),d=e.n(p),c=e(540),g=e.n(c),f=e(1113),u=e.n(f),x=e(5248),b={};b.styleTagTransform=u(),b.setAttributes=d(),b.insert=l().bind(null,"head"),b.domAPI=r(),b.insertStyleElement=g(),t()(x.A,b),x.A&&x.A.locals&&x.A.locals;var m=e(8475),h={};h.styleTagTransform=u(),h.setAttributes=d(),h.insert=l().bind(null,"head"),h.domAPI=r(),h.insertStyleElement=g(),t()(m.A,h),m.A&&m.A.locals&&m.A.locals;var v=e(8789),y={};y.styleTagTransform=u(),y.setAttributes=d(),y.insert=l().bind(null,"head"),y.domAPI=r(),y.insertStyleElement=g(),t()(v.A,y),v.A&&v.A.locals&&v.A.locals;var j=e(7439),w={};w.styleTagTransform=u(),w.setAttributes=d(),w.insert=l().bind(null,"head"),w.domAPI=r(),w.insertStyleElement=g(),t()(j.A,w),j.A&&j.A.locals&&j.A.locals;var k=e(1346),z={};z.styleTagTransform=u(),z.setAttributes=d(),z.insert=l().bind(null,"head"),z.domAPI=r(),z.insertStyleElement=g(),t()(k.A,z),k.A&&k.A.locals&&k.A.locals;var M=e(4246),A={};A.styleTagTransform=u(),A.setAttributes=d(),A.insert=l().bind(null,"head"),A.domAPI=r(),A.insertStyleElement=g(),t()(M.A,A),M.A&&M.A.locals&&M.A.locals;var D=e(5433),N={};N.styleTagTransform=u(),N.setAttributes=d(),N.insert=l().bind(null,"head"),N.domAPI=r(),N.insertStyleElement=g(),t()(D.A,N),D.A&&D.A.locals&&D.A.locals;var I=e(6785),S={};S.styleTagTransform=u(),S.setAttributes=d(),S.insert=l().bind(null,"head"),S.domAPI=r(),S.insertStyleElement=g(),t()(I.A,S),I.A&&I.A.locals&&I.A.locals;var T=e(7476),E={};E.styleTagTransform=u(),E.setAttributes=d(),E.insert=l().bind(null,"head"),E.domAPI=r(),E.insertStyleElement=g(),t()(T.A,E),T.A&&T.A.locals&&T.A.locals;var L=e(3114),O={};O.styleTagTransform=u(),O.setAttributes=d(),O.insert=l().bind(null,"head"),O.domAPI=r(),O.insertStyleElement=g(),t()(L.A,O),L.A&&L.A.locals&&L.A.locals;var C=e(5544),Y={};Y.styleTagTransform=u(),Y.setAttributes=d(),Y.insert=l().bind(null,"head"),Y.domAPI=r(),Y.insertStyleElement=g(),t()(C.A,Y),C.A&&C.A.locals&&C.A.locals;var U=e(7342),Q={};Q.styleTagTransform=u(),Q.setAttributes=d(),Q.insert=l().bind(null,"head"),Q.domAPI=r(),Q.insertStyleElement=g(),t()(U.A,Q),U.A&&U.A.locals&&U.A.locals;var P=e(7826),B={};B.styleTagTransform=u(),B.setAttributes=d(),B.insert=l().bind(null,"head"),B.domAPI=r(),B.insertStyleElement=g(),t()(P.A,B),P.A&&P.A.locals&&P.A.locals;var R=e(9508),H={};H.styleTagTransform=u(),H.setAttributes=d(),H.insert=l().bind(null,"head"),H.domAPI=r(),H.insertStyleElement=g(),t()(R.A,H),R.A&&R.A.locals&&R.A.locals;var G=e(844),J={};J.styleTagTransform=u(),J.setAttributes=d(),J.insert=l().bind(null,"head"),J.domAPI=r(),J.insertStyleElement=g(),t()(G.A,J),G.A&&G.A.locals&&G.A.locals;var F=e(2331),W={};W.styleTagTransform=u(),W.setAttributes=d(),W.insert=l().bind(null,"head"),W.domAPI=r(),W.insertStyleElement=g(),t()(F.A,W),F.A&&F.A.locals&&F.A.locals;var _=e(5943),X={};X.styleTagTransform=u(),X.setAttributes=d(),X.insert=l().bind(null,"head"),X.domAPI=r(),X.insertStyleElement=g(),t()(_.A,X),_.A&&_.A.locals&&_.A.locals;var q=e(3342),Z={};Z.styleTagTransform=u(),Z.setAttributes=d(),Z.insert=l().bind(null,"head"),Z.domAPI=r(),Z.insertStyleElement=g(),t()(q.A,Z),q.A&&q.A.locals&&q.A.locals},8475:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,"/*\n See the JupyterLab Developer Guide for useful CSS Patterns:\n\n https://jupyterlab.readthedocs.io/en/stable/developer/css.html\n*/\n\n:root {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-smooth: never;\n\n --jp-ui-font-size0: 0.75em !important;\n --jp-ui-font-size1: 11.7px !important;\n --jp-ui-font-size2: 1.08em !important;\n --jp-ui-font-size3: 1.296em !important;\n --jp-code-font-size: 11.7px !important;\n}\n\n/* Dark mode override for jp-layout-color2 */\n[data-jp-theme-light='false'] {\n --jp-layout-color2: #232323 !important;\n --jp-border-color3: #383838 !important;\n}\n\n/* Chat box widget styling */\n.sage-ai-chatbox {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n background-color: var(--jp-layout-color0);\n color: var(--jp-ui-font-color1);\n font-family: var(--jp-ui-font-family);\n border-radius: 12px;\n border: 0.5px solid var(--jp-border-color2);\n box-shadow: 0 0 20px 8px rgb(0 0 0 / 10%);\n}\n\n[data-jp-theme-light='false'] .sage-ai-chatbox {\n background-color: #1a1a1a;\n}\n\n[data-jp-theme-light='true'] .sage-ai-chatbox {\n background-color: #fff;\n}\n\n[data-jp-theme-light='false'] .sage-ai-chatbox {\n background-color: #1a1a1a;\n}\n\n[data-jp-theme-light='true'] .sage-ai-chatbox {\n background-color: #fff;\n}\n\n.sage-ai-chat-container {\n width: 100%;\n padding: 6px;\n}\n\n.sage-ai-toolbar {\n display: flex;\n align-items: center;\n padding: 8px;\n border-bottom: 1px solid var(--jp-border-color2);\n height: 53px;\n}\n\n.sage-ai-more-options-button {\n margin-left: 8px;\n}\n\n/* Autorun checkbox container styling */\n.sage-ai-checkbox-container {\n display: flex;\n align-items: center;\n margin-right: 4px;\n padding: 0 2px;\n font-size: var(--jp-ui-font-size0);\n}\n\n.sage-ai-checkbox {\n margin-right: 5px;\n cursor: pointer;\n width: 16px;\n height: 16px;\n}\n\n.sage-ai-checkbox-label {\n color: var(--jp-ui-font-color1);\n cursor: pointer;\n user-select: none;\n font-size: 14px;\n line-height: 4px;\n}\n\n.sage-ai-checkbox-container:hover .sage-ai-checkbox-label {\n color: var(--jp-ui-font-color0);\n}\n\n/* Common styles for buttons and controls */\n.sage-ai-control-base {\n border: 0.5px solid #e7e7e7;\n border-radius: 6px !important;\n background: transparent;\n transition: all 0.2s ease;\n}\n\n[data-jp-theme-light='false'] .sage-ai-control-base {\n border-color: #383838;\n}\n\n.sage-ai-control-base:hover:not(:disabled) {\n border-color: #666;\n}\n\n/* Auto Run Toggle Switch Styles */\n.sage-ai-autorun-toggle {\n padding: 0 10px;\n margin-right: 8px;\n height: 30px;\n min-width: 89px;\n}\n\n.sage-ai-autorun-toggle .sage-ai-toggle-input {\n display: none; /* Hide the actual checkbox */\n}\n\n.sage-ai-toggle-label {\n display: flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n margin: 0;\n font-size: 13px;\n color: var(--jp-ui-font-color1);\n user-select: none;\n}\n\n.sage-ai-toggle-switch {\n position: relative;\n width: 28px;\n height: 16px;\n background: #494949;\n border-radius: 8px;\n transition: background-color 0.3s ease;\n flex-shrink: 0;\n}\n\n.sage-ai-toggle-switch::before {\n content: '';\n position: absolute;\n top: 1px;\n left: 1px;\n width: 14px;\n height: 14px;\n background: white;\n border-radius: 50%;\n transition: transform 0.3s ease;\n}\n\n/* Active state styles */\n.sage-ai-toggle-input:checked + .sage-ai-toggle-label .sage-ai-toggle-switch {\n background: #4caf50;\n}\n\n.sage-ai-toggle-input:checked\n + .sage-ai-toggle-label\n .sage-ai-toggle-switch::before {\n transform: translateX(12px);\n}\n\n/* Hover effects */\n.sage-ai-autorun-toggle:hover .sage-ai-toggle-label {\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-reset-button {\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n padding: 8px;\n gap: 6px;\n width: 32px;\n height: 32px;\n flex: none;\n flex-grow: 0;\n cursor: pointer;\n}\n\n.sage-ai-history-container {\n flex: 1;\n overflow: hidden;\n padding-bottom: 20px; /* Reverted to default, now handled dynamically */\n display: flex;\n}\n\n.sage-ai-history-container.floating-box-visible {\n padding-top: 0 !important;\n}\n\n.sage-ai-scroll-down-button {\n position: absolute;\n width: 100%;\n align-items: center;\n -webkit-animation: sage-ai-vert-move 1s infinite alternate;\n animation: sage-ai-vert-move 1s infinite alternate;\n padding: 0;\n margin: 0;\n outline: none;\n border: none;\n background: none;\n cursor: pointer;\n}\n\n.sage-ai-scroll-down-button.hidden {\n display: none;\n}\n\n@keyframes sage-ai-vert-move {\n 0% {\n transform: translateY(0);\n }\n\n 100% {\n transform: translateY(5px);\n }\n}\n\n@keyframes sage-ai-vert-move {\n 0% {\n transform: translateY(0);\n }\n\n 100% {\n transform: translateY(5px);\n }\n}\n\n.sage-ai-scroll-down-button svg {\n border-radius: 50%;\n padding: 2px;\n align-items: center;\n backdrop-filter: blur(10px);\n}\n\n.sage-ai-chat-history {\n flex: 1;\n height: 100%;\n overflow-y: auto;\n\n /* Ensure scrolling works properly with the increased bottom padding */\n scroll-behavior: smooth;\n padding: 0 12px;\n}\n\n.jp-Cell {\n margin-top: 28px !important;\n}\n\n.sage-ai-rich-chat-input {\n margin-bottom: 42px;\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n\n.sage-ai-rich-chat-input::-webkit-scrollbar {\n width: 0;\n height: 0;\n}\n\n.sage-ai-in-context-cell .jp-Editor {\n border: 1px solid #16bd16 !important;\n border-radius: 2px;\n box-shadow: 0 0 3px rgb(22 189 22 / 20%);\n}\n\n/* New chatbox wrapper for structured input layout */\n.sage-ai-chatbox-wrapper {\n flex: 1;\n border-radius: 8px;\n padding: 1px; /* This creates the border width */\n background: var(--jp-border-color1); /* Default border color */\n display: flex;\n flex-direction: column;\n}\n\n.sage-ai-chatbox-wrapper:focus-within {\n background: conic-gradient(\n from 24deg,\n #a7d8f0,\n #ff9270 14%,\n #fdf0b2 28%,\n #a5ddf4 42%,\n #8521ca 56%,\n #fbf4c8 70%,\n #b169e8 85%,\n #a7d8f0 100%\n );\n}\n\n.sage-ai-input-container {\n z-index: 2;\n display: flex;\n padding: 10px;\n\n /* background-color: var(--jp-layout-color1); */\n background: transparent;\n position: relative;\n}\n\n/* Context row (first row) */\n.sage-ai-context-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 12px 4px;\n background-color: var(--jp-layout-color0);\n border-radius: 7px 7px 0 0;\n min-height: 24px;\n flex-wrap: wrap;\n\n /* border-bottom: 1px solid var(--jp-border-color2); */\n}\n\n/* Hide context row when no contexts and hide border */\n.sage-ai-context-row:has(.sage-ai-context-display-inline.hidden) {\n display: none;\n}\n\n.sage-ai-context-row:has(.sage-ai-context-display-inline.hidden)\n + .sage-ai-input-row {\n border-radius: 7px;\n}\n\n.sage-ai-context-row:has(.sage-ai-context-display-inline.hidden)\n + .sage-ai-input-row\n .sage-ai-rich-chat-input-wrapper {\n border-radius: 7px;\n}\n\n.sage-ai-context-row:has(.sage-ai-context-display-inline.hidden)\n + .sage-ai-input-row\n .sage-ai-rich-chat-input {\n border-radius: 7px;\n}\n\n/* Alternative fallback for browsers that don't support :has() */\n.sage-ai-context-row.context-row-hidden {\n display: none;\n}\n\n.sage-ai-context-row.context-row-hidden + .sage-ai-input-row {\n border-radius: 7px;\n}\n\n.sage-ai-context-row.context-row-hidden\n + .sage-ai-input-row\n .sage-ai-rich-chat-input-wrapper {\n border-radius: 7px;\n}\n\n.sage-ai-context-row.context-row-hidden\n + .sage-ai-input-row\n .sage-ai-rich-chat-input {\n border-radius: 7px;\n}\n\n.sage-ai-context-text {\n margin: 0;\n font-size: 11px;\n font-weight: 500;\n line-height: 160%;\n}\n\n.sage-ai-at-icon {\n height: 13px;\n margin-right: 5px;\n transform: translateY(-3px);\n}\n\n/* Add Context button */\n.sage-ai-add-context-button {\n border: 1px solid var(--jp-border-color2);\n border-radius: 6px !important;\n color: var(--jp-ui-font-color2);\n cursor: pointer;\n padding: 3px 8px !important;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n flex-shrink: 0;\n background: var(--jp-layout-color0);\n}\n\n.sage-ai-add-context-button:hover {\n border-color: var(--jp-ui-font-color1);\n color: var(--jp-ui-font-color1);\n\n /* background-color: var(--jp-brand-color3); */\n}\n\n.sage-ai-add-context-button:hover .sage-ai-at-icon svg path {\n stroke: var(--jp-ui-font-color1);\n}\n\n/* Inline context display */\n.sage-ai-context-display-inline {\n flex: 1;\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 4px;\n min-height: 24px;\n}\n\n.sage-ai-context-display-inline.hidden {\n display: none;\n}\n\n.sage-ai-context-items-inline {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 4px;\n width: 100%;\n}\n\n/* Inline context cell boxes */\n.sage-ai-context-cell-box-inline {\n background: #e6f7ff;\n color: #1976d2;\n border: 1px solid #1976d2;\n border-radius: 4px;\n font-size: 11px;\n padding: 2px 6px;\n display: inline-flex;\n align-items: center;\n position: relative;\n gap: 4px;\n transition: all 0.2s;\n font-weight: 500;\n max-width: 120px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.sage-ai-context-cell-box-inline:hover {\n box-shadow: 0 1px 4px rgb(25 118 210 / 20%);\n}\n\n/* Input row (second row) */\n.sage-ai-input-row {\n display: flex;\n align-items: flex-end;\n position: relative;\n background-color: var(--jp-layout-color0);\n border-radius: 0 0 7px 7px;\n}\n\n/* Rich text input wrapper for gradient border - updated for new structure */\n.sage-ai-rich-chat-input-wrapper {\n flex: 1;\n border: none; /* Remove border since chatbox-wrapper provides it */\n border-radius: 0 0 7px 7px;\n padding: 0; /* Remove padding since wrapper handles it */\n background: transparent; /* Transparent since chatbox-wrapper handles background */\n}\n\n.sage-ai-rich-chat-input-wrapper:focus-within {\n background: transparent; /* Let the parent handle the gradient */\n}\n\n/* Rich text input styling - updated for new structure */\n.sage-ai-rich-chat-input {\n border: none; /* Remove border since wrapper provides it */\n border-radius: 0 0 7px 7px; /* Match the wrapper radius */\n padding: 12px;\n background-color: var(--jp-layout-color0);\n color: var(--jp-ui-font-color1);\n font-size: var(--jp-ui-font-size1);\n font-family: var(--jp-ui-font-family);\n resize: none;\n overflow-y: hidden;\n min-height: 8px;\n max-height: 240px;\n line-height: 1.5;\n transition: height 0.1s ease;\n white-space: pre-wrap;\n word-wrap: break-word;\n word-break: break-word;\n}\n\n[data-jp-theme-light='true'] .sage-ai-rich-chat-input {\n background-color: #fcfcfc;\n}\n\n.sage-ai-rich-chat-input:focus {\n outline: none;\n\n /* Remove the old focus styles since wrapper handles the border */\n}\n\n.sage-ai-new-prompt-cta {\n display: flex;\n flex-flow: row wrap;\n width: 100%;\n align-items: center;\n justify-content: center;\n gap: 6px;\n margin-bottom: 12px;\n color: var(--jp-ui-font-color2);\n}\n\n.sage-ai-new-prompt-cta p {\n text-wrap: nowrap !important;\n margin: 0 !important;\n}\n\n.sage-ai-new-prompt-cta a {\n color: var(--jp-ui-font-color0);\n font-weight: 600;\n font-size: 13px;\n cursor: pointer;\n text-wrap: nowrap !important;\n}\n\n/* Placeholder styling for rich text input */\n.sage-ai-rich-chat-input.empty::before {\n content: attr(data-placeholder);\n color: var(--jp-ui-font-color2);\n pointer-events: none;\n position: absolute;\n transform: translateY(0);\n}\n\n/* Mention styling with different colors for different types */\n.sage-ai-mention {\n font-weight: 600;\n border-radius: 3px;\n padding: 1px 3px;\n margin: 0 1px;\n white-space: nowrap;\n}\n\n.sage-ai-mention-template {\n background-color: rgb(156 39 176 / 10%);\n color: #9c27b0;\n border: 1px solid rgb(156 39 176 / 30%);\n}\n\n.sage-ai-mention-data {\n background-color: rgb(33 150 243 / 10%);\n color: #2196f3;\n border: 1px solid rgb(33 150 243 / 30%);\n}\n\n.sage-ai-mention-variable {\n background-color: rgb(76 175 80 / 10%);\n color: #4caf50;\n border: 1px solid rgb(76 175 80 / 30%);\n}\n\n.sage-ai-mention-cell {\n background-color: rgb(255 152 0 / 10%);\n color: #ff9800;\n border: 1px solid rgb(255 152 0 / 30%);\n}\n\n.sage-ai-mention-default {\n background-color: rgb(96 125 139 / 10%);\n color: #607d8b;\n border: 1px solid rgb(96 125 139 / 30%);\n}\n\n.sage-ai-mention-broken {\n background-color: rgb(244 67 54 / 10%);\n color: #f44336;\n border: 1px solid rgb(244 67 54 / 30%);\n text-decoration: line-through;\n}\n\n/* Dark theme adjustments for mentions */\n[data-jp-theme-name='JupyterLab Dark'] .sage-ai-mention-template {\n background-color: rgb(156 39 176 / 20%);\n color: #ce93d8;\n}\n\n[data-jp-theme-name='JupyterLab Dark'] .sage-ai-mention-data {\n background-color: rgb(33 150 243 / 20%);\n color: #90caf9;\n}\n\n[data-jp-theme-name='JupyterLab Dark'] .sage-ai-mention-variable {\n background-color: rgb(76 175 80 / 20%);\n color: #a5d6a7;\n}\n\n[data-jp-theme-name='JupyterLab Dark'] .sage-ai-mention-cell {\n background-color: rgb(255 152 0 / 20%);\n color: #ffcc02;\n}\n\n[data-jp-theme-name='JupyterLab Dark'] .sage-ai-mention-default {\n background-color: rgb(96 125 139 / 20%);\n color: #b0bec5;\n}\n\n[data-jp-theme-name='JupyterLab Dark'] .sage-ai-mention-broken {\n background-color: rgb(244 67 54 / 20%);\n color: #ef5350;\n}\n\n.sage-ai-send-button,\n.sage-ai-cancel-button {\n background: var(--jp-inverse-layout-color1);\n color: var(--jp-ui-font-color1);\n border: none;\n padding: 6px;\n cursor: pointer;\n font-size: var(--jp-ui-font-size0);\n transition: background-color 0.2s;\n width: 28px;\n height: 28px;\n border-radius: 50% !important;\n}\n\n.sage-ai-cancel-button {\n background: var(--jp-inverse-layout-color0) !important;\n}\n\n.sage-ai-cancel-button svg rect {\n fill: var(--jp-ui-inverse-font-color1) !important;\n}\n\n.sage-ai-send-button.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.sage-ai-send-button.enabled {\n background-color: var(--jp-inverse-layout-color0);\n cursor: pointer;\n}\n\n.sage-ai-send-button svg {\n width: 16px;\n height: 16px;\n}\n\n.sage-ai-send-button.enabled svg path {\n stroke: var(--jp-ui-inverse-font-color0) !important;\n}\n\n.sage-ai-message {\n padding: 8px;\n border-radius: 14px;\n max-width: 100%;\n word-wrap: break-word;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.sage-ai-user-message {\n margin: 8px 0;\n padding: 10px;\n justify-self: end;\n max-width: 70%;\n border: 1px solid var(--jp-border-color2);\n}\n\n.sage-ai-system-message {\n color: var(--jp-ui-font-color2);\n font-style: italic;\n justify-content: center;\n align-items: center;\n padding: 4px;\n}\n\n.sage-ai-error-message {\n color: var(--jp-error-color1);\n font-style: italic;\n justify-content: center;\n padding: 4px;\n background-color: var(--jp-error-color3);\n border-left: 3px solid var(--jp-error-color1);\n}\n\n/* Revert and Send button style */\n.sage-ai-revert-send-button {\n background-color: var(--jp-warn-color1);\n color: white;\n border: none;\n border-radius: 4px;\n padding: 8px 16px;\n cursor: pointer;\n font-size: var(--jp-ui-font-size0);\n transition: background-color 0.2s;\n opacity: 1;\n}\n\n.sage-ai-revert-send-button:hover {\n background-color: var(--jp-warn-color0);\n}\n\n.sage-ai-revert-send-button:disabled {\n background-color: var(--jp-warn-color3);\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.sage-ai-revert-send-button.hidden {\n display: none;\n}\n\n.sage-ai-loading {\n color: var(--jp-ui-font-color3);\n font-style: italic;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: row;\n gap: 10px;\n}\n\n.sage-ai-loading-dots {\n display: inline-block;\n position: relative;\n width: 40px;\n height: 12px;\n}\n\n.sage-ai-loading-dots span {\n position: absolute;\n top: 0;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--jp-info-color0);\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\n\n.sage-ai-loading-dots span:nth-child(1) {\n left: 0;\n animation: sage-ai-loading-dots1 0.6s infinite;\n}\n\n.sage-ai-loading-dots span:nth-child(2) {\n left: 10px;\n animation: sage-ai-loading-dots2 0.6s infinite;\n}\n\n.sage-ai-loading-dots span:nth-child(3) {\n left: 20px;\n animation: sage-ai-loading-dots2 0.6s infinite;\n}\n\n.sage-ai-loading-dots span:nth-child(4) {\n left: 30px;\n animation: sage-ai-loading-dots3 0.6s infinite;\n}\n\n@keyframes sage-ai-loading-dots1 {\n 0% {\n transform: scale(0);\n }\n\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes sage-ai-loading-dots2 {\n 0% {\n transform: translate(0, 0);\n }\n\n 100% {\n transform: translate(10px, 0);\n }\n}\n\n@keyframes sage-ai-loading-dots3 {\n 0% {\n transform: scale(1);\n }\n\n 100% {\n transform: scale(0);\n }\n}\n\n.sage-ai-blob-loader {\n position: relative;\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: linear-gradient(135deg, #0057c8, #207fd7, #42d9ff);\n background-size: 300% 300%;\n animation:\n ellipseAnimation 2s linear infinite,\n gradientShift 2s ease-in-out infinite;\n}\n\n/* Blob morphing and rotating animation */\n@keyframes ellipseAnimation {\n 0% {\n border-radius: 50%;\n }\n\n 12.5% {\n border-radius: 25% 50% 50%;\n transform: rotate(45deg);\n }\n\n 25% {\n border-radius: 25% 25% 50% 50%;\n transform: rotate(90deg);\n }\n\n 37.5% {\n border-radius: 25% 25% 25% 50%;\n transform: rotate(135deg);\n }\n\n 50% {\n border-radius: 25%;\n transform: rotate(180deg);\n }\n\n 62.5% {\n border-radius: 50% 25% 25%;\n transform: rotate(225deg);\n }\n\n 75% {\n border-radius: 50% 50% 25% 25%;\n transform: rotate(270deg);\n }\n\n 87.5% {\n border-radius: 50% 50% 50% 25%;\n transform: rotate(315deg);\n }\n\n 100% {\n border-radius: 50%;\n transform: rotate(360deg);\n }\n}\n\n/* Smooth shifting gradient animation */\n@keyframes gradientShift {\n 0% {\n background-position: 0% 50%;\n }\n\n 50% {\n background-position: 100% 50%;\n }\n\n 100% {\n background-position: 0% 50%;\n }\n}\n\n.sage-ai-tool-calls {\n margin: 8px 0;\n padding: 8px;\n border-left: 3px solid var(--jp-brand-color1);\n background-color: var(--jp-layout-color2);\n border-radius: 4px;\n}\n\n.sage-ai-tool-calls-header {\n margin-bottom: 8px;\n font-weight: bold;\n color: var(--jp-ui-font-color1);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.sage-ai-tool-calls-header::after {\n content: '▼';\n font-size: 12px;\n transition: transform 0.2s ease;\n}\n\n.sage-ai-tool-calls-header.collapsed::after {\n transform: rotate(-90deg);\n}\n\n.sage-ai-tool-calls-content {\n overflow: hidden;\n transition: max-height 0.3s ease;\n}\n\n.sage-ai-tool-calls-content.collapsed {\n max-height: 0;\n}\n\n.sage-ai-tool-call {\n margin-bottom: 8px;\n padding: 4px 0;\n}\n\n.sage-ai-tool-call-badge {\n display: inline-block;\n\n /* color: white; */\n margin-right: 8px;\n font-size: 12px;\n}\n\n.sage-ai-tool-call-content {\n background-color: var(--jp-layout-color1);\n border-radius: 4px;\n padding: 8px;\n margin-top: 4px;\n font-family: monospace;\n font-size: 12px;\n overflow-x: auto;\n}\n\n.sage-ai-tool-result {\n margin: 8px 0;\n padding: 8px;\n border-left: 3px solid var(--jp-success-color0);\n background-color: var(--jp-layout-color2);\n border-radius: 4px;\n}\n\n.sage-ai-tool-result-header {\n margin-bottom: 8px;\n font-weight: bold;\n color: var(--jp-ui-font-color1);\n}\n\n.sage-ai-tool-result-content {\n background-color: var(--jp-layout-color1);\n border-radius: 4px;\n padding: 8px;\n margin-top: 4px;\n font-family: monospace;\n font-size: 12px;\n overflow-x: auto;\n}\n\n.sage-ai-streaming-cursor {\n display: inline-block;\n height: 12px;\n width: 12px;\n border-radius: 50%;\n margin-left: 4px;\n vertical-align: middle;\n margin-bottom: 4px;\n background-color: var(--jp-ui-font-color1);\n animation: blink 1s infinite;\n}\n\n@keyframes blink {\n 0%,\n 50% {\n opacity: 1;\n }\n\n 51%,\n 100% {\n opacity: 0;\n }\n}\n\n.sage-ai-streaming-tool-call {\n opacity: 0.9;\n transition: opacity 0.3s ease;\n}\n\n.sage-ai-streaming-tool-call-container {\n background-color: var(--jp-layout-color2);\n border-radius: 4px;\n padding: 8px;\n margin: 4px 0;\n border-left: 3px solid var(--jp-brand-color1);\n}\n\n.sage-ai-streaming-tool-call-placeholder {\n color: var(--jp-ui-font-color2);\n font-style: italic;\n padding: 8px;\n text-align: center;\n background-color: var(--jp-layout-color1);\n border-radius: 4px;\n border: 1px dashed var(--jp-border-color1);\n}\n\n.sage-ai-streaming-tool-call-container .sage-ai-tool-call-v1 {\n margin-bottom: 8px;\n animation: fadeInUp 0.3s ease;\n}\n\n.sage-ai-streaming-tool-call-container .sage-ai-tool-call-v1:last-child {\n margin-bottom: 0;\n}\n\n@keyframes fadeInUp {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.sage-ai-streaming-content {\n font-family: var(--jp-ui-font-family);\n line-height: 1.5;\n}\n\n/* Improve code block rendering during streaming */\n.sage-ai-streaming-content code {\n font-family: var(--jp-code-font-family);\n background-color: var(--jp-layout-color2);\n padding: 2px 4px;\n border-radius: 3px;\n}\n\n/* Ensure the streaming content expands properly */\n.sage-ai-message-content {\n width: 100%;\n}\n\n.sage-ai-tool-group {\n margin: 8px 0;\n padding: 8px;\n\n /* border-left: 3px solid var(--jp-brand-color1); */\n background-color: var(--jp-layout-color2);\n border-radius: 4px;\n}\n\n.sage-ai-tool-group-header {\n margin-bottom: 8px;\n font-weight: bold;\n color: var(--jp-ui-font-color1);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.sage-ai-tool-group-header::after {\n content: '▼';\n font-size: 12px;\n transition: transform 0.2s ease;\n}\n\n.sage-ai-tool-group-header.collapsed::after {\n transform: rotate(-90deg);\n}\n\n.sage-ai-tool-group-content {\n overflow: hidden;\n transition: max-height 0.3s ease;\n}\n\n.sage-ai-tool-group-content.collapsed {\n max-height: 0;\n}\n\n.sage-ai-tool-item {\n margin-bottom: 12px;\n border-bottom: 1px solid var(--jp-border-color1);\n padding-bottom: 12px;\n}\n\n.sage-ai-tool-item:last-child {\n margin-bottom: 0;\n border-bottom: none;\n padding-bottom: 0;\n}\n\n.sage-ai-tool-item-header {\n display: flex;\n align-items: center;\n margin-bottom: 4px;\n padding: 0;\n font-weight: bold;\n flex-flow: row wrap;\n place-content: center space-between;\n width: 100%;\n}\n\n.sage-ai-tool-timestamp {\n margin-left: 10px;\n font-size: 11px;\n color: var(--jp-ui-font-color2);\n font-style: italic;\n font-weight: normal;\n}\n\n.sage-ai-tool-call .sage-ai-tool-call-content,\n.sage-ai-tool-result .sage-ai-tool-result-content {\n background-color: var(--jp-layout-color1);\n border-radius: 4px;\n padding: 8px;\n margin-top: 4px;\n font-family: monospace;\n font-size: 12px;\n overflow-x: auto;\n}\n\n/* Add this to your existing CSS */\n\n.sage-ai-dropdown-indicator {\n margin-left: auto;\n font-size: 12px;\n transition: transform 0.2s ease;\n}\n\n.sage-ai-tool-item-header {\n display: flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n border-radius: 4px;\n}\n\n.sage-ai-tool-item-header:hover {\n background-color: var(--jp-layout-color2);\n}\n\n.sage-ai-tool-item-header.collapsed .sage-ai-dropdown-indicator {\n transform: rotate(-90deg);\n}\n\n.sage-ai-tool-call-content,\n.sage-ai-tool-result-content {\n max-height: 500px;\n overflow: auto;\n transition:\n max-height 0.3s ease,\n opacity 0.3s ease;\n opacity: 1;\n}\n\n.sage-ai-tool-call-content.collapsed,\n.sage-ai-tool-result-content.collapsed {\n max-height: 0;\n overflow: hidden;\n opacity: 0;\n margin: 0;\n padding: 0;\n}\n\n/* Tool group styling */\n.sage-ai-tool-group-title {\n font-weight: bold;\n color: var(--jp-ui-font-color0);\n margin-bottom: 8px;\n padding: 4px 8px;\n background-color: var(--jp-layout-color2);\n border-radius: 4px 4px 0 0;\n border-bottom: 1px solid var(--jp-border-color1);\n}\n\n/* Make sure there's no lingering collapse functionality */\n.sage-ai-tool-group-content {\n display: block;\n overflow: visible;\n max-height: none;\n}\n\n.sage-ai-undo-button {\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n padding: 8px;\n gap: 6px;\n width: 32px;\n height: 32px;\n flex: none;\n flex-grow: 0;\n cursor: pointer;\n margin-right: 8px;\n}\n\n.sage-ai-undo-button:disabled {\n opacity: 0.4;\n background-color: rgb(0 0 0 / 10%);\n cursor: not-allowed;\n}\n\n.sage-ai-icon-close {\n font-size: 16px;\n}\n\n.sage-ai-icon-button-sm,\n.sage-ai-icon-button-md {\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: transparent;\n color: #949494;\n line-height: 0;\n border: none;\n cursor: pointer;\n padding: 0;\n border-radius: 50% !important;\n width: 24px;\n height: 24px;\n transition: background-color 0.2s ease;\n}\n\n.sage-ai-icon-button-sm {\n width: 20px;\n height: 20px;\n}\n\n.sage-ai-icon-button-md {\n width: 36px;\n height: 36px;\n}\n\n.sage-ai-icon-button-sm:hover,\n.sage-ai-icon-button-md:hover {\n background-color: var(--jp-layout-color2);\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: var(--jp-ui-font-size0);\n transition: background-color 0.2s;\n}\n\n.sage-ai-undo-button:disabled {\n background-color: var(--jp-layout-color3);\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.sage-ai-undo-button:hover:not(:disabled) {\n background-color: var(--jp-brand-color1);\n}\n\n/* Thread selector styling */\n.sage-ai-thread-selector {\n background-color: transparent;\n border: none;\n color: var(--jp-ui-font-color1);\n cursor: pointer;\n padding: 4px;\n font-size: 14px;\n display: flex;\n align-items: center;\n border-radius: 4px;\n margin-right: 8px;\n}\n\n.sage-ai-thread-selector:hover {\n background-color: var(--jp-layout-color3);\n}\n\n.sage-ai-thread-selector svg {\n width: 24px;\n height: 24px;\n}\n\n.sage-ai-thread-selector-button {\n margin-right: 4px;\n}\n\n.sage-ai-thread-name {\n flex: 1;\n align-content: center;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: 600;\n font-size: var(--jp-ui-font-size1);\n}\n\n.d2h-file-header {\n display: none !important;\n}\n\n.d2h-file-wrapper {\n margin-bottom: 0 !important;\n}\n\n.d2h-info {\n display: none !important;\n}\n\n.jp-Notebook-footer {\n display: none !important;\n}\n\n/* Markdown Content Styling */\n.sage-ai-markdown-content {\n line-height: 1.6;\n margin-left: 0 !important;\n margin-top: 4px;\n}\n\n.sage-ai-markdown-content h1,\n.sage-ai-markdown-content h2,\n.sage-ai-markdown-content h3,\n.sage-ai-markdown-content h4,\n.sage-ai-markdown-content h5,\n.sage-ai-markdown-content h6 {\n margin-top: 1em;\n margin-bottom: 0.5em;\n font-weight: 600;\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-markdown-content h1 {\n font-size: 1.8em;\n}\n\n.sage-ai-markdown-content h2 {\n font-size: 1.6em;\n}\n\n.sage-ai-markdown-content h3 {\n font-size: 1.4em;\n}\n\n.sage-ai-markdown-content h4 {\n font-size: 1.2em;\n}\n\n.sage-ai-markdown-content h5 {\n font-size: 1.1em;\n}\n\n.sage-ai-markdown-content h6 {\n font-size: 1em;\n}\n\n.sage-ai-markdown-content p {\n margin: 0;\n}\n\n.sage-ai-markdown-content ul,\n.sage-ai-markdown-content ol {\n padding-left: 2em;\n margin: 4px;\n}\n\n.sage-ai-markdown-content ul {\n list-style-type: disc;\n}\n\n.sage-ai-markdown-content ol {\n list-style-type: decimal;\n}\n\n.sage-ai-markdown-content li {\n margin: 0.3em 0;\n}\n\n.sage-ai-markdown-content a {\n color: var(--jp-brand-color1);\n text-decoration: none;\n}\n\n.sage-ai-markdown-content a:hover {\n text-decoration: underline;\n}\n\n.sage-ai-markdown-content blockquote {\n border-left: 4px solid var(--jp-border-color2);\n padding-left: 1em;\n margin: 1em 0;\n color: var(--jp-ui-font-color2);\n}\n\n.sage-ai-markdown-content code {\n font-family: var(--jp-code-font-family);\n background-color: var(--jp-layout-color2);\n padding: 2px 4px;\n border-radius: 3px;\n}\n\n.sage-ai-markdown-content pre {\n background-color: var(--jp-layout-color2);\n border-radius: 8px;\n padding: 1em;\n overflow-x: auto;\n margin: 1em 0;\n position: relative;\n}\n\n.sage-ai-markdown-content pre code {\n background-color: transparent;\n padding: 0;\n font-size: 0.9em;\n white-space: pre;\n}\n\n.sage-ai-markdown-content table {\n border-collapse: collapse;\n width: 100%;\n margin: 1em 0;\n}\n\n.sage-ai-markdown-content th,\n.sage-ai-markdown-content td {\n border: 1px solid var(--jp-border-color2);\n padding: 8px;\n text-align: left;\n}\n\n.sage-ai-markdown-content th {\n background-color: var(--jp-layout-color2);\n font-weight: bold;\n}\n\n.sage-ai-markdown-content img {\n max-width: 100%;\n height: auto;\n}\n\n/* Code Block Container */\n.sage-ai-code-block-container {\n position: relative;\n margin: 1em 0;\n}\n\n/* Copy Code Button */\n.sage-ai-copy-code-button {\n position: absolute;\n top: 5px;\n right: 5px;\n background-color: transparent;\n color: var(--jp-ui-font-color1);\n border: none;\n border-radius: 4px;\n padding: 4px 8px;\n font-size: 12px;\n cursor: pointer;\n opacity: 0.7;\n transition: opacity 0.2s;\n}\n\n.sage-ai-copy-code-button:hover {\n opacity: 1;\n}\n\n/* Message structure */\n.sage-ai-message-header {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.sage-ai-message-header-image {\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(\n 135deg,\n rgb(254 193 99 / 12%) 0%,\n rgb(222 67 19 / 12%) 100%\n );\n height: 27px;\n width: 27px;\n flex-shrink: 0;\n border-radius: 50%;\n}\n\n.sage-ai-message-header-title {\n color: var(--jp-ui-font-color2);\n font-size: var(--jp-ui-font-size1);\n font-weight: 500;\n}\n\n.sage-ai-message-content {\n margin-left: 0;\n}\n\n/* Context cells indicator */\n.context-cells-indicator {\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n font-size: 12px;\n margin: 8px;\n margin-bottom: 0;\n border-radius: 4px;\n color: #666;\n width: calc(100% - 32px);\n display: none !important;\n}\n\n/* Hide indicator when no cells are in context */\n.context-cells-indicator.hidden {\n display: none;\n}\n\n/* Context cell box (like .sage-ai-cell-id-label) */\n.sage-ai-context-cell-box {\n background: #e6f7ff;\n color: #1976d2;\n border: 2px solid #1976d2;\n border-radius: 4px;\n font-size: 12px;\n padding: 4px;\n z-index: 101;\n display: inline-flex;\n align-items: center;\n position: relative;\n gap: 4px;\n transition:\n box-shadow 0.2s,\n border 0.2s;\n margin-bottom: 2px;\n box-shadow: 0 2px 8px rgb(25 118 210 / 12%);\n font-weight: 500;\n flex-direction: row;\n}\n\n.sage-ai-context-cell-box:hover {\n box-shadow: 0 4px 16px rgb(25 118 210 / 18%);\n border-color: #1251a3;\n}\n\n.sage-ai-context-cell-delete {\n color: #e53935;\n font-size: 14px;\n cursor: pointer;\n line-height: 0;\n}\n\n.sage-ai-tool-call-v1 {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 4px;\n margin-bottom: 4px;\n padding: 0 8px;\n font-family: var(--jp-ui-font-family);\n font-size: var(--jp-ui-font-size1);\n color: var(--jp-ui-font-color2);\n}\n\n.sage-ai-tool-call-v1.clickable {\n cursor: pointer;\n}\n\n.sage-ai-tool-call-v1.error-state svg {\n fill: var(--error-fill-active) !important;\n}\n\n.sage-ai-tool-call-v1.error-state span {\n color: var(--error-fill-active) !important;\n}\n\n.sage-ai-loading-text {\n background: linear-gradient(\n 135deg,\n transparent,\n var(--jp-ui-font-color1),\n transparent\n );\n background-clip: text;\n color: transparent !important;\n background-size: 200% 100%;\n animation: shimmer 2.5s linear infinite;\n}\n\n@keyframes shimmer {\n 0% {\n background-position: 200% 0;\n }\n\n 100% {\n background-position: -200% 0;\n }\n}\n\n.sage-ai-tool-call-cell {\n border-radius: 5px;\n background: rgb(59 130 246 / 13%);\n color: #60a5fa;\n padding: 1px 6px;\n font-family: var(--jp-code-font-family), serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n line-height: 160%; /* 19.2px */\n border: none;\n}\n\n.sage-ai-tool-call-cell:hover {\n background: rgb(59 130 246 / 20%);\n color: #2563eb;\n cursor: pointer;\n}\n\n.sage-ai-tool-call-code {\n background: var(--d2h-dark-selected-color);\n color: var(--jp-ui-font-color1);\n border-radius: 4px;\n font-size: var(--jp-ui-font-size0);\n padding: 2px 4px;\n}\n\n/* Mode selector styles are now in mode-selector-dropdown.css */\n\n/* Floating current/next step box */\n.sage-ai-step-floating-box {\n position: fixed;\n justify-self: anchor-center;\n backdrop-filter: blur(10px);\n border: 0 solid var(--jp-border-color2);\n border-bottom-width: 1px;\n width: calc(100% - 25px);\n padding: 8px 12px;\n box-shadow: 0 2px 8px rgb(0 0 0 / 10%);\n z-index: 100;\n display: none;\n font-size: var(--jp-ui-font-size0);\n line-height: 1.4;\n}\n\n.sage-ai-step-floating-box.visible {\n display: flex;\n gap: 8px;\n max-height: 80px;\n}\n\n.sage-ai-chat-history.floating-box-visible > :first-child {\n margin-top: 84px !important;\n}\n\n.sage-ai-step-floating-box .content {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.sage-ai-step-floating-box .current-task-text {\n color: var(--jp-ui-font-color0);\n font-size: 11px;\n margin: 0;\n margin-top: 3px;\n}\n\n.sage-ai-step-floating-box .next-task-text {\n color: var(--jp-ui-font-color2);\n font-size: var(--jp-ui-font-size0);\n margin: 0;\n}\n\n.sage-ai-step-floating-box .close-button {\n background: none;\n border: none;\n color: var(--jp-ui-font-color2);\n cursor: pointer;\n padding: 2px;\n font-size: 14px;\n line-height: 1;\n border-radius: 2px;\n transition: background-color 0.2s;\n}\n\n.sage-ai-step-floating-box .close-button:hover {\n background-color: var(--jp-layout-color3);\n color: var(--jp-ui-font-color1);\n}\n\n.sage-ai-step-floating-box .loader {\n width: 20px;\n height: 20px;\n display: inline-block;\n position: relative;\n}\n\n.sage-ai-step-floating-box .loader::after,\n.sage-ai-step-floating-box .loader::before {\n content: '';\n box-sizing: border-box;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n border: 2px solid var(--jp-ui-font-color1);\n position: absolute;\n left: 0;\n top: 0;\n animation: sage-ai-step-floating-box-animloader 2s linear infinite;\n}\n\n.sage-ai-step-floating-box .loader::after {\n animation-delay: 1s;\n}\n\n@keyframes sage-ai-step-floating-box-animloader {\n 0% {\n transform: scale(0);\n opacity: 1;\n }\n\n 100% {\n transform: scale(1);\n opacity: 0;\n }\n}\n\n.sage-ai-step-floating-box .source-toggle {\n align-self: center;\n background: none;\n border: none;\n color: var(--jp-ui-font-color2);\n cursor: pointer;\n font-size: var(--jp-ui-font-size0);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border-radius: 4px;\n transition:\n background-color 0.2s,\n color 0.2s;\n width: 24px;\n height: 24px;\n}\n\n.sage-ai-step-floating-box .source-toggle:hover {\n background-color: var(--jp-layout-color2);\n color: var(--jp-ui-font-color1);\n}\n\n.sage-ai-step-floating-box .toggle-icon {\n font-size: 12px;\n transition: transform 0.2s ease;\n line-height: 1;\n}\n\n.sage-ai-step-floating-box .source-content {\n padding: 8px;\n background-color: var(--jp-layout-color2);\n border-radius: 4px;\n border: 1px solid var(--jp-border-color2);\n overflow-y: auto;\n resize: vertical;\n min-height: 100px;\n max-height: 60vh;\n}\n\n.sage-ai-step-floating-box .source-markdown {\n font-family: var(--jp-code-font-family);\n font-size: 11px;\n line-height: 1.4;\n color: var(--jp-ui-font-color1);\n}\n\n.sage-ai-step-floating-box .source-markdown h1,\n.sage-ai-step-floating-box .source-markdown h2,\n.sage-ai-step-floating-box .source-markdown h3,\n.sage-ai-step-floating-box .source-markdown h4,\n.sage-ai-step-floating-box .source-markdown h5,\n.sage-ai-step-floating-box .source-markdown h6 {\n margin: 8px 0 4px;\n font-weight: 600;\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-step-floating-box .source-markdown h1 {\n font-size: 14px;\n}\n\n.sage-ai-step-floating-box .source-markdown h2 {\n font-size: 13px;\n}\n\n.sage-ai-step-floating-box .source-markdown h3 {\n font-size: 12px;\n}\n\n.sage-ai-step-floating-box .source-markdown h4,\n.sage-ai-step-floating-box .source-markdown h5,\n.sage-ai-step-floating-box .source-markdown h6 {\n font-size: 11px;\n}\n\n.sage-ai-step-floating-box .source-markdown p {\n margin: 4px 0;\n}\n\n.sage-ai-step-floating-box .source-markdown ul,\n.sage-ai-step-floating-box .source-markdown ol {\n padding-left: 16px;\n margin: 4px 0;\n}\n\n.sage-ai-step-floating-box .source-markdown li {\n margin: 2px 0;\n}\n\n.sage-ai-step-floating-box .source-markdown code {\n background-color: var(--jp-layout-color1);\n padding: 1px 3px;\n border-radius: 2px;\n font-size: 10px;\n}\n\n.sage-ai-step-floating-box .source-markdown pre {\n background-color: var(--jp-layout-color1);\n border-radius: 4px;\n padding: 6px;\n margin: 4px 0;\n overflow-x: auto;\n}\n\n.sage-ai-step-floating-box .source-markdown pre code {\n background-color: transparent;\n padding: 0;\n font-size: 10px;\n}\n\n.sage-ai-step-floating-box .source-markdown blockquote {\n border-left: 3px solid var(--jp-border-color2);\n padding-left: 8px;\n margin: 4px 0;\n color: var(--jp-ui-font-color2);\n font-style: italic;\n}\n\n/* Adjust floating box height when source is expanded */\n.sage-ai-step-floating-box.visible {\n display: flex;\n gap: 8px;\n max-height: none;\n flex-wrap: wrap;\n}\n\n.sage-ai-step-floating-box.visible .content {\n flex: 1;\n min-width: 200px;\n}\n\n.sage-ai-step-floating-box.visible .source-section {\n flex-basis: 100%;\n}\n\n/* Diff2Html overrides */\n.d2h-code-line {\n padding: 0 5em !important;\n}\n\n.d2h-code-linenumber {\n width: 4.5em !important;\n backdrop-filter: blur(8px);\n}\n\n.line-num1,\n.line-num2 {\n width: 50% !important;\n text-align: center !important;\n padding: 0 !important;\n}\n\n.hljs-regexp,\n.hljs-string,\n.hljs-meta .hljs-string {\n color: var(--jp-brand-color0) !important;\n}\n\n.hljs {\n color: var(--jp-ui-font-color2) !important;\n}\n\n.sage-ai-waiting-reply-container {\n display: none;\n bottom: 0;\n margin: 8px 0 0;\n font-size: 12px;\n padding: 12px;\n /*color: rgb(238 196 70 / 100%);*/\n border-radius: 12px;\n /*border: 1px solid rgb(238 196 70 / 50%);*/\n text-align: center;\n /*box-shadow: 0 2px 8px rgb(0 0 0 / 10%);*/\n /*backdrop-filter: blur(8px);*/\n background: transparent;\n}\n\n[data-jp-theme-light='false'] .sage-ai-waiting-reply-container {\n /*background: var(--BG-main, #111);*/\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-waiting-reply-container.visible {\n display: block;\n}\n\n.sage-ai-waiting-reply-text {\n margin-bottom: 2px;\n font-weight: 500;\n}\n\n.sage-ai-continue-button {\n background-color: transparent;\n color: white;\n padding: 6px;\n border-radius: 4px !important;\n border: 1px solid #383838 !important;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n margin-top: 6px;\n transition: all 0.2s ease;\n}\n\n.sage-ai-continue-button.hidden {\n display: none;\n}\n\n.sage-ai-continue-button:hover {\n background-color: transparent;\n transform: translateY(-1px);\n box-shadow: 0 4px 8px rgb(0 0 0 / 15%);\n}\n\n.sage-ai-continue-button:active {\n transform: translateY(1px);\n}\n\n.sage-ai-prompt-buttons-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 12px;\n}\n\n[data-jp-theme-light='false'] .sage-ai-prompt-button {\n color: white !important;\n}\n\n.sage-ai-prompt-button {\n background-color: transparent;\n padding: 8px 12px;\n border-radius: 6px !important;\n border: 1px solid #383838 !important;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n text-align: left;\n min-height: 32px;\n white-space: normal;\n word-wrap: break-word;\n}\n\n.sage-ai-prompt-button:hover {\n background-color: transparent;\n transform: translateY(-1px);\n box-shadow: 0 4px 8px rgb(0 0 0 / 15%);\n}\n\n.sage-ai-prompt-button:active {\n transform: translateY(1px);\n}\n\n.cm-editor:has(+ .jp-DiffOverlay) {\n display: none !important;\n}\n\n.jp-InputArea:has(.jp-DiffOverlay.sage-ai-quick-gen-diff-overlay) {\n display: block !important;\n}\n\n.hljs-subst {\n color: #9bb8d4 !important;\n}\n",""]);const s=r},8789:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,"/* Modal dialog styling */\n.sage-ai-modal {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0,0,0,0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n}\n\n.sage-ai-dialog {\n background-color: var(--jp-layout-color1);\n padding: 20px;\n border-radius: 5px;\n width: 50%;\n max-width: 500px;\n box-sizing: border-box;\n}\n\n/* Override width for snippet form modal */\n.sage-ai-dialog.sage-ai-snippet-form-modal {\n width: 90%;\n max-width: 600px;\n}\n\n/* Custom styling for snippet modal in dark mode */\n[data-jp-theme-name='JupyterLab Dark'] .sage-ai-custom-snippet-modal .modal-content {\n border-radius: 12px;\n border: 1px solid var(--Border-Border, #383838);\n background: var(--BG-main, #111);\n box-shadow: 0 8px 17.1px 0 rgba(208, 208, 208, 0.09);\n}\n\n/* Custom styling for form inputs in snippet modal - dark mode only */\n[data-jp-theme-name='JupyterLab Dark'] .sage-ai-custom-snippet-modal .form-control {\n border-radius: 8px;\n border: 0.8px solid var(--Border-Border, #383838);\n background: var(--Prompt-box-bg-default, #141414);\n}\n\n.sage-ai-dialog-title {\n margin-top: 0;\n}\n\n.sage-ai-dialog-label {\n display: block;\n margin: 10px 0;\n}\n\n/* Checkbox styling consistent with the autorun checkbox */\n.sage-ai-dialog-checkbox-container {\n display: flex;\n align-items: center;\n margin: 15px 0;\n}\n\n.sage-ai-dialog-checkbox {\n margin-right: 8px;\n cursor: pointer;\n}\n\n.sage-ai-dialog-checkbox-label {\n font-size: var(--jp-ui-font-size1);\n color: var(--jp-ui-font-color1);\n cursor: pointer;\n user-select: none;\n}\n\n.sage-ai-dialog-textarea {\n width: 100%;\n height: 100px;\n margin-bottom: 15px;\n padding: 8px;\n box-sizing: border-box;\n}\n\n.sage-ai-dialog-button-container {\n display: flex;\n justify-content: flex-end;\n}\n\n.sage-ai-dialog-submit-button {\n padding: 8px 16px;\n background-color: var(--jp-brand-color1);\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n}\n\n/* Revert-and-send button styling in modal context */\n.sage-ai-revert-send-button-modal {\n padding: 8px 16px;\n background-color: var(--jp-warn-color1);\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n margin-right: 10px;\n}\n\n.sage-ai-revert-send-button-modal:hover {\n background-color: var(--jp-warn-color0);\n}\n\n.sage-ai-revert-send-button-modal:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n/* Code confirmation styling */\n.sage-ai-code-confirmation {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px;\n margin: 15px 0;\n border: 2px solid var(--jp-border-color1);\n border-radius: 8px;\n background-color: var(--jp-layout-color2);\n}\n\n.sage-ai-confirmation-button-container {\n display: flex;\n gap: 4px;\n}\n\n.sage-ai-reject-button {\n padding: 8px 16px;\n background-color: var(--jp-warn-color1);\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n}\n\n.sage-ai-confirm-button {\n padding: 8px 16px;\n background-color: var(--jp-brand-color1);\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n}\n\n/* Post-cancellation dialog styling */\n.sage-ai-post-cancel-dialog {\n padding: 15px;\n margin: 15px 0;\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n background-color: var(--jp-layout-color1);\n text-align: center;\n}\n\n.sage-ai-post-cancel-heading {\n margin: 0 0 15px 0;\n color: var(--jp-ui-font-color1);\n font-weight: bold;\n}\n\n/* Thread selector dropdown styling - additional styles */\n.sage-ai-thread-dropdown-container {\n position: relative;\n display: inline-block;\n}\n\n.sage-ai-thread-dropdown-header {\n border-bottom: 1px solid var(--jp-border-color1);\n padding: 8px 12px;\n font-weight: bold;\n color: var(--jp-ui-font-color0);\n}\n\n.sage-ai-thread-dropdown-footer {\n border-top: 1px solid var(--jp-border-color1);\n padding: 8px 12px;\n text-align: center;\n}\n\n.sage-ai-thread-dropdown-empty {\n padding: 12px;\n font-style: italic;\n color: var(--jp-ui-font-color2);\n text-align: center;\n}\n\n/* Enhanced button styling for thread items */\n.sage-ai-thread-item-button {\n background: none;\n border: none;\n color: var(--jp-warn-color1);\n cursor: pointer;\n padding: 2px 4px;\n font-size: var(--jp-ui-font-size0);\n visibility: hidden;\n float: right;\n}\n\n.sage-ai-thread-item:hover .sage-ai-thread-item-button {\n visibility: visible;\n}\n\n.sage-ai-thread-item-button:hover {\n color: var(--jp-warn-color0);\n background-color: var(--jp-warn-color3);\n border-radius: 2px;\n}\n\n/* Context display styling */\n.sage-ai-context-display {\n margin: 15px 0;\n padding: 12px;\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n background-color: var(--jp-layout-color0);\n}\n\n.sage-ai-context-display-header {\n font-weight: bold;\n color: var(--jp-ui-font-color0);\n margin-bottom: 8px;\n font-size: var(--jp-ui-font-size1);\n}\n\n.sage-ai-context-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n border-bottom: 1px solid var(--jp-border-color2);\n}\n\n.sage-ai-context-item:last-child {\n border-bottom: none;\n}\n\n.sage-ai-context-item-icon {\n font-size: 14px;\n width: 20px;\n text-align: center;\n}\n\n.sage-ai-context-item-info {\n flex: 1;\n}\n\n.sage-ai-context-item-name {\n font-weight: 500;\n color: var(--jp-ui-font-color0);\n font-size: var(--jp-ui-font-size0);\n}\n\n.sage-ai-context-item-preview {\n color: var(--jp-ui-font-color2);\n font-size: var(--jp-ui-font-size0);\n font-style: italic;\n}\n\n.sage-ai-context-empty {\n color: var(--jp-ui-font-color2);\n font-style: italic;\n text-align: center;\n padding: 8px;\n}\n\n[data-jp-theme-name='JupyterLab Dark'] .form-control {\n border-radius: 8px;\nborder: 0.8px solid var(--Border-Border, #383838);\nbackground: var(--Prompt-box-bg-default, #141414);\ncolor: var(--Text-text-secondary, #949494) !important;\n\n/* Subtle/Medium */\nfont-family: Geist;\nfont-size: 13px;\nfont-style: normal;\nfont-weight: 500;\nline-height: 155%; /* 20.15px */\n}\n",""]);const s=r},9508:(n,o,e)=>{e.d(o,{A:()=>s});var a=e(1601),t=e.n(a),i=e(6314),r=e.n(i)()(t());r.push([n.id,".sage-ai-update-banner-widget {\n position: fixed !important;\n top: 40px !important;\n left: 50% !important;\n transform: translateX(-50%) !important;\n width: auto;\n max-width: 500px;\n min-width: 300px;\n z-index: 999999 !important;\n flex-shrink: 0;\n margin: 0 !important;\n padding: 0 !important;\n border: none !important;\n box-sizing: border-box !important;\n pointer-events: auto !important;\n}\n\n.sage-ai-update-banner {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n padding: 12px 16px;\n border-radius: 8px;\n margin-bottom: 0;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);\n animation: slideDown 0.3s ease-out;\n}\n\n.sage-ai-update-banner-content {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.sage-ai-update-banner-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n color: #ffffff;\n opacity: 0.9;\n}\n\n.sage-ai-update-banner-text {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.sage-ai-update-banner-title {\n font-weight: 600;\n font-size: 14px;\n line-height: 1.2;\n}\n\n.sage-ai-update-banner-version {\n font-size: 12px;\n opacity: 0.9;\n line-height: 1.2;\n}\n\n.sage-ai-update-banner-actions {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.sage-ai-update-banner-button {\n padding: 6px 12px;\n border: none;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.sage-ai-update-banner-button:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n}\n\n.sage-ai-update-banner-button-update {\n background: #ffffff;\n color: #667eea;\n}\n\n.sage-ai-update-banner-button-update:hover {\n background: #f8f9fa;\n}\n\n.sage-ai-update-banner-button-later {\n background: rgba(255, 255, 255, 0.2);\n color: #ffffff;\n border: 1px solid rgba(255, 255, 255, 0.3);\n}\n\n.sage-ai-update-banner-button-later:hover {\n background: rgba(255, 255, 255, 0.3);\n}\n\n.sage-ai-update-banner-button-decline {\n background: transparent;\n color: #ffffff;\n border: 1px solid rgba(255, 255, 255, 0.3);\n}\n\n.sage-ai-update-banner-button-decline:hover {\n background: rgba(255, 255, 255, 0.1);\n}\n\n.sage-ai-update-banner-progress {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #ffffff;\n font-size: 13px;\n}\n\n.sage-ai-update-banner-spinner {\n width: 16px;\n height: 16px;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-top: 2px solid #ffffff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n.sage-ai-update-banner-description {\n font-size: 12px;\n opacity: 0.9;\n color: #ffffff;\n margin-top: 2px;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Responsive adjustments */\n@media (max-width: 768px) {\n .sage-ai-update-banner-widget {\n left: 50% !important;\n right: auto !important;\n transform: translateX(-50%) !important;\n max-width: calc(100vw - 40px) !important;\n min-width: auto;\n margin: 0 20px !important;\n }\n\n .sage-ai-update-banner-content {\n flex-direction: column;\n align-items: flex-start;\n gap: 8px;\n }\n\n .sage-ai-update-banner-actions {\n align-self: stretch;\n justify-content: space-between;\n }\n\n .sage-ai-update-banner-button {\n flex: 1;\n text-align: center;\n }\n}\n",""]);const s=r}}]);
|